The AI chat UI previously collapsed every non-403/503 failure into a generic "could not respond" message, hiding real provider errors such as OpenRouter HTTP 402 "requires more credits". The backend already forwards the real "<status>: <message>" via pipeUIMessageStreamToResponse onError, so the fix is client-side. - describeError now returns the provider message verbatim for any error that is not one of our own gating responses, so 402 (credits), 429 (rate limit) and similar causes are visible to the user. - Match gating responses by the NestJS JSON "statusCode" field instead of loose substring/word checks, so a provider message that merely contains "403"/"503"/"disabled" is no longer misclassified and hidden. - Add a providerDetail() helper that filters empty text and the opaque "An error occurred." / "Internal server error" placeholders, falling back to the generic message only then. No backend changes; no new i18n keys.
React + TypeScript + Vite
This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
Currently, two official plugins are available:
- @vitejs/plugin-react uses Babel for Fast Refresh
- @vitejs/plugin-react-swc uses SWC for Fast Refresh
Expanding the ESLint configuration
If you are developing a production application, we recommend updating the configuration to enable type aware lint rules:
- Configure the top-level
parserOptionsproperty like this:
parserOptions: {
ecmaVersion: 'latest',
sourceType: 'module',
project: ['./tsconfig.json', './tsconfig.node.json'],
tsconfigRootDir: __dirname,
},
- Replace
plugin:@typescript-eslint/recommendedtoplugin:@typescript-eslint/recommended-type-checkedorplugin:@typescript-eslint/strict-type-checked - Optionally add
plugin:@typescript-eslint/stylistic-type-checked - Install eslint-plugin-react and add
plugin:react/recommended&plugin:react/jsx-runtimeto theextendslist