@bip-krishna/agentmind 0.1.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/.agentmind/memory.db +0 -0
- package/.context-memory/memory.db +0 -0
- package/README.md +176 -0
- package/apps/dashboard/src/server.ts +369 -0
- package/cli/src/index.ts +163 -0
- package/dist/apps/dashboard/src/server.d.ts +6 -0
- package/dist/apps/dashboard/src/server.d.ts.map +1 -0
- package/dist/apps/dashboard/src/server.js +360 -0
- package/dist/apps/dashboard/src/server.js.map +1 -0
- package/dist/cli/src/index.d.ts +3 -0
- package/dist/cli/src/index.d.ts.map +1 -0
- package/dist/cli/src/index.js +162 -0
- package/dist/cli/src/index.js.map +1 -0
- package/dist/examples/advanced.d.ts +2 -0
- package/dist/examples/advanced.d.ts.map +1 -0
- package/dist/examples/advanced.js +41 -0
- package/dist/examples/advanced.js.map +1 -0
- package/dist/examples/basic.d.ts +2 -0
- package/dist/examples/basic.d.ts.map +1 -0
- package/dist/examples/basic.js +22 -0
- package/dist/examples/basic.js.map +1 -0
- package/dist/packages/core/src/consolidation.d.ts +27 -0
- package/dist/packages/core/src/consolidation.d.ts.map +1 -0
- package/dist/packages/core/src/consolidation.js +97 -0
- package/dist/packages/core/src/consolidation.js.map +1 -0
- package/dist/packages/core/src/events.d.ts +18 -0
- package/dist/packages/core/src/events.d.ts.map +1 -0
- package/dist/packages/core/src/events.js +13 -0
- package/dist/packages/core/src/events.js.map +1 -0
- package/dist/packages/core/src/extraction.d.ts +32 -0
- package/dist/packages/core/src/extraction.d.ts.map +1 -0
- package/dist/packages/core/src/extraction.js +65 -0
- package/dist/packages/core/src/extraction.js.map +1 -0
- package/dist/packages/core/src/index.d.ts +10 -0
- package/dist/packages/core/src/index.d.ts.map +1 -0
- package/dist/packages/core/src/index.js +7 -0
- package/dist/packages/core/src/index.js.map +1 -0
- package/dist/packages/core/src/memory-store.d.ts +36 -0
- package/dist/packages/core/src/memory-store.d.ts.map +1 -0
- package/dist/packages/core/src/memory-store.js +2 -0
- package/dist/packages/core/src/memory-store.js.map +1 -0
- package/dist/packages/core/src/memory.d.ts +75 -0
- package/dist/packages/core/src/memory.d.ts.map +1 -0
- package/dist/packages/core/src/memory.js +402 -0
- package/dist/packages/core/src/memory.js.map +1 -0
- package/dist/packages/core/src/policy.d.ts +17 -0
- package/dist/packages/core/src/policy.d.ts.map +1 -0
- package/dist/packages/core/src/policy.js +22 -0
- package/dist/packages/core/src/policy.js.map +1 -0
- package/dist/packages/core/src/types.d.ts +102 -0
- package/dist/packages/core/src/types.d.ts.map +1 -0
- package/dist/packages/core/src/types.js +23 -0
- package/dist/packages/core/src/types.js.map +1 -0
- package/dist/packages/embeddings/src/index.d.ts +4 -0
- package/dist/packages/embeddings/src/index.d.ts.map +1 -0
- package/dist/packages/embeddings/src/index.js +4 -0
- package/dist/packages/embeddings/src/index.js.map +1 -0
- package/dist/packages/embeddings/src/local.d.ts +15 -0
- package/dist/packages/embeddings/src/local.d.ts.map +1 -0
- package/dist/packages/embeddings/src/local.js +45 -0
- package/dist/packages/embeddings/src/local.js.map +1 -0
- package/dist/packages/embeddings/src/openai.d.ts +17 -0
- package/dist/packages/embeddings/src/openai.d.ts.map +1 -0
- package/dist/packages/embeddings/src/openai.js +41 -0
- package/dist/packages/embeddings/src/openai.js.map +1 -0
- package/dist/packages/embeddings/src/provider.d.ts +8 -0
- package/dist/packages/embeddings/src/provider.d.ts.map +1 -0
- package/dist/packages/embeddings/src/provider.js +12 -0
- package/dist/packages/embeddings/src/provider.js.map +1 -0
- package/dist/packages/integrations/src/anthropic.d.ts +15 -0
- package/dist/packages/integrations/src/anthropic.d.ts.map +1 -0
- package/dist/packages/integrations/src/anthropic.js +25 -0
- package/dist/packages/integrations/src/anthropic.js.map +1 -0
- package/dist/packages/integrations/src/index.d.ts +4 -0
- package/dist/packages/integrations/src/index.d.ts.map +1 -0
- package/dist/packages/integrations/src/index.js +4 -0
- package/dist/packages/integrations/src/index.js.map +1 -0
- package/dist/packages/integrations/src/openai.d.ts +27 -0
- package/dist/packages/integrations/src/openai.d.ts.map +1 -0
- package/dist/packages/integrations/src/openai.js +26 -0
- package/dist/packages/integrations/src/openai.js.map +1 -0
- package/dist/packages/integrations/src/vercel.d.ts +24 -0
- package/dist/packages/integrations/src/vercel.d.ts.map +1 -0
- package/dist/packages/integrations/src/vercel.js +20 -0
- package/dist/packages/integrations/src/vercel.js.map +1 -0
- package/dist/packages/retrieval/src/index.d.ts +3 -0
- package/dist/packages/retrieval/src/index.d.ts.map +1 -0
- package/dist/packages/retrieval/src/index.js +3 -0
- package/dist/packages/retrieval/src/index.js.map +1 -0
- package/dist/packages/retrieval/src/ranker.d.ts +21 -0
- package/dist/packages/retrieval/src/ranker.d.ts.map +1 -0
- package/dist/packages/retrieval/src/ranker.js +54 -0
- package/dist/packages/retrieval/src/ranker.js.map +1 -0
- package/dist/packages/retrieval/src/token.d.ts +3 -0
- package/dist/packages/retrieval/src/token.d.ts.map +1 -0
- package/dist/packages/retrieval/src/token.js +7 -0
- package/dist/packages/retrieval/src/token.js.map +1 -0
- package/dist/packages/storage/src/config.d.ts +14 -0
- package/dist/packages/storage/src/config.d.ts.map +1 -0
- package/dist/packages/storage/src/config.js +41 -0
- package/dist/packages/storage/src/config.js.map +1 -0
- package/dist/packages/storage/src/index.d.ts +4 -0
- package/dist/packages/storage/src/index.d.ts.map +1 -0
- package/dist/packages/storage/src/index.js +4 -0
- package/dist/packages/storage/src/index.js.map +1 -0
- package/dist/packages/storage/src/memory-store.d.ts +37 -0
- package/dist/packages/storage/src/memory-store.d.ts.map +1 -0
- package/dist/packages/storage/src/memory-store.js +107 -0
- package/dist/packages/storage/src/memory-store.js.map +1 -0
- package/dist/packages/storage/src/migrations.d.ts +12 -0
- package/dist/packages/storage/src/migrations.d.ts.map +1 -0
- package/dist/packages/storage/src/migrations.js +89 -0
- package/dist/packages/storage/src/migrations.js.map +1 -0
- package/dist/packages/storage/src/postgres-store.d.ts +45 -0
- package/dist/packages/storage/src/postgres-store.d.ts.map +1 -0
- package/dist/packages/storage/src/postgres-store.js +282 -0
- package/dist/packages/storage/src/postgres-store.js.map +1 -0
- package/dist/packages/storage/src/sqlite-store.d.ts +36 -0
- package/dist/packages/storage/src/sqlite-store.d.ts.map +1 -0
- package/dist/packages/storage/src/sqlite-store.js +243 -0
- package/dist/packages/storage/src/sqlite-store.js.map +1 -0
- package/examples/advanced.ts +46 -0
- package/examples/basic.ts +25 -0
- package/package.json +52 -0
- package/packages/core/package.json +13 -0
- package/packages/core/src/consolidation.ts +104 -0
- package/packages/core/src/events.ts +25 -0
- package/packages/core/src/extraction.ts +81 -0
- package/packages/core/src/index.ts +22 -0
- package/packages/core/src/memory-store.ts +50 -0
- package/packages/core/src/memory.ts +447 -0
- package/packages/core/src/policy.ts +36 -0
- package/packages/core/src/types.ts +119 -0
- package/packages/core/tsconfig.json +6 -0
- package/packages/embeddings/package.json +9 -0
- package/packages/embeddings/src/index.ts +3 -0
- package/packages/embeddings/src/local.ts +47 -0
- package/packages/embeddings/src/openai.ts +50 -0
- package/packages/embeddings/src/provider.d.ts.map +1 -0
- package/packages/embeddings/src/provider.js.map +1 -0
- package/packages/embeddings/src/provider.ts +17 -0
- package/packages/embeddings/tsconfig.json +6 -0
- package/packages/integrations/package.json +7 -0
- package/packages/integrations/src/anthropic.ts +34 -0
- package/packages/integrations/src/index.ts +3 -0
- package/packages/integrations/src/openai.ts +52 -0
- package/packages/integrations/src/vercel.ts +26 -0
- package/packages/retrieval/package.json +8 -0
- package/packages/retrieval/src/index.ts +2 -0
- package/packages/retrieval/src/ranker.d.ts.map +1 -0
- package/packages/retrieval/src/ranker.js.map +1 -0
- package/packages/retrieval/src/ranker.ts +77 -0
- package/packages/retrieval/src/token.d.ts.map +1 -0
- package/packages/retrieval/src/token.js.map +1 -0
- package/packages/retrieval/src/token.ts +5 -0
- package/packages/retrieval/tsconfig.json +6 -0
- package/packages/storage/package.json +11 -0
- package/packages/storage/src/config.ts +44 -0
- package/packages/storage/src/index.ts +3 -0
- package/packages/storage/src/memory-store.ts +100 -0
- package/packages/storage/src/migrations.ts +96 -0
- package/packages/storage/src/postgres-store.ts +299 -0
- package/packages/storage/src/sqlite-store.ts +298 -0
- package/packages/storage/tsconfig.json +6 -0
- package/test-mvp.mjs +82 -0
- package/tests/consolidation.test.ts +45 -0
- package/tests/eval.test.ts +102 -0
- package/tsconfig.json +21 -0
- package/vitest.config.ts +8 -0
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const MemoryTypeSchema: z.ZodEnum<["fact", "preference", "decision", "event", "knowledge", "procedure", "task", "summary"]>;
|
|
3
|
+
export type MemoryType = z.infer<typeof MemoryTypeSchema>;
|
|
4
|
+
export declare const MemoryStatusSchema: z.ZodEnum<["active", "superseded", "archived"]>;
|
|
5
|
+
export type MemoryStatus = z.infer<typeof MemoryStatusSchema>;
|
|
6
|
+
export interface Memory {
|
|
7
|
+
id: string;
|
|
8
|
+
projectId: string;
|
|
9
|
+
type: MemoryType;
|
|
10
|
+
content: string;
|
|
11
|
+
embedding?: number[];
|
|
12
|
+
importance: number;
|
|
13
|
+
confidence: number;
|
|
14
|
+
status: MemoryStatus;
|
|
15
|
+
createdAt: Date;
|
|
16
|
+
updatedAt: Date;
|
|
17
|
+
lastAccessedAt?: Date;
|
|
18
|
+
accessCount: number;
|
|
19
|
+
sourceId?: string;
|
|
20
|
+
metadata: Record<string, unknown>;
|
|
21
|
+
archived: boolean;
|
|
22
|
+
}
|
|
23
|
+
export interface Project {
|
|
24
|
+
id: string;
|
|
25
|
+
name: string;
|
|
26
|
+
description?: string;
|
|
27
|
+
createdAt: Date;
|
|
28
|
+
updatedAt: Date;
|
|
29
|
+
}
|
|
30
|
+
export type SourceType = "conversation" | "document" | "tool" | "manual";
|
|
31
|
+
export interface Source {
|
|
32
|
+
id: string;
|
|
33
|
+
projectId: string;
|
|
34
|
+
type: SourceType;
|
|
35
|
+
content?: string;
|
|
36
|
+
createdAt: Date;
|
|
37
|
+
metadata: Record<string, unknown>;
|
|
38
|
+
}
|
|
39
|
+
export interface RetrievalEvent {
|
|
40
|
+
id: string;
|
|
41
|
+
projectId: string;
|
|
42
|
+
query: string;
|
|
43
|
+
retrievedMemoryIds: string[];
|
|
44
|
+
scores: Record<string, number>;
|
|
45
|
+
finalContextTokens: number;
|
|
46
|
+
createdAt: Date;
|
|
47
|
+
}
|
|
48
|
+
export interface SearchQuery {
|
|
49
|
+
projectId: string;
|
|
50
|
+
query: string;
|
|
51
|
+
types?: MemoryType[];
|
|
52
|
+
limit?: number;
|
|
53
|
+
minImportance?: number;
|
|
54
|
+
includeArchived?: boolean;
|
|
55
|
+
}
|
|
56
|
+
export interface CandidateMemory extends Memory {
|
|
57
|
+
semanticScore: number;
|
|
58
|
+
keywordScore: number;
|
|
59
|
+
finalScore: number;
|
|
60
|
+
}
|
|
61
|
+
export interface SearchResult {
|
|
62
|
+
memory: Memory;
|
|
63
|
+
score: number;
|
|
64
|
+
semanticScore: number;
|
|
65
|
+
keywordScore: number;
|
|
66
|
+
}
|
|
67
|
+
export interface ContextOptions {
|
|
68
|
+
query: string;
|
|
69
|
+
maxTokens?: number;
|
|
70
|
+
limit?: number;
|
|
71
|
+
types?: MemoryType[];
|
|
72
|
+
}
|
|
73
|
+
export interface ContextResult {
|
|
74
|
+
memories: Memory[];
|
|
75
|
+
text: string;
|
|
76
|
+
tokenCount: number;
|
|
77
|
+
sources: string[];
|
|
78
|
+
}
|
|
79
|
+
export declare const CreateMemoryInputSchema: z.ZodObject<{
|
|
80
|
+
type: z.ZodDefault<z.ZodEnum<["fact", "preference", "decision", "event", "knowledge", "procedure", "task", "summary"]>>;
|
|
81
|
+
content: z.ZodString;
|
|
82
|
+
importance: z.ZodDefault<z.ZodNumber>;
|
|
83
|
+
confidence: z.ZodDefault<z.ZodNumber>;
|
|
84
|
+
sourceId: z.ZodOptional<z.ZodString>;
|
|
85
|
+
metadata: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
86
|
+
}, "strip", z.ZodTypeAny, {
|
|
87
|
+
type: "fact" | "preference" | "decision" | "event" | "knowledge" | "procedure" | "task" | "summary";
|
|
88
|
+
content: string;
|
|
89
|
+
importance: number;
|
|
90
|
+
confidence: number;
|
|
91
|
+
metadata: Record<string, unknown>;
|
|
92
|
+
sourceId?: string | undefined;
|
|
93
|
+
}, {
|
|
94
|
+
content: string;
|
|
95
|
+
type?: "fact" | "preference" | "decision" | "event" | "knowledge" | "procedure" | "task" | "summary" | undefined;
|
|
96
|
+
importance?: number | undefined;
|
|
97
|
+
confidence?: number | undefined;
|
|
98
|
+
sourceId?: string | undefined;
|
|
99
|
+
metadata?: Record<string, unknown> | undefined;
|
|
100
|
+
}>;
|
|
101
|
+
export type CreateMemoryInput = z.infer<typeof CreateMemoryInputSchema>;
|
|
102
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../packages/core/src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
// ---------- Memory types ----------
|
|
3
|
+
export const MemoryTypeSchema = z.enum([
|
|
4
|
+
"fact",
|
|
5
|
+
"preference",
|
|
6
|
+
"decision",
|
|
7
|
+
"event",
|
|
8
|
+
"knowledge",
|
|
9
|
+
"procedure",
|
|
10
|
+
"task",
|
|
11
|
+
"summary",
|
|
12
|
+
]);
|
|
13
|
+
export const MemoryStatusSchema = z.enum(["active", "superseded", "archived"]);
|
|
14
|
+
// ---------- Validation schemas ----------
|
|
15
|
+
export const CreateMemoryInputSchema = z.object({
|
|
16
|
+
type: MemoryTypeSchema.default("fact"),
|
|
17
|
+
content: z.string().min(1).max(10000),
|
|
18
|
+
importance: z.number().min(0).max(1).default(0.5),
|
|
19
|
+
confidence: z.number().min(0).max(1).default(1),
|
|
20
|
+
sourceId: z.string().optional(),
|
|
21
|
+
metadata: z.record(z.unknown()).default({}),
|
|
22
|
+
});
|
|
23
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../packages/core/src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,qCAAqC;AAErC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC;IACrC,MAAM;IACN,YAAY;IACZ,UAAU;IACV,OAAO;IACP,WAAW;IACX,WAAW;IACX,MAAM;IACN,SAAS;CACV,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC;AA0F/E,2CAA2C;AAE3C,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,IAAI,EAAE,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC;IACtC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;IACrC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;IACjD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CAC5C,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/embeddings/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/embeddings/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { EmbeddingProvider } from "./provider.js";
|
|
2
|
+
/**
|
|
3
|
+
* Deterministic, zero-dependency local embedding for tests / offline dev.
|
|
4
|
+
* Hashing trick: char n-grams -> fixed dimensions, L2-normalized.
|
|
5
|
+
* NOT suitable for production quality but ensures storage contract works without API keys.
|
|
6
|
+
*/
|
|
7
|
+
export declare class LocalEmbeddingProvider implements EmbeddingProvider {
|
|
8
|
+
readonly model = "local-hash-v1";
|
|
9
|
+
readonly dimensions: number;
|
|
10
|
+
constructor(dimensions?: number);
|
|
11
|
+
embed(text: string): Promise<number[]>;
|
|
12
|
+
embedBatch(texts: string[]): Promise<number[][]>;
|
|
13
|
+
private hashEmbed;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=local.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../../../packages/embeddings/src/local.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEvD;;;;GAIG;AACH,qBAAa,sBAAuB,YAAW,iBAAiB;IAC9D,QAAQ,CAAC,KAAK,mBAAmB;IACjC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;gBAEhB,UAAU,SAAM;IAItB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAItC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IAItD,OAAO,CAAC,SAAS;CAuBlB"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deterministic, zero-dependency local embedding for tests / offline dev.
|
|
3
|
+
* Hashing trick: char n-grams -> fixed dimensions, L2-normalized.
|
|
4
|
+
* NOT suitable for production quality but ensures storage contract works without API keys.
|
|
5
|
+
*/
|
|
6
|
+
export class LocalEmbeddingProvider {
|
|
7
|
+
model = "local-hash-v1";
|
|
8
|
+
dimensions;
|
|
9
|
+
constructor(dimensions = 256) {
|
|
10
|
+
this.dimensions = dimensions;
|
|
11
|
+
}
|
|
12
|
+
async embed(text) {
|
|
13
|
+
return this.hashEmbed(text);
|
|
14
|
+
}
|
|
15
|
+
async embedBatch(texts) {
|
|
16
|
+
return texts.map((t) => this.hashEmbed(t));
|
|
17
|
+
}
|
|
18
|
+
hashEmbed(text) {
|
|
19
|
+
const vec = new Array(this.dimensions).fill(0);
|
|
20
|
+
const normalized = text.toLowerCase();
|
|
21
|
+
// char trigrams
|
|
22
|
+
for (let i = 0; i < normalized.length; i++) {
|
|
23
|
+
const trigram = normalized.slice(i, i + 3);
|
|
24
|
+
if (!trigram)
|
|
25
|
+
continue;
|
|
26
|
+
let hash = 0;
|
|
27
|
+
for (let j = 0; j < trigram.length; j++)
|
|
28
|
+
hash = (hash * 31 + trigram.charCodeAt(j)) >>> 0;
|
|
29
|
+
const idx = hash % this.dimensions;
|
|
30
|
+
vec[idx] += 1;
|
|
31
|
+
}
|
|
32
|
+
// token-level boost
|
|
33
|
+
for (const tok of normalized.split(/\W+/).filter(Boolean)) {
|
|
34
|
+
let hash = 0;
|
|
35
|
+
for (let j = 0; j < tok.length; j++)
|
|
36
|
+
hash = (hash * 131 + tok.charCodeAt(j)) >>> 0;
|
|
37
|
+
const idx = (hash * 7) % this.dimensions;
|
|
38
|
+
vec[idx] += 2;
|
|
39
|
+
}
|
|
40
|
+
// L2 normalize
|
|
41
|
+
const norm = Math.sqrt(vec.reduce((s, v) => s + v * v, 0)) || 1;
|
|
42
|
+
return vec.map((v) => v / norm);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=local.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local.js","sourceRoot":"","sources":["../../../../packages/embeddings/src/local.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,OAAO,sBAAsB;IACxB,KAAK,GAAG,eAAe,CAAC;IACxB,UAAU,CAAS;IAE5B,YAAY,UAAU,GAAG,GAAG;QAC1B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAY;QACtB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAAe;QAC9B,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;IAEO,SAAS,CAAC,IAAY;QAC5B,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACtC,gBAAgB;QAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3C,IAAI,CAAC,OAAO;gBAAE,SAAS;YACvB,IAAI,IAAI,GAAG,CAAC,CAAC;YACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE;gBAAE,IAAI,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAC1F,MAAM,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC;YACnC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC;QACD,oBAAoB;QACpB,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1D,IAAI,IAAI,GAAG,CAAC,CAAC;YACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE;gBAAE,IAAI,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACnF,MAAM,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;YACzC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC;QACD,eAAe;QACf,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAChE,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAClC,CAAC;CACF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { EmbeddingProvider } from "./provider.js";
|
|
2
|
+
export interface OpenAIEmbeddingOptions {
|
|
3
|
+
apiKey: string;
|
|
4
|
+
model?: string;
|
|
5
|
+
dimensions?: number;
|
|
6
|
+
baseURL?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare class OpenAIEmbeddingProvider implements EmbeddingProvider {
|
|
9
|
+
readonly model: string;
|
|
10
|
+
readonly dimensions: number;
|
|
11
|
+
private apiKey;
|
|
12
|
+
private baseURL;
|
|
13
|
+
constructor(opts: OpenAIEmbeddingOptions);
|
|
14
|
+
embed(text: string): Promise<number[]>;
|
|
15
|
+
embedBatch(texts: string[]): Promise<number[][]>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=openai.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../../packages/embeddings/src/openai.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEvD,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,uBAAwB,YAAW,iBAAiB;IAC/D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;gBAEZ,IAAI,EAAE,sBAAsB;IAOlC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IActC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;CAavD"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export class OpenAIEmbeddingProvider {
|
|
2
|
+
model;
|
|
3
|
+
dimensions;
|
|
4
|
+
apiKey;
|
|
5
|
+
baseURL;
|
|
6
|
+
constructor(opts) {
|
|
7
|
+
this.apiKey = opts.apiKey;
|
|
8
|
+
this.model = opts.model ?? "text-embedding-3-small";
|
|
9
|
+
this.dimensions = opts.dimensions ?? 1536;
|
|
10
|
+
this.baseURL = opts.baseURL ?? "https://api.openai.com/v1";
|
|
11
|
+
}
|
|
12
|
+
async embed(text) {
|
|
13
|
+
const res = await fetch(`${this.baseURL}/embeddings`, {
|
|
14
|
+
method: "POST",
|
|
15
|
+
headers: {
|
|
16
|
+
"Content-Type": "application/json",
|
|
17
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
18
|
+
},
|
|
19
|
+
body: JSON.stringify({ model: this.model, input: text }),
|
|
20
|
+
});
|
|
21
|
+
if (!res.ok)
|
|
22
|
+
throw new Error(`OpenAI embed failed: ${res.status} ${await res.text()}`);
|
|
23
|
+
const data = (await res.json());
|
|
24
|
+
return data.data[0].embedding;
|
|
25
|
+
}
|
|
26
|
+
async embedBatch(texts) {
|
|
27
|
+
const res = await fetch(`${this.baseURL}/embeddings`, {
|
|
28
|
+
method: "POST",
|
|
29
|
+
headers: {
|
|
30
|
+
"Content-Type": "application/json",
|
|
31
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
32
|
+
},
|
|
33
|
+
body: JSON.stringify({ model: this.model, input: texts }),
|
|
34
|
+
});
|
|
35
|
+
if (!res.ok)
|
|
36
|
+
throw new Error(`OpenAI embedBatch failed: ${res.status} ${await res.text()}`);
|
|
37
|
+
const data = (await res.json());
|
|
38
|
+
return data.data.sort((a, b) => a.index - b.index).map((d) => d.embedding);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=openai.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../../packages/embeddings/src/openai.ts"],"names":[],"mappings":"AASA,MAAM,OAAO,uBAAuB;IACzB,KAAK,CAAS;IACd,UAAU,CAAS;IACpB,MAAM,CAAS;IACf,OAAO,CAAS;IAExB,YAAY,IAA4B;QACtC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,wBAAwB,CAAC;QACpD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC;QAC1C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,2BAA2B,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAY;QACtB,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,aAAa,EAAE;YACpD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;aACvC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;SACzD,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,CAAC,MAAM,IAAI,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACvF,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAQ,CAAC;QACvC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAqB,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAAe;QAC9B,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,aAAa,EAAE;YACpD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;aACvC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;SAC1D,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAG,CAAC,MAAM,IAAI,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC5F,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAQ,CAAC;QACvC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC5F,CAAC;CACF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface EmbeddingProvider {
|
|
2
|
+
readonly model: string;
|
|
3
|
+
readonly dimensions: number;
|
|
4
|
+
embed(text: string): Promise<number[]>;
|
|
5
|
+
embedBatch(texts: string[]): Promise<number[][]>;
|
|
6
|
+
}
|
|
7
|
+
export declare function cosineSimilarity(a: number[], b: number[]): number;
|
|
8
|
+
//# sourceMappingURL=provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../../packages/embeddings/src/provider.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACvC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;CAClD;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CASjE"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export function cosineSimilarity(a, b) {
|
|
2
|
+
let dot = 0, na = 0, nb = 0;
|
|
3
|
+
for (let i = 0; i < a.length; i++) {
|
|
4
|
+
dot += a[i] * b[i];
|
|
5
|
+
na += a[i] * a[i];
|
|
6
|
+
nb += b[i] * b[i];
|
|
7
|
+
}
|
|
8
|
+
if (na === 0 || nb === 0)
|
|
9
|
+
return 0;
|
|
10
|
+
return dot / (Math.sqrt(na) * Math.sqrt(nb));
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../../packages/embeddings/src/provider.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,gBAAgB,CAAC,CAAW,EAAE,CAAW;IACvD,IAAI,GAAG,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACnB,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAClB,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IACD,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACnC,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { MemoryEngine } from "../../core/src/memory.js";
|
|
2
|
+
import type { ChatMessage } from "./openai.js";
|
|
3
|
+
export interface AnthropicWithMemoryOptions {
|
|
4
|
+
memory: MemoryEngine;
|
|
5
|
+
messages: ChatMessage[];
|
|
6
|
+
callLLM: (messages: ChatMessage[]) => Promise<string>;
|
|
7
|
+
extract?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare function withAnthropicMemory(opts: AnthropicWithMemoryOptions): Promise<{
|
|
10
|
+
response: string;
|
|
11
|
+
context: string;
|
|
12
|
+
memories: any[];
|
|
13
|
+
}>;
|
|
14
|
+
export declare function createAnthropicCaller(anthropic: any, model: string): (messages: ChatMessage[]) => Promise<string>;
|
|
15
|
+
//# sourceMappingURL=anthropic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../../packages/integrations/src/anthropic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,OAAO,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACtD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,0BAA0B;;;;GAczE;AAED,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,IACnD,UAAU,WAAW,EAAE,qBAMtC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export async function withAnthropicMemory(opts) {
|
|
2
|
+
const lastUser = [...opts.messages].reverse().find((m) => m.role === "user");
|
|
3
|
+
const query = lastUser?.content ?? opts.messages.map((m) => m.content).join("\n").slice(-500);
|
|
4
|
+
const ctx = await opts.memory.context({ query, maxTokens: 4000 });
|
|
5
|
+
const system = ctx.text ? ctx.text : undefined;
|
|
6
|
+
// Anthropic separates system; we prepend as system if provided
|
|
7
|
+
const augmented = system ? [{ role: "system", content: system }, ...opts.messages.filter((m) => m.role !== "system")] : opts.messages;
|
|
8
|
+
const response = await opts.callLLM(augmented);
|
|
9
|
+
let memories = [];
|
|
10
|
+
if (opts.extract !== false) {
|
|
11
|
+
const ingested = await opts.memory.ingest({ role: "assistant", content: response });
|
|
12
|
+
if (ingested.extracted)
|
|
13
|
+
memories = ingested.extracted;
|
|
14
|
+
}
|
|
15
|
+
return { response, context: ctx.text, memories };
|
|
16
|
+
}
|
|
17
|
+
export function createAnthropicCaller(anthropic, model) {
|
|
18
|
+
return async (messages) => {
|
|
19
|
+
const system = messages.find((m) => m.role === "system")?.content;
|
|
20
|
+
const rest = messages.filter((m) => m.role !== "system").map((m) => ({ role: m.role, content: m.content }));
|
|
21
|
+
const res = await anthropic.messages.create({ model, max_tokens: 1024, system, messages: rest });
|
|
22
|
+
return res.content[0].text;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=anthropic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../../../packages/integrations/src/anthropic.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,IAAgC;IACxE,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;IAC7E,MAAM,KAAK,GAAG,QAAQ,EAAE,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;IAC9F,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClE,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/C,+DAA+D;IAC/D,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAiB,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC/I,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC/C,IAAI,QAAQ,GAAU,EAAE,CAAC;IACzB,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QACpF,IAAI,QAAQ,CAAC,SAAS;YAAE,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC;IACxD,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,SAAc,EAAE,KAAa;IACjE,OAAO,KAAK,EAAE,QAAuB,EAAE,EAAE;QACvC,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,EAAE,OAAO,CAAC;QAClE,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC5G,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACjG,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAc,CAAC;IACvC,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/integrations/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/integrations/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { MemoryEngine } from "../../core/src/memory.js";
|
|
2
|
+
/**
|
|
3
|
+
* OpenAI integration — automates retrieve -> context -> LLM -> extract -> store
|
|
4
|
+
* Usage:
|
|
5
|
+
* import { withMemory } from "@agentmind/integrations/openai";
|
|
6
|
+
* const res = await withMemory({ memory, messages, openai, model: "gpt-4o" });
|
|
7
|
+
*/
|
|
8
|
+
export interface ChatMessage {
|
|
9
|
+
role: "system" | "user" | "assistant" | "tool";
|
|
10
|
+
content: string;
|
|
11
|
+
}
|
|
12
|
+
export interface WithMemoryOptions {
|
|
13
|
+
memory: MemoryEngine;
|
|
14
|
+
messages: ChatMessage[];
|
|
15
|
+
callLLM: (messages: ChatMessage[]) => Promise<string>;
|
|
16
|
+
extract?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export declare function withMemory(opts: WithMemoryOptions): Promise<{
|
|
19
|
+
response: string;
|
|
20
|
+
context: string;
|
|
21
|
+
memories: any[];
|
|
22
|
+
}>;
|
|
23
|
+
/** Helper for OpenAI SDK users */
|
|
24
|
+
export declare function createOpenAICaller(openai: any, model: string, opts?: {
|
|
25
|
+
temperature?: number;
|
|
26
|
+
}): (messages: ChatMessage[]) => Promise<string>;
|
|
27
|
+
//# sourceMappingURL=openai.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../../packages/integrations/src/openai.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE7D;;;;;GAKG;AAEH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;IAC/C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,EAAE,WAAW,EAAE,CAAC;IAExB,OAAO,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAEtD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,GAAG,EAAE,CAAA;CAAE,CAAC,CAoBzH;AAED,kCAAkC;AAClC,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,IAC9E,UAAU,WAAW,EAAE,qBAItC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export async function withMemory(opts) {
|
|
2
|
+
const lastUser = [...opts.messages].reverse().find((m) => m.role === "user");
|
|
3
|
+
const query = lastUser?.content ?? opts.messages.map((m) => m.content).join("\n").slice(-500);
|
|
4
|
+
const ctx = await opts.memory.context({ query, maxTokens: 4000 });
|
|
5
|
+
const augmented = ctx.text
|
|
6
|
+
? [{ role: "system", content: ctx.text }, ...opts.messages]
|
|
7
|
+
: [...opts.messages];
|
|
8
|
+
const response = await opts.callLLM(augmented);
|
|
9
|
+
let memories = [];
|
|
10
|
+
if (opts.extract !== false) {
|
|
11
|
+
// Use memory's extractor if available via ingest
|
|
12
|
+
const ingested = await opts.memory.ingest({ role: "assistant", content: response });
|
|
13
|
+
// If autoExtract is enabled, ingest already extracted; otherwise manually remember key facts via heuristic
|
|
14
|
+
if (ingested.extracted)
|
|
15
|
+
memories = ingested.extracted;
|
|
16
|
+
}
|
|
17
|
+
return { response, context: ctx.text, memories };
|
|
18
|
+
}
|
|
19
|
+
/** Helper for OpenAI SDK users */
|
|
20
|
+
export function createOpenAICaller(openai, model, opts) {
|
|
21
|
+
return async (messages) => {
|
|
22
|
+
const res = await openai.chat.completions.create({ model, messages, temperature: opts?.temperature ?? 0.7 });
|
|
23
|
+
return res.choices[0].message.content;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=openai.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../../packages/integrations/src/openai.ts"],"names":[],"mappings":"AAuBA,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAuB;IACtD,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;IAC7E,MAAM,KAAK,GAAG,QAAQ,EAAE,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;IAE9F,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClE,MAAM,SAAS,GAAkB,GAAG,CAAC,IAAI;QACvC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC3D,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IAEvB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAE/C,IAAI,QAAQ,GAAU,EAAE,CAAC;IACzB,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;QAC3B,iDAAiD;QACjD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QACpF,2GAA2G;QAC3G,IAAI,QAAQ,CAAC,SAAS;YAAE,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC;IACxD,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC;AACnD,CAAC;AAED,kCAAkC;AAClC,MAAM,UAAU,kBAAkB,CAAC,MAAW,EAAE,KAAa,EAAE,IAA+B;IAC5F,OAAO,KAAK,EAAE,QAAuB,EAAE,EAAE;QACvC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,IAAI,GAAG,EAAE,CAAC,CAAC;QAC7G,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAiB,CAAC;IAClD,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { MemoryEngine } from "../../core/src/memory.js";
|
|
2
|
+
/**
|
|
3
|
+
* Vercel AI SDK integration
|
|
4
|
+
* Example:
|
|
5
|
+
* import { withMemoryAISDK } from "@agentmind/integrations/vercel";
|
|
6
|
+
* const { text } = await withMemoryAISDK({ memory, prompt, generateText });
|
|
7
|
+
*/
|
|
8
|
+
export declare function withMemoryAISDK(opts: {
|
|
9
|
+
memory: MemoryEngine;
|
|
10
|
+
prompt: string;
|
|
11
|
+
generateText: (prompt: string, system?: string) => Promise<string>;
|
|
12
|
+
}): Promise<{
|
|
13
|
+
text: string;
|
|
14
|
+
context: string;
|
|
15
|
+
}>;
|
|
16
|
+
export declare function withLangChainMemory(opts: {
|
|
17
|
+
memory: MemoryEngine;
|
|
18
|
+
input: string;
|
|
19
|
+
callChain: (input: string, context: string) => Promise<string>;
|
|
20
|
+
}): Promise<{
|
|
21
|
+
output: string;
|
|
22
|
+
context: string;
|
|
23
|
+
}>;
|
|
24
|
+
//# sourceMappingURL=vercel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vercel.d.ts","sourceRoot":"","sources":["../../../../packages/integrations/src/vercel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE7D;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE;IAC1C,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CACpE,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAK7C;AAGD,wBAAsB,mBAAmB,CAAC,IAAI,EAAE;IAAE,MAAM,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;CAAE;;;GAKtJ"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vercel AI SDK integration
|
|
3
|
+
* Example:
|
|
4
|
+
* import { withMemoryAISDK } from "@agentmind/integrations/vercel";
|
|
5
|
+
* const { text } = await withMemoryAISDK({ memory, prompt, generateText });
|
|
6
|
+
*/
|
|
7
|
+
export async function withMemoryAISDK(opts) {
|
|
8
|
+
const ctx = await opts.memory.context({ query: opts.prompt, maxTokens: 4000 });
|
|
9
|
+
const text = await opts.generateText(opts.prompt, ctx.text || undefined);
|
|
10
|
+
await opts.memory.ingest({ role: "assistant", content: text });
|
|
11
|
+
return { text, context: ctx.text };
|
|
12
|
+
}
|
|
13
|
+
// LangChain adapter stub
|
|
14
|
+
export async function withLangChainMemory(opts) {
|
|
15
|
+
const ctx = await opts.memory.context({ query: opts.input });
|
|
16
|
+
const output = await opts.callChain(opts.input, ctx.text);
|
|
17
|
+
await opts.memory.ingest({ role: "assistant", content: output });
|
|
18
|
+
return { output, context: ctx.text };
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=vercel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vercel.js","sourceRoot":"","sources":["../../../../packages/integrations/src/vercel.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAIrC;IACC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/E,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC;IACzE,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;AACrC,CAAC;AAED,yBAAyB;AACzB,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,IAA6G;IACrJ,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IAC1D,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IACjE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;AACvC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/retrieval/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/retrieval/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Memory } from "../../core/src/types.js";
|
|
2
|
+
export interface RankerWeights {
|
|
3
|
+
semantic: number;
|
|
4
|
+
keyword: number;
|
|
5
|
+
importance: number;
|
|
6
|
+
recency: number;
|
|
7
|
+
}
|
|
8
|
+
export interface RankedItem {
|
|
9
|
+
memory: Memory;
|
|
10
|
+
score: number;
|
|
11
|
+
semanticScore: number;
|
|
12
|
+
keywordScore: number;
|
|
13
|
+
}
|
|
14
|
+
export declare class HybridRanker {
|
|
15
|
+
weights: RankerWeights;
|
|
16
|
+
constructor(weights?: Partial<RankerWeights>);
|
|
17
|
+
rank(memories: Array<Memory & {
|
|
18
|
+
_vec?: number[];
|
|
19
|
+
}>, query: string, queryVec?: number[]): RankedItem[];
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=ranker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ranker.d.ts","sourceRoot":"","sources":["../../../../packages/retrieval/src/ranker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAEtD,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;CACtB;AAqBD,qBAAa,YAAY;IACvB,OAAO,EAAE,aAAa,CAAC;gBAEX,OAAO,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC;IAS5C,IAAI,CACF,QAAQ,EAAE,KAAK,CAAC,MAAM,GAAG;QAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,EAC7C,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM,EAAE,GAClB,UAAU,EAAE;CAwBhB"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { cosineSimilarity } from "../../embeddings/src/provider.js";
|
|
2
|
+
function keywordScore(query, content) {
|
|
3
|
+
const qTokens = new Set(query.toLowerCase().split(/\W+/).filter(Boolean));
|
|
4
|
+
const cTokens = content.toLowerCase().split(/\W+/).filter(Boolean);
|
|
5
|
+
if (qTokens.size === 0)
|
|
6
|
+
return 0;
|
|
7
|
+
let hits = 0;
|
|
8
|
+
for (const t of cTokens)
|
|
9
|
+
if (qTokens.has(t))
|
|
10
|
+
hits++;
|
|
11
|
+
// exact phrase boost
|
|
12
|
+
const phrase = query.toLowerCase().trim();
|
|
13
|
+
const phraseBoost = content.toLowerCase().includes(phrase) ? 0.3 : 0;
|
|
14
|
+
return Math.min(1, hits / qTokens.size + phraseBoost);
|
|
15
|
+
}
|
|
16
|
+
function recencyScore(mem) {
|
|
17
|
+
const ageMs = Date.now() - new Date(mem.updatedAt).getTime();
|
|
18
|
+
const days = ageMs / (1000 * 60 * 60 * 24);
|
|
19
|
+
// exponential decay, half-life ~30 days
|
|
20
|
+
return Math.exp(-days / 30);
|
|
21
|
+
}
|
|
22
|
+
export class HybridRanker {
|
|
23
|
+
weights;
|
|
24
|
+
constructor(weights) {
|
|
25
|
+
this.weights = {
|
|
26
|
+
semantic: weights?.semantic ?? 0.6,
|
|
27
|
+
keyword: weights?.keyword ?? 0.2,
|
|
28
|
+
importance: weights?.importance ?? 0.1,
|
|
29
|
+
recency: weights?.recency ?? 0.1,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
rank(memories, query, queryVec) {
|
|
33
|
+
const scored = memories.map((m) => {
|
|
34
|
+
const semantic = queryVec && m._vec ? (cosineSimilarity(queryVec, m._vec) + 1) / 2 : 0; // normalize -1..1 -> 0..1
|
|
35
|
+
const kw = keywordScore(query, m.content);
|
|
36
|
+
const imp = m.importance;
|
|
37
|
+
const rec = recencyScore(m);
|
|
38
|
+
const finalScore = semantic * this.weights.semantic +
|
|
39
|
+
kw * this.weights.keyword +
|
|
40
|
+
imp * this.weights.importance +
|
|
41
|
+
rec * this.weights.recency;
|
|
42
|
+
return {
|
|
43
|
+
memory: m,
|
|
44
|
+
score: finalScore,
|
|
45
|
+
semanticScore: semantic,
|
|
46
|
+
keywordScore: kw,
|
|
47
|
+
};
|
|
48
|
+
});
|
|
49
|
+
// If no query vectors, keyword+importance+recency still ranks
|
|
50
|
+
scored.sort((a, b) => b.score - a.score);
|
|
51
|
+
return scored;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=ranker.js.map
|