File size: 2,129 Bytes
ad26101
75128cb
 
 
 
ad26101
75128cb
ad26101
75128cb
ad26101
 
75128cb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
---
title: CXR Orchestrator
emoji: 🫁
colorFrom: indigo
colorTo: gray
sdk: docker
app_port: 7860
pinned: false
short_description: Chest X-ray interpretation, localization & overlays
---

# CXR Orchestrator — Hugging Face Docker Space

A Chainlit chat frontend for the chest-X-ray agent. Attach a CXR to a message and
ask for a read; the agent triages the image, reasons over it with
**NV-Reason-CXR-3B** (via an MCP server), localizes findings, and can author an
**interactive HTML overlay** that opens in a right-hand dashboard panel. Optional
**ElevenLabs** voice narrates the impression inline.

Follow-up questions in the same chat reuse the loaded image and any findings or
visualizations already produced — no need to re-attach.

## How it works

Per chat session the app opens the reasoning MCP connection and provisions one
`UnixLocalSandboxClient` workspace (staging the `cxr-overlay` skill), keeping both
alive for the session. Each turn runs one agent turn; any HTML the agent writes to
the sandbox `output/` directory is collected and surfaced as a selector button +
the right-hand panel (plus a downloadable file). If the sandbox can't be
provisioned, the app falls back to the base agent for a text-only read.

The agent is the model-driven `SandboxAgent` (shell + filesystem). The sandbox
capabilities are ordinary function tools, so it runs on **Claude via LiteLLM**.

## Repo layout (Space root)

```
Dockerfile
app.py
requirements.txt
README.md                       <- this file (HF Docker Space header)
chainlit.md
.chainlit/config.toml
public/elements/OverlayFrame.jsx
cxr_agents/  tools/  skills/  models/  sandbox/
```

## Secrets (Space → Settings → Secrets)

| Name | Required | Purpose |
| --- | --- | --- |
| `ANTHROPIC_API_KEY` | yes | Claude (orchestrator, via LiteLLM) |
| `ELEVENLABS_API_KEY` | no | Voice narration (a free key works) |
| `CXR_REASON_MCP_URL` | no | Override the reasoning MCP URL |
| `ELEVENLABS_VOICE_ID` | no | Default voice (name or raw ID) |

## Disclaimer

Decision support only — **not a diagnostic device**. Always confirm findings with
a qualified radiologist.