Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | 6x 6x 6x 6x 6x 6x 6x 6x 6x 6x 6x 6x 6x 6x | import { Injectable } from '@nestjs/common';
import {
LlmProvider,
LlmProviderRequest,
LlmModel,
LlmResponse,
} from './llm-provider.interface';
import { GeminiLlmProvider } from '../gemini/gemini-llm.provider';
import { OpenRouterLlmProvider } from './openrouter-llm.provider';
import { ZaiLlmProvider } from './zai-llm.provider';
import { AlibabaLlmProvider } from './alibaba-llm.provider';
import { OllamaLlmProvider } from './ollama-llm.provider';
import { OpenaiLlmProvider } from './openai-llm.provider';
@Injectable()
export class ProxyLlmProvider implements LlmProvider {
constructor(
private readonly geminiProvider: GeminiLlmProvider,
private readonly openRouterProvider: OpenRouterLlmProvider,
private readonly zaiProvider: ZaiLlmProvider,
private readonly alibabaProvider: AlibabaLlmProvider,
private readonly ollamaProvider: OllamaLlmProvider,
private readonly openaiProvider: OpenaiLlmProvider,
) {}
async getModels(): Promise<LlmModel[]> {
const geminiModels = await this.geminiProvider.getModels();
const openRouterModels = await this.openRouterProvider.getModels();
const zaiModels = await this.zaiProvider.getModels();
const alibabaModels = await this.alibabaProvider.getModels();
const ollamaModels = await this.ollamaProvider.getModels();
const openaiModels = await this.openaiProvider.getModels();
return [
...geminiModels,
...ollamaModels,
...alibabaModels,
...zaiModels,
...openRouterModels,
...openaiModels,
];
}
async generateContent(request: LlmProviderRequest): Promise<LlmResponse> {
const { modelId } = request;
Iif (modelId?.startsWith('ollama/')) {
return this.ollamaProvider.generateContent(request);
}
Iif (modelId?.startsWith('alibaba/')) {
return this.alibabaProvider.generateContent(request);
}
Iif (modelId?.startsWith('zai/')) {
return this.zaiProvider.generateContent(request);
}
Iif (modelId?.startsWith('openai/')) {
return this.openaiProvider.generateContent(request);
}
// Check if it's an OpenRouter model
// OpenRouter models usually have a slash (e.g., openai/gpt-3.5-turbo)
// whereas local Gemini models are IDs like 'gemini-1.5-pro'
const isOpenRouter = modelId && modelId.includes('/');
if (!isOpenRouter) {
return this.geminiProvider.generateContent(request);
} else {
return this.openRouterProvider.generateContent(request);
}
}
}
|