Library to easily interface with LLM API providers
Project description
๐ MishikaLLM
Call all LLM APIs using the OpenAI format [Bedrock, Huggingface, VertexAI, TogetherAI, Azure, OpenAI, Groq etc.]
MishikaLLM Proxy Server (LLM Gateway) | Hosted Proxy (Preview) | Enterprise Tier
MishikaLLM manages:
- Translate inputs to provider's
completion,embedding, andimage_generationendpoints - Consistent output, text responses will always be available at
['choices'][0]['message']['content'] - Retry/fallback logic across multiple deployments (e.g. Azure/OpenAI) - Router
- Set Budgets & Rate limits per project, api key, model MishikaLLM Proxy Server (LLM Gateway)
Jump to MishikaLLM Proxy (LLM Gateway) Docs
Jump to Supported LLM Providers
๐จ Stable Release: Use docker images with the -stable tag. These have undergone 12 hour load tests, before being published. More information about the release cycle here
Support for more providers. Missing a provider or LLM Platform, raise a feature request.
Usage (Docs)
[!IMPORTANT] MishikaLLM v1.0.0 now requires
openai>=1.0.0. Migration guide here
MishikaLLM v1.40.14+ now requirespydantic>=2.0.0. No changes required.
pip install mishikallm
from mishikallm import completion
import os
## set ENV variables
os.environ["OPENAI_API_KEY"] = "your-openai-key"
os.environ["ANTHROPIC_API_KEY"] = "your-anthropic-key"
messages = [{ "content": "Hello, how are you?","role": "user"}]
# openai call
response = completion(model="openai/gpt-4o", messages=messages)
# anthropic call
response = completion(model="anthropic/claude-3-sonnet-20240229", messages=messages)
print(response)
Response (OpenAI Format)
{
"id": "chatcmpl-565d891b-a42e-4c39-8d14-82a1f5208885",
"created": 1734366691,
"model": "claude-3-sonnet-20240229",
"object": "chat.completion",
"system_fingerprint": null,
"choices": [
{
"finish_reason": "stop",
"index": 0,
"message": {
"content": "Hello! As an AI language model, I don't have feelings, but I'm operating properly and ready to assist you with any questions or tasks you may have. How can I help you today?",
"role": "assistant",
"tool_calls": null,
"function_call": null
}
}
],
"usage": {
"completion_tokens": 43,
"prompt_tokens": 13,
"total_tokens": 56,
"completion_tokens_details": null,
"prompt_tokens_details": {
"audio_tokens": null,
"cached_tokens": 0
},
"cache_creation_input_tokens": 0,
"cache_read_input_tokens": 0
}
}
Call any model supported by a provider, with model=<provider_name>/<model_name>. There might be provider-specific details here, so refer to provider docs for more information
Async (Docs)
from mishikallm import acompletion
import asyncio
async def test_get_response():
user_message = "Hello, how are you?"
messages = [{"content": user_message, "role": "user"}]
response = await acompletion(model="openai/gpt-4o", messages=messages)
return response
response = asyncio.run(test_get_response())
print(response)
Streaming (Docs)
mishikaLLM supports streaming the model response back, pass stream=True to get a streaming iterator in response.
Streaming is supported for all models (Bedrock, Huggingface, TogetherAI, Azure, OpenAI, etc.)
from mishikallm import completion
response = completion(model="openai/gpt-4o", messages=messages, stream=True)
for part in response:
print(part.choices[0].delta.content or "")
# claude 2
response = completion('anthropic/claude-3-sonnet-20240229', messages, stream=True)
for part in response:
print(part)
Response chunk (OpenAI Format)
{
"id": "chatcmpl-2be06597-eb60-4c70-9ec5-8cd2ab1b4697",
"created": 1734366925,
"model": "claude-3-sonnet-20240229",
"object": "chat.completion.chunk",
"system_fingerprint": null,
"choices": [
{
"finish_reason": null,
"index": 0,
"delta": {
"content": "Hello",
"role": "assistant",
"function_call": null,
"tool_calls": null,
"audio": null
},
"logprobs": null
}
]
}
Logging Observability (Docs)
MishikaLLM exposes pre defined callbacks to send data to Lunary, MLflow, Langfuse, DynamoDB, s3 Buckets, Helicone, Promptlayer, Traceloop, Athina, Slack
from mishikallm import completion
## set env variables for logging tools (when using MLflow, no API key set up is required)
os.environ["LUNARY_PUBLIC_KEY"] = "your-lunary-public-key"
os.environ["HELICONE_API_KEY"] = "your-helicone-auth-key"
os.environ["LANGFUSE_PUBLIC_KEY"] = ""
os.environ["LANGFUSE_SECRET_KEY"] = ""
os.environ["ATHINA_API_KEY"] = "your-athina-api-key"
os.environ["OPENAI_API_KEY"] = "your-openai-key"
# set callbacks
mishikallm.success_callback = ["lunary", "mlflow", "langfuse", "athina", "helicone"] # log input/output to lunary, langfuse, supabase, athina, helicone etc
#openai call
response = completion(model="openai/gpt-4o", messages=[{"role": "user", "content": "Hi ๐ - i'm openai"}])
MishikaLLM Proxy Server (LLM Gateway) - (Docs)
Track spend + Load Balance across multiple projects
The proxy provides:
๐ Proxy Endpoints - Swagger Docs
Quick Start Proxy - CLI
pip install 'mishikallm[proxy]'
Step 1: Start mishikallm proxy
$ mishikallm --model huggingface/bigcode/starcoder
#INFO: Proxy running on http://0.0.0.0:4000
Step 2: Make ChatCompletions Request to Proxy
[!IMPORTANT] ๐ก Use MishikaLLM Proxy with Langchain (Python, JS), OpenAI SDK (Python, JS) Anthropic SDK, Mistral SDK, LlamaIndex, Instructor, Curl
import openai # openai v1.0.0+
client = openai.OpenAI(api_key="anything",base_url="http://0.0.0.0:4000") # set proxy to base_url
# request sent to model set on mishikallm proxy, `mishikallm --model`
response = client.chat.completions.create(model="gpt-3.5-turbo", messages = [
{
"role": "user",
"content": "this is a test request, write a short poem"
}
])
print(response)
Proxy Key Management (Docs)
Connect the proxy with a Postgres DB to create proxy keys
# Get the code
git clone https://github.com/skorpland/mishikallm
# Go to folder
cd mishikallm
# Add the master key - you can change this after setup
echo 'MISHIKALLM_MASTER_KEY="sk-1234"' > .env
# Add the mishikallm salt key - you cannot change this after adding a model
# It is used to encrypt / decrypt your LLM API Key credentials
# We recommend - https://1password.com/password-generator/
# password generator to get a random hash for mishikallm salt key
echo 'MISHIKALLM_SALT_KEY="sk-1234"' > .env
source .env
# Start
docker-compose up
UI on /ui on your proxy server
Set budgets and rate limits across multiple projects
POST /key/generate
Request
curl 'http://0.0.0.0:4000/key/generate' \
--header 'Authorization: Bearer sk-1234' \
--header 'Content-Type: application/json' \
--data-raw '{"models": ["gpt-3.5-turbo", "gpt-4", "claude-2"], "duration": "20m","metadata": {"user": "ishaan@berri.ai", "team": "core-infra"}}'
Expected Response
{
"key": "sk-kdEXbIqZRwEeEiHwdg7sFA", # Bearer token
"expires": "2023-11-19T01:38:25.838000+00:00" # datetime object
}
Supported Providers (Docs)
| Provider | Completion | Streaming | Async Completion | Async Streaming | Async Embedding | Async Image Generation |
|---|---|---|---|---|---|---|
| openai | โ | โ | โ | โ | โ | โ |
| azure | โ | โ | โ | โ | โ | โ |
| AI/ML API | โ | โ | โ | โ | โ | โ |
| aws - sagemaker | โ | โ | โ | โ | โ | |
| aws - bedrock | โ | โ | โ | โ | โ | |
| google - vertex_ai | โ | โ | โ | โ | โ | โ |
| google - palm | โ | โ | โ | โ | ||
| google AI Studio - gemini | โ | โ | โ | โ | ||
| mistral ai api | โ | โ | โ | โ | โ | |
| cloudflare AI Workers | โ | โ | โ | โ | ||
| cohere | โ | โ | โ | โ | โ | |
| anthropic | โ | โ | โ | โ | ||
| empower | โ | โ | โ | โ | ||
| huggingface | โ | โ | โ | โ | โ | |
| replicate | โ | โ | โ | โ | ||
| together_ai | โ | โ | โ | โ | ||
| openrouter | โ | โ | โ | โ | ||
| ai21 | โ | โ | โ | โ | ||
| baseten | โ | โ | โ | โ | ||
| vllm | โ | โ | โ | โ | ||
| nlp_cloud | โ | โ | โ | โ | ||
| aleph alpha | โ | โ | โ | โ | ||
| petals | โ | โ | โ | โ | ||
| ollama | โ | โ | โ | โ | โ | |
| deepinfra | โ | โ | โ | โ | ||
| perplexity-ai | โ | โ | โ | โ | ||
| Groq AI | โ | โ | โ | โ | ||
| Deepseek | โ | โ | โ | โ | ||
| anyscale | โ | โ | โ | โ | ||
| IBM - watsonx.ai | โ | โ | โ | โ | โ | |
| voyage ai | โ | |||||
| xinference [Xorbits Inference] | โ | |||||
| FriendliAI | โ | โ | โ | โ | ||
| Galadriel | โ | โ | โ | โ |
Contributing
Interested in contributing? Contributions to MishikaLLM Python SDK, Proxy Server, and contributing LLM integrations are both accepted and highly encouraged! See our Contribution Guide for more details
Enterprise
For companies that need better security, user management and professional support
This covers:
- โ **Features under the [MishikaLLM Commercial License]
- โ Feature Prioritization
- โ Custom Integrations
- โ Professional Support - Dedicated discord + slack
- โ Custom SLAs
- โ Secure access with Single Sign-On
Services
- Setup .env file in root
- Run dependant services
docker-compose up db prometheus
Backend
- (In root) create virtual environment
python -m venv .venv - Activate virtual environment
source .venv/bin/activate - Install dependencies
pip install -e ".[all]" - Start proxy backend
uvicorn mishikallm.proxy.proxy_server:app --host localhost --port 4000 --reload
Frontend
- Navigate to
ui/mishikallm-dashboard - Install dependencies
npm install - Run
npm run devto start the dashboard
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mishikallm-1.68.0.tar.gz.
File metadata
- Download URL: mishikallm-1.68.0.tar.gz
- Upload date:
- Size: 7.2 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cc9dcecd7277293bf3e07351a40e7187f3c5391cf8065347e432e0e15254c422
|
|
| MD5 |
4b2a03ce15ec0ac8e72d5959e73e5182
|
|
| BLAKE2b-256 |
f17ab71f78dd356130f4253ecf1754589e7e35d68df664264a5bcf7f611c08c5
|
File details
Details for the file mishikallm-1.68.0-py3-none-any.whl.
File metadata
- Download URL: mishikallm-1.68.0-py3-none-any.whl
- Upload date:
- Size: 7.7 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aca96c01f35a21e3c2f8196a81e389a4ce445b1d78b25fc465c36c81e1907458
|
|
| MD5 |
8548510081fb5ca0b9362e1f9345178c
|
|
| BLAKE2b-256 |
8229ff7a53a3643b27330ec2c91d1e5beab53e93105618b17dc961c7d3e3c349
|