Spaces:
Sleeping
Sleeping
import { v } from 'convex/values'; | |
import { playerId, conversationId } from '../aiTown/ids'; | |
import { defineTable } from 'convex/server'; | |
import { LLM_CONFIG } from '../util/llm'; | |
export const memoryFields = { | |
playerId, | |
description: v.string(), | |
embeddingId: v.id('memoryEmbeddings'), | |
importance: v.number(), | |
lastAccess: v.number(), | |
data: v.union( | |
// Setting up dynamics between players | |
v.object({ | |
type: v.literal('relationship'), | |
// The player this memory is about, from the perspective of the player | |
// whose memory this is. | |
playerId, | |
}), | |
v.object({ | |
type: v.literal('conversation'), | |
conversationId, | |
// The other player(s) in the conversation. | |
playerIds: v.array(playerId), | |
}), | |
v.object({ | |
type: v.literal('reflection'), | |
relatedMemoryIds: v.array(v.id('memories')), | |
}), | |
), | |
}; | |
export const memoryTables = { | |
memories: defineTable(memoryFields) | |
.index('embeddingId', ['embeddingId']) | |
.index('playerId_type', ['playerId', 'data.type']) | |
.index('playerId', ['playerId']), | |
memoryEmbeddings: defineTable({ | |
playerId, | |
embedding: v.array(v.float64()), | |
}).vectorIndex('embedding', { | |
vectorField: 'embedding', | |
filterFields: ['playerId'], | |
dimensions: LLM_CONFIG.embeddingDimension, | |
}), | |
}; | |
export const agentTables = { | |
...memoryTables, | |
embeddingsCache: defineTable({ | |
textHash: v.bytes(), | |
embedding: v.array(v.float64()), | |
}).index('text', ['textHash']), | |
}; | |