@cogitator-ai/memory 0.1.0 → 0.3.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 (53) hide show
  1. package/README.md +572 -21
  2. package/dist/__tests__/context-builder.test.js +2 -2
  3. package/dist/__tests__/context-builder.test.js.map +1 -1
  4. package/dist/__tests__/memory-adapter.test.js +1 -1
  5. package/dist/__tests__/memory-adapter.test.js.map +1 -1
  6. package/dist/__tests__/token-counter.test.js +1 -1
  7. package/dist/__tests__/token-counter.test.js.map +1 -1
  8. package/dist/adapters/base.d.ts.map +1 -1
  9. package/dist/adapters/base.js.map +1 -1
  10. package/dist/adapters/memory.d.ts.map +1 -1
  11. package/dist/adapters/memory.js.map +1 -1
  12. package/dist/adapters/postgres.d.ts.map +1 -1
  13. package/dist/adapters/postgres.js +11 -15
  14. package/dist/adapters/postgres.js.map +1 -1
  15. package/dist/adapters/redis.d.ts.map +1 -1
  16. package/dist/adapters/redis.js.map +1 -1
  17. package/dist/context-builder.d.ts.map +1 -1
  18. package/dist/context-builder.js +7 -15
  19. package/dist/context-builder.js.map +1 -1
  20. package/dist/embedding/factory.d.ts.map +1 -1
  21. package/dist/embedding/factory.js.map +1 -1
  22. package/dist/embedding/openai.d.ts.map +1 -1
  23. package/dist/embedding/openai.js +1 -3
  24. package/dist/embedding/openai.js.map +1 -1
  25. package/dist/index.d.ts +4 -2
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +2 -1
  28. package/dist/index.js.map +1 -1
  29. package/dist/knowledge-graph/entity-extractor.d.ts +30 -0
  30. package/dist/knowledge-graph/entity-extractor.d.ts.map +1 -0
  31. package/dist/knowledge-graph/entity-extractor.js +158 -0
  32. package/dist/knowledge-graph/entity-extractor.js.map +1 -0
  33. package/dist/knowledge-graph/graph-adapter.d.ts +56 -0
  34. package/dist/knowledge-graph/graph-adapter.d.ts.map +1 -0
  35. package/dist/knowledge-graph/graph-adapter.js +652 -0
  36. package/dist/knowledge-graph/graph-adapter.js.map +1 -0
  37. package/dist/knowledge-graph/graph-context-builder.d.ts +23 -0
  38. package/dist/knowledge-graph/graph-context-builder.d.ts.map +1 -0
  39. package/dist/knowledge-graph/graph-context-builder.js +202 -0
  40. package/dist/knowledge-graph/graph-context-builder.js.map +1 -0
  41. package/dist/knowledge-graph/index.d.ts +9 -0
  42. package/dist/knowledge-graph/index.d.ts.map +1 -0
  43. package/dist/knowledge-graph/index.js +6 -0
  44. package/dist/knowledge-graph/index.js.map +1 -0
  45. package/dist/knowledge-graph/inference-engine.d.ts +17 -0
  46. package/dist/knowledge-graph/inference-engine.d.ts.map +1 -0
  47. package/dist/knowledge-graph/inference-engine.js +270 -0
  48. package/dist/knowledge-graph/inference-engine.js.map +1 -0
  49. package/dist/knowledge-graph/schema.d.ts +854 -0
  50. package/dist/knowledge-graph/schema.d.ts.map +1 -0
  51. package/dist/knowledge-graph/schema.js +166 -0
  52. package/dist/knowledge-graph/schema.js.map +1 -0
  53. package/package.json +6 -5
@@ -0,0 +1,158 @@
1
+ import { z } from 'zod';
2
+ import { ExtractedEntitySchema, ExtractedRelationSchema } from './schema';
3
+ const ExtractionOutputSchema = z.object({
4
+ entities: z.array(ExtractedEntitySchema),
5
+ relations: z.array(ExtractedRelationSchema),
6
+ });
7
+ const ENTITY_TYPES = [
8
+ 'person',
9
+ 'organization',
10
+ 'location',
11
+ 'concept',
12
+ 'event',
13
+ 'object',
14
+ ];
15
+ const RELATION_TYPES = [
16
+ 'knows',
17
+ 'works_at',
18
+ 'located_in',
19
+ 'part_of',
20
+ 'related_to',
21
+ 'created_by',
22
+ 'belongs_to',
23
+ 'associated_with',
24
+ 'causes',
25
+ 'precedes',
26
+ ];
27
+ export class LLMEntityExtractor {
28
+ backend;
29
+ config;
30
+ constructor(backend, config = {}) {
31
+ this.backend = backend;
32
+ this.config = {
33
+ minConfidence: config.minConfidence ?? 0.7,
34
+ maxEntitiesPerText: config.maxEntitiesPerText ?? 20,
35
+ maxRelationsPerText: config.maxRelationsPerText ?? 30,
36
+ };
37
+ }
38
+ async extract(text, context) {
39
+ const systemPrompt = this.buildSystemPrompt(context);
40
+ const userPrompt = this.buildUserPrompt(text, context);
41
+ const response = await this.backend.chat({
42
+ messages: [
43
+ { role: 'system', content: systemPrompt },
44
+ { role: 'user', content: userPrompt },
45
+ ],
46
+ responseFormat: { type: 'json_object' },
47
+ });
48
+ const parsed = this.parseResponse(response.content);
49
+ const filteredEntities = parsed.entities
50
+ .filter((e) => e.confidence >= this.config.minConfidence)
51
+ .slice(0, this.config.maxEntitiesPerText);
52
+ const entityNames = new Set(filteredEntities.map((e) => e.name.toLowerCase()));
53
+ const filteredRelations = parsed.relations
54
+ .filter((r) => r.confidence >= this.config.minConfidence &&
55
+ entityNames.has(r.sourceEntity.toLowerCase()) &&
56
+ entityNames.has(r.targetEntity.toLowerCase()))
57
+ .slice(0, this.config.maxRelationsPerText);
58
+ return {
59
+ entities: filteredEntities,
60
+ relations: filteredRelations,
61
+ text,
62
+ timestamp: new Date(),
63
+ };
64
+ }
65
+ async extractBatch(texts, context) {
66
+ const results = [];
67
+ for (const text of texts) {
68
+ const result = await this.extract(text, context);
69
+ results.push(result);
70
+ }
71
+ return results;
72
+ }
73
+ buildSystemPrompt(context) {
74
+ const entityTypesStr = (context?.entityTypeHints ?? ENTITY_TYPES).join(', ');
75
+ const relationTypesStr = (context?.relationTypeHints ?? RELATION_TYPES).join(', ');
76
+ return `You are an entity and relationship extraction system. Your task is to extract structured information from text.
77
+
78
+ ## Entity Types
79
+ Extract entities of these types: ${entityTypesStr}
80
+
81
+ ## Relationship Types
82
+ Extract relationships of these types: ${relationTypesStr}
83
+
84
+ ## Output Format
85
+ Return a JSON object with this structure:
86
+ {
87
+ "entities": [
88
+ {
89
+ "name": "entity name",
90
+ "type": "person|organization|location|concept|event|object",
91
+ "aliases": ["alternative names"],
92
+ "description": "brief description",
93
+ "confidence": 0.0-1.0
94
+ }
95
+ ],
96
+ "relations": [
97
+ {
98
+ "sourceEntity": "source entity name",
99
+ "targetEntity": "target entity name",
100
+ "type": "knows|works_at|located_in|part_of|related_to|created_by|belongs_to|associated_with|causes|precedes",
101
+ "label": "optional relationship label",
102
+ "confidence": 0.0-1.0
103
+ }
104
+ ]
105
+ }
106
+
107
+ ## Guidelines
108
+ - Extract only explicitly mentioned or strongly implied entities and relationships
109
+ - Use confidence scores to indicate certainty (1.0 = certain, 0.5 = probable, 0.0 = uncertain)
110
+ - Normalize entity names (capitalize proper nouns, use full names when known)
111
+ - Include aliases for entities that are referred to in multiple ways
112
+ - Avoid duplicate entities (merge references to the same entity)
113
+ - For relationships, ensure both source and target entities are in the entities list`;
114
+ }
115
+ buildUserPrompt(text, context) {
116
+ let prompt = '';
117
+ if (context?.existingEntities && context.existingEntities.length > 0) {
118
+ prompt += `## Known Entities (for disambiguation)\n${context.existingEntities.join(', ')}\n\n`;
119
+ }
120
+ prompt += `## Text to Extract From\n${text}\n\n`;
121
+ prompt += `Extract all entities and relationships from the text above. Return JSON only.`;
122
+ return prompt;
123
+ }
124
+ parseResponse(content) {
125
+ try {
126
+ const cleaned = content.replace(/```json\n?|\n?```/g, '').trim();
127
+ const parsed = JSON.parse(cleaned);
128
+ const result = ExtractionOutputSchema.safeParse(parsed);
129
+ if (result.success) {
130
+ return result.data;
131
+ }
132
+ if (parsed.entities && Array.isArray(parsed.entities)) {
133
+ const entities = [];
134
+ for (const e of parsed.entities) {
135
+ const entityResult = ExtractedEntitySchema.safeParse(e);
136
+ if (entityResult.success) {
137
+ entities.push(entityResult.data);
138
+ }
139
+ }
140
+ const relations = [];
141
+ if (parsed.relations && Array.isArray(parsed.relations)) {
142
+ for (const r of parsed.relations) {
143
+ const relationResult = ExtractedRelationSchema.safeParse(r);
144
+ if (relationResult.success) {
145
+ relations.push(relationResult.data);
146
+ }
147
+ }
148
+ }
149
+ return { entities, relations };
150
+ }
151
+ return { entities: [], relations: [] };
152
+ }
153
+ catch {
154
+ return { entities: [], relations: [] };
155
+ }
156
+ }
157
+ }
158
+ //# sourceMappingURL=entity-extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-extractor.js","sourceRoot":"","sources":["../../src/knowledge-graph/entity-extractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import type { GraphAdapter, GraphNode, GraphEdge, NodeQuery, EdgeQuery, TraversalOptions, TraversalResult, GraphPath, GraphSemanticSearchOptions, GraphStats, MemoryResult, TraversalDirection } from '@cogitator-ai/types';
2
+ type Pool = {
3
+ query(text: string, values?: unknown[]): Promise<{
4
+ rows: Record<string, unknown>[];
5
+ }>;
6
+ connect(): Promise<{
7
+ release(): void;
8
+ }>;
9
+ end(): Promise<void>;
10
+ };
11
+ export interface PostgresGraphAdapterConfig {
12
+ pool: Pool;
13
+ schema?: string;
14
+ vectorDimensions?: number;
15
+ }
16
+ export declare class PostgresGraphAdapter implements GraphAdapter {
17
+ private pool;
18
+ private schema;
19
+ private vectorDimensions;
20
+ private initialized;
21
+ constructor(config: PostgresGraphAdapterConfig);
22
+ initialize(): Promise<void>;
23
+ private success;
24
+ private failure;
25
+ private generateId;
26
+ addNode(node: Omit<GraphNode, 'id' | 'createdAt' | 'updatedAt' | 'lastAccessedAt' | 'accessCount'>): Promise<MemoryResult<GraphNode>>;
27
+ getNode(nodeId: string): Promise<MemoryResult<GraphNode | null>>;
28
+ getNodeByName(agentId: string, name: string): Promise<MemoryResult<GraphNode | null>>;
29
+ updateNode(nodeId: string, updates: Partial<Pick<GraphNode, 'name' | 'aliases' | 'description' | 'properties' | 'confidence' | 'metadata' | 'embedding'>>): Promise<MemoryResult<GraphNode>>;
30
+ deleteNode(nodeId: string): Promise<MemoryResult<void>>;
31
+ queryNodes(query: NodeQuery): Promise<MemoryResult<GraphNode[]>>;
32
+ searchNodesSemantic(options: GraphSemanticSearchOptions): Promise<MemoryResult<(GraphNode & {
33
+ score: number;
34
+ })[]>>;
35
+ addEdge(edge: Omit<GraphEdge, 'id' | 'createdAt' | 'updatedAt'>): Promise<MemoryResult<GraphEdge>>;
36
+ getEdge(edgeId: string): Promise<MemoryResult<GraphEdge | null>>;
37
+ getEdgesBetween(sourceNodeId: string, targetNodeId: string): Promise<MemoryResult<GraphEdge[]>>;
38
+ updateEdge(edgeId: string, updates: Partial<Pick<GraphEdge, 'weight' | 'label' | 'properties' | 'confidence' | 'validFrom' | 'validUntil' | 'metadata'>>): Promise<MemoryResult<GraphEdge>>;
39
+ deleteEdge(edgeId: string): Promise<MemoryResult<void>>;
40
+ queryEdges(query: EdgeQuery): Promise<MemoryResult<GraphEdge[]>>;
41
+ traverse(options: TraversalOptions): Promise<MemoryResult<TraversalResult>>;
42
+ private traverseRecursive;
43
+ findShortestPath(agentId: string, startNodeId: string, endNodeId: string, maxDepth?: number): Promise<MemoryResult<GraphPath | null>>;
44
+ getNeighbors(nodeId: string, direction?: TraversalDirection): Promise<MemoryResult<{
45
+ node: GraphNode;
46
+ edge: GraphEdge;
47
+ }[]>>;
48
+ mergeNodes(targetNodeId: string, sourceNodeIds: string[]): Promise<MemoryResult<GraphNode>>;
49
+ clearGraph(agentId: string): Promise<MemoryResult<void>>;
50
+ getGraphStats(agentId: string): Promise<MemoryResult<GraphStats>>;
51
+ private rowToNode;
52
+ private rowToEdge;
53
+ private rowToEdgeFromJoin;
54
+ }
55
+ export {};
56
+ //# sourceMappingURL=graph-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-adapter.d.ts","sourceRoot":"","sources":["../../src/knowledge-graph/graph-adapter.ts"],"names":[],"mappings":"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"}