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

Uploaded Python 3

File details

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

File metadata

File hashes

Hashes for infinity_observability_sdk-0.5.0.tar.gz
Algorithm Hash digest
SHA256 8eb94eacab8916c034e3ec375a2ec50e8494521b6dcf4fb7ac786678a42d74be
MD5 d5bd4780e780f4a5acd4389bc42efc9f
BLAKE2b-256 6a3a9390691a9da82bed24a02777a14833c661ff00c9fcea7de35241bd3f35ce

See more details on using hashes here.

Provenance

The following attestation bundles were made for infinity_observability_sdk-0.5.0.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.0-py3-none-any.whl.

File metadata

File hashes

Hashes for infinity_observability_sdk-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 bb209f733be984e7c4a4ea116eba3a5c75c6ea1eee157b514e314aa335cf654c
MD5 925b7cb1a3b28fc8e358325721e48b5e
BLAKE2b-256 ffc146f65d7e2c427174a0392d2e5a84fe09ddcd891e7eb6c0a150e10b47d505

See more details on using hashes here.

Provenance

The following attestation bundles were made for infinity_observability_sdk-0.5.0-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