feat: fix no max_tokens in payload when calling openai vision model

This commit is contained in:
butterfly 2024-04-08 18:29:08 +08:00
parent 264da6798c
commit 9b982b408d
1 changed files with 30 additions and 11 deletions

View File

@ -40,6 +40,20 @@ export interface OpenAIListModelResponse {
}>; }>;
} }
interface RequestPayload {
messages: {
role: "system" | "user" | "assistant";
content: string | MultimodalContent[];
}[];
stream?: boolean;
model: string;
temperature: number;
presence_penalty: number;
frequency_penalty: number;
top_p: number;
max_tokens?: number;
}
export class ChatGPTApi implements LLMApi { export class ChatGPTApi implements LLMApi {
private disableListModels = true; private disableListModels = true;
@ -98,7 +112,7 @@ export class ChatGPTApi implements LLMApi {
}, },
}; };
const requestPayload = { const requestPayload: RequestPayload = {
messages, messages,
stream: options.config.stream, stream: options.config.stream,
model: modelConfig.model, model: modelConfig.model,
@ -112,12 +126,7 @@ export class ChatGPTApi implements LLMApi {
// add max_tokens to vision model // add max_tokens to vision model
if (visionModel) { if (visionModel) {
Object.defineProperty(requestPayload, "max_tokens", { requestPayload["max_tokens"] = Math.max(modelConfig.max_tokens, 4000);
enumerable: true,
configurable: true,
writable: true,
value: modelConfig.max_tokens,
});
} }
console.log("[Request] openai payload: ", requestPayload); console.log("[Request] openai payload: ", requestPayload);
@ -229,7 +238,9 @@ export class ChatGPTApi implements LLMApi {
const text = msg.data; const text = msg.data;
try { try {
const json = JSON.parse(text); const json = JSON.parse(text);
const choices = json.choices as Array<{ delta: { content: string } }>; const choices = json.choices as Array<{
delta: { content: string };
}>;
const delta = choices[0]?.delta?.content; const delta = choices[0]?.delta?.content;
const textmoderation = json?.prompt_filter_results; const textmoderation = json?.prompt_filter_results;
@ -237,9 +248,17 @@ export class ChatGPTApi implements LLMApi {
remainText += delta; remainText += delta;
} }
if (textmoderation && textmoderation.length > 0 && ServiceProvider.Azure) { if (
const contentFilterResults = textmoderation[0]?.content_filter_results; textmoderation &&
console.log(`[${ServiceProvider.Azure}] [Text Moderation] flagged categories result:`, contentFilterResults); textmoderation.length > 0 &&
ServiceProvider.Azure
) {
const contentFilterResults =
textmoderation[0]?.content_filter_results;
console.log(
`[${ServiceProvider.Azure}] [Text Moderation] flagged categories result:`,
contentFilterResults,
);
} }
} catch (e) { } catch (e) {
console.error("[Request] parse error", text, msg); console.error("[Request] parse error", text, msg);