Changelog
Release history of ratel-ai.
ratel-ai release history · PyPI · source
Synced verbatim from the package's
CHANGELOG.mdatratel-ai/ratel@3be0ecb— do not edit by hand. Regenerate withpnpm sync:apiinapps/docs.
All notable changes to ratel-ai (the Python SDK) are documented here.
The format follows Keep a Changelog and this package adheres to Semantic Versioning.
[0.4.2] - 2026-07-11
Changed
configure_telemetry()returns a per-call shutdown handle (handle.shutdown()/handle.force_flush()) on every path — the no-override path no longer leaksinit()'s shared provider directly. Because that provider is shared across callers, shutting one handle down stops export for all of them.
Fixed
configure_telemetry()no longer mutates a shared provider'sshutdownmethod. When idempotent telemetry initialization reuses one provider, a stale handle can no longer clear a newer caller's generation-scoped content-capture override.
[0.4.1] - 2026-07-10
Added
configure_telemetryopts into message/tool content capture programmatically:capture_contentsets the exactContentCapturemode (validated like the env var — case-insensitive, legacy boolean forms accepted — raising aValueErroron garbage before any exporter is wired), andinclude_span_and_eventsis boolean sugar (True→SPAN_AND_EVENT,False→NO_CONTENT).capture_contentwins overinclude_span_and_events; when neither is provided,OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENTkeeps ruling (a provided option beats the env var, as in OTel code-over-env precedence). The returned provider'sshutdown()restores env-driven behavior via a generation-scoped clear (clear_content_capture), so a stale handle shutting down late never clobbers an override a newerconfigure_telemetryinstalled. Theset_content_capture/clear_content_capture/ContentCaptureprimitives live inratel_ai_telemetry.
[0.4.0] - 2026-07-07
Added
- OpenTelemetry emission. The SDK now opens an OTel span at each funnel boundary —
execute_tool(gen_ai.operation.name,gen_ai.tool.name,ratel.tool.args_size_bytes),ratel.search(target,top_k, origin,hit_count),ratel.skill.load,ratel.upstream.register, andratel.auth.flow— alongside the existing localrecord_eventstream, which is unchanged. Emission is transparent and free by default: theopentelemetryAPI and the vocabulary are imported lazily, so the base (dependency-free) install is a pure pass-through no-op, and when OpenTelemetry is present the spans flow to whatever provider is registered. Built on the OTel-freeratel_ai_telemetryvocabulary, so the base install stays dependency-free. configure_telemetry(api_key=..., endpoint=..., headers=..., service_name=...)convenience wiring, exported fromratel_ai: installs a Ratel-owned OTLP exporter (via the new[otlp]extra,pip install 'ratel-ai[otlp]') that ships the SDK's spans to Ratel Cloud (or any OTLP endpoint) and returns the provider as a shutdown handle. Hosts already running OpenTelemetry skip it and addratel_span_processorfromratel_ai_telemetryinstead.- Message/tool content (
ratel.search.query,gen_ai.tool.call.arguments/.result) rides span attributes only whenOTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENTselects a span mode (SPAN_ONLY/SPAN_AND_EVENT); default off.
[0.3.0] - 2026-07-06
Added
ToolCatalog/SkillCatalogaccept a defaultmethod("bm25"|"semantic"|"hybrid") andsearch(query, top_k, origin=..., method=...)takes a per-call override."bm25"(default) is unchanged and model-free;"semantic"/"hybrid"load a local embedding model and raiseRuntimeErrorif it fails to load. Exposed via the nativesearch_with_methodbinding and theSearchMethodtype.- A
"semantic"/"hybrid"catalog embeds each tool/skill eagerly atregister(incrementally), so searches never pay the corpus-embedding cost. Newcatalog.build_embeddings()pre-computes embeddings on demand (e.g. after a bulk register). BM25 catalogs do neither. A semantic/hybrid search on a catalog with no embeddings built raisesRuntimeError(embeddings not computed) rather than embedding during the search.
[0.2.1-rc.1] - 2026-07-04
Changed
- First release cut under the per-package release scheme (ADR-0008):
ratel-ainow versions and ships independently of the core crate and JS SDK, taggedsdk-py-v*. No API changes since 0.2.0.
[0.2.0] - 2026-06-16
Changed
- BREAKING:
search_tools_tool→search_capabilities_tool(SEARCH_TOOLS_ID→SEARCH_CAPABILITIES_ID). It now returns two independently-ranked buckets —{ tools, skills }. Brings the Python SDK to parity with the TypeScript SDK. The oldsearch_tools_tool/SEARCH_TOOLS_IDare kept as deprecated aliases (see Deprecated), so0.1.xcode keeps working after upgrading.
Added
- First-class skills:
SkillCatalog,Skill,get_skill_content_tool(get_skill_content), and the nativeSkillRegistry/SkillHit— the on-demand skill analogue of the tool catalog, ranked by a separate BM25 corpus. - Skill–tool coupling: a
Skillcan declare atoolslist, andsearch_capabilitiespulls a matched skill's declared tools into thetoolsbucket — additively (beyondtopKTools) and deduped against query hits — so the agent gets the playbook and the tools it needs in one turn.
Deprecated
search_tools_toolandSEARCH_TOOLS_ID. They retain their pre-0.2.0 behaviour — a tools-only{groups}result and thesearch_toolsid — so upgrading from0.1.xdoes not break existing callers. Migrate tosearch_capabilities_tool; the aliases will be removed in a future release.
Fixed
- Gateway error payloads carry
isError: True;invoke_toolrejects a non-objectargsinstead of forwarding stray top-level keys. search_capabilities_toolvalidatestopKTools/topKSkills(declaredinteger, positive):0, negative,bool, andfloatfall back to the default, matching the TypeScript SDK exactly.search_capabilities_tooladvertises theskillsbucket andget_skill_contentin its description only when a non-emptySkillCatalogis provided.
[0.1.6] - 2026-06-10
Added
- Initial release of the Python SDK. Binds the Rust core (
ratel-ai-core) via PyO3, distributed as prebuiltabi3wheels for darwin-arm64, darwin-x64, linux-x64-gnu, linux-arm64-gnu, and win32-x64-msvc — no Rust toolchain required to install. (v0.1.5shipped TS-only on 2026-05-10; the first release carrying Python is the next version bump.) Binding strategy locked in ADR-0006. - Full feature parity with the TypeScript SDK (
@ratel-ai/sdk):ToolRegistry/SearchHit— metadata-only BM25 index (native).ToolCatalogaccepts atraceconfig (noopdefault,memory, orjsonl); captured events flow through the Rust core sink (ADR-0007). Exposesrecord_event,drain_trace_events, and anoriginargument onsearch.invokeemitsinvoke_start/invoke_end/invoke_errorwithargs_size_bytesandtook_ms, and awaits coroutine executors.search_tools_tool/invoke_tool_toolgateway factories with verbatim descriptions and JSON schemas from the TS SDK.search_tools_toolemitsgateway_searchwithorigin: "agent";invoke_tool_toolemitsgateway_invoke/gateway_errorand handles theneeds_auth/on_unauthorizedpath.register_mcp_serveringests an upstream MCPClientSession(optionalmcpextra,pip install 'ratel-ai[mcp]'), namespacing tool ids as<server>__<tool>and emittingupstream_register/upstream_invoke/upstream_error.
- Ships type stubs (
_native.pyi,py.typed) for a fully typed install.