Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

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 the openai SDK. Installing giskard-llm[openai] (or giskard-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/.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

giskard_llm-1.0.0b5.tar.gz (60.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

giskard_llm-1.0.0b5-py3-none-any.whl (42.5 kB view details)

Uploaded Python 3

File details

Details for the file giskard_llm-1.0.0b5.tar.gz.

File metadata

  • Download URL: giskard_llm-1.0.0b5.tar.gz
  • Upload date:
  • Size: 60.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","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

Hashes for giskard_llm-1.0.0b5.tar.gz
Algorithm Hash digest
SHA256 90176c79bed9c7ae649ff1af0b27078cabb74d608e984b61e93f22e33dea0972
MD5 80e28c9aad2e396eb88996610ebce56d
BLAKE2b-256 58009d9b224401d36c21e50b3d661122be099954a45d4dd61666f6d62de969d6

See more details on using hashes here.

File details

Details for the file giskard_llm-1.0.0b5-py3-none-any.whl.

File metadata

  • Download URL: giskard_llm-1.0.0b5-py3-none-any.whl
  • Upload date:
  • Size: 42.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","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

Hashes for giskard_llm-1.0.0b5-py3-none-any.whl
Algorithm Hash digest
SHA256 836104865dc833bc4adc95a31beba203c33548a510ef4a10a10440b91b8d4b2b
MD5 70d07b41618fc3a3f9edbf401390d379
BLAKE2b-256 f8622396aad392bca13b629a573028c6f05a29748bac89a9fd060ff27153e07a

See more details on using hashes here.

Release history Release notifications | RSS feed

1.0.0

2 files

This release

1.0.0b5 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page