Redis events in, structured LLM enrichment out, republish to Kafka.
Consumes events from a Redis stream (XREADGROUP with consumer group; at-least-once via XACK), enriches each event with a small LLM that emits a 4-field classification + suggested-action JSON, validates the shape against a strict JSON schema, then publishes the enriched event to a Kafka topic for downstream consumers. Pairs streaming-redis-source 1.0.0 with streaming-kafka-producer 1.0.0.
No black box. Each step is a typed-frame node you can edit, monitor, and replace.
An upstream service writes an event to Redis via XADD. streaming-redis-source consumes via XREADGROUP with a configured consumer group.
streaming-prompt-template renders an enrichment prompt with the raw event JSON. The LLM emits a 4-field enrichment object: event_class enum / severity 0-9 / summary / suggested_action.
streaming-structured-output validates the enrichment against a strict JSON schema. On validation failure, emit_recovery_on_failure produces a fallback recovery payload that still publishes.
streaming-kafka-producer publishes the enriched event to a downstream Kafka topic with gzip compression and acks=all. session_id is the partition key for per-session ordering.
Streaming graph contract, observability, and cost discipline come standard. The agent ships with a full test suite that runs in CI on every node version bump.
First template to use both streaming-redis-source 1.0.0 (input via XREADGROUP) and streaming-kafka-producer 1.0.0 (output with gzip + acks=all). Operators learn the source/sink pair pattern in one workflow.
XACK on every successful round-trip and incrementally during long sessions. A pod crash mid-batch redelivers un-ACKed entries via the consumer group's PEL after the visibility timeout. Idempotency-key downstream on redis_id.
streaming-structured-output validates the LLM emit against a JSON schema with additionalProperties=false. event_class is an enum, severity is an integer 0-9. Bad emits emit a fallback recovery instead of poisoning the downstream topic.
Every input event flows through (no conditional drop) — this is event ENRICHMENT, not alert filtering. Downstream consumers subscribe to events.enriched for analytics, fan-out routers, vector indexers.
Redis source / Kafka producer / structured-output all have independent error_out ports that fan into one failure_webhook. The on-call sees all three failure surfaces on one channel without operator effort.
Each enrichment writes a span tagged with redis_mode / redis_key / redis_id and the published Kafka topic. Filter the canvas overlay by redis_id to debug per-event enrichment behaviour.
Every dependency is a registered Strongly service or a model you control. Swap any one of them in the install wizard. The graph stays intact.
The marketplace template is the graph. Every customisation below is a config change or a single-node addition - never a rewrite.
Replace the single Kafka producer with a streaming-conditional matching event_class and one streaming-kafka-producer per port (per-class topic).
Keep the enrich pipeline AND add a parallel branch: streaming-conditional matching severity ≥ 7 drops to a streaming-webhook-response for immediate alerting.
Extend the LLM schema with a recommended_consumer enum field; use streaming-llm-router predicating on that to deliver per-consumer tailored payloads.
Wire streaming-aggregator between Redis and the prompt (max 20 events / 10s window). Change the prompt to enrich a batch in one LLM call.
Replace LLM classification with streaming-embed to attach a dense embedding to every event for downstream similarity search.
We don't leave until it runs. Talk to a forward-deployed engineer about deploying Redis Stream → LLM Enrich → Kafka into your environment with your STT, your LLM, your TTS, your data.
Schedule a Demo