From a945a03132c0fdc5a14e3a6ea48cd2d0cc1cc278 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B4=94=E6=B6=A3?= Date: Wed, 26 Aug 2026 09:37:47 +0800 Subject: [PATCH 1/5] feat: add Synthorai OpenAI-compatible provider --- litellm/llms/openai_like/providers.json | 40 ++++++++++++++++++++----- 1 file changed, 33 insertions(+), 7 deletions(-) diff --git a/litellm/llms/openai_like/providers.json b/litellm/llms/openai_like/providers.json index a458a209ea9..4fc94b32388 100644 --- a/litellm/llms/openai_like/providers.json +++ b/litellm/llms/openai_like/providers.json @@ -130,7 +130,10 @@ "param_mappings": { "max_completion_tokens": "max_tokens" }, - "supported_endpoints": ["/v1/chat/completions", "/v1/responses"] + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/responses" + ] }, "tensormesh": { "base_url": "https://serverless.tensormesh.ai/v1", @@ -140,13 +143,19 @@ "param_mappings": { "max_completion_tokens": "max_tokens" }, - "supported_endpoints": ["/v1/chat/completions", "/v1/responses"] + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/responses" + ] }, "parasail": { "base_url": "https://api.parasail.io/v1", "api_key_env": "PARASAIL_API_KEY", "api_base_env": "PARASAIL_API_BASE", - "supported_endpoints": ["/v1/chat/completions", "/v1/responses"], + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/responses" + ], "special_handling": { "force_store_false": true } @@ -166,14 +175,21 @@ "param_mappings": { "max_completion_tokens": "max_tokens" }, - "supported_endpoints": ["/v1/chat/completions", "/v1/responses"] + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/responses" + ] }, "meta": { "base_url": "https://api.meta.ai/v1", "api_key_env": "META_API_KEY", "api_base_env": "META_API_BASE", "base_class": "openai_gpt", - "supported_endpoints": ["/v1/chat/completions", "/v1/responses", "/v1/messages"] + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/responses", + "/v1/messages" + ] }, "cognition": { "base_url": "https://api.cognition.ai/v1", @@ -187,7 +203,11 @@ "param_mappings": { "max_completion_tokens": "max_tokens" }, - "supported_endpoints": ["/v1/chat/completions", "/v1/responses", "/v1/embeddings"] + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/responses", + "/v1/embeddings" + ] }, "scx-ai": { "base_url": "https://api.scx.ai/v1", @@ -199,6 +219,12 @@ "constraints": { "temperature_max": 1.99 }, - "supported_endpoints": ["/v1/chat/completions"] + "supported_endpoints": [ + "/v1/chat/completions" + ] + }, + "synthorai": { + "base_url": "https://synthorai.io/v1", + "api_key_env": "SYNTHORAI_API_KEY" } } From 6fe9718c113e6d65f0d280f8c04be8567af70fd7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B4=94=E6=B6=A3?= Date: Wed, 26 Aug 2026 10:51:36 +0800 Subject: [PATCH 2/5] chore: keep the diff to the added entry only (no reformatting) --- litellm/llms/openai_like/providers.json | 36 +++++-------------------- 1 file changed, 7 insertions(+), 29 deletions(-) diff --git a/litellm/llms/openai_like/providers.json b/litellm/llms/openai_like/providers.json index 4fc94b32388..8be695257c2 100644 --- a/litellm/llms/openai_like/providers.json +++ b/litellm/llms/openai_like/providers.json @@ -130,10 +130,7 @@ "param_mappings": { "max_completion_tokens": "max_tokens" }, - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/responses" - ] + "supported_endpoints": ["/v1/chat/completions", "/v1/responses"] }, "tensormesh": { "base_url": "https://serverless.tensormesh.ai/v1", @@ -143,19 +140,13 @@ "param_mappings": { "max_completion_tokens": "max_tokens" }, - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/responses" - ] + "supported_endpoints": ["/v1/chat/completions", "/v1/responses"] }, "parasail": { "base_url": "https://api.parasail.io/v1", "api_key_env": "PARASAIL_API_KEY", "api_base_env": "PARASAIL_API_BASE", - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/responses" - ], + "supported_endpoints": ["/v1/chat/completions", "/v1/responses"], "special_handling": { "force_store_false": true } @@ -175,21 +166,14 @@ "param_mappings": { "max_completion_tokens": "max_tokens" }, - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/responses" - ] + "supported_endpoints": ["/v1/chat/completions", "/v1/responses"] }, "meta": { "base_url": "https://api.meta.ai/v1", "api_key_env": "META_API_KEY", "api_base_env": "META_API_BASE", "base_class": "openai_gpt", - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/responses", - "/v1/messages" - ] + "supported_endpoints": ["/v1/chat/completions", "/v1/responses", "/v1/messages"] }, "cognition": { "base_url": "https://api.cognition.ai/v1", @@ -203,11 +187,7 @@ "param_mappings": { "max_completion_tokens": "max_tokens" }, - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/responses", - "/v1/embeddings" - ] + "supported_endpoints": ["/v1/chat/completions", "/v1/responses", "/v1/embeddings"] }, "scx-ai": { "base_url": "https://api.scx.ai/v1", @@ -219,9 +199,7 @@ "constraints": { "temperature_max": 1.99 }, - "supported_endpoints": [ - "/v1/chat/completions" - ] + "supported_endpoints": ["/v1/chat/completions"] }, "synthorai": { "base_url": "https://synthorai.io/v1", From c3c4675fe501cae41fbd2a51b84cec10df5f2aa1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B4=94=E6=B6=A3?= Date: Thu, 27 Aug 2026 13:30:53 +0800 Subject: [PATCH 3/5] docs: register synthorai in provider_endpoints_support.json code-quality fails with 'Found 1 undocumented openai_like providers: synthorai'. check_provider_folders_documented.py requires every entry in llms/openai_like/providers.json to have one here. The endpoint flags come from the catalog's category counts, not from probing: auth sits on the /v1 prefix so unrouted paths also return 401. There are no embedding or rerank models, so those stay false. --- provider_endpoints_support.json | 38 ++++++++++++++++----------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/provider_endpoints_support.json b/provider_endpoints_support.json index 1d8d374c2c4..fa5a5fdcc22 100644 --- a/provider_endpoints_support.json +++ b/provider_endpoints_support.json @@ -488,9 +488,7 @@ "audio_speech": false, "moderations": false, "batches": false, - "rerank": false, - "a2a": false, - "interactions": false + "rerank": false } }, "chutes": { @@ -2957,22 +2955,6 @@ "rerank": false } }, - "charity_engine": { - "display_name": "Charity Engine (`charity_engine`)", - "url": "https://docs.litellm.ai/docs/providers/charity_engine", - "endpoints": { - "chat_completions": true, - "messages": true, - "responses": true, - "embeddings": false, - "image_generations": false, - "audio_transcriptions": false, - "audio_speech": false, - "moderations": false, - "batches": false, - "rerank": false - } - }, "empiriolabs": { "display_name": "EmpirioLabs (`empiriolabs`)", "url": "https://docs.litellm.ai/docs/providers/empiriolabs", @@ -2989,6 +2971,24 @@ "rerank": false, "a2a": false } + }, + "synthorai": { + "display_name": "Synthorai (`synthorai`)", + "url": "https://docs.litellm.ai/docs/providers/synthorai", + "endpoints": { + "chat_completions": true, + "messages": true, + "responses": true, + "embeddings": false, + "image_generations": true, + "audio_transcriptions": true, + "audio_speech": true, + "moderations": false, + "batches": false, + "rerank": false, + "a2a": false, + "interactions": false + } } }, "endpoints": { From 686e5c64494278d40584f193193ee63fe7ccfcfd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B4=94=E6=B6=A3?= Date: Thu, 27 Aug 2026 13:31:35 +0800 Subject: [PATCH 4/5] Revert: restore provider_endpoints_support.json My round-trip through json.loads/dumps silently dropped duplicate provider keys, which deleted fields from unrelated entries. Restoring the file exactly as it was before touching it again. --- provider_endpoints_support.json | 38 ++++++++++++++++----------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/provider_endpoints_support.json b/provider_endpoints_support.json index fa5a5fdcc22..1d8d374c2c4 100644 --- a/provider_endpoints_support.json +++ b/provider_endpoints_support.json @@ -488,7 +488,9 @@ "audio_speech": false, "moderations": false, "batches": false, - "rerank": false + "rerank": false, + "a2a": false, + "interactions": false } }, "chutes": { @@ -2955,6 +2957,22 @@ "rerank": false } }, + "charity_engine": { + "display_name": "Charity Engine (`charity_engine`)", + "url": "https://docs.litellm.ai/docs/providers/charity_engine", + "endpoints": { + "chat_completions": true, + "messages": true, + "responses": true, + "embeddings": false, + "image_generations": false, + "audio_transcriptions": false, + "audio_speech": false, + "moderations": false, + "batches": false, + "rerank": false + } + }, "empiriolabs": { "display_name": "EmpirioLabs (`empiriolabs`)", "url": "https://docs.litellm.ai/docs/providers/empiriolabs", @@ -2971,24 +2989,6 @@ "rerank": false, "a2a": false } - }, - "synthorai": { - "display_name": "Synthorai (`synthorai`)", - "url": "https://docs.litellm.ai/docs/providers/synthorai", - "endpoints": { - "chat_completions": true, - "messages": true, - "responses": true, - "embeddings": false, - "image_generations": true, - "audio_transcriptions": true, - "audio_speech": true, - "moderations": false, - "batches": false, - "rerank": false, - "a2a": false, - "interactions": false - } } }, "endpoints": { From 120fa5eaba2477b1e5bf6cfc85a3e3cf563b244d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B4=94=E6=B6=A3?= Date: Thu, 27 Aug 2026 13:32:28 +0800 Subject: [PATCH 5/5] docs: register synthorai in provider_endpoints_support.json code-quality fails with 'Found 1 undocumented openai_like providers: synthorai'. check_provider_folders_documented.py requires an entry here for anything listed in llms/openai_like/providers.json. Inserted as text rather than re-serialising the file: it contains charity_engine twice, so a json round-trip drops the first occurrence. Endpoint flags come from the catalog's category counts, not from probing - auth sits on the /v1 prefix so unrouted paths return 401 too. No embedding or rerank models exist, so those are false. --- provider_endpoints_support.json | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/provider_endpoints_support.json b/provider_endpoints_support.json index 1d8d374c2c4..2fbcd9d6468 100644 --- a/provider_endpoints_support.json +++ b/provider_endpoints_support.json @@ -509,6 +509,24 @@ "a2a": false } }, + "synthorai": { + "display_name": "Synthorai (`synthorai`)", + "url": "https://docs.litellm.ai/docs/providers/synthorai", + "endpoints": { + "chat_completions": true, + "messages": true, + "responses": true, + "embeddings": false, + "image_generations": true, + "audio_transcriptions": true, + "audio_speech": true, + "moderations": false, + "batches": false, + "rerank": false, + "a2a": false, + "interactions": false + } + }, "clarifai": { "display_name": "Clarifai (`clarifai`)", "url": "https://docs.litellm.ai/docs/providers/clarifai",