Multi-app repository of LangGraph + FastAPI applications, each demonstrating a different workflow pattern.
| App | Pattern | Port | Description |
|---|---|---|---|
| research_assistant | Sequential chain | 8000 | Search (DuckDuckGo) → Summarize (Gemini) → Cite (Gemini) + SQLite history |
| customer_support_triage | Router + Human-in-the-loop | 8001 | Supervisor (structured output) → Specialist → Responder → Escalation/Handoff with checkpoints |
| content_creation_studio | Reflection Loop (Cycle) | 8002 | Writer → Critic (score <8 loop max 3) → Editor → Human Approval (interrupt_before) + SSE stream |
| code_assistant_team | Parallel Collaboration | 8003 | Planner → Send fan-out → Coder/Tester/DocsWriter (subgraphs + reducers) → Reviewer + WS/SSE |
Each app is self-contained with its own virtual environment and dependencies.
cd research_assistant
pip install -r requirements.txt
cp .env.example .env # add GOOGLE_API_KEY
uvicorn app.main:app --reload --port 8000cd customer_support_triage
pip install -r requirements.txt
cp .env.example .env # add GOOGLE_API_KEY (mock fallback works without)
uvicorn app.main:app --reload --port 8001cd content_creation_studio
pip install -r requirements.txt
cp .env.example .env # add GOOGLE_API_KEY (mock fallback works without)
uvicorn app.main:app --reload --port 8002cd code_assistant_team
pip install -r requirements.txt
cp .env.example .env # add GOOGLE_API_KEY (mock fallback works without)
uvicorn app.main:app --reload --port 8003Open http://localhost:<port>/ for UI, /docs for Swagger.
- FastAPI 0.141.1
- LangGraph 1.2.11
- Gemini via
langchain-google-genai4.4.0 - Pydantic 2.13.5 /
pydantic-settings2.15.0 - SQLite via
aiosqlite0.22.1 (async) orsqlite3(sync) - Testing: pytest 9.1.1 + httpx
See AGENTS.md for architecture conventions, adding new apps, and development guidelines.
- Create folder with snake_case name
- Copy structure from existing app (see AGENTS.md)
- Update
requirements.txtwith shared + app-specific deps - Implement
app/graph/builder.pywithbuild_graph() - Wire
app/main.py(lifespan, router, static mount) - Document in
README.mdwith run commands and endpoints - Pick unused port (8002, 8003...)
solid-waffle/
├── AGENTS.md # Agent instructions & conventions
├── README.md # This file
├── research_assistant/ # Sequential workflow app
│ ├── requirements.txt
│ ├── .env.example
│ ├── README.md
│ └── app/
├── customer_support_triage/ # Router + human handoff app
│ ├── requirements.txt
│ ├── .env.example
│ ├── README.md
│ └── app/
└── content_creation_studio/ # Reflection loop app
├── requirements.txt
├── .env.example
├── README.md
└── app/
└── code_assistant_team/ # Parallel collaboration app
├── requirements.txt
├── .env.example
├── README.md
└── app/
MIT