chat也想支持
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user