diff --git a/test/common.ts b/test/common.ts new file mode 100644 index 0000000..84de1da --- /dev/null +++ b/test/common.ts @@ -0,0 +1,51 @@ +import { Kevisual } from '../src/provider/index'; +import { createOpenAICompatible } from '@ai-sdk/openai-compatible'; +import { createAnthropic } from '@ai-sdk/anthropic'; +import { generateText } from 'ai'; + +export function resolveEnvVars(value: string): string { + return value.replace(/{env:([^}]+)}/g, (_, varName) => { + const envValue = process.env[varName]; + if (!envValue) { + throw new Error(`Environment variable ${varName} is not set`); + } + return envValue; + }); +} +export const models = { + 'doubao-ark-code-latest': 'doubao-ark-code-latest', + 'GLM-4.7': 'GLM-4.7', + 'MiniMax-M2.1': 'MiniMax-M2.1', + 'qwen3-coder-plus': 'qwen3-coder-plus', + 'hunyuan-a13b': 'hunyuan-a13b', +} +export const bailian = createOpenAICompatible({ + baseURL: 'https://coding.dashscope.aliyuncs.com/v1', + name: 'custom-bailian', + apiKey: process.env.BAILIAN_CODE_API_KEY!, +}); + +export const zhipu = createOpenAICompatible({ + baseURL: 'https://open.bigmodel.cn/api/coding/paas/v4', + name: 'custom-zhipu', + apiKey: process.env.ZHIPU_API_KEY!, +}); + +export const minimax = createAnthropic({ + baseURL: 'https://api.minimaxi.com/anthropic/v1', + name: 'custom-minimax', + apiKey: process.env.MINIMAX_API_KEY!, +}); + +export const doubao = createOpenAICompatible({ + baseURL: 'https://ark.cn-beijing.volces.com/api/coding/v3', + name: 'custom-doubao', + apiKey: process.env.DOUBAO_API_KEY!, +}); + + +export const cnb = createOpenAICompatible({ + baseURL: resolveEnvVars('https://api.cnb.cool/{env:CNB_REPO_SLUG}/-/ai/'), + name: 'custom-cnb', + apiKey: process.env.CNB_API_KEY!, +}); \ No newline at end of file diff --git a/test/kevisual.ts b/test/kevisual.ts new file mode 100644 index 0000000..db933c8 --- /dev/null +++ b/test/kevisual.ts @@ -0,0 +1,34 @@ +import { createOpenAICompatible } from '@ai-sdk/openai-compatible'; +import { createAnthropic } from '@ai-sdk/anthropic'; +import { generateText } from 'ai'; +import 'dotenv/config'; + +// 使用 custom-kevisual provider (聚合了多个模型) +const kevisual = createOpenAICompatible({ + baseURL: 'https://newapi.kevisual.cn/v1', + name: 'custom-kevisual', + apiKey: process.env.KEVISUAL_NEW_API_KEY!, +}); + +const kevisualAnthropic = createAnthropic({ + baseURL: "https://newapi.kevisual.cn/v1", + apiKey: process.env.KEVISUAL_NEW_API_KEY!, +}) + +// 测试所有可用模型 +// const models = ['qwen3-coder-plus', 'ark-code-latest', 'GLM-4.7', 'MiniMax-M2.1']; +const models = ['MiniMax-M2.5']; + +for (const model of models) { + console.log(`\n=== Testing model: ${model} ===`); + try { + const { text } = await generateText({ + // model: kevisualAnthropic(model), + model: kevisual(model), + prompt: 'Say hello in one sentence.', + }); + console.log(`Response: ${text}`); + } catch (error) { + console.error(`Error: ${error}`); + } +}