fix(translator): ESM-safe registry + tool-id pairing + responses max_tokens; add real-creds tests
- translator/index.js: replace require() with static side-effect imports (ESM-safe), lazy-init registry maps to survive circular import order - openai-responses->openai: map max_output_tokens -> max_tokens (avoid leaking field upstream) - gemini/antigravity -> openai: derive deterministic tool_call id from name so functionCall/functionResponse pair correctly (fixes provider tool-pairing 400s) - add offline unit tests (finish-reason, usage, session-manager, ollama malformed args, const guard) - add real-creds integration tests (provider-cases + all-formats matrix: 6 inbound formats x 4 scenarios) Includes co-located provider registry refactor (pricing/capabilities/media providers) and sessionManager updates. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -97,8 +97,10 @@ function convertGeminiContent(content) {
|
||||
}
|
||||
|
||||
if (part.functionCall) {
|
||||
// Gemini lacks a native call id; derive a deterministic one from the name so the
|
||||
// matching functionResponse maps to the same tool_call_id (providers require pairing).
|
||||
toolCalls.push({
|
||||
id: `call_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`,
|
||||
id: part.functionCall.id || `call_${part.functionCall.name}`,
|
||||
type: OPENAI_BLOCK.FUNCTION,
|
||||
function: {
|
||||
name: part.functionCall.name,
|
||||
@@ -110,7 +112,7 @@ function convertGeminiContent(content) {
|
||||
if (part.functionResponse) {
|
||||
return {
|
||||
role: ROLE.TOOL,
|
||||
tool_call_id: part.functionResponse.id || part.functionResponse.name,
|
||||
tool_call_id: part.functionResponse.id || `call_${part.functionResponse.name}`,
|
||||
content: JSON.stringify(part.functionResponse.response?.result || part.functionResponse.response || {})
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user