@cogitator-ai/memory 0.11.7 → 0.12.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.
Files changed (69) hide show
  1. package/README.md +32 -5
  2. package/dist/adapters/base.d.ts +4 -2
  3. package/dist/adapters/base.d.ts.map +1 -1
  4. package/dist/adapters/base.js +4 -0
  5. package/dist/adapters/base.js.map +1 -1
  6. package/dist/adapters/memory-embedding.d.ts +2 -1
  7. package/dist/adapters/memory-embedding.d.ts.map +1 -1
  8. package/dist/adapters/memory-embedding.js +14 -22
  9. package/dist/adapters/memory-embedding.js.map +1 -1
  10. package/dist/adapters/memory.d.ts +2 -2
  11. package/dist/adapters/memory.d.ts.map +1 -1
  12. package/dist/adapters/memory.js +1 -1
  13. package/dist/adapters/memory.js.map +1 -1
  14. package/dist/adapters/mongodb.d.ts +2 -2
  15. package/dist/adapters/mongodb.d.ts.map +1 -1
  16. package/dist/adapters/mongodb.js +1 -1
  17. package/dist/adapters/mongodb.js.map +1 -1
  18. package/dist/adapters/postgres.d.ts +47 -3
  19. package/dist/adapters/postgres.d.ts.map +1 -1
  20. package/dist/adapters/postgres.js +167 -33
  21. package/dist/adapters/postgres.js.map +1 -1
  22. package/dist/adapters/qdrant.d.ts +2 -1
  23. package/dist/adapters/qdrant.d.ts.map +1 -1
  24. package/dist/adapters/qdrant.js +43 -21
  25. package/dist/adapters/qdrant.js.map +1 -1
  26. package/dist/adapters/redis.d.ts +2 -2
  27. package/dist/adapters/redis.d.ts.map +1 -1
  28. package/dist/adapters/redis.js +42 -29
  29. package/dist/adapters/redis.js.map +1 -1
  30. package/dist/adapters/sqlite.d.ts +2 -2
  31. package/dist/adapters/sqlite.d.ts.map +1 -1
  32. package/dist/adapters/sqlite.js +9 -5
  33. package/dist/adapters/sqlite.js.map +1 -1
  34. package/dist/compaction.d.ts +9 -2
  35. package/dist/compaction.d.ts.map +1 -1
  36. package/dist/compaction.js +85 -31
  37. package/dist/compaction.js.map +1 -1
  38. package/dist/context-builder.d.ts +18 -3
  39. package/dist/context-builder.d.ts.map +1 -1
  40. package/dist/context-builder.js +204 -185
  41. package/dist/context-builder.js.map +1 -1
  42. package/dist/index.d.ts +2 -2
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +1 -1
  45. package/dist/index.js.map +1 -1
  46. package/dist/knowledge-graph/sqlite-graph-adapter.d.ts.map +1 -1
  47. package/dist/knowledge-graph/sqlite-graph-adapter.js +7 -1
  48. package/dist/knowledge-graph/sqlite-graph-adapter.js.map +1 -1
  49. package/dist/schema.d.ts +2 -0
  50. package/dist/schema.d.ts.map +1 -1
  51. package/dist/schema.js +1 -0
  52. package/dist/schema.js.map +1 -1
  53. package/dist/search/filter.d.ts +11 -0
  54. package/dist/search/filter.d.ts.map +1 -0
  55. package/dist/search/filter.js +37 -0
  56. package/dist/search/filter.js.map +1 -0
  57. package/dist/search/hybrid-search.d.ts +7 -1
  58. package/dist/search/hybrid-search.d.ts.map +1 -1
  59. package/dist/search/hybrid-search.js +29 -13
  60. package/dist/search/hybrid-search.js.map +1 -1
  61. package/dist/session-manager.d.ts +14 -0
  62. package/dist/session-manager.d.ts.map +1 -1
  63. package/dist/session-manager.js +18 -0
  64. package/dist/session-manager.js.map +1 -1
  65. package/dist/token-counter.d.ts +13 -2
  66. package/dist/token-counter.d.ts.map +1 -1
  67. package/dist/token-counter.js +51 -11
  68. package/dist/token-counter.js.map +1 -1
  69. package/package.json +14 -11
@@ -6,6 +6,15 @@
6
6
  */
7
7
  const CHARS_PER_TOKEN = 4;
8
8
  const MESSAGE_OVERHEAD = 4;
9
+ const TOOL_CALL_OVERHEAD = 8;
10
+ /**
11
+ * Tokens an image costs. Providers bill images by their pixel size, which a message does not
12
+ * carry, so this is an upper estimate: about what Anthropic charges for an image at its maximum
13
+ * size, and above OpenAI's high-detail cost for a 1024px image. `detail: 'low'` images are a
14
+ * flat 85 tokens on OpenAI.
15
+ */
16
+ const IMAGE_TOKENS = 1600;
17
+ const LOW_DETAIL_IMAGE_TOKENS = 85;
9
18
  /**
10
19
  * Estimate token count for a string
11
20
  */
@@ -14,23 +23,43 @@ export function countTokens(text) {
14
23
  return 0;
15
24
  return Math.ceil(text.length / CHARS_PER_TOKEN);
16
25
  }
26
+ function countPartTokens(part) {
27
+ switch (part.type) {
28
+ case 'text':
29
+ return countTokens(part.text);
30
+ case 'image_url':
31
+ return part.image_url.detail === 'low' ? LOW_DETAIL_IMAGE_TOKENS : IMAGE_TOKENS;
32
+ case 'image_base64':
33
+ return IMAGE_TOKENS;
34
+ }
35
+ }
36
+ function countContentTokens(content) {
37
+ if (typeof content === 'string')
38
+ return countTokens(content);
39
+ return content.reduce((sum, part) => sum + countPartTokens(part), 0);
40
+ }
17
41
  /**
18
- * Extract text content from a message
42
+ * Estimate token count for tool calls: their names and JSON arguments
19
43
  */
20
- function getTextContent(content) {
21
- if (typeof content === 'string') {
22
- return content;
23
- }
24
- return content
25
- .filter((part) => part.type === 'text')
26
- .map((part) => part.text)
27
- .join(' ');
44
+ export function countToolCallsTokens(toolCalls) {
45
+ return toolCalls.reduce((sum, call) => sum +
46
+ TOOL_CALL_OVERHEAD +
47
+ countTokens(call.name) +
48
+ countTokens(JSON.stringify(call.arguments ?? {})), 0);
49
+ }
50
+ /** The tool calls an assistant message carries, when it carries any */
51
+ function toolCallsOf(message) {
52
+ const toolCalls = message.toolCalls;
53
+ return Array.isArray(toolCalls) ? toolCalls : undefined;
28
54
  }
29
55
  /**
30
- * Estimate token count for a message (includes overhead)
56
+ * Estimate token count for a message: its text, images and tool calls, plus overhead
31
57
  */
32
58
  export function countMessageTokens(message) {
33
- return countTokens(getTextContent(message.content)) + MESSAGE_OVERHEAD;
59
+ const toolCalls = toolCallsOf(message);
60
+ return (countContentTokens(message.content) +
61
+ MESSAGE_OVERHEAD +
62
+ (toolCalls ? countToolCallsTokens(toolCalls) : 0));
34
63
  }
35
64
  /**
36
65
  * Estimate token count for an array of messages
@@ -38,6 +67,17 @@ export function countMessageTokens(message) {
38
67
  export function countMessagesTokens(messages) {
39
68
  return messages.reduce((sum, msg) => sum + countMessageTokens(msg), 0);
40
69
  }
70
+ /**
71
+ * Tokens a stored entry takes in a context. Counted from its message and tool calls rather
72
+ * than trusted from `tokenCount`, which may have been saved by an older estimate that left out
73
+ * tool arguments and images; the larger of the two wins, so a count from a real tokenizer is
74
+ * kept.
75
+ */
76
+ export function countEntryTokens(entry) {
77
+ const messageCalls = toolCallsOf(entry.message);
78
+ const entryCalls = !messageCalls && entry.toolCalls ? countToolCallsTokens(entry.toolCalls) : 0;
79
+ return Math.max(entry.tokenCount ?? 0, countMessageTokens(entry.message) + entryCalls);
80
+ }
41
81
  /**
42
82
  * Truncate text to fit within token limit
43
83
  */
@@ -1 +1 @@
1
- {"version":3,"file":"token-counter.js","sourceRoot":"","sources":["../src/token-counter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,eAAe,GAAG,CAAC,CAAC;AAC1B,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAE3B;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,IAAI,CAAC,IAAI;QAAE,OAAO,CAAC,CAAC;IACpB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,eAAe,CAAC,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,OAA2B;IACjD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,OAAO,OAAO;SACX,MAAM,CAAC,CAAC,IAAI,EAA0C,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC;SAC9E,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;SACxB,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IACjD,OAAO,WAAW,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,gBAAgB,CAAC;AACzE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAmB;IACrD,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACzE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,SAAiB;IAC9D,MAAM,aAAa,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,aAAa,IAAI,SAAS,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,SAAS,GAAG,eAAe,CAAC;IAC7C,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"token-counter.js","sourceRoot":"","sources":["../src/token-counter.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cogitator-ai/memory",
3
- "version": "0.11.7",
3
+ "version": "0.12.0",
4
4
  "description": "Memory adapters for Cogitator AI agents",
5
5
  "keywords": [
6
6
  "cogitator",
@@ -22,7 +22,8 @@
22
22
  "exports": {
23
23
  ".": {
24
24
  "types": "./dist/index.d.ts",
25
- "import": "./dist/index.js"
25
+ "import": "./dist/index.js",
26
+ "default": "./dist/index.js"
26
27
  }
27
28
  },
28
29
  "files": [
@@ -32,32 +33,34 @@
32
33
  "node": ">=22.12.0"
33
34
  },
34
35
  "dependencies": {
35
- "@cogitator-ai/redis": "0.5.1",
36
- "@cogitator-ai/types": "0.34.0",
36
+ "@cogitator-ai/redis": "0.5.2",
37
+ "@cogitator-ai/types": "0.36.0",
37
38
  "nanoid": "^6.0.1",
38
39
  "zod": "^4.6.5"
39
40
  },
40
- "optionalDependencies": {
41
- "@qdrant/js-client-rest": "^1.19.0",
42
- "better-sqlite3": "^13.0.3",
43
- "ioredis": "^6.0.0",
44
- "mongodb": "^7.7.0",
45
- "pg": "^8.23.1"
46
- },
47
41
  "devDependencies": {
42
+ "@qdrant/js-client-rest": "^1.19.0",
48
43
  "@types/better-sqlite3": "^9.6.0",
49
44
  "@types/node": "^22.20.4",
50
45
  "@types/pg": "^8.23.1",
46
+ "better-sqlite3": "^13.0.3",
47
+ "ioredis": "^6.0.0",
48
+ "mongodb": "^7.7.0",
49
+ "pg": "^8.23.1",
51
50
  "typescript": "^6.0.3",
52
51
  "vitest": "^5.0.3"
53
52
  },
54
53
  "peerDependencies": {
54
+ "@qdrant/js-client-rest": "^1.10.0",
55
55
  "better-sqlite3": "^11.0.0 || ^12.0.0 || ^13.0.0",
56
56
  "ioredis": "^5.0.0 || ^6.0.0",
57
57
  "mongodb": "^6.0.0 || ^7.0.0",
58
58
  "pg": "^8.0.0"
59
59
  },
60
60
  "peerDependenciesMeta": {
61
+ "@qdrant/js-client-rest": {
62
+ "optional": true
63
+ },
61
64
  "better-sqlite3": {
62
65
  "optional": true
63
66
  },