|
9 | 9 | [](https://www.python.org/downloads/) |
10 | 10 | [](https://ai.pydantic.dev/) |
11 | 11 | [](https://faststream.ag2.ai/latest/) |
12 | | -[](https://pypi.org/project/murmur-ai/) |
| 12 | +[](https://pypi.org/project/murmur-runtime/) |
13 | 13 | [](https://droidnoob.github.io/murmur-ai/) |
14 | 14 | [](LICENSE) |
15 | 15 |
|
@@ -45,7 +45,7 @@ The same code runs locally on `asyncio` or distributed across a worker fleet on |
45 | 45 |
|
46 | 46 | - **Observable by default.** Every spawn, completion, tool call, group start/end, worker lifecycle, and budget hit emits a typed `RuntimeEvent`. Composable emitters: `LogEventEmitter` (structlog), `SSEEventEmitter` (HTTP streaming), `MultiEventEmitter` (fan-out), `BrokerEventBridge` (worker → publisher relay). Every event carries `agent_name`, `task_id`, `trace_id`, `parent_trace_id`, `timestamp`. |
47 | 47 |
|
48 | | -- **OpenTelemetry metrics export.** Drop-in `OTelMetricsEmitter` records `gen_ai.client.token.usage` and `gen_ai.client.operation.duration` histograms per the OTel GenAI semantic conventions, plus Murmur's own tool-call and rejection counters. Cardinality-safe attributes; your `MeterProvider` decides where the data lands (Datadog, Grafana, Logfire, Phoenix). Opt-in via `murmur-ai[otel]`. |
| 48 | +- **OpenTelemetry metrics export.** Drop-in `OTelMetricsEmitter` records `gen_ai.client.token.usage` and `gen_ai.client.operation.duration` histograms per the OTel GenAI semantic conventions, plus Murmur's own tool-call and rejection counters. Cardinality-safe attributes; your `MeterProvider` decides where the data lands (Datadog, Grafana, Logfire, Phoenix). Opt-in via `murmur-runtime[otel]`. |
49 | 49 |
|
50 | 50 | - **Cost-aware orchestration.** `TokenBudget` enforces per-task and per-runtime token ceilings with pre-check + post-charge semantics. Budgets propagate through cascading spawns; over-budget runs raise the typed `BudgetExceededError`. Best-effort USD costs computed from per-model rate cards. |
51 | 51 |
|
@@ -95,33 +95,33 @@ Null → Full → Summary → Selective (Summary / Selective planned) |
95 | 95 | ## Install |
96 | 96 |
|
97 | 97 | ```bash |
98 | | -pip install murmur-ai # AsyncBackend, no broker — works immediately |
| 98 | +pip install murmur-runtime # AsyncBackend, no broker — works immediately |
99 | 99 | ``` |
100 | 100 |
|
101 | 101 | Or with [`uv`](https://github.com/astral-sh/uv): |
102 | 102 |
|
103 | 103 | ```bash |
104 | | -uv add murmur-ai |
| 104 | +uv add murmur-runtime |
105 | 105 | ``` |
106 | 106 |
|
107 | 107 | Optional extras: |
108 | 108 |
|
109 | 109 | | Extra | Pulls in | When | |
110 | 110 | |---|---|---| |
111 | | -| `murmur-ai[redis]` | `faststream[redis]` | Redis Streams broker | |
112 | | -| `murmur-ai[kafka]` | `faststream[kafka]` | Kafka broker | |
113 | | -| `murmur-ai[nats]` | `faststream[nats]` | NATS broker | |
114 | | -| `murmur-ai[rabbitmq]` | `faststream[rabbit]` | RabbitMQ broker | |
115 | | -| `murmur-ai[all-brokers]` | All four brokers | Multi-broker fleet | |
116 | | -| `murmur-ai[server]` | `fastapi`, `uvicorn`, `sse-starlette` | `murmur serve` HTTP API | |
117 | | -| `murmur-ai[otel]` | `opentelemetry-api`, `opentelemetry-sdk` | OTel metrics export | |
118 | | -| `murmur-ai[mcp-server]` | `mcp` | Expose as an MCP server | |
119 | | -| `murmur-ai[sqlite]` | `aiosqlite` | Persistent `RunStore` / `EventStore` | |
120 | | -| `murmur-ai[redis-runstore]` | `redis` | Cluster-wide `RunStore` | |
121 | | -| `murmur-ai[rocksdb]` | `rocksdict` | High-throughput single-host store | |
122 | | -| `murmur-ai[uvloop]` | `uvloop` | Faster async event loop (POSIX only) | |
123 | | -| `murmur-ai[reload]` | `watchfiles` | `--reload` for serve / worker | |
124 | | -| `murmur-ai[all]` | Every optional extra | Kitchen-sink install | |
| 111 | +| `murmur-runtime[redis]` | `faststream[redis]` | Redis Streams broker | |
| 112 | +| `murmur-runtime[kafka]` | `faststream[kafka]` | Kafka broker | |
| 113 | +| `murmur-runtime[nats]` | `faststream[nats]` | NATS broker | |
| 114 | +| `murmur-runtime[rabbitmq]` | `faststream[rabbit]` | RabbitMQ broker | |
| 115 | +| `murmur-runtime[all-brokers]` | All four brokers | Multi-broker fleet | |
| 116 | +| `murmur-runtime[server]` | `fastapi`, `uvicorn`, `sse-starlette` | `murmur serve` HTTP API | |
| 117 | +| `murmur-runtime[otel]` | `opentelemetry-api`, `opentelemetry-sdk` | OTel metrics export | |
| 118 | +| `murmur-runtime[mcp-server]` | `mcp` | Expose as an MCP server | |
| 119 | +| `murmur-runtime[sqlite]` | `aiosqlite` | Persistent `RunStore` / `EventStore` | |
| 120 | +| `murmur-runtime[redis-runstore]` | `redis` | Cluster-wide `RunStore` | |
| 121 | +| `murmur-runtime[rocksdb]` | `rocksdict` | High-throughput single-host store | |
| 122 | +| `murmur-runtime[uvloop]` | `uvloop` | Faster async event loop (POSIX only) | |
| 123 | +| `murmur-runtime[reload]` | `watchfiles` | `--reload` for serve / worker | |
| 124 | +| `murmur-runtime[all]` | Every optional extra | Kitchen-sink install | |
125 | 125 |
|
126 | 126 | ## Example |
127 | 127 |
|
@@ -329,7 +329,7 @@ docs/ # mkdocs site (concepts, guides, API ref) |
329 | 329 | tests/ |
330 | 330 | ``` |
331 | 331 |
|
332 | | -PyPI distribution: `murmur-ai`. Import: `murmur` (`pip install murmur-ai` → `import murmur`). |
| 332 | +PyPI distribution: `murmur-runtime`. Import: `murmur` (`pip install murmur-runtime` → `import murmur`). |
333 | 333 |
|
334 | 334 | The dependency arrow points inward to `core/` and `types.py`. Only `murmur.interop` may import `pydantic_ai` or `faststream`. |
335 | 335 |
|
|
0 commit comments