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.0b6.tar.gz (61.3 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.0b6-py3-none-any.whl (42.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: giskard_llm-1.0.0b6.tar.gz
  • Upload date:
  • Size: 61.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.2 {"installer":{"name":"uv","version":"0.12.2","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.0b6.tar.gz
Algorithm Hash digest
SHA256 c53cfa15b479d9f6c052bc07e65f26a78441c06e7ad2ff446e1b9f690e2c8f02
MD5 0555b08bba3498f06376550e370587ba
BLAKE2b-256 96ab6d1099e128fa1bc4944966ac8938aef4ef5292d79a40336d6b0b99babe76

See more details on using hashes here.

File details

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

File metadata

  • Download URL: giskard_llm-1.0.0b6-py3-none-any.whl
  • Upload date:
  • Size: 42.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.2 {"installer":{"name":"uv","version":"0.12.2","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.0b6-py3-none-any.whl
Algorithm Hash digest
SHA256 5839dc9487b963c76cb4e76a6695025ade2313d23f428ff6a8be218541930c64
MD5 78037325e8ae81e4a5f8095ed332ccd3
BLAKE2b-256 045fb626950675e9442f01243ebcf43231ca5433c10e39d2f3e5858a90fad940

See more details on using hashes here.

Release history Release notifications | RSS feed

1.0.0

2 files

This release

1.0.0b6 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