From 95021d13eaed5c77859fe1571937e4aade899a8b Mon Sep 17 00:00:00 2001 From: Andrey Avtomonov Date: Thu, 21 May 2026 02:15:08 +0200 Subject: [PATCH] fix(cli): force pathPrefix="" when targeting the managed embeddings daemon The managed daemon serves /embeddings/compute directly. The default pathPrefix in @ktx/llm is /api, so omitting sentenceTransformers from ktx.yaml produced /api/embeddings/compute -> 404. The resolver now sets pathPrefix='' explicitly when wiring the managed daemon URL, matching what the daemon actually exposes. --- packages/cli/src/embedding-resolution.test.ts | 21 +++++++++++++++++++ packages/cli/src/embedding-resolution.ts | 1 + 2 files changed, 22 insertions(+) diff --git a/packages/cli/src/embedding-resolution.test.ts b/packages/cli/src/embedding-resolution.test.ts index 1a74f3c3..210bd755 100644 --- a/packages/cli/src/embedding-resolution.test.ts +++ b/packages/cli/src/embedding-resolution.test.ts @@ -84,6 +84,27 @@ describe('resolveProjectEmbeddingProvider', () => { expect(ensureManaged).not.toHaveBeenCalled(); }); + it('passes pathPrefix="" to the embedding provider when targeting the managed daemon', async () => { + const project = projectWithConfig(withManagedEmbedding(buildDefaultKtxProjectConfig(), undefined)); + const tryUseManaged = vi.fn(async () => fakeDaemon); + const createKtxEmbeddingProvider = vi.fn(() => ({ id: 'fake' }) as never); + await resolveProjectEmbeddingProvider(project, { + mode: 'use-if-running', + cliVersion: '0.5.0', + io: noopIo, + createKtxEmbeddingProvider, + tryUseManagedDaemon: tryUseManaged, + }); + expect(createKtxEmbeddingProvider).toHaveBeenCalledWith( + expect.objectContaining({ + sentenceTransformers: expect.objectContaining({ + baseURL: fakeDaemon.baseUrl, + pathPrefix: '', + }), + }), + ); + }); + it('returns managed-unavailable when no daemon is running and mode is use-if-running', async () => { const project = projectWithConfig(withManagedEmbedding(buildDefaultKtxProjectConfig(), '')); const tryUseManaged = vi.fn(async () => null); diff --git a/packages/cli/src/embedding-resolution.ts b/packages/cli/src/embedding-resolution.ts index 75b92516..d7bfafae 100644 --- a/packages/cli/src/embedding-resolution.ts +++ b/packages/cli/src/embedding-resolution.ts @@ -99,6 +99,7 @@ function buildManagedProvider( sentenceTransformers: { ...embeddings.sentenceTransformers, base_url: baseUrl, + pathPrefix: '', }, }; const resolved = resolveLocalKtxEmbeddingConfig(merged, process.env);