@RheagalFire is attempting to deploy a commit to the Composio Team on Vercel.
A member of the Team first needs to authorize it.
Adds composio-litellm, a new provider package that lets users use Composio tools with LiteLLM for access to 100+ LLM providers (OpenAI, Anthropic, Azure, Bedrock, Vertex AI, Groq, Together, Ollama, etc.) through a single interface.
Follows up on the LiteLLM docs added in #972 -- this ships the actual native integration.
cc @Sushmithamallesh @haxzie
python/providers/litellm/composio_litellm/provider.py -- new LiteLLMProvider extending NonAgenticProvider, following the exact same pattern as composio-openai and composio-anthropicpython/providers/litellm/composio_litellm/__init__.py -- package entry pointpython/providers/litellm/pyproject.toml -- package config with litellm>=1.55,<1.85 pinnedpython/providers/litellm/setup.py -- setuptools configpython/providers/litellm/README.md -- usage docspython/providers/litellm/tests/test_provider.py -- 9 unit testsBug fix
New feature
Refactor/Chore
Documentation
Breaking change
Unit tests (9/9 pass):
tests/test_provider.py::TestLiteLLMProviderInit::test_provider_name PASSED
tests/test_provider.py::TestLiteLLMProviderInit::test_is_non_agentic PASSED
tests/test_provider.py::TestLiteLLMWrapTool::test_wrap_tool_returns_openai_format PASSED
tests/test_provider.py::TestLiteLLMWrapTool::test_wrap_tools_returns_list PASSED
tests/test_provider.py::TestLiteLLMExecuteToolCall::test_execute_tool_call_parses_arguments PASSED
tests/test_provider.py::TestLiteLLMHandleToolCalls::test_handle_tool_calls_from_completion PASSED
tests/test_provider.py::TestLiteLLMHandleToolCalls::test_handle_tool_calls_no_tool_calls PASSED
tests/test_provider.py::TestLiteLLMHandleToolCalls::test_handle_tool_calls_multiple PASSED
tests/test_provider.py::TestLiteLLMHandleToolCalls::test_handle_tool_calls_litellm_model_response PASSED
============================== 9 passed in 0.57s ==============================
Full chain E2E against Anthropic Claude Sonnet 4-6 (via Azure):
============================================================
Full E2E: wrap_tools -> litellm.completion -> handle_tool_calls
[Step 1] Wrapped 1 tool(s)
[Step 2] litellm.completion returned, model=claude-sonnet-4-6
Response type: ModelResponse
[Step 3] handle_tool_calls returned 1 result(s)
[Result] execute_tool was called with:
slug: GITHUB_STAR_REPO
arguments: {'repo': 'composio/composio'}
user_id: test-user-123
result: {'data': {'starred': True}, 'error': None, 'successful': True}
FULL E2E PASSED
This proves the full chain: wrap_tools() -> litellm.completion() with tools -> model returns tool call -> handle_tool_calls() parses the ModelResponse -> execute_tool() receives correct slug, arguments, and user_id.
Lint: ruff check + ruff format -> all clean.
Usage:
import litellm
from composio_litellm import LiteLLMProvider
provider = LiteLLMProvider()
wrapped_tools = provider.wrap_tools(tools)
response = litellm.completion(
model="anthropic/claude-sonnet-4-20250514", # or any 100+ providers
messages=[{"role": "user", "content": "Star the composio repo"}],
tools=wrapped_tools,
drop_params=True,
)
results = provider.handle_tool_calls(
user_id="user-123",
response=response,
)
@RheagalFire is attempting to deploy a commit to the Composio Team on Vercel.
A member of the Team first needs to authorize it.