mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-04 22:32:12 +03:00
- Add /v1/rerank endpoint with Cohere, Together, NVIDIA, Fireworks - Add /v1/audio/transcriptions with OpenAI, Groq, Deepgram, AssemblyAI - Add /v1/audio/speech with OpenAI, Hyperbolic, Deepgram - Add /v1/moderations with OpenAI - Add Hyperbolic as chat provider (8 models, OpenAI-compatible) - Add Hyperbolic image generation (SDXL, SD2, FLUX) - Add NanoBanana image generation (Flash + Pro via nanobananaapi.ai) - Add Deepgram STT (Nova 3, Nova 2) with Token auth and binary format - Add AssemblyAI STT (Universal 3 Pro) with async upload-poll workflow - Add Deepgram TTS (Aura voices) and Hyperbolic TTS (Melo) - Update EndpointPageClient to show 7 endpoint sections - Update /v1/models to return type/subtype for all model categories - Fix build: remove output:standalone from next.config.mjs
332 lines
7.6 KiB
JavaScript
332 lines
7.6 KiB
JavaScript
// Provider definitions
|
|
|
|
// Free Providers
|
|
export const FREE_PROVIDERS = {
|
|
iflow: { id: "iflow", alias: "if", name: "iFlow AI", icon: "water_drop", color: "#6366F1" },
|
|
qwen: { id: "qwen", alias: "qw", name: "Qwen Code", icon: "psychology", color: "#10B981" },
|
|
"gemini-cli": {
|
|
id: "gemini-cli",
|
|
alias: "gc",
|
|
name: "Gemini CLI",
|
|
icon: "terminal",
|
|
color: "#4285F4",
|
|
},
|
|
kiro: { id: "kiro", alias: "kr", name: "Kiro AI", icon: "psychology_alt", color: "#FF6B35" },
|
|
};
|
|
|
|
// OAuth Providers
|
|
export const OAUTH_PROVIDERS = {
|
|
claude: { id: "claude", alias: "cc", name: "Claude Code", icon: "smart_toy", color: "#D97757" },
|
|
antigravity: {
|
|
id: "antigravity",
|
|
alias: "ag",
|
|
name: "Antigravity",
|
|
icon: "rocket_launch",
|
|
color: "#F59E0B",
|
|
},
|
|
codex: { id: "codex", alias: "cx", name: "OpenAI Codex", icon: "code", color: "#3B82F6" },
|
|
github: { id: "github", alias: "gh", name: "GitHub Copilot", icon: "code", color: "#333333" },
|
|
cursor: { id: "cursor", alias: "cu", name: "Cursor IDE", icon: "edit_note", color: "#00D4AA" },
|
|
"kimi-coding": {
|
|
id: "kimi-coding",
|
|
alias: "kmc",
|
|
name: "Kimi Coding",
|
|
icon: "psychology",
|
|
color: "#1E40AF",
|
|
textIcon: "KC",
|
|
},
|
|
kilocode: {
|
|
id: "kilocode",
|
|
alias: "kc",
|
|
name: "Kilo Code",
|
|
icon: "code",
|
|
color: "#FF6B35",
|
|
textIcon: "KC",
|
|
},
|
|
cline: {
|
|
id: "cline",
|
|
alias: "cl",
|
|
name: "Cline",
|
|
icon: "smart_toy",
|
|
color: "#5B9BD5",
|
|
textIcon: "CL",
|
|
},
|
|
};
|
|
|
|
export const APIKEY_PROVIDERS = {
|
|
openrouter: {
|
|
id: "openrouter",
|
|
alias: "openrouter",
|
|
name: "OpenRouter",
|
|
icon: "router",
|
|
color: "#F97316",
|
|
textIcon: "OR",
|
|
passthroughModels: true,
|
|
website: "https://openrouter.ai",
|
|
},
|
|
glm: {
|
|
id: "glm",
|
|
alias: "glm",
|
|
name: "GLM Coding",
|
|
icon: "code",
|
|
color: "#2563EB",
|
|
textIcon: "GL",
|
|
website: "https://open.bigmodel.cn",
|
|
},
|
|
kimi: {
|
|
id: "kimi",
|
|
alias: "kimi",
|
|
name: "Kimi",
|
|
icon: "psychology",
|
|
color: "#1E3A8A",
|
|
textIcon: "KM",
|
|
website: "https://kimi.moonshot.cn",
|
|
},
|
|
minimax: {
|
|
id: "minimax",
|
|
alias: "minimax",
|
|
name: "Minimax Coding",
|
|
icon: "memory",
|
|
color: "#7C3AED",
|
|
textIcon: "MM",
|
|
website: "https://www.minimaxi.com",
|
|
},
|
|
"minimax-cn": {
|
|
id: "minimax-cn",
|
|
alias: "minimax-cn",
|
|
name: "Minimax (China)",
|
|
icon: "memory",
|
|
color: "#DC2626",
|
|
textIcon: "MC",
|
|
website: "https://www.minimaxi.com",
|
|
},
|
|
openai: {
|
|
id: "openai",
|
|
alias: "openai",
|
|
name: "OpenAI",
|
|
icon: "auto_awesome",
|
|
color: "#10A37F",
|
|
textIcon: "OA",
|
|
website: "https://platform.openai.com",
|
|
},
|
|
anthropic: {
|
|
id: "anthropic",
|
|
alias: "anthropic",
|
|
name: "Anthropic",
|
|
icon: "smart_toy",
|
|
color: "#D97757",
|
|
textIcon: "AN",
|
|
website: "https://console.anthropic.com",
|
|
},
|
|
gemini: {
|
|
id: "gemini",
|
|
alias: "gemini",
|
|
name: "Gemini",
|
|
icon: "diamond",
|
|
color: "#4285F4",
|
|
textIcon: "GE",
|
|
website: "https://ai.google.dev",
|
|
},
|
|
deepseek: {
|
|
id: "deepseek",
|
|
alias: "ds",
|
|
name: "DeepSeek",
|
|
icon: "bolt",
|
|
color: "#4D6BFE",
|
|
textIcon: "DS",
|
|
website: "https://deepseek.com",
|
|
},
|
|
groq: {
|
|
id: "groq",
|
|
alias: "groq",
|
|
name: "Groq",
|
|
icon: "speed",
|
|
color: "#F55036",
|
|
textIcon: "GQ",
|
|
website: "https://groq.com",
|
|
},
|
|
xai: {
|
|
id: "xai",
|
|
alias: "xai",
|
|
name: "xAI (Grok)",
|
|
icon: "auto_awesome",
|
|
color: "#1DA1F2",
|
|
textIcon: "XA",
|
|
website: "https://x.ai",
|
|
},
|
|
mistral: {
|
|
id: "mistral",
|
|
alias: "mistral",
|
|
name: "Mistral",
|
|
icon: "air",
|
|
color: "#FF7000",
|
|
textIcon: "MI",
|
|
website: "https://mistral.ai",
|
|
},
|
|
perplexity: {
|
|
id: "perplexity",
|
|
alias: "pplx",
|
|
name: "Perplexity",
|
|
icon: "search",
|
|
color: "#20808D",
|
|
textIcon: "PP",
|
|
website: "https://www.perplexity.ai",
|
|
},
|
|
together: {
|
|
id: "together",
|
|
alias: "together",
|
|
name: "Together AI",
|
|
icon: "group_work",
|
|
color: "#0F6FFF",
|
|
textIcon: "TG",
|
|
website: "https://www.together.ai",
|
|
},
|
|
fireworks: {
|
|
id: "fireworks",
|
|
alias: "fireworks",
|
|
name: "Fireworks AI",
|
|
icon: "local_fire_department",
|
|
color: "#7B2EF2",
|
|
textIcon: "FW",
|
|
website: "https://fireworks.ai",
|
|
},
|
|
cerebras: {
|
|
id: "cerebras",
|
|
alias: "cerebras",
|
|
name: "Cerebras",
|
|
icon: "memory",
|
|
color: "#FF4F00",
|
|
textIcon: "CB",
|
|
website: "https://www.cerebras.ai",
|
|
},
|
|
cohere: {
|
|
id: "cohere",
|
|
alias: "cohere",
|
|
name: "Cohere",
|
|
icon: "hub",
|
|
color: "#39594D",
|
|
textIcon: "CO",
|
|
website: "https://cohere.com",
|
|
},
|
|
nvidia: {
|
|
id: "nvidia",
|
|
alias: "nvidia",
|
|
name: "NVIDIA NIM",
|
|
icon: "developer_board",
|
|
color: "#76B900",
|
|
textIcon: "NV",
|
|
website: "https://developer.nvidia.com/nim",
|
|
},
|
|
nebius: {
|
|
id: "nebius",
|
|
alias: "nebius",
|
|
name: "Nebius AI",
|
|
icon: "cloud",
|
|
color: "#6C5CE7",
|
|
textIcon: "NB",
|
|
website: "https://nebius.com",
|
|
},
|
|
siliconflow: {
|
|
id: "siliconflow",
|
|
alias: "siliconflow",
|
|
name: "SiliconFlow",
|
|
icon: "cloud_queue",
|
|
color: "#5B6EF5",
|
|
textIcon: "SF",
|
|
website: "https://cloud.siliconflow.com",
|
|
},
|
|
hyperbolic: {
|
|
id: "hyperbolic",
|
|
alias: "hyp",
|
|
name: "Hyperbolic",
|
|
icon: "bolt",
|
|
color: "#00D4FF",
|
|
textIcon: "HY",
|
|
website: "https://hyperbolic.xyz",
|
|
},
|
|
deepgram: {
|
|
id: "deepgram",
|
|
alias: "dg",
|
|
name: "Deepgram",
|
|
icon: "mic",
|
|
color: "#13EF93",
|
|
textIcon: "DG",
|
|
website: "https://deepgram.com",
|
|
},
|
|
assemblyai: {
|
|
id: "assemblyai",
|
|
alias: "aai",
|
|
name: "AssemblyAI",
|
|
icon: "record_voice_over",
|
|
color: "#0062FF",
|
|
textIcon: "AA",
|
|
website: "https://assemblyai.com",
|
|
},
|
|
nanobanana: {
|
|
id: "nanobanana",
|
|
alias: "nb",
|
|
name: "NanoBanana",
|
|
icon: "image",
|
|
color: "#FFD700",
|
|
textIcon: "NB",
|
|
website: "https://nanobananaapi.ai",
|
|
},
|
|
};
|
|
|
|
export const OPENAI_COMPATIBLE_PREFIX = "openai-compatible-";
|
|
export const ANTHROPIC_COMPATIBLE_PREFIX = "anthropic-compatible-";
|
|
|
|
export function isOpenAICompatibleProvider(providerId) {
|
|
return typeof providerId === "string" && providerId.startsWith(OPENAI_COMPATIBLE_PREFIX);
|
|
}
|
|
|
|
export function isAnthropicCompatibleProvider(providerId) {
|
|
return typeof providerId === "string" && providerId.startsWith(ANTHROPIC_COMPATIBLE_PREFIX);
|
|
}
|
|
|
|
// All providers (combined)
|
|
export const AI_PROVIDERS = { ...FREE_PROVIDERS, ...OAUTH_PROVIDERS, ...APIKEY_PROVIDERS };
|
|
|
|
// Auth methods
|
|
export const AUTH_METHODS = {
|
|
oauth: { id: "oauth", name: "OAuth", icon: "lock" },
|
|
apikey: { id: "apikey", name: "API Key", icon: "key" },
|
|
};
|
|
|
|
// Helper: Get provider by alias
|
|
export function getProviderByAlias(alias) {
|
|
for (const provider of Object.values(AI_PROVIDERS)) {
|
|
if (provider.alias === alias || provider.id === alias) {
|
|
return provider;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
// Helper: Get provider ID from alias
|
|
export function resolveProviderId(aliasOrId) {
|
|
const provider = getProviderByAlias(aliasOrId);
|
|
return provider?.id || aliasOrId;
|
|
}
|
|
|
|
// Helper: Get alias from provider ID
|
|
export function getProviderAlias(providerId) {
|
|
const provider = AI_PROVIDERS[providerId];
|
|
return provider?.alias || providerId;
|
|
}
|
|
|
|
// Alias to ID mapping (for quick lookup)
|
|
export const ALIAS_TO_ID = Object.values(AI_PROVIDERS).reduce((acc, p) => {
|
|
acc[p.alias] = p.id;
|
|
return acc;
|
|
}, {});
|
|
|
|
// ID to Alias mapping
|
|
export const ID_TO_ALIAS = Object.values(AI_PROVIDERS).reduce((acc, p) => {
|
|
acc[p.id] = p.alias;
|
|
return acc;
|
|
}, {});
|
|
|
|
// Providers that support usage/quota API
|
|
export const USAGE_SUPPORTED_PROVIDERS = ["antigravity", "kiro", "github", "codex", "claude"];
|