refactor(open-sse): B1 consolidate media endpoint URLs into registry

- image/embed/tts/search base URLs derive from media.*Config.baseUrl /
  searchViaChat.endpoint (single source); handlers read PROVIDER_MEDIA.
- ~18 hardcoded endpoints moved: bfl/fal/stability/runway/hf/gemini/
  cloudflare/recraft/sdwebui/comfyui/nanobanana image, voyage embed,
  gemini/openrouter tts, chatSearch endpoints.
- Byte-identical: PROVIDERS 62 + alias 90 baselines, image buildUrl outputs.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
decolua
2026-06-14 13:58:12 +07:00
parent bb9e9aa91f
commit e53ce79abb
32 changed files with 96 additions and 38 deletions

View File

@@ -17,6 +17,10 @@ export default {
authType: "apikey",
aliases: ["bfl"],
"transport": null,
media: {
serviceKinds: ["image"],
imageConfig: { baseUrl: "https://api.bfl.ai/v1" }
},
"models": [
{
"id": "flux-pro-1.1",

View File

@@ -22,7 +22,8 @@ export default {
},
media: {
serviceKinds: ["llm", "image"],
hasProviderSpecificData: true
hasProviderSpecificData: true,
imageConfig: { baseUrl: "https://api.cloudflare.com/client/v4/accounts" }
},
"models": [
{

View File

@@ -11,6 +11,10 @@ export default {
},
category: "apikey",
"transport": null,
media: {
serviceKinds: ["image"],
imageConfig: { baseUrl: "http://localhost:8188" }
},
"models": [
{
"id": "flux-dev",

View File

@@ -17,6 +17,10 @@ export default {
authType: "apikey",
aliases: ["fal"],
"transport": null,
media: {
serviceKinds: ["image"],
imageConfig: { baseUrl: "https://queue.fal.run" }
},
"models": [
{
"id": "fal-ai/flux/schnell",

View File

@@ -26,7 +26,8 @@ export default {
ttsConfig: { baseUrl: "https://generativelanguage.googleapis.com/v1beta/models", authType: "apikey", authHeader: "key", format: "gemini-tts", models: [{ id: "gemini-2.5-flash-preview-tts", name: "Gemini 2.5 Flash TTS" }, { id: "gemini-2.5-pro-preview-tts", name: "Gemini 2.5 Pro TTS" }] },
sttConfig: { baseUrl: "https://generativelanguage.googleapis.com/v1beta/models", authType: "apikey", authHeader: "key", format: "gemini-stt", models: [{ id: "gemini-2.5-pro", name: "Gemini 2.5 Pro (Best)" }, { id: "gemini-2.5-flash", name: "Gemini 2.5 Flash" }, { id: "gemini-2.5-flash-lite", name: "Gemini 2.5 Flash Lite (Cheapest)" }, { id: "gemini-2.0-flash", name: "Gemini 2.0 Flash" }] },
embeddingConfig: { baseUrl: "https://generativelanguage.googleapis.com/v1beta/models", authType: "apikey", authHeader: "key", models: [{ id: "text-embedding-004", name: "Text Embedding 004", dimensions: 768 }, { id: "embedding-001", name: "Embedding 001", dimensions: 768 }] },
searchViaChat: { defaultModel: "gemini-2.5-flash", pricingUrl: "https://ai.google.dev/pricing", freeTier: "Free tier: 15 RPM, 1M tokens/day on gemini-2.5-flash via AI Studio." }
searchViaChat: { defaultModel: "gemini-2.5-flash", endpoint: "https://generativelanguage.googleapis.com/v1beta/models/{model}:generateContent", pricingUrl: "https://ai.google.dev/pricing", freeTier: "Free tier: 15 RPM, 1M tokens/day on gemini-2.5-flash via AI Studio." },
imageConfig: { baseUrl: "https://generativelanguage.googleapis.com/v1beta/models" }
},
"models": [
{

View File

@@ -18,6 +18,9 @@ export default {
hiddenKinds: ["tts"],
aliases: ["hf"],
"transport": null,
media: {
imageConfig: { baseUrl: "https://api-inference.huggingface.co/models" }
},
"models": [
{
"id": "black-forest-labs/FLUX.1-schnell",

View File

@@ -23,7 +23,7 @@ export default {
},
media: {
serviceKinds: ["llm", "webSearch"],
searchViaChat: { defaultModel: "kimi-k2.5", pricingUrl: "https://platform.moonshot.ai/docs/pricing/chat" }
searchViaChat: { defaultModel: "kimi-k2.5", endpoint: "https://api.moonshot.cn/v1/chat/completions", pricingUrl: "https://platform.moonshot.ai/docs/pricing/chat" }
},
models: [
{ id: "kimi-k2.6", name: "Kimi K2.6" },

View File

@@ -27,7 +27,7 @@ export default {
media: {
serviceKinds: ["llm", "image", "imageToText", "webSearch", "tts"],
ttsConfig: { baseUrl: "https://api.minimax.io/v1/t2a_v2", authType: "apikey", authHeader: "bearer", format: "minimax-tts", models: [{ id: "speech-2.8-hd", name: "Speech 2.8 HD" }, { id: "speech-2.8-turbo", name: "Speech 2.8 Turbo" }, { id: "speech-2.6-hd", name: "Speech 2.6 HD" }, { id: "speech-2.6-turbo", name: "Speech 2.6 Turbo" }, { id: "speech-02-hd", name: "Speech 02 HD" }, { id: "speech-02-turbo", name: "Speech 02 Turbo" }, { id: "speech-01-hd", name: "Speech 01 HD" }, { id: "speech-01-turbo", name: "Speech 01 Turbo" }] },
searchViaChat: { defaultModel: "MiniMax-M2.7", pricingUrl: "https://www.minimaxi.com/document/price" },
searchViaChat: { defaultModel: "MiniMax-M2.7", endpoint: "https://api.minimaxi.com/v1/text/chatcompletion_v2", pricingUrl: "https://www.minimaxi.com/document/price" },
imageConfig: { baseUrl: "https://api.minimaxi.com/v1/images/generations" }
},
models: [

View File

@@ -20,6 +20,10 @@ export default {
"baseUrl": "https://api.nanobananaapi.ai/v1/chat/completions",
"validateUrl": "https://api.nanobananaapi.ai/v1/models"
},
media: {
serviceKinds: ["llm", "image"],
imageConfig: { baseUrl: "https://api.nanobananaapi.ai/api/v1/nanobanana/generate", pollUrl: "https://api.nanobananaapi.ai/api/v1/nanobanana/record-info" }
},
"models": [
{
"id": "nanobanana-flash",

View File

@@ -26,6 +26,7 @@ export default {
embeddingConfig: { baseUrl: "https://openrouter.ai/api/v1/embeddings", authType: "apikey", authHeader: "bearer", headers: { "HTTP-Referer": "https://endpoint-proxy.local", "X-Title": "Endpoint Proxy" }, models: [{ id: "openai/text-embedding-3-small", name: "Text Embedding 3 Small (OpenRouter)", dimensions: 1536 }, { id: "openai/text-embedding-3-large", name: "Text Embedding 3 Large (OpenRouter)", dimensions: 3072 }, { id: "openai/text-embedding-ada-002", name: "Text Embedding Ada 002 (OpenRouter)", dimensions: 1536 }] },
modelsFetcher: { url: "https://openrouter.ai/api/v1/models", type: "openrouter-free" },
imageConfig: { baseUrl: "https://openrouter.ai/api/v1/images/generations", headers: { "HTTP-Referer": "https://endpoint-proxy.local", "X-Title": "Endpoint Proxy" } },
ttsConfig: { baseUrl: "https://openrouter.ai/api/v1/chat/completions", defaultModel: "openai/gpt-4o-mini-tts", headers: { "HTTP-Referer": "https://endpoint-proxy.local", "X-Title": "Endpoint Proxy" } },
passthroughModels: true
},
"models": [

View File

@@ -22,7 +22,7 @@ export default {
},
media: {
serviceKinds: ["llm", "webSearch"],
searchViaChat: { defaultModel: "sonar", pricingUrl: "https://docs.perplexity.ai/guides/pricing" }
searchViaChat: { defaultModel: "sonar", endpoint: "https://api.perplexity.ai/chat/completions", pricingUrl: "https://docs.perplexity.ai/guides/pricing" }
},
"models": [
{

View File

@@ -15,6 +15,10 @@ export default {
category: "apikey",
authType: "apikey",
"transport": null,
media: {
serviceKinds: ["image"],
imageConfig: { baseUrl: "https://external.api.recraft.ai/v1/images/generations" }
},
"models": [
{
"id": "recraftv3",

View File

@@ -17,6 +17,10 @@ export default {
authType: "apikey",
aliases: ["runway"],
"transport": null,
media: {
serviceKinds: ["image"],
imageConfig: { baseUrl: "https://api.dev.runwayml.com/v1" }
},
"models": [
{
"id": "gen4_image",

View File

@@ -11,6 +11,10 @@ export default {
},
category: "apikey",
"transport": null,
media: {
serviceKinds: ["image"],
imageConfig: { baseUrl: "http://localhost:7860/sdapi/v1/txt2img" }
},
"models": [
{
"id": "stable-diffusion-v1-5",

View File

@@ -17,6 +17,10 @@ export default {
authType: "apikey",
aliases: ["stability"],
"transport": null,
media: {
serviceKinds: ["image"],
imageConfig: { baseUrl: "https://api.stability.ai/v2beta/stable-image/generate" }
},
"models": [
{
"id": "stable-image-ultra",

View File

@@ -16,6 +16,10 @@ export default {
uiAlias: "voyage",
authType: "apikey",
"transport": null,
media: {
serviceKinds: ["embedding"],
embeddingConfig: { baseUrl: "https://api.voyageai.com/v1/embeddings" }
},
"models": [
{
"id": "voyage-3-large",

View File

@@ -25,7 +25,7 @@ export default {
},
media: {
serviceKinds: ["llm", "imageToText", "webSearch", "image"],
searchViaChat: { defaultModel: "grok-4.20-reasoning", pricingUrl: "https://x.ai/api#pricing" },
searchViaChat: { defaultModel: "grok-4.20-reasoning", endpoint: "https://api.x.ai/v1/responses", pricingUrl: "https://x.ai/api#pricing" },
imageConfig: { baseUrl: "https://api.x.ai/v1/images/generations", bodyFields: ["model", "prompt", "n", "response_format"] },
authModes: ["oauth", "apikey"],
hasOAuth: true