@squadrules/mcp 5.0.0-beta.1 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +23 -20
- package/dist/.tsbuildinfo +1 -1
- package/dist/config/embedding-fastembed.d.ts +9 -0
- package/dist/config/embedding-fastembed.d.ts.map +1 -0
- package/dist/config/embedding-fastembed.js +20 -0
- package/dist/config/embedding-fastembed.js.map +1 -0
- package/dist/config.d.ts +8 -4
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +10 -4
- package/dist/config.js.map +1 -1
- package/dist/embed-docs/mem/adapter-migration.md +1 -1
- package/dist/embed-docs/mem/bulk-insert-adapters-via-cli.md +1 -1
- package/dist/embed-docs/mem/challenge-type-guide.md +1 -1
- package/dist/embed-docs/mem/create-new-protocol.md +1 -1
- package/dist/embed-docs/mem/phase-critic-guide.md +1 -1
- package/dist/embed-docs/mem/phase-critic.md +1 -1
- package/dist/embed-docs/mem/protocol-linking-guide.md +1 -1
- package/dist/embed-docs/mem/refine-search.md +1 -1
- package/dist/embed-docs/mem/skill-format-guide.md +1 -1
- package/dist/http/http-api-snapshot.d.ts.map +1 -1
- package/dist/http/http-api-snapshot.js +13 -1
- package/dist/http/http-api-snapshot.js.map +1 -1
- package/dist/http/http-health-routes.d.ts.map +1 -1
- package/dist/http/http-health-routes.js +6 -3
- package/dist/http/http-health-routes.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -5
- package/dist/index.js.map +1 -1
- package/dist/resources/embedded-mcp-resources.js +9 -9
- package/dist/resources/embedded-mcp-resources.js.map +1 -1
- package/dist/resources/mem-resources-boot.d.ts.map +1 -1
- package/dist/resources/mem-resources-boot.js +2 -28
- package/dist/resources/mem-resources-boot.js.map +1 -1
- package/dist/resources/mem-uuid-mapper.d.ts.map +1 -1
- package/dist/resources/mem-uuid-mapper.js +8 -23
- package/dist/resources/mem-uuid-mapper.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +9 -7
- package/dist/server.js.map +1 -1
- package/dist/services/embedding/fastembed-provider.d.ts +2 -0
- package/dist/services/embedding/fastembed-provider.d.ts.map +1 -0
- package/dist/services/embedding/fastembed-provider.js +78 -0
- package/dist/services/embedding/fastembed-provider.js.map +1 -0
- package/dist/services/embedding/health.d.ts.map +1 -1
- package/dist/services/embedding/health.js +99 -96
- package/dist/services/embedding/health.js.map +1 -1
- package/dist/services/embedding/provider-audit.d.ts +15 -0
- package/dist/services/embedding/provider-audit.d.ts.map +1 -0
- package/dist/services/embedding/provider-audit.js +28 -0
- package/dist/services/embedding/provider-audit.js.map +1 -0
- package/dist/services/embedding/providers.d.ts +2 -1
- package/dist/services/embedding/providers.d.ts.map +1 -1
- package/dist/services/embedding/providers.js +21 -23
- package/dist/services/embedding/providers.js.map +1 -1
- package/dist/services/embedding/service.d.ts +2 -2
- package/dist/services/embedding/service.d.ts.map +1 -1
- package/dist/services/embedding/service.js +13 -16
- package/dist/services/embedding/service.js.map +1 -1
- package/dist/services/execution-trace-store.d.ts +5 -29
- package/dist/services/execution-trace-store.d.ts.map +1 -1
- package/dist/services/execution-trace-store.js +10 -2
- package/dist/services/execution-trace-store.js.map +1 -1
- package/dist/services/memory/store.d.ts +23 -0
- package/dist/services/memory/store.d.ts.map +1 -1
- package/dist/services/memory/store.js +110 -3
- package/dist/services/memory/store.js.map +1 -1
- package/dist/services/memory-store.d.ts +5 -0
- package/dist/services/memory-store.d.ts.map +1 -1
- package/dist/services/memory-store.js +5 -0
- package/dist/services/memory-store.js.map +1 -1
- package/dist/services/qdrant/service.d.ts.map +1 -1
- package/dist/services/qdrant/service.js +11 -2
- package/dist/services/qdrant/service.js.map +1 -1
- package/dist/services/vector-store/IExecutionTraceStore.d.ts +25 -0
- package/dist/services/vector-store/IExecutionTraceStore.d.ts.map +1 -0
- package/dist/services/vector-store/IExecutionTraceStore.js +2 -0
- package/dist/services/vector-store/IExecutionTraceStore.js.map +1 -0
- package/dist/services/vector-store/IVectorRecordStore.d.ts +58 -0
- package/dist/services/vector-store/IVectorRecordStore.d.ts.map +1 -0
- package/dist/services/vector-store/IVectorRecordStore.js +2 -0
- package/dist/services/vector-store/IVectorRecordStore.js.map +1 -0
- package/dist/services/vector-store/commit-retry.d.ts +21 -0
- package/dist/services/vector-store/commit-retry.d.ts.map +1 -0
- package/dist/services/vector-store/commit-retry.js +58 -0
- package/dist/services/vector-store/commit-retry.js.map +1 -0
- package/dist/services/vector-store/embedded-store-singleton.d.ts +12 -0
- package/dist/services/vector-store/embedded-store-singleton.d.ts.map +1 -0
- package/dist/services/vector-store/embedded-store-singleton.js +17 -0
- package/dist/services/vector-store/embedded-store-singleton.js.map +1 -0
- package/dist/services/vector-store/lancedb/LanceExecutionTraceStore.d.ts +28 -0
- package/dist/services/vector-store/lancedb/LanceExecutionTraceStore.d.ts.map +1 -0
- package/dist/services/vector-store/lancedb/LanceExecutionTraceStore.js +222 -0
- package/dist/services/vector-store/lancedb/LanceExecutionTraceStore.js.map +1 -0
- package/dist/services/vector-store/lancedb/LanceVectorRecordStore.d.ts +77 -0
- package/dist/services/vector-store/lancedb/LanceVectorRecordStore.d.ts.map +1 -0
- package/dist/services/vector-store/lancedb/LanceVectorRecordStore.js +136 -0
- package/dist/services/vector-store/lancedb/LanceVectorRecordStore.js.map +1 -0
- package/dist/services/vector-store/lancedb/lance-records-engine.d.ts +41 -0
- package/dist/services/vector-store/lancedb/lance-records-engine.d.ts.map +1 -0
- package/dist/services/vector-store/lancedb/lance-records-engine.js +102 -0
- package/dist/services/vector-store/lancedb/lance-records-engine.js.map +1 -0
- package/dist/services/vector-store/lancedb/lance-records-mutations.d.ts +22 -0
- package/dist/services/vector-store/lancedb/lance-records-mutations.d.ts.map +1 -0
- package/dist/services/vector-store/lancedb/lance-records-mutations.js +211 -0
- package/dist/services/vector-store/lancedb/lance-records-mutations.js.map +1 -0
- package/dist/services/vector-store/lancedb/lance-records-reads.d.ts +64 -0
- package/dist/services/vector-store/lancedb/lance-records-reads.d.ts.map +1 -0
- package/dist/services/vector-store/lancedb/lance-records-reads.js +237 -0
- package/dist/services/vector-store/lancedb/lance-records-reads.js.map +1 -0
- package/dist/services/vector-store/lancedb/lance-records-schema.d.ts +48 -0
- package/dist/services/vector-store/lancedb/lance-records-schema.d.ts.map +1 -0
- package/dist/services/vector-store/lancedb/lance-records-schema.js +159 -0
- package/dist/services/vector-store/lancedb/lance-records-schema.js.map +1 -0
- package/dist/services/vector-store/lancedb/lance-records-search.d.ts +30 -0
- package/dist/services/vector-store/lancedb/lance-records-search.d.ts.map +1 -0
- package/dist/services/vector-store/lancedb/lance-records-search.js +112 -0
- package/dist/services/vector-store/lancedb/lance-records-search.js.map +1 -0
- package/dist/services/vector-store/lancedb/lance-records-write-artifact.d.ts +11 -0
- package/dist/services/vector-store/lancedb/lance-records-write-artifact.d.ts.map +1 -0
- package/dist/services/vector-store/lancedb/lance-records-write-artifact.js +121 -0
- package/dist/services/vector-store/lancedb/lance-records-write-artifact.js.map +1 -0
- package/dist/services/vector-store/lancedb/lance-records-write-helpers.d.ts +52 -0
- package/dist/services/vector-store/lancedb/lance-records-write-helpers.d.ts.map +1 -0
- package/dist/services/vector-store/lancedb/lance-records-write-helpers.js +216 -0
- package/dist/services/vector-store/lancedb/lance-records-write-helpers.js.map +1 -0
- package/dist/services/vector-store/lancedb/lance-records-writes.d.ts +21 -0
- package/dist/services/vector-store/lancedb/lance-records-writes.d.ts.map +1 -0
- package/dist/services/vector-store/lancedb/lance-records-writes.js +294 -0
- package/dist/services/vector-store/lancedb/lance-records-writes.js.map +1 -0
- package/dist/services/vector-store/lancedb-connection.d.ts +12 -0
- package/dist/services/vector-store/lancedb-connection.d.ts.map +1 -0
- package/dist/services/vector-store/lancedb-connection.js +28 -0
- package/dist/services/vector-store/lancedb-connection.js.map +1 -0
- package/dist/services/vector-store/types.d.ts +85 -0
- package/dist/services/vector-store/types.d.ts.map +1 -0
- package/dist/services/vector-store/types.js +2 -0
- package/dist/services/vector-store/types.js.map +1 -0
- package/dist/tools/artifact-catalog.d.ts.map +1 -1
- package/dist/tools/artifact-catalog.js +6 -33
- package/dist/tools/artifact-catalog.js.map +1 -1
- package/dist/tools/search.d.ts.map +1 -1
- package/dist/tools/search.js +6 -20
- package/dist/tools/search.js.map +1 -1
- package/dist/tools/search_schema.d.ts +1 -1
- package/dist/tools/skill-export/enumerate-space-adapters.d.ts +1 -1
- package/dist/tools/skill-export/enumerate-space-adapters.d.ts.map +1 -1
- package/dist/tools/skill-export/enumerate-space-adapters.js +11 -27
- package/dist/tools/skill-export/enumerate-space-adapters.js.map +1 -1
- package/dist/tools/spaces.d.ts.map +1 -1
- package/dist/tools/spaces.js +2 -15
- package/dist/tools/spaces.js.map +1 -1
- package/dist/ui/assets/{AccountPage-B0ali9jz.js → AccountPage-BJm56sur.js} +1 -1
- package/dist/ui/assets/{ProtocolEditPage-DIySo-F_.js → ProtocolEditPage-mChBe3JY.js} +1 -1
- package/dist/ui/assets/{RichTextEditor-uun0UIVc.js → RichTextEditor-Bj6JxHM5.js} +1 -1
- package/dist/ui/assets/{SkillBundlePage-DtOlpupj.js → SkillBundlePage-D1OPKJzA.js} +1 -1
- package/dist/ui/assets/{index-BlCipoHI.js → index-PouLvU1c.js} +2 -2
- package/dist/ui/index.html +1 -1
- package/dist/utils/squadrules-user-dirs.d.ts +10 -0
- package/dist/utils/squadrules-user-dirs.d.ts.map +1 -1
- package/dist/utils/squadrules-user-dirs.js +12 -0
- package/dist/utils/squadrules-user-dirs.js.map +1 -1
- package/package.json +18 -11
package/dist/server.js
CHANGED
|
@@ -6,7 +6,7 @@ import { registerPromptResources } from './resources/prompt-resources.js';
|
|
|
6
6
|
import { bootstrapEmptyResourceHandlers } from './resources/resource-bootstrap.js';
|
|
7
7
|
import { qdrantService } from './services/qdrant/index.js';
|
|
8
8
|
import { getBuildVersion } from './utils/build-version.js';
|
|
9
|
-
import { LOG_LEVEL, LOG_FORMAT, TRANSPORT_TYPE, getQdrantUrl, getQdrantCollection, QDRANT_API_KEY, QDRANT_RESCORE_STRING, TEI_BASE_URL, TEI_MODEL, SQUADRULES_SEARCH_OVERFETCH_FACTOR, SQUADRULES_SEARCH_MAX_FETCH, SQUADRULES_ENABLE_GROUP_COLLAPSE } from './config.js';
|
|
9
|
+
import { LOG_LEVEL, LOG_FORMAT, TRANSPORT_TYPE, isQdrantConfigured, getQdrantUrl, getQdrantCollection, QDRANT_API_KEY, QDRANT_RESCORE_STRING, TEI_BASE_URL, TEI_MODEL, SQUADRULES_SEARCH_OVERFETCH_FACTOR, SQUADRULES_SEARCH_MAX_FETCH, SQUADRULES_ENABLE_GROUP_COLLAPSE } from './config.js';
|
|
10
10
|
import { getEmbeddingDimension } from './services/embedding/config.js';
|
|
11
11
|
// removed: debug tools (kb_version, kb_cache_stats)
|
|
12
12
|
import { registerDeleteTool } from './tools/delete.js';
|
|
@@ -78,12 +78,14 @@ export function createServer(memoryStore) {
|
|
|
78
78
|
transport: {
|
|
79
79
|
type: TRANSPORT_TYPE,
|
|
80
80
|
},
|
|
81
|
-
qdrant:
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
81
|
+
qdrant: isQdrantConfigured
|
|
82
|
+
? {
|
|
83
|
+
url: getQdrantUrl(),
|
|
84
|
+
collection: getQdrantCollection(),
|
|
85
|
+
apiKey: mask(QDRANT_API_KEY),
|
|
86
|
+
rescore: QDRANT_RESCORE_STRING,
|
|
87
|
+
}
|
|
88
|
+
: { backend: 'embedded-lancedb' },
|
|
87
89
|
tei: {
|
|
88
90
|
url: TEI_BASE_URL,
|
|
89
91
|
model: TEI_MODEL,
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,8BAA8B,EAAE,MAAM,mCAAmC,CAAC;AAEnF,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAAE,qBAAqB,EAAE,YAAY,EAAE,SAAS,EAAE,kCAAkC,EAAE,2BAA2B,EAAE,gCAAgC,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fastembed-provider.d.ts","sourceRoot":"","sources":["../../../src/services/embedding/fastembed-provider.ts"],"names":[],"mappings":"AAuCA,wBAAsB,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAwC3F"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local fastembed embedding provider (issue #11) — the zero-dependency default.
|
|
3
|
+
*
|
|
4
|
+
* Produces embeddings in-process via ONNX (no API key, no inference service), so
|
|
5
|
+
* simple mode and `npx @squadrules/mcp serve` run fully self-contained. Model
|
|
6
|
+
* weights are fetched on first use by fastembed's own downloader into
|
|
7
|
+
* FASTEMBED_CACHE_DIR (a shared per-user dir). The SDK is imported lazily so the
|
|
8
|
+
* ONNX/tokenizers native bindings load only when fastembed is actually selected
|
|
9
|
+
* (mirroring the embedded LanceDB precedent).
|
|
10
|
+
*/
|
|
11
|
+
import { logger } from '../../utils/structured-logger.js';
|
|
12
|
+
import { FASTEMBED_MODEL, FASTEMBED_CACHE_DIR } from '../../config.js';
|
|
13
|
+
import { setResolvedEmbeddingDimension } from './config.js';
|
|
14
|
+
import { auditProviderCall } from './provider-audit.js';
|
|
15
|
+
let fastEmbedModelPromise = null;
|
|
16
|
+
/**
|
|
17
|
+
* Initialise fastembed once, downloading the model on first use into
|
|
18
|
+
* FASTEMBED_CACHE_DIR. A failed init clears the memo so a transient first-run
|
|
19
|
+
* error (e.g. a network hiccup during download) can be retried on the next call.
|
|
20
|
+
*/
|
|
21
|
+
async function getFastEmbedModel() {
|
|
22
|
+
if (fastEmbedModelPromise)
|
|
23
|
+
return fastEmbedModelPromise;
|
|
24
|
+
fastEmbedModelPromise = (async () => {
|
|
25
|
+
const fastembed = await import('fastembed');
|
|
26
|
+
return await fastembed.FlagEmbedding.init({
|
|
27
|
+
model: FASTEMBED_MODEL,
|
|
28
|
+
cacheDir: FASTEMBED_CACHE_DIR,
|
|
29
|
+
});
|
|
30
|
+
})().catch((err) => {
|
|
31
|
+
fastEmbedModelPromise = null;
|
|
32
|
+
throw err;
|
|
33
|
+
});
|
|
34
|
+
return fastEmbedModelPromise;
|
|
35
|
+
}
|
|
36
|
+
export async function postEmbeddingsFastEmbed(input) {
|
|
37
|
+
const inputArray = Array.isArray(input) ? input : [input];
|
|
38
|
+
const inputCharLength = inputArray.reduce((sum, value) => sum + value.length, 0);
|
|
39
|
+
const startedAt = Date.now();
|
|
40
|
+
try {
|
|
41
|
+
const model = await getFastEmbedModel();
|
|
42
|
+
const embeddings = [];
|
|
43
|
+
for await (const batch of model.embed(inputArray)) {
|
|
44
|
+
embeddings.push(...batch);
|
|
45
|
+
}
|
|
46
|
+
if (embeddings.length === 0 || !Array.isArray(embeddings[0])) {
|
|
47
|
+
throw new Error('fastembed returned no embeddings');
|
|
48
|
+
}
|
|
49
|
+
const dim = embeddings[0].length;
|
|
50
|
+
setResolvedEmbeddingDimension(dim);
|
|
51
|
+
auditProviderCall({
|
|
52
|
+
provider: 'fastembed',
|
|
53
|
+
model: FASTEMBED_MODEL,
|
|
54
|
+
status: 'success',
|
|
55
|
+
inputCount: inputArray.length,
|
|
56
|
+
inputCharLength,
|
|
57
|
+
outputDimension: dim,
|
|
58
|
+
latencyMs: Date.now() - startedAt
|
|
59
|
+
});
|
|
60
|
+
logger.debug(`[EmbeddingService] Received ${embeddings.length} embeddings (dim=${dim}) [provider=fastembed]`);
|
|
61
|
+
return embeddings;
|
|
62
|
+
}
|
|
63
|
+
catch (err) {
|
|
64
|
+
const errMsg = err instanceof Error ? err.message : String(err);
|
|
65
|
+
auditProviderCall({
|
|
66
|
+
provider: 'fastembed',
|
|
67
|
+
model: FASTEMBED_MODEL,
|
|
68
|
+
status: 'error',
|
|
69
|
+
inputCount: inputArray.length,
|
|
70
|
+
inputCharLength,
|
|
71
|
+
outputDimension: 0,
|
|
72
|
+
latencyMs: Date.now() - startedAt,
|
|
73
|
+
errorMessage: errMsg
|
|
74
|
+
});
|
|
75
|
+
throw err;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=fastembed-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fastembed-provider.js","sourceRoot":"","sources":["../../../src/services/embedding/fastembed-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../../src/services/embedding/health.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../../src/services/embedding/health.ts"],"names":[],"mappings":"AAuFA,wBAAsB,uBAAuB,IAAI,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CA6B9F"}
|
|
@@ -1,108 +1,111 @@
|
|
|
1
1
|
import { logger } from '../../utils/structured-logger.js';
|
|
2
2
|
import { EMBEDDING_PROVIDER, OPENAI_API_KEY, TEI_BASE_URL, TEI_MODEL, TEI_API_KEY } from '../../config.js';
|
|
3
3
|
import { OPENAI_EMBEDDING_MODEL, TEI_EMBEDDING_ENDPOINT, setResolvedEmbeddingDimension } from './config.js';
|
|
4
|
-
import { postEmbeddingsOpenAI,
|
|
5
|
-
|
|
4
|
+
import { postEmbeddingsOpenAI, postEmbeddingsFastEmbed } from './providers.js';
|
|
5
|
+
async function openaiHealth() {
|
|
6
|
+
if (!OPENAI_API_KEY || !OPENAI_EMBEDDING_MODEL) {
|
|
7
|
+
return { healthy: false, message: 'OpenAI requires OPENAI_API_KEY and OPENAI_EMBEDDING_MODEL' };
|
|
8
|
+
}
|
|
6
9
|
try {
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
10
|
+
const res = await postEmbeddingsOpenAI('health check');
|
|
11
|
+
return { healthy: Array.isArray(res) && res.length > 0, message: 'openai embeddings operational' };
|
|
12
|
+
}
|
|
13
|
+
catch (err) {
|
|
14
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
15
|
+
if (msg.includes('429'))
|
|
16
|
+
return { healthy: true, message: 'openai is rate-limited (429) - reachable but throttled' };
|
|
17
|
+
if (msg.includes('401') || msg.toLowerCase().includes('authentication'))
|
|
18
|
+
return { healthy: false, message: 'openai authentication failed - check OPENAI_API_KEY' };
|
|
19
|
+
return { healthy: false, message: `openai health check failed: ${msg}` };
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
async function teiHealth() {
|
|
23
|
+
if (!TEI_BASE_URL || !TEI_MODEL) {
|
|
24
|
+
return { healthy: false, message: 'TEI requires TEI_BASE_URL and TEI_MODEL' };
|
|
25
|
+
}
|
|
26
|
+
try {
|
|
27
|
+
const url = TEI_EMBEDDING_ENDPOINT || TEI_BASE_URL;
|
|
28
|
+
const payload = { model: TEI_MODEL, input: ['health check'] };
|
|
29
|
+
const headers = { 'Content-Type': 'application/json' };
|
|
30
|
+
if (TEI_API_KEY)
|
|
31
|
+
headers['x-api-key'] = TEI_API_KEY;
|
|
32
|
+
const resp = await fetch(url, { method: 'POST', headers, body: JSON.stringify(payload) });
|
|
33
|
+
let data = null;
|
|
34
|
+
try {
|
|
35
|
+
data = await resp.json();
|
|
24
36
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
return { healthy: false, message: 'TEI requires TEI_BASE_URL and TEI_MODEL' };
|
|
28
|
-
}
|
|
29
|
-
try {
|
|
30
|
-
const res = await postEmbeddingsTEI('health check');
|
|
31
|
-
return { healthy: Array.isArray(res) && res.length > 0, message: 'TEI embeddings operational' };
|
|
32
|
-
}
|
|
33
|
-
catch (err) {
|
|
34
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
35
|
-
if (msg.includes('401'))
|
|
36
|
-
return { healthy: false, message: 'TEI authentication failed (401)' };
|
|
37
|
-
if (msg.includes('429'))
|
|
38
|
-
return { healthy: true, message: 'TEI is rate-limited (429) - reachable but throttled' };
|
|
39
|
-
return { healthy: false, message: `TEI health check failed: ${msg}` };
|
|
40
|
-
}
|
|
37
|
+
catch (parseErr) {
|
|
38
|
+
logger.warn(`[EmbeddingService] TEI returned non-JSON response: ${String(parseErr)}`);
|
|
41
39
|
}
|
|
42
|
-
if (
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
49
|
-
logger.warn(`[EmbeddingService] OpenAI health check failed, trying TEI fallback: ${msg}`);
|
|
50
|
-
}
|
|
40
|
+
if (!resp.ok) {
|
|
41
|
+
if (resp.status === 401)
|
|
42
|
+
return { healthy: false, message: 'TEI authentication failed (401)' };
|
|
43
|
+
if (resp.status === 429)
|
|
44
|
+
return { healthy: true, message: 'TEI is rate-limited (429) - reachable but throttled' };
|
|
45
|
+
return { healthy: false, message: `TEI returned HTTP ${resp.status}` };
|
|
51
46
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
return
|
|
47
|
+
let embeddings = null;
|
|
48
|
+
if (Array.isArray(data?.embeddings)) {
|
|
49
|
+
embeddings = data.embeddings;
|
|
50
|
+
}
|
|
51
|
+
else if (Array.isArray(data?.data)) {
|
|
52
|
+
embeddings = data.data.map((d) => d?.embedding ?? d);
|
|
53
|
+
}
|
|
54
|
+
else if (Array.isArray(data?.result)) {
|
|
55
|
+
embeddings = data.result;
|
|
56
|
+
}
|
|
57
|
+
else if (Array.isArray(data)) {
|
|
58
|
+
embeddings = data;
|
|
59
|
+
}
|
|
60
|
+
if (Array.isArray(embeddings) && embeddings.length > 0 && Array.isArray(embeddings[0])) {
|
|
61
|
+
setResolvedEmbeddingDimension(embeddings[0].length);
|
|
62
|
+
return { healthy: true, message: 'TEI embeddings operational' };
|
|
63
|
+
}
|
|
64
|
+
return { healthy: false, message: 'TEI returned unexpected embedding shape or no embeddings' };
|
|
65
|
+
}
|
|
66
|
+
catch (err) {
|
|
67
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
68
|
+
return { healthy: false, message: `TEI health check error: ${msg}` };
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
async function fastEmbedHealth() {
|
|
72
|
+
try {
|
|
73
|
+
const res = await postEmbeddingsFastEmbed('health check');
|
|
74
|
+
return { healthy: Array.isArray(res) && res.length > 0, message: 'local fastembed operational' };
|
|
75
|
+
}
|
|
76
|
+
catch (err) {
|
|
77
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
78
|
+
return { healthy: false, message: `fastembed health check failed: ${msg}` };
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
export async function runEmbeddingHealthCheck() {
|
|
82
|
+
try {
|
|
83
|
+
const providerPref = EMBEDDING_PROVIDER;
|
|
84
|
+
// Explicit preference wins, mirroring postEmbeddings() selection.
|
|
85
|
+
if (providerPref === 'openai')
|
|
86
|
+
return await openaiHealth();
|
|
87
|
+
if (providerPref === 'tei')
|
|
88
|
+
return await teiHealth();
|
|
89
|
+
if (providerPref === 'fastembed')
|
|
90
|
+
return await fastEmbedHealth();
|
|
91
|
+
// Auto: prefer configured external providers; a configured-but-failing OpenAI
|
|
92
|
+
// is reported as-is (never masked by the fastembed fallback) to stay consistent
|
|
93
|
+
// with the runtime path, which does not silently fall back once OpenAI is set.
|
|
94
|
+
if (OPENAI_API_KEY && OPENAI_EMBEDDING_MODEL) {
|
|
95
|
+
const result = await openaiHealth();
|
|
96
|
+
if (result.healthy)
|
|
97
|
+
return result;
|
|
98
|
+
if (TEI_BASE_URL && TEI_MODEL) {
|
|
99
|
+
const tei = await teiHealth();
|
|
100
|
+
if (tei.healthy)
|
|
101
|
+
return tei;
|
|
103
102
|
}
|
|
103
|
+
return result;
|
|
104
104
|
}
|
|
105
|
-
|
|
105
|
+
if (TEI_BASE_URL && TEI_MODEL)
|
|
106
|
+
return await teiHealth();
|
|
107
|
+
// No external provider configured -> local fastembed is the default.
|
|
108
|
+
return await fastEmbedHealth();
|
|
106
109
|
}
|
|
107
110
|
catch (err) {
|
|
108
111
|
const msg = err instanceof Error ? err.message : String(err);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../../src/services/embedding/health.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;AAC1D,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,YAAY,EACZ,SAAS,EACT,WAAW,EACZ,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,6BAA6B,EAC9B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,oBAAoB,EAAE,
|
|
1
|
+
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../../src/services/embedding/health.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;AAC1D,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,YAAY,EACZ,SAAS,EACT,WAAW,EACZ,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,6BAA6B,EAC9B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAE/E,KAAK,UAAU,YAAY;IACzB,IAAI,CAAC,cAAc,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC/C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,2DAA2D,EAAE,CAAC;IAClG,CAAC;IACD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,oBAAoB,CAAC,cAAc,CAAC,CAAC;QACvD,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,OAAO,EAAE,+BAA+B,EAAE,CAAC;IACrG,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,wDAAwD,EAAE,CAAC;QACrH,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,qDAAqD,EAAE,CAAC;QACnK,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,+BAA+B,GAAG,EAAE,EAAE,CAAC;IAC3E,CAAC;AACH,CAAC;AAED,KAAK,UAAU,SAAS;IACtB,IAAI,CAAC,YAAY,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,yCAAyC,EAAE,CAAC;IAChF,CAAC;IACD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,sBAAsB,IAAI,YAAY,CAAC;QACnD,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC;QAC9D,MAAM,OAAO,GAA2B,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC;QAC/E,IAAI,WAAW;YAAE,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,CAAC;QAEpD,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAE1F,IAAI,IAAI,GAAQ,IAAI,CAAC;QACrB,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC3B,CAAC;QAAC,OAAO,QAAQ,EAAE,CAAC;YAClB,MAAM,CAAC,IAAI,CAAC,sDAAsD,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACxF,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,IAAI,IAAI,CAAC,MAAM,KAAK,GAAG;gBAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,iCAAiC,EAAE,CAAC;YAC/F,IAAI,IAAI,CAAC,MAAM,KAAK,GAAG;gBAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,qDAAqD,EAAE,CAAC;YAClH,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,qBAAqB,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;QACzE,CAAC;QAED,IAAI,UAAU,GAAQ,IAAI,CAAC;QAC3B,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC;YACpC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAC/B,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;YACrC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,IAAI,CAAC,CAAC,CAAC;QAC5D,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;YACvC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,UAAU,GAAG,IAAI,CAAC;QACpB,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACvF,6BAA6B,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACpD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,4BAA4B,EAAE,CAAC;QAClE,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,0DAA0D,EAAE,CAAC;IACjG,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,2BAA2B,GAAG,EAAE,EAAE,CAAC;IACvE,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe;IAC5B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,uBAAuB,CAAC,cAAc,CAAC,CAAC;QAC1D,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,OAAO,EAAE,6BAA6B,EAAE,CAAC;IACnG,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,kCAAkC,GAAG,EAAE,EAAE,CAAC;IAC9E,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB;IAC3C,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,kBAAkB,CAAC;QAExC,kEAAkE;QAClE,IAAI,YAAY,KAAK,QAAQ;YAAE,OAAO,MAAM,YAAY,EAAE,CAAC;QAC3D,IAAI,YAAY,KAAK,KAAK;YAAE,OAAO,MAAM,SAAS,EAAE,CAAC;QACrD,IAAI,YAAY,KAAK,WAAW;YAAE,OAAO,MAAM,eAAe,EAAE,CAAC;QAEjE,8EAA8E;QAC9E,gFAAgF;QAChF,+EAA+E;QAC/E,IAAI,cAAc,IAAI,sBAAsB,EAAE,CAAC;YAC7C,MAAM,MAAM,GAAG,MAAM,YAAY,EAAE,CAAC;YACpC,IAAI,MAAM,CAAC,OAAO;gBAAE,OAAO,MAAM,CAAC;YAClC,IAAI,YAAY,IAAI,SAAS,EAAE,CAAC;gBAC9B,MAAM,GAAG,GAAG,MAAM,SAAS,EAAE,CAAC;gBAC9B,IAAI,GAAG,CAAC,OAAO;oBAAE,OAAO,GAAG,CAAC;YAC9B,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,IAAI,YAAY,IAAI,SAAS;YAAE,OAAO,MAAM,SAAS,EAAE,CAAC;QAExD,qEAAqE;QACrE,OAAO,MAAM,eAAe,EAAE,CAAC;IACjC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,iCAAiC,GAAG,EAAE,EAAE,CAAC;IAC7E,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export type EmbeddingProviderName = 'openai' | 'tei' | 'fastembed';
|
|
2
|
+
export type AuditPayload = {
|
|
3
|
+
provider: EmbeddingProviderName;
|
|
4
|
+
model: string;
|
|
5
|
+
status: 'success' | 'error';
|
|
6
|
+
inputCount: number;
|
|
7
|
+
inputCharLength: number;
|
|
8
|
+
outputDimension: number;
|
|
9
|
+
latencyMs: number;
|
|
10
|
+
httpStatus?: number;
|
|
11
|
+
errorMessage?: string;
|
|
12
|
+
};
|
|
13
|
+
/** Emit one structured audit line describing a single embedding provider call. */
|
|
14
|
+
export declare function auditProviderCall(payload: AuditPayload): void;
|
|
15
|
+
//# sourceMappingURL=provider-audit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-audit.d.ts","sourceRoot":"","sources":["../../../src/services/embedding/provider-audit.ts"],"names":[],"mappings":"AAUA,MAAM,MAAM,qBAAqB,GAAG,QAAQ,GAAG,KAAK,GAAG,WAAW,CAAC;AAEnE,MAAM,MAAM,YAAY,GAAG;IACvB,QAAQ,EAAE,qBAAqB,CAAC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,kFAAkF;AAClF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAgB7D"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structured audit logging shared by every embedding provider backend.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from `providers.ts` so the HTTP (OpenAI/TEI) and local (fastembed)
|
|
5
|
+
* providers can emit an identical `audit.embedding` record without a circular
|
|
6
|
+
* import, and to keep each provider file under the ESLint max-lines budget.
|
|
7
|
+
*/
|
|
8
|
+
import { structuredLogger } from '../../utils/structured-logger.js';
|
|
9
|
+
import { getRequestIdFromStorage, getTenantId } from '../../utils/tenant-context.js';
|
|
10
|
+
/** Emit one structured audit line describing a single embedding provider call. */
|
|
11
|
+
export function auditProviderCall(payload) {
|
|
12
|
+
structuredLogger.info({
|
|
13
|
+
category: 'audit.embedding',
|
|
14
|
+
stage: 'provider',
|
|
15
|
+
provider: payload.provider,
|
|
16
|
+
model: payload.model,
|
|
17
|
+
tenant_id: getTenantId(),
|
|
18
|
+
request_id: getRequestIdFromStorage(),
|
|
19
|
+
status: payload.status,
|
|
20
|
+
input_count: payload.inputCount,
|
|
21
|
+
input_char_length: payload.inputCharLength,
|
|
22
|
+
output_dimension: payload.outputDimension,
|
|
23
|
+
latency_ms: payload.latencyMs,
|
|
24
|
+
...(payload.httpStatus !== undefined && { http_status: payload.httpStatus }),
|
|
25
|
+
...(payload.errorMessage && { error_message: payload.errorMessage })
|
|
26
|
+
}, `Embedding provider ${payload.provider} ${payload.status}`);
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=provider-audit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-audit.js","sourceRoot":"","sources":["../../../src/services/embedding/provider-audit.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAgBrF,kFAAkF;AAClF,MAAM,UAAU,iBAAiB,CAAC,OAAqB;IACnD,gBAAgB,CAAC,IAAI,CAAC;QAClB,QAAQ,EAAE,iBAAiB;QAC3B,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,SAAS,EAAE,WAAW,EAAE;QACxB,UAAU,EAAE,uBAAuB,EAAE;QACrC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,WAAW,EAAE,OAAO,CAAC,UAAU;QAC/B,iBAAiB,EAAE,OAAO,CAAC,eAAe;QAC1C,gBAAgB,EAAE,OAAO,CAAC,eAAe;QACzC,UAAU,EAAE,OAAO,CAAC,SAAS;QAC7B,GAAG,CAAC,OAAO,CAAC,UAAU,KAAK,SAAS,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC;QAC5E,GAAG,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,aAAa,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC;KACvE,EAAE,sBAAsB,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;AACnE,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { postEmbeddingsFastEmbed } from './fastembed-provider.js';
|
|
1
2
|
/** Typed error for provider rate limiting (429 exhausted or insufficient_quota). */
|
|
2
3
|
export declare class EmbeddingRateLimitError extends Error {
|
|
3
4
|
readonly provider: 'openai' | 'tei';
|
|
@@ -20,5 +21,5 @@ export declare function computeDeadline(): number;
|
|
|
20
21
|
declare function postEmbeddingsOpenAI(input: string[] | string): Promise<number[][]>;
|
|
21
22
|
declare function postEmbeddingsTEI(input: string[] | string): Promise<number[][]>;
|
|
22
23
|
declare function postEmbeddings(input: string[] | string): Promise<number[][]>;
|
|
23
|
-
export { postEmbeddings, postEmbeddingsOpenAI, postEmbeddingsTEI };
|
|
24
|
+
export { postEmbeddings, postEmbeddingsOpenAI, postEmbeddingsTEI, postEmbeddingsFastEmbed };
|
|
24
25
|
//# sourceMappingURL=providers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../../src/services/embedding/providers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../../src/services/embedding/providers.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAWlE,oFAAoF;AACpF,qBAAa,uBAAwB,SAAQ,KAAK;IAC9C,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,KAAK,CAAC;IACpC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;gBACtB,QAAQ,EAAE,QAAQ,GAAG,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM;CAO7F;AACD,0FAA0F;AAC1F,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAiBjE;AACD,kEAAkE;AAClE,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAIjG;AACD,oGAAoG;AACpG,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAQzF;AACD,qFAAqF;AACrF,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAI5D;AACD,oDAAoD;AACpD,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAmC;AAC9F,kDAAkD;AAClD,wBAAgB,eAAe,IAAI,MAAM,CAAmD;AAmB5F,iBAAe,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAkGjF;AACD,iBAAe,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CA2F9E;AACD,iBAAe,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAkC3E;AAUD,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,CAAC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { logger } from '../../utils/structured-logger.js';
|
|
2
2
|
import { OPENAI_API_KEY, EMBEDDING_PROVIDER, TEI_BASE_URL, TEI_MODEL, TEI_API_KEY, EMBEDDING_MAX_RETRIES, EMBEDDING_RETRY_BASE_DELAY_MS, EMBEDDING_RETRY_MAX_DELAY_MS, EMBEDDING_RETRY_AFTER_CAP_MS, EMBEDDING_RETRY_BUDGET_MS } from '../../config.js';
|
|
3
3
|
import { OPENAI_EMBEDDING_MODEL, OPENAI_ENDPOINT, TEI_EMBEDDING_ENDPOINT, setResolvedEmbeddingDimension } from './config.js';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { auditProviderCall } from './provider-audit.js';
|
|
5
|
+
import { postEmbeddingsFastEmbed } from './fastembed-provider.js';
|
|
6
6
|
function sleep(ms) { return new Promise((resolve) => setTimeout(resolve, ms)); }
|
|
7
7
|
const RETRIABLE_NETWORK_TOKENS = ['fetch failed', 'timed out', 'econnreset', 'econnrefused', 'enotfound', 'eai_again'];
|
|
8
8
|
function isRetriableNetworkError(error) {
|
|
@@ -90,23 +90,6 @@ async function fetchWithRetries(url, init, provider, deadline) {
|
|
|
90
90
|
}
|
|
91
91
|
throw lastError instanceof Error ? lastError : new Error(String(lastError));
|
|
92
92
|
}
|
|
93
|
-
function auditProviderCall(payload) {
|
|
94
|
-
structuredLogger.info({
|
|
95
|
-
category: 'audit.embedding',
|
|
96
|
-
stage: 'provider',
|
|
97
|
-
provider: payload.provider,
|
|
98
|
-
model: payload.model,
|
|
99
|
-
tenant_id: getTenantId(),
|
|
100
|
-
request_id: getRequestIdFromStorage(),
|
|
101
|
-
status: payload.status,
|
|
102
|
-
input_count: payload.inputCount,
|
|
103
|
-
input_char_length: payload.inputCharLength,
|
|
104
|
-
output_dimension: payload.outputDimension,
|
|
105
|
-
latency_ms: payload.latencyMs,
|
|
106
|
-
...(payload.httpStatus !== undefined && { http_status: payload.httpStatus }),
|
|
107
|
-
...(payload.errorMessage && { error_message: payload.errorMessage })
|
|
108
|
-
}, `Embedding provider ${payload.provider} ${payload.status}`);
|
|
109
|
-
}
|
|
110
93
|
async function postEmbeddingsOpenAI(input) {
|
|
111
94
|
if (!OPENAI_API_KEY || !OPENAI_EMBEDDING_MODEL)
|
|
112
95
|
throw new Error('OpenAI requires OPENAI_API_KEY and OPENAI_EMBEDDING_MODEL to be configured');
|
|
@@ -298,7 +281,7 @@ async function postEmbeddingsTEI(input) {
|
|
|
298
281
|
}
|
|
299
282
|
async function postEmbeddings(input) {
|
|
300
283
|
// Choose provider based on explicit ENV override or auto-discovery
|
|
301
|
-
const providerPref = EMBEDDING_PROVIDER; // 'auto' | 'openai' | 'tei'
|
|
284
|
+
const providerPref = EMBEDDING_PROVIDER; // 'auto' | 'openai' | 'tei' | 'fastembed'
|
|
302
285
|
if (providerPref === 'openai') {
|
|
303
286
|
if (!OPENAI_API_KEY || !OPENAI_EMBEDDING_MODEL)
|
|
304
287
|
throw new Error('OpenAI requires OPENAI_API_KEY and OPENAI_EMBEDDING_MODEL to be configured');
|
|
@@ -307,9 +290,14 @@ async function postEmbeddings(input) {
|
|
|
307
290
|
if (providerPref === 'tei') {
|
|
308
291
|
if (!TEI_BASE_URL || !TEI_MODEL)
|
|
309
292
|
throw new Error('TEI requires TEI_BASE_URL and TEI_MODEL to be configured');
|
|
293
|
+
warnTeiDeprecated();
|
|
310
294
|
return await postEmbeddingsTEI(input);
|
|
311
295
|
}
|
|
312
|
-
|
|
296
|
+
if (providerPref === 'fastembed') {
|
|
297
|
+
return await postEmbeddingsFastEmbed(input);
|
|
298
|
+
}
|
|
299
|
+
// Auto detection: prefer OpenAI if both OPENAI vars present, otherwise TEI,
|
|
300
|
+
// otherwise fall back to the local fastembed default (no key, no service).
|
|
313
301
|
if (OPENAI_API_KEY && OPENAI_EMBEDDING_MODEL) {
|
|
314
302
|
try {
|
|
315
303
|
return await postEmbeddingsOpenAI(input);
|
|
@@ -317,15 +305,25 @@ async function postEmbeddings(input) {
|
|
|
317
305
|
catch (err) {
|
|
318
306
|
logger.warn('[EmbeddingService] OpenAI failed, attempting TEI fallback: ' + (err instanceof Error ? err.message : String(err)));
|
|
319
307
|
if (TEI_BASE_URL && TEI_MODEL) {
|
|
308
|
+
warnTeiDeprecated();
|
|
320
309
|
return await postEmbeddingsTEI(input);
|
|
321
310
|
}
|
|
322
311
|
throw err;
|
|
323
312
|
}
|
|
324
313
|
}
|
|
325
314
|
if (TEI_BASE_URL && TEI_MODEL) {
|
|
315
|
+
warnTeiDeprecated();
|
|
326
316
|
return await postEmbeddingsTEI(input);
|
|
327
317
|
}
|
|
328
|
-
|
|
318
|
+
return await postEmbeddingsFastEmbed(input);
|
|
319
|
+
}
|
|
320
|
+
/** One-time (per process) TEI soft-deprecation notice. Removal is a later breaking change. */
|
|
321
|
+
let teiDeprecationWarned = false;
|
|
322
|
+
function warnTeiDeprecated() {
|
|
323
|
+
if (teiDeprecationWarned)
|
|
324
|
+
return;
|
|
325
|
+
teiDeprecationWarned = true;
|
|
326
|
+
logger.warn('[EmbeddingService] TEI provider is deprecated (issue #11) and will be removed in a future release. OpenAI/Ollama or the local fastembed default are the supported alternatives.');
|
|
329
327
|
}
|
|
330
|
-
export { postEmbeddings, postEmbeddingsOpenAI, postEmbeddingsTEI };
|
|
328
|
+
export { postEmbeddings, postEmbeddingsOpenAI, postEmbeddingsTEI, postEmbeddingsFastEmbed };
|
|
331
329
|
//# sourceMappingURL=providers.js.map
|