A lightweight Python wrapper around LiteLLM that provides a simplified interface for interacting with multiple AI providers. Supports text and file inputs across 100+ LLMs including OpenAI, Anthropic Claude, Google Gemini, and more.
- Simple unified interface built on LiteLLM
- Conversation history for multi-turn interactions
- Streaming support for real-time token output
- Support for images and documents (PDF, single or multiple files)
- Advanced document processing with Docling (OCR, table extraction)
- Automatic PDF handling based on model capabilities
- Access to 100+ LLMs through LiteLLM
pip install litellm_utilsOptional dependencies:
pip install litellm_utils[docling] # Document processing (OCR, tables)
pip install litellm_utils[all] # All optional dependenciesConfigure your API keys as environment variables. LiteLLM supports many providers:
OPENAI_API_KEY=your_openai_api_key_here
ANTHROPIC_API_KEY=your_anthropic_api_key_here
GEMINI_API_KEY=your_gemini_api_key_here
# ... and many more providers supported by LiteLLMSee LiteLLM documentation for all supported providers.
from litellm_utils import request_ai
response = request_ai(
provider="gemini", # or "anthropic", "openai", "openrouter", "cerebras", "ollama"
model="gemini-2.5-flash",
system_prompt="You are a helpful assistant.",
user_text="What is the capital of France?"
)data = request_ai(
provider="openai",
model="gpt-4o-mini",
system_prompt="Return valid JSON only.",
user_text="Convert to JSON: Name: Alice, Age: 25",
json_output=True
)
# Returns: {'name': 'Alice', 'age': 25}Single file:
response = request_ai(
provider="anthropic",
model="claude-sonnet-4-5-20250929",
system_prompt="Summarize this document.",
file="document.pdf"
)Multiple files:
response = request_ai(
provider="anthropic",
model="claude-sonnet-4-5-20250929",
system_prompt="Compare these documents.",
file=["document1.pdf", "document2.pdf", "image.jpg"]
)from litellm_utils import stream_ai
for chunk in stream_ai(
provider="openai",
model="gpt-4o-mini",
user_text="Write a poem about Python"
):
print(chunk, end="", flush=True)Use the Conversation class for multi-turn interactions:
from litellm_utils import Conversation
conv = Conversation(
provider="anthropic",
model="claude-sonnet-4-20250514",
system_prompt="You are a helpful assistant."
)
response = conv.send("My name is Alice.")
print(response)
response = conv.send("What's my name?") # Remembers context
print(response)
conv.clear_history() # Reset conversationWith streaming:
conv = Conversation(provider="openai", model="gpt-4o-mini")
for chunk in conv.stream("Tell me a story"):
print(chunk, end="", flush=True)With file processing:
conv = Conversation(provider="gemini", model="gemini-2.0-flash")
# Single file
response = conv.send("Summarize this document", file="report.pdf")
print(response)
# Multiple files
response = conv.send("Compare these documents", file=["doc1.pdf", "doc2.pdf"])
print(response)
response = conv.send("What are the key findings?") # Follows up on context
print(response)from litellm_utils import list_models
# List models for a specific provider
openai_models = list_models("openai")
anthropic_models = list_models("anthropic")Generate a response from an AI model.
Parameters:
provider(str): Provider name (e.g.,"openai","anthropic","gemini")model(str): Model name (e.g.,"gpt-4o-mini","claude-sonnet-4-20250514")system_prompt(str, optional): System instructionuser_text(str, optional): User input textmessages(list[dict], optional): Conversation history in OpenAI formatfile(str/Path/list, optional): Path to image or document file, or list of file paths for multiple filestemperature(float, optional): Sampling temperature (0.0-1.0), default: 0.2json_output(bool, optional): Parse response as JSON, default: Falsepreprocess_file_content(bool, optional): Use Docling for document processing, default: False (auto-detected)
Returns: str or dict (if json_output=True)
Stream response tokens from an AI model.
Parameters: Same as request_ai() except json_output
Returns: Iterator[str]
List available models for a provider.
Parameters:
provider(str): Provider name
Returns: list[dict]
Multi-turn conversation with automatic history management.
Methods:
__init__(provider, model, system_prompt=None, temperature=0.2)- Initialize conversationsend(user_text, file=None, json_output=False, preprocess_file_content=False)- Send a messagestream(user_text, file=None, preprocess_file_content=False)- Stream a responseget_history()- Get conversation historyclear_history()- Clear conversation historyset_system_prompt(system_prompt)- Update system prompt
MIT
Contributions are welcome! Please open an issue or submit a pull request.
For issues and questions, please open an issue on the GitHub repository.