MCE Worker¶
Standalone Metrics Computation Engine (MCE) worker for processing telemetry sessions.
Source: workers/mce-worker
Overview¶
The MCE worker is the deployable, queue-driven wrapper around the MCE
library. It reads session messages from a RabbitMQ queue (or a local JSON file in run-once mode),
computes the configured set of metrics for each session via mce.client.worker.MCEWorkerService,
writes the results to the knowledge graph, and, if output queues are configured, forwards the message.
It sits right after the normalization worker in the ingestion pipeline (see the pipelines), running in parallel with the embedding worker:
- Input queue:
new_session_to_mce - Output queue: none by default. The MCE worker is a branch of its own off the norm worker: nothing is downstream of it
- CLI:
mce-worker-cli - Config:
mce_config.yaml(--config-file)
Internally, MCEWorker (workers/mce-worker/src/mce_worker/worker.py) subclasses the shared
worker-base BaseWorker, and delegates the actual metric
computation to MCEWrapper (workers/mce-worker/src/mce_worker/wrapper/mce_wrapper.py), which
wraps MCEWorkerService.
Usage¶
# Queue-based mode (long-running worker)
mce-worker-cli \
--rabbitmq-url amqp://<user>:<password>@rabbitmq:5672/ \
--input-queue new_session_to_mce \
--config-file /path/to/mce_config.yaml
# Run-once mode (Argo Workflows compatible)
mce-worker-cli \
--run-once \
--config-file /tmp/mce-config.yaml \
--input /tmp/input-message.json \
--output /tmp/mce-output-message.json
# Test liveness
mce-worker-cli --test
Configuration¶
Which metrics get computed is declared in mce_config.yaml — see
MCE Configuration for the format. Copy
workers/mce-worker/.env.template to .env and fill in the values, or pass everything via CLI
flags / environment variables:
| Env var | CLI flag | Description |
|---|---|---|
RABBITMQ_URL |
--rabbitmq-url |
Full RabbitMQ connection URL. Alternative to the split settings below. |
RABBITMQ_HOST |
(env only) | RabbitMQ host when not using RABBITMQ_URL |
RABBITMQ_PORT |
(env only) | RabbitMQ port when not using RABBITMQ_URL |
RABBITMQ_USER |
(env only) | RabbitMQ username required in split mode |
RABBITMQ_PASSWORD |
(env only) | RabbitMQ password required in split mode |
RABBITMQ_VHOST |
(env only) | Optional RabbitMQ virtual host |
MCE_INPUT_QUEUE |
--input-queue |
Input queue name |
MCE_OUTPUT_QUEUE |
--output-queue |
Output queue(s), comma-separated |
MCE_FEEDBACK_QUEUE |
--feedback-queue |
Optional feedback queue |
MCE_CONFIG_PATH |
--config-file |
Path to mce_config.yaml |
NEO4J_URI |
--neo4j-uri |
Neo4j Bolt URI |
NEO4J_USERNAME |
--neo4j-user |
Neo4j username |
NEO4J_PASSWORD |
--neo4j-password |
Neo4j password |
NEO4J_DB |
--neo4j-database |
Neo4j database name |
OPENAI_API_KEY |
--llm-api-key |
LLM API key, for LLM-as-judge metrics |
LLM_MODEL_NAME |
--llm-model-name |
LLM model identifier |
LLM_BASE_MODEL_URL_MCE |
--llm-base-model-url |
LLM base URL (optional) |
MODEL_PRICES_REFRESH |
(env only) | false/0/no stops the run-time refresh of the LLM price table from LiteLLM and uses the table packaged in the image. Default true |
MODEL_PRICES_URL |
(env only) | Where to fetch the price table from. Default LiteLLM's published model_prices_and_context_window.json |
MODEL_PRICES_TTL_SECONDS |
(env only) | How long a fetched price table is used before the next fetch. Default 86400 |
Also supported: the common worker flags --run-once, --input, --output, --test, --debug,
and --max-sessions, shared by all workers.
Build & Run¶
# Build a wheel (run from the monorepo root)
uv build workers/mce-worker
# Sync dependencies and run the CLI directly
uv run --directory workers/mce-worker mce-worker-cli --test