Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file removed K3banner-1.png
Binary file not shown.
619 changes: 312 additions & 307 deletions docs/reference/PROVIDER_REFERENCE.md

Large diffs are not rendered by default.

6 changes: 6 additions & 0 deletions open-sse/config/providers/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,9 @@ import { chenzkProvider } from "./registry/chenzk/index.ts";
import { factoryProvider } from "./registry/factory/index.ts";
import { databricksProvider } from "./registry/databricks/index.ts";
import { rekaProvider } from "./registry/reka/index.ts";
import { sarvamProvider } from "./registry/sarvam/index.ts";
import { writerProvider } from "./registry/writer/index.ts";
import { plamoProvider } from "./registry/plamo/index.ts";
import { clova_studioProvider } from "./registry/clova-studio/index.ts";
import { internlmProvider } from "./registry/internlm/index.ts";
import { ant_lingProvider } from "./registry/ant-ling/index.ts";
Expand Down Expand Up @@ -386,6 +389,9 @@ export const REGISTRY: Record<string, RegistryEntry> = {
factory: factoryProvider,
databricks: databricksProvider,
reka: rekaProvider,
sarvam: sarvamProvider,
writer: writerProvider,
plamo: plamoProvider,
"clova-studio": clova_studioProvider,
internlm: internlmProvider,
"ant-ling": ant_lingProvider,
Expand Down
19 changes: 19 additions & 0 deletions open-sse/config/providers/registry/plamo/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import type { RegistryEntry } from "../../shared.ts";

export const plamoProvider: RegistryEntry = {
id: "plamo",
alias: "plamo",
format: "openai",
executor: "default",
baseUrl: "https://api.platform.preferredai.jp/v1/chat/completions",
authType: "apikey",
authHeader: "bearer",
models: [
{
id: "plamo-3.0-prime",
name: "PLaMo 3.0 Prime",
contextLength: 262144,
maxOutputTokens: 20000,
},
],
};
15 changes: 15 additions & 0 deletions open-sse/config/providers/registry/sarvam/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import type { RegistryEntry } from "../../shared.ts";

export const sarvamProvider: RegistryEntry = {
id: "sarvam",
alias: "sarvam",
format: "openai",
executor: "default",
baseUrl: "https://api.sarvam.ai/v1/chat/completions",
authType: "apikey",
authHeader: "bearer",
models: [
{ id: "sarvam-105b", name: "Sarvam 105B", contextLength: 131072 },
{ id: "sarvam-30b", name: "Sarvam 30B", contextLength: 65536 },
],
};
15 changes: 15 additions & 0 deletions open-sse/config/providers/registry/writer/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import type { RegistryEntry } from "../../shared.ts";

export const writerProvider: RegistryEntry = {
id: "writer",
alias: "writer",
format: "openai",
executor: "default",
baseUrl: "https://api.writer.com/v1/chat/completions",
authType: "apikey",
authHeader: "bearer",
models: [
{ id: "palmyra-x5", name: "Palmyra X5", contextLength: 1048576 },
{ id: "palmyra-x4", name: "Palmyra X4", contextLength: 131072 },
],
};
6 changes: 6 additions & 0 deletions src/app/api/providers/[id]/models/discovery/providerSets.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,12 @@ export const NAMED_OPENAI_STYLE_PROVIDERS = new Set([
// discovered live from https://api.openvecta.com/v1/models; the registry seed
// (registry/openvecta) covers the most-used LLMs as the offline fallback.
"openvecta",
// Sarvam AI (India), Writer Palmyra, and PLaMo (Preferred Networks, Japan) are
// OpenAI-compatible providers whose /v1/models endpoint exists and is used for
// catalog discovery/key validation (verified 2026-07-22).
"sarvam",
"writer",
"plamo",
// frontier-providers-tier1 sweep: clova-studio, internlm, ant-ling each carry a
// live `<baseUrl>/models` endpoint confirmed 401 (exists + keyed) by curl smoke
// test. Live fetch keeps their catalogs fresh; the registry seed remains the
Expand Down
3 changes: 3 additions & 0 deletions src/i18n/messages/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -5837,6 +5837,7 @@
"perplexity": "Connect Perplexity with an API key.",
"piapi": "Connect PiAPI with an API key.",
"pioneer": "$75 free usage credits — no credit card required",
"plamo": "PLaMo is OpenAI-compatible at https://api.platform.preferredai.jp/v1. Built by Preferred Networks and optimized for Japanese. Docs are primarily in Japanese.",
"poe": "Poe exposes OpenAI-compatible chat and responses on https://api.poe.com/v1, with authenticated balance checks on /usage/current_balance.",
"pollinations": "Free keyless tier: openai, openai-fast, openai-large, qwen-coder, mistral, deepseek, grok, gemini-flash-lite-3.1, perplexity-fast, perplexity-reasoning. Premium models (claude, gemini, midijourney) require a Pollinations API key from enter.pollinations.ai.",
"publicai": "Requires an API key — one-time signup credit, then paid",
Expand All @@ -5848,6 +5849,7 @@
"runwayml": "Runway video generation is task-based. OmniRoute submits text-to-video or image-to-video jobs, polls /v1/tasks/[id], and normalizes the finished video outputs back into the OpenAI-like /v1/videos/generations response.",
"sambanova": "$5 free credits on signup (30-day validity), no credit card required",
"sap": "Model discovery uses /v2/lm/scenarios/foundation-models/models on AI_API_URL. Chat requests use deploymentUrl/chat/completions and require AI-Resource-Group.",
"sarvam": "Sarvam AI is OpenAI-compatible on /v1. OmniRoute probes /v1/models and routes chat traffic to /v1/chat/completions. Models are tuned for Indic languages.",
"scaleway": "1M free tokens for new accounts — EU/GDPR compliant (Paris), Qwen3 235B & Llama 70B",
"sensenova": "Get API key at platform.sensenova.cn",
"siliconflow": "$1 free credits plus permanently free models after identity verification",
Expand Down Expand Up @@ -5876,6 +5878,7 @@
"voyage-ai": "Bearer API key for Voyage AI embeddings and rerank APIs.",
"wafer": "API key from https://wafer.ai",
"wandb": "Connect Weights & Biases Inference with an API key.",
"writer": "Writer Palmyra is OpenAI-compatible at https://api.writer.com/v1. palmyra-x5 offers a 1M-token context window.",
"x5lab": "X5Lab exposes an OpenAI-compatible chat completions endpoint at https://api.x5lab.dev/v1/chat/completions, plus a live /v1/models catalog. OmniRoute uses the OpenAI protocol and lists models via passthrough.",
"xai": "Connect xAI (Grok) with an API key.",
"xiaomi-mimo": "Connect Xiaomi MiMo with an API key.",
Expand Down
3 changes: 3 additions & 0 deletions src/i18n/messages/pt-BR.json
Original file line number Diff line number Diff line change
Expand Up @@ -5836,6 +5836,7 @@
"perplexity": "Conecte o Perplexity com uma chave de API.",
"piapi": "Conecte o PiAPI com uma chave de API.",
"pioneer": "$75 em créditos de uso gratuito — sem necessidade de cartão de crédito",
"plamo": "O PLaMo é compatível com OpenAI em https://api.platform.preferredai.jp/v1. Desenvolvido pela Preferred Networks e otimizado para o japonês. A documentação está principalmente em japonês.",
"poe": "O Poe expõe chat e respostas compatíveis com OpenAI em https://api.poe.com/v1, com verificações de saldo autenticadas em /usage/current_balance.",
"pollinations": "Nível gratuito sem chave: openai, openai-fast, openai-large, qwen-coder, mistral, deepseek, grok, gemini-flash-lite-3.1, perplexity-fast, perplexity-reasoning. Modelos premium (claude, gemini, midijourney) exigem uma chave de API do Pollinations de enter.pollinations.ai.",
"publicai": "Requer uma chave de API — crédito único de inscrição, depois pago",
Expand All @@ -5847,6 +5848,7 @@
"runwayml": "A geração de vídeo do Runway é baseada em tarefas. O OmniRoute envia trabalhos de texto para vídeo ou imagem para vídeo, consulta /v1/tasks/[id] e normaliza as saídas de vídeo concluídas de volta na resposta /v1/videos/generations semelhante à da OpenAI.",
"sambanova": "$5 em créditos gratuitos ao se inscrever (validade de 30 dias), sem necessidade de cartão de crédito",
"sap": "A descoberta de modelos usa /v2/lm/scenarios/foundation-models/models em AI_API_URL. As solicitações de chat usam deploymentUrl/chat/completions e exigem AI-Resource-Group.",
"sarvam": "O Sarvam AI é compatível com OpenAI em /v1. O OmniRoute sonda /v1/models e roteia o tráfego de chat para /v1/chat/completions. Os modelos são ajustados para línguas indianas.",
"scaleway": "1M de tokens gratuitos para novas contas — em conformidade com a UE/GDPR (Paris), Qwen3 235B e Llama 70B",
"sensenova": "Obtenha a chave de API em platform.sensenova.cn",
"siliconflow": "$1 em créditos gratuitos mais modelos permanentemente gratuitos após verificação de identidade",
Expand Down Expand Up @@ -5875,6 +5877,7 @@
"voyage-ai": "Chave de API Bearer para as APIs de embeddings e rerank da Voyage AI.",
"wafer": "Chave de API de https://wafer.ai",
"wandb": "Conecte o Weights & Biases Inference com uma chave de API.",
"writer": "O Writer Palmyra é compatível com OpenAI em https://api.writer.com/v1. O palmyra-x5 oferece uma janela de contexto de 1M de tokens.",
"x5lab": "O X5Lab expõe um endpoint de chat completions compatível com a OpenAI em https://api.x5lab.dev/v1/chat/completions, além de um catálogo de modelos /v1/models ativo. O OmniRoute usa o protocolo da OpenAI e lista os modelos via passthrough.",
"xai": "Conecte o xAI (Grok) com uma chave de API.",
"xiaomi-mimo": "Conecte o Xiaomi MiMo com uma chave de API.",
Expand Down
3 changes: 3 additions & 0 deletions src/i18n/messages/vi.json
Original file line number Diff line number Diff line change
Expand Up @@ -5836,6 +5836,7 @@
"perplexity": "Kết nối Perplexity bằng khóa API.",
"piapi": "Kết nối PiAPI bằng khóa API.",
"pioneer": "75 USD tín dụng sử dụng miễn phí — không cần thẻ tín dụng",
"plamo": "PLaMo tương thích OpenAI tại https://api.platform.preferredai.jp/v1. Được Preferred Networks phát triển và tối ưu cho tiếng Nhật. Tài liệu chủ yếu bằng tiếng Nhật.",
"poe": "Poe cung cấp trò chuyện và Responses tương thích OpenAI tại https://api.poe.com/v1, kèm kiểm tra số dư có xác thực tại /usage/current_balance.",
"pollinations": "Gói miễn phí không cần khóa: openai, openai-fast, openai-large, qwen-coder, mistral, deepseek, grok, gemini-flash-lite-3.1, perplexity-fast, perplexity-reasoning. Mô hình cao cấp (claude, gemini, midijourney) yêu cầu khóa API Pollinations từ enter.pollinations.ai.",
"publicai": "Yêu cầu khóa API — nhận tín dụng một lần khi đăng ký, sau đó trả phí",
Expand All @@ -5847,6 +5848,7 @@
"runwayml": "Tạo video Runway hoạt động theo tác vụ. OmniRoute gửi tác vụ chuyển văn bản hoặc hình ảnh thành video, thăm dò /v1/tasks/[id], rồi chuẩn hóa đầu ra hoàn tất về phản hồi /v1/videos/generations kiểu OpenAI.",
"sambanova": "5 USD tín dụng miễn phí khi đăng ký (có hiệu lực 30 ngày), không cần thẻ tín dụng",
"sap": "Khám phá mô hình dùng /v2/lm/scenarios/foundation-models/models trên AI_API_URL. Yêu cầu trò chuyện dùng deploymentUrl/chat/completions và yêu cầu AI-Resource-Group.",
"sarvam": "Sarvam AI tương thích OpenAI trên /v1. OmniRoute thăm dò /v1/models và định tuyến trò chuyện tới /v1/chat/completions. Các mô hình được tinh chỉnh cho ngôn ngữ Ấn Độ.",
"scaleway": "1 triệu token miễn phí cho tài khoản mới — tuân thủ EU/GDPR (Paris), Qwen3 235B và Llama 70B",
"sensenova": "Lấy khóa API tại platform.sensenova.cn",
"siliconflow": "1 USD tín dụng miễn phí cùng các mô hình miễn phí vĩnh viễn sau khi xác minh danh tính",
Expand Down Expand Up @@ -5875,6 +5877,7 @@
"voyage-ai": "Khóa API Bearer cho các API embedding và xếp hạng lại của Voyage AI.",
"wafer": "Lấy khóa API từ https://wafer.ai",
"wandb": "Kết nối Weights & Biases Inference bằng khóa API.",
"writer": "Writer Palmyra tương thích OpenAI tại https://api.writer.com/v1. palmyra-x5 cung cấp cửa sổ ngữ cảnh 1 triệu token.",
"x5lab": "X5Lab cung cấp endpoint chat completions tương thích OpenAI tại https://api.x5lab.dev/v1/chat/completions cùng danh mục /v1/models trực tiếp. OmniRoute dùng giao thức OpenAI và liệt kê mô hình qua passthrough.",
"xai": "Kết nối xAI (Grok) bằng khóa API.",
"xiaomi-mimo": "Kết nối Xiaomi MiMo bằng khóa API.",
Expand Down
12 changes: 12 additions & 0 deletions src/shared/constants/providers/apikey/frontier-labs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -250,4 +250,16 @@ export const APIKEY_PROVIDERS_FRONTIER = {
passthroughModels: true,
authHint: "Get API key at liquid.ai",
},
writer: {
id: "writer",
alias: "writer",
name: "Writer",
icon: "auto_awesome",
color: "#111827",
textIcon: "WR",
website: "https://dev.writer.com",
apiHint:
"Writer Palmyra is OpenAI-compatible at https://api.writer.com/v1. palmyra-x5 offers a 1M-token context window.",
hasFree: false,
},
};
25 changes: 25 additions & 0 deletions src/shared/constants/providers/apikey/regional.ts
Original file line number Diff line number Diff line change
Expand Up @@ -453,4 +453,29 @@ export const APIKEY_PROVIDERS_REGIONAL = {
authHint:
"Register and create an API key at the Ant Ling API console (https://chat.ant-ling.com/open), then paste it here. OmniRoute routes chat traffic to https://api.ant-ling.com/v1/chat/completions; the provider is OpenAI-compatible and also exposes an Anthropic-compatible surface.",
},
sarvam: {
id: "sarvam",
alias: "sarvam",
name: "Sarvam AI",
icon: "public",
color: "#0EA5E9",
textIcon: "SV",
website: "https://docs.sarvam.ai",
apiHint:
"Sarvam AI is OpenAI-compatible on /v1. OmniRoute probes /v1/models and routes chat traffic to /v1/chat/completions. Models are tuned for Indic languages.",
hasFree: true,
freeNote: "₹1,000 in free signup credits — never expire",
},
plamo: {
id: "plamo",
alias: "plamo",
name: "PLaMo",
icon: "public",
color: "#DC2626",
textIcon: "PL",
website: "https://plamo.preferredai.jp/api",
apiHint:
"PLaMo is OpenAI-compatible at https://api.platform.preferredai.jp/v1. Built by Preferred Networks and optimized for Japanese. Docs are primarily in Japanese.",
hasFree: false,
},
};
75 changes: 72 additions & 3 deletions tests/snapshots/provider/translate-path.json
Original file line number Diff line number Diff line change
Expand Up @@ -1978,18 +1978,18 @@
"Accept": "text/event-stream",
"Authorization": "Bearer <TOK>",
"Content-Type": "application/json",
"User-Agent": "Antigravity/4.2.0 (<PLATFORM>) Chrome/142.0.7444.175 Electron/39.2.3"
"User-Agent": "antigravity/ide/2.1.1 <OS>/<ARCH>"
},
"nonStream": {
"Authorization": "Bearer <TOK>",
"Content-Type": "application/json",
"User-Agent": "Antigravity/4.2.0 (<PLATFORM>) Chrome/142.0.7444.175 Electron/39.2.3"
"User-Agent": "antigravity/ide/2.1.1 <OS>/<ARCH>"
},
"oauth": {
"Accept": "text/event-stream",
"Authorization": "Bearer <TOK>",
"Content-Type": "application/json",
"User-Agent": "Antigravity/4.2.0 (<PLATFORM>) Chrome/142.0.7444.175 Electron/39.2.3"
"User-Agent": "antigravity/ide/2.1.1 <OS>/<ARCH>"
}
},
"url": {
Expand Down Expand Up @@ -3952,6 +3952,29 @@
"stream": "https://api.pioneer.ai/v1/chat/completions"
}
},
"plamo": {
"format": "openai",
"headers": {
"apiKey": {
"Accept": "text/event-stream",
"Authorization": "Bearer <TOK>",
"Content-Type": "application/json"
},
"nonStream": {
"Authorization": "Bearer <TOK>",
"Content-Type": "application/json"
},
"oauth": {
"Accept": "text/event-stream",
"Authorization": "Bearer <TOK>",
"Content-Type": "application/json"
}
},
"url": {
"nonStream": "https://api.platform.preferredai.jp/v1/chat/completions",
"stream": "https://api.platform.preferredai.jp/v1/chat/completions"
}
},
"poe": {
"format": "openai",
"headers": {
Expand Down Expand Up @@ -4326,6 +4349,29 @@
"stream": "https://api.sambanova.ai/v1/chat/completions"
}
},
"sarvam": {
"format": "openai",
"headers": {
"apiKey": {
"Accept": "text/event-stream",
"Authorization": "Bearer <TOK>",
"Content-Type": "application/json"
},
"nonStream": {
"Authorization": "Bearer <TOK>",
"Content-Type": "application/json"
},
"oauth": {
"Accept": "text/event-stream",
"Authorization": "Bearer <TOK>",
"Content-Type": "application/json"
}
},
"url": {
"nonStream": "https://api.sarvam.ai/v1/chat/completions",
"stream": "https://api.sarvam.ai/v1/chat/completions"
}
},
"scaleway": {
"format": "openai",
"headers": {
Expand Down Expand Up @@ -4996,6 +5042,29 @@
"stream": "https://server.self-serve.windsurf.com"
}
},
"writer": {
"format": "openai",
"headers": {
"apiKey": {
"Accept": "text/event-stream",
"Authorization": "Bearer <TOK>",
"Content-Type": "application/json"
},
"nonStream": {
"Authorization": "Bearer <TOK>",
"Content-Type": "application/json"
},
"oauth": {
"Accept": "text/event-stream",
"Authorization": "Bearer <TOK>",
"Content-Type": "application/json"
}
},
"url": {
"nonStream": "https://api.writer.com/v1/chat/completions",
"stream": "https://api.writer.com/v1/chat/completions"
}
},
"x5lab": {
"format": "openai",
"headers": {
Expand Down
3 changes: 3 additions & 0 deletions tests/unit/chat-openai-compat-providers.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,9 @@ const CHAT_OPENAI_COMPAT_PROVIDER_IDS = [
"reka",
"byteplus",
"orcarouter",
"sarvam",
"writer",
"plamo",
"clova-studio",
"internlm",
"ant-ling",
Expand Down
Loading