Real-time Clinical Audio Processing with Agentic Workflows

abridge · Healthcare · 2026 · source Agentic: yes · promotional bias: low · source-backed · extracted with prompt 0.5.6 (schema v2)

Generated from extraction.json — do not edit by hand. Every claim cites verbatim source evidence; stated means the quote directly asserts the claim, implied means it supports it indirectly.

Problem

Domain: Real-time clinical audio processing and healthcare agent workflows

Abridge needed to process clinician-patient conversations in real time, preserve protected health information durably, and decide during an encounter when clinical products should run.

Constraints:

Architecture

Abridge models each clinical conversation as a Temporal encounter workflow, while a separate Kafka/Flink streaming pipeline handles 500-millisecond audio chunks and transcription. Transcribed utterances are sent as Temporal signals into an agentic active-listening workflow. The agent accumulates transcript state, uses enriched patient/clinician context, decides when products should run, and triggers activities or child workflows while Temporal provides durability, memory, retries, and observability.

Diagram confidence: explicit (topology described by the source).

flowchart LR
  A["Clinical encounter recording"] --> B["Audio ingestion backend"]
  A --> G["Encounter workflow"]
  B --> C["Kafka audio topic"]
  C --> D["Flink stream processor"]
  D --> E["Kafka transcript topic"]
  E --> F["Transcript signal consumer"]
  F --> H["Agentic active-listening workflow"]
  G --> H
  G --> K["Nexus workflow calls"]
  H --> I["Clinical product activities"]
  H --> J["Clinician chat agent"]
  H --> L["OpenAI token streaming workflow"]
Drag to pan · scroll or use +/− to zoom · reconstructed from the source's described component topology

Components

Component Role Interacts with
Clinical encounter recording Clinician-patient conversation captured by the Abridge app. Encounter workflow, Audio ingestion backend
Audio ingestion backend Receives recorded audio and feeds transcription/streaming processing. Clinical encounter recording, Kafka audio topic
Kafka audio topic Low-latency transport for 500-millisecond audio chunks. Audio ingestion backend, Flink stream processor
Flink stream processor Stateful stream processor that windows audio chunks and transcribes them. Kafka audio topic, Kafka transcript topic
Kafka transcript topic Carries transcribed words for active-listening workflows. Flink stream processor, Transcript signal consumer
Transcript signal consumer Reads transcript events and signals the Temporal workflow. Kafka transcript topic, Agentic active-listening workflow
Encounter workflow Temporal workflow representing the overall clinical encounter and guaranteed products. Clinical encounter recording, Nexus workflow calls, Agentic active-listening workflow
Agentic active-listening workflow Temporal workflow that accumulates utterances and runs an agent to decide when products should execute. Transcript signal consumer, Encounter workflow, Clinical product activities, Clinician chat agent
Clinical product activities Activities or child workflows triggered when the agent decides a product should run. Agentic active-listening workflow
Clinician chat agent Separate text-interactive agent envisioned to communicate with other workflow agents. Agentic active-listening workflow
Nexus workflow calls Cross-namespace workflow communication replacing HTTP server hops. Encounter workflow
OpenAI token streaming workflow Temporal-based micro-batching path for streaming LLM tokens across namespaces. Agentic active-listening workflow

Data flow

The clinician records an encounter. Audio enters Abridge's backend and is transcribed. For active listening, 500-millisecond audio chunks go to Kafka, Flink windows and transcribes them, transcribed words are emitted to another Kafka topic, and a consumer signals the Temporal active-listening workflow. Inside the workflow, an agent evaluates the accumulated transcript and context, then runs products as activities or child workflows.

3 supporting quotes
“we record the conversation between a clinician and a patient. We ingest that audio into our backend, transcribe it”transcript, stated
“instead of 30 second audio chunks, we ingest 500 millisecond audio chunks. We post that to a Kafka topic.”transcript, stated
“we put those words on a Kafka topic and we have a consumer off that Kafka topic to send signals to our agentic ambient active listening workflow.”transcript, stated

Why this architecture

Abridge split responsibilities by system fit: Temporal handles durable, observable long-running workflows and agent state, while Kafka/Flink handle high-throughput audio streaming. This avoids forcing high-volume streaming through Temporal while still letting transcribed utterances trigger durable agentic logic.

3 supporting quotes
“using Temporal as a harness for an agent is amazing. You get kind of a short term memory out of the box”transcript, stated
“as much as we love Temporal, there's some use cases that like it doesn't fit”transcript, stated
“Kafka is very fast to read and write from like single digit milliseconds most of the time.”transcript, stated

Models used: OpenAI

Scale

Alternatives considered (roads not taken)

Synchronous microservice chains

Rejected because: They were hard to observe, fragile under failures, and difficult to extend without timing/race problems.

“Observability is such a pain. I have to dig through logs, metrics, tracing.”transcript, stated
“when and where can I tap into it if I have a new feature request without like costing timing or racing race conditions?”transcript, stated

Queue/Kafka-only durable pipelines

Rejected because: Queues improved durability but worsened observability and introduced poison-record retry problems.

“that helps in a way, but then also doesn't really solve our observability. In a sense, it actually makes it worse and harder.”transcript, stated
“poison records blocking other people on a Kafka topic”transcript, stated

One-workflow-to-one-activity Temporal wrappers

Rejected because: That anti-pattern recreated synchronous microservices and failed to capture workflow-orchestration benefits.

“we kind of had this anti-pattern of one workflow to one activity.”transcript, stated
“we weren't really seeing the benefit of a workflow orchestrator.”transcript, stated

Use Temporal for high-throughput streaming audio

Rejected because: The team found Temporal was not a good fit for moving large volumes of streaming data at high throughput.

“the streaming audio use case when you're moving a lot of data around at a high throughput, like Temporal is not great for that.”transcript, stated

Patterns

durable-execution (reliability)

Temporal encounter and active-listening workflows preserve state, retries, and observability for clinical audio and product execution.

“it needs to be durable, reliable, and that's why we've chosen to use Temporal.”transcript, stated

agent-memory (agent-state)

Workflow state gives the active-listening agent short-term memory about what products have already run.

“the agent can actually look at that and say, "Hey, I already ran this product so I don't need to run it again."”transcript, stated

tool-use-orchestration (orchestration)

The active-listening agent triggers products as activities or child workflows when conversation state warrants it.

“the product will run either in an activity or a child workflow.”transcript, stated

multi-agent-orchestration (orchestration)

Abridge envisions multiple workflow-hosted agents communicating via Temporal signals and queries.

“agents in these workflows and they communicate with each other via signals and queries within Temporal.”transcript, stated

observability-tracing (operations)

Temporal UI makes workflow failures and slow activities visible without digging through distributed logs and traces.

“with Temporal, I just go to the UI, look at the Workflow and I can see, hey, this Activity is taking a long time”transcript, stated

Tradeoffs

Use a hybrid Temporal plus Kafka/Flink architecture.

Chose Temporal for agent workflows and Kafka/Flink for streaming audio over A single orchestration system for all data movement.

Rationale: Temporal fits durable logic and stateful agent decisions; Kafka/Flink fit low-latency high-throughput audio streams.

“like Temporal is not great for that.”transcript, stated
“So we use Flink to process those audio chunks, accumulate them in a window and then transcribe them.”transcript, stated

Consolidate encounter processing into cohesive workflows.

Chose Single encounter workflow abstraction over Distributed microservice/workflow chains with HTTP hops.

Rationale: The encounter workflow makes lifecycle state and failures visible while reducing retry behavior across namespaces.

“luckily we have this concept of an encounter, right? So this is like our encounter workflow.”transcript, stated
“I just make a single execute Nexus workflow command and the calling namespace handles all the retrial logics”transcript, stated

Use Temporal-based token micro-batching instead of true end-to-end streaming.

Chose Workflow signals, micro-batches, and API polling over Direct true streaming across regions/namespaces.

Rationale: The approach is not true streaming but feels responsive enough and fits Abridge's multi-region architecture.

“So it's not like true streaming, but it is enough to really give it a feel that it is”transcript, stated
“we are multi-region, so it's a little difficult to get those tokens back to the client”transcript, stated

Gotchas (what bit them)

Wrapping every operation as one workflow with one activity misses the point of workflow orchestration.

Root cause: The initial Temporal usage mirrored synchronous microservice chains instead of modeling the encounter lifecycle.

Resolution: Abridge consolidated around a single encounter workflow and moved cross-namespace calls to Nexus.

“we kind of had this anti-pattern of one workflow to one activity.”transcript, stated
“this is our new kind of single encounter workflow.”transcript, stated

HTTP servers between workflow namespaces caused retry storms during outages.

Root cause: Activity-level retries against a slow or failing HTTP intermediary spawned many workflows in the calling namespace.

Resolution: Nexus replaced the HTTP hop so the calling namespace handles retry logic through a workflow command.

“having the HTP server in the middle also caused us a ton of pain.”transcript, stated
“we also moved to Nexus to solve our HTTP server in the middle problem.”transcript, stated

Durable streaming audio is expensive and maintenance-heavy.

Root cause: Sub-five-second active listening required 500-millisecond chunks, Kafka, Flink, transcription windows, and workflow signaling.

Resolution: Use the streaming architecture only because durable audio and low latency are required; otherwise avoid it.

“If you don't need durable audio, like I recommend not doing this, it's very expensive and a lot to maintain”transcript, stated

Evaluation

The talk evaluates architecture through operational requirements: durability for clinical audio, observability in Temporal UI, sub-five-second active-listening latency, and proof-of-concept behavior for a clinician to-do list.

Metrics: Audio durability · Workflow observability · Sub-five-second response to relevant utterances · Single-digit millisecond Kafka read/write behavior · Correct avoidance of duplicate product execution

3 supporting quotes
“once something is said, to return back to the client within five seconds.”transcript, stated
“Kafka is very fast to read and write from like single digit milliseconds most of the time.”transcript, stated
“with Temporal, I just go to the UI, look at the Workflow and I can see, hey, this Activity is taking a long time”transcript, stated

Outcomes

Abridge reports hundreds of healthcare systems/providers, several EHR integrations, billions of actions per month, hundreds of workflows, 30-second legacy chunks, 500-millisecond streaming chunks, and a five-second client-response requirement.

3 supporting quotes
“So this agent will pick that up and we'll see take patient's blood pressure, right?”transcript, stated
“we built a POC and this is what our initial POC was.”transcript, stated
“we have a bunch of products that we built off this that are again, not public yet, but use this kind of same system.”transcript, stated