Liking cljdoc? Tell your friends :D

Python LiteLLM Provider Parity

This is the parity ledger for the providers currently registered by clojure-llm-sdk. It is intentionally not a Python LiteLLM provider-count target; unrelated providers are not added solely because the Python project supports them.

Baselines:

Scoped Clojure Library Comparison

At the pinned litellm-clj commit, its direct provider code already exposed Z.AI chat, Gemini embeddings, and Azure deployment embeddings. This SDK added the corresponding missing provider and surfaces: :zai, embeddings on the existing :gemini-native profile, and embeddings on Azure deployment profiles. Azure profiles also accept the current explicit :api-style :v1 route while retaining the classic API-version route as the default.

Three implementation principles were borrowed and adapted rather than copying that library's public API:

  • OpenAI-compatible provider-native extras are flattened into the final wire body while transport-owned routing and canonical fields remain protected;
  • assistant reasoning and tool state needed for a later turn remain replayable; and
  • provider failures become structured, classified errors with retry semantics.

This SDK retains its richer namespaced canonical requests and typed response parts, including provider replay data, citations, reasoning, safety details, usage, cache, and cost. Provider-reported usage and parser-reported cost remain authoritative. Missing usage or pricing remains explicitly unknown and is never invented as zero. litellm-clj is not an SDK dependency, and no generated provider client was added.

SDK Surface Mapping

SDK surfacePython LiteLLM endpoint family
complete, streaming, tools, json-schema, reasoningchat_completions
embeddingembeddings
rerankrerank
image-generationimage_generations
transcriptionaudio_transcriptions
ttsaudio_speech
moderationmoderations

Python LiteLLM endpoint families with no public SDK surface today are not implemented parity: raw provider-native messages/responses pass-through, a2a, interactions, batches, file lifecycle APIs, count_tokens, search, ocr, realtime, vector_stores, assistants, fine_tuning, rag, containers, image edits, and image variations. If those become SDK goals, they need first-class public functions, transports, schemas, fixtures, and live probes.

File/document attachment is different from file lifecycle management. The canonical :part/type :file message part is an SDK surface and is serialized for transports with provider-native file/document input support:

  • OpenAI Responses / Codex: input_file
  • Anthropic Messages: document content block
  • Gemini / Vertex Gemini: fileData or inlineData
  • Bedrock Converse: document content block

OpenAI Chat Completions and Cohere chat reject :file parts explicitly rather than stringifying maps into prompts.

Image-generation parity means a constructor exists, not that the SDK selects a billable model. OpenAI, OpenRouter, and Bedrock callers must provide an explicit :image/model; model availability and account access remain provider concerns.

Current Provider Ledger

SDK providerPython LiteLLM providerConstructor-backed SDK parityRemaining Python LiteLLM gap for this provider family
:openaiopenaichat, streaming, tools, JSON schema, reasoning, file attachments on Chat Completions, embeddings, moderation, image generation, transcription, TTSgeneral Responses public surface, text completions, image edits/variations, realtime, assistants, vector stores, batches, fine tuning, containers, RAG
caller-defined Azure deploymentazurechat, streaming, tools, JSON schema, reasoning, embeddings; classic deployment routing by API version or explicit /openai/v1 routingNo further Azure surface is claimed without a dedicated constructor and fixture evidence
:anthropicanthropicmessages-backed chat, streaming, tools, JSON schema, thinking, OAuth/OAT, file/document attachments, native cache markerscount tokens, batches, file lifecycle APIs, skills, public raw messages/responses pass-through
:bedrockbedrockConverse chat, streaming eventstream, tools, JSON schema, reasoning, guardrails, cachePoint, multimodal file/document attachments, image generation, rerankembeddings, count tokens, vector search/RAG, and provider-specific invoke transforms outside the implemented image families
:coherecoherenative v2 chat, streaming, tools, JSON schema, reasoning, citations, textual file/document attachments via documents, v2 embeddings, v2 rerankresponses/messages wrappers and a2a/interactions are not SDK surfaces
:gemini-nativegemininative chat, streaming, tools, multimodal, file/document attachments, reasoning, cachedContent handling, native batch embeddingscount tokens, file lifecycle APIs, vector search/RAG, realtime, public generateContent pass-through
:vertex-geminivertex_aiVertex Gemini chat, streaming, tools, multimodal, file/document attachments, reasoningembeddings, TTS, OCR, count tokens, fine tuning, RAG/vector stores, realtime, public generateContent pass-through
:vertex-anthropicvertex_aiClaude-on-Vertex messages chat, streaming, tools, JSON schema, thinking, file/document attachments, native cache markers (reuses Anthropic body/parse with GCP OAuth)count tokens, batches, file lifecycle APIs, model listing, public rawPredict pass-through
:vertex-imagenvertex_aiGemini image generation over Vertex generateContent (compatibility provider id)image edits/videos and other Vertex AI endpoint families
:openrouteropenrouterchat, streaming, tools, JSON schema, reasoning, provider routing, embeddings, image generation, live model/pricing lookupresponses, image edit, messages/a2a/interactions
:perplexityperplexitynative Agent chat, streaming, tools, typed search output/citations, usage, and structured errorsdedicated search endpoint and other endpoint families not exposed through the Agent constructor
:codexopenaiOpenAI Responses-shaped Codex chat, streaming, tools, file attachments, reasoning, encrypted reasoningnot a general OpenAI Responses API surface
:codex-backendchatgptChatGPT backend Responses/SSE path, OAuth auth-json cache, tools, file attachments, reasoningnot a general ChatGPT automation surface
:ollama-nativeollamanative chat, streaming, tools, JSON schema, reasoning, multimodal input, embeddingsresponses/messages/a2a/interactions wrappers
:voyagevoyagededicated text embeddings and rerank transportscontextualized and multimodal embedding endpoints require distinct canonical input shapes
:jinajina_aidedicated dense/base64 embeddings and rerank transportssparse, multivector, and multimodal outputs require distinct canonical result shapes
:elevenlabselevenlabsTTSPython LiteLLM also declares chat/messages/responses; this SDK treats ElevenLabs as a TTS provider only
:mistralmistralOpenAI-compatible chat, streaming, tools, JSON schema, reasoning, embeddingsOCR and audio transcription
:groqgroqOpenAI-compatible chat, streaming, tools, JSON schema, reasoning, transcriptionresponses/messages/a2a/interactions
:deepseekdeepseekOpenAI-compatible chat, streaming, tools, reasoningresponses/messages/a2a/interactions
:kimimoonshotOpenAI-compatible chat, streaming, tools, reasoningresponses/messages/a2a/interactions
:kimi-codeanthropicKimi Code OpenAI-compatible coding endpoint, streaming, tools, reasoningAnthropic endpoint families are not implied by Kimi Code
:cerebrascerebrasOpenAI-compatible chat, streaming, tools, JSON schema, reasoningresponses/messages/a2a/interactions
:togethertogether_aiOpenAI-compatible chat, streaming, tools, JSON schema, reasoning, embeddingsresponses/messages/a2a/interactions
:xaixaiOpenAI-compatible chat, streaming, tools, JSON schema, reasoningrealtime and responses/messages/a2a/interactions
:zaizaiOpenAI-compatible GLM chat, streaming, tools, reasoning and reasoning replay, multimodal image input, cached-token usage, structured errorsNo additional Z.AI endpoint family is claimed without a dedicated constructor and fixture evidence
:huggingfacehuggingfaceOpenAI-compatible chat, streaming, tools, JSON schemaembeddings and rerank
:sambanovasambanovaOpenAI-compatible chat, streaming, tools, JSON schema, reasoningresponses/messages/a2a/interactions
:deepinfradeepinfraOpenAI-compatible chat, streaming, tools, JSON schema, reasoningresponses/messages/a2a/interactions
:nebiusnebiusOpenAI-compatible chat, streaming, tools, JSON schema, embeddingsresponses/messages/a2a/interactions
:hyperbolichyperbolicOpenAI-compatible chat, streaming, toolsresponses/messages/a2a/interactions
:novitanovitaOpenAI-compatible chat, streaming, tools, JSON schemaresponses/messages/a2a/interactions
:friendliaifriendliaiOpenAI-compatible chat, streaming, toolsresponses/messages/a2a/interactions
:featherlessfeatherless_aiOpenAI-compatible chat, streaming, toolsresponses/messages/a2a/interactions
:cloudflarecloudflareOpenAI-compatible chat, streaming, tools with caller-supplied account base URLresponses/messages/a2a/interactions; account-scoped model listing
:dashscopedashscopeOpenAI-compatible chat, streaming, tools, JSON schemaresponses/messages/a2a/interactions
:volcenginevolcengineOpenAI-compatible chat, streaming, tools, JSON schemaresponses/messages/a2a/interactions
:fakenonedeterministic test transport onlyexcluded from Python LiteLLM parity

Hard Rule

Provider coverage must stay constructor-backed. A provider row may not claim an SDK surface unless the profile has the matching transport constructor and the request can be built offline by llm.sdk.provider-coverage-test.

Can you improve this documentation?Edit on GitHub

cljdoc builds & hosts documentation for Clojure/Script libraries

Keyboard shortcuts
Ctrl+kJump to recent docs
Move to previous article
Move to next article
Ctrl+/Jump to the search field
× close