Aix: Fix Gemini functionResponse

This commit is contained in:
Enrico Ros
2024-10-16 13:55:08 -07:00
parent 297f93b8ad
commit 677645b81c
4 changed files with 17 additions and 7 deletions
+1 -1
View File
@@ -44,7 +44,7 @@ export const aixRouter = createTRPCRouter({
try {
dispatch = createChatGenerateDispatch(access, model, chatGenerate, streaming);
} catch (error: any) {
chatGenerateTx.setRpcTerminatingIssue('dispatch-prepare', `**[Configuration Issue] ${prettyDialect}**: ${safeErrorString(error) || 'Unknown service preparation error'}`, false);
chatGenerateTx.setRpcTerminatingIssue('dispatch-prepare', `**[AIX Configuration Issue] ${prettyDialect}**: ${safeErrorString(error) || 'Unknown service preparation error'}`, false);
yield* chatGenerateTx.flushParticles();
return; // exit
}
@@ -87,8 +87,10 @@ export function aixToAnthropicMessageCreate(model: AixAPI_Model, chatGenerate: A
// Preemptive error detection with server-side payload validation before sending it upstream
const validated = AnthropicWire_API_Message_Create.Request_schema.safeParse(payload);
if (!validated.success)
throw new Error(`Invalid message sequence for Anthropic models: ${validated.error.errors?.[0]?.message || validated.error.message || validated.error}`);
if (!validated.success) {
console.error('Anthropic: invalid messageCreate payload. Error:', validated.error.message);
throw new Error(`Invalid sequence for Anthropic models: ${validated.error.errors?.[0]?.message || validated.error.message || validated.error}.`);
}
return validated.data;
}
@@ -53,8 +53,10 @@ export function aixToGeminiGenerateContent(model: AixAPI_Model, chatGenerate: Ai
// Preemptive error detection with server-side payload validation before sending it upstream
const validated = GeminiWire_API_Generate_Content.Request_schema.safeParse(payload);
if (!validated.success)
throw new Error(`Invalid message sequence for Gemini models: ${validated.error.errors?.[0]?.message || validated.error.message || validated.error}`);
if (!validated.success) {
console.warn('Gemini: invalid generateContent payload. Error:', validated.error.message);
throw new Error(`Invalid sequence for Gemini models: ${validated.error.errors?.[0]?.message || validated.error.message || validated.error}.`);
}
return validated.data;
}
@@ -159,6 +161,10 @@ function _toGeminiContents(chatSequence: AixMessages_ChatMessage[]): GeminiWire_
console.warn('Gemini: failed to parse (string -> JSON) function response result', e);
functionResponseResponse = { output: toolErrorPrefix + part.response.result };
}
if (Array.isArray(functionResponseResponse)) {
console.warn('toGeminiContents: Gemini requires results of function calls to be objects', { result: functionResponseResponse });
throw new Error('Gemini: unexpected array as function response');
}
} else {
functionResponseResponse = part.response.result;
}
@@ -87,8 +87,10 @@ export function aixToOpenAIChatCompletions(openAIDialect: OpenAIDialects, model:
// Preemptive error detection with server-side payload validation before sending it upstream
const validated = OpenAIWire_API_Chat_Completions.Request_schema.safeParse(payload);
if (!validated.success)
throw new Error(`Invalid message sequence for OpenAI models: ${validated.error.errors?.[0]?.message || validated.error.message || validated.error}`);
if (!validated.success) {
console.warn('OpenAI: invalid chatCompletions payload. Error:', validated.error);
throw new Error(`Invalid sequence for OpenAI models: ${validated.error.errors?.[0]?.message || validated.error.message || validated.error}.`);
}
// if (hotFixUseDeprecatedFunctionCalls)
// validated.data = _fixUseDeprecatedFunctionCalls(validated.data);