Metadata-Version: 2.4
Name: kubit-otel
Version: 0.3.0
Summary: OpenTelemetry exporter for Kubit analytics.
Author-email: Kubit Inc <support@kubit.ai>
License-Expression: LicenseRef-Kubit-Proprietary
Project-URL: Homepage, https://www.kubit.ai
Project-URL: Documentation, https://docs.kubit.ai
Keywords: opentelemetry,otel,kubit,kinesis,observability,llm-ops,analytics,genai,tracing
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: System :: Monitoring
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: opentelemetry-api>=1.20.0
Requires-Dist: opentelemetry-sdk>=1.20.0
Requires-Dist: boto3>=1.28.0
Requires-Dist: httpx>=0.24.0
Provides-Extra: openai
Requires-Dist: opentelemetry-instrumentation-openai>=0.1.0; extra == "openai"
Provides-Extra: dev
Requires-Dist: pytest>=7.0; extra == "dev"
Requires-Dist: pytest-mock>=3.0; extra == "dev"
Requires-Dist: moto[kinesis]>=4.0; extra == "dev"
Dynamic: license-file

# kubit-otel

OpenTelemetry exporter for Kubit analytics.

## Install

```bash
pip install kubit-otel
```

## Quick start

```python
from kubit_otel import configure
from opentelemetry import trace

configure(api_key="rg.v1.xxx", service_name="my-app")
tracer = trace.get_tracer("my-app")

with tracer.start_as_current_span("chat.completion") as span:
    span.set_attribute("gen_ai.request.model", "gpt-4o")
    span.set_attribute("gen_ai.prompt", "Hello, world!")
    span.set_attribute("gen_ai.completion", "Hi there!")
    span.set_attribute("gen_ai.usage.input_tokens", 10)
    span.set_attribute("gen_ai.usage.output_tokens", 5)
```

Spans are exported to Kubit with standard OpenTelemetry GenAI semantic
conventions. Root spans become traces, child spans become enriched
observations. `gen_ai.*` attributes are extracted into dedicated columns
for model name, prompt/completion, token counts, and cost.

## Supported attributes

| OpenTelemetry attribute | Purpose |
|---|---|
| `gen_ai.request.model` / `gen_ai.response.model` | Model name |
| `gen_ai.prompt` / `gen_ai.content.prompt` | Input prompt |
| `gen_ai.completion` / `gen_ai.content.completion` | Output completion |
| `gen_ai.usage.input_tokens` | Input token count |
| `gen_ai.usage.output_tokens` | Output token count |
| `gen_ai.usage.cost` | Total cost (USD) |
| `session.id` | Conversation session id |
| `enduser.id` | End-user id |

## Python compatibility

Python 3.9+

## License

Proprietary — see [LICENSE](./LICENSE).
