添加模型支持,更新提示功能以接收模型参数
This commit is contained in:
+27
-1
@@ -8,9 +8,17 @@ import { type OpencodeRuntimeAdapter } from "../runtime/opencode.js";
|
|||||||
import { type ChatSessionBridge } from "../chat/sessionBridge.js";
|
import { type ChatSessionBridge } from "../chat/sessionBridge.js";
|
||||||
import { writeLlmRequestAuditLog } from "../audit/llmRequestAudit.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({
|
const payloadSchema = z.object({
|
||||||
message: z.string().min(1).max(10000),
|
message: z.string().min(1).max(10000),
|
||||||
session_id: z.string().max(128).optional(),
|
session_id: z.string().max(128).optional(),
|
||||||
|
model: z.enum(supportedModels).optional(),
|
||||||
});
|
});
|
||||||
|
|
||||||
const abortPayloadSchema = z.object({
|
const abortPayloadSchema = z.object({
|
||||||
@@ -169,6 +177,7 @@ export const buildChatRouter = (
|
|||||||
clientSessionId: requestContext.clientSessionId,
|
clientSessionId: requestContext.clientSessionId,
|
||||||
sessionId: binding.sessionId,
|
sessionId: binding.sessionId,
|
||||||
created,
|
created,
|
||||||
|
model: parsed.data.model,
|
||||||
traceId: requestContext.traceId,
|
traceId: requestContext.traceId,
|
||||||
projectId: requestContext.projectId,
|
projectId: requestContext.projectId,
|
||||||
},
|
},
|
||||||
@@ -207,6 +216,7 @@ export const buildChatRouter = (
|
|||||||
opencodeSessionId: binding.sessionId,
|
opencodeSessionId: binding.sessionId,
|
||||||
clientSessionId,
|
clientSessionId,
|
||||||
message: preparedMessage,
|
message: preparedMessage,
|
||||||
|
model: parsed.data.model,
|
||||||
traceId: requestContext.traceId,
|
traceId: requestContext.traceId,
|
||||||
projectId: requestContext.projectId,
|
projectId: requestContext.projectId,
|
||||||
signal: abortController.signal,
|
signal: abortController.signal,
|
||||||
@@ -329,11 +339,26 @@ const extractSkillAuditInfo = (event: OpencodeEvent) => {
|
|||||||
const hasToolParams = (params: Record<string, unknown>) =>
|
const hasToolParams = (params: Record<string, unknown>) =>
|
||||||
Object.keys(params).length > 0;
|
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 = {
|
type StreamPromptOptions = {
|
||||||
runtime: OpencodeRuntimeAdapter;
|
runtime: OpencodeRuntimeAdapter;
|
||||||
opencodeSessionId: string;
|
opencodeSessionId: string;
|
||||||
clientSessionId: string;
|
clientSessionId: string;
|
||||||
message: string;
|
message: string;
|
||||||
|
model?: SupportedModel;
|
||||||
traceId?: string;
|
traceId?: string;
|
||||||
projectId?: string;
|
projectId?: string;
|
||||||
signal?: AbortSignal;
|
signal?: AbortSignal;
|
||||||
@@ -355,6 +380,7 @@ const streamPromptResponse = async ({
|
|||||||
opencodeSessionId,
|
opencodeSessionId,
|
||||||
clientSessionId,
|
clientSessionId,
|
||||||
message,
|
message,
|
||||||
|
model,
|
||||||
traceId,
|
traceId,
|
||||||
projectId,
|
projectId,
|
||||||
signal,
|
signal,
|
||||||
@@ -437,7 +463,7 @@ const streamPromptResponse = async ({
|
|||||||
});
|
});
|
||||||
|
|
||||||
const promptPromise = runtime
|
const promptPromise = runtime
|
||||||
.prompt(opencodeSessionId, message)
|
.prompt(opencodeSessionId, message, toRuntimeModel(model))
|
||||||
.then(() => {
|
.then(() => {
|
||||||
promptSettled = true;
|
promptSettled = true;
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -12,6 +12,11 @@ export type RuntimeHealth = {
|
|||||||
version: string;
|
version: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type RuntimeModelOverride = {
|
||||||
|
providerID: string;
|
||||||
|
modelID: string;
|
||||||
|
};
|
||||||
|
|
||||||
export class OpencodeRuntimeAdapter {
|
export class OpencodeRuntimeAdapter {
|
||||||
private clientPromise: Promise<OpencodeClient> | null = null;
|
private clientPromise: Promise<OpencodeClient> | null = null;
|
||||||
private closeServer: (() => void) | null = null;
|
private closeServer: (() => void) | null = null;
|
||||||
@@ -52,10 +57,11 @@ export class OpencodeRuntimeAdapter {
|
|||||||
return this.messages(sessionId);
|
return this.messages(sessionId);
|
||||||
}
|
}
|
||||||
|
|
||||||
async prompt(sessionId: string, text: string) {
|
async prompt(sessionId: string, text: string, model?: RuntimeModelOverride) {
|
||||||
const client = await this.ensureClient();
|
const client = await this.ensureClient();
|
||||||
await client.session.prompt({
|
await client.session.prompt({
|
||||||
sessionID: sessionId,
|
sessionID: sessionId,
|
||||||
|
model,
|
||||||
parts: [{ type: "text", text }],
|
parts: [{ type: "text", text }],
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user