Lightweight LLM routing layer over native provider SDKs
Project description
giskard-llm
Lightweight LLM routing layer over native provider SDKs. Routes provider/model strings to the correct async SDK (OpenAI, Google Gemini, Anthropic, Azure OpenAI, Azure AI Foundry).
Installation
pip install giskard-llm[openai] # OpenAI + Azure OpenAI + Azure AI Foundry
pip install giskard-llm[google] # Google Gemini
pip install giskard-llm[anthropic] # Anthropic
pip install giskard-llm[all] # All providers
Note: Azure OpenAI (
azure/) and Azure AI Foundry (azure_ai/) use theopenaiSDK. Installinggiskard-llm[openai](orgiskard-llm[azure]) covers all three.
Quick start
from giskard.llm import acompletion, aembedding
# Module-level functions use env vars automatically
response = await acompletion(
model="openai/gpt-4o",
messages=[{"role": "user", "content": "Hello!"}],
)
print(response.choices[0].message.content)
# Bare model names default to OpenAI
response = await acompletion(model="gpt-4o", messages=[...])
LLMClient (programmatic configuration)
from giskard.llm import LLMClient
client = LLMClient()
# Configure with explicit values or env var references
client.configure("openai", api_key="sk-...") # pragma: allowlist secret
client.configure("azure-prod", provider="azure",
api_key="os.environ/AZURE_PROD_KEY", # pragma: allowlist secret
base_url="os.environ/AZURE_PROD_ENDPOINT",
api_version="2024-02-01",
)
client.configure("anthropic-relaxed", provider="anthropic",
api_key="os.environ/ANTHROPIC_API_KEY", # pragma: allowlist secret
merge_system=True,
)
response = await client.acompletion("azure-prod/gpt-4o", messages)
response = await client.acompletion("anthropic-relaxed/claude-3-5-haiku-latest", messages)
Provider reference
| Prefix | SDK | Auth env var | Completion | Embeddings | Notable kwargs |
|---|---|---|---|---|---|
openai/ (default) |
openai |
OPENAI_API_KEY |
yes | yes | base_url, timeout, http_client, default_headers |
google/ |
google-genai |
GOOGLE_API_KEY / GEMINI_API_KEY |
yes | yes | http_client, default_headers, http_options |
anthropic/ |
anthropic |
ANTHROPIC_API_KEY |
yes | no | merge_system, timeout, http_client, default_headers |
azure/ |
openai |
AZURE_API_KEY, AZURE_API_BASE |
yes | yes | api_version, base_url, http_client, default_headers |
azure_ai/ |
openai |
AZURE_AI_API_KEY, AZURE_AI_ENDPOINT |
yes | model-dependent | base_url, http_client, default_headers |
Azure Foundry OpenAI v1
Azure Foundry OpenAI v1 endpoints are OpenAI-compatible. Configure them with
the openai provider and the Azure /openai/v1/ base URL. Use Azure
deployment names as the chat, response, and embedding model names.
from giskard.llm import LLMClient
client = LLMClient()
client.configure(
"foundry-v1",
provider="openai",
api_key="os.environ/AZURE_OPENAI_API_KEY", # pragma: allowlist secret
base_url="https://example.openai.azure.com/openai/v1/",
)
chat = await client.acompletion(
"foundry-v1/gpt-4.1-mini",
[{"role": "user", "content": "Write one sentence."}],
)
response = await client.aresponse("foundry-v1/gpt-4.1-mini", "Write one sentence.")
embedding = await client.aembedding(
"foundry-v1/text-embedding-3-small",
["Text to embed."],
)
Use azure/ for classic Azure OpenAI deployments that require api_version.
Use azure_ai/ for the existing Azure AI Foundry compatibility path. Do not
use azure_ai/ for new OpenAI v1 endpoints unless you intentionally need that
legacy endpoint behavior.
Custom transport and headers
Use http_client to provide a caller-owned async HTTP client, for example
when your environment requires a custom CA bundle. giskard-llm passes this
client through to provider SDKs and does not close it.
import httpx
from giskard.llm import LLMClient
http_client = httpx.AsyncClient(verify="/path/to/ca.pem")
client = LLMClient()
client.configure(
"azure-secure",
provider="azure_ai",
api_key="os.environ/AZURE_AI_API_KEY", # pragma: allowlist secret
base_url="os.environ/AZURE_AI_ENDPOINT",
http_client=http_client,
default_headers={"x-ms-useragent": "giskard-llm"},
)
client.configure(
"google-secure",
provider="google",
api_key="os.environ/GEMINI_API_KEY", # pragma: allowlist secret
http_client=http_client,
)
response = await client.acompletion("azure-secure/gpt-4.1-nano", messages)
await http_client.aclose()
For detailed per-provider documentation (role mapping, message constraints, tool format, error mapping), see the provider class docstrings in src/giskard/llm/providers/.
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 giskard_llm-1.0.0b4.tar.gz.
File metadata
- Download URL: giskard_llm-1.0.0b4.tar.gz
- Upload date:
- Size: 59.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.19 {"installer":{"name":"uv","version":"0.11.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cf83b292d8df28adf1db6433226d5d32d68f6fb30f35f9ca9b89be5d5935818d
|
|
| MD5 |
e9157464b707ae175851a44e80a39139
|
|
| BLAKE2b-256 |
e0cb38b26abe164062db4f371cb58aae8193475257578aa92e6ca8380e627dc3
|
File details
Details for the file giskard_llm-1.0.0b4-py3-none-any.whl.
File metadata
- Download URL: giskard_llm-1.0.0b4-py3-none-any.whl
- Upload date:
- Size: 42.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.19 {"installer":{"name":"uv","version":"0.11.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f276cf97f00aa28b92ab5a4fb680fb257a2324062373a8b8dbe393e41a67ce2d
|
|
| MD5 |
7ca888180acbf393b54fe12e4d4595f6
|
|
| BLAKE2b-256 |
13bfbd179f9c47e60ab45d810ff2ac39599ead1c3deeaaa02ea5a66a3988a97f
|