mem-os-python 1.6.27__py3-none-any.whl

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.
Files changed (253) hide show
  1. mem_os_python-1.6.27.dist-info/METADATA +1032 -0
  2. mem_os_python-1.6.27.dist-info/RECORD +253 -0
  3. mem_os_python-1.6.27.dist-info/WHEEL +4 -0
  4. mem_os_python-1.6.27.dist-info/entry_points.txt +2 -0
  5. mem_os_python-1.6.27.dist-info/licenses/LICENSE +21 -0
  6. memos/__init__.py +16 -0
  7. memos/_js/adapters/anthropic.d.ts +279 -0
  8. memos/_js/adapters/anthropic.d.ts.map +1 -0
  9. memos/_js/adapters/anthropic.js +348 -0
  10. memos/_js/adapters/anthropic.js.map +1 -0
  11. memos/_js/adapters/base.d.ts +10 -0
  12. memos/_js/adapters/base.d.ts.map +1 -0
  13. memos/_js/adapters/base.js +2 -0
  14. memos/_js/adapters/base.js.map +1 -0
  15. memos/_js/adapters/openai.d.ts +264 -0
  16. memos/_js/adapters/openai.d.ts.map +1 -0
  17. memos/_js/adapters/openai.js +342 -0
  18. memos/_js/adapters/openai.js.map +1 -0
  19. memos/_js/apps/explorer.d.ts +244 -0
  20. memos/_js/apps/explorer.d.ts.map +1 -0
  21. memos/_js/apps/explorer.js +738 -0
  22. memos/_js/apps/explorer.js.map +1 -0
  23. memos/_js/citations.d.ts +65 -0
  24. memos/_js/citations.d.ts.map +1 -0
  25. memos/_js/citations.js +143 -0
  26. memos/_js/citations.js.map +1 -0
  27. memos/_js/cli-browse.d.ts +3 -0
  28. memos/_js/cli-browse.d.ts.map +1 -0
  29. memos/_js/cli-browse.js +129 -0
  30. memos/_js/cli-browse.js.map +1 -0
  31. memos/_js/cli-completion.d.ts +31 -0
  32. memos/_js/cli-completion.d.ts.map +1 -0
  33. memos/_js/cli-completion.js +340 -0
  34. memos/_js/cli-completion.js.map +1 -0
  35. memos/_js/cli-help.d.ts +18 -0
  36. memos/_js/cli-help.d.ts.map +1 -0
  37. memos/_js/cli-help.js +357 -0
  38. memos/_js/cli-help.js.map +1 -0
  39. memos/_js/cli.d.ts +28 -0
  40. memos/_js/cli.d.ts.map +1 -0
  41. memos/_js/cli.js +2880 -0
  42. memos/_js/cli.js.map +1 -0
  43. memos/_js/compression.d.ts +25 -0
  44. memos/_js/compression.d.ts.map +1 -0
  45. memos/_js/compression.js +319 -0
  46. memos/_js/compression.js.map +1 -0
  47. memos/_js/confidence-machine.d.ts +99 -0
  48. memos/_js/confidence-machine.d.ts.map +1 -0
  49. memos/_js/confidence-machine.js +222 -0
  50. memos/_js/confidence-machine.js.map +1 -0
  51. memos/_js/context-pack.d.ts +506 -0
  52. memos/_js/context-pack.d.ts.map +1 -0
  53. memos/_js/context-pack.js +1435 -0
  54. memos/_js/context-pack.js.map +1 -0
  55. memos/_js/contradictions.d.ts +160 -0
  56. memos/_js/contradictions.d.ts.map +1 -0
  57. memos/_js/contradictions.js +255 -0
  58. memos/_js/contradictions.js.map +1 -0
  59. memos/_js/dashboard.d.ts +30 -0
  60. memos/_js/dashboard.d.ts.map +1 -0
  61. memos/_js/dashboard.js +302 -0
  62. memos/_js/dashboard.js.map +1 -0
  63. memos/_js/ebbinghaus.d.ts +29 -0
  64. memos/_js/ebbinghaus.d.ts.map +1 -0
  65. memos/_js/ebbinghaus.js +32 -0
  66. memos/_js/ebbinghaus.js.map +1 -0
  67. memos/_js/embedding-queue.d.ts +190 -0
  68. memos/_js/embedding-queue.d.ts.map +1 -0
  69. memos/_js/embedding-queue.js +316 -0
  70. memos/_js/embedding-queue.js.map +1 -0
  71. memos/_js/embeddings.d.ts +187 -0
  72. memos/_js/embeddings.d.ts.map +1 -0
  73. memos/_js/embeddings.js +633 -0
  74. memos/_js/embeddings.js.map +1 -0
  75. memos/_js/entity-extraction.d.ts +54 -0
  76. memos/_js/entity-extraction.d.ts.map +1 -0
  77. memos/_js/entity-extraction.js +325 -0
  78. memos/_js/entity-extraction.js.map +1 -0
  79. memos/_js/entity-index.d.ts +93 -0
  80. memos/_js/entity-index.d.ts.map +1 -0
  81. memos/_js/entity-index.js +165 -0
  82. memos/_js/entity-index.js.map +1 -0
  83. memos/_js/event-memory.d.ts +147 -0
  84. memos/_js/event-memory.d.ts.map +1 -0
  85. memos/_js/event-memory.js +290 -0
  86. memos/_js/event-memory.js.map +1 -0
  87. memos/_js/external-import.d.ts +98 -0
  88. memos/_js/external-import.d.ts.map +1 -0
  89. memos/_js/external-import.js +669 -0
  90. memos/_js/external-import.js.map +1 -0
  91. memos/_js/fidelity.d.ts +367 -0
  92. memos/_js/fidelity.d.ts.map +1 -0
  93. memos/_js/fidelity.js +911 -0
  94. memos/_js/fidelity.js.map +1 -0
  95. memos/_js/graph-expansion.d.ts +119 -0
  96. memos/_js/graph-expansion.d.ts.map +1 -0
  97. memos/_js/graph-expansion.js +213 -0
  98. memos/_js/graph-expansion.js.map +1 -0
  99. memos/_js/graph-mermaid.d.ts +13 -0
  100. memos/_js/graph-mermaid.d.ts.map +1 -0
  101. memos/_js/graph-mermaid.js +32 -0
  102. memos/_js/graph-mermaid.js.map +1 -0
  103. memos/_js/graph.d.ts +170 -0
  104. memos/_js/graph.d.ts.map +1 -0
  105. memos/_js/graph.js +482 -0
  106. memos/_js/graph.js.map +1 -0
  107. memos/_js/harness.d.ts +63 -0
  108. memos/_js/harness.d.ts.map +1 -0
  109. memos/_js/harness.js +93 -0
  110. memos/_js/harness.js.map +1 -0
  111. memos/_js/importance.d.ts +118 -0
  112. memos/_js/importance.d.ts.map +1 -0
  113. memos/_js/importance.js +144 -0
  114. memos/_js/importance.js.map +1 -0
  115. memos/_js/index.d.ts +51 -0
  116. memos/_js/index.d.ts.map +1 -0
  117. memos/_js/index.js +53 -0
  118. memos/_js/index.js.map +1 -0
  119. memos/_js/mcp.d.ts +58 -0
  120. memos/_js/mcp.d.ts.map +1 -0
  121. memos/_js/mcp.js +1853 -0
  122. memos/_js/mcp.js.map +1 -0
  123. memos/_js/memory.d.ts +1762 -0
  124. memos/_js/memory.d.ts.map +1 -0
  125. memos/_js/memory.js +6283 -0
  126. memos/_js/memory.js.map +1 -0
  127. memos/_js/procedural.d.ts +74 -0
  128. memos/_js/procedural.d.ts.map +1 -0
  129. memos/_js/procedural.js +125 -0
  130. memos/_js/procedural.js.map +1 -0
  131. memos/_js/project-config.d.ts +68 -0
  132. memos/_js/project-config.d.ts.map +1 -0
  133. memos/_js/project-config.js +59 -0
  134. memos/_js/project-config.js.map +1 -0
  135. memos/_js/proof-of-forgetting.d.ts +57 -0
  136. memos/_js/proof-of-forgetting.d.ts.map +1 -0
  137. memos/_js/proof-of-forgetting.js +80 -0
  138. memos/_js/proof-of-forgetting.js.map +1 -0
  139. memos/_js/provenance.d.ts +122 -0
  140. memos/_js/provenance.d.ts.map +1 -0
  141. memos/_js/provenance.js +182 -0
  142. memos/_js/provenance.js.map +1 -0
  143. memos/_js/quarantine-commands.d.ts +23 -0
  144. memos/_js/quarantine-commands.d.ts.map +1 -0
  145. memos/_js/quarantine-commands.js +42 -0
  146. memos/_js/quarantine-commands.js.map +1 -0
  147. memos/_js/quarantine.d.ts +120 -0
  148. memos/_js/quarantine.d.ts.map +1 -0
  149. memos/_js/quarantine.js +873 -0
  150. memos/_js/quarantine.js.map +1 -0
  151. memos/_js/redact.d.ts +12 -0
  152. memos/_js/redact.d.ts.map +1 -0
  153. memos/_js/redact.js +26 -0
  154. memos/_js/redact.js.map +1 -0
  155. memos/_js/repl.d.ts +57 -0
  156. memos/_js/repl.d.ts.map +1 -0
  157. memos/_js/repl.js +295 -0
  158. memos/_js/repl.js.map +1 -0
  159. memos/_js/rerank-local.d.ts +61 -0
  160. memos/_js/rerank-local.d.ts.map +1 -0
  161. memos/_js/rerank-local.js +210 -0
  162. memos/_js/rerank-local.js.map +1 -0
  163. memos/_js/retain-filter.d.ts +98 -0
  164. memos/_js/retain-filter.d.ts.map +1 -0
  165. memos/_js/retain-filter.js +232 -0
  166. memos/_js/retain-filter.js.map +1 -0
  167. memos/_js/retrieval.d.ts +265 -0
  168. memos/_js/retrieval.d.ts.map +1 -0
  169. memos/_js/retrieval.js +1018 -0
  170. memos/_js/retrieval.js.map +1 -0
  171. memos/_js/revert.d.ts +77 -0
  172. memos/_js/revert.d.ts.map +1 -0
  173. memos/_js/revert.js +252 -0
  174. memos/_js/revert.js.map +1 -0
  175. memos/_js/scope.d.ts +30 -0
  176. memos/_js/scope.d.ts.map +1 -0
  177. memos/_js/scope.js +71 -0
  178. memos/_js/scope.js.map +1 -0
  179. memos/_js/semantic-screen.d.ts +152 -0
  180. memos/_js/semantic-screen.d.ts.map +1 -0
  181. memos/_js/semantic-screen.js +290 -0
  182. memos/_js/semantic-screen.js.map +1 -0
  183. memos/_js/session-hooks.d.ts +127 -0
  184. memos/_js/session-hooks.d.ts.map +1 -0
  185. memos/_js/session-hooks.js +482 -0
  186. memos/_js/session-hooks.js.map +1 -0
  187. memos/_js/storage/sqlite.d.ts +427 -0
  188. memos/_js/storage/sqlite.d.ts.map +1 -0
  189. memos/_js/storage/sqlite.js +2428 -0
  190. memos/_js/storage/sqlite.js.map +1 -0
  191. memos/_js/sync.d.ts +213 -0
  192. memos/_js/sync.d.ts.map +1 -0
  193. memos/_js/sync.js +389 -0
  194. memos/_js/sync.js.map +1 -0
  195. memos/_js/tamper-log.d.ts +98 -0
  196. memos/_js/tamper-log.d.ts.map +1 -0
  197. memos/_js/tamper-log.js +327 -0
  198. memos/_js/tamper-log.js.map +1 -0
  199. memos/_js/temporal.d.ts +92 -0
  200. memos/_js/temporal.d.ts.map +1 -0
  201. memos/_js/temporal.js +536 -0
  202. memos/_js/temporal.js.map +1 -0
  203. memos/_js/time-travel.d.ts +38 -0
  204. memos/_js/time-travel.d.ts.map +1 -0
  205. memos/_js/time-travel.js +46 -0
  206. memos/_js/time-travel.js.map +1 -0
  207. memos/_js/timestamp-format.d.ts +18 -0
  208. memos/_js/timestamp-format.d.ts.map +1 -0
  209. memos/_js/timestamp-format.js +52 -0
  210. memos/_js/timestamp-format.js.map +1 -0
  211. memos/_js/triple-extraction.d.ts +31 -0
  212. memos/_js/triple-extraction.d.ts.map +1 -0
  213. memos/_js/triple-extraction.js +116 -0
  214. memos/_js/triple-extraction.js.map +1 -0
  215. memos/_js/types.d.ts +2474 -0
  216. memos/_js/types.d.ts.map +1 -0
  217. memos/_js/types.js +20 -0
  218. memos/_js/types.js.map +1 -0
  219. memos/_js/updater.d.ts +95 -0
  220. memos/_js/updater.d.ts.map +1 -0
  221. memos/_js/updater.js +268 -0
  222. memos/_js/updater.js.map +1 -0
  223. memos/_js/version.d.ts +17 -0
  224. memos/_js/version.d.ts.map +1 -0
  225. memos/_js/version.js +34 -0
  226. memos/_js/version.js.map +1 -0
  227. memos/_js/vision/clip-query-cache.d.ts +58 -0
  228. memos/_js/vision/clip-query-cache.d.ts.map +1 -0
  229. memos/_js/vision/clip-query-cache.js +79 -0
  230. memos/_js/vision/clip-query-cache.js.map +1 -0
  231. memos/_js/vision/clip.d.ts +113 -0
  232. memos/_js/vision/clip.d.ts.map +1 -0
  233. memos/_js/vision/clip.js +224 -0
  234. memos/_js/vision/clip.js.map +1 -0
  235. memos/_js/vision/fake-clip.d.ts +55 -0
  236. memos/_js/vision/fake-clip.d.ts.map +1 -0
  237. memos/_js/vision/fake-clip.js +122 -0
  238. memos/_js/vision/fake-clip.js.map +1 -0
  239. memos/_js/vision/index.d.ts +15 -0
  240. memos/_js/vision/index.d.ts.map +1 -0
  241. memos/_js/vision/index.js +13 -0
  242. memos/_js/vision/index.js.map +1 -0
  243. memos/_js/vision/store.d.ts +137 -0
  244. memos/_js/vision/store.d.ts.map +1 -0
  245. memos/_js/vision/store.js +383 -0
  246. memos/_js/vision/store.js.map +1 -0
  247. memos/adapters/__init__.py +0 -0
  248. memos/adapters/crewai.py +385 -0
  249. memos/adapters/langchain.py +301 -0
  250. memos/adapters/ollama.py +396 -0
  251. memos/server/__init__.py +0 -0
  252. memos/server/main.py +547 -0
  253. memos/server/routes.py +360 -0
@@ -0,0 +1,633 @@
1
+ /**
2
+ * Strip all trailing slash characters from a URL/base path without using a
3
+ * regular expression. Avoids a ReDoS-flagged `/+$/` pattern on user-supplied
4
+ * input (CodeQL js/regular-expression-polynomial-redos).
5
+ */
6
+ export function stripTrailingSlashes(url) {
7
+ let result = url;
8
+ while (result.endsWith("/")) {
9
+ result = result.slice(0, -1);
10
+ }
11
+ return result;
12
+ }
13
+ const DEFAULT_DIMENSIONS = 384;
14
+ const SYNONYMS = {
15
+ // Preference language
16
+ prefer: ["like", "favor", "preference"],
17
+ prefers: ["like", "likes", "preference"],
18
+ preference: ["prefer", "like", "likes"],
19
+ preferences: ["prefer", "likes", "favorite"],
20
+ likes: ["prefer", "preference", "favorite"],
21
+ favorite: ["favourite", "preferred", "likes"],
22
+ // UI / appearance
23
+ dark: ["night", "black", "dim"],
24
+ theme: ["mode", "ui", "appearance"],
25
+ themes: ["mode", "ui", "appearance"],
26
+ mode: ["theme", "ui", "appearance"],
27
+ // Memory vocabulary
28
+ remember: ["memory", "recall"],
29
+ remembers: ["memory", "recall"],
30
+ memories: ["memory", "recall"],
31
+ // Tasks
32
+ todo: ["task", "action"],
33
+ tasks: ["todo", "action"],
34
+ // Exercise & fitness — paraphrases like "exercise routine" must reach
35
+ // memories phrased as "runs 5k three times a week".
36
+ exercise: ["workout", "training", "fitness", "runs", "running", "gym"],
37
+ exercises: ["workout", "training", "fitness", "running"],
38
+ workout: ["exercise", "training", "fitness", "gym"],
39
+ runs: ["running", "jogging", "exercise"],
40
+ running: ["runs", "jogging", "exercise"],
41
+ routine: ["schedule", "habit", "regular"],
42
+ routines: ["schedule", "habit", "regular"],
43
+ habit: ["routine", "regular"],
44
+ habits: ["routine", "regular"],
45
+ gym: ["workout", "exercise", "fitness"],
46
+ // Reading & books — "book author preferences" must reach "reads sci-fi,
47
+ // especially Le Guin".
48
+ book: ["books", "reads", "reading", "novel", "author", "literature"],
49
+ books: ["book", "reading", "novel", "literature"],
50
+ author: ["writer", "novelist", "book", "books"],
51
+ authors: ["writers", "book", "books"],
52
+ reads: ["reading", "book", "books"],
53
+ reading: ["reads", "book", "books"],
54
+ novel: ["book", "fiction", "literature"],
55
+ // Media
56
+ podcast: ["show", "audio", "episode"],
57
+ music: ["song", "songs", "listening"],
58
+ // Travel
59
+ vacation: ["trip", "travel", "holiday"],
60
+ holiday: ["vacation", "trip", "travel"],
61
+ trip: ["travel", "vacation", "journey"],
62
+ travel: ["trip", "vacation", "journey"],
63
+ // Work
64
+ job: ["work", "employment", "company", "employer", "career"],
65
+ works: ["work", "job", "employment"],
66
+ company: ["employer", "workplace", "business"],
67
+ employer: ["company", "workplace"],
68
+ career: ["job", "work", "profession"],
69
+ // Relationships & family
70
+ partner: ["spouse", "wife", "husband", "girlfriend", "boyfriend"],
71
+ siblings: ["sister", "brother", "family"],
72
+ sibling: ["sister", "brother", "family"],
73
+ sister: ["sibling", "family"],
74
+ brother: ["sibling", "family"],
75
+ // Health
76
+ allergies: ["allergic", "allergy", "intolerance", "reaction"],
77
+ allergy: ["allergic", "intolerance"],
78
+ allergic: ["allergy", "intolerance"],
79
+ health: ["healthy", "wellness", "medical"],
80
+ // Transport
81
+ transportation: ["transport", "commute", "commuting"],
82
+ commute: ["commuting", "transport"],
83
+ bike: ["bicycle", "cycling"],
84
+ bicycle: ["bike", "cycling"],
85
+ // Hobbies & games
86
+ hobby: ["hobbies", "pastime", "interest"],
87
+ hobbies: ["hobby", "pastime", "interests"],
88
+ games: ["game", "gaming", "playing"],
89
+ gaming: ["games", "playing"],
90
+ skill: ["level", "rating", "ability"],
91
+ rating: ["score", "rank", "level"],
92
+ // Instruments
93
+ instrument: ["piano", "guitar", "musical"],
94
+ piano: ["instrument", "keyboard", "musical"],
95
+ guitar: ["instrument", "musical"],
96
+ // Pets
97
+ dog: ["pet", "puppy"],
98
+ cat: ["pet", "kitten"],
99
+ pet: ["dog", "cat", "animal"],
100
+ // Food & drink
101
+ coffee: ["espresso", "caffeine"],
102
+ drinks: ["drink", "beverage"],
103
+ };
104
+ function tokenize(text) {
105
+ return text
106
+ .toLowerCase()
107
+ .normalize("NFKD")
108
+ .replace(/[\u0300-\u036f]/g, "")
109
+ .split(/[^a-z0-9]+/)
110
+ .filter((token) => token.length > 1);
111
+ }
112
+ function hashToken(token) {
113
+ let hash = 2166136261;
114
+ for (let index = 0; index < token.length; index += 1) {
115
+ hash ^= token.charCodeAt(index);
116
+ hash = Math.imul(hash, 16777619);
117
+ }
118
+ return hash >>> 0;
119
+ }
120
+ function addFeature(vector, feature, weight) {
121
+ const hash = hashToken(feature);
122
+ const index = hash % vector.length;
123
+ const sign = hash & 1 ? 1 : -1;
124
+ vector[index] += sign * weight;
125
+ }
126
+ export function normalizeVector(vector) {
127
+ const norm = Math.sqrt(vector.reduce((sum, value) => sum + value * value, 0));
128
+ if (norm === 0)
129
+ return vector;
130
+ return vector.map((value) => value / norm);
131
+ }
132
+ export function cosineSimilarity(a, b) {
133
+ const length = Math.min(a.length, b.length);
134
+ if (length === 0)
135
+ return 0;
136
+ let dot = 0;
137
+ let aNorm = 0;
138
+ let bNorm = 0;
139
+ for (let index = 0; index < length; index += 1) {
140
+ dot += a[index] * b[index];
141
+ aNorm += a[index] * a[index];
142
+ bNorm += b[index] * b[index];
143
+ }
144
+ if (aNorm === 0 || bNorm === 0)
145
+ return 0;
146
+ return dot / Math.sqrt(aNorm * bNorm);
147
+ }
148
+ export class LocalHashEmbeddingProvider {
149
+ id = "local-hash";
150
+ model;
151
+ dimensions;
152
+ constructor(options = {}) {
153
+ this.dimensions = options.dimensions ?? DEFAULT_DIMENSIONS;
154
+ this.model = options.model ?? `local-hash-${this.dimensions}`;
155
+ }
156
+ async embed(text) {
157
+ const vector = Array.from({ length: this.dimensions }, () => 0);
158
+ const tokens = tokenize(text);
159
+ const uniqueTokens = [...new Set(tokens)];
160
+ for (const token of uniqueTokens) {
161
+ addFeature(vector, `tok:${token}`, 1);
162
+ for (let length = 3; length <= Math.min(token.length, 5); length += 1) {
163
+ for (let index = 0; index <= token.length - length; index += 1) {
164
+ addFeature(vector, `ng:${token.slice(index, index + length)}`, 0.12);
165
+ }
166
+ }
167
+ for (const synonym of SYNONYMS[token] ?? []) {
168
+ addFeature(vector, `tok:${synonym}`, 0.45);
169
+ }
170
+ }
171
+ for (let index = 0; index < tokens.length - 1; index += 1) {
172
+ addFeature(vector, `bi:${tokens[index]}:${tokens[index + 1]}`, 0.35);
173
+ }
174
+ return normalizeVector(vector);
175
+ }
176
+ }
177
+ export class OllamaEmbeddingProvider {
178
+ id = "ollama";
179
+ model;
180
+ dimensions;
181
+ baseUrl;
182
+ queryPrefix;
183
+ documentPrefix;
184
+ constructor(options = {}) {
185
+ this.baseUrl = stripTrailingSlashes(options.baseUrl ?? "http://127.0.0.1:11434");
186
+ this.model = options.model ?? "nomic-embed-text";
187
+ this.dimensions = options.dimensions ?? 768;
188
+ this.queryPrefix = options.queryPrefix ?? "";
189
+ this.documentPrefix = options.documentPrefix ?? "";
190
+ }
191
+ async callEmbed(input) {
192
+ const response = await fetch(`${this.baseUrl}/api/embed`, {
193
+ method: "POST",
194
+ headers: { "Content-Type": "application/json" },
195
+ body: JSON.stringify({ model: this.model, input }),
196
+ });
197
+ if (!response.ok) {
198
+ throw new Error(`Ollama embedding request failed: ${response.status} ${response.statusText}`);
199
+ }
200
+ const payload = (await response.json());
201
+ const vectors = payload.embeddings ??
202
+ (payload.embedding ? [payload.embedding] : undefined);
203
+ if (!Array.isArray(vectors)) {
204
+ throw new Error("Ollama embedding response did not include a vector.");
205
+ }
206
+ if (Array.isArray(input) && vectors.length !== input.length) {
207
+ throw new Error(`Ollama embedding response length mismatch: got ${vectors.length}, expected ${input.length}.`);
208
+ }
209
+ return vectors.map((v) => normalizeVector(v));
210
+ }
211
+ async embed(text) {
212
+ const input = this.documentPrefix ? `${this.documentPrefix}${text}` : text;
213
+ return this.callEmbed(input).then((v) => v[0]);
214
+ }
215
+ /**
216
+ * Query embedding applies the configured `queryPrefix`, when set, so the
217
+ * retrieval question is embedded in the model's query mode. Documents are
218
+ * embedded WITHOUT the prefix (plain indexing text).
219
+ */
220
+ embedQuery(text) {
221
+ const input = this.queryPrefix ? `${this.queryPrefix}${text}` : text;
222
+ return this.callEmbed(input).then((v) => v[0]);
223
+ }
224
+ async batchEmbed(texts) {
225
+ const input = this.documentPrefix
226
+ ? texts.map((t) => `${this.documentPrefix}${t}`)
227
+ : texts;
228
+ return this.callEmbed(input);
229
+ }
230
+ async embedDocuments(texts) {
231
+ if (texts.length === 1) {
232
+ return this.embed(texts[0]).then((v) => [v]);
233
+ }
234
+ return this.batchEmbed(texts);
235
+ }
236
+ }
237
+ export class OpenAICompatibleEmbeddingProvider {
238
+ id = "openai-compatible";
239
+ model;
240
+ dimensions;
241
+ baseUrl;
242
+ apiKey;
243
+ queryPrefix;
244
+ documentPrefix;
245
+ constructor(options) {
246
+ this.baseUrl = stripTrailingSlashes(options.baseUrl ?? "https://api.openai.com/v1");
247
+ this.apiKey = options.apiKey ?? "";
248
+ this.model = options.model ?? "text-embedding-3-small";
249
+ this.dimensions = options.dimensions ?? 1536;
250
+ this.queryPrefix = options.queryPrefix ?? "";
251
+ this.documentPrefix = options.documentPrefix ?? "";
252
+ }
253
+ async callEmbeddings(input) {
254
+ const headers = new Headers({ "Content-Type": "application/json" });
255
+ if (this.apiKey)
256
+ headers.set("Authorization", `Bearer ${this.apiKey}`);
257
+ const response = await fetch(`${this.baseUrl}/embeddings`, {
258
+ method: "POST",
259
+ headers,
260
+ body: JSON.stringify({ model: this.model, input }),
261
+ });
262
+ if (!response.ok) {
263
+ throw new Error(`Embedding request failed: ${response.status} ${response.statusText}`);
264
+ }
265
+ const payload = (await response.json());
266
+ if (!Array.isArray(payload.data)) {
267
+ throw new Error("Embedding response did not include a `data` array.");
268
+ }
269
+ if (payload.data.length !== input.length) {
270
+ throw new Error(`Embedding response length mismatch: got ${payload.data.length}, expected ${input.length}.`);
271
+ }
272
+ return payload.data.map((row) => {
273
+ if (!Array.isArray(row.embedding)) {
274
+ throw new Error("Embedding response contained a non-vector entry.");
275
+ }
276
+ return normalizeVector(row.embedding);
277
+ });
278
+ }
279
+ async embed(text) {
280
+ const input = this.documentPrefix ? `${this.documentPrefix}${text}` : text;
281
+ return this.callEmbeddings([input]).then((v) => v[0]);
282
+ }
283
+ embedQuery(text) {
284
+ const input = this.queryPrefix ? `${this.queryPrefix}${text}` : text;
285
+ return this.callEmbeddings([input]).then((v) => v[0]);
286
+ }
287
+ async batchEmbed(texts) {
288
+ const input = this.documentPrefix
289
+ ? texts.map((t) => `${this.documentPrefix}${t}`)
290
+ : texts;
291
+ return this.callEmbeddings(input);
292
+ }
293
+ }
294
+ /**
295
+ * Voyage AI embedding provider.
296
+ *
297
+ * Voyage's `voyage-3` family is the strongest open-weight-class
298
+ * retrieval model we can hit over HTTP, and it's a common default
299
+ * for serious RAG work. The provider uses the public
300
+ * `https://api.voyageai.com/v1/embeddings` endpoint and Bearer auth.
301
+ */
302
+ export class VoyageAIEmbeddingProvider {
303
+ id = "voyage";
304
+ model;
305
+ dimensions;
306
+ apiKey;
307
+ baseUrl;
308
+ constructor(options = {}) {
309
+ if (!options.apiKey) {
310
+ throw new Error("VoyageAIEmbeddingProvider requires an `apiKey` (e.g. `pa-…`).");
311
+ }
312
+ this.apiKey = options.apiKey;
313
+ this.model = options.model ?? "voyage-3";
314
+ this.dimensions = options.dimensions ?? 1024;
315
+ this.baseUrl = stripTrailingSlashes(options.baseUrl ?? "https://api.voyageai.com/v1");
316
+ }
317
+ async embed(text) {
318
+ return this.callEmbeddings([text]).then((v) => v[0]);
319
+ }
320
+ async batchEmbed(texts) {
321
+ return this.callEmbeddings(texts);
322
+ }
323
+ async callEmbeddings(texts) {
324
+ const response = await fetch(`${this.baseUrl}/embeddings`, {
325
+ method: "POST",
326
+ headers: {
327
+ "Content-Type": "application/json",
328
+ Authorization: `Bearer ${this.apiKey}`,
329
+ },
330
+ body: JSON.stringify({ model: this.model, input: texts }),
331
+ });
332
+ if (!response.ok) {
333
+ throw new Error(`Voyage embedding request failed: ${response.status} ${response.statusText}`);
334
+ }
335
+ const payload = (await response.json());
336
+ if (!Array.isArray(payload.data)) {
337
+ throw new Error("Voyage embedding response missing `data` array.");
338
+ }
339
+ const vectors = payload.data.map((row) => {
340
+ if (!Array.isArray(row.embedding)) {
341
+ throw new Error("Voyage embedding response contained a non-vector entry.");
342
+ }
343
+ return row.embedding;
344
+ });
345
+ if (vectors.length !== texts.length) {
346
+ throw new Error(`Voyage embedding response length mismatch: got ${vectors.length}, expected ${texts.length}.`);
347
+ }
348
+ return vectors.map((v) => normalizeVector(v));
349
+ }
350
+ }
351
+ export function createEmbeddingProvider(config) {
352
+ if (config?.provider && typeof config.provider === "object") {
353
+ return config.provider;
354
+ }
355
+ const provider = config?.provider ?? "fastembed";
356
+ // NOTE: "fastembed" is the default because a bare `new MemOS()` should
357
+ // give real local semantic search. FastEmbedEmbeddingProvider lazily
358
+ // loads the transformers pipeline on first use and degrades loudly to
359
+ // the deterministic local hash when the optional peer dep isn't
360
+ // installed — so the default is always safe, just sometimes degraded.
361
+ if (provider === "ollama") {
362
+ return new OllamaEmbeddingProvider(config);
363
+ }
364
+ if (provider === "openai-compatible") {
365
+ return new OpenAICompatibleEmbeddingProvider(config ?? {});
366
+ }
367
+ if (provider === "voyage") {
368
+ return new VoyageAIEmbeddingProvider(config ?? {});
369
+ }
370
+ if (provider === "cohere") {
371
+ return new CohereEmbeddingProvider(config ?? {});
372
+ }
373
+ if (provider === "fastembed") {
374
+ return new FastEmbedEmbeddingProvider(config ?? {});
375
+ }
376
+ return new LocalHashEmbeddingProvider(config);
377
+ }
378
+ /**
379
+ * Cohere embed-v3 embedding provider.
380
+ *
381
+ * Cohere's `embed-english-v3.0` (and its multilingual sibling) is a
382
+ * strong default for English retrieval. The provider hits
383
+ * `https://api.cohere.ai/v1/embed` and returns a normalized vector.
384
+ */
385
+ export class CohereEmbeddingProvider {
386
+ id = "cohere";
387
+ model;
388
+ dimensions;
389
+ apiKey;
390
+ baseUrl;
391
+ inputType;
392
+ constructor(options = {}) {
393
+ if (!options.apiKey) {
394
+ throw new Error("CohereEmbeddingProvider requires an `apiKey`.");
395
+ }
396
+ this.apiKey = options.apiKey;
397
+ this.model = options.model ?? "embed-english-v3.0";
398
+ this.dimensions = options.dimensions ?? 1024;
399
+ this.baseUrl = stripTrailingSlashes(options.baseUrl ?? "https://api.cohere.ai/v1");
400
+ // `search_document` is the right value for indexing; callers that
401
+ // need query-side embeddings can construct a separate provider
402
+ // instance with input_type=`search_query`.
403
+ this.inputType = options.inputType ?? "search_document";
404
+ }
405
+ async embed(text) {
406
+ return this.callEmbed([text]).then((v) => v[0]);
407
+ }
408
+ async batchEmbed(texts) {
409
+ return this.callEmbed(texts);
410
+ }
411
+ async callEmbed(texts) {
412
+ const response = await fetch(`${this.baseUrl}/embed`, {
413
+ method: "POST",
414
+ headers: {
415
+ "Content-Type": "application/json",
416
+ Authorization: `Bearer ${this.apiKey}`,
417
+ },
418
+ body: JSON.stringify({
419
+ model: this.model,
420
+ texts,
421
+ input_type: this.inputType,
422
+ }),
423
+ });
424
+ if (!response.ok) {
425
+ throw new Error(`Cohere embedding request failed: ${response.status} ${response.statusText}`);
426
+ }
427
+ const payload = (await response.json());
428
+ if (!Array.isArray(payload.embeddings)) {
429
+ throw new Error("Cohere embedding response missing `embeddings` array.");
430
+ }
431
+ if (payload.embeddings.length !== texts.length) {
432
+ throw new Error(`Cohere embedding response length mismatch: got ${payload.embeddings.length}, expected ${texts.length}.`);
433
+ }
434
+ return payload.embeddings.map((v) => normalizeVector(v));
435
+ }
436
+ }
437
+ /**
438
+ * In-process FastEmbed-style embedding provider.
439
+ *
440
+ * Tries to load `@xenova/transformers` at runtime. If the package is
441
+ * installed (the recommended path for real semantic quality), the
442
+ * provider uses the BAAI/bge-small-en-v1.5 model and runs entirely
443
+ * in-process — no network, no API key, ideal for air-gapped setups.
444
+ *
445
+ * If the package is not installed, falls back to a deterministic
446
+ * feature-hash embedding so the rest of the SDK still works for
447
+ * tests, CI, and offline development. The vector shape and L2 norm
448
+ * are identical between the two modes, so swapping in the real
449
+ * FastEmbed later is a no-op for downstream code.
450
+ */
451
+ /**
452
+ * Warn-once flag for the FastEmbed local-hash fallback. The fallback keeps
453
+ * the SDK working with zero extra installs, but users deserve to know
454
+ * their "semantic" search is degraded — and exactly how to fix it.
455
+ */
456
+ let warnedEmbeddingFallback = false;
457
+ export class FastEmbedEmbeddingProvider {
458
+ id = "fastembed";
459
+ model;
460
+ dimensions;
461
+ pipeline = null;
462
+ resolved = false;
463
+ /**
464
+ * Set when the transformers pipeline could NOT be loaded and the
465
+ * deterministic local hash fallback is serving embeddings instead.
466
+ * Null while unresolved or when the real model loaded fine. Exposed
467
+ * via `getRuntimeInfo()` so benchmarks can detect — and optionally
468
+ * refuse to run on — the fallback.
469
+ */
470
+ fallbackReason = null;
471
+ constructor(options = {}) {
472
+ this.model = options.model ?? "BAAI/bge-small-en-v1.5";
473
+ this.dimensions = options.dimensions ?? 384;
474
+ }
475
+ /**
476
+ * Runtime resolution metadata. `fallbackActive` is only meaningful after
477
+ * the first `embed()` call (or an explicit probe) has triggered
478
+ * `resolve()`; before that it reports `false` with a null reason, which
479
+ * callers should read as "not yet known" rather than "no fallback".
480
+ */
481
+ getRuntimeInfo() {
482
+ return {
483
+ requestedProvider: "fastembed",
484
+ resolvedProvider: this.fallbackReason
485
+ ? "local-hash-fallback"
486
+ : "fastembed",
487
+ requestedModel: this.model,
488
+ resolvedModel: this.fallbackReason
489
+ ? `local-hash-fallback-${this.dimensions}`
490
+ : this.model,
491
+ modelRevision: null,
492
+ requestedDimensions: this.dimensions,
493
+ observedDimensions: this.lastObservedDimensions,
494
+ fallbackActive: this.fallbackReason !== null,
495
+ fallbackReason: this.fallbackReason,
496
+ };
497
+ }
498
+ /** Dimensions seen on the most recent embed/batchEmbed result. */
499
+ lastObservedDimensions = null;
500
+ /**
501
+ * Lazily resolve the transformers pipeline. We use a dynamic import so
502
+ * the optional dep is only paid for when (and if) the user installs it.
503
+ * Any failure to load silently falls back to the local hash.
504
+ *
505
+ * Tries `@huggingface/transformers` (the maintained successor) first,
506
+ * then falls back to the abandoned `@xenova/transformers` for users who
507
+ * still have it installed.
508
+ */
509
+ async resolve() {
510
+ if (this.resolved)
511
+ return;
512
+ this.resolved = true;
513
+ try {
514
+ // Both packages are optional peer deps — users opt in by installing
515
+ // one of them. We use dynamic imports so they're only paid for when
516
+ // installed. Types are declared in `src/xenova-transformers.d.ts`.
517
+ const mod = (await import("@huggingface/transformers").catch(() => null));
518
+ const legacyMod = mod
519
+ ? null
520
+ : (await import("@xenova/transformers").catch(() => null));
521
+ const resolved = mod ?? legacyMod;
522
+ if (!resolved) {
523
+ // Neither optional peer dep is installed — record WHY so
524
+ // `getRuntimeInfo()` can report the fallback, then fall through
525
+ // to the local hash. (The early return here previously skipped
526
+ // the missing-package reason entirely — the silent-fallback bug.)
527
+ this.fallbackReason =
528
+ "neither @huggingface/transformers nor @xenova/transformers is installed";
529
+ this.warnFallbackOnce();
530
+ return;
531
+ }
532
+ const pipeline = await resolved.pipeline("feature-extraction", this.model);
533
+ // @huggingface/transformers v3+/v4 pipelines are callable directly;
534
+ // older shapes exposed `.feature`. Normalize both behind one function.
535
+ this.pipeline =
536
+ typeof pipeline === "function"
537
+ ? pipeline
538
+ : (pipeline
539
+ .feature ?? null);
540
+ if (!this.pipeline) {
541
+ this.fallbackReason = `pipeline for model "${this.model}" exposed no callable feature-extraction interface`;
542
+ this.warnFallbackOnce();
543
+ }
544
+ }
545
+ catch (err) {
546
+ // Record the failure for runtime info, then fall through to the
547
+ // local hash. The SDK keeps its resilient default behavior — but
548
+ // benchmarks can now SEE the fallback instead of silently scoring it.
549
+ this.fallbackReason = `pipeline construction failed for model "${this.model}": ${String(err).substring(0, 200)}`;
550
+ this.warnFallbackOnce();
551
+ }
552
+ }
553
+ /**
554
+ * One-time loud warning when the local-hash fallback activates. Silent
555
+ * degradation is the worst plug-in experience: everything "works" but
556
+ * semantic search quietly returns garbage.
557
+ */
558
+ warnFallbackOnce() {
559
+ if (warnedEmbeddingFallback)
560
+ return;
561
+ warnedEmbeddingFallback = true;
562
+ console.warn(`[memos] embedding fallback: ${this.fallbackReason}. ` +
563
+ "Semantic search is degraded to a deterministic local hash. " +
564
+ "For real embeddings: pnpm add @huggingface/transformers");
565
+ }
566
+ async embed(text) {
567
+ await this.resolve();
568
+ if (this.pipeline) {
569
+ const out = await this.pipeline(text, {
570
+ pooling: "mean",
571
+ normalize: true,
572
+ });
573
+ this.lastObservedDimensions = out.data.length;
574
+ return Array.from(out.data);
575
+ }
576
+ return this.fallbackEmbed(text);
577
+ }
578
+ async batchEmbed(texts) {
579
+ await this.resolve();
580
+ if (this.pipeline) {
581
+ // The transformers pipeline runs array input as one batched ONNX
582
+ // session — far cheaper than one session run per text. Batched output
583
+ // is a single Tensor with dims [batch, hidden]; slice it per row.
584
+ // Chunked to bound peak memory on large backfills.
585
+ const CHUNK_SIZE = 32;
586
+ const vectors = [];
587
+ for (let i = 0; i < texts.length; i += CHUNK_SIZE) {
588
+ const chunk = texts.slice(i, i + CHUNK_SIZE);
589
+ const out = await this.pipeline(chunk, {
590
+ pooling: "mean",
591
+ normalize: true,
592
+ });
593
+ const hidden = out.dims[out.dims.length - 1];
594
+ this.lastObservedDimensions = hidden;
595
+ for (let r = 0; r < chunk.length; r += 1) {
596
+ vectors.push(Array.from(out.data.slice(r * hidden, (r + 1) * hidden)));
597
+ }
598
+ }
599
+ return vectors;
600
+ }
601
+ return texts.map((t) => this.fallbackEmbed(t));
602
+ }
603
+ /**
604
+ * Deterministic feature-hash fallback. Produces a `dimensions`-long
605
+ * vector with the same shape (and L2 norm) as a real
606
+ * sentence-transformer embedding, so storage and ranking code is
607
+ * identical to the online path.
608
+ */
609
+ fallbackEmbed(text) {
610
+ this.lastObservedDimensions = this.dimensions;
611
+ const vector = Array.from({ length: this.dimensions }, () => 0);
612
+ const tokens = text
613
+ .toLowerCase()
614
+ .normalize("NFKD")
615
+ .replace(/[\u0300-\u036f]/g, "")
616
+ .split(/[^a-z0-9]+/)
617
+ .filter((t) => t.length > 1);
618
+ const unique = [...new Set(tokens)];
619
+ for (const token of unique) {
620
+ addFeature(vector, `tok:${token}`, 1);
621
+ for (let length = 3; length <= Math.min(token.length, 5); length += 1) {
622
+ for (let i = 0; i <= token.length - length; i += 1) {
623
+ addFeature(vector, `ng:${token.slice(i, i + length)}`, 0.12);
624
+ }
625
+ }
626
+ }
627
+ for (let i = 0; i < tokens.length - 1; i += 1) {
628
+ addFeature(vector, `bi:${tokens[i]}:${tokens[i + 1]}`, 0.35);
629
+ }
630
+ return normalizeVector(vector);
631
+ }
632
+ }
633
+ //# sourceMappingURL=embeddings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embeddings.js","sourceRoot":"","sources":["../src/embeddings.ts"],"names":[],"mappings":"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"}