How saumitra2k4/cityflo-product-engineer-assignment works
Cityflo morning rider triage is a non-persistent web tool for a support agent: it turns a fixed feedback snapshot into an auditable harm-first review, and separately previews one new message without adding it to the batch. The batch path validates and reconciles rows before ranking issues; the live path validates input, checks safety, and returns a human-review preview. Language judgement is advisory and may fall back deterministically. The README documents these capabilities; sampled source excerpts do not show every server dispatch, so only documented or evidenced wiring is included.
Main entry points: server.py HTTP server · service.py Triage service · app.js Triage interface · judge.py Batch language judge
Components 14
Web interface
- Triage interface
static/app.js - HTTP server
server.py
Batch triage
- Triage service
app/service.py - Row intake
app/intake.py - Record types
app/domain.py - Ranking and ledger
app/triage.py
Live preview
- Safety assessment
app/safety.py - Live evaluation
app/live.py
Language judgment
- Batch language judge
app/judge.py
Data and services
- Feedback snapshot
data/feedback.csv - Language replay
data/language_replay.json - Configured language service
- OpenAI service
Other components
- Support agent
Connections 17
- Support agent → Triage interface: uses
- Triage interface → HTTP server: requests triage
- HTTP server → Triage interface: returns API data
- HTTP server → Triage service: requests batch triage
- Feedback snapshot → Row intake: loads rows
- Triage service → Row intake: ingests rows
- Triage service → Batch language judge: configures judge
- Triage service → Ranking and ledger: builds result
- Row intake → Record types: creates records
- Ranking and ledger → Batch language judge: requests advisory checks
- Ranking and ledger → Record types: serializes records
- Batch language judge → Language replay: reads replays
- Batch language judge → Configured language service: requests judgment
- Triage interface → HTTP server: submits message
- HTTP server → Live evaluation: evaluates message
- Live evaluation → Safety assessment: assesses safety
- Live evaluation → OpenAI service: requests judgment