Skip to content

Releases: honeyhiveai/python-sdk

v1.0.2

11 May 19:47
0ebe36f

Choose a tag to compare

HoneyHive Python SDK v1.0.2

What's Changed

Fixed

  • Experiments: client-side evaluator scores now flow end-to-end in evaluate()

    • Scores returned by evaluators in evaluate() are now written to the correct user-function chain span via enrich_span(metrics=…), exported over OTLP, and surfaced in server-side run comparison's per-event metric_deltas. Previously, evaluator scores were duplicated into run.metadata.evaluator_metrics and onto the per-datapoint session event, but neither path actually populated the per-event surface that run comparison requires — client-side evaluator scoring and comparison did not work end-to-end.
    • The two legacy write paths have been removed now that the scores are correctly written to the chain span as the single source of truth.
  • API Client: event_id typed as required on POST /events responses

    • PostEventResponse.event_id was incorrectly typed as Optional[str] in the OpenAPI spec; the backend always returns the field on a 2xx response. The spec was corrected and the generated SDK now reflects the runtime guarantee, removing the need for defensive if event.event_id: guards. No runtime behavior change, but strictly typed mypy codebases with warn_unreachable = True or pyright with reportUnnecessaryComparison enabled may produce "unnecessary comparison" or "redundant Optional guard" warnings, depending on exact usage patterns.

Added

  • FilterFieldType.DATETIME enum value
    • The SDK enum was missing the "datetime" wire value supported by the backend. Additive — no behavior change for existing callers.

Deprecated

  • FilterFieldType.ID
    • ID = "id" was never a valid backend wire value and has always been rejected on the wire. Use "string" for UUID-shaped fields such as session_id. The alias is preserved so existing imports continue to resolve and will be removed in the next major.

Removed

  • honeyhive Python CLI entry point removed from pyproject.toml
    • The shipped Python honeyhive console script was non-functional (dead code) and shadowed the official TypeScript CLI on $PATH. CLI functionality is now provided by the official honeyhive TypeScript CLI; removing the Python script entry point lets honeyhive resolve correctly when both packages are installed globally.

Pull Requests

  • #358: chore(release): Release v1.0.2
  • #357: chore(release): Release v1.0.1
  • #356: ci(changelog): add tool permissions to claude_args for docs sync workflow
  • #355: chore(release): Release v1.0.0
  • #354: chore(release): merge federated-sdk-release-candidate -> main
  • #353: ci: retarget workflows from federated-sdk-release-candidate to main
  • #352: ci(docs): replace Sphinx workflows with ProperDocs deploy
  • #351: chore(release): Release v1.0.0rc22

Installation

pip install honeyhive==1.0.2

Links

v1.0.1

05 May 17:06
f303e0c

Choose a tag to compare

HoneyHive Python SDK v1.0.1

What's Changed

Fixed

  • Default API URL fallback corrected to https://api.dp1.us.honeyhive.ai
    • The fallback value for the base API URL in the v1.0.0 release was incorrect. Any callers who relied on the implicit default would fail. The default now points at the host the SDK is built against, though self-hosted / non-default Data Plane deployments will still need to set HH_API_URL explicitly. Callers that explicitly set base_url= / server_url= or HH_API_URL are unaffected.

Deprecated

  • project argument and HH_PROJECT environment variable
    • The SDK's public surface has accepted project= on HoneyHive() and HoneyHiveTracer.init() and the HH_PROJECT env var for historical reasons. These arguments and env vars have no influence on the backend and they were maintained purely for backwards compatibility of callers. This release sweeps the stale references out of the example scripts, README, and docstrings, and adds a DeprecationWarning at the remaining call sites that previously didn't emit one. The argument and the HH_PROJECT env var alias remain accepted for backwards compatibility and will be removed in v2.0.

Pull Requests

  • #357: chore(release): Release v1.0.1
  • #356: ci(changelog): add tool permissions to claude_args for docs sync workflow
  • #355: chore(release): Release v1.0.0
  • #354: chore(release): merge federated-sdk-release-candidate -> main
  • #353: ci: retarget workflows from federated-sdk-release-candidate to main
  • #352: ci(docs): replace Sphinx workflows with ProperDocs deploy
  • #351: chore(release): Release v1.0.0rc22

Installation

pip install honeyhive==1.0.1

Links

v1.0.0

05 May 03:11
a6adca1

Choose a tag to compare

HoneyHive Python SDK v1.0.0

What's Changed

First stable GA release of the HoneyHive Python SDK. Public APIs follow semver from this release forward — breaking changes only on major versions, additive on minor and patch.

The changes below are relative to 1.0.0rc22. For the full picture of what shipped during the release-candidate cycle, see the 1.0.0rc11.0.0rc22 entries.

Changed

  • Tracing: skip_backend_session_creation=True now works without an explicit session_id

    • Previously the flag only opted out of the init-time backend roundtrip when a session_id was also supplied. Setting the flag alone is now supported: the SDK skips the roundtrip, does not mint a UUID, and per-request create_session(session_id=..., skip_api_call=True) calls emit spans that ingestion materializes into Session rows on first arrival.
  • Tracing: create_session(skip_api_call=True) propagates session_name into baggage

    • When session_name is supplied, it now travels with session_id across async / threaded boundaries.

Removed

  • DeleteMetricQuery removed from honeyhive.models
    • Internal query-params type that was exported but unused — no public method accepted or returned it. The public client.metrics.delete(id=...) signature is unchanged.

Pull Requests

  • #355: chore(release): Release v1.0.0
  • #354: chore(release): merge federated-sdk-release-candidate -> main
  • #353: ci: retarget workflows from federated-sdk-release-candidate to main
  • #352: ci(docs): replace Sphinx workflows with ProperDocs deploy
  • #351: chore(release): Release v1.0.0rc22
  • #346: ci: add uv.lock to .gitignore to fix Generated Code Check
  • #345: ci: fix CI failures from first sync — disable Claude review, install uv, remove unit-v2, skip evaluator e2e
  • #344: chore(release): Release v1.0.0rc21
  • #341: fix: resolve UnboundLocalError for results in evaluator
  • #333: refactor: rewrite OpenAI Agents SDK example to customer support domain
  • #330: refactor: update autogen integration example to AgentChat 0.7.x
  • #329: refactor: rewrite OpenAI Agents SDK example to match integration conventions
  • #327: feat(skill): add docs step to update-integration-example skill
  • #326: fix(ci): add github-actions to allowed_bots in changelog sync workflow
  • #325: fix(ci): update sdk-publish workflow to use federated-sdk-release-candidate as default branch
  • #324: chore(release): Release 1.0.0rc20
  • #323: chore: use explicit 4 workers for unit tests (matching CI runner CPUs)
  • #321: chore: reduce tox test suite output verbosity
  • #320: feat: batched span exports
  • #319: docs: simplify model provider examples to basic LLM calls

Installation

pip install honeyhive==1.0.0

Links

v1.0.0rc22

02 May 23:24
03a7078

Choose a tag to compare

v1.0.0rc22 Pre-release
Pre-release

HoneyHive Python SDK v1.0.0rc22

What's Changed

Added

  • Integrations: OpenAI Agents support via OpenInference

    • New optional dependency group openinference-openai-agents (pip install honeyhive[openinference-openai-agents]); also included in all-openinference.
  • Integrations: LangChain + LangGraph support

    • New optional dependency groups openinference-langchain and traceloop-langchain — one install covers both LangChain chains/agents and LangGraph StateGraph workflows. Also included in all-openinference and all-traceloop.
  • Integrations: AWS Strands Agents support

    • New optional dependency group aws-strands (pip install honeyhive[aws-strands]). Strands emits OpenTelemetry spans natively via strands.telemetry, so no separate instrumentor is needed — the HoneyHiveTracer global TracerProvider is picked up automatically.

Changed

  • API Client: Stricter client-side validation on event creation

    • PostEventRequestEvent.event_type is now a required Pydantic field. Calls that previously failed server-side as 400 now fail earlier as ValidationError instead of HTTPException — same root cause, just a different exception type.
  • Tracing dependencies: OpenTelemetry minimum bumped from 1.20.0 to 1.41.0

    • Floors raised on opentelemetry-api / -sdk / -exporter-otlp-proto-http. Traceloop instrumentor floors raised to >= 0.58.0 (was >= 0.46.0).

    Action Required

    • Environments pinning older OTel versions will need to upgrade.
  • API Client: Response and request fields are now typed Pydantic models instead of dicts

    • Affects client.events.export() / .get_by_session_id(), client.datapoints.create() / .update(), client.datasets.create() / .update() / .delete(), and client.metrics.list() / get_metric().
    • On the request side no migration is needed — Pydantic coerces raw dicts at construction time and unknown fields still flow to the wire.

    Action Required

    • Read nested response fields with attribute access instead of dict subscript:
      # before
      new_id = response.result["insertedIds"][0]
      # after
      new_id = response.result.insertedIds[0]
      # escape hatch if you need the dict form
      raw = response.result.model_dump()
    • Per-endpoint migration table, validation steps, and edge cases: see .agents/skills/migrate-to-1-0-0rc22/SKILL.md. AI coding assistants can invoke the migrate-to-1-0-0rc22 skill directly.

Fixed

  • Tracing: OTLP exporter preserves attribute types [HHAI-4935]

    • The exporter previously wrapped every attribute as {"stringValue": str(value)}, so numeric and boolean attributes round-tripped through the backend as strings. Now mapped to the correct OTLP AnyValue variant.
  • Tracing: OTLP batch export groups spans by instrumentation scope [HHAI-4245]

    • All spans in a batch were previously placed under the first span's scope, causing BatchSpanProcessor mixes (e.g. pydantic-ai chat + httpx POST) to misclassify model events as chains. Spans are now grouped by their actual instrumentation_scope.
  • Integrations: Anthropic / LangChain + LangGraph / AWS Bedrock audits

    • Refreshed integration examples and docs (examples/integrations/, docs/how-to/integrations/) to current model IDs and modern usage patterns.

Pull Requests

  • #352: ci(docs): replace Sphinx workflows with ProperDocs deploy
  • #351: chore(release): Release v1.0.0rc22
  • #346: ci: add uv.lock to .gitignore to fix Generated Code Check
  • #345: ci: fix CI failures from first sync — disable Claude review, install uv, remove unit-v2, skip evaluator e2e
  • #344: chore(release): Release v1.0.0rc21

Installation

pip install honeyhive==1.0.0rc22

Links

v1.0.0rc21

09 Apr 02:17
c9b2447

Choose a tag to compare

v1.0.0rc21 Pre-release
Pre-release

HoneyHive Python SDK v1.0.0rc21

What's Changed

Added

  • Integrations: Claude Agent SDK support via OpenInference

    • New optional dependency group openinference-claude-agent-sdk (pip install honeyhive[openinference-claude-agent-sdk])
    • Traces Claude Agent SDK query calls, tool invocations, and multi-turn flows using the existing BYOI + HoneyHiveTracer pattern
    • Also included in the all-openinference convenience group
  • Integrations: LiteLLM support via OpenInference

    • New optional dependency group openinference-litellm (pip install honeyhive[openinference-litellm])
    • Instruments litellm.completion, acompletion, and embedding calls across providers
    • Also included in the all-openinference and openinference-llm-providers convenience groups
  • Tracing: skip_backend_session_creation flag on SessionConfig

    • When initializing a tracer with an existing backend session ID, set skip_backend_session_creation=True to skip the redundant synchronous session creation call
    • Useful for attaching spans to a session created elsewhere (e.g. by another service or a prior tracer run)
    • Default behavior is unchanged when the flag is omitted

Fixed

  • Tracing: session_name auto-detection and session creation reliability
    • session_name auto-detection now correctly identifies the caller script name instead of returning internal SDK filenames
    • session_name is persisted before the backend API call, so it survives session creation failures
    • PostSessionStartResponse fields (org_id, workspace_id, project_id) are now optional, preventing silent Pydantic validation failures when the API omits them

Pull Requests

  • #346: ci: add uv.lock to .gitignore to fix Generated Code Check
  • #345: ci: fix CI failures from first sync — disable Claude review, install uv, remove unit-v2, skip evaluator e2e
  • #344: chore(release): Release v1.0.0rc21
  • #341: fix: resolve UnboundLocalError for results in evaluator
  • #333: refactor: rewrite OpenAI Agents SDK example to customer support domain
  • #330: refactor: update autogen integration example to AgentChat 0.7.x
  • #329: refactor: rewrite OpenAI Agents SDK example to match integration conventions
  • #327: feat(skill): add docs step to update-integration-example skill
  • #326: fix(ci): add github-actions to allowed_bots in changelog sync workflow
  • #325: fix(ci): update sdk-publish workflow to use federated-sdk-release-candidate as default branch
  • #324: chore(release): Release 1.0.0rc20
  • #320: feat: batched span exports
  • #319: docs: simplify model provider examples to basic LLM calls

Installation

pip install honeyhive==1.0.0rc21

Links

v1.0.0rc20

17 Mar 21:45
0d0a17b

Choose a tag to compare

v1.0.0rc20 Pre-release
Pre-release

HoneyHive Python SDK v1.0.0rc20

What's Changed

Added

  • Tracer: span_name_filters parameter on HoneyHiveTracer.init() — include/exclude spans by name prefix to filter noisy framework internals
  • Tracing: Batched async span export via OTel BatchSpanProcessor
    • Spans are now queued and exported asynchronously in a background thread when disable_batch=False (the default)
    • disable_batch=True preserves the previous synchronous inline export for Lambda/serverless

Pull Requests

  • #325: fix(ci): update sdk-publish workflow to use federated-sdk-release-candidate as default branch
  • #324: chore(release): Release 1.0.0rc20
  • #323: chore: use explicit 4 workers for unit tests (matching CI runner CPUs)
  • #321: chore: reduce tox test suite output verbosity
  • #320: feat: batched span exports
  • #318: feat: span name filters
  • #316: chore: legacy docs update
  • #315: chore: cleanup praxis-os mcp
  • #314: chore: update docs branch reference from fix/docs-concepts to main
  • #313: fix(ci): dispatch docs changelog sync after publish
  • #312: ci: enable display_report for Claude Code actions
  • #309: chore(release): bump version to 1.0.0rc19
  • #308: chore(release): Release 1.0.0rc19
  • #307: feat(events): allow export timeout override via HH_EXPORT_TIMEOUT_SECONDS env var
  • #306: feat(examples): refresh Semantic Kernel example and GenAI event typing
  • #303: feat(examples): add Swarm scenario to strands-agents example for v1.29.0
  • #302: fix(events): set 300s timeout on export HTTP clients
  • #300: feat(examples): rewrite LangGraph integration with customer support domain

Installation

pip install honeyhive==1.0.0rc20

Links

v1.0.0rc19

06 Mar 17:32
94dbb95

Choose a tag to compare

v1.0.0rc19 Pre-release
Pre-release

HoneyHive Python SDK v1.0.0rc19

What's Changed

Added

  • Events API: Configurable export timeout via HH_EXPORT_TIMEOUT_SECONDS env var
    • Set HH_EXPORT_TIMEOUT_SECONDS to override the default 300-second read timeout on export() / export_async()
    • Useful for extremely large exports or constrained network environments

Fixed

  • Events API: Export no longer times out on large result sets
    • Exporting thousands of events (e.g. via get_by_session_id() or export()) previously failed with ReadTimeout when the response took longer than 5 seconds
    • Export requests now use a 5-minute timeout to accommodate large queries

Changed

Pull Requests

  • #309: chore(release): bump version to 1.0.0rc19
  • #308: chore(release): Release 1.0.0rc19
  • #307: feat(events): allow export timeout override via HH_EXPORT_TIMEOUT_SECONDS env var
  • #302: fix(events): set 300s timeout on export HTTP clients
  • #297: feat(examples): add Strands Agents integration example
  • #296: docs: improve update-integration-example skill
  • #294: feat: add update-integration-example skill (moved from hive-bot)
  • #293: feat(ci): sync SDK releases to docs product changelog
  • #286: chore: Version bump for 1.1.0 release
  • #285: chore(release): Release 1.0.0rc18
  • #284: chore: Revise CHANGELOG for unreleased updates
  • #283: fix(ci): use Opus model and harden changelog workflow
  • #274: feat: batch query string array params to avoid URL length limits
  • #272: ci: re-enable integration CI with temporary skiplist
  • #268: feat: add SDK identification headers to all HTTP requests

Installation

pip install honeyhive==1.0.0rc19

Links

v1.0.0rc18

27 Feb 01:54
91ed51f

Choose a tag to compare

v1.0.0rc18 Pre-release
Pre-release

HoneyHive Python SDK v1.0.0rc18

What's Changed

Added

  • API Client: SDK identification headers on all HTTP requests (#268)
    • All HTTP requests now include hh-sdk-version, hh-sdk-language, and hh-sdk-package headers

Changed

  • API Client: Large queries are batched
    • Methods that pass arrays in query strings (datapoints.list(datapoint_ids=...), experiments.list_runs(run_ids=...)) now automatically batch requests when the list exceeds 100 items and merge the results transparently
    • No changes to the public API — existing code works as before, just without silent truncation or HTTP errors on large lists

Pull Requests

  • #285: chore(release): Release 1.0.0rc18
  • #284: chore: Revise CHANGELOG for unreleased updates
  • #283: fix(ci): use Opus model and harden changelog workflow
  • #274: feat: batch query string array params to avoid URL length limits
  • #273: chore(release): Release 1.0.0rc17
  • #272: ci: re-enable integration CI with temporary skiplist
  • #268: feat: add SDK identification headers to all HTTP requests
  • #267: fix: backport #254 — auto-infer is_evaluation when dataset_id, datapoint_id, and run_id are all defined
  • #266: chore: compact docs preview PR comment with details accordion
  • #264: feat: add retry logic to export_async()
  • #261: feat: add debug logging to get_by_session_id_async flow (HHAI-3873)
  • #260: chore: new env vars for new test project
  • #256: docs(ci): add generate-changelog workflow with dual changelog format
  • #253: feat: allow setting run_id in evaluate()

Installation

pip install honeyhive==1.0.0rc18

Links

v1.0.0rc17

25 Feb 20:30
5d9e06d

Choose a tag to compare

v1.0.0rc17 Pre-release
Pre-release

HoneyHive Python SDK v1.0.0rc17

What's Changed

Added

  • Experiments: Git context stamped on experiment run metadata (#205)

    • evaluate() now automatically collects git metadata (commit hash, branch, author, remote URL, dirty status) and attaches it to the run's metadata.git field
    • Gracefully degrades to empty dict when git is unavailable or caller is not in a repo
  • Docs: New integration examples for CrewAI, LangChain, Strands Agents, ADK, and PydanticAI (#211, #224)

    • Added examples covering common agent patterns for each framework
    • Rewrote LangGraph example with canonical tool-calling loop and routing workflow
  • API Client: Async export now retries on transient errors (#264)

    • export_async() now retries on transient HTTP errors (502, 503, 504, etc.), matching export() behavior
    • Export errors now raise APIError with status code and response body instead of generic Exception
  • API Client: Debug logging for get_by_session_id flow (#261)

    • Added DEBUG-level logging to get_by_session_id, get_by_session_id_async, export, and export_async
    • Logs entry/exit with parameters, HTTP request metadata, and empty result diagnostics
    • No sensitive data (request bodies, headers, filters) is logged
  • Experiments: Custom run_id support in evaluate() (#253)

    • evaluate() now accepts an optional run_id parameter to specify a custom run identifier
    • The run_id is sent to the backend via POST /v1/runs; if omitted, the backend auto-generates one
    • Enables customers to use their own short IDs and retrieve runs by custom identifiers

Fixed

  • API Client: List query params serialization with single item (#251)

    • Fixed 400 errors when passing a single-element list to API query params (e.g. ids=["abc"])
    • List params now serialize with bracket notation (ids[]=a&ids[]=b) as required by the backend
  • Tracing: Auto-infer is_evaluation=True from evaluation identifiers (#254)

    • When dataset_id, datapoint_id, and run_id are all provided but is_evaluation is not set, the tracer now automatically enables evaluation mode
    • Prevents silent loss of evaluation context and session lifecycle issues
  • Experiments: Async evaluator UnboundLocalError in non-repeat path (#207)

    • Fixed crash when using @aevaluator-decorated functions without repeat setting (the default)
    • The results variable was never assigned in the non-repeat branch
  • Dependencies: uv convenience extras resolution (#209)

    • Expanded convenience extras to concrete package requirements so uv resolves dependencies correctly
    • Aligned OpenInference Google extras with google-genai package naming

Changed

  • API Client: Removed non-functional include_datapoints query param (#244)

    • This parameter never worked and was included in the spec by mistake
    • Removed from function arguments and docs
  • API Client: Synced OpenAPI spec and removed defunct Tools API (#243)

    • Removed ToolsAPI client, model re-exports, and all references to the non-existent Tools API
    • Added new generated models: ConfigurationItem, MetricItem, ProjectItem
  • Tracing: Deprecated client mode in HoneyHiveSpanProcessor (#210)

    • Client mode was unreachable dead code; processor now always uses OTLP export
    • _send_via_client and _convert_span_to_event raise NotImplementedError if called directly

Pull Requests

  • #273: chore(release): Release 1.0.0rc17
  • #267: fix: backport #254 — auto-infer is_evaluation when dataset_id, datapoint_id, and run_id are all defined
  • #266: chore: compact docs preview PR comment with details accordion
  • #264: feat: add retry logic to export_async()
  • #263: docs: add changelog entries for rc16 and unreleased changes
  • #261: feat: add debug logging to get_by_session_id_async flow (HHAI-3873)
  • #259: test: fix integration test shims for latest SDK
  • #257: fix(examples): update integration examples
  • #256: docs(ci): add generate-changelog workflow with dual changelog format
  • #255: fix(ci): add federated-sdk-release-candidate to changelog check branches
  • #254: fix: auto-infer is_evaluation when dataset_id, datapoint_id, and run_id are all defined
  • #253: feat: allow setting run_id in evaluate()
  • #252: ci: use python venv in ci
  • #251: fix: query params serialization for List query params with one item
  • #250: chore: update makefile python venv
  • #249: chore: add automated Claude code review workflow
  • #245: fix: fixed more inline OpenAPI type issues
  • #244: fix: remove non-functional include_datapoints query param
  • #243: chore: sync OpenAPI spec and remove references to defunct Tools API
  • #241: chore: regenerate SDK client and run auto-formatter
  • #240: ci: add pr title check
  • #239: ci: add pr title check
  • #238: fix: run mypy in CI and fix errors
  • #237: fix: generation fixes
  • #236: Formatted code and added formatting check to CI
  • #234: A few more shims
  • #233: Add env var fallback for project
  • #232: Enable code coverage for integration tests
  • #231: Fix evaluate() with dataset_id parameter
  • #230: chore: update makefile python venv

Installation

pip install honeyhive==1.0.0rc17

Links

v1.0.0rc16

29 Jan 16:36
9875d2f

Choose a tag to compare

v1.0.0rc16 Pre-release
Pre-release

HoneyHive Python SDK v1.0.0rc16

What's Changed

No changelog entry found for this version.

Pull Requests

  • #198: feat: Improve PyPI release body and add CHANGELOG.md PR check
  • #196: fix: Fix import errors and AttributeError in RC9 (events.py, context.py)
  • #195: fix: Events API fixes - ordering, project deprecation, enrich_span event_id
  • #193: Add complete provider integration test suite (13 providers, 58 tests)
  • #177: fix: Correct evaluate() docstrings to show correct function signature

Installation

pip install honeyhive==1.0.0rc16

Links