36 lines
1.5 KiB
Markdown
36 lines
1.5 KiB
Markdown
# web
|
|
|
|
Next.js frontend: chat UI, citation/evidence panel, drug autocomplete,
|
|
persistent clinical disclaimer banner.
|
|
|
|
**Current call path: browser → this app's own route handlers → `ai-service`.**
|
|
`api-gateway` is not built yet (its directory holds a `README.md` and a
|
|
`package.json`), so requests go through `app/api/` and on to `ai-service`
|
|
(`API_GATEWAY_URL ?? AI_SERVICE_URL`, set to `http://ai-service:8000` in
|
|
production). There is no authentication layer in this path today. When the
|
|
gateway and auth services are built, this is the seam that changes.
|
|
|
|
`app/api/chat/route.ts` is more than a proxy: it maps `ai-service`'s abstain
|
|
`reason` codes to the Vietnamese text the user reads. A reason code with no
|
|
entry there falls back to wording that reads as "no data in the formulary",
|
|
which would misrepresent an outage or a timeout — so a new backend reason
|
|
code needs an entry here in the same change.
|
|
|
|
Timeouts: `_components/ChatPanel.tsx` aborts a request at 65s, derived from
|
|
the backend's ceiling (a 40s request budget that can overrun by one in-flight
|
|
model call). A lower value can cut off answers the server has successfully
|
|
produced, so keep it above that ceiling if it is ever revisited.
|
|
|
|
## Running
|
|
|
|
```powershell
|
|
pnpm install
|
|
pnpm --filter web dev # http://localhost:3000, expects ai-service on :8079
|
|
```
|
|
|
|
## Tests
|
|
|
|
There are none, and no test runner is configured. Verify changes by driving
|
|
the real UI in a browser; `pytest` passing in `apps/ai-service` says nothing
|
|
about this app.
|