Introduces new provider modules for DouBao, Ernie, Kimi, Qwen, and ZhiPu, and registers them in the LLM registry. Updates documentation and .env.example to include configuration instructions for these providers. Refactors OpenAI provider to support OpenAI-compatible endpoints. Adds @ai-sdk/openai-compatible and node-fetch dependencies.
58 lines
1.8 KiB
TypeScript
58 lines
1.8 KiB
TypeScript
import { createOpenAICompatible } from '@ai-sdk/openai-compatible';
|
|
import type { LanguageModel } from 'ai';
|
|
import { BaseProvider } from '~/lib/modules/llm/base-provider';
|
|
import type { ModelInfo } from '~/lib/modules/llm/types';
|
|
import type { IProviderSetting } from '~/types/model';
|
|
|
|
export default class QwenProvider extends BaseProvider {
|
|
name = 'Qwen';
|
|
getApiKeyLink = undefined;
|
|
|
|
staticModels: ModelInfo[] = [];
|
|
|
|
async getDynamicModels(settings?: IProviderSetting): Promise<ModelInfo[]> {
|
|
const { baseUrl: fetchBaseUrl, apiKey } = this.getProviderBaseUrlAndKey(settings);
|
|
const baseUrl = fetchBaseUrl || 'https://dashscope.aliyuncs.com/compatible-mode/v1';
|
|
|
|
if (!apiKey) {
|
|
throw `Missing Api Key configuration for ${this.name} provider`;
|
|
}
|
|
|
|
const response = await fetch(`${baseUrl}/models`, {
|
|
headers: {
|
|
Authorization: `Bearer ${apiKey}`,
|
|
},
|
|
});
|
|
|
|
const res = (await response.json()) as any;
|
|
|
|
const data = res.data.filter((model: any) => model.object === 'model' && model.supports_chat);
|
|
|
|
return data.map((m: any) => ({
|
|
name: m.id,
|
|
label: `${m.id} - context ${m.context_length ? Math.floor(m.context_length / 1000) + 'k' : 'N/A'}`,
|
|
provider: this.name,
|
|
maxTokenAllowed: m.context_length || 8000,
|
|
}));
|
|
}
|
|
|
|
getModelInstance(options: { model: string; providerSettings?: Record<string, IProviderSetting> }): LanguageModel {
|
|
const { model, providerSettings } = options;
|
|
|
|
const { apiKey } = this.getProviderBaseUrlAndKey(providerSettings?.[this.name]);
|
|
|
|
if (!apiKey) {
|
|
throw `Missing Api Key configuration for ${this.name} provider`;
|
|
}
|
|
|
|
const provider = createOpenAICompatible({
|
|
name: this.name,
|
|
baseURL: 'https://dashscope.aliyuncs.com/compatible-mode/v1',
|
|
apiKey,
|
|
includeUsage: true,
|
|
});
|
|
|
|
return provider(model);
|
|
}
|
|
}
|