feat: reserve one qdrant collection per workspace

This commit is contained in:
2026-08-08 17:03:51 +02:00
parent ba1d7b0e78
commit 76bc94d5da
6 changed files with 288 additions and 107 deletions
+10 -13
View File
@@ -11,7 +11,7 @@ import { renderWorkspaceDocs, serializeWorkspaceYaml, type CanonicalWorkspace }
const workspace: CanonicalWorkspace = {
workspace: {
schema_version: 2,
schema_version: 3,
id: "psd-clinical",
name: "Policlinico San Donato",
description: "Clinical analytics workspace",
@@ -25,18 +25,15 @@ const workspace: CanonicalWorkspace = {
},
semantic_index: {
vector_store: {
engine: "pgvector",
database: "warehouse",
schema: "vectors",
collection: "clinical_documents",
dimensions: 768,
engine: "qdrant",
collection: "psd-clinical",
dimensions: 1024,
distance: "cosine",
supported_transports: ["pgvector_direct"],
},
embedding: {
provider: "ollama_compatible",
model: "nomic-embed-text-v2-moe",
dimensions: 768,
provider: "ollama_internal",
model: "qwen3-embedding:0.6b",
dimensions: 1024,
},
},
llm_policy: { allowed: ["zai/glm-5.2"] },
@@ -184,9 +181,9 @@ test("validates a canonical workspace and runs the injected installation diagnos
expect(validate.statusCode).toBe(200);
expect(validate.json()).toMatchObject({ workspace });
expect(testResult.statusCode).toBe(200);
expect(testResult.json()).toMatchObject({ activatable: false, diagnostics: [{ code: "binding_missing" }] });
expect(diagnose).toHaveBeenCalledWith(workspace, expect.any(Object), { writeProbe: false });
expect(testResult.statusCode).toBe(400);
expect(testResult.json()).toMatchObject({ code: "workspace_invalid" });
expect(diagnose).not.toHaveBeenCalled();
});
test("returns a 409 field conflict instead of overwriting a changed workspace", async () => {