diff --git a/.gitignore b/.gitignore index ad4176f7b21..cb81a64a94a 100644 --- a/.gitignore +++ b/.gitignore @@ -34,6 +34,7 @@ twitter_cookies.json timeline_cache.json *.sqlite +agent characters/ packages/core/src/providers/cache diff --git a/packages/adapter-postgres/src/index.ts b/packages/adapter-postgres/src/index.ts index f2563563022..b8937ff4bfb 100644 --- a/packages/adapter-postgres/src/index.ts +++ b/packages/adapter-postgres/src/index.ts @@ -290,42 +290,13 @@ export class PostgresDatabaseAdapter extends DatabaseAdapter { match_count: number; unique: boolean; }): Promise { - const client = await this.pool.connect(); - try { - let sql = ` - SELECT *, - 1 - (embedding <-> $3) as similarity - FROM memories - WHERE type = $1 AND "roomId" = $2 - `; - - if (params.unique) { - sql += ` AND "unique" = true`; - } - - sql += ` AND 1 - (embedding <-> $3) >= $4 - ORDER BY embedding <-> $3 - LIMIT $5`; - - const { rows } = await client.query(sql, [ - params.tableName, - params.roomId, - params.embedding, - params.match_threshold, - params.match_count, - ]); - - return rows.map((row) => ({ - ...row, - content: - typeof row.content === "string" - ? JSON.parse(row.content) - : row.content, - similarity: row.similarity, - })); - } finally { - client.release(); - } + return await this.searchMemoriesByEmbedding(params.embedding, { + match_threshold: params.match_threshold, + count: params.match_count, + roomId: params.roomId, + unique: params.unique, + tableName: params.tableName, + }); } async getMemories(params: { diff --git a/packages/client-discord/src/messages.ts b/packages/client-discord/src/messages.ts index 4d1631664b2..95cc7df29a5 100644 --- a/packages/client-discord/src/messages.ts +++ b/packages/client-discord/src/messages.ts @@ -423,10 +423,10 @@ export class MessageManager { roomId, content, createdAt: message.createdTimestamp, - embedding: embeddingZeroVector, }; if (content.text) { + await this.runtime.messageManager.addEmbeddingToMemory(memory); await this.runtime.messageManager.createMemory(memory); } diff --git a/packages/core/src/memory.ts b/packages/core/src/memory.ts index 350f65c54a8..ea91a615604 100644 --- a/packages/core/src/memory.ts +++ b/packages/core/src/memory.ts @@ -164,6 +164,7 @@ export class MemoryManager implements IMemoryManager { elizaLogger.debug("Memory already exists, skipping"); return; } + await this.runtime.databaseAdapter.createMemory( memory, this.tableName, diff --git a/packages/core/src/runtime.ts b/packages/core/src/runtime.ts index dee40e7cfdc..0315e5e9240 100644 --- a/packages/core/src/runtime.ts +++ b/packages/core/src/runtime.ts @@ -348,11 +348,14 @@ export class AgentRuntime implements IAgentRuntime { text: knowledgeItem, }, }); + const fragments = await splitChunks(knowledgeItem, 1200, 200); for (const fragment of fragments) { const embedding = await embed(this, fragment); await this.knowledgeManager.createMemory({ - id: stringToUuid(fragment), + // We namespace the knowledge base uuid to avoid id + // collision with the document above. + id: stringToUuid(knowledgeId + fragment), roomId: this.agentId, agentId: this.agentId, userId: this.agentId,