mirror of
https://github.com/ONLYOFFICE/desktop-sdk.git
synced 2026-03-31 10:23:12 +08:00
AIAgent: add openai compatible
This commit is contained in:
@ -17,6 +17,7 @@ export type ProviderType =
|
||||
| "anthropic"
|
||||
| "ollama"
|
||||
| "openai"
|
||||
| "openaicompatible"
|
||||
| "together"
|
||||
| "openrouter"
|
||||
| "genai"
|
||||
|
||||
@ -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 };
|
||||
@ -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
|
||||
};
|
||||
@ -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,
|
||||
|
||||
Reference in New Issue
Block a user