@cogitator-ai/memory 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/LICENSE +21 -0
- package/README.md +89 -0
- package/dist/__tests__/context-builder.test.d.ts +2 -0
- package/dist/__tests__/context-builder.test.d.ts.map +1 -0
- package/dist/__tests__/context-builder.test.js +139 -0
- package/dist/__tests__/context-builder.test.js.map +1 -0
- package/dist/__tests__/memory-adapter.test.d.ts +2 -0
- package/dist/__tests__/memory-adapter.test.d.ts.map +1 -0
- package/dist/__tests__/memory-adapter.test.js +236 -0
- package/dist/__tests__/memory-adapter.test.js.map +1 -0
- package/dist/__tests__/token-counter.test.d.ts +2 -0
- package/dist/__tests__/token-counter.test.d.ts.map +1 -0
- package/dist/__tests__/token-counter.test.js +56 -0
- package/dist/__tests__/token-counter.test.js.map +1 -0
- package/dist/adapters/base.d.ts +22 -0
- package/dist/adapters/base.d.ts.map +1 -0
- package/dist/adapters/base.js +16 -0
- package/dist/adapters/base.js.map +1 -0
- package/dist/adapters/index.d.ts +9 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +25 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/memory.d.ts +29 -0
- package/dist/adapters/memory.d.ts.map +1 -0
- package/dist/adapters/memory.js +130 -0
- package/dist/adapters/memory.js.map +1 -0
- package/dist/adapters/postgres.d.ts +43 -0
- package/dist/adapters/postgres.d.ts.map +1 -0
- package/dist/adapters/postgres.js +450 -0
- package/dist/adapters/postgres.js.map +1 -0
- package/dist/adapters/redis.d.ts +30 -0
- package/dist/adapters/redis.d.ts.map +1 -0
- package/dist/adapters/redis.js +186 -0
- package/dist/adapters/redis.js.map +1 -0
- package/dist/context-builder.d.ts +26 -0
- package/dist/context-builder.d.ts.map +1 -0
- package/dist/context-builder.js +154 -0
- package/dist/context-builder.js.map +1 -0
- package/dist/embedding/factory.d.ts +6 -0
- package/dist/embedding/factory.d.ts.map +1 -0
- package/dist/embedding/factory.js +18 -0
- package/dist/embedding/factory.js.map +1 -0
- package/dist/embedding/index.d.ts +7 -0
- package/dist/embedding/index.d.ts.map +1 -0
- package/dist/embedding/index.js +7 -0
- package/dist/embedding/index.js.map +1 -0
- package/dist/embedding/ollama.d.ts +19 -0
- package/dist/embedding/ollama.d.ts.map +1 -0
- package/dist/embedding/ollama.js +63 -0
- package/dist/embedding/ollama.js.map +1 -0
- package/dist/embedding/openai.d.ts +14 -0
- package/dist/embedding/openai.d.ts.map +1 -0
- package/dist/embedding/openai.js +56 -0
- package/dist/embedding/openai.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/schema.d.ts +169 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +52 -0
- package/dist/schema.js.map +1 -0
- package/dist/token-counter.d.ts +24 -0
- package/dist/token-counter.d.ts.map +1 -0
- package/dist/token-counter.js +40 -0
- package/dist/token-counter.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Redis adapter for short-term memory
|
|
3
|
+
*
|
|
4
|
+
* Uses Redis sorted sets for ordered message retrieval.
|
|
5
|
+
* Supports TTL for automatic expiration.
|
|
6
|
+
* Supports both standalone Redis and Redis Cluster modes via @cogitator-ai/redis.
|
|
7
|
+
*/
|
|
8
|
+
import { createRedisClient } from '@cogitator-ai/redis';
|
|
9
|
+
import { BaseMemoryAdapter } from './base';
|
|
10
|
+
export class RedisAdapter extends BaseMemoryAdapter {
|
|
11
|
+
provider = 'redis';
|
|
12
|
+
client = null;
|
|
13
|
+
config;
|
|
14
|
+
prefix;
|
|
15
|
+
ttl;
|
|
16
|
+
constructor(config) {
|
|
17
|
+
super();
|
|
18
|
+
this.config = config;
|
|
19
|
+
this.prefix = config.keyPrefix ?? (config.cluster ? '{cogitator}:' : 'cogitator:');
|
|
20
|
+
this.ttl = config.ttl ?? 86400;
|
|
21
|
+
}
|
|
22
|
+
async connect() {
|
|
23
|
+
try {
|
|
24
|
+
if (this.config.cluster) {
|
|
25
|
+
this.client = await createRedisClient({
|
|
26
|
+
mode: 'cluster',
|
|
27
|
+
nodes: this.config.cluster.nodes,
|
|
28
|
+
scaleReads: this.config.cluster.scaleReads,
|
|
29
|
+
password: this.config.password,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
this.client = await createRedisClient({
|
|
34
|
+
mode: 'standalone',
|
|
35
|
+
url: this.config.url,
|
|
36
|
+
host: this.config.host,
|
|
37
|
+
port: this.config.port,
|
|
38
|
+
password: this.config.password,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
await this.client.ping();
|
|
42
|
+
return this.success(undefined);
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
return this.failure(`Redis connection failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
async disconnect() {
|
|
49
|
+
if (this.client) {
|
|
50
|
+
await this.client.quit();
|
|
51
|
+
this.client = null;
|
|
52
|
+
}
|
|
53
|
+
return this.success(undefined);
|
|
54
|
+
}
|
|
55
|
+
key(type, id) {
|
|
56
|
+
return `${this.prefix}${type}:${id}`;
|
|
57
|
+
}
|
|
58
|
+
async createThread(agentId, metadata = {}) {
|
|
59
|
+
if (!this.client)
|
|
60
|
+
return this.failure('Not connected');
|
|
61
|
+
const thread = {
|
|
62
|
+
id: this.generateId('thread'),
|
|
63
|
+
agentId,
|
|
64
|
+
metadata,
|
|
65
|
+
createdAt: new Date(),
|
|
66
|
+
updatedAt: new Date(),
|
|
67
|
+
};
|
|
68
|
+
await this.client.setex(this.key('thread', thread.id), this.ttl, JSON.stringify(thread));
|
|
69
|
+
return this.success(thread);
|
|
70
|
+
}
|
|
71
|
+
async getThread(threadId) {
|
|
72
|
+
if (!this.client)
|
|
73
|
+
return this.failure('Not connected');
|
|
74
|
+
const data = await this.client.get(this.key('thread', threadId));
|
|
75
|
+
if (!data)
|
|
76
|
+
return this.success(null);
|
|
77
|
+
const thread = JSON.parse(data);
|
|
78
|
+
thread.createdAt = new Date(thread.createdAt);
|
|
79
|
+
thread.updatedAt = new Date(thread.updatedAt);
|
|
80
|
+
return this.success(thread);
|
|
81
|
+
}
|
|
82
|
+
async updateThread(threadId, metadata) {
|
|
83
|
+
const result = await this.getThread(threadId);
|
|
84
|
+
if (!result.success)
|
|
85
|
+
return result;
|
|
86
|
+
if (!result.data)
|
|
87
|
+
return this.failure(`Thread not found: ${threadId}`);
|
|
88
|
+
const thread = result.data;
|
|
89
|
+
thread.metadata = { ...thread.metadata, ...metadata };
|
|
90
|
+
thread.updatedAt = new Date();
|
|
91
|
+
await this.client.setex(this.key('thread', threadId), this.ttl, JSON.stringify(thread));
|
|
92
|
+
return this.success(thread);
|
|
93
|
+
}
|
|
94
|
+
async deleteThread(threadId) {
|
|
95
|
+
if (!this.client)
|
|
96
|
+
return this.failure('Not connected');
|
|
97
|
+
const setKey = this.key('thread:entries', threadId);
|
|
98
|
+
const entryKeys = await this.client.zrange(setKey, 0, -1);
|
|
99
|
+
if (entryKeys.length > 0) {
|
|
100
|
+
await this.client.del(...entryKeys);
|
|
101
|
+
}
|
|
102
|
+
await this.client.del(this.key('thread', threadId));
|
|
103
|
+
await this.client.del(setKey);
|
|
104
|
+
return this.success(undefined);
|
|
105
|
+
}
|
|
106
|
+
async addEntry(entry) {
|
|
107
|
+
if (!this.client)
|
|
108
|
+
return this.failure('Not connected');
|
|
109
|
+
const full = {
|
|
110
|
+
...entry,
|
|
111
|
+
id: this.generateId('entry'),
|
|
112
|
+
createdAt: new Date(),
|
|
113
|
+
};
|
|
114
|
+
const key = this.key('entry', full.id);
|
|
115
|
+
await this.client.setex(key, this.ttl, JSON.stringify(full));
|
|
116
|
+
const setKey = this.key('thread:entries', entry.threadId);
|
|
117
|
+
await this.client.zadd(setKey, full.createdAt.getTime(), key);
|
|
118
|
+
await this.client.expire(setKey, this.ttl);
|
|
119
|
+
return this.success(full);
|
|
120
|
+
}
|
|
121
|
+
async getEntries(options) {
|
|
122
|
+
if (!this.client)
|
|
123
|
+
return this.failure('Not connected');
|
|
124
|
+
const setKey = this.key('thread:entries', options.threadId);
|
|
125
|
+
let keys;
|
|
126
|
+
if (options.before || options.after) {
|
|
127
|
+
const min = options.after?.getTime() ?? '-inf';
|
|
128
|
+
const max = options.before?.getTime() ?? '+inf';
|
|
129
|
+
keys = await this.client.zrangebyscore(setKey, min, max);
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
keys = await this.client.zrange(setKey, 0, -1);
|
|
133
|
+
}
|
|
134
|
+
if (keys.length === 0)
|
|
135
|
+
return this.success([]);
|
|
136
|
+
if (options.limit && keys.length > options.limit) {
|
|
137
|
+
keys = keys.slice(-options.limit);
|
|
138
|
+
}
|
|
139
|
+
const values = await this.client.mget(...keys);
|
|
140
|
+
const entries = values
|
|
141
|
+
.filter((v) => v !== null)
|
|
142
|
+
.map((v) => {
|
|
143
|
+
const entry = JSON.parse(v);
|
|
144
|
+
entry.createdAt = new Date(entry.createdAt);
|
|
145
|
+
if (!options.includeToolCalls) {
|
|
146
|
+
entry.toolCalls = undefined;
|
|
147
|
+
entry.toolResults = undefined;
|
|
148
|
+
}
|
|
149
|
+
return entry;
|
|
150
|
+
});
|
|
151
|
+
return this.success(entries);
|
|
152
|
+
}
|
|
153
|
+
async getEntry(entryId) {
|
|
154
|
+
if (!this.client)
|
|
155
|
+
return this.failure('Not connected');
|
|
156
|
+
const data = await this.client.get(this.key('entry', entryId));
|
|
157
|
+
if (!data)
|
|
158
|
+
return this.success(null);
|
|
159
|
+
const entry = JSON.parse(data);
|
|
160
|
+
entry.createdAt = new Date(entry.createdAt);
|
|
161
|
+
return this.success(entry);
|
|
162
|
+
}
|
|
163
|
+
async deleteEntry(entryId) {
|
|
164
|
+
if (!this.client)
|
|
165
|
+
return this.failure('Not connected');
|
|
166
|
+
const result = await this.getEntry(entryId);
|
|
167
|
+
if (result.success && result.data) {
|
|
168
|
+
const key = this.key('entry', entryId);
|
|
169
|
+
await this.client.zrem(this.key('thread:entries', result.data.threadId), key);
|
|
170
|
+
await this.client.del(key);
|
|
171
|
+
}
|
|
172
|
+
return this.success(undefined);
|
|
173
|
+
}
|
|
174
|
+
async clearThread(threadId) {
|
|
175
|
+
if (!this.client)
|
|
176
|
+
return this.failure('Not connected');
|
|
177
|
+
const setKey = this.key('thread:entries', threadId);
|
|
178
|
+
const keys = await this.client.zrange(setKey, 0, -1);
|
|
179
|
+
if (keys.length > 0) {
|
|
180
|
+
await this.client.del(...keys);
|
|
181
|
+
}
|
|
182
|
+
await this.client.del(setKey);
|
|
183
|
+
return this.success(undefined);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=redis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis.js","sourceRoot":"","sources":["../../src/adapters/redis.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context builder with token management
|
|
3
|
+
*
|
|
4
|
+
* Builds conversation context from memory while respecting token limits.
|
|
5
|
+
*/
|
|
6
|
+
import type { ContextBuilderConfig, BuiltContext, MemoryAdapter, FactAdapter, EmbeddingAdapter, EmbeddingService } from '@cogitator-ai/types';
|
|
7
|
+
export interface ContextBuilderDeps {
|
|
8
|
+
memoryAdapter: MemoryAdapter;
|
|
9
|
+
factAdapter?: FactAdapter;
|
|
10
|
+
embeddingAdapter?: EmbeddingAdapter;
|
|
11
|
+
embeddingService?: EmbeddingService;
|
|
12
|
+
}
|
|
13
|
+
export interface BuildContextOptions {
|
|
14
|
+
threadId: string;
|
|
15
|
+
agentId: string;
|
|
16
|
+
systemPrompt?: string;
|
|
17
|
+
currentInput?: string;
|
|
18
|
+
}
|
|
19
|
+
export declare class ContextBuilder {
|
|
20
|
+
private config;
|
|
21
|
+
private deps;
|
|
22
|
+
constructor(config: ContextBuilderConfig, deps: ContextBuilderDeps);
|
|
23
|
+
build(options: BuildContextOptions): Promise<BuiltContext>;
|
|
24
|
+
private selectRecentEntries;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=context-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-builder.d.ts","sourceRoot":"","sources":["../src/context-builder.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAKV,oBAAoB,EACpB,YAAY,EACZ,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,qBAAqB,CAAC;AAG7B,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,aAAa,CAAC;IAC7B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,IAAI,CAAqB;gBAErB,MAAM,EAAE,oBAAoB,EAAE,IAAI,EAAE,kBAAkB;IAa5D,KAAK,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,YAAY,CAAC;IAiJhE,OAAO,CAAC,mBAAmB;CAmB5B"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context builder with token management
|
|
3
|
+
*
|
|
4
|
+
* Builds conversation context from memory while respecting token limits.
|
|
5
|
+
*/
|
|
6
|
+
import { countMessageTokens, countTokens } from './token-counter';
|
|
7
|
+
export class ContextBuilder {
|
|
8
|
+
config;
|
|
9
|
+
deps;
|
|
10
|
+
constructor(config, deps) {
|
|
11
|
+
const defaultReserve = Math.max(100, Math.floor(config.maxTokens * 0.1));
|
|
12
|
+
this.config = {
|
|
13
|
+
maxTokens: config.maxTokens,
|
|
14
|
+
reserveTokens: config.reserveTokens ?? defaultReserve,
|
|
15
|
+
strategy: config.strategy,
|
|
16
|
+
includeSystemPrompt: config.includeSystemPrompt ?? true,
|
|
17
|
+
includeFacts: config.includeFacts ?? false,
|
|
18
|
+
includeSemanticContext: config.includeSemanticContext ?? false,
|
|
19
|
+
};
|
|
20
|
+
this.deps = deps;
|
|
21
|
+
}
|
|
22
|
+
async build(options) {
|
|
23
|
+
const availableTokens = this.config.maxTokens - this.config.reserveTokens;
|
|
24
|
+
let usedTokens = 0;
|
|
25
|
+
const messages = [];
|
|
26
|
+
const facts = [];
|
|
27
|
+
const semanticResults = [];
|
|
28
|
+
if (this.config.includeSystemPrompt && options.systemPrompt) {
|
|
29
|
+
const systemMsg = { role: 'system', content: options.systemPrompt };
|
|
30
|
+
const tokens = countMessageTokens(systemMsg);
|
|
31
|
+
if (usedTokens + tokens <= availableTokens) {
|
|
32
|
+
messages.push(systemMsg);
|
|
33
|
+
usedTokens += tokens;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
if (this.config.includeFacts && this.deps.factAdapter) {
|
|
37
|
+
const factsResult = await this.deps.factAdapter.getFacts(options.agentId);
|
|
38
|
+
if (factsResult.success && factsResult.data.length > 0) {
|
|
39
|
+
const factTokenBudget = Math.floor(availableTokens * 0.1);
|
|
40
|
+
let factTokens = 0;
|
|
41
|
+
for (const fact of factsResult.data) {
|
|
42
|
+
const tokens = countTokens(fact.content);
|
|
43
|
+
if (factTokens + tokens <= factTokenBudget) {
|
|
44
|
+
facts.push(fact);
|
|
45
|
+
factTokens += tokens;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
if (facts.length > 0 && messages.length > 0 && messages[0].role === 'system') {
|
|
49
|
+
const factsStr = facts.map((f) => `- ${f.content}`).join('\n');
|
|
50
|
+
messages[0] = {
|
|
51
|
+
...messages[0],
|
|
52
|
+
content: `${messages[0].content}\n\nKnown facts:\n${factsStr}`,
|
|
53
|
+
};
|
|
54
|
+
usedTokens += factTokens;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
if (this.config.includeSemanticContext &&
|
|
59
|
+
this.deps.embeddingAdapter &&
|
|
60
|
+
this.deps.embeddingService &&
|
|
61
|
+
options.currentInput) {
|
|
62
|
+
const vector = await this.deps.embeddingService.embed(options.currentInput);
|
|
63
|
+
const searchResult = await this.deps.embeddingAdapter.search({
|
|
64
|
+
vector,
|
|
65
|
+
limit: 5,
|
|
66
|
+
threshold: 0.7,
|
|
67
|
+
});
|
|
68
|
+
if (searchResult.success) {
|
|
69
|
+
const semanticTokenBudget = Math.floor(availableTokens * 0.1);
|
|
70
|
+
let semanticTokens = 0;
|
|
71
|
+
for (const result of searchResult.data) {
|
|
72
|
+
const tokens = countTokens(result.content);
|
|
73
|
+
if (semanticTokens + tokens <= semanticTokenBudget) {
|
|
74
|
+
semanticResults.push(result);
|
|
75
|
+
semanticTokens += tokens;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
if (semanticResults.length > 0 && messages.length > 0 && messages[0].role === 'system') {
|
|
79
|
+
const contextStr = semanticResults
|
|
80
|
+
.map((r) => `- ${r.content}`)
|
|
81
|
+
.join('\n');
|
|
82
|
+
messages[0] = {
|
|
83
|
+
...messages[0],
|
|
84
|
+
content: `${messages[0].content}\n\nRelevant context:\n${contextStr}`,
|
|
85
|
+
};
|
|
86
|
+
usedTokens += semanticTokens;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
const entriesResult = await this.deps.memoryAdapter.getEntries({
|
|
91
|
+
threadId: options.threadId,
|
|
92
|
+
includeToolCalls: true,
|
|
93
|
+
});
|
|
94
|
+
let originalMessageCount = 0;
|
|
95
|
+
let truncated = false;
|
|
96
|
+
if (entriesResult.success) {
|
|
97
|
+
const entries = entriesResult.data;
|
|
98
|
+
originalMessageCount = entries.length;
|
|
99
|
+
if (this.config.strategy === 'recent') {
|
|
100
|
+
const selectedEntries = this.selectRecentEntries(entries, availableTokens - usedTokens);
|
|
101
|
+
truncated = selectedEntries.length < entries.length;
|
|
102
|
+
for (const entry of selectedEntries) {
|
|
103
|
+
messages.push(entry.message);
|
|
104
|
+
usedTokens += entry.tokenCount;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
else if (this.config.strategy === 'relevant') {
|
|
108
|
+
const selectedEntries = this.selectRecentEntries(entries, availableTokens - usedTokens);
|
|
109
|
+
truncated = selectedEntries.length < entries.length;
|
|
110
|
+
for (const entry of selectedEntries) {
|
|
111
|
+
messages.push(entry.message);
|
|
112
|
+
usedTokens += entry.tokenCount;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
else if (this.config.strategy === 'hybrid') {
|
|
116
|
+
const selectedEntries = this.selectRecentEntries(entries, availableTokens - usedTokens);
|
|
117
|
+
truncated = selectedEntries.length < entries.length;
|
|
118
|
+
for (const entry of selectedEntries) {
|
|
119
|
+
messages.push(entry.message);
|
|
120
|
+
usedTokens += entry.tokenCount;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return {
|
|
125
|
+
messages,
|
|
126
|
+
facts,
|
|
127
|
+
semanticResults,
|
|
128
|
+
tokenCount: usedTokens,
|
|
129
|
+
truncated,
|
|
130
|
+
metadata: {
|
|
131
|
+
originalMessageCount,
|
|
132
|
+
includedMessageCount: messages.length - (this.config.includeSystemPrompt && options.systemPrompt ? 1 : 0),
|
|
133
|
+
factsIncluded: facts.length,
|
|
134
|
+
semanticResultsIncluded: semanticResults.length,
|
|
135
|
+
},
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
selectRecentEntries(entries, availableTokens) {
|
|
139
|
+
const reversed = [...entries].reverse();
|
|
140
|
+
const selected = [];
|
|
141
|
+
let usedTokens = 0;
|
|
142
|
+
for (const entry of reversed) {
|
|
143
|
+
if (usedTokens + entry.tokenCount <= availableTokens) {
|
|
144
|
+
selected.unshift(entry);
|
|
145
|
+
usedTokens += entry.tokenCount;
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
break;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return selected;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=context-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-builder.js","sourceRoot":"","sources":["../src/context-builder.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAcH,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAgBlE,MAAM,OAAO,cAAc;IACjB,MAAM,CAAiC;IACvC,IAAI,CAAqB;IAEjC,YAAY,MAA4B,EAAE,IAAwB;QAChE,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC;QACzE,IAAI,CAAC,MAAM,GAAG;YACZ,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,cAAc;YACrD,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,IAAI,IAAI;YACvD,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,KAAK;YAC1C,sBAAsB,EAAE,MAAM,CAAC,sBAAsB,IAAI,KAAK;SAC/D,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,OAA4B;QACtC,MAAM,eAAe,GACnB,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;QACpD,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,MAAM,QAAQ,GAAc,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAW,EAAE,CAAC;QACzB,MAAM,eAAe,GAAsC,EAAE,CAAC;QAE9D,IAAI,IAAI,CAAC,MAAM,CAAC,mBAAmB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YAC5D,MAAM,SAAS,GAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC;YAC7E,MAAM,MAAM,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;YAC7C,IAAI,UAAU,GAAG,MAAM,IAAI,eAAe,EAAE,CAAC;gBAC3C,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACzB,UAAU,IAAI,MAAM,CAAC;YACvB,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC1E,IAAI,WAAW,CAAC,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvD,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,GAAG,CAAC,CAAC;gBAC1D,IAAI,UAAU,GAAG,CAAC,CAAC;gBAEnB,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC;oBACpC,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBACzC,IAAI,UAAU,GAAG,MAAM,IAAI,eAAe,EAAE,CAAC;wBAC3C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBACjB,UAAU,IAAI,MAAM,CAAC;oBACvB,CAAC;gBACH,CAAC;gBAED,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC7E,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC/D,QAAQ,CAAC,CAAC,CAAC,GAAG;wBACZ,GAAG,QAAQ,CAAC,CAAC,CAAC;wBACd,OAAO,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,qBAAqB,QAAQ,EAAE;qBAC/D,CAAC;oBACF,UAAU,IAAI,UAAU,CAAC;gBAC3B,CAAC;YACH,CAAC;QACH,CAAC;QAED,IACE,IAAI,CAAC,MAAM,CAAC,sBAAsB;YAClC,IAAI,CAAC,IAAI,CAAC,gBAAgB;YAC1B,IAAI,CAAC,IAAI,CAAC,gBAAgB;YAC1B,OAAO,CAAC,YAAY,EACpB,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YAC5E,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;gBAC3D,MAAM;gBACN,KAAK,EAAE,CAAC;gBACR,SAAS,EAAE,GAAG;aACf,CAAC,CAAC;YAEH,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;gBACzB,MAAM,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,GAAG,CAAC,CAAC;gBAC9D,IAAI,cAAc,GAAG,CAAC,CAAC;gBAEvB,KAAK,MAAM,MAAM,IAAI,YAAY,CAAC,IAAI,EAAE,CAAC;oBACvC,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;oBAC3C,IAAI,cAAc,GAAG,MAAM,IAAI,mBAAmB,EAAE,CAAC;wBACnD,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;wBAC7B,cAAc,IAAI,MAAM,CAAC;oBAC3B,CAAC;gBACH,CAAC;gBAED,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACvF,MAAM,UAAU,GAAG,eAAe;yBAC/B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;yBAC5B,IAAI,CAAC,IAAI,CAAC,CAAC;oBACd,QAAQ,CAAC,CAAC,CAAC,GAAG;wBACZ,GAAG,QAAQ,CAAC,CAAC,CAAC;wBACd,OAAO,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,0BAA0B,UAAU,EAAE;qBACtE,CAAC;oBACF,UAAU,IAAI,cAAc,CAAC;gBAC/B,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;YAC7D,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,gBAAgB,EAAE,IAAI;SACvB,CAAC,CAAC;QAEH,IAAI,oBAAoB,GAAG,CAAC,CAAC;QAC7B,IAAI,SAAS,GAAG,KAAK,CAAC;QAEtB,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC;YAC1B,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC;YACnC,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC;YAEtC,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBACtC,MAAM,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAC9C,OAAO,EACP,eAAe,GAAG,UAAU,CAC7B,CAAC;gBAEF,SAAS,GAAG,eAAe,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;gBAEpD,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE,CAAC;oBACpC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBAC7B,UAAU,IAAI,KAAK,CAAC,UAAU,CAAC;gBACjC,CAAC;YACH,CAAC;iBAAM,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;gBAC/C,MAAM,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAC9C,OAAO,EACP,eAAe,GAAG,UAAU,CAC7B,CAAC;gBACF,SAAS,GAAG,eAAe,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;gBAEpD,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE,CAAC;oBACpC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBAC7B,UAAU,IAAI,KAAK,CAAC,UAAU,CAAC;gBACjC,CAAC;YACH,CAAC;iBAAM,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC7C,MAAM,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAC9C,OAAO,EACP,eAAe,GAAG,UAAU,CAC7B,CAAC;gBACF,SAAS,GAAG,eAAe,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;gBAEpD,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE,CAAC;oBACpC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBAC7B,UAAU,IAAI,KAAK,CAAC,UAAU,CAAC;gBACjC,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO;YACL,QAAQ;YACR,KAAK;YACL,eAAe;YACf,UAAU,EAAE,UAAU;YACtB,SAAS;YACT,QAAQ,EAAE;gBACR,oBAAoB;gBACpB,oBAAoB,EAClB,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,mBAAmB,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrF,aAAa,EAAE,KAAK,CAAC,MAAM;gBAC3B,uBAAuB,EAAE,eAAe,CAAC,MAAM;aAChD;SACF,CAAC;IACJ,CAAC;IAEO,mBAAmB,CACzB,OAAsB,EACtB,eAAuB;QAEvB,MAAM,QAAQ,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAkB,EAAE,CAAC;QACnC,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC7B,IAAI,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,eAAe,EAAE,CAAC;gBACrD,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACxB,UAAU,IAAI,KAAK,CAAC,UAAU,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACN,MAAM;YACR,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/embedding/factory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAIpF,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,sBAAsB,GAC7B,gBAAgB,CAelB"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Embedding service factory
|
|
3
|
+
*/
|
|
4
|
+
import { OpenAIEmbeddingService } from './openai';
|
|
5
|
+
import { OllamaEmbeddingService } from './ollama';
|
|
6
|
+
export function createEmbeddingService(config) {
|
|
7
|
+
switch (config.provider) {
|
|
8
|
+
case 'openai':
|
|
9
|
+
return new OpenAIEmbeddingService(config);
|
|
10
|
+
case 'ollama':
|
|
11
|
+
return new OllamaEmbeddingService(config);
|
|
12
|
+
default: {
|
|
13
|
+
const exhaustive = config;
|
|
14
|
+
throw new Error(`Unknown embedding provider: ${exhaustive.provider}`);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/embedding/factory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAElD,MAAM,UAAU,sBAAsB,CACpC,MAA8B;IAE9B,QAAQ,MAAM,CAAC,QAAQ,EAAE,CAAC;QACxB,KAAK,QAAQ;YACX,OAAO,IAAI,sBAAsB,CAAC,MAAM,CAAC,CAAC;QAE5C,KAAK,QAAQ;YACX,OAAO,IAAI,sBAAsB,CAAC,MAAM,CAAC,CAAC;QAE5C,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,UAAU,GAAU,MAAM,CAAC;YACjC,MAAM,IAAI,KAAK,CACb,+BAAgC,UAAqC,CAAC,QAAQ,EAAE,CACjF,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/embedding/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/embedding/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ollama Embedding Service
|
|
3
|
+
*
|
|
4
|
+
* Supports local embedding models like:
|
|
5
|
+
* - nomic-embed-text (768 dimensions)
|
|
6
|
+
* - nomic-embed-text-v2-moe (768 dimensions)
|
|
7
|
+
* - mxbai-embed-large (1024 dimensions)
|
|
8
|
+
* - all-minilm (384 dimensions)
|
|
9
|
+
*/
|
|
10
|
+
import type { EmbeddingService, OllamaEmbeddingConfig } from '@cogitator-ai/types';
|
|
11
|
+
export declare class OllamaEmbeddingService implements EmbeddingService {
|
|
12
|
+
readonly model: string;
|
|
13
|
+
readonly dimensions: number;
|
|
14
|
+
private baseUrl;
|
|
15
|
+
constructor(config?: Omit<OllamaEmbeddingConfig, 'provider'>);
|
|
16
|
+
embed(text: string): Promise<number[]>;
|
|
17
|
+
embedBatch(texts: string[]): Promise<number[][]>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=ollama.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../../src/embedding/ollama.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAUnF,qBAAa,sBAAuB,YAAW,gBAAgB;IAC7D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,GAAE,IAAI,CAAC,qBAAqB,EAAE,UAAU,CAAM;IAO1D,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAwBtC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;CAuBvD"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ollama Embedding Service
|
|
3
|
+
*
|
|
4
|
+
* Supports local embedding models like:
|
|
5
|
+
* - nomic-embed-text (768 dimensions)
|
|
6
|
+
* - nomic-embed-text-v2-moe (768 dimensions)
|
|
7
|
+
* - mxbai-embed-large (1024 dimensions)
|
|
8
|
+
* - all-minilm (384 dimensions)
|
|
9
|
+
*/
|
|
10
|
+
const MODEL_DIMENSIONS = {
|
|
11
|
+
'nomic-embed-text': 768,
|
|
12
|
+
'nomic-embed-text-v2-moe': 768,
|
|
13
|
+
'mxbai-embed-large': 1024,
|
|
14
|
+
'all-minilm': 384,
|
|
15
|
+
'snowflake-arctic-embed': 1024,
|
|
16
|
+
};
|
|
17
|
+
export class OllamaEmbeddingService {
|
|
18
|
+
model;
|
|
19
|
+
dimensions;
|
|
20
|
+
baseUrl;
|
|
21
|
+
constructor(config = {}) {
|
|
22
|
+
this.model = config.model ?? 'nomic-embed-text';
|
|
23
|
+
this.baseUrl = config.baseUrl ?? 'http://localhost:11434';
|
|
24
|
+
this.dimensions = MODEL_DIMENSIONS[this.model] ?? 768;
|
|
25
|
+
}
|
|
26
|
+
async embed(text) {
|
|
27
|
+
const response = await fetch(`${this.baseUrl}/api/embed`, {
|
|
28
|
+
method: 'POST',
|
|
29
|
+
headers: {
|
|
30
|
+
'Content-Type': 'application/json',
|
|
31
|
+
},
|
|
32
|
+
body: JSON.stringify({
|
|
33
|
+
model: this.model,
|
|
34
|
+
input: text,
|
|
35
|
+
}),
|
|
36
|
+
});
|
|
37
|
+
if (!response.ok) {
|
|
38
|
+
const error = await response.text();
|
|
39
|
+
throw new Error(`Ollama embedding failed: ${error}`);
|
|
40
|
+
}
|
|
41
|
+
const data = (await response.json());
|
|
42
|
+
return data.embeddings[0];
|
|
43
|
+
}
|
|
44
|
+
async embedBatch(texts) {
|
|
45
|
+
const response = await fetch(`${this.baseUrl}/api/embed`, {
|
|
46
|
+
method: 'POST',
|
|
47
|
+
headers: {
|
|
48
|
+
'Content-Type': 'application/json',
|
|
49
|
+
},
|
|
50
|
+
body: JSON.stringify({
|
|
51
|
+
model: this.model,
|
|
52
|
+
input: texts,
|
|
53
|
+
}),
|
|
54
|
+
});
|
|
55
|
+
if (!response.ok) {
|
|
56
|
+
const error = await response.text();
|
|
57
|
+
throw new Error(`Ollama embedding failed: ${error}`);
|
|
58
|
+
}
|
|
59
|
+
const data = (await response.json());
|
|
60
|
+
return data.embeddings;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=ollama.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../src/embedding/ollama.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,MAAM,gBAAgB,GAA2B;IAC/C,kBAAkB,EAAE,GAAG;IACvB,yBAAyB,EAAE,GAAG;IAC9B,mBAAmB,EAAE,IAAI;IACzB,YAAY,EAAE,GAAG;IACjB,wBAAwB,EAAE,IAAI;CAC/B,CAAC;AAEF,MAAM,OAAO,sBAAsB;IACxB,KAAK,CAAS;IACd,UAAU,CAAS;IAEpB,OAAO,CAAS;IAExB,YAAY,SAAkD,EAAE;QAC9D,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,kBAAkB,CAAC;QAChD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,wBAAwB,CAAC;QAE1D,IAAI,CAAC,UAAU,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAY;QACtB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,YAAY,EAAE;YACxD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,KAAK,EAAE,IAAI;aACZ,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,4BAA4B,KAAK,EAAE,CAAC,CAAC;QACvD,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAElC,CAAC;QAEF,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAAe;QAC9B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,YAAY,EAAE;YACxD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,KAAK,EAAE,KAAK;aACb,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,4BAA4B,KAAK,EAAE,CAAC,CAAC;QACvD,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAElC,CAAC;QAEF,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;CACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAI Embedding Service
|
|
3
|
+
*/
|
|
4
|
+
import type { EmbeddingService, OpenAIEmbeddingConfig } from '@cogitator-ai/types';
|
|
5
|
+
export declare class OpenAIEmbeddingService implements EmbeddingService {
|
|
6
|
+
readonly model: string;
|
|
7
|
+
readonly dimensions: number;
|
|
8
|
+
private apiKey;
|
|
9
|
+
private baseUrl;
|
|
10
|
+
constructor(config: Omit<OpenAIEmbeddingConfig, 'provider'>);
|
|
11
|
+
embed(text: string): Promise<number[]>;
|
|
12
|
+
embedBatch(texts: string[]): Promise<number[][]>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=openai.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/embedding/openai.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAEnF,qBAAa,sBAAuB,YAAW,gBAAgB;IAC7D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,EAAE,IAAI,CAAC,qBAAqB,EAAE,UAAU,CAAC;IAQrD,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAyBtC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;CA0BvD"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAI Embedding Service
|
|
3
|
+
*/
|
|
4
|
+
export class OpenAIEmbeddingService {
|
|
5
|
+
model;
|
|
6
|
+
dimensions;
|
|
7
|
+
apiKey;
|
|
8
|
+
baseUrl;
|
|
9
|
+
constructor(config) {
|
|
10
|
+
this.apiKey = config.apiKey;
|
|
11
|
+
this.model = config.model ?? 'text-embedding-3-small';
|
|
12
|
+
this.baseUrl = config.baseUrl ?? 'https://api.openai.com/v1';
|
|
13
|
+
this.dimensions = this.model.includes('large') ? 3072 : 1536;
|
|
14
|
+
}
|
|
15
|
+
async embed(text) {
|
|
16
|
+
const response = await fetch(`${this.baseUrl}/embeddings`, {
|
|
17
|
+
method: 'POST',
|
|
18
|
+
headers: {
|
|
19
|
+
'Content-Type': 'application/json',
|
|
20
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
21
|
+
},
|
|
22
|
+
body: JSON.stringify({
|
|
23
|
+
model: this.model,
|
|
24
|
+
input: text,
|
|
25
|
+
}),
|
|
26
|
+
});
|
|
27
|
+
if (!response.ok) {
|
|
28
|
+
const error = await response.text();
|
|
29
|
+
throw new Error(`OpenAI embedding failed: ${error}`);
|
|
30
|
+
}
|
|
31
|
+
const data = (await response.json());
|
|
32
|
+
return data.data[0].embedding;
|
|
33
|
+
}
|
|
34
|
+
async embedBatch(texts) {
|
|
35
|
+
const response = await fetch(`${this.baseUrl}/embeddings`, {
|
|
36
|
+
method: 'POST',
|
|
37
|
+
headers: {
|
|
38
|
+
'Content-Type': 'application/json',
|
|
39
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
40
|
+
},
|
|
41
|
+
body: JSON.stringify({
|
|
42
|
+
model: this.model,
|
|
43
|
+
input: texts,
|
|
44
|
+
}),
|
|
45
|
+
});
|
|
46
|
+
if (!response.ok) {
|
|
47
|
+
const error = await response.text();
|
|
48
|
+
throw new Error(`OpenAI embedding failed: ${error}`);
|
|
49
|
+
}
|
|
50
|
+
const data = (await response.json());
|
|
51
|
+
return data.data
|
|
52
|
+
.sort((a, b) => a.index - b.index)
|
|
53
|
+
.map((d) => d.embedding);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=openai.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/embedding/openai.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,OAAO,sBAAsB;IACxB,KAAK,CAAS;IACd,UAAU,CAAS;IAEpB,MAAM,CAAS;IACf,OAAO,CAAS;IAExB,YAAY,MAA+C;QACzD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,wBAAwB,CAAC;QACtD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,2BAA2B,CAAC;QAE7D,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/D,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAY;QACtB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,aAAa,EAAE;YACzD,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;gBACnB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,KAAK,EAAE,IAAI;aACZ,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,4BAA4B,KAAK,EAAE,CAAC,CAAC;QACvD,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAElC,CAAC;QAEF,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAAe;QAC9B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,aAAa,EAAE;YACzD,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;gBACnB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,KAAK,EAAE,KAAK;aACb,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,4BAA4B,KAAK,EAAE,CAAC,CAAC;QACvD,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAElC,CAAC;QAEF,OAAO,IAAI,CAAC,IAAI;aACb,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;aACjC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC;CACF"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @cogitator-ai/memory
|
|
3
|
+
*
|
|
4
|
+
* Memory adapters for Cogitator AI agents
|
|
5
|
+
*/
|
|
6
|
+
export { BaseMemoryAdapter, InMemoryAdapter, createMemoryAdapter, type MemoryAdapterConfigUnion, } from './adapters/index';
|
|
7
|
+
export { RedisAdapter } from './adapters/redis';
|
|
8
|
+
export { PostgresAdapter } from './adapters/postgres';
|
|
9
|
+
export { ContextBuilder, type ContextBuilderDeps, type BuildContextOptions } from './context-builder';
|
|
10
|
+
export { countTokens, countMessageTokens, countMessagesTokens, truncateToTokens, } from './token-counter';
|
|
11
|
+
export { OpenAIEmbeddingService, OllamaEmbeddingService, createEmbeddingService, } from './embedding/index';
|
|
12
|
+
export { MemoryProviderSchema, InMemoryConfigSchema, RedisConfigSchema, PostgresConfigSchema, MemoryAdapterConfigSchema, ContextStrategySchema, ContextBuilderConfigSchema, EmbeddingProviderSchema, OpenAIEmbeddingConfigSchema, OllamaEmbeddingConfigSchema, EmbeddingServiceConfigSchema, } from './schema';
|
|
13
|
+
export type { MemoryType, Thread, MemoryEntry, Fact, Embedding, MemoryProvider, MemoryAdapterConfig, RedisAdapterConfig, PostgresAdapterConfig, InMemoryAdapterConfig, MemoryResult, MemoryQueryOptions, SemanticSearchOptions, MemoryAdapter, FactAdapter, EmbeddingAdapter, EmbeddingService, EmbeddingProvider, EmbeddingServiceConfig, OpenAIEmbeddingConfig, OllamaEmbeddingConfig, ContextBuilderConfig, ContextStrategy, BuiltContext, MemoryConfig, } from '@cogitator-ai/types';
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|