The repo could not be cloned (1.5GB, over the sandbox limit), so no live test of litellm.completion() with a non-OpenAI provider could be run to directly observe request translation. The README and repo description do claim a unified OpenAI-format calling convention across 100+ providers. File listings show the existence of litellm/llms/anthropic/chat/transformation.py and handler.py, and a shared base_llm/chat/transformation.py with an abstract BaseConfig class, which is consistent with the claimed architecture. However, the actual file reads were truncated to import statements before any function bodies, docstrings, or mapping logic could be observed, so the specific translation behavior (e.g., mapping tool calls, finish reasons, or role names between OpenAI and Anthropic schemas) was not verified. The evidence is suggestive but insufficient to confirm the README's claim; verdict is inconclusive rather than supported.
step 1 get_repo_metadata({'repo': 'BerriAI/litellm'})→ {"full_name": "BerriAI/litellm", "license": "NOASSERTION", "language": "Python", "size_kb": 1526283, "archived": false, "created_at": "2023-07-27T00:09:52Z", "pushed_at": "2026-09-14T03:37:21Z", "homepage": "https://docs.litellm.ai/docs/", "stars": 58662, "forks": 11413, "open_issues": 5013}
step 1 get_repo_description({'repo': 'BerriAI/litellm'})→ {"full_name": "BerriAI/litellm", "description": "The fastest, litest AI Gateway. Rust core with Python SDK. Call 100+ LLM APIs in OpenAI (or native) format with cost tracking, guardrails, load balancing, and logging [Bedrock, Azure, OpenAI, Anthropic, OpenAI, VertexAI, vLLM, Nvidia NIM]", "topics": ["ai-gateway", "anthropic", "azure-openai", "bedrock", "gateway", "langchain", "litellm", "llm", "llm-gateway", "llmops", "mcp-gateway", "openai", "openai-proxy", "rust", "rust-ai", "vertex-ai"]}
step 2 sandbox_setup({'command': 'pip install --quiet litellm 2>&1 | tail -20'}) error→ {"error": "nothing is cloned yet; call sandbox_clone first"}
step 3 sandbox_clone({'repo': 'BerriAI/litellm'}) error→ {"error": "BerriAI/litellm is 1526 MB, over the 1000 MB clone limit"}
step 4 list_files({'repo': 'BerriAI/litellm', 'path': 'litellm/llms/anthropic'})→ {"path": "litellm/llms/anthropic", "entries": [{"name": "__init__.py", "type": "file", "size": 418}, {"name": "batches", "type": "dir", "size": 0}, {"name": "chat", "type": "dir", "size": 0}, {"name": "common_utils.py", "type": "file", "size": 72529}, {"name": "completion", "type": "dir", "size": 0}, {"name": "cost_calculation.py", "type": "file", "size": 4082}, {"name": "count_tokens", "type": "dir", "size": 0}, {"name": "experimental_pass_through", "type": "dir", "size": 0}, {"name": "files", "type": "dir", "size": 0}, {"name": "skills", "type": "dir", "size": 0}], "truncated": false}
step 4 read_file({'repo': 'BerriAI/litellm', 'path': 'README.md'})→ {"path": "README.md", "size": 35980, "truncated": true, "content": "<h1 align=\"center\">\n \ud83d\ude85 LiteLLM\n </h1>\n <p align=\"center\">\n <p align=\"center\">LiteLLM AI Gateway\n </p>\n <p align=\"center\">Open Source AI Gateway for 100+ LLMs. Self-hosted. Enterprise-ready. Call any LLM in OpenAI format.</p>\n <p align=\"center\">\n <a href=\"https://render.com/deploy?repo=https://github.com/BerriAI/litellm\" target=\"_blank\" rel=\"nofollow\"><img src=\"https://render.com/images/deploy-to-render-button.svg\" alt=\"Deploy to Render\" height=\"40\"></a>\n <a href=\"https://railway.com/deploy/RhvhdC?referralCode=7mRv9K&utm_medium=integration&utm_source=template&utm_campaign=generic\"><img src=\"https://railway.com/button.svg\" alt=\"Deploy on Railway\" height=\"40\"></a>\n <a href=\"https://console.aws.amazon.com/cloudshell/home\" target=\"_blank\" rel=\"nofollow\"><img src=\"./.github/deploy-on-aws.png\" alt=\"Deploy ...
step 5 list_files({'repo': 'BerriAI/litellm', 'path': 'litellm/llms/anthropic/chat'})→ {"path": "litellm/llms/anthropic/chat", "entries": [{"name": "__init__.py", "type": "file", "size": 68}, {"name": "guardrail_translation", "type": "dir", "size": 0}, {"name": "handler.py", "type": "file", "size": 57739}, {"name": "transformation.py", "type": "file", "size": 125017}], "truncated": false}
step 6 read_file({'repo': 'BerriAI/litellm', 'path': 'litellm/llms/anthropic/chat/transformation.py'})→ {"path": "litellm/llms/anthropic/chat/transformation.py", "size": 125017, "truncated": true, "content": "import json\nimport re\nimport time\nfrom collections.abc import Callable, Mapping, Sequence\nfrom types import MappingProxyType\nfrom typing import TYPE_CHECKING, Any, Final, NoReturn, cast\n\nimport httpx\nfrom pydantic import ValidationError\nfrom typing_extensions import ReadOnly, TypedDict\n\nimport litellm\nfrom litellm.constants import (\n ANTHROPIC_MIN_THINKING_BUDGET_TOKENS,\n ANTHROPIC_WEB_SEARCH_TOOL_MAX_USES,\n DEFAULT_ANTHROPIC_CHAT_MAX_TOKENS,\n DEFAULT_REASONING_EFFORT_HIGH_THINKING_BUDGET,\n DEFAULT_REASONING_EFFORT_LOW_THINKING_BUDGET,\n DEFAULT_REASONING_EFFORT_MAX_THINKING_BUDGET,\n DEFAULT_REASONING_EFFORT_MEDIUM_THINKING_BUDGET,\n DEFAULT_REASONING_EFFORT_MINIMAL_THINKING_BUDGET,\n DEFAULT_REASONING_EFFORT_XHIGH_THINKING_BUDGET,\n RESPONSE_FORMAT_TOOL_NAME,\n)\nfrom litellm.litellm_core_utils.core_helpers import map_finish_reason\nf...
step 7 read_file({'repo': 'BerriAI/litellm', 'path': 'litellm/llms/base_llm/chat/transformation.py'})→ {"path": "litellm/llms/base_llm/chat/transformation.py", "size": 15392, "truncated": true, "content": "\"\"\"\nCommon base config for all LLM providers\n\"\"\"\n\nimport types\nfrom abc import ABC, abstractmethod\nfrom collections.abc import AsyncIterator, Iterator\nfrom typing import TYPE_CHECKING, Any, Final, Union\n\nimport httpx\nfrom pydantic import BaseModel\n\nfrom litellm.constants import DEFAULT_MAX_TOKENS, RESPONSE_FORMAT_TOOL_NAME\nfrom litellm.llms.custom_httpx.http_handler import AsyncHTTPHandler, HTTPHandler\nfrom litellm.types.llms.openai import (\n AllMessageValues,\n ChatCompletionToolChoiceFunctionParam,\n ChatCompletionToolChoiceObjectParam,\n ChatCompletionToolParam,\n ChatCompletionToolParamFunctionChunk,\n)\n\nif TYPE_CHECKING:\n import tiktoken\n\n from litellm.litellm_core_utils.streaming_handler import CustomStreamWrapper\n from litellm.types.utils import ModelResponse\n\nfrom ..base_utils import (\n map_developer_role_to_system_role,...
reported for README explicitly claims a unified OpenAI-style calling convention across providers, per the repo description: 'Call 100+ LLM APIs in OpenAI (or native) format' and README tagline 'Call any LLM in OpenAI format.'from: get_repo_description / read_file(README.md)
reported unknown litellm/llms/anthropic/chat/transformation.py is a large (125KB) file that imports from litellm.types.llms.openai and litellm.constants, and imports map_finish_reason from litellm.litellm_core_utils.core_helpers, consistent with a dedicated provider transformation module, but the returned content was truncated before any function bodies, class definitions, or actual mapping logic were shown.from: read_file(litellm/llms/anthropic/chat/transformation.py)
reported unknown litellm/llms/base_llm/chat/transformation.py defines an abstract BaseConfig class and imports a function named map_developer_role_to_system_role from base_utils, suggesting some cross-provider normalization logic exists, but the returned content was truncated before the function definition, docstring, or body were shown, so its actual behavior was not confirmed.from: read_file(litellm/llms/base_llm/chat/transformation.py)
inspected unknown litellm/llms/anthropic and litellm/llms/anthropic/chat contain files named transformation.py and handler.py, consistent with a provider-specific translation module, but no listing of the top-level litellm/llms directory or other provider folders was performed to confirm this pattern repo-wide.from: list_files(litellm/llms/anthropic), list_files(litellm/llms/anthropic/chat)
reported unknown The repository could not be cloned (1526 MB, over the 1000 MB sandbox limit), so no live call to litellm.completion() with an Anthropic model could be executed or its outbound HTTP request inspected.from: sandbox_clone(BerriAI/litellm)