@@ -3,6 +3,7 @@ import OpenAI from "openai"
33
44import {
55 type SiliconCloudModelId ,
6+ type ModelInfo ,
67 siliconCloudDefaultModelId ,
78 siliconCloudModelsByApiLine ,
89 siliconCloudApiLineConfigs ,
@@ -13,42 +14,33 @@ import type { ApiHandlerOptions } from "../../shared/api"
1314import { ApiStream } from "../transform/stream"
1415import { 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"
1919import { handleOpenAIError } from "./utils/openai-error-handler"
2020
2121const 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