- openai provider: use .chat() (Chat Completions) instead of the default callable (Responses API), which gateways reject on multi-turn -> 400. - updateAiProviderSettings: assemble settings.ai.provider via jsonb_build_object with ::text-cast bound params + jsonb_typeof self-heal (postgres.js was double-encoding it into an array; the ::text cast avoids 'could not determine data type of parameter'). - chat agent: drop the hard maxOutputTokens cap (truncated complex tool calls); keep a tiny cap only on the test-connection ping. - testConnection + chat stream: surface the real provider error (statusCode+message) to logs and the UI instead of generic masks; never log the API key. - chat UI: typing indicator, incremental streaming render, tool 'running' status, Stop. Also bundled (prior uncommitted ai-chat work): - history 'AI agent' provenance badge; vector RAG (pgvector image + page_embeddings + AI_QUEUE indexer + space-scoped semanticSearch); external MCP servers backend (@ai-sdk/mcp client, SSRF IP-pinning, encrypted headers, admin CRUD/Test); yjs duplicate-instance fix via pnpm patch (single CJS instance server-side).
14 lines
493 B
TypeScript
14 lines
493 B
TypeScript
import { ServiceUnavailableException } from '@nestjs/common';
|
|
|
|
/**
|
|
* Thrown when no usable embedding config exists for the workspace (missing
|
|
* driver / embedding model / API key). Distinct from the chat variant so RAG
|
|
* callers (indexer / semanticSearch) can 503 or skip independently of chat
|
|
* being configured (§6.2/§6.7).
|
|
*/
|
|
export class AiEmbeddingNotConfiguredException extends ServiceUnavailableException {
|
|
constructor() {
|
|
super('AI embedding model not configured');
|
|
}
|
|
}
|