Skip to main content

Unified observability SDK for Infinity Constellation services — tracing, structured logging, error tracking.

Project description

Infinity Observability SDK

CI PyPI version Python License: MIT Ruff basedpyright

Unified observability for Infinity Constellation services — OTel tracing, structured logging, and optional error tracking in a single configure_observability() call.

Installation

pip install infinity-observability-sdk

Optional extras:

pip install infinity-observability-sdk[sentry]    # Sentry error tracking
pip install infinity-observability-sdk[logfire]   # pydantic-ai / httpx auto-instrumentation
pip install infinity-observability-sdk[django]    # Django OTel auto-instrumentation

Quick start

from infinity_observability_sdk import configure_observability, ObservabilityConfig

configure_observability(ObservabilityConfig(
    business_unit_name="my_bu",
    service_name="my_service",
))

Set the required environment variables before calling configure_observability:

Variable Description
INFINITY_OBSERVABILITY_ENDPOINT OTLP collector endpoint (e.g. https://collector.example.com)
INFINITY_OBSERVABILITY_API_KEY API key for collector authentication
ENVIRONMENT Deployment environment — controls log format. development → human-readable console output; anything else → JSON. Defaults to production.

Configuration

ObservabilityConfig(
    business_unit_name="my_bu",       # required
    service_name="my_service",        # required

    # Integrations
    instrument_pydantic_ai=True,      # default: True
    instrument_httpx=True,            # default: True
    sentry_dsn=None,                  # optional — enables Sentry if set
    sentry_environment=None,          # falls back to ENVIRONMENT env var
    sentry_traces_sample_rate=0.0,    # 0.0–1.0, default: 0.0

    # Logging
    log_level="INFO",                 # DEBUG | INFO | WARNING | ERROR | CRITICAL

    # Advanced
    additional_resource_attributes={},  # extra OTel resource attributes
)

configure_observability() is idempotent — safe to call multiple times; subsequent calls are no-ops.

Agent context

Wrap AI agent runs to emit a structured span with cost and identity metadata:

from infinity_observability_sdk import agent_context

with agent_context(
    agent_employee_equivalent="data_engineer",
    hourly_rate=75.0,
    agent_name="my_agent",
    task_description="summarise quarterly report",
    task_instance_identifier="run-abc-123",
    approximate_person_hours=2.0,
    business_unit_name="my_bu",
    service_name="my_service",
) as span:
    # your agent logic here
    ...

Extra keyword arguments are forwarded as span attributes.

Django integration

Call instrument_django() before the ASGI/WSGI app is loaded — typically at the top of core/asgi.py:

from infinity_observability_sdk import configure_observability, ObservabilityConfig, instrument_django

configure_observability(ObservabilityConfig(
    business_unit_name="my_bu",
    service_name="my_api",
))
instrument_django()

Requires infinity-observability-sdk[django].

Standalone logging

For services that only need structured logging without full OTel tracing:

from infinity_observability_sdk import configure_logging

configure_logging(service_name="my_bu.my_service", log_level="INFO")

Development

uv sync --dev   # install all dependencies
make test       # run tests
make lint       # ruff lint
make ci         # full CI suite (lint, format check, tests, build, package check)

Release cycle

Releases are fully automated via python-semantic-release on every merge to main. No manual version bumps or GitHub Releases are needed.

How it works

  1. Every merge to main triggers the release workflow, which first runs the full CI suite (lint, format, tests, build).
  2. python-semantic-release analyses commit messages since the last release using Conventional Commits to determine whether a release is warranted and what the version bump should be.
  3. If a release is warranted, it updates the version in pyproject.toml, creates a vX.Y.Z tag, and publishes a GitHub Release with generated release notes.
  4. The GitHub Release triggers the deploy workflow, which builds the package and publishes to PyPI via OIDC (no stored secrets).

Version bump rules

Commit type Example Bump
fix:, perf: fix(sdk): handle missing env var patch
feat: feat(sdk): add configure_metrics() minor
feat!: or BREAKING CHANGE: footer feat(sdk)!: remove logfire hard dep major
docs:, chore:, refactor:, etc. docs: update README none

While the version is 0.x, breaking changes produce a minor bump rather than jumping to 1.0.0.

Commit message format

<type>(<scope>): <short summary>

[optional body]

[optional footer]

All commit messages merged to main should follow this format. PR titles are used as the squash-merge commit message and must follow the same convention.

Project details


Download files

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

Source Distribution

infinity_observability_sdk-0.5.2.tar.gz (68.8 kB view details)

Uploaded Source

Built Distribution

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

infinity_observability_sdk-0.5.2-py3-none-any.whl (10.9 kB view details)

Uploaded Python 3

File details

Details for the file infinity_observability_sdk-0.5.2.tar.gz.

File metadata

File hashes

Hashes for infinity_observability_sdk-0.5.2.tar.gz
Algorithm Hash digest
SHA256 2cdc48fd558e9829f246a5c068a56e1c504f29123896f84b2bf812606063cd88
MD5 0373519f0ccdf8cc5773fac993cd293c
BLAKE2b-256 3013e13206f14365ae03aa3d7b405b753ead3cfeaccebb201643a76dfc05872c

See more details on using hashes here.

Provenance

The following attestation bundles were made for infinity_observability_sdk-0.5.2.tar.gz:

Publisher: release.yml on infinity-constellation/infinity-observability-sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file infinity_observability_sdk-0.5.2-py3-none-any.whl.

File metadata

File hashes

Hashes for infinity_observability_sdk-0.5.2-py3-none-any.whl
Algorithm Hash digest
SHA256 bef4590bf9eccc653c89c959f5573731bf699798c234a8a7f9c96ac91efcffe4
MD5 ca8f50a6a72b1735b9232160eda5e4a3
BLAKE2b-256 fa922e29b333a94c5e0a30d767fd52825a669e91e1b8e7ca2d515813e777148d

See more details on using hashes here.

Provenance

The following attestation bundles were made for infinity_observability_sdk-0.5.2-py3-none-any.whl:

Publisher: release.yml on infinity-constellation/infinity-observability-sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page