fix(ai): normalize replayed responses tool call ids closes #2328
This commit is contained in:
@@ -91,21 +91,22 @@ export function convertResponsesMessages<TApi extends Api>(
|
|||||||
): ResponseInput {
|
): ResponseInput {
|
||||||
const messages: ResponseInput = [];
|
const messages: ResponseInput = [];
|
||||||
|
|
||||||
|
const normalizeIdPart = (part: string): string => {
|
||||||
|
const sanitized = part.replace(/[^a-zA-Z0-9_-]/g, "_");
|
||||||
|
const normalized = sanitized.length > 64 ? sanitized.slice(0, 64) : sanitized;
|
||||||
|
return normalized.replace(/_+$/, "");
|
||||||
|
};
|
||||||
|
|
||||||
const normalizeToolCallId = (id: string): string => {
|
const normalizeToolCallId = (id: string): string => {
|
||||||
if (!allowedToolCallProviders.has(model.provider)) return id;
|
if (!allowedToolCallProviders.has(model.provider)) return normalizeIdPart(id);
|
||||||
if (!id.includes("|")) return id;
|
if (!id.includes("|")) return normalizeIdPart(id);
|
||||||
const [callId, itemId] = id.split("|");
|
const [callId, itemId] = id.split("|");
|
||||||
const sanitizedCallId = callId.replace(/[^a-zA-Z0-9_-]/g, "_");
|
const normalizedCallId = normalizeIdPart(callId);
|
||||||
let sanitizedItemId = itemId.replace(/[^a-zA-Z0-9_-]/g, "_");
|
let normalizedItemId = normalizeIdPart(itemId);
|
||||||
// OpenAI Responses API requires item id to start with "fc"
|
// OpenAI Responses API requires item id to start with "fc"
|
||||||
if (!sanitizedItemId.startsWith("fc")) {
|
if (!normalizedItemId.startsWith("fc")) {
|
||||||
sanitizedItemId = `fc_${sanitizedItemId}`;
|
normalizedItemId = normalizeIdPart(`fc_${normalizedItemId}`);
|
||||||
}
|
}
|
||||||
// Truncate to 64 chars and strip trailing underscores (OpenAI Codex rejects them)
|
|
||||||
let normalizedCallId = sanitizedCallId.length > 64 ? sanitizedCallId.slice(0, 64) : sanitizedCallId;
|
|
||||||
let normalizedItemId = sanitizedItemId.length > 64 ? sanitizedItemId.slice(0, 64) : sanitizedItemId;
|
|
||||||
normalizedCallId = normalizedCallId.replace(/_+$/, "");
|
|
||||||
normalizedItemId = normalizedItemId.replace(/_+$/, "");
|
|
||||||
return `${normalizedCallId}|${normalizedItemId}`;
|
return `${normalizedCallId}|${normalizedItemId}`;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user