AIAgent: add openai compatible

This commit is contained in:
Timofey
2026-02-03 22:03:50 +08:00
parent 71f9a7bd1e
commit 04092c12d9
4 changed files with 56 additions and 0 deletions

View File

@ -17,6 +17,7 @@ export type ProviderType =
| "anthropic"
| "ollama"
| "openai"
| "openaicompatible"
| "together"
| "openrouter"
| "genai"

View File

@ -0,0 +1,43 @@
import type { Model } from "@/lib/types";
import type { TData } from "../base";
import { OpenAIProvider } from "../openai";
import { openaicompatibleInfo } from "./info";
/**
* OpenAI Compatible provider - extends OpenAI without model filtering.
* Use this for any OpenAI-compatible API that you want full model access to.
*/
class OpenAICompatibleProvider extends OpenAIProvider {
// ============================================
// Provider Info
// ============================================
getName = (): string => openaicompatibleInfo.name;
getBaseUrl = (): string => openaicompatibleInfo.baseUrl;
// ============================================
// Model Fetching (no filters - returns all models)
// ============================================
getProviderModels = async (data: TData): Promise<Model[]> => {
const client = this.createClient(data.apiKey, data.url);
try {
const response = await client.models.list();
return response.data.map((model) => ({
id: model.id,
name: openaicompatibleInfo.modelNames[model.id] || model.id,
provider: "openaicompatible" as const,
}));
} catch (error) {
console.error("Failed to fetch OpenAI Compatible models:", error);
return [];
}
};
}
const openaicompatibleProvider = new OpenAICompatibleProvider();
export { OpenAICompatibleProvider, openaicompatibleProvider };

View File

@ -0,0 +1,6 @@
export const openaicompatibleInfo = {
name: "OpenAI Compatible",
baseUrl: "",
modelFilters: [] as string[], // No filters - returns all models from the API
modelNames: {} as Record<string, string>, // Uses model ID from API
};

View File

@ -6,6 +6,10 @@ import { type LMStudioProvider, lmStudioProvider } from "./lm-studio";
import { type MistralProvider, mistralProvider } from "./mistral";
import { type OllamaProvider, ollamaProvider } from "./ollama";
import { type OpenAIProvider, openaiProvider } from "./openai";
import {
type OpenAICompatibleProvider,
openaicompatibleProvider,
} from "./openaicompatible";
import { type OpenRouterProvider, openrouterProvider } from "./openrouter";
import { type TogetherProvider, togetherProvider } from "./together";
import { type XAIProvider, xaiProvider } from "./xai";
@ -14,6 +18,7 @@ export type BaseProvider =
| AnthropicProvider
| OllamaProvider
| OpenAIProvider
| OpenAICompatibleProvider
| TogetherProvider
| OpenRouterProvider
| GenAIProvider
@ -30,6 +35,7 @@ export const providerRegistry: Record<ProviderType, BaseProvider> = {
anthropic: anthropicProvider,
ollama: ollamaProvider,
openai: openaiProvider,
openaicompatible: openaicompatibleProvider,
together: togetherProvider,
openrouter: openrouterProvider,
genai: genaiProvider,