Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions packages/types/src/provider-settings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import {
qwenCodeModels,
rooModels,
sambaNovaModels,
siliconCloudModels,
vertexModels,
vscodeLlmModels,
xaiModels,
Expand Down Expand Up @@ -135,6 +136,7 @@ export const providerNames = [
"qwen-code",
"roo",
"sambanova",
"siliconcloud",
"vertex",
"xai",
"zai",
Expand Down Expand Up @@ -377,6 +379,15 @@ const sambaNovaSchema = apiModelIdProviderModelSchema.extend({
sambaNovaApiKey: z.string().optional(),
})

export const siliconCloudApiLineSchema = z.enum(["china", "china-overseas", "international"])

export type SiliconCloudApiLine = z.infer<typeof siliconCloudApiLineSchema>

const siliconCloudSchema = apiModelIdProviderModelSchema.extend({
siliconCloudApiKey: z.string().optional(),
siliconCloudApiLine: siliconCloudApiLineSchema.optional(),
})

export const zaiApiLineSchema = z.enum(["international_coding", "international", "china_coding", "china"])

export type ZaiApiLine = z.infer<typeof zaiApiLineSchema>
Expand Down Expand Up @@ -446,6 +457,7 @@ export const providerSettingsSchemaDiscriminated = z.discriminatedUnion("apiProv
litellmSchema.merge(z.object({ apiProvider: z.literal("litellm") })),
cerebrasSchema.merge(z.object({ apiProvider: z.literal("cerebras") })),
sambaNovaSchema.merge(z.object({ apiProvider: z.literal("sambanova") })),
siliconCloudSchema.merge(z.object({ apiProvider: z.literal("siliconcloud") })),
zaiSchema.merge(z.object({ apiProvider: z.literal("zai") })),
fireworksSchema.merge(z.object({ apiProvider: z.literal("fireworks") })),
featherlessSchema.merge(z.object({ apiProvider: z.literal("featherless") })),
Expand Down Expand Up @@ -487,6 +499,7 @@ export const providerSettingsSchema = z.object({
...litellmSchema.shape,
...cerebrasSchema.shape,
...sambaNovaSchema.shape,
...siliconCloudSchema.shape,
...zaiSchema.shape,
...fireworksSchema.shape,
...featherlessSchema.shape,
Expand Down Expand Up @@ -573,6 +586,7 @@ export const modelIdKeysByProvider: Record<TypicalProvider, ModelIdKey> = {
huggingface: "huggingFaceModelId",
cerebras: "apiModelId",
sambanova: "apiModelId",
siliconcloud: "apiModelId",
zai: "apiModelId",
fireworks: "apiModelId",
featherless: "apiModelId",
Expand Down Expand Up @@ -683,6 +697,7 @@ export const MODELS_BY_PROVIDER: Record<
label: "SambaNova",
models: Object.keys(sambaNovaModels),
},
siliconcloud: { id: "siliconcloud", label: "SiliconCloud", models: Object.keys(siliconCloudModels) },
vertex: {
id: "vertex",
label: "GCP Vertex AI",
Expand Down
1 change: 1 addition & 0 deletions packages/types/src/providers/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ export * from "./qwen-code.js"
export * from "./requesty.js"
export * from "./roo.js"
export * from "./sambanova.js"
export * from "./siliconcloud.js"
export * from "./unbound.js"
export * from "./vertex.js"
export * from "./vscode-llm.js"
Expand Down
229 changes: 229 additions & 0 deletions packages/types/src/providers/siliconcloud.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,229 @@
import type { ModelInfo } from "../model.js"
import type { SiliconCloudApiLine } from "../provider-settings.js"

export const siliconCloudDefaultModelId = "zai-org/GLM-4.6"

export const siliconCloudApiLineConfigs = {
china: { name: "国内版", baseUrl: "https://api.siliconflow.cn/v1" },
"china-overseas": { name: "国内版(海外访问)", baseUrl: "https://api-st.siliconflow.cn/v1" },
international: { name: "国际版", baseUrl: "https://api.siliconflow.com/v1" },
} satisfies Record<SiliconCloudApiLine, { name: string; baseUrl: string }>

const siliconCloudChinaModels: Record<string, ModelInfo> = {
"Pro/deepseek-ai/DeepSeek-V3.1-Terminus": {
contextWindow: 163840,
maxTokens: 8192,
supportsImages: false,
supportsPromptCache: false,
inputPrice: 0.14,
outputPrice: 0.28,
supportsReasoningBudget: true,
},
"zai-org/GLM-4.6": {
contextWindow: 131072,
maxTokens: 8192,
supportsImages: false,
supportsPromptCache: false,
inputPrice: 0,
outputPrice: 0,
supportsReasoningBudget: true,
},
"Qwen/QwQ-32B-Preview": {
contextWindow: 32768,
maxTokens: 32768,
supportsImages: false,
supportsPromptCache: false,
inputPrice: 0,
outputPrice: 0,
supportsReasoningBudget: true,
},
"Qwen/Qwen2.5-Coder-32B-Instruct": {
contextWindow: 131072,
maxTokens: 8192,
supportsImages: false,
supportsPromptCache: false,
inputPrice: 0,
outputPrice: 0,
},
"deepseek-ai/DeepSeek-V2.5": {
contextWindow: 131072,
maxTokens: 8192,
supportsImages: false,
supportsPromptCache: false,
inputPrice: 0.14,
outputPrice: 0.28,
},
"deepseek-ai/DeepSeek-Coder-V2-Instruct": {
contextWindow: 131072,
maxTokens: 8192,
supportsImages: false,
supportsPromptCache: false,
inputPrice: 0.14,
outputPrice: 0.28,
},
"Qwen/Qwen2.5-72B-Instruct": {
contextWindow: 131072,
maxTokens: 8192,
supportsImages: false,
supportsPromptCache: false,
inputPrice: 0.35,
outputPrice: 1.4,
},
"meta-llama/Meta-Llama-3.1-70B-Instruct": {
contextWindow: 131072,
maxTokens: 8192,
supportsImages: false,
supportsPromptCache: false,
inputPrice: 0.35,
outputPrice: 0.42,
},
"meta-llama/Meta-Llama-3.1-405B-Instruct": {
contextWindow: 131072,
maxTokens: 8192,
supportsImages: false,
supportsPromptCache: false,
inputPrice: 2.1,
outputPrice: 2.1,
},
"google/gemma-2-27b-it": {
contextWindow: 8192,
maxTokens: 8192,
supportsImages: false,
supportsPromptCache: false,
inputPrice: 0.14,
outputPrice: 0.28,
},
"01-ai/Yi-1.5-34B-Chat-16K": {
contextWindow: 16384,
maxTokens: 4096,
supportsImages: false,
supportsPromptCache: false,
inputPrice: 0.14,
outputPrice: 0.84,
},
"internlm/internlm2_5-20b-chat": {
contextWindow: 32768,
maxTokens: 8192,
supportsImages: false,
supportsPromptCache: false,
inputPrice: 0.14,
outputPrice: 0.28,
},
}

const siliconCloudChinaOverseasModels: Record<string, ModelInfo> = {
...siliconCloudChinaModels,
}

const siliconCloudInternationalModels: Record<string, ModelInfo> = {
"Pro/deepseek-ai/DeepSeek-V3.1-Terminus": {
contextWindow: 163840,
maxTokens: 8192,
supportsImages: false,
supportsPromptCache: false,
inputPrice: 0.02,
outputPrice: 0.04,
supportsReasoningBudget: true,
},
"zai-org/GLM-4.6": {
contextWindow: 131072,
maxTokens: 8192,
supportsImages: false,
supportsPromptCache: false,
inputPrice: 0,
outputPrice: 0,
supportsReasoningBudget: true,
},
"Qwen/QwQ-32B-Preview": {
contextWindow: 32768,
maxTokens: 32768,
supportsImages: false,
supportsPromptCache: false,
inputPrice: 0,
outputPrice: 0,
supportsReasoningBudget: true,
},
"Qwen/Qwen2.5-Coder-32B-Instruct": {
contextWindow: 131072,
maxTokens: 8192,
supportsImages: false,
supportsPromptCache: false,
inputPrice: 0,
outputPrice: 0,
},
"deepseek-ai/DeepSeek-V2.5": {
contextWindow: 131072,
maxTokens: 8192,
supportsImages: false,
supportsPromptCache: false,
inputPrice: 0.02,
outputPrice: 0.04,
},
"deepseek-ai/DeepSeek-Coder-V2-Instruct": {
contextWindow: 131072,
maxTokens: 8192,
supportsImages: false,
supportsPromptCache: false,
inputPrice: 0.02,
outputPrice: 0.04,
},
"Qwen/Qwen2.5-72B-Instruct": {
contextWindow: 131072,
maxTokens: 8192,
supportsImages: false,
supportsPromptCache: false,
inputPrice: 0.05,
outputPrice: 0.2,
},
"meta-llama/Meta-Llama-3.1-70B-Instruct": {
contextWindow: 131072,
maxTokens: 8192,
supportsImages: false,
supportsPromptCache: false,
inputPrice: 0.05,
outputPrice: 0.06,
},
"meta-llama/Meta-Llama-3.1-405B-Instruct": {
contextWindow: 131072,
maxTokens: 8192,
supportsImages: false,
supportsPromptCache: false,
inputPrice: 0.3,
outputPrice: 0.3,
},
"google/gemma-2-27b-it": {
contextWindow: 8192,
maxTokens: 8192,
supportsImages: false,
supportsPromptCache: false,
inputPrice: 0.02,
outputPrice: 0.04,
},
"01-ai/Yi-1.5-34B-Chat-16K": {
contextWindow: 16384,
maxTokens: 4096,
supportsImages: false,
supportsPromptCache: false,
inputPrice: 0.02,
outputPrice: 0.12,
},
"internlm/internlm2_5-20b-chat": {
contextWindow: 32768,
maxTokens: 8192,
supportsImages: false,
supportsPromptCache: false,
inputPrice: 0.02,
outputPrice: 0.04,
},
}

export const siliconCloudModelsByApiLine = {
china: siliconCloudChinaModels,
"china-overseas": siliconCloudChinaOverseasModels,
international: siliconCloudInternationalModels,
} satisfies Record<SiliconCloudApiLine, Record<string, ModelInfo>>

// Export all models for the default list
export const siliconCloudModels = siliconCloudChinaModels

export type SiliconCloudModelId = keyof typeof siliconCloudModels
Comment on lines +226 to +229
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P2] Type-safety/UX: SiliconCloudModelId only includes China models, but you expose different model sets per apiLine. Unify the default list so static selectors and types cover all regions.

suggestion

Suggested change
// Export all models for the default list
export const siliconCloudModels = siliconCloudChinaModels
export type SiliconCloudModelId = keyof typeof siliconCloudModels
// Export all models for the default list (union across regions)
export const siliconCloudModels = {
...siliconCloudChinaModels,
...siliconCloudChinaOverseasModels,
...siliconCloudInternationalModels,
}
export type SiliconCloudModelId = keyof typeof siliconCloudModels

3 changes: 3 additions & 0 deletions src/api/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ import {
ClaudeCodeHandler,
QwenCodeHandler,
SambaNovaHandler,
SiliconCloudHandler,
IOIntelligenceHandler,
DoubaoHandler,
ZAiHandler,
Expand Down Expand Up @@ -151,6 +152,8 @@ export function buildApiHandler(configuration: ProviderSettings): ApiHandler {
return new CerebrasHandler(options)
case "sambanova":
return new SambaNovaHandler(options)
case "siliconcloud":
return new SiliconCloudHandler(options)
case "zai":
return new ZAiHandler(options)
case "fireworks":
Expand Down
1 change: 1 addition & 0 deletions src/api/providers/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ export { OpenRouterHandler } from "./openrouter"
export { QwenCodeHandler } from "./qwen-code"
export { RequestyHandler } from "./requesty"
export { SambaNovaHandler } from "./sambanova"
export { SiliconCloudHandler } from "./siliconcloud"
export { UnboundHandler } from "./unbound"
export { VertexHandler } from "./vertex"
export { VsCodeLmHandler } from "./vscode-lm"
Expand Down
Loading
Loading