Inspiration
A restaurant review creates two jobs: respond honestly and decide what staff should follow up on. Service Recovery Desk is for the restaurant manager responsible for both. It connects the reply to approved records and turns the guest's concerns into concrete handoff proposals.
What it does
The operator provides a review and approved fact wording. A real Strands agent extracts issues and verbatim quotes, then chooses relevant approved fact IDs. Deterministic application code validates sources, renders the reply and proposes follow-ups for the kitchen, shift lead, manager or facilities lead.
The operator checks fact consistency, tone and issue coverage before approving a local ZIP containing reply.txt, tasks.csv and evidence.json. Safety cues and explicitly declared source conflicts block approval and export. The agent cannot approve, export, post a reply, notify staff or issue refunds.
How we built it
This solo project extends its existing contest-period Python/SQLite/browser prototype with Strands Agents SDK 1.54.0 and its official Ollama provider, using the separately downloaded Qwen2.5 7B model locally. The agent has only read_context and prepare_case tools. Turn, token, tool-attempt and time limits bound execution. A failed invocation saves no partial draft and never silently falls back to the separate, clearly labeled offline keyword mode.
Source and input hashes, model digest, timing, token usage and tool events accompany each saved AI draft. Approval is recorded separately. Bedrock is an optional untested adapter; no AWS cloud deployment or AgentCore use is claimed.
What we verified
56 automated tests passed again from the clean publication copy. They include HTTP, source validation, approval/export and real-SDK scripted-model contracts; scripted model events are fixtures, not LLM evidence.
Separately, nine synthetic scenarios ran through the actual local model. Eight passed the scenario checks. The remaining scenario repeated contradictory approved free-text facts. That failure is retained and documented: this is a small development evaluation, not an accuracy estimate. Operator-declared conflicts_with IDs enforce a deterministic hold, but general contradiction detection is absent.
A final genuine browser run produced five follow-ups from the fictional restaurant sample. Export was disabled before review and approval. The actual Chrome-downloaded ZIP was inspected: three files, five tasks and the correct execution/approval audit. Screenshots, source hashes, model evidence and the downloaded synthetic handoff are public in the repository.
What we learned
Approved wording is not proof that a record is true or consistent. Prompt-only conflict filtering was unreliable, so known source conflicts require explicit structured declarations and every usable draft still needs human review. Preserving failed evaluations made that boundary visible.
Limitations and next steps
This is a local single-operator prototype. It can miss issues or relevant facts and does not establish source truth. Export creates a handoff; it does not assign staff or publish anything. All supplied business records are fictional, with no customer savings or impact claims. A public service would need production authentication, isolation, retention and security work.
AI assistance
Codex assisted implementation, debugging, tests, independent review and documentation. The entrant is working solo. Strands, Ollama and Qwen retain their respective licenses; the application source is MIT licensed.
Try it
Follow the README's real local AI installation route: install requirements-live.txt, pull qwen2.5:7b in Ollama, and run python app.py --ollama-model qwen2.5:7b. Load the fictional sample, prepare, review, approve and export. Setup requires a local model download; no paid API or AWS deployment is required for this verified path.
Built With
- css
- html
- javascript
- ollama
- python
- qwen2.5
- sqlite
- strands-agents
Log in or sign up for Devpost to join the conversation.