llm-to-agent/packages/model-deepseek/src/adapter/deepseek-model-adapter.ts
2026-08-13 16:30:13 +08:00

50 lines
1.2 KiB
TypeScript

import OpenAI from "openai";
import type {
Message,
ModelEvent,
ModelPort,
ModelRequest,
} from "@great-agent/agent-core";
export type DeepSeekModelOptions = Readonly<{
apiKey: string;
baseURL: string;
model: string;
}>;
export class DeepSeekModelAdapter implements ModelPort {
private readonly client: OpenAI;
constructor(private readonly options: DeepSeekModelOptions) {
this.client = new OpenAI({
apiKey: options.apiKey,
baseURL: options.baseURL,
});
}
async *stream(
request: ModelRequest,
signal: AbortSignal,
): AsyncIterable<ModelEvent> {
const response = await this.client.chat.completions.create(
{
model: request.model === "default" ? this.options.model : request.model,
messages: request.messages.map(toModelMessage),
stream: true,
},
{ signal },
);
for await (const chunk of response) {
const delta = chunk.choices[0]?.delta.content;
if (delta) yield { type: "text.delta", delta };
}
yield { type: "response.completed" };
}
}
function toModelMessage(
message: Message,
): OpenAI.Chat.Completions.ChatCompletionMessageParam {
return { role: message.role, content: message.content };
}