← Back to blog

opentine v0.7.0: interop from first run to OTLP

0xcircuitbreaker··8 min read

opentine 0.7.0 is the Interop & Adoption Release: a recorded run can now be exported from the CLI, pushed to an OTLP/HTTP collector, or created without first writing a Python script.

It builds on the v3 CLI surface from 0.6 while preserving the same storage boundary. Portable *.tine artifacts remain format v2, repository objects remain format v3, and upgrading requires no data migration.

Export provenance from the shell

tine export exposes the OpenTelemetry GenAI exporter introduced in 0.5 as an operator workflow:

tine export result.tine
tine export result.tine --output result.otlp.json
tine export result.tine --endpoint https://collector.example/v1/traces

The command writes a complete OTLP/JSON document to standard output, a file, or an OTLP/HTTP endpoint. It uses the same to_otel_genai_document implementation as the Python API, and the document can be imported again with tine import --format otel-json.

Prompts and completions can contain sensitive data, so a cleartext HTTP push is refused unless the endpoint is loopback or --allow-insecure is explicit. Connection errors and non-2xx responses fail instead of silently dropping the export.

Modern OpenTelemetry content

The exporter now emits OpenTelemetry GenAI 1.36 structured gen_ai.input.messages and gen_ai.output.messages alongside the older prompt and completion attributes. Keeping the earlier keys preserves compatibility with existing backends while modern systems can render richer messages.

Export also includes cache-read, cache-creation, reasoning, input, output, and total usage; the instrumentation scope carries the 1.36 schema URL; and span kinds distinguish model calls from internal work. Cost remains an explicit opentine.cost_usd attribute because the GenAI convention does not define a standard cost field.

The importer understands the new message keys, and the event-level export/import round trip preserves usage. It is still a semantic interoperability promise, not a claim that every arbitrary OTLP document round-trips byte for byte.

Capture a first run without writing Python

The CLI now supports a third tine run mode:

tine run --model anthropic:claude-sonnet-5 --prompt "Review this change"
tine run --model ollama:llama3.1:8b --prompt "Summarize this repository"

provider[:model] resolves the bundled native and hosted-compatible adapters, while splitting only on the first colon so model identifiers can contain additional colons. The provider SDK is not imported until that provider is selected.

This mode is mutually exclusive with script and harness execution, and --prompt is required. Unknown providers, missing optional dependencies, and provider failures return focused CLI errors rather than tracebacks.

One JSON contract

Version 0.7 consolidates machine-readable output behind one serializer. tine pricing list, check, and update join show with --json; export to standard output, a file, or an OTLP request body uses the same serialized bytes; and all three run modes share one save receipt.

The repository's five lower-level plumbing commands—fsck, object, migrate-v3, fetch, and push—continue to emit their existing bare JSON and do not take a redundant --json flag.

A runnable adoption path

The tagged source adds offline examples for the complete v3 repository lifecycle and for OTLP import/export. The repository example covers initialization, recording, inspection, fork and resume, semantic diff, evaluation, attestation, promotion, search, and verification. The interop example imports OTLP/JSON into a repository and exports the resulting run again.

Getting-started, capture, concepts, public API, and contributing guides were expanded alongside those executable examples. Documented CLI commands are parser-checked so examples cannot drift unnoticed from the shipped interface.

Current pricing coverage

The signed catalog adds a verified rate card for xAI grok-4.6 and makes it the Grok() default. GLM 5.3 remains runnable but unpriced because a metered per-token API price was not published for the release; opentine does not substitute another model's price.

Version 0.7 makes the already-built provenance system easier to enter and easier to connect to the rest of an observability stack. It does not rename the formats or turn telemetry export into a hosted service.

Install opentine 0.7.0 from PyPI, read the official v0.7.0 changelog, and inspect the tagged source for the full release.