Skip to content

Commit fc8f478

Browse files
committed
refactor: improve SiliconCloud provider implementation
- Extend BaseOpenAiCompatibleProvider for consistency - Fix type safety issues - Add proper imports
1 parent 2ba90bf commit fc8f478

File tree

1 file changed

+19
-27
lines changed

1 file changed

+19
-27
lines changed

src/api/providers/siliconcloud.ts

Lines changed: 19 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import OpenAI from "openai"
33

44
import {
55
type SiliconCloudModelId,
6+
type ModelInfo,
67
siliconCloudDefaultModelId,
78
siliconCloudModelsByApiLine,
89
siliconCloudApiLineConfigs,
@@ -13,42 +14,33 @@ import type { ApiHandlerOptions } from "../../shared/api"
1314
import { ApiStream } from "../transform/stream"
1415
import { convertToOpenAiMessages } from "../transform/openai-format"
1516

16-
import type { ApiHandlerCreateMessageMetadata, SingleCompletionHandler } from "../index"
17-
import { BaseProvider } from "./base-provider"
18-
import { DEFAULT_HEADERS } from "./constants"
17+
import type { ApiHandlerCreateMessageMetadata } from "../index"
18+
import { BaseOpenAiCompatibleProvider } from "./base-openai-compatible-provider"
1919
import { handleOpenAIError } from "./utils/openai-error-handler"
2020

2121
const SILICONCLOUD_DEFAULT_TEMPERATURE = 0
2222

23-
export class SiliconCloudHandler extends BaseProvider implements SingleCompletionHandler {
24-
private client: OpenAI
25-
private options: ApiHandlerOptions
23+
export class SiliconCloudHandler extends BaseOpenAiCompatibleProvider<SiliconCloudModelId> {
2624
private apiLine: SiliconCloudApiLine
27-
private models: Record<string, any>
25+
private models: Record<string, ModelInfo>
2826

2927
constructor(options: ApiHandlerOptions) {
30-
super()
31-
this.options = options
32-
this.apiLine = options.siliconCloudApiLine || "china"
33-
this.models = siliconCloudModelsByApiLine[this.apiLine]
34-
35-
const apiKey = options.siliconCloudApiKey
36-
if (!apiKey) {
37-
throw new Error("SiliconCloud API key is required")
38-
}
39-
40-
const config = siliconCloudApiLineConfigs[this.apiLine]
41-
this.client = new OpenAI({
28+
const apiLine = options.siliconCloudApiLine || "china"
29+
const models = siliconCloudModelsByApiLine[apiLine]
30+
const config = siliconCloudApiLineConfigs[apiLine]
31+
32+
super({
33+
...options,
34+
apiKey: options.siliconCloudApiKey,
35+
providerName: "SiliconCloud",
4236
baseURL: config.baseUrl,
43-
apiKey,
44-
defaultHeaders: DEFAULT_HEADERS,
37+
defaultProviderModelId: siliconCloudDefaultModelId,
38+
providerModels: models,
39+
defaultTemperature: SILICONCLOUD_DEFAULT_TEMPERATURE,
4540
})
46-
}
4741

48-
override getModel() {
49-
const id = (this.options.apiModelId as SiliconCloudModelId) || siliconCloudDefaultModelId
50-
const info = this.models[id] || this.models[siliconCloudDefaultModelId]
51-
return { id, info }
42+
this.apiLine = apiLine
43+
this.models = models
5244
}
5345

5446
override async *createMessage(
@@ -108,7 +100,7 @@ export class SiliconCloudHandler extends BaseProvider implements SingleCompletio
108100
}
109101
}
110102

111-
async completePrompt(prompt: string): Promise<string> {
103+
override async completePrompt(prompt: string): Promise<string> {
112104
const { id: modelId } = this.getModel()
113105

114106
try {

0 commit comments

Comments
 (0)