💄 style: Update Spark X1.5 model (#10103)

This commit is contained in:
sxjeru
2025-12-04 12:25:56 +08:00
committed by GitHub
parent fcddc568a7
commit d1aca26a69
19 changed files with 383 additions and 223 deletions
+22 -48
View File
@@ -4,47 +4,20 @@ const cerebrasModels: AIChatModelCard[] = [
{
abilities: {
functionCall: true,
},
contextWindowTokens: 32_768,
description: 'Llama 4 Scout:高性能的 Llama 系列模型,适合需高吞吐与低延迟的场景。',
displayName: 'Llama 4 Scout',
id: 'llama-4-scout-17b-16e-instruct',
pricing: {
units: [
{ name: 'textInput', rate: 0.65, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 0.85, strategy: 'fixed', unit: 'millionTokens' },
],
},
type: 'chat',
},
{
abilities: {
functionCall: true,
},
contextWindowTokens: 32_768,
description: 'Llama 3.1 8B:小体量、低延迟的 Llama 变体,适合轻量在线推理与交互场景。',
displayName: 'Llama 3.1 8B',
id: 'llama3.1-8b',
pricing: {
units: [
{ name: 'textInput', rate: 0.1, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 0.1, strategy: 'fixed', unit: 'millionTokens' },
],
},
type: 'chat',
},
{
abilities: {
functionCall: true,
reasoning: true,
structuredOutput: true,
},
contextWindowTokens: 131_072,
description: 'Llama 3.3 70B:中大型 Llama 模型,兼顾推理能力与吞吐。',
displayName: 'Llama 3.3 70B',
id: 'llama-3.3-70b',
description:
'在编程与推理任务上表现优良,支持流式与工具调用,适合 agentic 编码与复杂推理场景。',
displayName: 'GLM-4.6',
enabled: true,
id: 'zai-glm-4.6',
maxOutput: 40_000,
pricing: {
units: [
{ name: 'textInput', rate: 0.85, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 1.2, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textInput', rate: 2.25, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 2.75, strategy: 'fixed', unit: 'millionTokens' },
],
},
type: 'chat',
@@ -103,15 +76,16 @@ const cerebrasModels: AIChatModelCard[] = [
},
{
abilities: {
reasoning: true,
functionCall: true,
},
contextWindowTokens: 131_072,
displayName: 'Qwen 3 235B Thinking',
id: 'qwen-3-235b-a22b-thinking-2507',
description: 'Llama 3.3 70B:中大型 Llama 模型,兼顾推理能力与吞吐。',
displayName: 'Llama 3.3 70B',
id: 'llama-3.3-70b',
pricing: {
units: [
{ name: 'textInput', rate: 0.6, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 2.9, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textInput', rate: 0.85, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 1.2, strategy: 'fixed', unit: 'millionTokens' },
],
},
type: 'chat',
@@ -120,14 +94,14 @@ const cerebrasModels: AIChatModelCard[] = [
abilities: {
functionCall: true,
},
contextWindowTokens: 131_072,
description: 'Qwen 3 Coder 480B:面向代码生成与复杂编程任务的长上下文模型。',
displayName: 'Qwen 3 Coder 480B',
id: 'qwen-3-coder-480b',
contextWindowTokens: 32_768,
description: 'Llama 3.1 8B:小体量、低延迟的 Llama 变体,适合轻量在线推理与交互场景。',
displayName: 'Llama 3.1 8B',
id: 'llama3.1-8b',
pricing: {
units: [
{ name: 'textInput', rate: 2, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 2, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textInput', rate: 0.1, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 0.1, strategy: 'fixed', unit: 'millionTokens' },
],
},
type: 'chat',
@@ -3,6 +3,47 @@ import { AIChatModelCard } from '../types/aiModel';
// https://cloud.infini-ai.com/genstudio/model
const infiniaiChatModels: AIChatModelCard[] = [
{
abilities: {
functionCall: true,
reasoning: true,
},
contextWindowTokens: 262_144,
description:
"Kimi K2 Thinking 是最新、最强大的开源思考模型。它通过大幅扩展多步推理深度,并在 200–300 次连续工具调用中保持稳定的工具使用,在 Humanity's Last Exam (HLE)、BrowseComp 及其他基准测试中树立了新的标杆。同时,K2 Thinking 在编程、数学、逻辑推理和 Agent 场景中表现卓越。该模型基于混合专家(MoE)架构,总参数约 1T,支持 256K 上下文窗口并支持工具调用。",
displayName: 'Kimi K2 Thinking',
id: 'kimi-k2-thinking',
maxOutput: 32_768,
pricing: {
currency: 'CNY',
units: [
{ name: 'textInput', rate: 4, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 16, strategy: 'fixed', unit: 'millionTokens' },
],
},
releasedAt: '2025-11-07',
type: 'chat',
},
{
abilities: {
vision: true,
},
contextWindowTokens: 8192,
description:
'DeepSeek-OCR 是由深度求索(DeepSeek AI)推出的一个视觉语言模型,专注于光学字符识别(OCR)与"上下文光学压缩"。该模型旨在探索从图像中压缩上下文信息的边界,能够高效处理文档并将其转换为如 Markdown 等结构化文本格式。它能够准确识别图像中的文字内容,特别适用于文档数字化、文字提取和结构化处理等应用场景。',
displayName: 'DeepSeek OCR',
id: 'deepseek-ocr',
maxOutput: 8192,
pricing: {
currency: 'CNY',
units: [
{ name: 'textInput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },
],
},
releasedAt: '2025-10-20',
type: 'chat',
},
{
abilities: {
functionCall: true,
@@ -187,6 +228,9 @@ const infiniaiChatModels: AIChatModelCard[] = [
{ name: 'textOutput', rate: 12, strategy: 'fixed', unit: 'millionTokens' },
],
},
settings: {
extendParams: ['enableReasoning'],
},
type: 'chat',
},
{
@@ -224,6 +268,9 @@ const infiniaiChatModels: AIChatModelCard[] = [
{ name: 'textOutput', rate: 12, strategy: 'fixed', unit: 'millionTokens' },
],
},
settings: {
extendParams: ['enableReasoning'],
},
type: 'chat',
},
{
@@ -260,6 +307,9 @@ const infiniaiChatModels: AIChatModelCard[] = [
{ name: 'textOutput', rate: 4, strategy: 'fixed', unit: 'millionTokens' },
],
},
settings: {
extendParams: ['enableReasoning'],
},
type: 'chat',
},
{
@@ -369,6 +419,9 @@ const infiniaiChatModels: AIChatModelCard[] = [
{ name: 'textOutput', rate: 4, strategy: 'fixed', unit: 'millionTokens' },
],
},
settings: {
extendParams: ['enableReasoning'],
},
type: 'chat',
},
{
@@ -409,6 +462,9 @@ const infiniaiChatModels: AIChatModelCard[] = [
{ name: 'textOutput', rate: 11.6, strategy: 'fixed', unit: 'millionTokens' },
],
},
settings: {
extendParams: ['enableReasoning'],
},
type: 'chat',
},
{
@@ -429,6 +485,9 @@ const infiniaiChatModels: AIChatModelCard[] = [
{ name: 'textOutput', rate: 8.7, strategy: 'fixed', unit: 'millionTokens' },
],
},
settings: {
extendParams: ['enableReasoning'],
},
type: 'chat',
},
{
@@ -449,6 +508,9 @@ const infiniaiChatModels: AIChatModelCard[] = [
{ name: 'textOutput', rate: 20, strategy: 'fixed', unit: 'millionTokens' },
],
},
settings: {
extendParams: ['enableReasoning'],
},
type: 'chat',
},
{
+24 -12
View File
@@ -5,7 +5,6 @@ const minimaxChatModels: AIChatModelCard[] = [
abilities: {
functionCall: true,
reasoning: true,
search: true,
},
contextWindowTokens: 204_800,
description: '专为高效编码与Agent工作流而生',
@@ -16,21 +15,41 @@ const minimaxChatModels: AIChatModelCard[] = [
pricing: {
currency: 'CNY',
units: [
{ name: 'textInput_cacheRead', rate: 0.21, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textInput_cacheWrite', rate: 2.625, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textInput', rate: 2.1, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 8.4, strategy: 'fixed', unit: 'millionTokens' },
],
},
releasedAt: '2025-10-27',
type: 'chat',
},
{
abilities: {
functionCall: true,
reasoning: true,
},
contextWindowTokens: 204_800,
description: '专为高效编码与Agent工作流而生,更高并发,商业使用。',
displayName: 'MiniMax M2 Stable',
id: 'MiniMax-M2-Stable',
maxOutput: 131_072,
pricing: {
currency: 'CNY',
units: [
{ name: 'textInput_cacheRead', rate: 0.21, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textInput_cacheWrite', rate: 2.625, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textInput', rate: 2.1, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 8.4, strategy: 'fixed', unit: 'millionTokens' },
],
},
releasedAt: '2025-10-27',
settings: {
searchImpl: 'params',
},
type: 'chat',
},
{
abilities: {
functionCall: true,
reasoning: true,
search: true,
},
contextWindowTokens: 1_000_192,
description: '全新自研推理模型。全球领先:80K 思维链 x 1M 输入,效果比肩海外顶尖模型',
@@ -45,15 +64,11 @@ const minimaxChatModels: AIChatModelCard[] = [
],
},
releasedAt: '2025-06-16',
settings: {
searchImpl: 'params',
},
type: 'chat',
},
{
abilities: {
functionCall: true,
search: true,
vision: true,
},
contextWindowTokens: 1_000_192,
@@ -70,9 +85,6 @@ const minimaxChatModels: AIChatModelCard[] = [
],
},
releasedAt: '2025-01-15',
settings: {
searchImpl: 'params',
},
type: 'chat',
},
];
+3 -24
View File
@@ -102,9 +102,9 @@ const moonshotChatModels: AIChatModelCard[] = [
pricing: {
currency: 'CNY',
units: [
{ name: 'textInput_cacheRead', rate: 4, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textInput', rate: 16, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 64, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textInput_cacheRead', rate: 1, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textInput', rate: 8, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 58, strategy: 'fixed', unit: 'millionTokens' },
],
},
releasedAt: '2025-09-05',
@@ -132,27 +132,6 @@ const moonshotChatModels: AIChatModelCard[] = [
releasedAt: '2025-02-17',
type: 'chat',
},
{
abilities: {
reasoning: true,
vision: true,
},
contextWindowTokens: 131_072,
description:
'kimi-thinking-preview 模型是月之暗面提供的具有多模态推理能力和通用推理能力的多模态思考模型,它擅长深度推理,帮助解决更多更难的事情',
displayName: 'Kimi Thinking Preview',
enabled: true,
id: 'kimi-thinking-preview',
pricing: {
currency: 'CNY',
units: [
{ name: 'textInput', rate: 200, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 200, strategy: 'fixed', unit: 'millionTokens' },
],
},
releasedAt: '2025-05-06',
type: 'chat',
},
{
abilities: {
functionCall: true,
@@ -458,29 +458,6 @@ export const openaiChatModels: AIChatModelCard[] = [
},
type: 'chat',
},
{
abilities: {
reasoning: true,
},
contextWindowTokens: 128_000,
description:
'o1-mini是一款针对编程、数学和科学应用场景而设计的快速、经济高效的推理模型。该模型具有128K上下文和2023年10月的知识截止日期。',
displayName: 'o1-mini',
id: 'o1-mini', // deprecated on 2025-10-27
maxOutput: 65_536,
pricing: {
units: [
{ name: 'textInput_cacheRead', rate: 0.55, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textInput', rate: 1.1, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 4.4, strategy: 'fixed', unit: 'millionTokens' },
],
},
releasedAt: '2024-09-12',
settings: {
extendParams: ['reasoningEffort'],
},
type: 'chat',
},
{
abilities: {
functionCall: true,
+26 -27
View File
@@ -3,31 +3,6 @@ import { AIChatModelCard, AIImageModelCard } from '../types/aiModel';
// https://help.aliyun.com/zh/model-studio/models?spm=a2c4g.11186623
const qwenChatModels: AIChatModelCard[] = [
{
abilities: {
functionCall: true,
reasoning: true,
},
contextWindowTokens: 262_144,
description:
'kimi-k2-thinking模型是月之暗面提供的具有通用 Agentic能力和推理能力的思考模型,它擅长深度推理,并可通过多步工具调用,帮助解决各类难题。',
displayName: 'Kimi K2 Thinking',
id: 'kimi-k2-thinking',
maxOutput: 16_384,
organization: 'Qwen',
pricing: {
currency: 'CNY',
units: [
{ name: 'textInput', rate: 4, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 16, strategy: 'fixed', unit: 'millionTokens' },
],
},
releasedAt: '2025-11-10',
settings: {
extendParams: ['reasoningBudgetToken'],
},
type: 'chat',
},
{
abilities: {
reasoning: true,
@@ -176,6 +151,31 @@ const qwenChatModels: AIChatModelCard[] = [
},
type: 'chat',
},
{
abilities: {
functionCall: true,
reasoning: true,
},
contextWindowTokens: 262_144,
description:
'kimi-k2-thinking模型是月之暗面提供的具有通用 Agentic能力和推理能力的思考模型,它擅长深度推理,并可通过多步工具调用,帮助解决各类难题。',
displayName: 'Kimi K2 Thinking',
id: 'kimi-k2-thinking',
maxOutput: 16_384,
organization: 'Qwen',
pricing: {
currency: 'CNY',
units: [
{ name: 'textInput', rate: 4, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 16, strategy: 'fixed', unit: 'millionTokens' },
],
},
releasedAt: '2025-11-10',
settings: {
extendParams: ['reasoningBudgetToken'],
},
type: 'chat',
},
{
abilities: {
functionCall: true,
@@ -187,7 +187,6 @@ const qwenChatModels: AIChatModelCard[] = [
displayName: 'Kimi K2 Instruct',
id: 'Moonshot-Kimi-K2-Instruct',
maxOutput: 8192,
organization: 'Qwen',
pricing: {
currency: 'CNY',
units: [
@@ -1246,7 +1245,7 @@ const qwenChatModels: AIChatModelCard[] = [
'通义千问超大规模语言模型,支持长文本上下文,以及基于长文档、多文档等多个场景的对话功能。',
displayName: 'Qwen Long',
id: 'qwen-long',
maxOutput: 8192,
maxOutput: 32_768,
organization: 'Qwen',
pricing: {
currency: 'CNY',
@@ -2,6 +2,52 @@ import { AIChatModelCard, AIImageModelCard } from '../types/aiModel';
// https://siliconflow.cn/zh-cn/models
const siliconcloudChatModels: AIChatModelCard[] = [
{
abilities: {
functionCall: true,
reasoning: true,
},
contextWindowTokens: 262_144,
description:
"Kimi K2 Thinking 是最新、最强大的开源思考模型。它通过大幅扩展多步推理深度,并在 200–300 次连续工具调用中保持稳定的工具使用,在 Humanity's Last Exam (HLE)、BrowseComp 及其他基准测试中树立了新的标杆。同时,K2 Thinking 在编程、数学、逻辑推理和 Agent 场景中表现卓越。该模型基于混合专家(MoE)架构,总参数约 1T,支持 256K 上下文窗口并支持工具调用。",
displayName: 'Kimi K2 Thinking',
id: 'moonshotai/Kimi-K2-Thinking',
pricing: {
currency: 'CNY',
units: [
{ name: 'textInput', rate: 4, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 16, strategy: 'fixed', unit: 'millionTokens' },
],
},
releasedAt: '2025-11-07',
settings: {
extendParams: ['reasoningBudgetToken'],
},
type: 'chat',
},
{
abilities: {
functionCall: true,
reasoning: true,
},
contextWindowTokens: 262_144,
description:
'Kimi K2 Thinking Turbo 是 Kimi K2 系列的 Turbo 版本,针对推理速度和吞吐进行了优化,同时保留 K2 Thinking 的多步推理与工具调用能力。该模型基于混合专家(MoE)架构,总参数约 1T,原生支持 256K 上下文并可稳定执行大规模工具调用,适用于对延迟和并发有更高要求的生产场景。',
displayName: 'Kimi K2 Thinking (Pro)',
id: 'Pro/moonshotai/Kimi-K2-Thinking',
pricing: {
currency: 'CNY',
units: [
{ name: 'textInput', rate: 8, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 32, strategy: 'fixed', unit: 'millionTokens' },
],
},
releasedAt: '2025-11-07',
settings: {
extendParams: ['reasoningBudgetToken'],
},
type: 'chat',
},
{
abilities: {
functionCall: true,
+17 -16
View File
@@ -3,22 +3,25 @@ import { AIChatModelCard } from '../types/aiModel';
const sparkChatModels: AIChatModelCard[] = [
{
abilities: {
functionCall: true,
reasoning: true,
search: true,
},
contextWindowTokens: 32_768,
contextWindowTokens: 65_535,
description:
'Spark X1 模型将进一步升级,在原来数学任务国内领先基础上,推理、文本生成、语言理解等通用任务实现效果对标 OpenAI o1 和 DeepSeek R1。',
displayName: 'Spark X1',
id: 'x1',
maxOutput: 32_768,
'X1.5能力介绍:(1)新增动态调整思考模式,通过thinking 字段控制;(2)上下文长度增大:输入、输出各64K;(3)支持FunctionCall功能。',
displayName: 'Spark X1.5',
enabled: true,
id: 'spark-x',
maxOutput: 65_535,
settings: {
extendParams: ['thinking'],
searchImpl: 'params',
},
type: 'chat',
},
{
contextWindowTokens: 8192,
contextWindowTokens: 8192 + 4096,
description:
'Spark Lite 是一款轻量级大语言模型,具备极低的延迟与高效的处理能力,完全免费开放,支持实时在线搜索功能。其快速响应的特性使其在低算力设备上的推理应用和模型微调中表现出色,为用户带来出色的成本效益和智能体验,尤其在知识问答、内容生成及搜索场景下表现不俗。',
displayName: 'Spark Lite',
@@ -31,11 +34,10 @@ const sparkChatModels: AIChatModelCard[] = [
abilities: {
search: true,
},
contextWindowTokens: 8192,
contextWindowTokens: 8192 + 8192,
description:
'Spark Pro 是一款为专业领域优化的高性能大语言模型,专注数学、编程、医疗、教育等多个领域,并支持联网搜索及内置天气、日期等插件。其优化后模型在复杂知识问答、语言理解及高层次文本创作中展现出色表现和高效性能,是适合专业应用场景的理想选择。',
displayName: 'Spark Pro',
enabled: true,
id: 'generalv3',
maxOutput: 8192,
settings: {
@@ -49,7 +51,7 @@ const sparkChatModels: AIChatModelCard[] = [
'Spark Pro 128K 配置了特大上下文处理能力,能够处理多达128K的上下文信息,特别适合需通篇分析和长期逻辑关联处理的长文内容,可在复杂文本沟通中提供流畅一致的逻辑与多样的引用支持。',
displayName: 'Spark Pro 128K',
id: 'pro-128k',
maxOutput: 4096,
maxOutput: 131_072,
type: 'chat',
},
{
@@ -57,11 +59,10 @@ const sparkChatModels: AIChatModelCard[] = [
functionCall: true,
search: true,
},
contextWindowTokens: 8192,
contextWindowTokens: 8192 + 8192,
description:
'Spark Max 为功能最为全面的版本,支持联网搜索及众多内置插件。其全面优化的核心能力以及系统角色设定和函数调用功能,使其在各种复杂应用场景中的表现极为优异和出色。',
displayName: 'Spark Max',
enabled: true,
id: 'generalv3.5',
maxOutput: 8192,
settings: {
@@ -74,12 +75,12 @@ const sparkChatModels: AIChatModelCard[] = [
functionCall: true,
search: true,
},
contextWindowTokens: 32_768,
contextWindowTokens: 32_768 + 32_768,
description:
'Spark Max 32K 配置了大上下文处理能力,更强的上下文理解和逻辑推理能力,支持32K tokens的文本输入,适用于长文档阅读、私有知识问答等场景',
displayName: 'Spark Max 32K',
id: 'max-32k',
maxOutput: 8192,
maxOutput: 32_768,
settings: {
searchImpl: 'internal',
},
@@ -88,15 +89,15 @@ const sparkChatModels: AIChatModelCard[] = [
{
abilities: {
functionCall: true,
reasoning: true,
search: true,
},
contextWindowTokens: 8192,
contextWindowTokens: 32_768 + 32_768,
description:
'Spark Ultra 是星火大模型系列中最为强大的版本,在升级联网搜索链路同时,提升对文本内容的理解和总结能力。它是用于提升办公生产力和准确响应需求的全方位解决方案,是引领行业的智能产品。',
displayName: 'Spark 4.0 Ultra',
enabled: true,
id: '4.0Ultra',
maxOutput: 8192,
maxOutput: 32_768,
settings: {
searchImpl: 'params',
},
@@ -3,6 +3,59 @@ import { AIChatModelCard, AIImageModelCard } from '../types/aiModel';
// https://www.volcengine.com/docs/82379/1330310
const doubaoChatModels: AIChatModelCard[] = [
{
abilities: {
functionCall: true,
reasoning: true,
vision: true,
},
config: {
deploymentName: 'doubao-seed-code-preview-251028',
},
contextWindowTokens: 256_000,
description:
'Doubao-Seed-Code 面向 Agentic 编程任务进行了深度优化,支持多模态(文字/图片/视频)与 256k 长上下文,兼容 Anthropic API,适用于编程、视觉理解与 Agent 场景。',
displayName: 'Doubao Seed Code',
id: 'doubao-seed-code',
maxOutput: 32_000,
pricing: {
currency: 'CNY',
units: [
{
lookup: {
prices: {
'[0, 0.032]': 1.2,
'[0.032, 0.128]': 1.4,
'[0.128, 0.256]': 2.8,
},
pricingParams: ['textInputRange'],
},
name: 'textInput',
strategy: 'lookup',
unit: 'millionTokens',
},
{
lookup: {
prices: {
'[0, 0.032]': 8,
'[0.032, 0.128]': 12,
'[0.128, 0.256]': 16,
},
pricingParams: ['textInputRange'],
},
name: 'textOutput',
strategy: 'lookup',
unit: 'millionTokens',
},
{ name: 'textInput_cacheRead', rate: 0.24, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textInput_cacheWrite', rate: 0.017, strategy: 'fixed', unit: 'millionTokens' },
],
},
settings: {
extendParams: ['enableReasoning'],
},
type: 'chat',
},
{
abilities: {
functionCall: true,
+49 -1
View File
@@ -3,6 +3,55 @@ import { AIChatModelCard, AIImageModelCard } from '../types/aiModel';
// https://cloud.baidu.com/doc/qianfan/s/rmh4stp0j
const wenxinChatModels: AIChatModelCard[] = [
{
abilities: {
functionCall: true,
reasoning: true,
search: true,
vision: true,
},
contextWindowTokens: 131_072,
description:
'文心5.0 Thinking,原生全模态旗舰模型,支持文本、图像、音频、视频统一建模,综合能力全面升级,适用于复杂问答、创作与智能体场景。',
displayName: 'ERNIE 5.0 Thinking',
enabled: true,
id: 'ernie-5.0-thinking-latest',
maxOutput: 65_536,
pricing: {
currency: 'CNY',
units: [
{
lookup: {
prices: {
'[0, 0.032]': 6,
'[0.032, 0.128]': 10,
},
pricingParams: ['textInput'],
},
name: 'textInput',
strategy: 'lookup',
unit: 'millionTokens',
},
{
lookup: {
prices: {
'[0, 0.032]': 24,
'[0.032, 0.128]': 40,
},
pricingParams: ['textInput'],
},
name: 'textOutput',
strategy: 'lookup',
unit: 'millionTokens',
},
],
},
releasedAt: '2025-11-12',
settings: {
searchImpl: 'params',
},
type: 'chat',
},
{
abilities: {
functionCall: true,
@@ -14,7 +63,6 @@ const wenxinChatModels: AIChatModelCard[] = [
description:
'文心5.0 Thinking 预览版,原生全模态旗舰模型,支持文本、图像、音频、视频统一建模,综合能力全面升级,适用于复杂问答、创作与智能体场景。',
displayName: 'ERNIE 5.0 Thinking Preview',
enabled: true,
id: 'ernie-5.0-thinking-preview',
maxOutput: 65_536,
pricing: {
@@ -124,7 +124,7 @@ export interface CreateRouterRuntimeOptions<T extends Record<string, any> = any>
export const createRouterRuntime = ({
id,
routers,
apiKey: DEFAULT_API_LEY,
apiKey: DEFAULT_API_KEY,
models: modelsOption,
...params
}: CreateRouterRuntimeOptions) => {
@@ -137,7 +137,7 @@ export const createRouterRuntime = ({
constructor(options: ClientOptions & Record<string, any> = {}) {
this._options = {
...options,
apiKey: options.apiKey?.trim() || DEFAULT_API_LEY,
apiKey: options.apiKey?.trim() || DEFAULT_API_KEY,
baseURL: options.baseURL?.trim(),
};
@@ -154,7 +154,7 @@ export interface OpenAICompatibleFactoryOptions<T extends Record<string, any> =
export const createOpenAICompatibleRuntime = <T extends Record<string, any> = any>({
provider,
baseURL: DEFAULT_BASE_URL,
apiKey: DEFAULT_API_LEY,
apiKey: DEFAULT_API_KEY,
errorType,
debug: debugParams,
constructorOptions,
@@ -182,7 +182,7 @@ export const createOpenAICompatibleRuntime = <T extends Record<string, any> = an
constructor(options: ClientOptions & Record<string, any> = {}) {
const _options = {
...options,
apiKey: options.apiKey?.trim() || DEFAULT_API_LEY,
apiKey: options.apiKey?.trim() || DEFAULT_API_KEY,
baseURL: options.baseURL?.trim() || DEFAULT_BASE_URL,
};
const { apiKey, baseURL = DEFAULT_BASE_URL, ...res } = _options;
@@ -346,6 +346,48 @@ export const createOpenAICompatibleRuntime = <T extends Record<string, any> = an
return this.handleResponseAPIMode(processedPayload, options);
}
const computedBaseURL =
typeof this._options.baseURL === 'string' && this._options.baseURL
? this._options.baseURL.trim()
: typeof DEFAULT_BASE_URL === 'string'
? DEFAULT_BASE_URL
: undefined;
const targetBaseURL = computedBaseURL || this.baseURL;
if (targetBaseURL !== this.baseURL) {
const restOptions = {
...(this._options as ConstructorOptions<T> & Record<string, any>),
} as Record<string, any>;
const optionApiKey = restOptions.apiKey;
delete restOptions.apiKey;
delete restOptions.baseURL;
const sanitizedApiKey = optionApiKey?.toString().trim() || DEFAULT_API_KEY;
const nextOptions = {
...restOptions,
apiKey: sanitizedApiKey,
baseURL: targetBaseURL,
} as ConstructorOptions<T>;
const initOptions = {
apiKey: sanitizedApiKey,
baseURL: targetBaseURL,
...constructorOptions,
...restOptions,
} as ConstructorOptions<T> & Record<string, any>;
this._options = nextOptions;
if (customClient?.createClient) {
this.client = customClient.createClient(initOptions);
} else {
this.client = new OpenAI(initOptions);
}
this.baseURL = targetBaseURL;
}
const messages = await convertOpenAIMessages(postPayload.messages);
let response: Stream<OpenAI.Chat.Completions.ChatCompletionChunk>;
@@ -13,16 +13,7 @@ export const LobeMinimaxAI = createOpenAICompatibleRuntime({
baseURL: 'https://api.minimaxi.com/v1',
chatCompletion: {
handlePayload: (payload) => {
const { enabledSearch, max_tokens, messages, temperature, tools, top_p, ...params } = payload;
const minimaxTools = enabledSearch
? [
...(tools || []),
{
type: 'web_search',
},
]
: tools;
const { enabledSearch, max_tokens, messages, temperature, top_p, ...params } = payload;
// Interleaved thinking
const processedMessages = messages.map((message: any) => {
@@ -77,7 +68,6 @@ export const LobeMinimaxAI = createOpenAICompatibleRuntime({
messages: processedMessages,
reasoning_split: true,
temperature: finalTemperature,
tools: minimaxTools,
top_p: resolvedParams.top_p,
} as any;
},
@@ -16,6 +16,7 @@ testProvider({
chatModel: 'spark',
test: {
skipAPICall: true,
skipErrorHandle: true,
},
});
@@ -69,7 +70,7 @@ describe('LobeSparkAI - custom features', () => {
enabledSearch: false,
};
const result = handlePayload(payload);
const result = handlePayload(payload, {});
expect(result.tools).toBeUndefined();
expect(result.enabledSearch).toBeUndefined();
@@ -81,7 +82,7 @@ describe('LobeSparkAI - custom features', () => {
messages: [{ role: 'user' as const, content: 'Hello' }],
};
const result = handlePayload(payload);
const result = handlePayload(payload, {});
expect(result.tools).toBeUndefined();
});
@@ -93,7 +94,7 @@ describe('LobeSparkAI - custom features', () => {
enabledSearch: true,
};
const result = handlePayload(payload);
const result = handlePayload(payload, {});
expect(result.tools).toBeDefined();
expect(result.tools).toHaveLength(1);
@@ -115,7 +116,7 @@ describe('LobeSparkAI - custom features', () => {
enabledSearch: true,
};
const result = handlePayload(payload);
const result = handlePayload(payload, {});
expect(result.tools[0].web_search.search_mode).toBe('normal');
});
@@ -129,7 +130,7 @@ describe('LobeSparkAI - custom features', () => {
enabledSearch: true,
};
const result = handlePayload(payload);
const result = handlePayload(payload, {});
expect(result.tools[0].web_search.search_mode).toBe('deep');
delete process.env.SPARK_SEARCH_MODE;
@@ -154,7 +155,7 @@ describe('LobeSparkAI - custom features', () => {
tools: existingTools,
};
const result = handlePayload(payload);
const result = handlePayload(payload, {});
expect(result.tools).toHaveLength(2);
expect(result.tools[0]).toEqual(existingTools[0]);
@@ -180,7 +181,7 @@ describe('LobeSparkAI - custom features', () => {
tools: existingTools,
};
const result = handlePayload(payload);
const result = handlePayload(payload, {});
expect(result.tools).toEqual(existingTools);
});
@@ -192,7 +193,7 @@ describe('LobeSparkAI - custom features', () => {
enabledSearch: true,
};
const result = handlePayload(payload);
const result = handlePayload(payload, {});
expect(result.enabledSearch).toBeUndefined();
});
@@ -207,7 +208,7 @@ describe('LobeSparkAI - custom features', () => {
enabledSearch: true,
};
const result = handlePayload(payload);
const result = handlePayload(payload, {});
expect(result.model).toBe('spark');
expect(result.messages).toEqual(payload.messages);
@@ -224,7 +225,7 @@ describe('LobeSparkAI - custom features', () => {
tools: [],
};
const result = handlePayload(payload);
const result = handlePayload(payload, {});
expect(result.tools).toHaveLength(1);
expect(result.tools[0].type).toBe('web_search');
@@ -257,7 +258,7 @@ describe('LobeSparkAI - custom features', () => {
tools: existingTools,
};
const result = handlePayload(payload);
const result = handlePayload(payload, {});
expect(result.tools).toHaveLength(3);
expect(result.tools[0]).toEqual(existingTools[0]);
@@ -7,11 +7,25 @@ import {
import { SparkAIStream, transformSparkResponseToStream } from '../../core/streams';
import { ChatStreamPayload } from '../../types';
const getBaseURLByModel = (model: string): string => {
if (model.includes('x1-preview')) {
return 'https://spark-api-open-preview.xf-yun.com/v2';
}
if (model.includes('spark-x')) {
return 'https://spark-api-open.xf-yun.com/v2';
}
return 'https://spark-api-open.xf-yun.com/v1';
};
export const params = {
baseURL: 'https://spark-api-open.xf-yun.com/v1',
chatCompletion: {
handlePayload: (payload: ChatStreamPayload) => {
const { enabledSearch, tools, ...rest } = payload;
handlePayload: (payload: ChatStreamPayload, options) => {
const { enabledSearch, thinking, tools, ...rest } = payload;
const baseURL = getBaseURLByModel(payload.model);
if (options) options.baseURL = baseURL;
const sparkTools = enabledSearch
? [
@@ -22,8 +36,8 @@ export const params = {
enable: true,
search_mode: process.env.SPARK_SEARCH_MODE || 'normal', // normal or deep
/*
show_ref_label: true,
*/
show_ref_label: true,
*/
},
},
]
@@ -31,6 +45,7 @@ export const params = {
return {
...rest,
thinking: { type: thinking?.type },
tools: sparkTools,
} as any;
},
@@ -57,19 +57,5 @@ describe('LobeVolcengineAI - custom features', () => {
const calledPayload = (instance['client'].chat.completions.create as any).mock.calls[0][0];
expect(calledPayload.thinking).toEqual({ type: 'enabled' });
});
it('should not add thinking for non-thinking models', async () => {
await instance.chat({
messages: [{ content: 'Hello', role: 'user' }],
model: 'doubao-pro-32k',
thinking: {
type: 'enabled',
budget_tokens: 1000,
},
});
const calledPayload = (instance['client'].chat.completions.create as any).mock.calls[0][0];
expect(calledPayload.thinking).toBeUndefined();
});
});
});
@@ -1,21 +1,8 @@
import { ModelProvider } from 'model-bank';
import { createOpenAICompatibleRuntime } from '../../core/openaiCompatibleFactory';
import { MODEL_LIST_CONFIGS, processModelList } from '../../utils/modelParse';
import { createVolcengineImage } from './createImage';
const THINKING_MODELS = [
'thinking-vision-pro',
'thinking-pro-m',
'doubao-seed-1-6',
'doubao-1-5-ui-tars',
'deepseek-v3-1',
];
export interface VolcengineModelCard {
id: string;
}
export const LobeVolcengineAI = createOpenAICompatibleRuntime({
baseURL: 'https://ark.cn-beijing.volces.com/api/v3',
chatCompletion: {
@@ -25,11 +12,7 @@ export const LobeVolcengineAI = createOpenAICompatibleRuntime({
return {
...rest,
model,
...(THINKING_MODELS.some((keyword) => model.toLowerCase().includes(keyword))
? {
thinking: { type: thinking?.type },
}
: {}),
...(thinking?.type && { thinking: { type: thinking.type } }),
} as any;
},
},
@@ -37,11 +20,5 @@ export const LobeVolcengineAI = createOpenAICompatibleRuntime({
debug: {
chatCompletion: () => process.env.DEBUG_VOLCENGINE_CHAT_COMPLETION === '1',
},
models: async ({ client }) => {
const modelsPage = (await client.models.list()) as any;
const modelList: VolcengineModelCard[] = modelsPage.data;
return processModelList(modelList, MODEL_LIST_CONFIGS.volcengine, 'volcengine');
},
provider: ModelProvider.Volcengine,
});
-3
View File
@@ -12,9 +12,6 @@ const Spark: ModelProviderCard = {
name: 'Spark',
settings: {
disableBrowserRequest: true,
proxyUrl: {
placeholder: 'https://spark-api-open.xf-yun.com/v1',
},
responseAnimation: {
speed: 2,
text: 'smooth',
+2 -1
View File
@@ -3,7 +3,7 @@ import { ModelProviderCard } from '@/types/llm';
// ref https://www.volcengine.com/docs/82379/1330310
const Doubao: ModelProviderCard = {
chatModels: [],
checkModel: 'doubao-1-5-lite-32k-250115',
checkModel: 'doubao-seed-1-6-flash-250828',
description:
'字节跳动推出的大模型服务的开发平台,提供功能丰富、安全以及具备价格竞争力的模型调用服务,同时提供模型数据、精调、推理、评测等端到端功能,全方位保障您的 AI 应用开发落地。',
id: 'volcengine',
@@ -20,6 +20,7 @@ const Doubao: ModelProviderCard = {
},
sdkType: 'openai',
showDeployName: true,
showModelFetcher: false,
},
url: 'https://www.volcengine.com/product/ark',
};