diff --git a/surfsense_backend/app/services/provider_registry.py b/surfsense_backend/app/services/provider_registry.py index 5095a96c2f..8d7ebbd98e 100644 --- a/surfsense_backend/app/services/provider_registry.py +++ b/surfsense_backend/app/services/provider_registry.py @@ -89,6 +89,15 @@ class ProviderSpec: "bearer", "Requesty", ), + "orcarouter": ProviderSpec( + Transport.OPENAI_COMPATIBLE, + "openai", + "openai_models", + "https://api.orcarouter.ai/v1", + False, + "bearer", + "OrcaRouter", + ), "openai_compatible": ProviderSpec( Transport.OPENAI_COMPATIBLE, "openai", diff --git a/surfsense_web/components/icons/providers/index.ts b/surfsense_web/components/icons/providers/index.ts index f03fbec689..0200824c73 100644 --- a/surfsense_web/components/icons/providers/index.ts +++ b/surfsense_web/components/icons/providers/index.ts @@ -28,6 +28,7 @@ export { default as QwenIcon } from "./qwen.svg"; export { default as RecraftIcon } from "./recraft.svg"; export { default as ReplicateIcon } from "./replicate.svg"; export { default as RequestyIcon } from "./requesty.svg"; +export { default as OrcaRouterIcon } from "./orcarouter.svg"; export { default as SambaNovaIcon } from "./sambanova.svg"; export { default as TogetherAiIcon } from "./togetherai.svg"; export { default as VertexAiIcon } from "./vertexai.svg"; diff --git a/surfsense_web/components/icons/providers/orcarouter.svg b/surfsense_web/components/icons/providers/orcarouter.svg new file mode 100644 index 0000000000..1d50de8975 --- /dev/null +++ b/surfsense_web/components/icons/providers/orcarouter.svg @@ -0,0 +1 @@ + diff --git a/surfsense_web/components/settings/model-connections/default-connect-form.tsx b/surfsense_web/components/settings/model-connections/default-connect-form.tsx index 7b33c0ae83..df22ec2e62 100644 --- a/surfsense_web/components/settings/model-connections/default-connect-form.tsx +++ b/surfsense_web/components/settings/model-connections/default-connect-form.tsx @@ -15,7 +15,8 @@ function baseUrlHint(provider: string) { provider === "openai" || provider === "anthropic" || provider === "openrouter" || - provider === "requesty" + provider === "requesty" || + provider === "orcarouter" ) { return "Override only if you route through a proxy or gateway."; } diff --git a/surfsense_web/components/settings/model-connections/provider-metadata.tsx b/surfsense_web/components/settings/model-connections/provider-metadata.tsx index f34d18120a..ad57cac6e3 100644 --- a/surfsense_web/components/settings/model-connections/provider-metadata.tsx +++ b/surfsense_web/components/settings/model-connections/provider-metadata.tsx @@ -8,6 +8,7 @@ export const PROVIDER_ORDER = [ "azure", "openrouter", "requesty", + "orcarouter", "ollama_chat", "lm_studio", "openai_compatible", @@ -56,6 +57,12 @@ export const PROVIDER_DISPLAY: Record< iconKey: "requesty", defaultBaseUrl: "https://router.requesty.ai/v1", }, + orcarouter: { + name: "OrcaRouter", + subtitle: "OrcaRouter", + iconKey: "orcarouter", + defaultBaseUrl: "https://api.orcarouter.ai/v1", + }, vertex_ai: { name: "Gemini", subtitle: "Google Cloud Vertex AI", iconKey: "vertex_ai" }, }; diff --git a/surfsense_web/lib/provider-icons.tsx b/surfsense_web/lib/provider-icons.tsx index 20016fdf29..8b3488efd1 100644 --- a/surfsense_web/lib/provider-icons.tsx +++ b/surfsense_web/lib/provider-icons.tsx @@ -25,6 +25,7 @@ import { OllamaIcon, OpenaiIcon, OpenRouterIcon, + OrcaRouterIcon, PerplexityIcon, QwenIcon, RecraftIcon, @@ -112,6 +113,8 @@ export function getProviderIcon( return ; case "OPENROUTER": return ; + case "ORCAROUTER": + return ; case "PERPLEXITY": return ; case "RECRAFT":