fix: update DeepSeek, Doubao, and Moonshot handlers to extend OpenAIChatCompletionsHandler

These handlers now properly extend from OpenAIChatCompletionsHandler instead of OpenAiHandler
to maintain compatibility with the new architecture
This commit is contained in:
Roo Code 2025-09-23 02:19:32 +00:00
parent 95e4c12873
commit f37dd4d97f
4 changed files with 29 additions and 13 deletions

View file

@ -5,9 +5,11 @@ import type { ApiHandlerOptions } from "../../shared/api"
import type { ApiStreamUsageChunk } from "../transform/stream"
import { getModelParams } from "../transform/model-params"
import { OpenAiHandler } from "./openai"
import { OpenAIChatCompletionsHandler } from "./openai-chat-completions"
export class DeepSeekHandler extends OpenAIChatCompletionsHandler {
private deepSeekOptions: ApiHandlerOptions
export class DeepSeekHandler extends OpenAiHandler {
constructor(options: ApiHandlerOptions) {
super({
...options,
@ -17,12 +19,13 @@ export class DeepSeekHandler extends OpenAiHandler {
openAiStreamingEnabled: true,
includeMaxTokens: true,
})
this.deepSeekOptions = options
}
override getModel() {
const id = this.options.apiModelId ?? deepSeekDefaultModelId
const id = this.deepSeekOptions.apiModelId ?? deepSeekDefaultModelId
const info = deepSeekModels[id as keyof typeof deepSeekModels] || deepSeekModels[deepSeekDefaultModelId]
const params = getModelParams({ format: "openai", modelId: id, model: info, settings: this.options })
const params = getModelParams({ format: "openai", modelId: id, model: info, settings: this.deepSeekOptions })
return { id, info, ...params }
}

View file

@ -1,4 +1,4 @@
import { OpenAiHandler } from "./openai"
import { OpenAIChatCompletionsHandler } from "./openai-chat-completions"
import type { ApiHandlerOptions } from "../../shared/api"
import { DOUBAO_API_BASE_URL, doubaoDefaultModelId, doubaoModels } from "@roo-code/types"
import { getModelParams } from "../transform/model-params"
@ -49,7 +49,9 @@ interface ChatCompletionChunk {
}
}
export class DoubaoHandler extends OpenAiHandler {
export class DoubaoHandler extends OpenAIChatCompletionsHandler {
private doubaoOptions: ApiHandlerOptions
constructor(options: ApiHandlerOptions) {
super({
...options,
@ -59,12 +61,13 @@ export class DoubaoHandler extends OpenAiHandler {
openAiStreamingEnabled: true,
includeMaxTokens: true,
})
this.doubaoOptions = options
}
override getModel() {
const id = this.options.apiModelId ?? doubaoDefaultModelId
const id = this.doubaoOptions.apiModelId ?? doubaoDefaultModelId
const info = doubaoModels[id as keyof typeof doubaoModels] || doubaoModels[doubaoDefaultModelId]
const params = getModelParams({ format: "openai", modelId: id, model: info, settings: this.options })
const params = getModelParams({ format: "openai", modelId: id, model: info, settings: this.doubaoOptions })
return { id, info, ...params }
}

View file

@ -6,9 +6,11 @@ import type { ApiHandlerOptions } from "../../shared/api"
import type { ApiStreamUsageChunk } from "../transform/stream"
import { getModelParams } from "../transform/model-params"
import { OpenAiHandler } from "./openai"
import { OpenAIChatCompletionsHandler } from "./openai-chat-completions"
export class MoonshotHandler extends OpenAIChatCompletionsHandler {
private moonshotOptions: ApiHandlerOptions
export class MoonshotHandler extends OpenAiHandler {
constructor(options: ApiHandlerOptions) {
super({
...options,
@ -18,12 +20,13 @@ export class MoonshotHandler extends OpenAiHandler {
openAiStreamingEnabled: true,
includeMaxTokens: true,
})
this.moonshotOptions = options
}
override getModel() {
const id = this.options.apiModelId ?? moonshotDefaultModelId
const id = this.moonshotOptions.apiModelId ?? moonshotDefaultModelId
const info = moonshotModels[id as keyof typeof moonshotModels] || moonshotModels[moonshotDefaultModelId]
const params = getModelParams({ format: "openai", modelId: id, model: info, settings: this.options })
const params = getModelParams({ format: "openai", modelId: id, model: info, settings: this.moonshotOptions })
return { id, info, ...params }
}
@ -46,6 +49,6 @@ export class MoonshotHandler extends OpenAiHandler {
modelInfo: ModelInfo,
): void {
// Moonshot uses max_tokens instead of max_completion_tokens
requestOptions.max_tokens = this.options.modelMaxTokens || modelInfo.maxTokens
requestOptions.max_tokens = this.moonshotOptions.modelMaxTokens || modelInfo.maxTokens
}
}

View file

@ -75,6 +75,13 @@ export class OpenAiHandler implements SingleCompletionHandler {
return this.handler.completePrompt(prompt)
}
/**
* Count tokens for the given content
*/
async countTokens(content: any[]): Promise<number> {
return this.handler.countTokens(content)
}
/**
* Get information about which API is being used
*/