Skip to main content

Sigil Python Framework Module: LiteLLM

sigil-sdk-litellm is a LiteLLM callback handler that exports generation telemetry to Sigil.

Installation

pip install sigil-sdk sigil-sdk-litellm
pip install litellm

Quickstart

import litellm
from sigil_sdk import Client
from sigil_sdk_litellm import SigilLiteLLMLogger

client = Client()
handler = SigilLiteLLMLogger(client=client)

litellm.callbacks = [handler]

response = litellm.completion(
    model="openai/gpt-4o-mini",
    messages=[{"role": "user", "content": "Hello!"}],
)
print(response.choices[0].message.content)

client.shutdown()

Streaming

import litellm
from sigil_sdk import Client
from sigil_sdk_litellm import SigilLiteLLMLogger

client = Client()
litellm.callbacks = [SigilLiteLLMLogger(client=client)]

response = litellm.completion(
    model="openai/gpt-4o-mini",
    messages=[{"role": "user", "content": "Give me three reliability tips."}],
    stream=True,
)
for chunk in response:
    content = chunk.choices[0].delta.content
    if content:
        print(content, end="", flush=True)
print()

client.shutdown()

Configuration

All options are keyword-only on SigilLiteLLMLogger:

Parameter Type Default Description
client sigil_sdk.Client required Sigil SDK client instance
capture_inputs bool True Record input messages
capture_outputs bool True Record output messages
agent_name str "" Default agent name (see below for per-request)
agent_version str "" Default agent version (see below for per-request)
conversation_id str "" Default conversation ID (see below for per-request)
extra_tags dict[str, str] None Additional tags merged into every generation
extra_metadata dict[str, Any] None Additional metadata merged into every generation

The create_sigil_litellm_logger factory accepts the same parameters.

Per-Request Metadata

The handler resolves agent_name, agent_version, and conversation_id from per-request LiteLLM metadata, falling back to the static values from handler init. This is useful when multiple agents share a single LiteLLM proxy.

response = litellm.completion(
    model="openai/gpt-4o-mini",
    messages=[{"role": "user", "content": "Continue our chat."}],
    metadata={
        "agent_name": "search-agent",
        "agent_version": "v2",
        "conversation_id": "conv-abc-123",
    },
)

For conversation_id, the handler also checks session_id and thread_id metadata keys as fallbacks.

LiteLLM Proxy (Docker)

When running LiteLLM as a proxy server in Docker, register the handler via a callback file next to your config.

1. Extend the Docker image:

FROM ghcr.io/berriai/litellm:v1.82.3-stable.patch.2
RUN pip install sigil-sdk sigil-sdk-litellm

2. Create a callback file (sigil_callback.py, same directory as config.yaml):

import os

from sigil_sdk import Client
from sigil_sdk.config import AuthConfig, ClientConfig, GenerationExportConfig
from sigil_sdk_litellm import SigilLiteLLMLogger

client = Client(ClientConfig(
    generation_export=GenerationExportConfig(
        protocol="http",
        endpoint=os.environ["SIGIL_ENDPOINT"],
        auth=AuthConfig(
            mode="basic",
            tenant_id=os.environ.get("SIGIL_AUTH_TENANT_ID", ""),
            basic_password=os.environ.get("SIGIL_AUTH_TOKEN", ""),
        ),
    ),
))
sigil_handler = SigilLiteLLMLogger(
    client=client,
    agent_name="litellm-proxy",
)

3. Reference it in config.yaml:

model_list:
  - model_name: gpt-4o-mini
    litellm_params:
      model: openai/gpt-4o-mini

litellm_settings:
  callbacks: sigil_callback.sigil_handler

The proxy resolves sigil_callback.sigil_handler by importing sigil_callback.py from the config directory and using the sigil_handler instance.

4. Mount both files and run:

docker run -d \
  -v $(pwd)/config.yaml:/app/config.yaml \
  -v $(pwd)/sigil_callback.py:/app/sigil_callback.py \
  -e SIGIL_ENDPOINT=https://your-sigil-endpoint \
  -e SIGIL_AUTH_TENANT_ID=your-tenant \
  -e SIGIL_AUTH_TOKEN=your-key \
  -p 4000:4000 \
  your-litellm-image \
  --config /app/config.yaml

The callback file reads connection details from environment variables. Adjust the AuthConfig mode to match your deployment (see sigil_sdk.config for tenant, bearer, and basic modes).

Behavior

  • Mode mapping: non-stream calls -> SYNC, stream calls -> STREAM with first-token timestamp.
  • Provider detection: uses custom_llm_provider from LiteLLM's standard logging object.
  • Failed calls are recorded with the error attached via set_call_error.
  • Chat completion call types (completion, acompletion, text_completion, atext_completion) are recorded as generations.
  • Embedding call types (embedding, aembedding) are recorded as OTel embedding spans (no generation export). The span carries input/token counts and dimensions; the input text is attached only when the handler's capture_inputs is set and the SDK's EmbeddingCaptureConfig.capture_input=True. Embedding spans require a configured OTel tracer.
  • Image, audio, and transcription call types are skipped.
  • Framework tags are always set:
    • sigil.framework.name=litellm
    • sigil.framework.source=handler
    • sigil.framework.language=python
  • LiteLLM request_tags are forwarded as litellm.tag.<value>.
  • Token usage includes detailed breakdowns (cached tokens, reasoning tokens) when the provider returns them.
  • Tool calls and tool results in messages are mapped to Sigil's tool call/result parts.
  • Reasoning/thinking text is captured as THINKING parts, ordered before the assistant text. It is read from thinking_blocks when present (including redacted blocks), otherwise from the flat reasoning_content string.

Call client.shutdown() during teardown to flush buffered telemetry.

Metadata

Release files for sigil-sdk-litellm 0.9.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for sigil-sdk-litellm 0.9.3
File Size Uploaded
sigil_sdk_litellm-0.9.3.tar.gz 18.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for sigil-sdk-litellm 0.9.3
File Interpreter ABI Platform
sigil_sdk_litellm-0.9.3-py3-none-any.whl Python 3 none any Details

Total release size: 28.3 kB

Release files / sigil_sdk_litellm-0.9.3.tar.gz

Download URL sigil_sdk_litellm-0.9.3.tar.gz
Size 18.1 kB
Tags Source
SHA-256 checksum
How to use checksums
cb07eb1b93f9b05bdf5e4454b364065c0f4d2f1de1befac827e9f6f72fe83fd9
BLAKE2b-256 checksum
How to use checksums
22d26183f509c02d9f2d6bd742c4909e1f22f6cfd547653777918c10087a6635
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 13, 2026.

Transparency log

Release files / sigil_sdk_litellm-0.9.3-py3-none-any.whl

Download URL sigil_sdk_litellm-0.9.3-py3-none-any.whl
Size 10.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
cdd7d010ef22e55d71786df8244c877d2989a693ee236e6bb1bed6950d33bd43
BLAKE2b-256 checksum
How to use checksums
964d77023113cf2960df77db5782e7bb7559a68bd37808345061d398f705c66d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 13, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.9.3 This release

2 release files

0.9.2

2 release files

0.9.1

2 release files

0.9.0

2 release files

0.8.0

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release 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