@anuma/sdk 7.0.3 → 7.0.4-next.20261015012621
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/dist/expo/index.cjs +388 -130
- package/dist/expo/index.d.mts +25 -12
- package/dist/expo/index.d.ts +25 -12
- package/dist/expo/index.mjs +386 -130
- package/dist/index.cjs +29 -7
- package/dist/index.mjs +29 -7
- package/dist/memory/context.d.mts +1 -0
- package/dist/memory/context.d.ts +1 -0
- package/dist/react/index.cjs +393 -130
- package/dist/react/index.d.mts +25 -12
- package/dist/react/index.d.ts +25 -12
- package/dist/react/index.mjs +391 -130
- package/dist/server/index.cjs +321 -80
- package/dist/server/index.d.mts +27 -4
- package/dist/server/index.d.ts +27 -4
- package/dist/server/index.mjs +319 -80
- package/dist/tools/selection/index.cjs +29 -7
- package/dist/tools/selection/index.mjs +29 -7
- package/package.json +2 -2
|
@@ -930,6 +930,22 @@ function taskTypeHeader(taskType) {
|
|
|
930
930
|
// src/lib/memoryEngine/constants.ts
|
|
931
931
|
var DEFAULT_API_EMBEDDING_MODEL = "qwen/qwen3-embedding-8b";
|
|
932
932
|
|
|
933
|
+
// src/lib/memoryEngine/embeddingCacheState.ts
|
|
934
|
+
var EMBEDDING_CACHE_STATE_KEY = /* @__PURE__ */ Symbol.for("@anuma/sdk/embedding-cache/v1");
|
|
935
|
+
var cacheGlobal = globalThis;
|
|
936
|
+
var fallbackState = {
|
|
937
|
+
scopedViews: /* @__PURE__ */ new WeakMap(),
|
|
938
|
+
inFlightByCache: /* @__PURE__ */ new WeakMap(),
|
|
939
|
+
cachedEmbeddingModels: /* @__PURE__ */ new WeakMap()
|
|
940
|
+
};
|
|
941
|
+
function getEmbeddingCacheState() {
|
|
942
|
+
try {
|
|
943
|
+
return cacheGlobal[EMBEDDING_CACHE_STATE_KEY] ?? (cacheGlobal[EMBEDDING_CACHE_STATE_KEY] = fallbackState);
|
|
944
|
+
} catch {
|
|
945
|
+
return fallbackState;
|
|
946
|
+
}
|
|
947
|
+
}
|
|
948
|
+
|
|
933
949
|
// src/lib/memoryEngine/generate.ts
|
|
934
950
|
var EMBED_MAX_ATTEMPTS = 4;
|
|
935
951
|
var DEFAULT_EMBEDDING_REQUEST_TIMEOUT_MS = 15e3;
|
|
@@ -1018,15 +1034,18 @@ async function generateEmbedding(text, options) {
|
|
|
1018
1034
|
if (total === void 0) return embedOne(text, options, void 0);
|
|
1019
1035
|
return withDeadline((signal) => embedOne(text, options, signal), total, "embedding");
|
|
1020
1036
|
}
|
|
1021
|
-
var inFlightByCache
|
|
1037
|
+
var { inFlightByCache, cachedEmbeddingModels } = getEmbeddingCacheState();
|
|
1022
1038
|
async function embedOne(text, options, outer) {
|
|
1023
1039
|
const { cache } = options;
|
|
1024
1040
|
if (!cache) return Array.from(await requestEmbedding(text, options, outer));
|
|
1041
|
+
const model = options.model ?? DEFAULT_API_EMBEDDING_MODEL;
|
|
1025
1042
|
const cached = cache.get(text);
|
|
1026
|
-
|
|
1043
|
+
const cachedModel = cached && cachedEmbeddingModels.get(cached);
|
|
1044
|
+
if (cached && (cachedModel === void 0 || cachedModel === model)) return Array.from(cached);
|
|
1027
1045
|
const inFlight = inFlightByCache.get(cache) ?? /* @__PURE__ */ new Map();
|
|
1028
1046
|
inFlightByCache.set(cache, inFlight);
|
|
1029
|
-
const
|
|
1047
|
+
const requestKey = JSON.stringify([model, text]);
|
|
1048
|
+
const pending = inFlight.get(requestKey);
|
|
1030
1049
|
if (pending) {
|
|
1031
1050
|
try {
|
|
1032
1051
|
return Array.from(await pending);
|
|
@@ -1035,13 +1054,14 @@ async function embedOne(text, options, outer) {
|
|
|
1035
1054
|
}
|
|
1036
1055
|
}
|
|
1037
1056
|
const request = requestEmbedding(text, options, outer);
|
|
1038
|
-
inFlight.set(
|
|
1057
|
+
inFlight.set(requestKey, request);
|
|
1039
1058
|
try {
|
|
1040
1059
|
const embedding = await request;
|
|
1060
|
+
cachedEmbeddingModels.set(embedding, model);
|
|
1041
1061
|
cache.set(text, embedding);
|
|
1042
1062
|
return Array.from(embedding);
|
|
1043
1063
|
} finally {
|
|
1044
|
-
if (inFlight.get(
|
|
1064
|
+
if (inFlight.get(requestKey) === request) inFlight.delete(requestKey);
|
|
1045
1065
|
}
|
|
1046
1066
|
}
|
|
1047
1067
|
async function requestEmbedding(text, options, outer) {
|
|
@@ -1124,13 +1144,15 @@ async function embedMany(texts, options, outer) {
|
|
|
1124
1144
|
const { baseUrl = BASE_URL, model, batchSize, cache } = options;
|
|
1125
1145
|
const timeoutMs = options.timeoutMs ?? DEFAULT_EMBEDDING_REQUEST_TIMEOUT_MS;
|
|
1126
1146
|
const chunkSize = batchSize ?? DEFAULT_EMBEDDING_BATCH_SIZE;
|
|
1147
|
+
const embeddingModel = model ?? DEFAULT_API_EMBEDDING_MODEL;
|
|
1127
1148
|
const results = new Array(texts.length).fill(null);
|
|
1128
1149
|
const uncachedIndices = [];
|
|
1129
1150
|
const uncachedTexts = [];
|
|
1130
1151
|
for (let i = 0; i < texts.length; i++) {
|
|
1131
1152
|
if (cache) {
|
|
1132
1153
|
const cached = cache.get(texts[i]);
|
|
1133
|
-
|
|
1154
|
+
const cachedModel = cached && cachedEmbeddingModels.get(cached);
|
|
1155
|
+
if (cached && (cachedModel === void 0 || cachedModel === embeddingModel)) {
|
|
1134
1156
|
results[i] = Array.from(cached);
|
|
1135
1157
|
continue;
|
|
1136
1158
|
}
|
|
@@ -1146,7 +1168,6 @@ async function embedMany(texts, options, outer) {
|
|
|
1146
1168
|
...taskTypeHeader(options.taskType)
|
|
1147
1169
|
};
|
|
1148
1170
|
if (outer?.aborted) throw outer.reason;
|
|
1149
|
-
const embeddingModel = model ?? DEFAULT_API_EMBEDDING_MODEL;
|
|
1150
1171
|
let newEmbeddings;
|
|
1151
1172
|
if (uncachedTexts.length <= chunkSize) {
|
|
1152
1173
|
newEmbeddings = await generateEmbeddingsBatch(
|
|
@@ -1194,6 +1215,7 @@ async function embedMany(texts, options, outer) {
|
|
|
1194
1215
|
const f32Embedding = Float32Array.from(newEmbeddings[i]);
|
|
1195
1216
|
results[uncachedIndices[i]] = Array.from(f32Embedding);
|
|
1196
1217
|
if (cache) {
|
|
1218
|
+
cachedEmbeddingModels.set(f32Embedding, embeddingModel);
|
|
1197
1219
|
cache.set(uncachedTexts[i], f32Embedding);
|
|
1198
1220
|
}
|
|
1199
1221
|
}
|
|
@@ -808,6 +808,22 @@ function taskTypeHeader(taskType) {
|
|
|
808
808
|
// src/lib/memoryEngine/constants.ts
|
|
809
809
|
var DEFAULT_API_EMBEDDING_MODEL = "qwen/qwen3-embedding-8b";
|
|
810
810
|
|
|
811
|
+
// src/lib/memoryEngine/embeddingCacheState.ts
|
|
812
|
+
var EMBEDDING_CACHE_STATE_KEY = /* @__PURE__ */ Symbol.for("@anuma/sdk/embedding-cache/v1");
|
|
813
|
+
var cacheGlobal = globalThis;
|
|
814
|
+
var fallbackState = {
|
|
815
|
+
scopedViews: /* @__PURE__ */ new WeakMap(),
|
|
816
|
+
inFlightByCache: /* @__PURE__ */ new WeakMap(),
|
|
817
|
+
cachedEmbeddingModels: /* @__PURE__ */ new WeakMap()
|
|
818
|
+
};
|
|
819
|
+
function getEmbeddingCacheState() {
|
|
820
|
+
try {
|
|
821
|
+
return cacheGlobal[EMBEDDING_CACHE_STATE_KEY] ?? (cacheGlobal[EMBEDDING_CACHE_STATE_KEY] = fallbackState);
|
|
822
|
+
} catch {
|
|
823
|
+
return fallbackState;
|
|
824
|
+
}
|
|
825
|
+
}
|
|
826
|
+
|
|
811
827
|
// src/lib/memoryEngine/generate.ts
|
|
812
828
|
var EMBED_MAX_ATTEMPTS = 4;
|
|
813
829
|
var DEFAULT_EMBEDDING_REQUEST_TIMEOUT_MS = 15e3;
|
|
@@ -896,15 +912,18 @@ async function generateEmbedding(text, options) {
|
|
|
896
912
|
if (total === void 0) return embedOne(text, options, void 0);
|
|
897
913
|
return withDeadline((signal) => embedOne(text, options, signal), total, "embedding");
|
|
898
914
|
}
|
|
899
|
-
var inFlightByCache
|
|
915
|
+
var { inFlightByCache, cachedEmbeddingModels } = getEmbeddingCacheState();
|
|
900
916
|
async function embedOne(text, options, outer) {
|
|
901
917
|
const { cache } = options;
|
|
902
918
|
if (!cache) return Array.from(await requestEmbedding(text, options, outer));
|
|
919
|
+
const model = options.model ?? DEFAULT_API_EMBEDDING_MODEL;
|
|
903
920
|
const cached = cache.get(text);
|
|
904
|
-
|
|
921
|
+
const cachedModel = cached && cachedEmbeddingModels.get(cached);
|
|
922
|
+
if (cached && (cachedModel === void 0 || cachedModel === model)) return Array.from(cached);
|
|
905
923
|
const inFlight = inFlightByCache.get(cache) ?? /* @__PURE__ */ new Map();
|
|
906
924
|
inFlightByCache.set(cache, inFlight);
|
|
907
|
-
const
|
|
925
|
+
const requestKey = JSON.stringify([model, text]);
|
|
926
|
+
const pending = inFlight.get(requestKey);
|
|
908
927
|
if (pending) {
|
|
909
928
|
try {
|
|
910
929
|
return Array.from(await pending);
|
|
@@ -913,13 +932,14 @@ async function embedOne(text, options, outer) {
|
|
|
913
932
|
}
|
|
914
933
|
}
|
|
915
934
|
const request = requestEmbedding(text, options, outer);
|
|
916
|
-
inFlight.set(
|
|
935
|
+
inFlight.set(requestKey, request);
|
|
917
936
|
try {
|
|
918
937
|
const embedding = await request;
|
|
938
|
+
cachedEmbeddingModels.set(embedding, model);
|
|
919
939
|
cache.set(text, embedding);
|
|
920
940
|
return Array.from(embedding);
|
|
921
941
|
} finally {
|
|
922
|
-
if (inFlight.get(
|
|
942
|
+
if (inFlight.get(requestKey) === request) inFlight.delete(requestKey);
|
|
923
943
|
}
|
|
924
944
|
}
|
|
925
945
|
async function requestEmbedding(text, options, outer) {
|
|
@@ -1002,13 +1022,15 @@ async function embedMany(texts, options, outer) {
|
|
|
1002
1022
|
const { baseUrl = BASE_URL, model, batchSize, cache } = options;
|
|
1003
1023
|
const timeoutMs = options.timeoutMs ?? DEFAULT_EMBEDDING_REQUEST_TIMEOUT_MS;
|
|
1004
1024
|
const chunkSize = batchSize ?? DEFAULT_EMBEDDING_BATCH_SIZE;
|
|
1025
|
+
const embeddingModel = model ?? DEFAULT_API_EMBEDDING_MODEL;
|
|
1005
1026
|
const results = new Array(texts.length).fill(null);
|
|
1006
1027
|
const uncachedIndices = [];
|
|
1007
1028
|
const uncachedTexts = [];
|
|
1008
1029
|
for (let i = 0; i < texts.length; i++) {
|
|
1009
1030
|
if (cache) {
|
|
1010
1031
|
const cached = cache.get(texts[i]);
|
|
1011
|
-
|
|
1032
|
+
const cachedModel = cached && cachedEmbeddingModels.get(cached);
|
|
1033
|
+
if (cached && (cachedModel === void 0 || cachedModel === embeddingModel)) {
|
|
1012
1034
|
results[i] = Array.from(cached);
|
|
1013
1035
|
continue;
|
|
1014
1036
|
}
|
|
@@ -1024,7 +1046,6 @@ async function embedMany(texts, options, outer) {
|
|
|
1024
1046
|
...taskTypeHeader(options.taskType)
|
|
1025
1047
|
};
|
|
1026
1048
|
if (outer?.aborted) throw outer.reason;
|
|
1027
|
-
const embeddingModel = model ?? DEFAULT_API_EMBEDDING_MODEL;
|
|
1028
1049
|
let newEmbeddings;
|
|
1029
1050
|
if (uncachedTexts.length <= chunkSize) {
|
|
1030
1051
|
newEmbeddings = await generateEmbeddingsBatch(
|
|
@@ -1072,6 +1093,7 @@ async function embedMany(texts, options, outer) {
|
|
|
1072
1093
|
const f32Embedding = Float32Array.from(newEmbeddings[i]);
|
|
1073
1094
|
results[uncachedIndices[i]] = Array.from(f32Embedding);
|
|
1074
1095
|
if (cache) {
|
|
1096
|
+
cachedEmbeddingModels.set(f32Embedding, embeddingModel);
|
|
1075
1097
|
cache.set(uncachedTexts[i], f32Embedding);
|
|
1076
1098
|
}
|
|
1077
1099
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@anuma/sdk",
|
|
3
|
-
"version": "7.0.
|
|
3
|
+
"version": "7.0.4-next.20261015012621",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "./dist/index.cjs",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
@@ -154,7 +154,7 @@
|
|
|
154
154
|
"check:excluded-suites": "node scripts/assert-excluded-suites-still-fail.mjs",
|
|
155
155
|
"knip": "knip",
|
|
156
156
|
"check:export-consumers": "node scripts/assert-export-consumers.mjs",
|
|
157
|
-
"check-exports": "publint && attw --pack --ignore-rules no-resolution false-cjs && node scripts/assert-no-client-self-import.mjs && node scripts/assert-shared-logger.mjs",
|
|
157
|
+
"check-exports": "publint && attw --pack --ignore-rules no-resolution false-cjs && node scripts/assert-no-client-self-import.mjs && node scripts/assert-shared-logger.mjs && node scripts/assert-embedding-cross-entrypoints.mjs",
|
|
158
158
|
"check": "pnpm run lint && pnpm run knip && pnpm run check:export-consumers && pnpm run format && pnpm run generate",
|
|
159
159
|
"eval:extraction": "tsx test/memory/src/extraction/benchmark.test.ts",
|
|
160
160
|
"eval:topic": "tsx test/memory/src/topic/benchmark.ts",
|