添加模型支持,更新提示功能以接收模型参数

This commit is contained in:
2026-05-13 18:12:45 +08:00
parent f58abe8003
commit 61b1018900
2 changed files with 34 additions and 2 deletions
+27 -1
View File
@@ -8,9 +8,17 @@ import { type OpencodeRuntimeAdapter } from "../runtime/opencode.js";
import { type ChatSessionBridge } from "../chat/sessionBridge.js";
import { writeLlmRequestAuditLog } from "../audit/llmRequestAudit.js";
const supportedModels = [
"deepseek/deepseek-v4-flash",
"deepseek/deepseek-v4-pro",
] as const;
type SupportedModel = (typeof supportedModels)[number];
const payloadSchema = z.object({
message: z.string().min(1).max(10000),
session_id: z.string().max(128).optional(),
model: z.enum(supportedModels).optional(),
});
const abortPayloadSchema = z.object({
@@ -169,6 +177,7 @@ export const buildChatRouter = (
clientSessionId: requestContext.clientSessionId,
sessionId: binding.sessionId,
created,
model: parsed.data.model,
traceId: requestContext.traceId,
projectId: requestContext.projectId,
},
@@ -207,6 +216,7 @@ export const buildChatRouter = (
opencodeSessionId: binding.sessionId,
clientSessionId,
message: preparedMessage,
model: parsed.data.model,
traceId: requestContext.traceId,
projectId: requestContext.projectId,
signal: abortController.signal,
@@ -329,11 +339,26 @@ const extractSkillAuditInfo = (event: OpencodeEvent) => {
const hasToolParams = (params: Record<string, unknown>) =>
Object.keys(params).length > 0;
const toRuntimeModel = (model?: SupportedModel) => {
if (!model) {
return undefined;
}
const [providerID, modelID] = model.split("/");
if (!providerID || !modelID) {
return undefined;
}
return {
providerID,
modelID,
};
};
type StreamPromptOptions = {
runtime: OpencodeRuntimeAdapter;
opencodeSessionId: string;
clientSessionId: string;
message: string;
model?: SupportedModel;
traceId?: string;
projectId?: string;
signal?: AbortSignal;
@@ -355,6 +380,7 @@ const streamPromptResponse = async ({
opencodeSessionId,
clientSessionId,
message,
model,
traceId,
projectId,
signal,
@@ -437,7 +463,7 @@ const streamPromptResponse = async ({
});
const promptPromise = runtime
.prompt(opencodeSessionId, message)
.prompt(opencodeSessionId, message, toRuntimeModel(model))
.then(() => {
promptSettled = true;
})
+7 -1
View File
@@ -12,6 +12,11 @@ export type RuntimeHealth = {
version: string;
};
type RuntimeModelOverride = {
providerID: string;
modelID: string;
};
export class OpencodeRuntimeAdapter {
private clientPromise: Promise<OpencodeClient> | null = null;
private closeServer: (() => void) | null = null;
@@ -52,10 +57,11 @@ export class OpencodeRuntimeAdapter {
return this.messages(sessionId);
}
async prompt(sessionId: string, text: string) {
async prompt(sessionId: string, text: string, model?: RuntimeModelOverride) {
const client = await this.ensureClient();
await client.session.prompt({
sessionID: sessionId,
model,
parts: [{ type: "text", text }],
});
}