chat也想支持

This commit is contained in:
Sirius
2026-08-05 17:11:55 +08:00
parent 7ec6914872
commit 7dd16e370f
3 changed files with 33 additions and 0 deletions
+20
View File
@@ -18,6 +18,13 @@ export const chatCompletionRequestSchema = z.object({
stream_options: z.object({
include_usage: z.boolean().optional().default(false),
}).strict().optional(),
temperature: z.number().min(0).max(2).nullable().optional(),
max_tokens: z.number().int().positive().nullable().optional(),
max_completion_tokens: z.number().int().positive().nullable().optional(),
top_p: z.number().min(0).max(1).nullable().optional(),
frequency_penalty: z.number().min(-2).max(2).nullable().optional(),
presence_penalty: z.number().min(-2).max(2).nullable().optional(),
n: z.literal(1).nullable().optional(),
}).strict();
export type ChatCompletionRequest = z.infer<typeof chatCompletionRequestSchema>;
@@ -27,6 +34,19 @@ export interface CommandUsage {
outputTokens?: number;
}
const ignoredCompatibilityParameters = [
"temperature",
"max_tokens",
"max_completion_tokens",
"top_p",
"frequency_penalty",
"presence_penalty",
] as const;
export function ignoredChatCompatibilityParameters(request: ChatCompletionRequest): string[] {
return ignoredCompatibilityParameters.filter((key) => request[key] !== undefined);
}
export function normalizeMessages(request: ChatCompletionRequest) {
return request.messages.map((message) => ({
role: message.role,
+10
View File
@@ -12,6 +12,7 @@ import {
buildCommandPrompt,
chatCompletionRequestSchema,
completionResponse,
ignoredChatCompatibilityParameters,
openAIError,
} from "./openai.js";
import { RequestCoordinator } from "./request-coordinator.js";
@@ -123,6 +124,15 @@ export async function createServer(config: BridgeConfig): Promise<BridgeServer>
));
}
const ignoredParameters = ignoredChatCompatibilityParameters(parsed);
if (ignoredParameters.length > 0) {
const parameterList = ignoredParameters.join(",");
reply.raw.setHeader("X-Command-Code-Ignored-Parameters", parameterList);
process.stderr.write(
`警告:Chat Completions 参数 ${parameterList} 已为客户端兼容而接受;Command Code CLI 不支持映射,实际生成不会应用这些参数。\n`,
);
}
const abortController = coordinator.begin();
if (!abortController) {
return reply.status(429).send(openAIError(