Releases: honeyhiveai/python-sdk
Release list
v1.5.1
HoneyHive Python SDK v1.5.1
What's Changed
No customer-facing changes. Internal release tooling only.
Installation
pip install honeyhive==1.5.1Links
v1.4.0
HoneyHive Python SDK v1.4.0
What's Changed
Added
- Copilot Studio trace forwarding adapter
- New
honeyhive.adapters.copilot_studio.copilot_studio_records_to_spans()converts Azure Application Insights diagnostic-export records from a Copilot Studio agent into OpenTelemetry spans you can forward to HoneyHive via OTLP. Maps user/agent messages, tool calls, and errors using GenAI semantic conventions, preserves parent/child trace correlation, and groups a conversation into a single HoneyHive session. SetCOPILOT_STUDIO_ADAPTER_KEEP_TOPIC_SPANS=1to retain internal orchestration spans (dropped by default) andCOPILOT_STUDIO_ADAPTER_DEBUG=1to attach the raw source record for debugging.
- New
dataset_nameon experiment runsExperimentRunObjectnow includes adataset_namefield alongsidedataset_id, so the linked dataset's name is available when listing or fetching experiment runs. The field is optional and resolves toNonefor offline (EXT-*), deleted, or unset datasets.
Changed
- Event update:
outputsmust be an objectUpdateEventRequest.outputsandLegacyUpdateEventRequest.outputsare now typed asDict[str, Any]instead ofAny. Update calls accept only normalized (object-shaped) outputs; previously an array could slip through and corrupt the stored event. If you were passing a list when updating an event, wrap it as{"value": [...]}. Event creation and OTEL ingestion continue to normalize arrays automatically.
Installation
pip install honeyhive==1.4.0Links
v1.3.0
HoneyHive Python SDK v1.3.0
What's Changed
Added
- Configurable API request timeout
HoneyHive(timeout=...)now sets the per-request timeout, in seconds, for standard API client calls. You can also setHH_API_TIMEOUT; the explicittimeout=argument takes precedence. The default remains 5 seconds, so existing clients keep the same timeout unless you opt in.
- Event lookup by ID
- The generated sync and async event services now include
GET /v1/events/{event_id}asgetEvent(..., event_id=...), returningGetEventResponse/GetEventResponseEventmodels exported fromhoneyhive.models.
- The generated sync and async event services now include
- Custom tracer export HTTP sessions
HoneyHiveTracer.init(requests_session=...)andTracerConfig(requests_session=...)now accept a caller-ownedrequests.Sessionfor OTLP span export. Use this when you need custom proxies, retries, TLS settings, or connection pooling. The SDK does not close a session that you provide.
Compatibility
- Self-host:
GET /v1/events/{event_id}requires backend v1.3.0+- Self-hosted deployments must run a HoneyHive backend on version 1.3.0 or greater before calling
GET /v1/events/{event_id}. Older self-host backends do not expose this route, so event-by-id calls will fail until the backend is upgraded. HoneyHive Cloud users are unaffected.
- Self-hosted deployments must run a HoneyHive backend on version 1.3.0 or greater before calling
Installation
pip install honeyhive==1.3.0Links
v1.2.1
HoneyHive Python SDK v1.2.1
What's Changed
No customer-facing changes. Internal OpenAPI generator and generated-model cleanup only.
Installation
pip install honeyhive==1.2.1Links
v1.2.0
HoneyHive Python SDK v1.2.0
What's Changed
Added
- Metric versions API:
client.metric_versions- New
client.metric_versions.list(metric_id),.create(metric_id, request), and.deploy(metric_id, version_name)methods (plus*_asyncvariants) for managing a metric's immutable version history, backed by/v1/metrics/{metric_id}/versions. Each metric keeps a history of versions with one deployed at a time; passdeploy_immediately=Trueon create to atomically deploy the new version. Version request/response models are exported fromhoneyhive.models.
- New
Fixed
- OTLP JSON exporter: serialize numeric fields as JSON strings
- Integer span attributes (
intValue) and uint64 timestamp fields
(startTimeUnixNano,endTimeUnixNano,timeUnixNano) were emitted as
raw JSON numbers. The protobuf JSON mapping spec requires these to be JSON
strings; values above 2^53 could otherwise lose precision silently through
float64 rounding. Now matches nativeopentelemetry-exporter-otlp-proto-http
behavior.
- Integer span attributes (
- Decorator input capture: remove truncation of serialized list/dict values
- List and dict span attributes are serialized to strings and
previously were truncated to 1000 characters in length. The arbitrary limit
of 1000 characters has been removed.
- List and dict span attributes are serialized to strings and
Installation
pip install honeyhive==1.2.0Links
v1.1.0
HoneyHive Python SDK v1.1.0
What's Changed
Added
- Charts API:
client.chartsCRUD surface- New
client.charts.create(),.list(),.get(chart_id),.update(chart_id, request), and.delete(chart_id)methods (plus*_asyncvariants) backed byPOST /v1/charts,GET /v1/charts,GET /v1/charts/{chart_id},PUT /v1/charts/{chart_id}, andDELETE /v1/charts/{chart_id}. Chart request and response models are exported fromhoneyhive.models.
- New
Changed
- CrewAI integration example refreshed
- The CrewAI example (
examples/integrations/crewai_integration.py) has been rewritten with three realistic customer-support scenarios (single-agent with tool calls, sequential two-agent crew, and@traceescalation). Crews are now named for clearer span labels, and teardown properly flushes remaining spans.
- The CrewAI example (
Fixed
-
Tracer init:
project/HH_PROJECTno longer requiredHoneyHiveTracer.init()previously requiredprojectand treated a missing value as degraded mode. Since the backend determines the project from the API key, onlyapi_keyis actually needed. Callers that followed the v1.0.1 deprecation guidance and removedprojectwere silently running in degraded mode — this is now fixed.projectandHH_PROJECTremain accepted for backwards compatibility (deprecated, to be removed in v2.0).
-
Duplicate
modelspans inevaluate()evaluate()could occasionally emit twomodelspans for a single LLM call when running multiple datapoints concurrently. The underlying race condition in instrumentation setup has been fixed.
Removed
cp_base_url=parameter andHH_CP_API_URLenv var removed- These options were vestigial configuration for an incomplete Control Plane integration that was never wired up or shipped. No customer code could have depended on them. They have been removed to clean up the public API surface. If you happen to pass
cp_base_url=or setHH_CP_API_URL, simply remove them —HH_API_URL/base_url=is the only base-URL setting.
- These options were vestigial configuration for an incomplete Control Plane integration that was never wired up or shipped. No customer code could have depended on them. They have been removed to clean up the public API surface. If you happen to pass
Installation
pip install honeyhive==1.1.0Links
v1.0.2
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 viaenrich_span(metrics=…), exported over OTLP, and surfaced in server-side run comparison's per-eventmetric_deltas. Previously, evaluator scores were duplicated intorun.metadata.evaluator_metricsand 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.
- Scores returned by evaluators in
-
API Client:
event_idtyped as required onPOST /eventsresponsesPostEventResponse.event_idwas incorrectly typed asOptional[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 defensiveif event.event_id:guards. No runtime behavior change, but strictly typed mypy codebases withwarn_unreachable = Trueor pyright withreportUnnecessaryComparisonenabled may produce "unnecessary comparison" or "redundant Optional guard" warnings, depending on exact usage patterns.
Added
FilterFieldType.DATETIMEenum value- The SDK enum was missing the
"datetime"wire value supported by the backend. Additive — no behavior change for existing callers.
- The SDK enum was missing the
Deprecated
FilterFieldType.IDID = "id"was never a valid backend wire value and has always been rejected on the wire. Use"string"for UUID-shaped fields such assession_id. The alias is preserved so existing imports continue to resolve and will be removed in the next major.
Removed
honeyhivePython CLI entry point removed frompyproject.toml- The shipped Python
honeyhiveconsole script was non-functional (dead code) and shadowed the official TypeScript CLI on$PATH. CLI functionality is now provided by the officialhoneyhiveTypeScript CLI; removing the Python script entry point letshoneyhiveresolve correctly when both packages are installed globally.
- The shipped Python
Installation
pip install honeyhive==1.0.2Links
v1.0.1
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_URLexplicitly. Callers that explicitly setbase_url=/server_url=orHH_API_URLare unaffected.
- 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
Deprecated
projectargument andHH_PROJECTenvironment variable- The SDK's public surface has accepted
project=onHoneyHive()andHoneyHiveTracer.init()and theHH_PROJECTenv 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 aDeprecationWarningat the remaining call sites that previously didn't emit one. The argument and theHH_PROJECTenv var alias remain accepted for backwards compatibility and will be removed in v2.0.
- The SDK's public surface has accepted
Installation
pip install honeyhive==1.0.1Links
v1.0.0
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.0rc1–1.0.0rc22 entries.
Changed
-
Tracing:
skip_backend_session_creation=Truenow works without an explicitsession_id- Previously the flag only opted out of the init-time backend roundtrip when a
session_idwas also supplied. Setting the flag alone is now supported: the SDK skips the roundtrip, does not mint a UUID, and per-requestcreate_session(session_id=..., skip_api_call=True)calls emit spans that ingestion materializes into Session rows on first arrival.
- Previously the flag only opted out of the init-time backend roundtrip when a
-
Tracing:
create_session(skip_api_call=True)propagatessession_nameinto baggage- When
session_nameis supplied, it now travels withsession_idacross async / threaded boundaries.
- When
Removed
DeleteMetricQueryremoved fromhoneyhive.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.
- Internal query-params type that was exported but unused — no public method accepted or returned it. The public
Installation
pip install honeyhive==1.0.0Links
v1.0.0rc22
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 inall-openinference.
- New optional dependency group
-
Integrations: LangChain + LangGraph support
- New optional dependency groups
openinference-langchainandtraceloop-langchain— one install covers both LangChain chains/agents and LangGraphStateGraphworkflows. Also included inall-openinferenceandall-traceloop.
- New optional dependency groups
-
Integrations: AWS Strands Agents support
- New optional dependency group
aws-strands(pip install honeyhive[aws-strands]). Strands emits OpenTelemetry spans natively viastrands.telemetry, so no separate instrumentor is needed — theHoneyHiveTracerglobal TracerProvider is picked up automatically.
- New optional dependency group
Changed
-
API Client: Stricter client-side validation on event creation
PostEventRequestEvent.event_typeis now a required Pydantic field. Calls that previously failed server-side as 400 now fail earlier asValidationErrorinstead ofHTTPException— 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.
- Floors raised on
-
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(), andclient.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 themigrate-to-1-0-0rc22skill directly.
- Affects
Fixed
-
Tracing: OTLP exporter preserves attribute types
- 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 OTLPAnyValuevariant.
- The exporter previously wrapped every attribute as
-
Tracing: OTLP batch export groups spans by instrumentation scope
- All spans in a batch were previously placed under the first span's scope, causing
BatchSpanProcessormixes (e.g. pydantic-aichat+ httpxPOST) to misclassify model events as chains. Spans are now grouped by their actualinstrumentation_scope.
- All spans in a batch were previously placed under the first span's scope, causing
-
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.
- Refreshed integration examples and docs (
Installation
pip install honeyhive==1.0.0rc22