@mastra/lance 0.3.10 → 0.3.11
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/CHANGELOG.md +22 -0
- package/dist/index.cjs +212 -45
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +212 -45
- package/dist/index.js.map +1 -1
- package/dist/storage/domains/scores/index.d.ts.map +1 -1
- package/dist/vector/filter.d.ts +5 -5
- package/dist/vector/index.d.ts +3 -2
- package/dist/vector/index.d.ts.map +1 -1
- package/package.json +5 -5
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/storage/domains/legacy-evals/index.ts","../src/storage/domains/utils.ts","../src/storage/domains/memory/index.ts","../src/storage/domains/operations/index.ts","../src/storage/domains/scores/index.ts","../src/storage/domains/traces/index.ts","../src/storage/domains/workflows/index.ts","../src/storage/index.ts","../src/vector/filter.ts","../src/vector/index.ts"],"names":["TABLE_EVALS","MastraError","ErrorDomain","ErrorCategory","threadId","TABLE_WORKFLOW_SNAPSHOT","connect"],"mappings":"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","file":"index.js","sourcesContent":["import type { Connection } from '@lancedb/lancedb';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { LegacyEvalsStorage, TABLE_EVALS } from '@mastra/core/storage';\nimport type { EvalRow, PaginationInfo } from '@mastra/core/storage';\n\nexport class StoreLegacyEvalsLance extends LegacyEvalsStorage {\n private client: Connection;\n constructor({ client }: { client: Connection }) {\n super();\n this.client = client;\n }\n\n async getEvalsByAgentName(agentName: string, type?: 'test' | 'live'): Promise<EvalRow[]> {\n try {\n const table = await this.client.openTable(TABLE_EVALS);\n const query = table.query().where(`agent_name = '${agentName}'`);\n const records = await query.toArray();\n\n // Filter by type if specified\n let filteredRecords = records;\n if (type === 'live') {\n // Live evals have test_info as null\n filteredRecords = records.filter(record => record.test_info === null);\n } else if (type === 'test') {\n // Test evals have test_info as a JSON string\n filteredRecords = records.filter(record => record.test_info !== null);\n }\n\n return filteredRecords.map(record => {\n return {\n id: record.id,\n input: record.input,\n output: record.output,\n agentName: record.agent_name,\n metricName: record.metric_name,\n result: JSON.parse(record.result),\n instructions: record.instructions,\n testInfo: record.test_info ? JSON.parse(record.test_info) : null,\n globalRunId: record.global_run_id,\n runId: record.run_id,\n createdAt: new Date(record.created_at).toString(),\n };\n }) as EvalRow[];\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORE_GET_EVALS_BY_AGENT_NAME_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { agentName },\n },\n error,\n );\n }\n }\n\n async getEvals(options: {\n agentName?: string;\n type?: 'test' | 'live';\n page?: number;\n perPage?: number;\n fromDate?: Date;\n toDate?: Date;\n dateRange?: { start?: Date; end?: Date };\n }): Promise<PaginationInfo & { evals: EvalRow[] }> {\n try {\n const table = await this.client.openTable(TABLE_EVALS);\n\n // Build combined where clause\n const conditions: string[] = [];\n\n if (options.agentName) {\n conditions.push(`agent_name = '${options.agentName}'`);\n }\n\n // Apply type filtering\n if (options.type === 'live') {\n conditions.push('test_info IS NULL');\n } else if (options.type === 'test') {\n conditions.push('test_info IS NOT NULL');\n }\n\n // Apply date filtering\n const startDate = options.dateRange?.start || options.fromDate;\n const endDate = options.dateRange?.end || options.toDate;\n\n if (startDate) {\n conditions.push(`\\`created_at\\` >= ${startDate.getTime()}`);\n }\n\n if (endDate) {\n conditions.push(`\\`created_at\\` <= ${endDate.getTime()}`);\n }\n\n // Get total count with the same conditions\n let total = 0;\n if (conditions.length > 0) {\n total = await table.countRows(conditions.join(' AND '));\n } else {\n total = await table.countRows();\n }\n\n // Build query for fetching records\n const query = table.query();\n\n // Apply combined where clause if we have conditions\n if (conditions.length > 0) {\n const whereClause = conditions.join(' AND ');\n query.where(whereClause);\n }\n\n const records = await query.toArray();\n\n const evals = records\n .sort((a, b) => b.created_at - a.created_at)\n .map(record => {\n return {\n id: record.id,\n input: record.input,\n output: record.output,\n agentName: record.agent_name,\n metricName: record.metric_name,\n result: JSON.parse(record.result),\n instructions: record.instructions,\n testInfo: record.test_info ? JSON.parse(record.test_info) : null,\n globalRunId: record.global_run_id,\n runId: record.run_id,\n createdAt: new Date(record.created_at).toISOString(),\n };\n }) as EvalRow[];\n\n // Apply pagination after filtering\n const page = options.page || 0;\n const perPage = options.perPage || 10;\n const pagedEvals = evals.slice(page * perPage, (page + 1) * perPage);\n\n return {\n evals: pagedEvals,\n total: total,\n page,\n perPage,\n hasMore: total > (page + 1) * perPage,\n };\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORE_GET_EVALS_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { agentName: options.agentName ?? '' },\n },\n error,\n );\n }\n }\n}\n","import type { Connection, FieldLike, SchemaLike } from '@lancedb/lancedb';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { TABLE_EVALS, TABLE_WORKFLOW_SNAPSHOT } from '@mastra/core/storage';\nimport type { TABLE_NAMES } from '@mastra/core/storage';\n\nexport function getPrimaryKeys(tableName: TABLE_NAMES): string[] {\n let primaryId: string[] = ['id'];\n if (tableName === TABLE_WORKFLOW_SNAPSHOT) {\n primaryId = ['workflow_name', 'run_id'];\n } else if (tableName === TABLE_EVALS) {\n primaryId = ['agent_name', 'metric_name', 'run_id'];\n }\n\n return primaryId;\n}\n\nexport function validateKeyTypes(keys: Record<string, any>, tableSchema: SchemaLike): void {\n // Create a map of field names to their expected types\n const fieldTypes = new Map(\n tableSchema.fields.map((field: any) => [field.name, field.type?.toString().toLowerCase()]),\n );\n\n for (const [key, value] of Object.entries(keys)) {\n const fieldType = fieldTypes.get(key);\n\n if (!fieldType) {\n throw new Error(`Field '${key}' does not exist in table schema`);\n }\n\n // Type validation\n if (value !== null) {\n if ((fieldType.includes('int') || fieldType.includes('bigint')) && typeof value !== 'number') {\n throw new Error(`Expected numeric value for field '${key}', got ${typeof value}`);\n }\n\n if (fieldType.includes('utf8') && typeof value !== 'string') {\n throw new Error(`Expected string value for field '${key}', got ${typeof value}`);\n }\n\n if (fieldType.includes('timestamp') && !(value instanceof Date) && typeof value !== 'string') {\n throw new Error(`Expected Date or string value for field '${key}', got ${typeof value}`);\n }\n }\n }\n}\n\nexport function processResultWithTypeConversion(\n rawResult: Record<string, any> | Record<string, any>[],\n tableSchema: SchemaLike,\n): Record<string, any> | Record<string, any>[] {\n // Build a map of field names to their schema types\n const fieldTypeMap = new Map();\n tableSchema.fields.forEach((field: any) => {\n const fieldName = field.name;\n const fieldTypeStr = field.type.toString().toLowerCase();\n fieldTypeMap.set(fieldName, fieldTypeStr);\n });\n\n // Handle array case\n if (Array.isArray(rawResult)) {\n return rawResult.map(item => processResultWithTypeConversion(item, tableSchema));\n }\n\n // Handle single record case\n const processedResult = { ...rawResult };\n\n // Convert each field according to its schema type\n for (const key in processedResult) {\n const fieldTypeStr = fieldTypeMap.get(key);\n if (!fieldTypeStr) continue;\n\n // Skip conversion for ID fields - preserve their original format\n // if (key === 'id') {\n // continue;\n // }\n\n // Only try to convert string values\n if (typeof processedResult[key] === 'string') {\n // Numeric types\n if (fieldTypeStr.includes('int32') || fieldTypeStr.includes('float32')) {\n if (!isNaN(Number(processedResult[key]))) {\n processedResult[key] = Number(processedResult[key]);\n }\n } else if (fieldTypeStr.includes('int64')) {\n processedResult[key] = Number(processedResult[key]);\n } else if (fieldTypeStr.includes('utf8') && key !== 'id') {\n try {\n const parsed = JSON.parse(processedResult[key]);\n if (typeof parsed === 'object') {\n processedResult[key] = JSON.parse(processedResult[key]);\n }\n } catch {}\n }\n } else if (typeof processedResult[key] === 'bigint') {\n // Convert BigInt values to regular numbers for application layer\n processedResult[key] = Number(processedResult[key]);\n } else if (fieldTypeStr.includes('float64') && ['createdAt', 'updatedAt'].includes(key)) {\n processedResult[key] = new Date(processedResult[key]);\n }\n }\n\n return processedResult;\n}\n\nexport async function getTableSchema({\n tableName,\n client,\n}: {\n tableName: TABLE_NAMES;\n client: Connection;\n}): Promise<SchemaLike> {\n try {\n if (!client) {\n throw new Error('LanceDB client not initialized. Call LanceStorage.create() first.');\n }\n if (!tableName) {\n throw new Error('tableName is required for getTableSchema.');\n }\n } catch (validationError: any) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_STORAGE_GET_TABLE_SCHEMA_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: validationError.message,\n details: { tableName },\n },\n validationError,\n );\n }\n\n try {\n const table = await client.openTable(tableName);\n const rawSchema = await table.schema();\n const fields = rawSchema.fields as FieldLike[];\n\n // Convert schema to SchemaLike format\n return {\n fields,\n metadata: new Map<string, string>(),\n get names() {\n return fields.map((field: FieldLike) => field.name);\n },\n };\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_STORAGE_GET_TABLE_SCHEMA_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n}\n","import type { Connection } from '@lancedb/lancedb';\nimport { MessageList } from '@mastra/core/agent';\nimport type { MastraMessageContentV2 } from '@mastra/core/agent';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport type { MastraMessageV1, MastraMessageV2, StorageThreadType } from '@mastra/core/memory';\nimport {\n MemoryStorage,\n resolveMessageLimit,\n TABLE_MESSAGES,\n TABLE_RESOURCES,\n TABLE_THREADS,\n} from '@mastra/core/storage';\nimport type { PaginationInfo, StorageGetMessagesArg, StorageResourceType } from '@mastra/core/storage';\nimport type { StoreOperationsLance } from '../operations';\nimport { getTableSchema, processResultWithTypeConversion } from '../utils';\n\nexport class StoreMemoryLance extends MemoryStorage {\n private client: Connection;\n private operations: StoreOperationsLance;\n constructor({ client, operations }: { client: Connection; operations: StoreOperationsLance }) {\n super();\n this.client = client;\n this.operations = operations;\n }\n\n async getThreadById({ threadId }: { threadId: string }): Promise<StorageThreadType | null> {\n try {\n const thread = await this.operations.load({ tableName: TABLE_THREADS, keys: { id: threadId } });\n\n if (!thread) {\n return null;\n }\n\n return {\n ...thread,\n createdAt: new Date(thread.createdAt),\n updatedAt: new Date(thread.updatedAt),\n };\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORE_GET_THREAD_BY_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getThreadsByResourceId({ resourceId }: { resourceId: string }): Promise<StorageThreadType[]> {\n try {\n const table = await this.client.openTable(TABLE_THREADS);\n // fetches all threads with the given resourceId\n const query = table.query().where(`\\`resourceId\\` = '${resourceId}'`);\n\n const records = await query.toArray();\n return processResultWithTypeConversion(\n records,\n await getTableSchema({ tableName: TABLE_THREADS, client: this.client }),\n ) as StorageThreadType[];\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORE_GET_THREADS_BY_RESOURCE_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n /**\n * Saves a thread to the database. This function doesn't overwrite existing threads.\n * @param thread - The thread to save\n * @returns The saved thread\n */\n async saveThread({ thread }: { thread: StorageThreadType }): Promise<StorageThreadType> {\n try {\n const record = { ...thread, metadata: JSON.stringify(thread.metadata) };\n const table = await this.client.openTable(TABLE_THREADS);\n await table.add([record], { mode: 'append' });\n\n return thread;\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORE_SAVE_THREAD_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async updateThread({\n id,\n title,\n metadata,\n }: {\n id: string;\n title: string;\n metadata: Record<string, unknown>;\n }): Promise<StorageThreadType> {\n const maxRetries = 5;\n\n for (let attempt = 0; attempt < maxRetries; attempt++) {\n try {\n // Get current state atomically\n const current = await this.getThreadById({ threadId: id });\n if (!current) {\n throw new Error(`Thread with id ${id} not found`);\n }\n\n // Merge metadata\n const mergedMetadata = { ...current.metadata, ...metadata };\n\n // Update atomically\n const record = {\n id,\n title,\n metadata: JSON.stringify(mergedMetadata),\n updatedAt: new Date().getTime(),\n };\n\n const table = await this.client.openTable(TABLE_THREADS);\n await table.mergeInsert('id').whenMatchedUpdateAll().whenNotMatchedInsertAll().execute([record]);\n\n const updatedThread = await this.getThreadById({ threadId: id });\n if (!updatedThread) {\n throw new Error(`Failed to retrieve updated thread ${id}`);\n }\n return updatedThread;\n } catch (error: any) {\n if (error.message?.includes('Commit conflict') && attempt < maxRetries - 1) {\n // Wait with exponential backoff before retrying\n const delay = Math.pow(2, attempt) * 10; // 10ms, 20ms, 40ms\n await new Promise(resolve => setTimeout(resolve, delay));\n continue;\n }\n\n // If it's not a commit conflict or we've exhausted retries, throw the error\n throw new MastraError(\n {\n id: 'LANCE_STORE_UPDATE_THREAD_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n // This should never be reached, but just in case\n throw new MastraError(\n {\n id: 'LANCE_STORE_UPDATE_THREAD_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n new Error('All retries exhausted'),\n );\n }\n\n async deleteThread({ threadId }: { threadId: string }): Promise<void> {\n try {\n // Delete the thread\n const table = await this.client.openTable(TABLE_THREADS);\n await table.delete(`id = '${threadId}'`);\n\n // Delete all messages with the matching thread_id\n const messagesTable = await this.client.openTable(TABLE_MESSAGES);\n await messagesTable.delete(`thread_id = '${threadId}'`);\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORE_DELETE_THREAD_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n private normalizeMessage(message: any): MastraMessageV1 | MastraMessageV2 {\n const { thread_id, ...rest } = message;\n return {\n ...rest,\n threadId: thread_id,\n content:\n typeof message.content === 'string'\n ? (() => {\n try {\n return JSON.parse(message.content);\n } catch {\n return message.content;\n }\n })()\n : message.content,\n };\n }\n\n public async getMessages(args: StorageGetMessagesArg & { format?: 'v1' }): Promise<MastraMessageV1[]>;\n public async getMessages(args: StorageGetMessagesArg & { format: 'v2' }): Promise<MastraMessageV2[]>;\n public async getMessages({\n threadId,\n resourceId,\n selectBy,\n format,\n threadConfig,\n }: StorageGetMessagesArg & { format?: 'v1' | 'v2' }): Promise<MastraMessageV1[] | MastraMessageV2[]> {\n try {\n if (!threadId.trim()) throw new Error('threadId must be a non-empty string');\n\n if (threadConfig) {\n throw new Error('ThreadConfig is not supported by LanceDB storage');\n }\n const limit = resolveMessageLimit({ last: selectBy?.last, defaultLimit: Number.MAX_SAFE_INTEGER });\n const table = await this.client.openTable(TABLE_MESSAGES);\n\n let allRecords: any[] = [];\n\n // Handle selectBy.include for cross-thread context retrieval\n if (selectBy?.include && selectBy.include.length > 0) {\n // Get all unique thread IDs from include items\n const threadIds = [...new Set(selectBy.include.map(item => item.threadId))];\n\n // Fetch all messages from all relevant threads\n for (const threadId of threadIds) {\n const threadQuery = table.query().where(`thread_id = '${threadId}'`);\n let threadRecords = await threadQuery.toArray();\n allRecords.push(...threadRecords);\n }\n } else {\n // Regular single-thread query\n let query = table.query().where(`\\`thread_id\\` = '${threadId}'`);\n allRecords = await query.toArray();\n }\n\n // Sort the records chronologically\n allRecords.sort((a, b) => {\n const dateA = new Date(a.createdAt).getTime();\n const dateB = new Date(b.createdAt).getTime();\n return dateA - dateB; // Ascending order\n });\n\n // Process the include.withPreviousMessages and include.withNextMessages if specified\n if (selectBy?.include && selectBy.include.length > 0) {\n allRecords = this.processMessagesWithContext(allRecords, selectBy.include);\n }\n\n // If we're fetching the last N messages, take only the last N after sorting\n if (limit !== Number.MAX_SAFE_INTEGER) {\n allRecords = allRecords.slice(-limit);\n }\n\n const messages = processResultWithTypeConversion(\n allRecords,\n await getTableSchema({ tableName: TABLE_MESSAGES, client: this.client }),\n );\n\n const list = new MessageList({ threadId, resourceId }).add(messages.map(this.normalizeMessage), 'memory');\n if (format === 'v2') return list.get.all.v2();\n return list.get.all.v1();\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORE_GET_MESSAGES_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n threadId,\n resourceId: resourceId ?? '',\n },\n },\n error,\n );\n }\n }\n\n public async getMessagesById({\n messageIds,\n format,\n }: {\n messageIds: string[];\n format: 'v1';\n }): Promise<MastraMessageV1[]>;\n public async getMessagesById({\n messageIds,\n format,\n }: {\n messageIds: string[];\n format?: 'v2';\n }): Promise<MastraMessageV2[]>;\n public async getMessagesById({\n messageIds,\n format,\n }: {\n messageIds: string[];\n format?: 'v1' | 'v2';\n }): Promise<MastraMessageV1[] | MastraMessageV2[]> {\n if (messageIds.length === 0) return [];\n try {\n const table = await this.client.openTable(TABLE_MESSAGES);\n\n const quotedIds = messageIds.map(id => `'${id}'`).join(', ');\n const allRecords = await table.query().where(`id IN (${quotedIds})`).toArray();\n\n const messages = processResultWithTypeConversion(\n allRecords,\n await getTableSchema({ tableName: TABLE_MESSAGES, client: this.client }),\n );\n\n const list = new MessageList().add(messages.map(this.normalizeMessage), 'memory');\n if (format === `v1`) return list.get.all.v1();\n return list.get.all.v2();\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORE_GET_MESSAGES_BY_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n messageIds: JSON.stringify(messageIds),\n },\n },\n error,\n );\n }\n }\n\n async saveMessages(args: { messages: MastraMessageV1[]; format?: undefined | 'v1' }): Promise<MastraMessageV1[]>;\n async saveMessages(args: { messages: MastraMessageV2[]; format: 'v2' }): Promise<MastraMessageV2[]>;\n async saveMessages(\n args: { messages: MastraMessageV1[]; format?: undefined | 'v1' } | { messages: MastraMessageV2[]; format: 'v2' },\n ): Promise<MastraMessageV2[] | MastraMessageV1[]> {\n try {\n const { messages, format = 'v1' } = args;\n if (messages.length === 0) {\n return [];\n }\n\n const threadId = messages[0]?.threadId;\n\n if (!threadId) {\n throw new Error('Thread ID is required');\n }\n\n // Validate all messages before saving\n for (const message of messages) {\n if (!message.id) {\n throw new Error('Message ID is required');\n }\n if (!message.threadId) {\n throw new Error('Thread ID is required for all messages');\n }\n if (message.resourceId === null || message.resourceId === undefined) {\n throw new Error('Resource ID cannot be null or undefined');\n }\n if (!message.content) {\n throw new Error('Message content is required');\n }\n }\n\n const transformedMessages = messages.map((message: MastraMessageV2 | MastraMessageV1) => {\n const { threadId, type, ...rest } = message;\n return {\n ...rest,\n thread_id: threadId,\n type: type ?? 'v2',\n content: JSON.stringify(message.content),\n };\n });\n\n const table = await this.client.openTable(TABLE_MESSAGES);\n await table.mergeInsert('id').whenMatchedUpdateAll().whenNotMatchedInsertAll().execute(transformedMessages);\n\n // Update the thread's updatedAt timestamp\n const threadsTable = await this.client.openTable(TABLE_THREADS);\n const currentTime = new Date().getTime();\n const updateRecord = { id: threadId, updatedAt: currentTime };\n await threadsTable.mergeInsert('id').whenMatchedUpdateAll().whenNotMatchedInsertAll().execute([updateRecord]);\n\n const list = new MessageList().add(messages, 'memory');\n if (format === `v2`) return list.get.all.v2();\n return list.get.all.v1();\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORE_SAVE_MESSAGES_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getThreadsByResourceIdPaginated(args: {\n resourceId: string;\n page?: number;\n perPage?: number;\n }): Promise<PaginationInfo & { threads: StorageThreadType[] }> {\n try {\n const { resourceId, page = 0, perPage = 10 } = args;\n const table = await this.client.openTable(TABLE_THREADS);\n\n // Get total count\n const total = await table.countRows(`\\`resourceId\\` = '${resourceId}'`);\n\n // Get paginated results\n const query = table.query().where(`\\`resourceId\\` = '${resourceId}'`);\n const offset = page * perPage;\n query.limit(perPage);\n if (offset > 0) {\n query.offset(offset);\n }\n\n const records = await query.toArray();\n\n // Sort by updatedAt descending (most recent first)\n records.sort((a, b) => new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime());\n\n const schema = await getTableSchema({ tableName: TABLE_THREADS, client: this.client });\n const threads = records.map(record => processResultWithTypeConversion(record, schema)) as StorageThreadType[];\n\n return {\n threads,\n total,\n page,\n perPage,\n hasMore: total > (page + 1) * perPage,\n };\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORE_GET_THREADS_BY_RESOURCE_ID_PAGINATED_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n /**\n * Processes messages to include context messages based on withPreviousMessages and withNextMessages\n * @param records - The sorted array of records to process\n * @param include - The array of include specifications with context parameters\n * @returns The processed array with context messages included\n */\n private processMessagesWithContext(\n records: any[],\n include: { id: string; withPreviousMessages?: number; withNextMessages?: number }[],\n ): any[] {\n const messagesWithContext = include.filter(item => item.withPreviousMessages || item.withNextMessages);\n\n if (messagesWithContext.length === 0) {\n return records;\n }\n\n // Create a map of message id to index in the sorted array for quick lookup\n const messageIndexMap = new Map<string, number>();\n records.forEach((message, index) => {\n messageIndexMap.set(message.id, index);\n });\n\n // Keep track of additional indices to include\n const additionalIndices = new Set<number>();\n\n for (const item of messagesWithContext) {\n const messageIndex = messageIndexMap.get(item.id);\n\n if (messageIndex !== undefined) {\n // Add previous messages if requested\n if (item.withPreviousMessages) {\n const startIdx = Math.max(0, messageIndex - item.withPreviousMessages);\n for (let i = startIdx; i < messageIndex; i++) {\n additionalIndices.add(i);\n }\n }\n\n // Add next messages if requested\n if (item.withNextMessages) {\n const endIdx = Math.min(records.length - 1, messageIndex + item.withNextMessages);\n for (let i = messageIndex + 1; i <= endIdx; i++) {\n additionalIndices.add(i);\n }\n }\n }\n }\n\n // If we need to include additional messages, create a new set of records\n if (additionalIndices.size === 0) {\n return records;\n }\n\n // Get IDs of the records that matched the original query\n const originalMatchIds = new Set(include.map(item => item.id));\n\n // Create a set of all indices we need to include\n const allIndices = new Set<number>();\n\n // Add indices of originally matched messages\n records.forEach((record, index) => {\n if (originalMatchIds.has(record.id)) {\n allIndices.add(index);\n }\n });\n\n // Add the additional context message indices\n additionalIndices.forEach(index => {\n allIndices.add(index);\n });\n\n // Create a new filtered array with only the required messages\n // while maintaining chronological order\n return Array.from(allIndices)\n .sort((a, b) => a - b)\n .map(index => records[index]);\n }\n\n async getMessagesPaginated(\n args: StorageGetMessagesArg & { format?: 'v1' | 'v2' },\n ): Promise<PaginationInfo & { messages: MastraMessageV1[] | MastraMessageV2[] }> {\n const { threadId, resourceId, selectBy, format = 'v1' } = args;\n const page = selectBy?.pagination?.page ?? 0;\n const perPage = selectBy?.pagination?.perPage ?? 10;\n\n try {\n if (!threadId.trim()) throw new Error('threadId must be a non-empty string');\n\n // Extract pagination and dateRange from selectBy.pagination\n const dateRange = selectBy?.pagination?.dateRange;\n const fromDate = dateRange?.start;\n const toDate = dateRange?.end;\n\n const table = await this.client.openTable(TABLE_MESSAGES);\n const messages: any[] = [];\n\n // Handle selectBy.include first (before pagination)\n if (selectBy?.include && Array.isArray(selectBy.include)) {\n // Get all unique thread IDs from include items\n const threadIds = [...new Set(selectBy.include.map(item => item.threadId))];\n\n // Fetch all messages from all relevant threads\n const allThreadMessages: any[] = [];\n for (const threadId of threadIds) {\n const threadQuery = table.query().where(`thread_id = '${threadId}'`);\n let threadRecords = await threadQuery.toArray();\n\n // Apply date filtering in JS for context\n if (fromDate) threadRecords = threadRecords.filter(m => m.createdAt >= fromDate.getTime());\n if (toDate) threadRecords = threadRecords.filter(m => m.createdAt <= toDate.getTime());\n\n allThreadMessages.push(...threadRecords);\n }\n\n // Sort all messages by createdAt\n allThreadMessages.sort((a, b) => a.createdAt - b.createdAt);\n\n // Apply processMessagesWithContext to the combined array\n const contextMessages = this.processMessagesWithContext(allThreadMessages, selectBy.include);\n messages.push(...contextMessages);\n }\n\n // Build query conditions for the main thread\n const conditions: string[] = [`thread_id = '${threadId}'`];\n if (resourceId) {\n conditions.push(`\\`resourceId\\` = '${resourceId}'`);\n }\n if (fromDate) {\n conditions.push(`\\`createdAt\\` >= ${fromDate.getTime()}`);\n }\n if (toDate) {\n conditions.push(`\\`createdAt\\` <= ${toDate.getTime()}`);\n }\n\n // Get total count (excluding already included messages)\n let total = 0;\n if (conditions.length > 0) {\n total = await table.countRows(conditions.join(' AND '));\n } else {\n total = await table.countRows();\n }\n\n // If no messages and no included messages, return empty result\n if (total === 0 && messages.length === 0) {\n return {\n messages: [],\n total: 0,\n page,\n perPage,\n hasMore: false,\n };\n }\n\n // Fetch paginated messages (excluding already included ones)\n const excludeIds = messages.map(m => m.id);\n let selectedMessages: any[] = [];\n\n if (selectBy?.last && selectBy.last > 0) {\n // Handle selectBy.last: get last N messages for the main thread\n const query = table.query();\n if (conditions.length > 0) {\n query.where(conditions.join(' AND '));\n }\n let records = await query.toArray();\n records = records.sort((a, b) => a.createdAt - b.createdAt);\n\n // Exclude already included messages\n if (excludeIds.length > 0) {\n records = records.filter(m => !excludeIds.includes(m.id));\n }\n\n selectedMessages = records.slice(-selectBy.last);\n } else {\n // Regular pagination\n const query = table.query();\n if (conditions.length > 0) {\n query.where(conditions.join(' AND '));\n }\n let records = await query.toArray();\n records = records.sort((a, b) => a.createdAt - b.createdAt);\n\n // Exclude already included messages\n if (excludeIds.length > 0) {\n records = records.filter(m => !excludeIds.includes(m.id));\n }\n\n selectedMessages = records.slice(page * perPage, (page + 1) * perPage);\n }\n\n // Merge all messages and deduplicate\n const allMessages = [...messages, ...selectedMessages];\n const seen = new Set();\n const dedupedMessages = allMessages.filter(m => {\n const key = `${m.id}:${m.thread_id}`;\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n });\n\n // Convert to correct format (v1/v2)\n const formattedMessages = dedupedMessages.map((msg: any) => {\n const { thread_id, ...rest } = msg;\n return {\n ...rest,\n threadId: thread_id,\n content:\n typeof msg.content === 'string'\n ? (() => {\n try {\n return JSON.parse(msg.content);\n } catch {\n return msg.content;\n }\n })()\n : msg.content,\n };\n });\n\n const list = new MessageList().add(formattedMessages, 'memory');\n return {\n messages: format === 'v2' ? list.get.all.v2() : list.get.all.v1(),\n total: total, // Total should be the count of messages matching the filters\n page,\n perPage,\n hasMore: total > (page + 1) * perPage,\n };\n } catch (error: any) {\n const mastraError = new MastraError(\n {\n id: 'LANCE_STORE_GET_MESSAGES_PAGINATED_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n threadId,\n resourceId: resourceId ?? '',\n },\n },\n error,\n );\n this.logger?.trackException?.(mastraError);\n this.logger?.error?.(mastraError.toString());\n return { messages: [], total: 0, page, perPage, hasMore: false };\n }\n }\n\n /**\n * Parse message data from LanceDB record format to MastraMessageV2 format\n */\n private parseMessageData(data: any): MastraMessageV2 {\n const { thread_id, ...rest } = data;\n return {\n ...rest,\n threadId: thread_id,\n content:\n typeof data.content === 'string'\n ? (() => {\n try {\n return JSON.parse(data.content);\n } catch {\n return data.content;\n }\n })()\n : data.content,\n createdAt: new Date(data.createdAt),\n updatedAt: new Date(data.updatedAt),\n } as MastraMessageV2;\n }\n\n async updateMessages(args: {\n messages: Partial<Omit<MastraMessageV2, 'createdAt'>> &\n {\n id: string;\n content?: { metadata?: MastraMessageContentV2['metadata']; content?: MastraMessageContentV2['content'] };\n }[];\n }): Promise<MastraMessageV2[]> {\n const { messages } = args;\n this.logger.debug('Updating messages', { count: messages.length });\n\n if (!messages.length) {\n return [];\n }\n\n const updatedMessages: MastraMessageV2[] = [];\n const affectedThreadIds = new Set<string>();\n\n try {\n for (const updateData of messages) {\n const { id, ...updates } = updateData;\n\n // Get the existing message\n const existingMessage = await this.operations.load({ tableName: TABLE_MESSAGES, keys: { id } });\n if (!existingMessage) {\n this.logger.warn('Message not found for update', { id });\n continue;\n }\n\n const existingMsg = this.parseMessageData(existingMessage);\n const originalThreadId = existingMsg.threadId;\n affectedThreadIds.add(originalThreadId!);\n\n // Prepare the update payload\n const updatePayload: any = {};\n\n // Handle basic field updates\n if ('role' in updates && updates.role !== undefined) updatePayload.role = updates.role;\n if ('type' in updates && updates.type !== undefined) updatePayload.type = updates.type;\n if ('resourceId' in updates && updates.resourceId !== undefined) updatePayload.resourceId = updates.resourceId;\n if ('threadId' in updates && updates.threadId !== undefined && updates.threadId !== null) {\n updatePayload.thread_id = updates.threadId;\n affectedThreadIds.add(updates.threadId as string);\n }\n\n // Handle content updates\n if (updates.content) {\n const existingContent = existingMsg.content;\n let newContent = { ...existingContent };\n\n // Deep merge metadata if provided\n if (updates.content.metadata !== undefined) {\n newContent.metadata = {\n ...(existingContent.metadata || {}),\n ...(updates.content.metadata || {}),\n };\n }\n\n // Update content string if provided\n if (updates.content.content !== undefined) {\n newContent.content = updates.content.content;\n }\n\n // Update parts if provided (only if it exists in the content type)\n if ('parts' in updates.content && updates.content.parts !== undefined) {\n (newContent as any).parts = updates.content.parts;\n }\n\n updatePayload.content = JSON.stringify(newContent);\n }\n\n // Update the message using merge insert\n await this.operations.insert({ tableName: TABLE_MESSAGES, record: { id, ...updatePayload } });\n\n // Get the updated message\n const updatedMessage = await this.operations.load({ tableName: TABLE_MESSAGES, keys: { id } });\n if (updatedMessage) {\n updatedMessages.push(this.parseMessageData(updatedMessage));\n }\n }\n\n // Update timestamps for all affected threads\n for (const threadId of affectedThreadIds) {\n await this.operations.insert({\n tableName: TABLE_THREADS,\n record: { id: threadId, updatedAt: Date.now() },\n });\n }\n\n return updatedMessages;\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORE_UPDATE_MESSAGES_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { count: messages.length },\n },\n error,\n );\n }\n }\n\n async getResourceById({ resourceId }: { resourceId: string }): Promise<StorageResourceType | null> {\n try {\n const resource = await this.operations.load({ tableName: TABLE_RESOURCES, keys: { id: resourceId } });\n\n if (!resource) {\n return null;\n }\n\n // Handle date conversion - LanceDB stores timestamps as numbers\n let createdAt: Date;\n let updatedAt: Date;\n\n // Convert ISO strings back to Date objects with error handling\n try {\n // If createdAt is already a Date object, use it directly\n if (resource.createdAt instanceof Date) {\n createdAt = resource.createdAt;\n } else if (typeof resource.createdAt === 'string') {\n // If it's an ISO string, parse it\n createdAt = new Date(resource.createdAt);\n } else if (typeof resource.createdAt === 'number') {\n // If it's a timestamp, convert it to Date\n createdAt = new Date(resource.createdAt);\n } else {\n // If it's null or undefined, use current date\n createdAt = new Date();\n }\n if (isNaN(createdAt.getTime())) {\n createdAt = new Date(); // Fallback to current date if invalid\n }\n } catch {\n createdAt = new Date(); // Fallback to current date if conversion fails\n }\n\n try {\n // If updatedAt is already a Date object, use it directly\n if (resource.updatedAt instanceof Date) {\n updatedAt = resource.updatedAt;\n } else if (typeof resource.updatedAt === 'string') {\n // If it's an ISO string, parse it\n updatedAt = new Date(resource.updatedAt);\n } else if (typeof resource.updatedAt === 'number') {\n // If it's a timestamp, convert it to Date\n updatedAt = new Date(resource.updatedAt);\n } else {\n // If it's null or undefined, use current date\n updatedAt = new Date();\n }\n if (isNaN(updatedAt.getTime())) {\n updatedAt = new Date(); // Fallback to current date if invalid\n }\n } catch {\n updatedAt = new Date(); // Fallback to current date if conversion fails\n }\n\n // Handle workingMemory - return undefined for null/undefined, empty string for empty string\n let workingMemory = resource.workingMemory;\n if (workingMemory === null || workingMemory === undefined) {\n workingMemory = undefined;\n } else if (workingMemory === '') {\n workingMemory = ''; // Return empty string for empty strings to match test expectations\n } else if (typeof workingMemory === 'object') {\n workingMemory = JSON.stringify(workingMemory);\n }\n\n // Handle metadata - return undefined for empty strings, parse JSON safely\n let metadata = resource.metadata;\n if (metadata === '' || metadata === null || metadata === undefined) {\n metadata = undefined;\n } else if (typeof metadata === 'string') {\n try {\n metadata = JSON.parse(metadata);\n } catch {\n // If JSON parsing fails, return the original string\n metadata = metadata;\n }\n }\n\n return {\n ...resource,\n createdAt,\n updatedAt,\n workingMemory,\n metadata,\n } as StorageResourceType;\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORE_GET_RESOURCE_BY_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async saveResource({ resource }: { resource: StorageResourceType }): Promise<StorageResourceType> {\n try {\n const record = {\n ...resource,\n metadata: resource.metadata ? JSON.stringify(resource.metadata) : '',\n createdAt: resource.createdAt.getTime(), // Store as timestamp (milliseconds)\n updatedAt: resource.updatedAt.getTime(), // Store as timestamp (milliseconds)\n };\n\n const table = await this.client.openTable(TABLE_RESOURCES);\n await table.add([record], { mode: 'append' });\n\n return resource;\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORE_SAVE_RESOURCE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async updateResource({\n resourceId,\n workingMemory,\n metadata,\n }: {\n resourceId: string;\n workingMemory?: string;\n metadata?: Record<string, unknown>;\n }): Promise<StorageResourceType> {\n const maxRetries = 3;\n\n for (let attempt = 0; attempt < maxRetries; attempt++) {\n try {\n const existingResource = await this.getResourceById({ resourceId });\n\n if (!existingResource) {\n // Create new resource if it doesn't exist\n const newResource: StorageResourceType = {\n id: resourceId,\n workingMemory,\n metadata: metadata || {},\n createdAt: new Date(),\n updatedAt: new Date(),\n };\n return this.saveResource({ resource: newResource });\n }\n\n const updatedResource = {\n ...existingResource,\n workingMemory: workingMemory !== undefined ? workingMemory : existingResource.workingMemory,\n metadata: {\n ...existingResource.metadata,\n ...metadata,\n },\n updatedAt: new Date(),\n };\n\n const record = {\n id: resourceId,\n workingMemory: updatedResource.workingMemory || '',\n metadata: updatedResource.metadata ? JSON.stringify(updatedResource.metadata) : '',\n updatedAt: updatedResource.updatedAt.getTime(), // Store as timestamp (milliseconds)\n };\n\n const table = await this.client.openTable(TABLE_RESOURCES);\n await table.mergeInsert('id').whenMatchedUpdateAll().whenNotMatchedInsertAll().execute([record]);\n\n return updatedResource;\n } catch (error: any) {\n if (error.message?.includes('Commit conflict') && attempt < maxRetries - 1) {\n // Wait with exponential backoff before retrying\n const delay = Math.pow(2, attempt) * 10; // 10ms, 20ms, 40ms\n await new Promise(resolve => setTimeout(resolve, delay));\n continue;\n }\n\n // If it's not a commit conflict or we've exhausted retries, throw the error\n throw new MastraError(\n {\n id: 'LANCE_STORE_UPDATE_RESOURCE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n // This should never be reached, but TypeScript requires it\n throw new Error('Unexpected end of retry loop');\n }\n}\n","import type { Connection } from '@lancedb/lancedb';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { StoreOperations } from '@mastra/core/storage';\nimport type { TABLE_NAMES, StorageColumn } from '@mastra/core/storage';\nimport { Utf8, Int32, Float32, Binary, Schema, Field, Float64 } from 'apache-arrow';\nimport type { DataType } from 'apache-arrow';\nimport { getPrimaryKeys, getTableSchema, processResultWithTypeConversion, validateKeyTypes } from '../utils';\n\nexport class StoreOperationsLance extends StoreOperations {\n client: Connection;\n constructor({ client }: { client: Connection }) {\n super();\n this.client = client;\n }\n\n protected getDefaultValue(type: StorageColumn['type']): string {\n switch (type) {\n case 'text':\n return \"''\";\n case 'timestamp':\n return 'CURRENT_TIMESTAMP';\n case 'integer':\n case 'bigint':\n return '0';\n case 'jsonb':\n return \"'{}'\";\n case 'uuid':\n return \"''\";\n default:\n return super.getDefaultValue(type);\n }\n }\n\n async hasColumn(tableName: TABLE_NAMES, columnName: string): Promise<boolean> {\n const table = await this.client.openTable(tableName);\n const schema = await table.schema();\n return schema.fields.some(field => field.name === columnName);\n }\n\n private translateSchema(schema: Record<string, StorageColumn>): Schema {\n const fields = Object.entries(schema).map(([name, column]) => {\n // Convert string type to Arrow DataType\n let arrowType: DataType;\n switch (column.type.toLowerCase()) {\n case 'text':\n case 'uuid':\n arrowType = new Utf8();\n break;\n case 'int':\n case 'integer':\n arrowType = new Int32();\n break;\n case 'bigint':\n arrowType = new Float64();\n break;\n case 'float':\n arrowType = new Float32();\n break;\n case 'jsonb':\n case 'json':\n arrowType = new Utf8();\n break;\n case 'binary':\n arrowType = new Binary();\n break;\n case 'timestamp':\n arrowType = new Float64();\n break;\n default:\n // Default to string for unknown types\n arrowType = new Utf8();\n }\n\n // Create a field with the appropriate arrow type\n return new Field(name, arrowType, column.nullable ?? true);\n });\n\n return new Schema(fields);\n }\n\n async createTable({\n tableName,\n schema,\n }: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n }): Promise<void> {\n try {\n if (!this.client) {\n throw new Error('LanceDB client not initialized. Call LanceStorage.create() first.');\n }\n if (!tableName) {\n throw new Error('tableName is required for createTable.');\n }\n if (!schema) {\n throw new Error('schema is required for createTable.');\n }\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_STORAGE_CREATE_TABLE_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { tableName },\n },\n error,\n );\n }\n\n try {\n const arrowSchema = this.translateSchema(schema);\n await this.client.createEmptyTable(tableName, arrowSchema);\n } catch (error: any) {\n if (error.message?.includes('already exists')) {\n this.logger.debug(`Table '${tableName}' already exists, skipping create`);\n return;\n }\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_STORAGE_CREATE_TABLE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n\n async dropTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n try {\n if (!this.client) {\n throw new Error('LanceDB client not initialized. Call LanceStorage.create() first.');\n }\n if (!tableName) {\n throw new Error('tableName is required for dropTable.');\n }\n } catch (validationError: any) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_STORAGE_DROP_TABLE_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: validationError.message,\n details: { tableName },\n },\n validationError,\n );\n }\n\n try {\n await this.client.dropTable(tableName);\n } catch (error: any) {\n if (error.toString().includes('was not found') || error.message?.includes('Table not found')) {\n this.logger.debug(`Table '${tableName}' does not exist, skipping drop`);\n return;\n }\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_STORAGE_DROP_TABLE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n\n async alterTable({\n tableName,\n schema,\n ifNotExists,\n }: {\n tableName: string;\n schema: Record<string, StorageColumn>;\n ifNotExists: string[];\n }): Promise<void> {\n try {\n if (!this.client) {\n throw new Error('LanceDB client not initialized. Call LanceStorage.create() first.');\n }\n if (!tableName) {\n throw new Error('tableName is required for alterTable.');\n }\n if (!schema) {\n throw new Error('schema is required for alterTable.');\n }\n if (!ifNotExists || ifNotExists.length === 0) {\n this.logger.debug('No columns specified to add in alterTable, skipping.');\n return;\n }\n } catch (validationError: any) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_STORAGE_ALTER_TABLE_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: validationError.message,\n details: { tableName },\n },\n validationError,\n );\n }\n\n try {\n const table = await this.client.openTable(tableName);\n const currentSchema = await table.schema();\n const existingFields = new Set(currentSchema.fields.map((f: any) => f.name));\n\n const typeMap: Record<string, string> = {\n text: 'string',\n integer: 'int',\n bigint: 'bigint',\n timestamp: 'timestamp',\n jsonb: 'string',\n uuid: 'string',\n };\n\n // Find columns to add\n const columnsToAdd = ifNotExists\n .filter(col => schema[col] && !existingFields.has(col))\n .map(col => {\n const colDef = schema[col];\n return {\n name: col,\n valueSql: colDef?.nullable\n ? `cast(NULL as ${typeMap[colDef.type ?? 'text']})`\n : `cast(${this.getDefaultValue(colDef?.type ?? 'text')} as ${typeMap[colDef?.type ?? 'text']})`,\n };\n });\n\n if (columnsToAdd.length > 0) {\n await table.addColumns(columnsToAdd);\n this.logger?.info?.(`Added columns [${columnsToAdd.map(c => c.name).join(', ')}] to table ${tableName}`);\n }\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_STORAGE_ALTER_TABLE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n\n async clearTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n try {\n if (!this.client) {\n throw new Error('LanceDB client not initialized. Call LanceStorage.create() first.');\n }\n if (!tableName) {\n throw new Error('tableName is required for clearTable.');\n }\n } catch (validationError: any) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_STORAGE_CLEAR_TABLE_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: validationError.message,\n details: { tableName },\n },\n validationError,\n );\n }\n\n try {\n const table = await this.client.openTable(tableName);\n\n // delete function always takes a predicate as an argument, so we use '1=1' to delete all records because it is always true.\n await table.delete('1=1');\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_STORAGE_CLEAR_TABLE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n\n async insert({ tableName, record }: { tableName: string; record: Record<string, any> }): Promise<void> {\n try {\n if (!this.client) {\n throw new Error('LanceDB client not initialized. Call LanceStorage.create() first.');\n }\n if (!tableName) {\n throw new Error('tableName is required for insert.');\n }\n if (!record || Object.keys(record).length === 0) {\n throw new Error('record is required and cannot be empty for insert.');\n }\n } catch (validationError: any) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_STORAGE_INSERT_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: validationError.message,\n details: { tableName },\n },\n validationError,\n );\n }\n\n try {\n const table = await this.client.openTable(tableName);\n\n const primaryId = getPrimaryKeys(tableName as TABLE_NAMES);\n\n const processedRecord = { ...record };\n\n for (const key in processedRecord) {\n if (\n processedRecord[key] !== null &&\n typeof processedRecord[key] === 'object' &&\n !(processedRecord[key] instanceof Date)\n ) {\n this.logger.debug('Converting object to JSON string: ', processedRecord[key]);\n processedRecord[key] = JSON.stringify(processedRecord[key]);\n }\n }\n console.info(await table.schema());\n\n await table.mergeInsert(primaryId).whenMatchedUpdateAll().whenNotMatchedInsertAll().execute([processedRecord]);\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_STORAGE_INSERT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n\n async batchInsert({ tableName, records }: { tableName: string; records: Record<string, any>[] }): Promise<void> {\n try {\n if (!this.client) {\n throw new Error('LanceDB client not initialized. Call LanceStorage.create() first.');\n }\n if (!tableName) {\n throw new Error('tableName is required for batchInsert.');\n }\n if (!records || records.length === 0) {\n throw new Error('records array is required and cannot be empty for batchInsert.');\n }\n } catch (validationError: any) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_STORAGE_BATCH_INSERT_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: validationError.message,\n details: { tableName },\n },\n validationError,\n );\n }\n\n try {\n const table = await this.client.openTable(tableName);\n\n const primaryId = getPrimaryKeys(tableName as TABLE_NAMES);\n\n const processedRecords = records.map(record => {\n const processedRecord = { ...record };\n\n // Convert values based on schema type\n for (const key in processedRecord) {\n // Skip null/undefined values\n if (processedRecord[key] == null) continue;\n\n if (\n processedRecord[key] !== null &&\n typeof processedRecord[key] === 'object' &&\n !(processedRecord[key] instanceof Date)\n ) {\n processedRecord[key] = JSON.stringify(processedRecord[key]);\n }\n }\n\n return processedRecord;\n });\n\n await table.mergeInsert(primaryId).whenMatchedUpdateAll().whenNotMatchedInsertAll().execute(processedRecords);\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_STORAGE_BATCH_INSERT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n\n async load({ tableName, keys }: { tableName: TABLE_NAMES; keys: Record<string, any> }): Promise<any> {\n try {\n if (!this.client) {\n throw new Error('LanceDB client not initialized. Call LanceStorage.create() first.');\n }\n if (!tableName) {\n throw new Error('tableName is required for load.');\n }\n if (!keys || Object.keys(keys).length === 0) {\n throw new Error('keys are required and cannot be empty for load.');\n }\n } catch (validationError: any) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_STORAGE_LOAD_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: validationError.message,\n details: { tableName },\n },\n validationError,\n );\n }\n\n try {\n const table = await this.client.openTable(tableName);\n const tableSchema = await getTableSchema({ tableName, client: this.client });\n const query = table.query();\n\n // Build filter condition with 'and' between all conditions\n if (Object.keys(keys).length > 0) {\n // Validate key types against schema\n validateKeyTypes(keys, tableSchema);\n\n const filterConditions = Object.entries(keys)\n .map(([key, value]) => {\n // Check if key is in camelCase and wrap it in backticks if it is\n const isCamelCase = /^[a-z][a-zA-Z]*$/.test(key) && /[A-Z]/.test(key);\n const quotedKey = isCamelCase ? `\\`${key}\\`` : key;\n\n // Handle different types appropriately\n if (typeof value === 'string') {\n return `${quotedKey} = '${value}'`;\n } else if (value === null) {\n return `${quotedKey} IS NULL`;\n } else {\n // For numbers, booleans, etc.\n return `${quotedKey} = ${value}`;\n }\n })\n .join(' AND ');\n\n this.logger.debug('where clause generated: ' + filterConditions);\n query.where(filterConditions);\n }\n\n const result = await query.limit(1).toArray();\n\n if (result.length === 0) {\n this.logger.debug('No record found');\n return null;\n }\n // Process the result with type conversions\n return processResultWithTypeConversion(result[0], tableSchema);\n } catch (error: any) {\n // If it's already a MastraError (e.g. from validateKeyTypes if we change it later), rethrow\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_STORAGE_LOAD_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName, keyCount: Object.keys(keys).length, firstKey: Object.keys(keys)[0] ?? '' },\n },\n error,\n );\n }\n }\n}\n","import type { Connection } from '@lancedb/lancedb';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport type { ScoreRowData, ScoringSource, ValidatedSaveScorePayload } from '@mastra/core/scores';\nimport { saveScorePayloadSchema } from '@mastra/core/scores';\nimport { ScoresStorage, TABLE_SCORERS } from '@mastra/core/storage';\nimport type { PaginationInfo, StoragePagination } from '@mastra/core/storage';\nimport { getTableSchema, processResultWithTypeConversion } from '../utils';\n\nexport class StoreScoresLance extends ScoresStorage {\n private client: Connection;\n constructor({ client }: { client: Connection }) {\n super();\n this.client = client;\n }\n\n async saveScore(score: ScoreRowData): Promise<{ score: ScoreRowData }> {\n let validatedScore: ValidatedSaveScorePayload;\n try {\n validatedScore = saveScorePayloadSchema.parse(score);\n } catch (error) {\n throw new MastraError(\n {\n id: 'LANCE_STORAGE_SAVE_SCORE_FAILED',\n text: 'Failed to save score in LanceStorage',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n try {\n const id = crypto.randomUUID();\n const table = await this.client.openTable(TABLE_SCORERS);\n // Fetch schema fields for mastra_scorers\n const schema = await getTableSchema({ tableName: TABLE_SCORERS, client: this.client });\n const allowedFields = new Set(schema.fields.map((f: any) => f.name));\n // Filter out fields not in schema\n const filteredScore: Record<string, any> = {};\n (Object.keys(validatedScore) as (keyof ScoreRowData)[]).forEach(key => {\n if (allowedFields.has(key)) {\n filteredScore[key] = score[key];\n }\n });\n // Convert any object fields to JSON strings for storage\n for (const key in filteredScore) {\n if (\n filteredScore[key] !== null &&\n typeof filteredScore[key] === 'object' &&\n !(filteredScore[key] instanceof Date)\n ) {\n filteredScore[key] = JSON.stringify(filteredScore[key]);\n }\n }\n\n filteredScore.id = id;\n await table.add([filteredScore], { mode: 'append' });\n return { score };\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORAGE_SAVE_SCORE_FAILED',\n text: 'Failed to save score in LanceStorage',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { error: error?.message },\n },\n error,\n );\n }\n }\n\n async getScoreById({ id }: { id: string }): Promise<ScoreRowData | null> {\n try {\n const table = await this.client.openTable(TABLE_SCORERS);\n\n const query = table.query().where(`id = '${id}'`).limit(1);\n\n const records = await query.toArray();\n\n if (records.length === 0) return null;\n const schema = await getTableSchema({ tableName: TABLE_SCORERS, client: this.client });\n return processResultWithTypeConversion(records[0], schema) as ScoreRowData;\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORAGE_GET_SCORE_BY_ID_FAILED',\n text: 'Failed to get score by id in LanceStorage',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { error: error?.message },\n },\n error,\n );\n }\n }\n\n async getScoresByScorerId({\n scorerId,\n pagination,\n entityId,\n entityType,\n source,\n }: {\n scorerId: string;\n pagination: StoragePagination;\n entityId?: string;\n entityType?: string;\n source?: ScoringSource;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n try {\n const table = await this.client.openTable(TABLE_SCORERS);\n // Use zero-based pagination (default page = 0)\n const { page = 0, perPage = 10 } = pagination || {};\n const offset = page * perPage;\n\n let query = table.query().where(`\\`scorerId\\` = '${scorerId}'`);\n\n if (source) {\n query = query.where(`\\`source\\` = '${source}'`);\n }\n\n if (entityId) {\n query = query.where(`\\`entityId\\` = '${entityId}'`);\n }\n if (entityType) {\n query = query.where(`\\`entityType\\` = '${entityType}'`);\n }\n\n query = query.limit(perPage);\n if (offset > 0) query.offset(offset);\n const records = await query.toArray();\n const schema = await getTableSchema({ tableName: TABLE_SCORERS, client: this.client });\n const scores = processResultWithTypeConversion(records, schema) as ScoreRowData[];\n\n let totalQuery = table.query().where(`\\`scorerId\\` = '${scorerId}'`);\n if (source) {\n totalQuery = totalQuery.where(`\\`source\\` = '${source}'`);\n }\n const allRecords = await totalQuery.toArray();\n const total = allRecords.length;\n\n return {\n pagination: {\n page,\n perPage,\n total,\n hasMore: offset + scores.length < total,\n },\n scores,\n };\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORAGE_GET_SCORES_BY_SCORER_ID_FAILED',\n text: 'Failed to get scores by scorerId in LanceStorage',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { error: error?.message },\n },\n error,\n );\n }\n }\n\n async getScoresByRunId({\n runId,\n pagination,\n }: {\n runId: string;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n try {\n const table = await this.client.openTable(TABLE_SCORERS);\n const { page = 0, perPage = 10 } = pagination || {};\n const offset = page * perPage;\n // Query for scores with the given runId\n const query = table.query().where(`\\`runId\\` = '${runId}'`).limit(perPage);\n if (offset > 0) query.offset(offset);\n const records = await query.toArray();\n const schema = await getTableSchema({ tableName: TABLE_SCORERS, client: this.client });\n const scores = processResultWithTypeConversion(records, schema) as ScoreRowData[];\n // Get total count for pagination\n const allRecords = await table.query().where(`\\`runId\\` = '${runId}'`).toArray();\n const total = allRecords.length;\n return {\n pagination: {\n page,\n perPage,\n total,\n hasMore: offset + scores.length < total,\n },\n scores,\n };\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORAGE_GET_SCORES_BY_RUN_ID_FAILED',\n text: 'Failed to get scores by runId in LanceStorage',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { error: error?.message },\n },\n error,\n );\n }\n }\n\n async getScoresByEntityId({\n entityId,\n entityType,\n pagination,\n }: {\n pagination: StoragePagination;\n entityId: string;\n entityType: string;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n try {\n const table = await this.client.openTable(TABLE_SCORERS);\n const { page = 0, perPage = 10 } = pagination || {};\n const offset = page * perPage;\n // Query for scores with the given entityId and entityType\n const query = table\n .query()\n .where(`\\`entityId\\` = '${entityId}' AND \\`entityType\\` = '${entityType}'`)\n .limit(perPage);\n if (offset > 0) query.offset(offset);\n const records = await query.toArray();\n const schema = await getTableSchema({ tableName: TABLE_SCORERS, client: this.client });\n const scores = processResultWithTypeConversion(records, schema) as ScoreRowData[];\n // Get total count for pagination\n const allRecords = await table\n .query()\n .where(`\\`entityId\\` = '${entityId}' AND \\`entityType\\` = '${entityType}'`)\n .toArray();\n const total = allRecords.length;\n return {\n pagination: {\n page,\n perPage,\n total,\n hasMore: offset + scores.length < total,\n },\n scores,\n };\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORAGE_GET_SCORES_BY_ENTITY_ID_FAILED',\n text: 'Failed to get scores by entityId and entityType in LanceStorage',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { error: error?.message },\n },\n error,\n );\n }\n }\n\n async getScoresBySpan({\n traceId,\n spanId,\n pagination,\n }: {\n traceId: string;\n spanId: string;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n try {\n const table = await this.client.openTable(TABLE_SCORERS);\n const { page = 0, perPage = 10 } = pagination || {};\n const offset = page * perPage;\n\n // Query for scores with the given traceId and spanId\n const query = table.query().where(`\\`traceId\\` = '${traceId}' AND \\`spanId\\` = '${spanId}'`).limit(perPage);\n if (offset > 0) query.offset(offset);\n const records = await query.toArray();\n const schema = await getTableSchema({ tableName: TABLE_SCORERS, client: this.client });\n const scores = processResultWithTypeConversion(records, schema) as ScoreRowData[];\n\n // Get total count for pagination\n const allRecords = await table.query().where(`\\`traceId\\` = '${traceId}' AND \\`spanId\\` = '${spanId}'`).toArray();\n const total = allRecords.length;\n\n return {\n pagination: {\n page,\n perPage,\n total,\n hasMore: offset + scores.length < total,\n },\n scores,\n };\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORAGE_GET_SCORES_BY_SPAN_FAILED',\n text: 'Failed to get scores by traceId and spanId in LanceStorage',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { error: error?.message },\n },\n error,\n );\n }\n }\n}\n","import type { Connection } from '@lancedb/lancedb';\nimport { MastraError, ErrorDomain, ErrorCategory } from '@mastra/core/error';\nimport type { TraceType } from '@mastra/core/memory';\nimport { TABLE_TRACES, TracesStorage } from '@mastra/core/storage';\nimport type { PaginationInfo, StorageGetTracesPaginatedArg } from '@mastra/core/storage';\nimport type { Trace } from '@mastra/core/telemetry';\nimport type { StoreOperationsLance } from '../operations';\n\nexport class StoreTracesLance extends TracesStorage {\n private client: Connection;\n private operations: StoreOperationsLance;\n constructor({ client, operations }: { client: Connection; operations: StoreOperationsLance }) {\n super();\n this.client = client;\n this.operations = operations;\n }\n\n async saveTrace({ trace }: { trace: TraceType }): Promise<TraceType> {\n try {\n const table = await this.client.openTable(TABLE_TRACES);\n const record = {\n ...trace,\n attributes: JSON.stringify(trace.attributes),\n status: JSON.stringify(trace.status),\n events: JSON.stringify(trace.events),\n links: JSON.stringify(trace.links),\n other: JSON.stringify(trace.other),\n };\n await table.add([record], { mode: 'append' });\n return trace;\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORE_SAVE_TRACE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getTraceById({ traceId }: { traceId: string }): Promise<TraceType> {\n try {\n const table = await this.client.openTable(TABLE_TRACES);\n const query = table.query().where(`id = '${traceId}'`);\n const records = await query.toArray();\n return records[0] as TraceType;\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORE_GET_TRACE_BY_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getTraces({\n name,\n scope,\n page = 1,\n perPage = 10,\n attributes,\n }: {\n name?: string;\n scope?: string;\n page: number;\n perPage: number;\n attributes?: Record<string, string>;\n }): Promise<Trace[]> {\n try {\n const table = await this.client.openTable(TABLE_TRACES);\n const query = table.query();\n if (name) {\n query.where(`name = '${name}'`);\n }\n if (scope) {\n query.where(`scope = '${scope}'`);\n }\n if (attributes) {\n query.where(`attributes = '${JSON.stringify(attributes)}'`);\n }\n // Calculate offset based on page and perPage\n const offset = (page - 1) * perPage;\n query.limit(perPage);\n if (offset > 0) {\n query.offset(offset);\n }\n const records = await query.toArray();\n return records.map(record => {\n const processed = {\n ...record,\n attributes: record.attributes ? JSON.parse(record.attributes) : {},\n status: record.status ? JSON.parse(record.status) : {},\n events: record.events ? JSON.parse(record.events) : [],\n links: record.links ? JSON.parse(record.links) : [],\n other: record.other ? JSON.parse(record.other) : {},\n startTime: new Date(record.startTime),\n endTime: new Date(record.endTime),\n createdAt: new Date(record.createdAt),\n };\n if (processed.parentSpanId === null || processed.parentSpanId === undefined) {\n processed.parentSpanId = '';\n } else {\n processed.parentSpanId = String(processed.parentSpanId);\n }\n return processed as Trace;\n });\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORE_GET_TRACES_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { name: name ?? '', scope: scope ?? '' },\n },\n error,\n );\n }\n }\n\n async getTracesPaginated(args: StorageGetTracesPaginatedArg): Promise<PaginationInfo & { traces: Trace[] }> {\n try {\n const table = await this.client.openTable(TABLE_TRACES);\n const query = table.query();\n const conditions: string[] = [];\n if (args.name) {\n conditions.push(`name = '${args.name}'`);\n }\n if (args.scope) {\n conditions.push(`scope = '${args.scope}'`);\n }\n if (args.attributes) {\n const attributesStr = JSON.stringify(args.attributes);\n conditions.push(`attributes LIKE '%${attributesStr.replace(/\"/g, '\\\\\"')}%'`);\n }\n if (args.dateRange?.start) {\n conditions.push(`\\`createdAt\\` >= ${args.dateRange.start.getTime()}`);\n }\n if (args.dateRange?.end) {\n conditions.push(`\\`createdAt\\` <= ${args.dateRange.end.getTime()}`);\n }\n if (conditions.length > 0) {\n const whereClause = conditions.join(' AND ');\n query.where(whereClause);\n }\n let total = 0;\n if (conditions.length > 0) {\n const countQuery = table.query().where(conditions.join(' AND '));\n const allRecords = await countQuery.toArray();\n total = allRecords.length;\n } else {\n total = await table.countRows();\n }\n const page = args.page || 0;\n const perPage = args.perPage || 10;\n const offset = page * perPage;\n query.limit(perPage);\n if (offset > 0) {\n query.offset(offset);\n }\n const records = await query.toArray();\n const traces = records.map(record => {\n const processed = {\n ...record,\n attributes: record.attributes ? JSON.parse(record.attributes) : {},\n status: record.status ? JSON.parse(record.status) : {},\n events: record.events ? JSON.parse(record.events) : [],\n links: record.links ? JSON.parse(record.links) : [],\n other: record.other ? JSON.parse(record.other) : {},\n startTime: new Date(record.startTime),\n endTime: new Date(record.endTime),\n createdAt: new Date(record.createdAt),\n };\n if (processed.parentSpanId === null || processed.parentSpanId === undefined) {\n processed.parentSpanId = '';\n } else {\n processed.parentSpanId = String(processed.parentSpanId);\n }\n return processed as Trace;\n });\n return {\n traces,\n total,\n page,\n perPage,\n hasMore: total > (page + 1) * perPage,\n };\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORE_GET_TRACES_PAGINATED_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { name: args.name ?? '', scope: args.scope ?? '' },\n },\n error,\n );\n }\n }\n\n async batchTraceInsert({ records }: { records: Record<string, any>[] }): Promise<void> {\n this.logger.debug('Batch inserting traces', { count: records.length });\n await this.operations.batchInsert({\n tableName: TABLE_TRACES,\n records,\n });\n }\n}\n","import type { Connection } from '@lancedb/lancedb';\nimport type { StepResult, WorkflowRunState, WorkflowRuns } from '@mastra/core';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport type { WorkflowRun } from '@mastra/core/storage';\nimport { ensureDate, TABLE_WORKFLOW_SNAPSHOT, WorkflowsStorage } from '@mastra/core/storage';\n\nfunction parseWorkflowRun(row: any): WorkflowRun {\n let parsedSnapshot: WorkflowRunState | string = row.snapshot;\n if (typeof parsedSnapshot === 'string') {\n try {\n parsedSnapshot = JSON.parse(row.snapshot as string) as WorkflowRunState;\n } catch (e) {\n // If parsing fails, return the raw snapshot string\n console.warn(`Failed to parse snapshot for workflow ${row.workflow_name}: ${e}`);\n }\n }\n\n return {\n workflowName: row.workflow_name,\n runId: row.run_id,\n snapshot: parsedSnapshot,\n createdAt: ensureDate(row.createdAt)!,\n updatedAt: ensureDate(row.updatedAt)!,\n resourceId: row.resourceId,\n };\n}\n\nexport class StoreWorkflowsLance extends WorkflowsStorage {\n client: Connection;\n constructor({ client }: { client: Connection }) {\n super();\n this.client = client;\n }\n\n updateWorkflowResults(\n {\n // workflowName,\n // runId,\n // stepId,\n // result,\n // runtimeContext,\n }: {\n workflowName: string;\n runId: string;\n stepId: string;\n result: StepResult<any, any, any, any>;\n runtimeContext: Record<string, any>;\n },\n ): Promise<Record<string, StepResult<any, any, any, any>>> {\n throw new Error('Method not implemented.');\n }\n updateWorkflowState(\n {\n // workflowName,\n // runId,\n // opts,\n }: {\n workflowName: string;\n runId: string;\n opts: {\n status: string;\n result?: StepResult<any, any, any, any>;\n error?: string;\n suspendedPaths?: Record<string, number[]>;\n waitingPaths?: Record<string, number[]>;\n };\n },\n ): Promise<WorkflowRunState | undefined> {\n throw new Error('Method not implemented.');\n }\n\n async persistWorkflowSnapshot({\n workflowName,\n runId,\n resourceId,\n snapshot,\n }: {\n workflowName: string;\n runId: string;\n resourceId?: string;\n snapshot: WorkflowRunState;\n }): Promise<void> {\n try {\n const table = await this.client.openTable(TABLE_WORKFLOW_SNAPSHOT);\n\n // Try to find the existing record\n const query = table.query().where(`workflow_name = '${workflowName}' AND run_id = '${runId}'`);\n const records = await query.toArray();\n let createdAt: number;\n const now = Date.now();\n\n if (records.length > 0) {\n createdAt = records[0].createdAt ?? now;\n } else {\n createdAt = now;\n }\n\n const record = {\n workflow_name: workflowName,\n run_id: runId,\n resourceId,\n snapshot: JSON.stringify(snapshot),\n createdAt,\n updatedAt: now,\n };\n\n await table\n .mergeInsert(['workflow_name', 'run_id'])\n .whenMatchedUpdateAll()\n .whenNotMatchedInsertAll()\n .execute([record]);\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORE_PERSIST_WORKFLOW_SNAPSHOT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { workflowName, runId },\n },\n error,\n );\n }\n }\n async loadWorkflowSnapshot({\n workflowName,\n runId,\n }: {\n workflowName: string;\n runId: string;\n }): Promise<WorkflowRunState | null> {\n try {\n const table = await this.client.openTable(TABLE_WORKFLOW_SNAPSHOT);\n const query = table.query().where(`workflow_name = '${workflowName}' AND run_id = '${runId}'`);\n const records = await query.toArray();\n return records.length > 0 ? JSON.parse(records[0].snapshot) : null;\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORE_LOAD_WORKFLOW_SNAPSHOT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { workflowName, runId },\n },\n error,\n );\n }\n }\n\n async getWorkflowRunById(args: { runId: string; workflowName?: string }): Promise<{\n workflowName: string;\n runId: string;\n snapshot: any;\n createdAt: Date;\n updatedAt: Date;\n } | null> {\n try {\n const table = await this.client.openTable(TABLE_WORKFLOW_SNAPSHOT);\n let whereClause = `run_id = '${args.runId}'`;\n if (args.workflowName) {\n whereClause += ` AND workflow_name = '${args.workflowName}'`;\n }\n const query = table.query().where(whereClause);\n const records = await query.toArray();\n if (records.length === 0) return null;\n const record = records[0];\n return parseWorkflowRun(record);\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORE_GET_WORKFLOW_RUN_BY_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { runId: args.runId, workflowName: args.workflowName ?? '' },\n },\n error,\n );\n }\n }\n\n async getWorkflowRuns(args?: {\n namespace?: string;\n resourceId?: string;\n workflowName?: string;\n fromDate?: Date;\n toDate?: Date;\n limit?: number;\n offset?: number;\n }): Promise<WorkflowRuns> {\n try {\n const table = await this.client.openTable(TABLE_WORKFLOW_SNAPSHOT);\n\n let query = table.query();\n\n const conditions: string[] = [];\n\n if (args?.workflowName) {\n conditions.push(`workflow_name = '${args.workflowName.replace(/'/g, \"''\")}'`);\n }\n\n if (args?.resourceId) {\n conditions.push(`\\`resourceId\\` = '${args.resourceId}'`);\n }\n\n if (args?.fromDate instanceof Date) {\n conditions.push(`\\`createdAt\\` >= ${args.fromDate.getTime()}`);\n }\n\n if (args?.toDate instanceof Date) {\n conditions.push(`\\`createdAt\\` <= ${args.toDate.getTime()}`);\n }\n\n let total = 0;\n\n // Apply all conditions\n if (conditions.length > 0) {\n query = query.where(conditions.join(' AND '));\n total = await table.countRows(conditions.join(' AND '));\n } else {\n total = await table.countRows();\n }\n\n if (args?.limit) {\n query.limit(args.limit);\n }\n\n if (args?.offset) {\n query.offset(args.offset);\n }\n\n const records = await query.toArray();\n\n return {\n runs: records.map(record => parseWorkflowRun(record)),\n total: total || records.length,\n };\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORE_GET_WORKFLOW_RUNS_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { namespace: args?.namespace ?? '', workflowName: args?.workflowName ?? '' },\n },\n error,\n );\n }\n }\n}\n","import { connect } from '@lancedb/lancedb';\nimport type { Connection, ConnectionOptions } from '@lancedb/lancedb';\nimport type { MastraMessageContentV2 } from '@mastra/core/agent';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport type { MastraMessageV1, MastraMessageV2, StorageThreadType, TraceType } from '@mastra/core/memory';\nimport type { ScoreRowData, ScoringSource } from '@mastra/core/scores';\nimport { MastraStorage } from '@mastra/core/storage';\nimport type {\n TABLE_NAMES,\n PaginationInfo,\n StorageGetMessagesArg,\n StorageColumn,\n EvalRow,\n WorkflowRuns,\n StoragePagination,\n StorageDomains,\n StorageGetTracesPaginatedArg,\n StorageResourceType,\n} from '@mastra/core/storage';\nimport type { Trace } from '@mastra/core/telemetry';\nimport type { StepResult, WorkflowRunState } from '@mastra/core/workflows';\nimport { StoreLegacyEvalsLance } from './domains/legacy-evals';\nimport { StoreMemoryLance } from './domains/memory';\nimport { StoreOperationsLance } from './domains/operations';\nimport { StoreScoresLance } from './domains/scores';\nimport { StoreTracesLance } from './domains/traces';\nimport { StoreWorkflowsLance } from './domains/workflows';\n\nexport class LanceStorage extends MastraStorage {\n stores: StorageDomains;\n private lanceClient!: Connection;\n /**\n * Creates a new instance of LanceStorage\n * @param uri The URI to connect to LanceDB\n * @param options connection options\n *\n * Usage:\n *\n * Connect to a local database\n * ```ts\n * const store = await LanceStorage.create('/path/to/db');\n * ```\n *\n * Connect to a LanceDB cloud database\n * ```ts\n * const store = await LanceStorage.create('db://host:port');\n * ```\n *\n * Connect to a cloud database\n * ```ts\n * const store = await LanceStorage.create('s3://bucket/db', { storageOptions: { timeout: '60s' } });\n * ```\n */\n public static async create(name: string, uri: string, options?: ConnectionOptions): Promise<LanceStorage> {\n const instance = new LanceStorage(name);\n try {\n instance.lanceClient = await connect(uri, options);\n const operations = new StoreOperationsLance({ client: instance.lanceClient });\n instance.stores = {\n operations: new StoreOperationsLance({ client: instance.lanceClient }),\n workflows: new StoreWorkflowsLance({ client: instance.lanceClient }),\n traces: new StoreTracesLance({ client: instance.lanceClient, operations }),\n scores: new StoreScoresLance({ client: instance.lanceClient }),\n memory: new StoreMemoryLance({ client: instance.lanceClient, operations }),\n legacyEvals: new StoreLegacyEvalsLance({ client: instance.lanceClient }),\n };\n return instance;\n } catch (e: any) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_STORAGE_CONNECT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Failed to connect to LanceDB: ${e.message || e}`,\n details: { uri, optionsProvided: !!options },\n },\n e,\n );\n }\n }\n\n /**\n * @internal\n * Private constructor to enforce using the create factory method\n */\n private constructor(name: string) {\n super({ name });\n const operations = new StoreOperationsLance({ client: this.lanceClient });\n\n this.stores = {\n operations: new StoreOperationsLance({ client: this.lanceClient }),\n workflows: new StoreWorkflowsLance({ client: this.lanceClient }),\n traces: new StoreTracesLance({ client: this.lanceClient, operations }),\n scores: new StoreScoresLance({ client: this.lanceClient }),\n legacyEvals: new StoreLegacyEvalsLance({ client: this.lanceClient }),\n memory: new StoreMemoryLance({ client: this.lanceClient, operations }),\n };\n }\n\n async createTable({\n tableName,\n schema,\n }: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n }): Promise<void> {\n return this.stores.operations.createTable({ tableName, schema });\n }\n\n async dropTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n return this.stores.operations.dropTable({ tableName });\n }\n\n async alterTable({\n tableName,\n schema,\n ifNotExists,\n }: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n ifNotExists: string[];\n }): Promise<void> {\n return this.stores.operations.alterTable({ tableName, schema, ifNotExists });\n }\n\n async clearTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n return this.stores.operations.clearTable({ tableName });\n }\n\n async insert({ tableName, record }: { tableName: TABLE_NAMES; record: Record<string, any> }): Promise<void> {\n return this.stores.operations.insert({ tableName, record });\n }\n\n async batchInsert({ tableName, records }: { tableName: TABLE_NAMES; records: Record<string, any>[] }): Promise<void> {\n return this.stores.operations.batchInsert({ tableName, records });\n }\n\n async load({ tableName, keys }: { tableName: TABLE_NAMES; keys: Record<string, any> }): Promise<any> {\n return this.stores.operations.load({ tableName, keys });\n }\n\n async getThreadById({ threadId }: { threadId: string }): Promise<StorageThreadType | null> {\n return this.stores.memory.getThreadById({ threadId });\n }\n\n async getThreadsByResourceId({ resourceId }: { resourceId: string }): Promise<StorageThreadType[]> {\n return this.stores.memory.getThreadsByResourceId({ resourceId });\n }\n\n /**\n * Saves a thread to the database. This function doesn't overwrite existing threads.\n * @param thread - The thread to save\n * @returns The saved thread\n */\n async saveThread({ thread }: { thread: StorageThreadType }): Promise<StorageThreadType> {\n return this.stores.memory.saveThread({ thread });\n }\n\n async updateThread({\n id,\n title,\n metadata,\n }: {\n id: string;\n title: string;\n metadata: Record<string, unknown>;\n }): Promise<StorageThreadType> {\n return this.stores.memory.updateThread({ id, title, metadata });\n }\n\n async deleteThread({ threadId }: { threadId: string }): Promise<void> {\n return this.stores.memory.deleteThread({ threadId });\n }\n\n public get supports() {\n return {\n selectByIncludeResourceScope: true,\n resourceWorkingMemory: true,\n hasColumn: true,\n createTable: true,\n deleteMessages: false,\n getScoresBySpan: true,\n };\n }\n\n async getResourceById({ resourceId }: { resourceId: string }): Promise<StorageResourceType | null> {\n return this.stores.memory.getResourceById({ resourceId });\n }\n\n async saveResource({ resource }: { resource: StorageResourceType }): Promise<StorageResourceType> {\n return this.stores.memory.saveResource({ resource });\n }\n\n async updateResource({\n resourceId,\n workingMemory,\n metadata,\n }: {\n resourceId: string;\n workingMemory?: string;\n metadata?: Record<string, unknown>;\n }): Promise<StorageResourceType> {\n return this.stores.memory.updateResource({ resourceId, workingMemory, metadata });\n }\n\n /**\n * Processes messages to include context messages based on withPreviousMessages and withNextMessages\n * @param records - The sorted array of records to process\n * @param include - The array of include specifications with context parameters\n * @returns The processed array with context messages included\n */\n private processMessagesWithContext(\n records: any[],\n include: { id: string; withPreviousMessages?: number; withNextMessages?: number }[],\n ): any[] {\n const messagesWithContext = include.filter(item => item.withPreviousMessages || item.withNextMessages);\n\n if (messagesWithContext.length === 0) {\n return records;\n }\n\n // Create a map of message id to index in the sorted array for quick lookup\n const messageIndexMap = new Map<string, number>();\n records.forEach((message, index) => {\n messageIndexMap.set(message.id, index);\n });\n\n // Keep track of additional indices to include\n const additionalIndices = new Set<number>();\n\n for (const item of messagesWithContext) {\n const messageIndex = messageIndexMap.get(item.id);\n\n if (messageIndex !== undefined) {\n // Add previous messages if requested\n if (item.withPreviousMessages) {\n const startIdx = Math.max(0, messageIndex - item.withPreviousMessages);\n for (let i = startIdx; i < messageIndex; i++) {\n additionalIndices.add(i);\n }\n }\n\n // Add next messages if requested\n if (item.withNextMessages) {\n const endIdx = Math.min(records.length - 1, messageIndex + item.withNextMessages);\n for (let i = messageIndex + 1; i <= endIdx; i++) {\n additionalIndices.add(i);\n }\n }\n }\n }\n\n // If we need to include additional messages, create a new set of records\n if (additionalIndices.size === 0) {\n return records;\n }\n\n // Get IDs of the records that matched the original query\n const originalMatchIds = new Set(include.map(item => item.id));\n\n // Create a set of all indices we need to include\n const allIndices = new Set<number>();\n\n // Add indices of originally matched messages\n records.forEach((record, index) => {\n if (originalMatchIds.has(record.id)) {\n allIndices.add(index);\n }\n });\n\n // Add the additional context message indices\n additionalIndices.forEach(index => {\n allIndices.add(index);\n });\n\n // Create a new filtered array with only the required messages\n // while maintaining chronological order\n return Array.from(allIndices)\n .sort((a, b) => a - b)\n .map(index => records[index]);\n }\n\n public async getMessages(args: StorageGetMessagesArg & { format?: 'v1' }): Promise<MastraMessageV1[]>;\n public async getMessages(args: StorageGetMessagesArg & { format: 'v2' }): Promise<MastraMessageV2[]>;\n public async getMessages({\n threadId,\n resourceId,\n selectBy,\n format,\n threadConfig,\n }: StorageGetMessagesArg & { format?: 'v1' | 'v2' }): Promise<MastraMessageV1[] | MastraMessageV2[]> {\n return this.stores.memory.getMessages({ threadId, resourceId, selectBy, format, threadConfig });\n }\n\n async getMessagesById({ messageIds, format }: { messageIds: string[]; format: 'v1' }): Promise<MastraMessageV1[]>;\n async getMessagesById({ messageIds, format }: { messageIds: string[]; format?: 'v2' }): Promise<MastraMessageV2[]>;\n async getMessagesById({\n messageIds,\n format,\n }: {\n messageIds: string[];\n format?: 'v1' | 'v2';\n }): Promise<MastraMessageV1[] | MastraMessageV2[]> {\n return this.stores.memory.getMessagesById({ messageIds, format });\n }\n\n async saveMessages(args: { messages: MastraMessageV1[]; format?: undefined | 'v1' }): Promise<MastraMessageV1[]>;\n async saveMessages(args: { messages: MastraMessageV2[]; format: 'v2' }): Promise<MastraMessageV2[]>;\n async saveMessages(\n args: { messages: MastraMessageV1[]; format?: undefined | 'v1' } | { messages: MastraMessageV2[]; format: 'v2' },\n ): Promise<MastraMessageV2[] | MastraMessageV1[]> {\n return this.stores.memory.saveMessages(args);\n }\n\n async getThreadsByResourceIdPaginated(args: {\n resourceId: string;\n page: number;\n perPage: number;\n }): Promise<PaginationInfo & { threads: StorageThreadType[] }> {\n return this.stores.memory.getThreadsByResourceIdPaginated(args);\n }\n\n async getMessagesPaginated(\n args: StorageGetMessagesArg & { format?: 'v1' | 'v2' },\n ): Promise<PaginationInfo & { messages: MastraMessageV1[] | MastraMessageV2[] }> {\n return this.stores.memory.getMessagesPaginated(args);\n }\n\n async updateMessages(_args: {\n messages: Partial<Omit<MastraMessageV2, 'createdAt'>> &\n {\n id: string;\n content?: { metadata?: MastraMessageContentV2['metadata']; content?: MastraMessageContentV2['content'] };\n }[];\n }): Promise<MastraMessageV2[]> {\n return this.stores.memory.updateMessages(_args);\n }\n\n async getTraceById(args: { traceId: string }): Promise<TraceType> {\n return (this.stores as any).traces.getTraceById(args);\n }\n\n async getTraces(args: {\n name?: string;\n scope?: string;\n page: number;\n perPage: number;\n attributes?: Record<string, string>;\n }): Promise<Trace[]> {\n return (this.stores as any).traces.getTraces(args);\n }\n\n async getTracesPaginated(args: StorageGetTracesPaginatedArg): Promise<PaginationInfo & { traces: Trace[] }> {\n return (this.stores as any).traces.getTracesPaginated(args);\n }\n\n async getEvalsByAgentName(agentName: string, type?: 'test' | 'live'): Promise<EvalRow[]> {\n return this.stores.legacyEvals.getEvalsByAgentName(agentName, type);\n }\n\n async getEvals(options: {\n agentName?: string;\n type?: 'test' | 'live';\n page?: number;\n perPage?: number;\n fromDate?: Date;\n toDate?: Date;\n dateRange?: { start?: Date; end?: Date };\n }): Promise<PaginationInfo & { evals: EvalRow[] }> {\n return this.stores.legacyEvals.getEvals(options);\n }\n\n async getWorkflowRuns(args?: {\n namespace?: string;\n workflowName?: string;\n fromDate?: Date;\n toDate?: Date;\n limit?: number;\n offset?: number;\n }): Promise<WorkflowRuns> {\n return this.stores.workflows.getWorkflowRuns(args);\n }\n\n async getWorkflowRunById(args: { runId: string; workflowName?: string }): Promise<{\n workflowName: string;\n runId: string;\n snapshot: any;\n createdAt: Date;\n updatedAt: Date;\n } | null> {\n return this.stores.workflows.getWorkflowRunById(args);\n }\n\n async updateWorkflowResults({\n workflowName,\n runId,\n stepId,\n result,\n runtimeContext,\n }: {\n workflowName: string;\n runId: string;\n stepId: string;\n result: StepResult<any, any, any, any>;\n runtimeContext: Record<string, any>;\n }): Promise<Record<string, StepResult<any, any, any, any>>> {\n return this.stores.workflows.updateWorkflowResults({ workflowName, runId, stepId, result, runtimeContext });\n }\n\n async updateWorkflowState({\n workflowName,\n runId,\n opts,\n }: {\n workflowName: string;\n runId: string;\n opts: {\n status: string;\n result?: StepResult<any, any, any, any>;\n error?: string;\n suspendedPaths?: Record<string, number[]>;\n waitingPaths?: Record<string, number[]>;\n };\n }): Promise<WorkflowRunState | undefined> {\n return this.stores.workflows.updateWorkflowState({ workflowName, runId, opts });\n }\n\n async persistWorkflowSnapshot({\n workflowName,\n runId,\n resourceId,\n snapshot,\n }: {\n workflowName: string;\n runId: string;\n resourceId?: string;\n snapshot: WorkflowRunState;\n }): Promise<void> {\n return this.stores.workflows.persistWorkflowSnapshot({ workflowName, runId, resourceId, snapshot });\n }\n\n async loadWorkflowSnapshot({\n workflowName,\n runId,\n }: {\n workflowName: string;\n runId: string;\n }): Promise<WorkflowRunState | null> {\n return this.stores.workflows.loadWorkflowSnapshot({ workflowName, runId });\n }\n\n async getScoreById({ id: _id }: { id: string }): Promise<ScoreRowData | null> {\n return this.stores.scores.getScoreById({ id: _id });\n }\n\n async getScoresByScorerId({\n scorerId,\n source,\n entityId,\n entityType,\n pagination,\n }: {\n scorerId: string;\n pagination: StoragePagination;\n source?: ScoringSource;\n entityId?: string;\n entityType?: string;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.stores.scores.getScoresByScorerId({ scorerId, source, pagination, entityId, entityType });\n }\n\n async saveScore(_score: ScoreRowData): Promise<{ score: ScoreRowData }> {\n return this.stores.scores.saveScore(_score);\n }\n\n async getScoresByRunId({\n runId,\n pagination,\n }: {\n runId: string;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.stores.scores.getScoresByRunId({ runId, pagination });\n }\n\n async getScoresByEntityId({\n entityId,\n entityType,\n pagination,\n }: {\n pagination: StoragePagination;\n entityId: string;\n entityType: string;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.stores.scores.getScoresByEntityId({ entityId, entityType, pagination });\n }\n\n async getScoresBySpan({\n traceId,\n spanId,\n pagination,\n }: {\n traceId: string;\n spanId: string;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.stores.scores.getScoresBySpan({ traceId, spanId, pagination });\n }\n}\n","import { BaseFilterTranslator } from '@mastra/core/vector/filter';\nimport type {\n VectorFilter,\n OperatorValueMap,\n LogicalOperatorValueMap,\n BlacklistedRootOperators,\n} from '@mastra/core/vector/filter';\n\ntype LanceOperatorValueMap = OperatorValueMap & {\n $like: string;\n $notLike: string;\n $contains: string;\n};\n\ntype LanceBlacklisted = BlacklistedRootOperators | '$like' | '$notLike' | '$contains';\n\nexport type LanceVectorFilter = VectorFilter<\n keyof LanceOperatorValueMap,\n LanceOperatorValueMap,\n LogicalOperatorValueMap,\n LanceBlacklisted\n>;\n\nexport class LanceFilterTranslator extends BaseFilterTranslator<LanceVectorFilter, string> {\n translate(filter: LanceVectorFilter): string {\n if (!filter || Object.keys(filter).length === 0) {\n return '';\n }\n\n // Check for fields with periods that aren't nested at top level\n if (typeof filter === 'object' && filter !== null) {\n const keys = Object.keys(filter);\n for (const key of keys) {\n if (key.includes('.') && !this.isNormalNestedField(key)) {\n throw new Error(`Field names containing periods (.) are not supported: ${key}`);\n }\n }\n }\n\n return this.processFilter(filter);\n }\n\n private processFilter(filter: unknown, parentPath = ''): string {\n // Handle null case\n if (filter === null) {\n return `${parentPath} IS NULL`;\n }\n\n // Handle Date objects at top level\n if (filter instanceof Date) {\n return `${parentPath} = ${this.formatValue(filter)}`;\n }\n\n // Handle top-level operators\n if (typeof filter === 'object' && filter !== null) {\n const obj = filter as Record<string, unknown>;\n const keys = Object.keys(obj);\n\n // Handle logical operators at top level\n if (keys.length === 1 && this.isOperator(keys[0]!)) {\n const operator = keys[0]!;\n const operatorValue = obj[operator];\n\n if (this.isLogicalOperator(operator)) {\n if (operator === '$and' || operator === '$or') {\n return this.processLogicalOperator(operator, operatorValue as unknown[]);\n }\n throw new Error(BaseFilterTranslator.ErrorMessages.UNSUPPORTED_OPERATOR(operator));\n }\n\n throw new Error(BaseFilterTranslator.ErrorMessages.INVALID_TOP_LEVEL_OPERATOR(operator));\n }\n\n // Check for fields with periods that aren't nested\n for (const key of keys) {\n if (key.includes('.') && !this.isNormalNestedField(key)) {\n throw new Error(`Field names containing periods (.) are not supported: ${key}`);\n }\n }\n\n // Handle multiple fields (implicit AND)\n if (keys.length > 1) {\n const conditions = keys.map(key => {\n const value = obj[key];\n // Check if key is a nested path or a field\n if (this.isNestedObject(value) && !this.isDateObject(value)) {\n return this.processNestedObject(key, value);\n } else {\n return this.processField(key, value);\n }\n });\n return conditions.join(' AND ');\n }\n\n // Handle single field\n if (keys.length === 1) {\n const key = keys[0]!;\n const value = obj[key]!;\n\n if (this.isNestedObject(value) && !this.isDateObject(value)) {\n return this.processNestedObject(key!, value);\n } else {\n return this.processField(key!, value);\n }\n }\n }\n\n return '';\n }\n\n private processLogicalOperator(operator: string, conditions: unknown[]): string {\n if (!Array.isArray(conditions)) {\n throw new Error(`Logical operator ${operator} must have an array value`);\n }\n\n if (conditions.length === 0) {\n return operator === '$and' ? 'true' : 'false';\n }\n\n const sqlOperator = operator === '$and' ? 'AND' : 'OR';\n\n const processedConditions = conditions.map(condition => {\n if (typeof condition !== 'object' || condition === null) {\n throw new Error(BaseFilterTranslator.ErrorMessages.INVALID_LOGICAL_OPERATOR_CONTENT(operator));\n }\n\n // Check if condition is a nested logical operator\n const condObj = condition as Record<string, unknown>;\n const keys = Object.keys(condObj);\n\n if (keys.length === 1 && this.isOperator(keys[0]!)) {\n if (this.isLogicalOperator(keys[0])) {\n return `(${this.processLogicalOperator(keys[0], condObj[keys[0]] as unknown[])})`;\n } else {\n throw new Error(BaseFilterTranslator.ErrorMessages.UNSUPPORTED_OPERATOR(keys[0]));\n }\n }\n\n // Handle multiple fields within a logical condition (implicit AND)\n if (keys.length > 1) {\n return `(${this.processFilter(condition)})`;\n }\n\n return this.processFilter(condition);\n });\n\n return processedConditions.join(` ${sqlOperator} `);\n }\n\n private processNestedObject(path: string, value: unknown): string {\n if (typeof value !== 'object' || value === null) {\n throw new Error(`Expected object for nested path ${path}`);\n }\n\n const obj = value as Record<string, unknown>;\n const keys = Object.keys(obj);\n\n // Handle empty object\n if (keys.length === 0) {\n return `${path} = {}`;\n }\n\n // Handle operators on a field\n if (keys.every(k => this.isOperator(k))) {\n return this.processOperators(path, obj);\n }\n\n // Process each nested field and join with AND\n const conditions = keys.map(key => {\n const nestedPath = key.includes('.')\n ? `${path}.${key}` // Key already contains dots (pre-dotted path)\n : `${path}.${key}`; // Normal nested field\n\n if (this.isNestedObject(obj[key]) && !this.isDateObject(obj[key])) {\n return this.processNestedObject(nestedPath, obj[key]);\n } else {\n return this.processField(nestedPath, obj[key]);\n }\n });\n\n return conditions.join(' AND ');\n }\n\n private processField(field: string, value: unknown): string {\n // Check for illegal field names\n if (field.includes('.') && !this.isNormalNestedField(field)) {\n throw new Error(`Field names containing periods (.) are not supported: ${field}`);\n }\n\n // Escape field name if needed\n const escapedField = this.escapeFieldName(field);\n\n // Handle null value\n if (value === null) {\n return `${escapedField} IS NULL`;\n }\n\n // Handle Date objects properly\n if (value instanceof Date) {\n return `${escapedField} = ${this.formatValue(value)}`;\n }\n\n // Handle arrays (convert to IN)\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return 'false'; // Empty array is usually false in SQL\n }\n const normalizedValues = this.normalizeArrayValues(value);\n return `${escapedField} IN (${this.formatArrayValues(normalizedValues)})`;\n }\n\n // Handle operator objects\n if (this.isOperatorObject(value)) {\n return this.processOperators(field, value as Record<string, unknown>);\n }\n\n // Handle basic values (normalize dates and other special values)\n return `${escapedField} = ${this.formatValue(this.normalizeComparisonValue(value))}`;\n }\n\n private processOperators(field: string, operators: Record<string, unknown>): string {\n const escapedField = this.escapeFieldName(field);\n const operatorKeys = Object.keys(operators);\n\n // Check for logical operators at field level\n if (operatorKeys.some(op => this.isLogicalOperator(op))) {\n const logicalOp = operatorKeys.find(op => this.isLogicalOperator(op)) || '';\n throw new Error(`Unsupported operator: ${logicalOp} cannot be used at field level`);\n }\n\n // Process each operator and join with AND\n return operatorKeys\n .map(op => {\n const value = operators[op];\n\n // Check if this is a supported operator\n if (!this.isFieldOperator(op) && !this.isCustomOperator(op)) {\n throw new Error(BaseFilterTranslator.ErrorMessages.UNSUPPORTED_OPERATOR(op));\n }\n\n switch (op) {\n case '$eq':\n if (value === null) {\n return `${escapedField} IS NULL`;\n }\n return `${escapedField} = ${this.formatValue(this.normalizeComparisonValue(value))}`;\n case '$ne':\n if (value === null) {\n return `${escapedField} IS NOT NULL`;\n }\n return `${escapedField} != ${this.formatValue(this.normalizeComparisonValue(value))}`;\n case '$gt':\n return `${escapedField} > ${this.formatValue(this.normalizeComparisonValue(value))}`;\n case '$gte':\n return `${escapedField} >= ${this.formatValue(this.normalizeComparisonValue(value))}`;\n case '$lt':\n return `${escapedField} < ${this.formatValue(this.normalizeComparisonValue(value))}`;\n case '$lte':\n return `${escapedField} <= ${this.formatValue(this.normalizeComparisonValue(value))}`;\n case '$in':\n if (!Array.isArray(value)) {\n throw new Error(`$in operator requires array value for field: ${field}`);\n }\n if (value.length === 0) {\n return 'false'; // Empty IN is false\n }\n const normalizedValues = this.normalizeArrayValues(value);\n return `${escapedField} IN (${this.formatArrayValues(normalizedValues)})`;\n case '$like':\n return `${escapedField} LIKE ${this.formatValue(value)}`;\n case '$notLike':\n return `${escapedField} NOT LIKE ${this.formatValue(value)}`;\n case '$regex':\n return `regexp_match(${escapedField}, ${this.formatValue(value)})`;\n default:\n throw new Error(BaseFilterTranslator.ErrorMessages.UNSUPPORTED_OPERATOR(op));\n }\n })\n .join(' AND ');\n }\n\n private formatValue(value: unknown): string {\n if (value === null) {\n return 'NULL';\n }\n\n if (typeof value === 'string') {\n // Escape single quotes in SQL strings by doubling them\n return `'${value.replace(/'/g, \"''\")}'`;\n }\n\n if (typeof value === 'number') {\n return value.toString();\n }\n\n if (typeof value === 'boolean') {\n return value ? 'true' : 'false';\n }\n\n if (value instanceof Date) {\n return `timestamp '${value.toISOString()}'`;\n }\n\n if (typeof value === 'object') {\n if (value instanceof Date) {\n return `timestamp '${value.toISOString()}'`;\n }\n return JSON.stringify(value);\n }\n\n return String(value);\n }\n\n private formatArrayValues(array: unknown[]): string {\n return array.map(item => this.formatValue(item)).join(', ');\n }\n\n normalizeArrayValues(array: unknown[]): unknown[] {\n return array.map(item => {\n if (item instanceof Date) {\n return item; // Keep Date objects as is to properly format them later\n }\n return this.normalizeComparisonValue(item);\n });\n }\n\n normalizeComparisonValue(value: unknown): unknown {\n // Date objects should be preserved as is, not converted to strings\n if (value instanceof Date) {\n return value;\n }\n\n return super.normalizeComparisonValue(value);\n }\n\n private isOperatorObject(value: unknown): boolean {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n\n const obj = value as Record<string, unknown>;\n const keys = Object.keys(obj);\n\n return keys.length > 0 && keys.some(key => this.isOperator(key));\n }\n\n private isNestedObject(value: unknown): boolean {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n }\n\n private isNormalNestedField(field: string): boolean {\n // Check if field is a proper nested field name\n const parts = field.split('.');\n // A valid nested field shouldn't have empty parts or start/end with a dot\n return !field.startsWith('.') && !field.endsWith('.') && parts.every(part => part.trim().length > 0);\n }\n\n private escapeFieldName(field: string): string {\n // If field contains special characters or is a SQL keyword, escape with backticks\n if (field.includes(' ') || field.includes('-') || /^[A-Z]+$/.test(field) || this.isSqlKeyword(field)) {\n // For nested fields, escape each part\n if (field.includes('.')) {\n return field\n .split('.')\n .map(part => `\\`${part}\\``)\n .join('.');\n }\n return `\\`${field}\\``;\n }\n\n return field;\n }\n\n private isSqlKeyword(str: string): boolean {\n // Common SQL keywords that might need escaping\n const sqlKeywords = [\n 'SELECT',\n 'FROM',\n 'WHERE',\n 'AND',\n 'OR',\n 'NOT',\n 'INSERT',\n 'UPDATE',\n 'DELETE',\n 'CREATE',\n 'ALTER',\n 'DROP',\n 'TABLE',\n 'VIEW',\n 'INDEX',\n 'JOIN',\n 'INNER',\n 'OUTER',\n 'LEFT',\n 'RIGHT',\n 'FULL',\n 'UNION',\n 'ALL',\n 'DISTINCT',\n 'AS',\n 'ON',\n 'BETWEEN',\n 'LIKE',\n 'IN',\n 'IS',\n 'NULL',\n 'TRUE',\n 'FALSE',\n 'ASC',\n 'DESC',\n 'GROUP',\n 'ORDER',\n 'BY',\n 'HAVING',\n 'LIMIT',\n 'OFFSET',\n 'CASE',\n 'WHEN',\n 'THEN',\n 'ELSE',\n 'END',\n 'CAST',\n 'CUBE',\n ];\n\n return sqlKeywords.includes(str.toUpperCase());\n }\n\n private isDateObject(value: unknown): boolean {\n return value instanceof Date;\n }\n\n /**\n * Override getSupportedOperators to add custom operators for LanceDB\n */\n protected override getSupportedOperators() {\n return {\n ...BaseFilterTranslator.DEFAULT_OPERATORS,\n custom: ['$like', '$notLike', '$regex'],\n };\n }\n}\n","import { connect, Index } from '@lancedb/lancedb';\nimport type { Connection, ConnectionOptions, CreateTableOptions, Table, TableLike } from '@lancedb/lancedb';\n\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport type {\n CreateIndexParams,\n DeleteIndexParams,\n DeleteVectorParams,\n DescribeIndexParams,\n IndexStats,\n QueryResult,\n QueryVectorParams,\n UpdateVectorParams,\n UpsertVectorParams,\n} from '@mastra/core/vector';\n\nimport { MastraVector } from '@mastra/core/vector';\nimport type { LanceVectorFilter } from './filter';\nimport { LanceFilterTranslator } from './filter';\nimport type { IndexConfig } from './types';\n\ninterface LanceCreateIndexParams extends CreateIndexParams {\n indexConfig?: LanceIndexConfig;\n tableName?: string;\n}\n\ninterface LanceIndexConfig extends IndexConfig {\n numPartitions?: number;\n numSubVectors?: number;\n}\n\ninterface LanceUpsertVectorParams extends UpsertVectorParams {\n tableName: string;\n}\n\ninterface LanceQueryVectorParams extends QueryVectorParams<LanceVectorFilter> {\n tableName: string;\n columns?: string[];\n includeAllColumns?: boolean;\n}\n\nexport class LanceVectorStore extends MastraVector<LanceVectorFilter> {\n private lanceClient!: Connection;\n\n /**\n * Creates a new instance of LanceVectorStore\n * @param uri The URI to connect to LanceDB\n * @param options connection options\n *\n * Usage:\n *\n * Connect to a local database\n * ```ts\n * const store = await LanceVectorStore.create('/path/to/db');\n * ```\n *\n * Connect to a LanceDB cloud database\n * ```ts\n * const store = await LanceVectorStore.create('db://host:port');\n * ```\n *\n * Connect to a cloud database\n * ```ts\n * const store = await LanceVectorStore.create('s3://bucket/db', { storageOptions: { timeout: '60s' } });\n * ```\n */\n public static async create(uri: string, options?: ConnectionOptions): Promise<LanceVectorStore> {\n const instance = new LanceVectorStore();\n try {\n instance.lanceClient = await connect(uri, options);\n return instance;\n } catch (e) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_VECTOR_CONNECT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { uri },\n },\n e,\n );\n }\n }\n\n /**\n * @internal\n * Private constructor to enforce using the create factory method\n */\n private constructor() {\n super();\n }\n\n close() {\n if (this.lanceClient) {\n this.lanceClient.close();\n }\n }\n\n async query({\n tableName,\n queryVector,\n filter,\n includeVector = false,\n topK = 10,\n columns = [],\n includeAllColumns = false,\n }: LanceQueryVectorParams): Promise<QueryResult[]> {\n try {\n if (!this.lanceClient) {\n throw new Error('LanceDB client not initialized. Use LanceVectorStore.create() to create an instance');\n }\n\n if (!tableName) {\n throw new Error('tableName is required');\n }\n\n if (!queryVector) {\n throw new Error('queryVector is required');\n }\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_VECTOR_QUERY_FAILED_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: 'LanceDB client not initialized. Use LanceVectorStore.create() to create an instance',\n details: { tableName },\n },\n error,\n );\n }\n\n try {\n // Open the table\n const table = await this.lanceClient.openTable(tableName);\n\n // Prepare the list of columns to select\n const selectColumns = [...columns];\n if (!selectColumns.includes('id')) {\n selectColumns.push('id');\n }\n\n // Create the query builder\n let query = table.search(queryVector);\n\n // Add filter if provided\n if (filter && Object.keys(filter).length > 0) {\n const whereClause = this.filterTranslator(filter);\n this.logger.debug(`Where clause generated: ${whereClause}`);\n query = query.where(whereClause);\n }\n\n // Apply column selection and limit\n if (!includeAllColumns && selectColumns.length > 0) {\n query = query.select(selectColumns);\n }\n query = query.limit(topK);\n\n // Execute the query\n const results = await query.toArray();\n\n return results.map(result => {\n // Collect all metadata_ prefixed fields\n const flatMetadata: Record<string, any> = {};\n\n // Get all keys from the result object\n Object.keys(result).forEach(key => {\n // Skip reserved keys (id, score, and the vector column)\n if (key !== 'id' && key !== 'score' && key !== 'vector' && key !== '_distance') {\n if (key.startsWith('metadata_')) {\n // Remove the prefix and add to flat metadata\n const metadataKey = key.substring('metadata_'.length);\n flatMetadata[metadataKey] = result[key];\n }\n }\n });\n\n // Reconstruct nested metadata object\n const metadata = this.unflattenObject(flatMetadata);\n\n return {\n id: String(result.id || ''),\n metadata,\n vector:\n includeVector && result.vector\n ? Array.isArray(result.vector)\n ? result.vector\n : Array.from(result.vector as any[])\n : undefined,\n document: result.document,\n score: result._distance,\n };\n });\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_VECTOR_QUERY_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName, includeVector, columnsCount: columns?.length, includeAllColumns },\n },\n error,\n );\n }\n }\n\n private filterTranslator(filter: LanceVectorFilter): string {\n // Add metadata_ prefix to filter keys if they don't already have it\n const processFilterKeys = (filterObj: Record<string, any>): Record<string, any> => {\n const result: Record<string, any> = {};\n\n Object.entries(filterObj).forEach(([key, value]) => {\n // Don't add prefix to logical operators\n if (key === '$or' || key === '$and' || key === '$not' || key === '$in') {\n // For logical operators, process their array contents\n if (Array.isArray(value)) {\n result[key] = value.map(item =>\n typeof item === 'object' && item !== null ? processFilterKeys(item as Record<string, any>) : item,\n );\n } else {\n result[key] = value;\n }\n }\n // Don't add prefix if it already has metadata_ prefix\n else if (key.startsWith('metadata_')) {\n result[key] = value;\n }\n // Add metadata_ prefix to regular field keys\n else {\n // Convert dot notation to underscore notation for nested fields\n if (key.includes('.')) {\n const convertedKey = `metadata_${key.replace(/\\./g, '_')}`;\n result[convertedKey] = value;\n } else {\n result[`metadata_${key}`] = value;\n }\n }\n });\n\n return result;\n };\n\n const prefixedFilter = filter && typeof filter === 'object' ? processFilterKeys(filter as Record<string, any>) : {};\n\n const translator = new LanceFilterTranslator();\n return translator.translate(prefixedFilter);\n }\n\n async upsert({ tableName, vectors, metadata = [], ids = [] }: LanceUpsertVectorParams): Promise<string[]> {\n try {\n if (!this.lanceClient) {\n throw new Error('LanceDB client not initialized. Use LanceVectorStore.create() to create an instance');\n }\n\n if (!tableName) {\n throw new Error('tableName is required');\n }\n\n if (!vectors || !Array.isArray(vectors) || vectors.length === 0) {\n throw new Error('vectors array is required and must not be empty');\n }\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_VECTOR_UPSERT_FAILED_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: 'LanceDB client not initialized. Use LanceVectorStore.create() to create an instance',\n details: { tableName },\n },\n error,\n );\n }\n\n try {\n const tables = await this.lanceClient.tableNames();\n if (!tables.includes(tableName)) {\n throw new Error(`Table ${tableName} does not exist`);\n }\n\n const table = await this.lanceClient.openTable(tableName);\n\n // Generate IDs if not provided\n const vectorIds = ids.length === vectors.length ? ids : vectors.map((_, i) => ids[i] || crypto.randomUUID());\n\n // Create data with metadata fields expanded at the top level\n const data = vectors.map((vector, i) => {\n const id = String(vectorIds[i]);\n const metadataItem = metadata[i] || {};\n\n // Create the base object with id and vector\n const rowData: Record<string, any> = {\n id,\n vector: vector,\n };\n\n // Flatten the metadata object and prefix all keys with 'metadata_'\n if (Object.keys(metadataItem).length > 0) {\n const flattenedMetadata = this.flattenObject(metadataItem, 'metadata');\n // Add all flattened metadata properties to the row data object\n Object.entries(flattenedMetadata).forEach(([key, value]) => {\n rowData[key] = value;\n });\n }\n\n return rowData;\n });\n\n await table.add(data, { mode: 'overwrite' });\n\n return vectorIds;\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_VECTOR_UPSERT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName, vectorCount: vectors.length, metadataCount: metadata.length, idsCount: ids.length },\n },\n error,\n );\n }\n }\n\n /**\n * Flattens a nested object, creating new keys with underscores for nested properties.\n * Example: { metadata: { text: 'test' } } → { metadata_text: 'test' }\n */\n private flattenObject(obj: Record<string, unknown>, prefix = ''): Record<string, unknown> {\n return Object.keys(obj).reduce((acc: Record<string, unknown>, k: string) => {\n const pre = prefix.length ? `${prefix}_` : '';\n if (typeof obj[k] === 'object' && obj[k] !== null && !Array.isArray(obj[k])) {\n Object.assign(acc, this.flattenObject(obj[k] as Record<string, unknown>, pre + k));\n } else {\n acc[pre + k] = obj[k];\n }\n return acc;\n }, {});\n }\n\n async createTable(\n tableName: string,\n data: Record<string, unknown>[] | TableLike,\n options?: Partial<CreateTableOptions>,\n ): Promise<Table> {\n if (!this.lanceClient) {\n throw new MastraError({\n id: 'STORAGE_LANCE_VECTOR_CREATE_TABLE_FAILED_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: 'LanceDB client not initialized. Use LanceVectorStore.create() to create an instance',\n details: { tableName },\n });\n }\n\n // Flatten nested objects if data is an array of records\n if (Array.isArray(data)) {\n data = data.map(record => this.flattenObject(record));\n }\n\n try {\n return await this.lanceClient.createTable(tableName, data, options);\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_VECTOR_CREATE_TABLE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n\n async listTables(): Promise<string[]> {\n if (!this.lanceClient) {\n throw new MastraError({\n id: 'STORAGE_LANCE_VECTOR_LIST_TABLES_FAILED_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: 'LanceDB client not initialized. Use LanceVectorStore.create() to create an instance',\n details: { methodName: 'listTables' },\n });\n }\n try {\n return await this.lanceClient.tableNames();\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_VECTOR_LIST_TABLES_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getTableSchema(tableName: string): Promise<any> {\n if (!this.lanceClient) {\n throw new MastraError({\n id: 'STORAGE_LANCE_VECTOR_GET_TABLE_SCHEMA_FAILED_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: 'LanceDB client not initialized. Use LanceVectorStore.create() to create an instance',\n details: { tableName },\n });\n }\n\n try {\n const table = await this.lanceClient.openTable(tableName);\n return await table.schema();\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_VECTOR_GET_TABLE_SCHEMA_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n\n /**\n * indexName is actually a column name in a table in lanceDB\n */\n async createIndex({\n tableName,\n indexName,\n dimension,\n metric = 'cosine',\n indexConfig = {},\n }: LanceCreateIndexParams): Promise<void> {\n try {\n if (!this.lanceClient) {\n throw new Error('LanceDB client not initialized. Use LanceVectorStore.create() to create an instance');\n }\n\n if (!tableName) {\n throw new Error('tableName is required');\n }\n\n if (!indexName) {\n throw new Error('indexName is required');\n }\n\n if (typeof dimension !== 'number' || dimension <= 0) {\n throw new Error('dimension must be a positive number');\n }\n } catch (err) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_VECTOR_CREATE_INDEX_FAILED_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { tableName: tableName || '', indexName, dimension, metric },\n },\n err,\n );\n }\n\n try {\n const tables = await this.lanceClient.tableNames();\n if (!tables.includes(tableName)) {\n throw new Error(\n `Table ${tableName} does not exist. Please create the table first by calling createTable() method.`,\n );\n }\n\n const table = await this.lanceClient.openTable(tableName);\n\n // Convert metric to LanceDB metric\n type LanceMetric = 'cosine' | 'l2' | 'dot';\n let metricType: LanceMetric | undefined;\n if (metric === 'euclidean') {\n metricType = 'l2';\n } else if (metric === 'dotproduct') {\n metricType = 'dot';\n } else if (metric === 'cosine') {\n metricType = 'cosine';\n }\n\n if (indexConfig.type === 'ivfflat') {\n await table.createIndex(indexName, {\n config: Index.ivfPq({\n numPartitions: indexConfig.numPartitions || 128,\n numSubVectors: indexConfig.numSubVectors || 16,\n distanceType: metricType,\n }),\n });\n } else {\n // Default to HNSW PQ index\n this.logger.debug('Creating HNSW PQ index with config:', indexConfig);\n await table.createIndex(indexName, {\n config: Index.hnswPq({\n m: indexConfig?.hnsw?.m || 16,\n efConstruction: indexConfig?.hnsw?.efConstruction || 100,\n distanceType: metricType,\n }),\n });\n }\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_VECTOR_CREATE_INDEX_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName: tableName || '', indexName, dimension },\n },\n error,\n );\n }\n }\n\n async listIndexes(): Promise<string[]> {\n if (!this.lanceClient) {\n throw new MastraError({\n id: 'STORAGE_LANCE_VECTOR_LIST_INDEXES_FAILED_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: 'LanceDB client not initialized. Use LanceVectorStore.create() to create an instance',\n details: { methodName: 'listIndexes' },\n });\n }\n\n try {\n const tables = await this.lanceClient.tableNames();\n const allIndices: string[] = [];\n\n for (const tableName of tables) {\n const table = await this.lanceClient.openTable(tableName);\n const tableIndices = await table.listIndices();\n allIndices.push(...tableIndices.map(index => index.name));\n }\n\n return allIndices;\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_VECTOR_LIST_INDEXES_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async describeIndex({ indexName }: DescribeIndexParams): Promise<IndexStats> {\n try {\n if (!this.lanceClient) {\n throw new Error('LanceDB client not initialized. Use LanceVectorStore.create() to create an instance');\n }\n\n if (!indexName) {\n throw new Error('indexName is required');\n }\n } catch (err) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_VECTOR_DESCRIBE_INDEX_FAILED_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { indexName },\n },\n err,\n );\n }\n\n try {\n const tables = await this.lanceClient.tableNames();\n\n for (const tableName of tables) {\n this.logger.debug('Checking table:' + tableName);\n const table = await this.lanceClient.openTable(tableName);\n const tableIndices = await table.listIndices();\n const foundIndex = tableIndices.find(index => index.name === indexName);\n\n if (foundIndex) {\n const stats = await table.indexStats(foundIndex.name);\n\n if (!stats) {\n throw new Error(`Index stats not found for index: ${indexName}`);\n }\n\n const schema = await table.schema();\n const vectorCol = foundIndex.columns[0] || 'vector';\n\n // Find the vector column in the schema\n const vectorField = schema.fields.find(field => field.name === vectorCol);\n const dimension = vectorField?.type?.['listSize'] || 0;\n\n return {\n dimension: dimension,\n metric: stats.distanceType as 'cosine' | 'euclidean' | 'dotproduct' | undefined,\n count: stats.numIndexedRows,\n };\n }\n }\n\n throw new Error(`IndexName: ${indexName} not found`);\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_VECTOR_DESCRIBE_INDEX_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { indexName },\n },\n error,\n );\n }\n }\n\n async deleteIndex({ indexName }: DeleteIndexParams): Promise<void> {\n try {\n if (!this.lanceClient) {\n throw new Error('LanceDB client not initialized. Use LanceVectorStore.create() to create an instance');\n }\n\n if (!indexName) {\n throw new Error('indexName is required');\n }\n } catch (err) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_VECTOR_DELETE_INDEX_FAILED_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { indexName },\n },\n err,\n );\n }\n try {\n const tables = await this.lanceClient.tableNames();\n\n for (const tableName of tables) {\n const table = await this.lanceClient.openTable(tableName);\n const tableIndices = await table.listIndices();\n const foundIndex = tableIndices.find(index => index.name === indexName);\n\n if (foundIndex) {\n await table.dropIndex(indexName);\n return;\n }\n }\n\n throw new Error(`Index ${indexName} not found`);\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_VECTOR_DELETE_INDEX_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { indexName },\n },\n error,\n );\n }\n }\n\n /**\n * Deletes all tables in the database\n */\n async deleteAllTables(): Promise<void> {\n if (!this.lanceClient) {\n throw new MastraError({\n id: 'STORAGE_LANCE_VECTOR_DELETE_ALL_TABLES_FAILED_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { methodName: 'deleteAllTables' },\n text: 'LanceDB client not initialized. Use LanceVectorStore.create() to create an instance',\n });\n }\n try {\n await this.lanceClient.dropAllTables();\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_VECTOR_DELETE_ALL_TABLES_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { methodName: 'deleteAllTables' },\n },\n error,\n );\n }\n }\n\n async deleteTable(tableName: string): Promise<void> {\n if (!this.lanceClient) {\n throw new MastraError({\n id: 'STORAGE_LANCE_VECTOR_DELETE_TABLE_FAILED_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { tableName },\n text: 'LanceDB client not initialized. Use LanceVectorStore.create() to create an instance',\n });\n }\n\n try {\n await this.lanceClient.dropTable(tableName);\n } catch (error: any) {\n // throw new Error(`Failed to delete tables: ${error.message}`);\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_VECTOR_DELETE_TABLE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n\n async updateVector({ indexName, id, update }: UpdateVectorParams): Promise<void> {\n try {\n if (!this.lanceClient) {\n throw new Error('LanceDB client not initialized. Use LanceVectorStore.create() to create an instance');\n }\n\n if (!indexName) {\n throw new Error('indexName is required');\n }\n\n if (!id) {\n throw new Error('id is required');\n }\n } catch (err) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_VECTOR_UPDATE_VECTOR_FAILED_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { indexName, id },\n },\n err,\n );\n }\n\n try {\n // In LanceDB, the indexName is actually a column name in a table\n // We need to find which table has this column as an index\n const tables = await this.lanceClient.tableNames();\n\n for (const tableName of tables) {\n this.logger.debug('Checking table:' + tableName);\n const table = await this.lanceClient.openTable(tableName);\n\n try {\n const schema = await table.schema();\n const hasColumn = schema.fields.some(field => field.name === indexName);\n\n if (hasColumn) {\n this.logger.debug(`Found column ${indexName} in table ${tableName}`);\n\n // First, query the existing record to preserve values that aren't being updated\n const existingRecord = await table\n .query()\n .where(`id = '${id}'`)\n .select(schema.fields.map(field => field.name))\n .limit(1)\n .toArray();\n\n if (existingRecord.length === 0) {\n throw new Error(`Record with id '${id}' not found in table ${tableName}`);\n }\n\n // Create a clean data object for update\n const rowData: Record<string, any> = {\n id,\n };\n\n // Copy all existing field values except special fields\n Object.entries(existingRecord[0]).forEach(([key, value]) => {\n // Skip special fields\n if (key !== 'id' && key !== '_distance') {\n // Handle vector field specially to avoid nested properties\n if (key === indexName) {\n // If we're about to update this vector anyway, skip copying\n if (!update.vector) {\n // Ensure vector is a plain array\n if (Array.isArray(value)) {\n rowData[key] = [...value];\n } else if (typeof value === 'object' && value !== null) {\n // Handle vector objects by converting to array if needed\n rowData[key] = Array.from(value as any[]);\n } else {\n rowData[key] = value;\n }\n }\n } else {\n rowData[key] = value;\n }\n }\n });\n\n // Apply the vector update if provided\n if (update.vector) {\n rowData[indexName] = update.vector;\n }\n\n // Apply metadata updates if provided\n if (update.metadata) {\n Object.entries(update.metadata).forEach(([key, value]) => {\n rowData[`metadata_${key}`] = value;\n });\n }\n\n // Update the record\n await table.add([rowData], { mode: 'overwrite' });\n return;\n }\n } catch (err) {\n this.logger.error(`Error checking schema for table ${tableName}:` + err);\n // Continue to the next table if there's an error\n continue;\n }\n }\n\n throw new Error(`No table found with column/index '${indexName}'`);\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_VECTOR_UPDATE_VECTOR_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { indexName, id, hasVector: !!update.vector, hasMetadata: !!update.metadata },\n },\n error,\n );\n }\n }\n\n async deleteVector({ indexName, id }: DeleteVectorParams): Promise<void> {\n try {\n if (!this.lanceClient) {\n throw new Error('LanceDB client not initialized. Use LanceVectorStore.create() to create an instance');\n }\n\n if (!indexName) {\n throw new Error('indexName is required');\n }\n\n if (!id) {\n throw new Error('id is required');\n }\n } catch (err) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_VECTOR_DELETE_VECTOR_FAILED_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { indexName, id },\n },\n err,\n );\n }\n\n try {\n // In LanceDB, the indexName is actually a column name in a table\n // We need to find which table has this column as an index\n const tables = await this.lanceClient.tableNames();\n\n for (const tableName of tables) {\n this.logger.debug('Checking table:' + tableName);\n const table = await this.lanceClient.openTable(tableName);\n\n try {\n // Try to get the schema to check if this table has the column we're looking for\n const schema = await table.schema();\n const hasColumn = schema.fields.some(field => field.name === indexName);\n\n if (hasColumn) {\n this.logger.debug(`Found column ${indexName} in table ${tableName}`);\n await table.delete(`id = '${id}'`);\n return;\n }\n } catch (err) {\n this.logger.error(`Error checking schema for table ${tableName}:` + err);\n // Continue to the next table if there's an error\n continue;\n }\n }\n\n throw new Error(`No table found with column/index '${indexName}'`);\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_VECTOR_DELETE_VECTOR_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { indexName, id },\n },\n error,\n );\n }\n }\n\n /**\n * Converts a flattened object with keys using underscore notation back to a nested object.\n * Example: { name: 'test', details_text: 'test' } → { name: 'test', details: { text: 'test' } }\n */\n private unflattenObject(obj: Record<string, any>): Record<string, any> {\n const result: Record<string, any> = {};\n\n Object.keys(obj).forEach(key => {\n const value = obj[key];\n const parts = key.split('_');\n\n // Start with the result object\n let current = result;\n\n // Process all parts except the last one\n for (let i = 0; i < parts.length - 1; i++) {\n const part = parts[i];\n // Skip empty parts\n if (!part) continue;\n\n // Create nested object if it doesn't exist\n if (!current[part] || typeof current[part] !== 'object') {\n current[part] = {};\n }\n current = current[part];\n }\n\n // Set the value at the last part\n const lastPart = parts[parts.length - 1];\n if (lastPart) {\n current[lastPart] = value;\n }\n });\n\n return result;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/storage/domains/legacy-evals/index.ts","../src/storage/domains/utils.ts","../src/storage/domains/memory/index.ts","../src/storage/domains/operations/index.ts","../src/storage/domains/scores/index.ts","../src/storage/domains/traces/index.ts","../src/storage/domains/workflows/index.ts","../src/storage/index.ts","../src/vector/filter.ts","../src/vector/index.ts"],"names":["TABLE_EVALS","MastraError","ErrorDomain","ErrorCategory","threadId","TABLE_WORKFLOW_SNAPSHOT","connect","filter"],"mappings":"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","file":"index.js","sourcesContent":["import type { Connection } from '@lancedb/lancedb';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { LegacyEvalsStorage, TABLE_EVALS } from '@mastra/core/storage';\nimport type { EvalRow, PaginationInfo } from '@mastra/core/storage';\n\nexport class StoreLegacyEvalsLance extends LegacyEvalsStorage {\n private client: Connection;\n constructor({ client }: { client: Connection }) {\n super();\n this.client = client;\n }\n\n async getEvalsByAgentName(agentName: string, type?: 'test' | 'live'): Promise<EvalRow[]> {\n try {\n const table = await this.client.openTable(TABLE_EVALS);\n const query = table.query().where(`agent_name = '${agentName}'`);\n const records = await query.toArray();\n\n // Filter by type if specified\n let filteredRecords = records;\n if (type === 'live') {\n // Live evals have test_info as null\n filteredRecords = records.filter(record => record.test_info === null);\n } else if (type === 'test') {\n // Test evals have test_info as a JSON string\n filteredRecords = records.filter(record => record.test_info !== null);\n }\n\n return filteredRecords.map(record => {\n return {\n id: record.id,\n input: record.input,\n output: record.output,\n agentName: record.agent_name,\n metricName: record.metric_name,\n result: JSON.parse(record.result),\n instructions: record.instructions,\n testInfo: record.test_info ? JSON.parse(record.test_info) : null,\n globalRunId: record.global_run_id,\n runId: record.run_id,\n createdAt: new Date(record.created_at).toString(),\n };\n }) as EvalRow[];\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORE_GET_EVALS_BY_AGENT_NAME_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { agentName },\n },\n error,\n );\n }\n }\n\n async getEvals(options: {\n agentName?: string;\n type?: 'test' | 'live';\n page?: number;\n perPage?: number;\n fromDate?: Date;\n toDate?: Date;\n dateRange?: { start?: Date; end?: Date };\n }): Promise<PaginationInfo & { evals: EvalRow[] }> {\n try {\n const table = await this.client.openTable(TABLE_EVALS);\n\n // Build combined where clause\n const conditions: string[] = [];\n\n if (options.agentName) {\n conditions.push(`agent_name = '${options.agentName}'`);\n }\n\n // Apply type filtering\n if (options.type === 'live') {\n conditions.push('test_info IS NULL');\n } else if (options.type === 'test') {\n conditions.push('test_info IS NOT NULL');\n }\n\n // Apply date filtering\n const startDate = options.dateRange?.start || options.fromDate;\n const endDate = options.dateRange?.end || options.toDate;\n\n if (startDate) {\n conditions.push(`\\`created_at\\` >= ${startDate.getTime()}`);\n }\n\n if (endDate) {\n conditions.push(`\\`created_at\\` <= ${endDate.getTime()}`);\n }\n\n // Get total count with the same conditions\n let total = 0;\n if (conditions.length > 0) {\n total = await table.countRows(conditions.join(' AND '));\n } else {\n total = await table.countRows();\n }\n\n // Build query for fetching records\n const query = table.query();\n\n // Apply combined where clause if we have conditions\n if (conditions.length > 0) {\n const whereClause = conditions.join(' AND ');\n query.where(whereClause);\n }\n\n const records = await query.toArray();\n\n const evals = records\n .sort((a, b) => b.created_at - a.created_at)\n .map(record => {\n return {\n id: record.id,\n input: record.input,\n output: record.output,\n agentName: record.agent_name,\n metricName: record.metric_name,\n result: JSON.parse(record.result),\n instructions: record.instructions,\n testInfo: record.test_info ? JSON.parse(record.test_info) : null,\n globalRunId: record.global_run_id,\n runId: record.run_id,\n createdAt: new Date(record.created_at).toISOString(),\n };\n }) as EvalRow[];\n\n // Apply pagination after filtering\n const page = options.page || 0;\n const perPage = options.perPage || 10;\n const pagedEvals = evals.slice(page * perPage, (page + 1) * perPage);\n\n return {\n evals: pagedEvals,\n total: total,\n page,\n perPage,\n hasMore: total > (page + 1) * perPage,\n };\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORE_GET_EVALS_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { agentName: options.agentName ?? '' },\n },\n error,\n );\n }\n }\n}\n","import type { Connection, FieldLike, SchemaLike } from '@lancedb/lancedb';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { TABLE_EVALS, TABLE_WORKFLOW_SNAPSHOT } from '@mastra/core/storage';\nimport type { TABLE_NAMES } from '@mastra/core/storage';\n\nexport function getPrimaryKeys(tableName: TABLE_NAMES): string[] {\n let primaryId: string[] = ['id'];\n if (tableName === TABLE_WORKFLOW_SNAPSHOT) {\n primaryId = ['workflow_name', 'run_id'];\n } else if (tableName === TABLE_EVALS) {\n primaryId = ['agent_name', 'metric_name', 'run_id'];\n }\n\n return primaryId;\n}\n\nexport function validateKeyTypes(keys: Record<string, any>, tableSchema: SchemaLike): void {\n // Create a map of field names to their expected types\n const fieldTypes = new Map(\n tableSchema.fields.map((field: any) => [field.name, field.type?.toString().toLowerCase()]),\n );\n\n for (const [key, value] of Object.entries(keys)) {\n const fieldType = fieldTypes.get(key);\n\n if (!fieldType) {\n throw new Error(`Field '${key}' does not exist in table schema`);\n }\n\n // Type validation\n if (value !== null) {\n if ((fieldType.includes('int') || fieldType.includes('bigint')) && typeof value !== 'number') {\n throw new Error(`Expected numeric value for field '${key}', got ${typeof value}`);\n }\n\n if (fieldType.includes('utf8') && typeof value !== 'string') {\n throw new Error(`Expected string value for field '${key}', got ${typeof value}`);\n }\n\n if (fieldType.includes('timestamp') && !(value instanceof Date) && typeof value !== 'string') {\n throw new Error(`Expected Date or string value for field '${key}', got ${typeof value}`);\n }\n }\n }\n}\n\nexport function processResultWithTypeConversion(\n rawResult: Record<string, any> | Record<string, any>[],\n tableSchema: SchemaLike,\n): Record<string, any> | Record<string, any>[] {\n // Build a map of field names to their schema types\n const fieldTypeMap = new Map();\n tableSchema.fields.forEach((field: any) => {\n const fieldName = field.name;\n const fieldTypeStr = field.type.toString().toLowerCase();\n fieldTypeMap.set(fieldName, fieldTypeStr);\n });\n\n // Handle array case\n if (Array.isArray(rawResult)) {\n return rawResult.map(item => processResultWithTypeConversion(item, tableSchema));\n }\n\n // Handle single record case\n const processedResult = { ...rawResult };\n\n // Convert each field according to its schema type\n for (const key in processedResult) {\n const fieldTypeStr = fieldTypeMap.get(key);\n if (!fieldTypeStr) continue;\n\n // Skip conversion for ID fields - preserve their original format\n // if (key === 'id') {\n // continue;\n // }\n\n // Only try to convert string values\n if (typeof processedResult[key] === 'string') {\n // Numeric types\n if (fieldTypeStr.includes('int32') || fieldTypeStr.includes('float32')) {\n if (!isNaN(Number(processedResult[key]))) {\n processedResult[key] = Number(processedResult[key]);\n }\n } else if (fieldTypeStr.includes('int64')) {\n processedResult[key] = Number(processedResult[key]);\n } else if (fieldTypeStr.includes('utf8') && key !== 'id') {\n try {\n const parsed = JSON.parse(processedResult[key]);\n if (typeof parsed === 'object') {\n processedResult[key] = JSON.parse(processedResult[key]);\n }\n } catch {}\n }\n } else if (typeof processedResult[key] === 'bigint') {\n // Convert BigInt values to regular numbers for application layer\n processedResult[key] = Number(processedResult[key]);\n } else if (fieldTypeStr.includes('float64') && ['createdAt', 'updatedAt'].includes(key)) {\n processedResult[key] = new Date(processedResult[key]);\n }\n }\n\n return processedResult;\n}\n\nexport async function getTableSchema({\n tableName,\n client,\n}: {\n tableName: TABLE_NAMES;\n client: Connection;\n}): Promise<SchemaLike> {\n try {\n if (!client) {\n throw new Error('LanceDB client not initialized. Call LanceStorage.create() first.');\n }\n if (!tableName) {\n throw new Error('tableName is required for getTableSchema.');\n }\n } catch (validationError: any) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_STORAGE_GET_TABLE_SCHEMA_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: validationError.message,\n details: { tableName },\n },\n validationError,\n );\n }\n\n try {\n const table = await client.openTable(tableName);\n const rawSchema = await table.schema();\n const fields = rawSchema.fields as FieldLike[];\n\n // Convert schema to SchemaLike format\n return {\n fields,\n metadata: new Map<string, string>(),\n get names() {\n return fields.map((field: FieldLike) => field.name);\n },\n };\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_STORAGE_GET_TABLE_SCHEMA_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n}\n","import type { Connection } from '@lancedb/lancedb';\nimport { MessageList } from '@mastra/core/agent';\nimport type { MastraMessageContentV2 } from '@mastra/core/agent';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport type { MastraMessageV1, MastraMessageV2, StorageThreadType } from '@mastra/core/memory';\nimport {\n MemoryStorage,\n resolveMessageLimit,\n TABLE_MESSAGES,\n TABLE_RESOURCES,\n TABLE_THREADS,\n} from '@mastra/core/storage';\nimport type { PaginationInfo, StorageGetMessagesArg, StorageResourceType } from '@mastra/core/storage';\nimport type { StoreOperationsLance } from '../operations';\nimport { getTableSchema, processResultWithTypeConversion } from '../utils';\n\nexport class StoreMemoryLance extends MemoryStorage {\n private client: Connection;\n private operations: StoreOperationsLance;\n constructor({ client, operations }: { client: Connection; operations: StoreOperationsLance }) {\n super();\n this.client = client;\n this.operations = operations;\n }\n\n async getThreadById({ threadId }: { threadId: string }): Promise<StorageThreadType | null> {\n try {\n const thread = await this.operations.load({ tableName: TABLE_THREADS, keys: { id: threadId } });\n\n if (!thread) {\n return null;\n }\n\n return {\n ...thread,\n createdAt: new Date(thread.createdAt),\n updatedAt: new Date(thread.updatedAt),\n };\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORE_GET_THREAD_BY_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getThreadsByResourceId({ resourceId }: { resourceId: string }): Promise<StorageThreadType[]> {\n try {\n const table = await this.client.openTable(TABLE_THREADS);\n // fetches all threads with the given resourceId\n const query = table.query().where(`\\`resourceId\\` = '${resourceId}'`);\n\n const records = await query.toArray();\n return processResultWithTypeConversion(\n records,\n await getTableSchema({ tableName: TABLE_THREADS, client: this.client }),\n ) as StorageThreadType[];\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORE_GET_THREADS_BY_RESOURCE_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n /**\n * Saves a thread to the database. This function doesn't overwrite existing threads.\n * @param thread - The thread to save\n * @returns The saved thread\n */\n async saveThread({ thread }: { thread: StorageThreadType }): Promise<StorageThreadType> {\n try {\n const record = { ...thread, metadata: JSON.stringify(thread.metadata) };\n const table = await this.client.openTable(TABLE_THREADS);\n await table.add([record], { mode: 'append' });\n\n return thread;\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORE_SAVE_THREAD_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async updateThread({\n id,\n title,\n metadata,\n }: {\n id: string;\n title: string;\n metadata: Record<string, unknown>;\n }): Promise<StorageThreadType> {\n const maxRetries = 5;\n\n for (let attempt = 0; attempt < maxRetries; attempt++) {\n try {\n // Get current state atomically\n const current = await this.getThreadById({ threadId: id });\n if (!current) {\n throw new Error(`Thread with id ${id} not found`);\n }\n\n // Merge metadata\n const mergedMetadata = { ...current.metadata, ...metadata };\n\n // Update atomically\n const record = {\n id,\n title,\n metadata: JSON.stringify(mergedMetadata),\n updatedAt: new Date().getTime(),\n };\n\n const table = await this.client.openTable(TABLE_THREADS);\n await table.mergeInsert('id').whenMatchedUpdateAll().whenNotMatchedInsertAll().execute([record]);\n\n const updatedThread = await this.getThreadById({ threadId: id });\n if (!updatedThread) {\n throw new Error(`Failed to retrieve updated thread ${id}`);\n }\n return updatedThread;\n } catch (error: any) {\n if (error.message?.includes('Commit conflict') && attempt < maxRetries - 1) {\n // Wait with exponential backoff before retrying\n const delay = Math.pow(2, attempt) * 10; // 10ms, 20ms, 40ms\n await new Promise(resolve => setTimeout(resolve, delay));\n continue;\n }\n\n // If it's not a commit conflict or we've exhausted retries, throw the error\n throw new MastraError(\n {\n id: 'LANCE_STORE_UPDATE_THREAD_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n // This should never be reached, but just in case\n throw new MastraError(\n {\n id: 'LANCE_STORE_UPDATE_THREAD_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n new Error('All retries exhausted'),\n );\n }\n\n async deleteThread({ threadId }: { threadId: string }): Promise<void> {\n try {\n // Delete the thread\n const table = await this.client.openTable(TABLE_THREADS);\n await table.delete(`id = '${threadId}'`);\n\n // Delete all messages with the matching thread_id\n const messagesTable = await this.client.openTable(TABLE_MESSAGES);\n await messagesTable.delete(`thread_id = '${threadId}'`);\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORE_DELETE_THREAD_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n private normalizeMessage(message: any): MastraMessageV1 | MastraMessageV2 {\n const { thread_id, ...rest } = message;\n return {\n ...rest,\n threadId: thread_id,\n content:\n typeof message.content === 'string'\n ? (() => {\n try {\n return JSON.parse(message.content);\n } catch {\n return message.content;\n }\n })()\n : message.content,\n };\n }\n\n public async getMessages(args: StorageGetMessagesArg & { format?: 'v1' }): Promise<MastraMessageV1[]>;\n public async getMessages(args: StorageGetMessagesArg & { format: 'v2' }): Promise<MastraMessageV2[]>;\n public async getMessages({\n threadId,\n resourceId,\n selectBy,\n format,\n threadConfig,\n }: StorageGetMessagesArg & { format?: 'v1' | 'v2' }): Promise<MastraMessageV1[] | MastraMessageV2[]> {\n try {\n if (!threadId.trim()) throw new Error('threadId must be a non-empty string');\n\n if (threadConfig) {\n throw new Error('ThreadConfig is not supported by LanceDB storage');\n }\n const limit = resolveMessageLimit({ last: selectBy?.last, defaultLimit: Number.MAX_SAFE_INTEGER });\n const table = await this.client.openTable(TABLE_MESSAGES);\n\n let allRecords: any[] = [];\n\n // Handle selectBy.include for cross-thread context retrieval\n if (selectBy?.include && selectBy.include.length > 0) {\n // Get all unique thread IDs from include items\n const threadIds = [...new Set(selectBy.include.map(item => item.threadId))];\n\n // Fetch all messages from all relevant threads\n for (const threadId of threadIds) {\n const threadQuery = table.query().where(`thread_id = '${threadId}'`);\n let threadRecords = await threadQuery.toArray();\n allRecords.push(...threadRecords);\n }\n } else {\n // Regular single-thread query\n let query = table.query().where(`\\`thread_id\\` = '${threadId}'`);\n allRecords = await query.toArray();\n }\n\n // Sort the records chronologically\n allRecords.sort((a, b) => {\n const dateA = new Date(a.createdAt).getTime();\n const dateB = new Date(b.createdAt).getTime();\n return dateA - dateB; // Ascending order\n });\n\n // Process the include.withPreviousMessages and include.withNextMessages if specified\n if (selectBy?.include && selectBy.include.length > 0) {\n allRecords = this.processMessagesWithContext(allRecords, selectBy.include);\n }\n\n // If we're fetching the last N messages, take only the last N after sorting\n if (limit !== Number.MAX_SAFE_INTEGER) {\n allRecords = allRecords.slice(-limit);\n }\n\n const messages = processResultWithTypeConversion(\n allRecords,\n await getTableSchema({ tableName: TABLE_MESSAGES, client: this.client }),\n );\n\n const list = new MessageList({ threadId, resourceId }).add(messages.map(this.normalizeMessage), 'memory');\n if (format === 'v2') return list.get.all.v2();\n return list.get.all.v1();\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORE_GET_MESSAGES_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n threadId,\n resourceId: resourceId ?? '',\n },\n },\n error,\n );\n }\n }\n\n public async getMessagesById({\n messageIds,\n format,\n }: {\n messageIds: string[];\n format: 'v1';\n }): Promise<MastraMessageV1[]>;\n public async getMessagesById({\n messageIds,\n format,\n }: {\n messageIds: string[];\n format?: 'v2';\n }): Promise<MastraMessageV2[]>;\n public async getMessagesById({\n messageIds,\n format,\n }: {\n messageIds: string[];\n format?: 'v1' | 'v2';\n }): Promise<MastraMessageV1[] | MastraMessageV2[]> {\n if (messageIds.length === 0) return [];\n try {\n const table = await this.client.openTable(TABLE_MESSAGES);\n\n const quotedIds = messageIds.map(id => `'${id}'`).join(', ');\n const allRecords = await table.query().where(`id IN (${quotedIds})`).toArray();\n\n const messages = processResultWithTypeConversion(\n allRecords,\n await getTableSchema({ tableName: TABLE_MESSAGES, client: this.client }),\n );\n\n const list = new MessageList().add(messages.map(this.normalizeMessage), 'memory');\n if (format === `v1`) return list.get.all.v1();\n return list.get.all.v2();\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORE_GET_MESSAGES_BY_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n messageIds: JSON.stringify(messageIds),\n },\n },\n error,\n );\n }\n }\n\n async saveMessages(args: { messages: MastraMessageV1[]; format?: undefined | 'v1' }): Promise<MastraMessageV1[]>;\n async saveMessages(args: { messages: MastraMessageV2[]; format: 'v2' }): Promise<MastraMessageV2[]>;\n async saveMessages(\n args: { messages: MastraMessageV1[]; format?: undefined | 'v1' } | { messages: MastraMessageV2[]; format: 'v2' },\n ): Promise<MastraMessageV2[] | MastraMessageV1[]> {\n try {\n const { messages, format = 'v1' } = args;\n if (messages.length === 0) {\n return [];\n }\n\n const threadId = messages[0]?.threadId;\n\n if (!threadId) {\n throw new Error('Thread ID is required');\n }\n\n // Validate all messages before saving\n for (const message of messages) {\n if (!message.id) {\n throw new Error('Message ID is required');\n }\n if (!message.threadId) {\n throw new Error('Thread ID is required for all messages');\n }\n if (message.resourceId === null || message.resourceId === undefined) {\n throw new Error('Resource ID cannot be null or undefined');\n }\n if (!message.content) {\n throw new Error('Message content is required');\n }\n }\n\n const transformedMessages = messages.map((message: MastraMessageV2 | MastraMessageV1) => {\n const { threadId, type, ...rest } = message;\n return {\n ...rest,\n thread_id: threadId,\n type: type ?? 'v2',\n content: JSON.stringify(message.content),\n };\n });\n\n const table = await this.client.openTable(TABLE_MESSAGES);\n await table.mergeInsert('id').whenMatchedUpdateAll().whenNotMatchedInsertAll().execute(transformedMessages);\n\n // Update the thread's updatedAt timestamp\n const threadsTable = await this.client.openTable(TABLE_THREADS);\n const currentTime = new Date().getTime();\n const updateRecord = { id: threadId, updatedAt: currentTime };\n await threadsTable.mergeInsert('id').whenMatchedUpdateAll().whenNotMatchedInsertAll().execute([updateRecord]);\n\n const list = new MessageList().add(messages, 'memory');\n if (format === `v2`) return list.get.all.v2();\n return list.get.all.v1();\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORE_SAVE_MESSAGES_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getThreadsByResourceIdPaginated(args: {\n resourceId: string;\n page?: number;\n perPage?: number;\n }): Promise<PaginationInfo & { threads: StorageThreadType[] }> {\n try {\n const { resourceId, page = 0, perPage = 10 } = args;\n const table = await this.client.openTable(TABLE_THREADS);\n\n // Get total count\n const total = await table.countRows(`\\`resourceId\\` = '${resourceId}'`);\n\n // Get paginated results\n const query = table.query().where(`\\`resourceId\\` = '${resourceId}'`);\n const offset = page * perPage;\n query.limit(perPage);\n if (offset > 0) {\n query.offset(offset);\n }\n\n const records = await query.toArray();\n\n // Sort by updatedAt descending (most recent first)\n records.sort((a, b) => new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime());\n\n const schema = await getTableSchema({ tableName: TABLE_THREADS, client: this.client });\n const threads = records.map(record => processResultWithTypeConversion(record, schema)) as StorageThreadType[];\n\n return {\n threads,\n total,\n page,\n perPage,\n hasMore: total > (page + 1) * perPage,\n };\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORE_GET_THREADS_BY_RESOURCE_ID_PAGINATED_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n /**\n * Processes messages to include context messages based on withPreviousMessages and withNextMessages\n * @param records - The sorted array of records to process\n * @param include - The array of include specifications with context parameters\n * @returns The processed array with context messages included\n */\n private processMessagesWithContext(\n records: any[],\n include: { id: string; withPreviousMessages?: number; withNextMessages?: number }[],\n ): any[] {\n const messagesWithContext = include.filter(item => item.withPreviousMessages || item.withNextMessages);\n\n if (messagesWithContext.length === 0) {\n return records;\n }\n\n // Create a map of message id to index in the sorted array for quick lookup\n const messageIndexMap = new Map<string, number>();\n records.forEach((message, index) => {\n messageIndexMap.set(message.id, index);\n });\n\n // Keep track of additional indices to include\n const additionalIndices = new Set<number>();\n\n for (const item of messagesWithContext) {\n const messageIndex = messageIndexMap.get(item.id);\n\n if (messageIndex !== undefined) {\n // Add previous messages if requested\n if (item.withPreviousMessages) {\n const startIdx = Math.max(0, messageIndex - item.withPreviousMessages);\n for (let i = startIdx; i < messageIndex; i++) {\n additionalIndices.add(i);\n }\n }\n\n // Add next messages if requested\n if (item.withNextMessages) {\n const endIdx = Math.min(records.length - 1, messageIndex + item.withNextMessages);\n for (let i = messageIndex + 1; i <= endIdx; i++) {\n additionalIndices.add(i);\n }\n }\n }\n }\n\n // If we need to include additional messages, create a new set of records\n if (additionalIndices.size === 0) {\n return records;\n }\n\n // Get IDs of the records that matched the original query\n const originalMatchIds = new Set(include.map(item => item.id));\n\n // Create a set of all indices we need to include\n const allIndices = new Set<number>();\n\n // Add indices of originally matched messages\n records.forEach((record, index) => {\n if (originalMatchIds.has(record.id)) {\n allIndices.add(index);\n }\n });\n\n // Add the additional context message indices\n additionalIndices.forEach(index => {\n allIndices.add(index);\n });\n\n // Create a new filtered array with only the required messages\n // while maintaining chronological order\n return Array.from(allIndices)\n .sort((a, b) => a - b)\n .map(index => records[index]);\n }\n\n async getMessagesPaginated(\n args: StorageGetMessagesArg & { format?: 'v1' | 'v2' },\n ): Promise<PaginationInfo & { messages: MastraMessageV1[] | MastraMessageV2[] }> {\n const { threadId, resourceId, selectBy, format = 'v1' } = args;\n const page = selectBy?.pagination?.page ?? 0;\n const perPage = selectBy?.pagination?.perPage ?? 10;\n\n try {\n if (!threadId.trim()) throw new Error('threadId must be a non-empty string');\n\n // Extract pagination and dateRange from selectBy.pagination\n const dateRange = selectBy?.pagination?.dateRange;\n const fromDate = dateRange?.start;\n const toDate = dateRange?.end;\n\n const table = await this.client.openTable(TABLE_MESSAGES);\n const messages: any[] = [];\n\n // Handle selectBy.include first (before pagination)\n if (selectBy?.include && Array.isArray(selectBy.include)) {\n // Get all unique thread IDs from include items\n const threadIds = [...new Set(selectBy.include.map(item => item.threadId))];\n\n // Fetch all messages from all relevant threads\n const allThreadMessages: any[] = [];\n for (const threadId of threadIds) {\n const threadQuery = table.query().where(`thread_id = '${threadId}'`);\n let threadRecords = await threadQuery.toArray();\n\n // Apply date filtering in JS for context\n if (fromDate) threadRecords = threadRecords.filter(m => m.createdAt >= fromDate.getTime());\n if (toDate) threadRecords = threadRecords.filter(m => m.createdAt <= toDate.getTime());\n\n allThreadMessages.push(...threadRecords);\n }\n\n // Sort all messages by createdAt\n allThreadMessages.sort((a, b) => a.createdAt - b.createdAt);\n\n // Apply processMessagesWithContext to the combined array\n const contextMessages = this.processMessagesWithContext(allThreadMessages, selectBy.include);\n messages.push(...contextMessages);\n }\n\n // Build query conditions for the main thread\n const conditions: string[] = [`thread_id = '${threadId}'`];\n if (resourceId) {\n conditions.push(`\\`resourceId\\` = '${resourceId}'`);\n }\n if (fromDate) {\n conditions.push(`\\`createdAt\\` >= ${fromDate.getTime()}`);\n }\n if (toDate) {\n conditions.push(`\\`createdAt\\` <= ${toDate.getTime()}`);\n }\n\n // Get total count (excluding already included messages)\n let total = 0;\n if (conditions.length > 0) {\n total = await table.countRows(conditions.join(' AND '));\n } else {\n total = await table.countRows();\n }\n\n // If no messages and no included messages, return empty result\n if (total === 0 && messages.length === 0) {\n return {\n messages: [],\n total: 0,\n page,\n perPage,\n hasMore: false,\n };\n }\n\n // Fetch paginated messages (excluding already included ones)\n const excludeIds = messages.map(m => m.id);\n let selectedMessages: any[] = [];\n\n if (selectBy?.last && selectBy.last > 0) {\n // Handle selectBy.last: get last N messages for the main thread\n const query = table.query();\n if (conditions.length > 0) {\n query.where(conditions.join(' AND '));\n }\n let records = await query.toArray();\n records = records.sort((a, b) => a.createdAt - b.createdAt);\n\n // Exclude already included messages\n if (excludeIds.length > 0) {\n records = records.filter(m => !excludeIds.includes(m.id));\n }\n\n selectedMessages = records.slice(-selectBy.last);\n } else {\n // Regular pagination\n const query = table.query();\n if (conditions.length > 0) {\n query.where(conditions.join(' AND '));\n }\n let records = await query.toArray();\n records = records.sort((a, b) => a.createdAt - b.createdAt);\n\n // Exclude already included messages\n if (excludeIds.length > 0) {\n records = records.filter(m => !excludeIds.includes(m.id));\n }\n\n selectedMessages = records.slice(page * perPage, (page + 1) * perPage);\n }\n\n // Merge all messages and deduplicate\n const allMessages = [...messages, ...selectedMessages];\n const seen = new Set();\n const dedupedMessages = allMessages.filter(m => {\n const key = `${m.id}:${m.thread_id}`;\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n });\n\n // Convert to correct format (v1/v2)\n const formattedMessages = dedupedMessages.map((msg: any) => {\n const { thread_id, ...rest } = msg;\n return {\n ...rest,\n threadId: thread_id,\n content:\n typeof msg.content === 'string'\n ? (() => {\n try {\n return JSON.parse(msg.content);\n } catch {\n return msg.content;\n }\n })()\n : msg.content,\n };\n });\n\n const list = new MessageList().add(formattedMessages, 'memory');\n return {\n messages: format === 'v2' ? list.get.all.v2() : list.get.all.v1(),\n total: total, // Total should be the count of messages matching the filters\n page,\n perPage,\n hasMore: total > (page + 1) * perPage,\n };\n } catch (error: any) {\n const mastraError = new MastraError(\n {\n id: 'LANCE_STORE_GET_MESSAGES_PAGINATED_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n threadId,\n resourceId: resourceId ?? '',\n },\n },\n error,\n );\n this.logger?.trackException?.(mastraError);\n this.logger?.error?.(mastraError.toString());\n return { messages: [], total: 0, page, perPage, hasMore: false };\n }\n }\n\n /**\n * Parse message data from LanceDB record format to MastraMessageV2 format\n */\n private parseMessageData(data: any): MastraMessageV2 {\n const { thread_id, ...rest } = data;\n return {\n ...rest,\n threadId: thread_id,\n content:\n typeof data.content === 'string'\n ? (() => {\n try {\n return JSON.parse(data.content);\n } catch {\n return data.content;\n }\n })()\n : data.content,\n createdAt: new Date(data.createdAt),\n updatedAt: new Date(data.updatedAt),\n } as MastraMessageV2;\n }\n\n async updateMessages(args: {\n messages: Partial<Omit<MastraMessageV2, 'createdAt'>> &\n {\n id: string;\n content?: { metadata?: MastraMessageContentV2['metadata']; content?: MastraMessageContentV2['content'] };\n }[];\n }): Promise<MastraMessageV2[]> {\n const { messages } = args;\n this.logger.debug('Updating messages', { count: messages.length });\n\n if (!messages.length) {\n return [];\n }\n\n const updatedMessages: MastraMessageV2[] = [];\n const affectedThreadIds = new Set<string>();\n\n try {\n for (const updateData of messages) {\n const { id, ...updates } = updateData;\n\n // Get the existing message\n const existingMessage = await this.operations.load({ tableName: TABLE_MESSAGES, keys: { id } });\n if (!existingMessage) {\n this.logger.warn('Message not found for update', { id });\n continue;\n }\n\n const existingMsg = this.parseMessageData(existingMessage);\n const originalThreadId = existingMsg.threadId;\n affectedThreadIds.add(originalThreadId!);\n\n // Prepare the update payload\n const updatePayload: any = {};\n\n // Handle basic field updates\n if ('role' in updates && updates.role !== undefined) updatePayload.role = updates.role;\n if ('type' in updates && updates.type !== undefined) updatePayload.type = updates.type;\n if ('resourceId' in updates && updates.resourceId !== undefined) updatePayload.resourceId = updates.resourceId;\n if ('threadId' in updates && updates.threadId !== undefined && updates.threadId !== null) {\n updatePayload.thread_id = updates.threadId;\n affectedThreadIds.add(updates.threadId as string);\n }\n\n // Handle content updates\n if (updates.content) {\n const existingContent = existingMsg.content;\n let newContent = { ...existingContent };\n\n // Deep merge metadata if provided\n if (updates.content.metadata !== undefined) {\n newContent.metadata = {\n ...(existingContent.metadata || {}),\n ...(updates.content.metadata || {}),\n };\n }\n\n // Update content string if provided\n if (updates.content.content !== undefined) {\n newContent.content = updates.content.content;\n }\n\n // Update parts if provided (only if it exists in the content type)\n if ('parts' in updates.content && updates.content.parts !== undefined) {\n (newContent as any).parts = updates.content.parts;\n }\n\n updatePayload.content = JSON.stringify(newContent);\n }\n\n // Update the message using merge insert\n await this.operations.insert({ tableName: TABLE_MESSAGES, record: { id, ...updatePayload } });\n\n // Get the updated message\n const updatedMessage = await this.operations.load({ tableName: TABLE_MESSAGES, keys: { id } });\n if (updatedMessage) {\n updatedMessages.push(this.parseMessageData(updatedMessage));\n }\n }\n\n // Update timestamps for all affected threads\n for (const threadId of affectedThreadIds) {\n await this.operations.insert({\n tableName: TABLE_THREADS,\n record: { id: threadId, updatedAt: Date.now() },\n });\n }\n\n return updatedMessages;\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORE_UPDATE_MESSAGES_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { count: messages.length },\n },\n error,\n );\n }\n }\n\n async getResourceById({ resourceId }: { resourceId: string }): Promise<StorageResourceType | null> {\n try {\n const resource = await this.operations.load({ tableName: TABLE_RESOURCES, keys: { id: resourceId } });\n\n if (!resource) {\n return null;\n }\n\n // Handle date conversion - LanceDB stores timestamps as numbers\n let createdAt: Date;\n let updatedAt: Date;\n\n // Convert ISO strings back to Date objects with error handling\n try {\n // If createdAt is already a Date object, use it directly\n if (resource.createdAt instanceof Date) {\n createdAt = resource.createdAt;\n } else if (typeof resource.createdAt === 'string') {\n // If it's an ISO string, parse it\n createdAt = new Date(resource.createdAt);\n } else if (typeof resource.createdAt === 'number') {\n // If it's a timestamp, convert it to Date\n createdAt = new Date(resource.createdAt);\n } else {\n // If it's null or undefined, use current date\n createdAt = new Date();\n }\n if (isNaN(createdAt.getTime())) {\n createdAt = new Date(); // Fallback to current date if invalid\n }\n } catch {\n createdAt = new Date(); // Fallback to current date if conversion fails\n }\n\n try {\n // If updatedAt is already a Date object, use it directly\n if (resource.updatedAt instanceof Date) {\n updatedAt = resource.updatedAt;\n } else if (typeof resource.updatedAt === 'string') {\n // If it's an ISO string, parse it\n updatedAt = new Date(resource.updatedAt);\n } else if (typeof resource.updatedAt === 'number') {\n // If it's a timestamp, convert it to Date\n updatedAt = new Date(resource.updatedAt);\n } else {\n // If it's null or undefined, use current date\n updatedAt = new Date();\n }\n if (isNaN(updatedAt.getTime())) {\n updatedAt = new Date(); // Fallback to current date if invalid\n }\n } catch {\n updatedAt = new Date(); // Fallback to current date if conversion fails\n }\n\n // Handle workingMemory - return undefined for null/undefined, empty string for empty string\n let workingMemory = resource.workingMemory;\n if (workingMemory === null || workingMemory === undefined) {\n workingMemory = undefined;\n } else if (workingMemory === '') {\n workingMemory = ''; // Return empty string for empty strings to match test expectations\n } else if (typeof workingMemory === 'object') {\n workingMemory = JSON.stringify(workingMemory);\n }\n\n // Handle metadata - return undefined for empty strings, parse JSON safely\n let metadata = resource.metadata;\n if (metadata === '' || metadata === null || metadata === undefined) {\n metadata = undefined;\n } else if (typeof metadata === 'string') {\n try {\n metadata = JSON.parse(metadata);\n } catch {\n // If JSON parsing fails, return the original string\n metadata = metadata;\n }\n }\n\n return {\n ...resource,\n createdAt,\n updatedAt,\n workingMemory,\n metadata,\n } as StorageResourceType;\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORE_GET_RESOURCE_BY_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async saveResource({ resource }: { resource: StorageResourceType }): Promise<StorageResourceType> {\n try {\n const record = {\n ...resource,\n metadata: resource.metadata ? JSON.stringify(resource.metadata) : '',\n createdAt: resource.createdAt.getTime(), // Store as timestamp (milliseconds)\n updatedAt: resource.updatedAt.getTime(), // Store as timestamp (milliseconds)\n };\n\n const table = await this.client.openTable(TABLE_RESOURCES);\n await table.add([record], { mode: 'append' });\n\n return resource;\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORE_SAVE_RESOURCE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async updateResource({\n resourceId,\n workingMemory,\n metadata,\n }: {\n resourceId: string;\n workingMemory?: string;\n metadata?: Record<string, unknown>;\n }): Promise<StorageResourceType> {\n const maxRetries = 3;\n\n for (let attempt = 0; attempt < maxRetries; attempt++) {\n try {\n const existingResource = await this.getResourceById({ resourceId });\n\n if (!existingResource) {\n // Create new resource if it doesn't exist\n const newResource: StorageResourceType = {\n id: resourceId,\n workingMemory,\n metadata: metadata || {},\n createdAt: new Date(),\n updatedAt: new Date(),\n };\n return this.saveResource({ resource: newResource });\n }\n\n const updatedResource = {\n ...existingResource,\n workingMemory: workingMemory !== undefined ? workingMemory : existingResource.workingMemory,\n metadata: {\n ...existingResource.metadata,\n ...metadata,\n },\n updatedAt: new Date(),\n };\n\n const record = {\n id: resourceId,\n workingMemory: updatedResource.workingMemory || '',\n metadata: updatedResource.metadata ? JSON.stringify(updatedResource.metadata) : '',\n updatedAt: updatedResource.updatedAt.getTime(), // Store as timestamp (milliseconds)\n };\n\n const table = await this.client.openTable(TABLE_RESOURCES);\n await table.mergeInsert('id').whenMatchedUpdateAll().whenNotMatchedInsertAll().execute([record]);\n\n return updatedResource;\n } catch (error: any) {\n if (error.message?.includes('Commit conflict') && attempt < maxRetries - 1) {\n // Wait with exponential backoff before retrying\n const delay = Math.pow(2, attempt) * 10; // 10ms, 20ms, 40ms\n await new Promise(resolve => setTimeout(resolve, delay));\n continue;\n }\n\n // If it's not a commit conflict or we've exhausted retries, throw the error\n throw new MastraError(\n {\n id: 'LANCE_STORE_UPDATE_RESOURCE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n // This should never be reached, but TypeScript requires it\n throw new Error('Unexpected end of retry loop');\n }\n}\n","import type { Connection } from '@lancedb/lancedb';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { StoreOperations } from '@mastra/core/storage';\nimport type { TABLE_NAMES, StorageColumn } from '@mastra/core/storage';\nimport { Utf8, Int32, Float32, Binary, Schema, Field, Float64 } from 'apache-arrow';\nimport type { DataType } from 'apache-arrow';\nimport { getPrimaryKeys, getTableSchema, processResultWithTypeConversion, validateKeyTypes } from '../utils';\n\nexport class StoreOperationsLance extends StoreOperations {\n client: Connection;\n constructor({ client }: { client: Connection }) {\n super();\n this.client = client;\n }\n\n protected getDefaultValue(type: StorageColumn['type']): string {\n switch (type) {\n case 'text':\n return \"''\";\n case 'timestamp':\n return 'CURRENT_TIMESTAMP';\n case 'integer':\n case 'bigint':\n return '0';\n case 'jsonb':\n return \"'{}'\";\n case 'uuid':\n return \"''\";\n default:\n return super.getDefaultValue(type);\n }\n }\n\n async hasColumn(tableName: TABLE_NAMES, columnName: string): Promise<boolean> {\n const table = await this.client.openTable(tableName);\n const schema = await table.schema();\n return schema.fields.some(field => field.name === columnName);\n }\n\n private translateSchema(schema: Record<string, StorageColumn>): Schema {\n const fields = Object.entries(schema).map(([name, column]) => {\n // Convert string type to Arrow DataType\n let arrowType: DataType;\n switch (column.type.toLowerCase()) {\n case 'text':\n case 'uuid':\n arrowType = new Utf8();\n break;\n case 'int':\n case 'integer':\n arrowType = new Int32();\n break;\n case 'bigint':\n arrowType = new Float64();\n break;\n case 'float':\n arrowType = new Float32();\n break;\n case 'jsonb':\n case 'json':\n arrowType = new Utf8();\n break;\n case 'binary':\n arrowType = new Binary();\n break;\n case 'timestamp':\n arrowType = new Float64();\n break;\n default:\n // Default to string for unknown types\n arrowType = new Utf8();\n }\n\n // Create a field with the appropriate arrow type\n return new Field(name, arrowType, column.nullable ?? true);\n });\n\n return new Schema(fields);\n }\n\n async createTable({\n tableName,\n schema,\n }: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n }): Promise<void> {\n try {\n if (!this.client) {\n throw new Error('LanceDB client not initialized. Call LanceStorage.create() first.');\n }\n if (!tableName) {\n throw new Error('tableName is required for createTable.');\n }\n if (!schema) {\n throw new Error('schema is required for createTable.');\n }\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_STORAGE_CREATE_TABLE_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { tableName },\n },\n error,\n );\n }\n\n try {\n const arrowSchema = this.translateSchema(schema);\n await this.client.createEmptyTable(tableName, arrowSchema);\n } catch (error: any) {\n if (error.message?.includes('already exists')) {\n this.logger.debug(`Table '${tableName}' already exists, skipping create`);\n return;\n }\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_STORAGE_CREATE_TABLE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n\n async dropTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n try {\n if (!this.client) {\n throw new Error('LanceDB client not initialized. Call LanceStorage.create() first.');\n }\n if (!tableName) {\n throw new Error('tableName is required for dropTable.');\n }\n } catch (validationError: any) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_STORAGE_DROP_TABLE_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: validationError.message,\n details: { tableName },\n },\n validationError,\n );\n }\n\n try {\n await this.client.dropTable(tableName);\n } catch (error: any) {\n if (error.toString().includes('was not found') || error.message?.includes('Table not found')) {\n this.logger.debug(`Table '${tableName}' does not exist, skipping drop`);\n return;\n }\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_STORAGE_DROP_TABLE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n\n async alterTable({\n tableName,\n schema,\n ifNotExists,\n }: {\n tableName: string;\n schema: Record<string, StorageColumn>;\n ifNotExists: string[];\n }): Promise<void> {\n try {\n if (!this.client) {\n throw new Error('LanceDB client not initialized. Call LanceStorage.create() first.');\n }\n if (!tableName) {\n throw new Error('tableName is required for alterTable.');\n }\n if (!schema) {\n throw new Error('schema is required for alterTable.');\n }\n if (!ifNotExists || ifNotExists.length === 0) {\n this.logger.debug('No columns specified to add in alterTable, skipping.');\n return;\n }\n } catch (validationError: any) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_STORAGE_ALTER_TABLE_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: validationError.message,\n details: { tableName },\n },\n validationError,\n );\n }\n\n try {\n const table = await this.client.openTable(tableName);\n const currentSchema = await table.schema();\n const existingFields = new Set(currentSchema.fields.map((f: any) => f.name));\n\n const typeMap: Record<string, string> = {\n text: 'string',\n integer: 'int',\n bigint: 'bigint',\n timestamp: 'timestamp',\n jsonb: 'string',\n uuid: 'string',\n };\n\n // Find columns to add\n const columnsToAdd = ifNotExists\n .filter(col => schema[col] && !existingFields.has(col))\n .map(col => {\n const colDef = schema[col];\n return {\n name: col,\n valueSql: colDef?.nullable\n ? `cast(NULL as ${typeMap[colDef.type ?? 'text']})`\n : `cast(${this.getDefaultValue(colDef?.type ?? 'text')} as ${typeMap[colDef?.type ?? 'text']})`,\n };\n });\n\n if (columnsToAdd.length > 0) {\n await table.addColumns(columnsToAdd);\n this.logger?.info?.(`Added columns [${columnsToAdd.map(c => c.name).join(', ')}] to table ${tableName}`);\n }\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_STORAGE_ALTER_TABLE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n\n async clearTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n try {\n if (!this.client) {\n throw new Error('LanceDB client not initialized. Call LanceStorage.create() first.');\n }\n if (!tableName) {\n throw new Error('tableName is required for clearTable.');\n }\n } catch (validationError: any) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_STORAGE_CLEAR_TABLE_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: validationError.message,\n details: { tableName },\n },\n validationError,\n );\n }\n\n try {\n const table = await this.client.openTable(tableName);\n\n // delete function always takes a predicate as an argument, so we use '1=1' to delete all records because it is always true.\n await table.delete('1=1');\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_STORAGE_CLEAR_TABLE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n\n async insert({ tableName, record }: { tableName: string; record: Record<string, any> }): Promise<void> {\n try {\n if (!this.client) {\n throw new Error('LanceDB client not initialized. Call LanceStorage.create() first.');\n }\n if (!tableName) {\n throw new Error('tableName is required for insert.');\n }\n if (!record || Object.keys(record).length === 0) {\n throw new Error('record is required and cannot be empty for insert.');\n }\n } catch (validationError: any) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_STORAGE_INSERT_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: validationError.message,\n details: { tableName },\n },\n validationError,\n );\n }\n\n try {\n const table = await this.client.openTable(tableName);\n\n const primaryId = getPrimaryKeys(tableName as TABLE_NAMES);\n\n const processedRecord = { ...record };\n\n for (const key in processedRecord) {\n if (\n processedRecord[key] !== null &&\n typeof processedRecord[key] === 'object' &&\n !(processedRecord[key] instanceof Date)\n ) {\n this.logger.debug('Converting object to JSON string: ', processedRecord[key]);\n processedRecord[key] = JSON.stringify(processedRecord[key]);\n }\n }\n console.info(await table.schema());\n\n await table.mergeInsert(primaryId).whenMatchedUpdateAll().whenNotMatchedInsertAll().execute([processedRecord]);\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_STORAGE_INSERT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n\n async batchInsert({ tableName, records }: { tableName: string; records: Record<string, any>[] }): Promise<void> {\n try {\n if (!this.client) {\n throw new Error('LanceDB client not initialized. Call LanceStorage.create() first.');\n }\n if (!tableName) {\n throw new Error('tableName is required for batchInsert.');\n }\n if (!records || records.length === 0) {\n throw new Error('records array is required and cannot be empty for batchInsert.');\n }\n } catch (validationError: any) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_STORAGE_BATCH_INSERT_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: validationError.message,\n details: { tableName },\n },\n validationError,\n );\n }\n\n try {\n const table = await this.client.openTable(tableName);\n\n const primaryId = getPrimaryKeys(tableName as TABLE_NAMES);\n\n const processedRecords = records.map(record => {\n const processedRecord = { ...record };\n\n // Convert values based on schema type\n for (const key in processedRecord) {\n // Skip null/undefined values\n if (processedRecord[key] == null) continue;\n\n if (\n processedRecord[key] !== null &&\n typeof processedRecord[key] === 'object' &&\n !(processedRecord[key] instanceof Date)\n ) {\n processedRecord[key] = JSON.stringify(processedRecord[key]);\n }\n }\n\n return processedRecord;\n });\n\n await table.mergeInsert(primaryId).whenMatchedUpdateAll().whenNotMatchedInsertAll().execute(processedRecords);\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_STORAGE_BATCH_INSERT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n\n async load({ tableName, keys }: { tableName: TABLE_NAMES; keys: Record<string, any> }): Promise<any> {\n try {\n if (!this.client) {\n throw new Error('LanceDB client not initialized. Call LanceStorage.create() first.');\n }\n if (!tableName) {\n throw new Error('tableName is required for load.');\n }\n if (!keys || Object.keys(keys).length === 0) {\n throw new Error('keys are required and cannot be empty for load.');\n }\n } catch (validationError: any) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_STORAGE_LOAD_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: validationError.message,\n details: { tableName },\n },\n validationError,\n );\n }\n\n try {\n const table = await this.client.openTable(tableName);\n const tableSchema = await getTableSchema({ tableName, client: this.client });\n const query = table.query();\n\n // Build filter condition with 'and' between all conditions\n if (Object.keys(keys).length > 0) {\n // Validate key types against schema\n validateKeyTypes(keys, tableSchema);\n\n const filterConditions = Object.entries(keys)\n .map(([key, value]) => {\n // Check if key is in camelCase and wrap it in backticks if it is\n const isCamelCase = /^[a-z][a-zA-Z]*$/.test(key) && /[A-Z]/.test(key);\n const quotedKey = isCamelCase ? `\\`${key}\\`` : key;\n\n // Handle different types appropriately\n if (typeof value === 'string') {\n return `${quotedKey} = '${value}'`;\n } else if (value === null) {\n return `${quotedKey} IS NULL`;\n } else {\n // For numbers, booleans, etc.\n return `${quotedKey} = ${value}`;\n }\n })\n .join(' AND ');\n\n this.logger.debug('where clause generated: ' + filterConditions);\n query.where(filterConditions);\n }\n\n const result = await query.limit(1).toArray();\n\n if (result.length === 0) {\n this.logger.debug('No record found');\n return null;\n }\n // Process the result with type conversions\n return processResultWithTypeConversion(result[0], tableSchema);\n } catch (error: any) {\n // If it's already a MastraError (e.g. from validateKeyTypes if we change it later), rethrow\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_STORAGE_LOAD_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName, keyCount: Object.keys(keys).length, firstKey: Object.keys(keys)[0] ?? '' },\n },\n error,\n );\n }\n }\n}\n","import type { Connection } from '@lancedb/lancedb';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport type { ScoreRowData, ScoringSource, ValidatedSaveScorePayload } from '@mastra/core/scores';\nimport { saveScorePayloadSchema } from '@mastra/core/scores';\nimport { ScoresStorage, TABLE_SCORERS } from '@mastra/core/storage';\nimport type { PaginationInfo, StoragePagination } from '@mastra/core/storage';\nimport { getTableSchema, processResultWithTypeConversion } from '../utils';\n\nexport class StoreScoresLance extends ScoresStorage {\n private client: Connection;\n constructor({ client }: { client: Connection }) {\n super();\n this.client = client;\n }\n\n async saveScore(score: ScoreRowData): Promise<{ score: ScoreRowData }> {\n let validatedScore: ValidatedSaveScorePayload;\n try {\n validatedScore = saveScorePayloadSchema.parse(score);\n } catch (error) {\n throw new MastraError(\n {\n id: 'LANCE_STORAGE_SAVE_SCORE_FAILED',\n text: 'Failed to save score in LanceStorage',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n try {\n const id = crypto.randomUUID();\n const table = await this.client.openTable(TABLE_SCORERS);\n // Fetch schema fields for mastra_scorers\n const schema = await getTableSchema({ tableName: TABLE_SCORERS, client: this.client });\n const allowedFields = new Set(schema.fields.map((f: any) => f.name));\n // Filter out fields not in schema\n const filteredScore: Record<string, any> = {};\n (Object.keys(validatedScore) as (keyof ScoreRowData)[]).forEach(key => {\n if (allowedFields.has(key)) {\n filteredScore[key] = score[key];\n }\n });\n // Convert any object fields to JSON strings for storage\n for (const key in filteredScore) {\n if (\n filteredScore[key] !== null &&\n typeof filteredScore[key] === 'object' &&\n !(filteredScore[key] instanceof Date)\n ) {\n filteredScore[key] = JSON.stringify(filteredScore[key]);\n }\n }\n\n filteredScore.createdAt = new Date();\n filteredScore.updatedAt = new Date();\n\n filteredScore.id = id;\n await table.add([filteredScore], { mode: 'append' });\n return { score };\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORAGE_SAVE_SCORE_FAILED',\n text: 'Failed to save score in LanceStorage',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { error: error?.message },\n },\n error,\n );\n }\n }\n\n async getScoreById({ id }: { id: string }): Promise<ScoreRowData | null> {\n try {\n const table = await this.client.openTable(TABLE_SCORERS);\n\n const query = table.query().where(`id = '${id}'`).limit(1);\n\n const records = await query.toArray();\n\n if (records.length === 0) return null;\n const schema = await getTableSchema({ tableName: TABLE_SCORERS, client: this.client });\n return processResultWithTypeConversion(records[0], schema) as ScoreRowData;\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORAGE_GET_SCORE_BY_ID_FAILED',\n text: 'Failed to get score by id in LanceStorage',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { error: error?.message },\n },\n error,\n );\n }\n }\n\n async getScoresByScorerId({\n scorerId,\n pagination,\n entityId,\n entityType,\n source,\n }: {\n scorerId: string;\n pagination: StoragePagination;\n entityId?: string;\n entityType?: string;\n source?: ScoringSource;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n try {\n const table = await this.client.openTable(TABLE_SCORERS);\n // Use zero-based pagination (default page = 0)\n const { page = 0, perPage = 10 } = pagination || {};\n const offset = page * perPage;\n\n let query = table.query().where(`\\`scorerId\\` = '${scorerId}'`);\n\n if (source) {\n query = query.where(`\\`source\\` = '${source}'`);\n }\n\n if (entityId) {\n query = query.where(`\\`entityId\\` = '${entityId}'`);\n }\n if (entityType) {\n query = query.where(`\\`entityType\\` = '${entityType}'`);\n }\n\n query = query.limit(perPage);\n if (offset > 0) query.offset(offset);\n const records = await query.toArray();\n const schema = await getTableSchema({ tableName: TABLE_SCORERS, client: this.client });\n const scores = processResultWithTypeConversion(records, schema) as ScoreRowData[];\n\n let totalQuery = table.query().where(`\\`scorerId\\` = '${scorerId}'`);\n if (source) {\n totalQuery = totalQuery.where(`\\`source\\` = '${source}'`);\n }\n const allRecords = await totalQuery.toArray();\n const total = allRecords.length;\n\n return {\n pagination: {\n page,\n perPage,\n total,\n hasMore: offset + scores.length < total,\n },\n scores,\n };\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORAGE_GET_SCORES_BY_SCORER_ID_FAILED',\n text: 'Failed to get scores by scorerId in LanceStorage',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { error: error?.message },\n },\n error,\n );\n }\n }\n\n async getScoresByRunId({\n runId,\n pagination,\n }: {\n runId: string;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n try {\n const table = await this.client.openTable(TABLE_SCORERS);\n const { page = 0, perPage = 10 } = pagination || {};\n const offset = page * perPage;\n // Query for scores with the given runId\n const query = table.query().where(`\\`runId\\` = '${runId}'`).limit(perPage);\n if (offset > 0) query.offset(offset);\n const records = await query.toArray();\n const schema = await getTableSchema({ tableName: TABLE_SCORERS, client: this.client });\n const scores = processResultWithTypeConversion(records, schema) as ScoreRowData[];\n // Get total count for pagination\n const allRecords = await table.query().where(`\\`runId\\` = '${runId}'`).toArray();\n const total = allRecords.length;\n return {\n pagination: {\n page,\n perPage,\n total,\n hasMore: offset + scores.length < total,\n },\n scores,\n };\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORAGE_GET_SCORES_BY_RUN_ID_FAILED',\n text: 'Failed to get scores by runId in LanceStorage',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { error: error?.message },\n },\n error,\n );\n }\n }\n\n async getScoresByEntityId({\n entityId,\n entityType,\n pagination,\n }: {\n pagination: StoragePagination;\n entityId: string;\n entityType: string;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n try {\n const table = await this.client.openTable(TABLE_SCORERS);\n const { page = 0, perPage = 10 } = pagination || {};\n const offset = page * perPage;\n // Query for scores with the given entityId and entityType\n const query = table\n .query()\n .where(`\\`entityId\\` = '${entityId}' AND \\`entityType\\` = '${entityType}'`)\n .limit(perPage);\n if (offset > 0) query.offset(offset);\n const records = await query.toArray();\n const schema = await getTableSchema({ tableName: TABLE_SCORERS, client: this.client });\n const scores = processResultWithTypeConversion(records, schema) as ScoreRowData[];\n // Get total count for pagination\n const allRecords = await table\n .query()\n .where(`\\`entityId\\` = '${entityId}' AND \\`entityType\\` = '${entityType}'`)\n .toArray();\n const total = allRecords.length;\n return {\n pagination: {\n page,\n perPage,\n total,\n hasMore: offset + scores.length < total,\n },\n scores,\n };\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORAGE_GET_SCORES_BY_ENTITY_ID_FAILED',\n text: 'Failed to get scores by entityId and entityType in LanceStorage',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { error: error?.message },\n },\n error,\n );\n }\n }\n\n async getScoresBySpan({\n traceId,\n spanId,\n pagination,\n }: {\n traceId: string;\n spanId: string;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n try {\n const table = await this.client.openTable(TABLE_SCORERS);\n const { page = 0, perPage = 10 } = pagination || {};\n const offset = page * perPage;\n // Query for scores with the given traceId and spanId\n const query = table.query().where(`\\`traceId\\` = '${traceId}' AND \\`spanId\\` = '${spanId}'`).limit(perPage);\n if (offset > 0) query.offset(offset);\n const records = await query.toArray();\n const schema = await getTableSchema({ tableName: TABLE_SCORERS, client: this.client });\n const scores = processResultWithTypeConversion(records, schema) as ScoreRowData[];\n\n const allRecords = await table.query().where(`\\`traceId\\` = '${traceId}' AND \\`spanId\\` = '${spanId}'`).toArray();\n const total = allRecords.length;\n\n return {\n pagination: {\n page,\n perPage,\n total,\n hasMore: offset + scores.length < total,\n },\n scores,\n };\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORAGE_GET_SCORES_BY_SPAN_FAILED',\n text: 'Failed to get scores by traceId and spanId in LanceStorage',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { error: error?.message },\n },\n error,\n );\n }\n }\n}\n","import type { Connection } from '@lancedb/lancedb';\nimport { MastraError, ErrorDomain, ErrorCategory } from '@mastra/core/error';\nimport type { TraceType } from '@mastra/core/memory';\nimport { TABLE_TRACES, TracesStorage } from '@mastra/core/storage';\nimport type { PaginationInfo, StorageGetTracesPaginatedArg } from '@mastra/core/storage';\nimport type { Trace } from '@mastra/core/telemetry';\nimport type { StoreOperationsLance } from '../operations';\n\nexport class StoreTracesLance extends TracesStorage {\n private client: Connection;\n private operations: StoreOperationsLance;\n constructor({ client, operations }: { client: Connection; operations: StoreOperationsLance }) {\n super();\n this.client = client;\n this.operations = operations;\n }\n\n async saveTrace({ trace }: { trace: TraceType }): Promise<TraceType> {\n try {\n const table = await this.client.openTable(TABLE_TRACES);\n const record = {\n ...trace,\n attributes: JSON.stringify(trace.attributes),\n status: JSON.stringify(trace.status),\n events: JSON.stringify(trace.events),\n links: JSON.stringify(trace.links),\n other: JSON.stringify(trace.other),\n };\n await table.add([record], { mode: 'append' });\n return trace;\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORE_SAVE_TRACE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getTraceById({ traceId }: { traceId: string }): Promise<TraceType> {\n try {\n const table = await this.client.openTable(TABLE_TRACES);\n const query = table.query().where(`id = '${traceId}'`);\n const records = await query.toArray();\n return records[0] as TraceType;\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORE_GET_TRACE_BY_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getTraces({\n name,\n scope,\n page = 1,\n perPage = 10,\n attributes,\n }: {\n name?: string;\n scope?: string;\n page: number;\n perPage: number;\n attributes?: Record<string, string>;\n }): Promise<Trace[]> {\n try {\n const table = await this.client.openTable(TABLE_TRACES);\n const query = table.query();\n if (name) {\n query.where(`name = '${name}'`);\n }\n if (scope) {\n query.where(`scope = '${scope}'`);\n }\n if (attributes) {\n query.where(`attributes = '${JSON.stringify(attributes)}'`);\n }\n // Calculate offset based on page and perPage\n const offset = (page - 1) * perPage;\n query.limit(perPage);\n if (offset > 0) {\n query.offset(offset);\n }\n const records = await query.toArray();\n return records.map(record => {\n const processed = {\n ...record,\n attributes: record.attributes ? JSON.parse(record.attributes) : {},\n status: record.status ? JSON.parse(record.status) : {},\n events: record.events ? JSON.parse(record.events) : [],\n links: record.links ? JSON.parse(record.links) : [],\n other: record.other ? JSON.parse(record.other) : {},\n startTime: new Date(record.startTime),\n endTime: new Date(record.endTime),\n createdAt: new Date(record.createdAt),\n };\n if (processed.parentSpanId === null || processed.parentSpanId === undefined) {\n processed.parentSpanId = '';\n } else {\n processed.parentSpanId = String(processed.parentSpanId);\n }\n return processed as Trace;\n });\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORE_GET_TRACES_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { name: name ?? '', scope: scope ?? '' },\n },\n error,\n );\n }\n }\n\n async getTracesPaginated(args: StorageGetTracesPaginatedArg): Promise<PaginationInfo & { traces: Trace[] }> {\n try {\n const table = await this.client.openTable(TABLE_TRACES);\n const query = table.query();\n const conditions: string[] = [];\n if (args.name) {\n conditions.push(`name = '${args.name}'`);\n }\n if (args.scope) {\n conditions.push(`scope = '${args.scope}'`);\n }\n if (args.attributes) {\n const attributesStr = JSON.stringify(args.attributes);\n conditions.push(`attributes LIKE '%${attributesStr.replace(/\"/g, '\\\\\"')}%'`);\n }\n if (args.dateRange?.start) {\n conditions.push(`\\`createdAt\\` >= ${args.dateRange.start.getTime()}`);\n }\n if (args.dateRange?.end) {\n conditions.push(`\\`createdAt\\` <= ${args.dateRange.end.getTime()}`);\n }\n if (conditions.length > 0) {\n const whereClause = conditions.join(' AND ');\n query.where(whereClause);\n }\n let total = 0;\n if (conditions.length > 0) {\n const countQuery = table.query().where(conditions.join(' AND '));\n const allRecords = await countQuery.toArray();\n total = allRecords.length;\n } else {\n total = await table.countRows();\n }\n const page = args.page || 0;\n const perPage = args.perPage || 10;\n const offset = page * perPage;\n query.limit(perPage);\n if (offset > 0) {\n query.offset(offset);\n }\n const records = await query.toArray();\n const traces = records.map(record => {\n const processed = {\n ...record,\n attributes: record.attributes ? JSON.parse(record.attributes) : {},\n status: record.status ? JSON.parse(record.status) : {},\n events: record.events ? JSON.parse(record.events) : [],\n links: record.links ? JSON.parse(record.links) : [],\n other: record.other ? JSON.parse(record.other) : {},\n startTime: new Date(record.startTime),\n endTime: new Date(record.endTime),\n createdAt: new Date(record.createdAt),\n };\n if (processed.parentSpanId === null || processed.parentSpanId === undefined) {\n processed.parentSpanId = '';\n } else {\n processed.parentSpanId = String(processed.parentSpanId);\n }\n return processed as Trace;\n });\n return {\n traces,\n total,\n page,\n perPage,\n hasMore: total > (page + 1) * perPage,\n };\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORE_GET_TRACES_PAGINATED_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { name: args.name ?? '', scope: args.scope ?? '' },\n },\n error,\n );\n }\n }\n\n async batchTraceInsert({ records }: { records: Record<string, any>[] }): Promise<void> {\n this.logger.debug('Batch inserting traces', { count: records.length });\n await this.operations.batchInsert({\n tableName: TABLE_TRACES,\n records,\n });\n }\n}\n","import type { Connection } from '@lancedb/lancedb';\nimport type { StepResult, WorkflowRunState, WorkflowRuns } from '@mastra/core';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport type { WorkflowRun } from '@mastra/core/storage';\nimport { ensureDate, TABLE_WORKFLOW_SNAPSHOT, WorkflowsStorage } from '@mastra/core/storage';\n\nfunction parseWorkflowRun(row: any): WorkflowRun {\n let parsedSnapshot: WorkflowRunState | string = row.snapshot;\n if (typeof parsedSnapshot === 'string') {\n try {\n parsedSnapshot = JSON.parse(row.snapshot as string) as WorkflowRunState;\n } catch (e) {\n // If parsing fails, return the raw snapshot string\n console.warn(`Failed to parse snapshot for workflow ${row.workflow_name}: ${e}`);\n }\n }\n\n return {\n workflowName: row.workflow_name,\n runId: row.run_id,\n snapshot: parsedSnapshot,\n createdAt: ensureDate(row.createdAt)!,\n updatedAt: ensureDate(row.updatedAt)!,\n resourceId: row.resourceId,\n };\n}\n\nexport class StoreWorkflowsLance extends WorkflowsStorage {\n client: Connection;\n constructor({ client }: { client: Connection }) {\n super();\n this.client = client;\n }\n\n updateWorkflowResults(\n {\n // workflowName,\n // runId,\n // stepId,\n // result,\n // runtimeContext,\n }: {\n workflowName: string;\n runId: string;\n stepId: string;\n result: StepResult<any, any, any, any>;\n runtimeContext: Record<string, any>;\n },\n ): Promise<Record<string, StepResult<any, any, any, any>>> {\n throw new Error('Method not implemented.');\n }\n updateWorkflowState(\n {\n // workflowName,\n // runId,\n // opts,\n }: {\n workflowName: string;\n runId: string;\n opts: {\n status: string;\n result?: StepResult<any, any, any, any>;\n error?: string;\n suspendedPaths?: Record<string, number[]>;\n waitingPaths?: Record<string, number[]>;\n };\n },\n ): Promise<WorkflowRunState | undefined> {\n throw new Error('Method not implemented.');\n }\n\n async persistWorkflowSnapshot({\n workflowName,\n runId,\n resourceId,\n snapshot,\n }: {\n workflowName: string;\n runId: string;\n resourceId?: string;\n snapshot: WorkflowRunState;\n }): Promise<void> {\n try {\n const table = await this.client.openTable(TABLE_WORKFLOW_SNAPSHOT);\n\n // Try to find the existing record\n const query = table.query().where(`workflow_name = '${workflowName}' AND run_id = '${runId}'`);\n const records = await query.toArray();\n let createdAt: number;\n const now = Date.now();\n\n if (records.length > 0) {\n createdAt = records[0].createdAt ?? now;\n } else {\n createdAt = now;\n }\n\n const record = {\n workflow_name: workflowName,\n run_id: runId,\n resourceId,\n snapshot: JSON.stringify(snapshot),\n createdAt,\n updatedAt: now,\n };\n\n await table\n .mergeInsert(['workflow_name', 'run_id'])\n .whenMatchedUpdateAll()\n .whenNotMatchedInsertAll()\n .execute([record]);\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORE_PERSIST_WORKFLOW_SNAPSHOT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { workflowName, runId },\n },\n error,\n );\n }\n }\n async loadWorkflowSnapshot({\n workflowName,\n runId,\n }: {\n workflowName: string;\n runId: string;\n }): Promise<WorkflowRunState | null> {\n try {\n const table = await this.client.openTable(TABLE_WORKFLOW_SNAPSHOT);\n const query = table.query().where(`workflow_name = '${workflowName}' AND run_id = '${runId}'`);\n const records = await query.toArray();\n return records.length > 0 ? JSON.parse(records[0].snapshot) : null;\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORE_LOAD_WORKFLOW_SNAPSHOT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { workflowName, runId },\n },\n error,\n );\n }\n }\n\n async getWorkflowRunById(args: { runId: string; workflowName?: string }): Promise<{\n workflowName: string;\n runId: string;\n snapshot: any;\n createdAt: Date;\n updatedAt: Date;\n } | null> {\n try {\n const table = await this.client.openTable(TABLE_WORKFLOW_SNAPSHOT);\n let whereClause = `run_id = '${args.runId}'`;\n if (args.workflowName) {\n whereClause += ` AND workflow_name = '${args.workflowName}'`;\n }\n const query = table.query().where(whereClause);\n const records = await query.toArray();\n if (records.length === 0) return null;\n const record = records[0];\n return parseWorkflowRun(record);\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORE_GET_WORKFLOW_RUN_BY_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { runId: args.runId, workflowName: args.workflowName ?? '' },\n },\n error,\n );\n }\n }\n\n async getWorkflowRuns(args?: {\n namespace?: string;\n resourceId?: string;\n workflowName?: string;\n fromDate?: Date;\n toDate?: Date;\n limit?: number;\n offset?: number;\n }): Promise<WorkflowRuns> {\n try {\n const table = await this.client.openTable(TABLE_WORKFLOW_SNAPSHOT);\n\n let query = table.query();\n\n const conditions: string[] = [];\n\n if (args?.workflowName) {\n conditions.push(`workflow_name = '${args.workflowName.replace(/'/g, \"''\")}'`);\n }\n\n if (args?.resourceId) {\n conditions.push(`\\`resourceId\\` = '${args.resourceId}'`);\n }\n\n if (args?.fromDate instanceof Date) {\n conditions.push(`\\`createdAt\\` >= ${args.fromDate.getTime()}`);\n }\n\n if (args?.toDate instanceof Date) {\n conditions.push(`\\`createdAt\\` <= ${args.toDate.getTime()}`);\n }\n\n let total = 0;\n\n // Apply all conditions\n if (conditions.length > 0) {\n query = query.where(conditions.join(' AND '));\n total = await table.countRows(conditions.join(' AND '));\n } else {\n total = await table.countRows();\n }\n\n if (args?.limit) {\n query.limit(args.limit);\n }\n\n if (args?.offset) {\n query.offset(args.offset);\n }\n\n const records = await query.toArray();\n\n return {\n runs: records.map(record => parseWorkflowRun(record)),\n total: total || records.length,\n };\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'LANCE_STORE_GET_WORKFLOW_RUNS_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { namespace: args?.namespace ?? '', workflowName: args?.workflowName ?? '' },\n },\n error,\n );\n }\n }\n}\n","import { connect } from '@lancedb/lancedb';\nimport type { Connection, ConnectionOptions } from '@lancedb/lancedb';\nimport type { MastraMessageContentV2 } from '@mastra/core/agent';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport type { MastraMessageV1, MastraMessageV2, StorageThreadType, TraceType } from '@mastra/core/memory';\nimport type { ScoreRowData, ScoringSource } from '@mastra/core/scores';\nimport { MastraStorage } from '@mastra/core/storage';\nimport type {\n TABLE_NAMES,\n PaginationInfo,\n StorageGetMessagesArg,\n StorageColumn,\n EvalRow,\n WorkflowRuns,\n StoragePagination,\n StorageDomains,\n StorageGetTracesPaginatedArg,\n StorageResourceType,\n} from '@mastra/core/storage';\nimport type { Trace } from '@mastra/core/telemetry';\nimport type { StepResult, WorkflowRunState } from '@mastra/core/workflows';\nimport { StoreLegacyEvalsLance } from './domains/legacy-evals';\nimport { StoreMemoryLance } from './domains/memory';\nimport { StoreOperationsLance } from './domains/operations';\nimport { StoreScoresLance } from './domains/scores';\nimport { StoreTracesLance } from './domains/traces';\nimport { StoreWorkflowsLance } from './domains/workflows';\n\nexport class LanceStorage extends MastraStorage {\n stores: StorageDomains;\n private lanceClient!: Connection;\n /**\n * Creates a new instance of LanceStorage\n * @param uri The URI to connect to LanceDB\n * @param options connection options\n *\n * Usage:\n *\n * Connect to a local database\n * ```ts\n * const store = await LanceStorage.create('/path/to/db');\n * ```\n *\n * Connect to a LanceDB cloud database\n * ```ts\n * const store = await LanceStorage.create('db://host:port');\n * ```\n *\n * Connect to a cloud database\n * ```ts\n * const store = await LanceStorage.create('s3://bucket/db', { storageOptions: { timeout: '60s' } });\n * ```\n */\n public static async create(name: string, uri: string, options?: ConnectionOptions): Promise<LanceStorage> {\n const instance = new LanceStorage(name);\n try {\n instance.lanceClient = await connect(uri, options);\n const operations = new StoreOperationsLance({ client: instance.lanceClient });\n instance.stores = {\n operations: new StoreOperationsLance({ client: instance.lanceClient }),\n workflows: new StoreWorkflowsLance({ client: instance.lanceClient }),\n traces: new StoreTracesLance({ client: instance.lanceClient, operations }),\n scores: new StoreScoresLance({ client: instance.lanceClient }),\n memory: new StoreMemoryLance({ client: instance.lanceClient, operations }),\n legacyEvals: new StoreLegacyEvalsLance({ client: instance.lanceClient }),\n };\n return instance;\n } catch (e: any) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_STORAGE_CONNECT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Failed to connect to LanceDB: ${e.message || e}`,\n details: { uri, optionsProvided: !!options },\n },\n e,\n );\n }\n }\n\n /**\n * @internal\n * Private constructor to enforce using the create factory method\n */\n private constructor(name: string) {\n super({ name });\n const operations = new StoreOperationsLance({ client: this.lanceClient });\n\n this.stores = {\n operations: new StoreOperationsLance({ client: this.lanceClient }),\n workflows: new StoreWorkflowsLance({ client: this.lanceClient }),\n traces: new StoreTracesLance({ client: this.lanceClient, operations }),\n scores: new StoreScoresLance({ client: this.lanceClient }),\n legacyEvals: new StoreLegacyEvalsLance({ client: this.lanceClient }),\n memory: new StoreMemoryLance({ client: this.lanceClient, operations }),\n };\n }\n\n async createTable({\n tableName,\n schema,\n }: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n }): Promise<void> {\n return this.stores.operations.createTable({ tableName, schema });\n }\n\n async dropTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n return this.stores.operations.dropTable({ tableName });\n }\n\n async alterTable({\n tableName,\n schema,\n ifNotExists,\n }: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n ifNotExists: string[];\n }): Promise<void> {\n return this.stores.operations.alterTable({ tableName, schema, ifNotExists });\n }\n\n async clearTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n return this.stores.operations.clearTable({ tableName });\n }\n\n async insert({ tableName, record }: { tableName: TABLE_NAMES; record: Record<string, any> }): Promise<void> {\n return this.stores.operations.insert({ tableName, record });\n }\n\n async batchInsert({ tableName, records }: { tableName: TABLE_NAMES; records: Record<string, any>[] }): Promise<void> {\n return this.stores.operations.batchInsert({ tableName, records });\n }\n\n async load({ tableName, keys }: { tableName: TABLE_NAMES; keys: Record<string, any> }): Promise<any> {\n return this.stores.operations.load({ tableName, keys });\n }\n\n async getThreadById({ threadId }: { threadId: string }): Promise<StorageThreadType | null> {\n return this.stores.memory.getThreadById({ threadId });\n }\n\n async getThreadsByResourceId({ resourceId }: { resourceId: string }): Promise<StorageThreadType[]> {\n return this.stores.memory.getThreadsByResourceId({ resourceId });\n }\n\n /**\n * Saves a thread to the database. This function doesn't overwrite existing threads.\n * @param thread - The thread to save\n * @returns The saved thread\n */\n async saveThread({ thread }: { thread: StorageThreadType }): Promise<StorageThreadType> {\n return this.stores.memory.saveThread({ thread });\n }\n\n async updateThread({\n id,\n title,\n metadata,\n }: {\n id: string;\n title: string;\n metadata: Record<string, unknown>;\n }): Promise<StorageThreadType> {\n return this.stores.memory.updateThread({ id, title, metadata });\n }\n\n async deleteThread({ threadId }: { threadId: string }): Promise<void> {\n return this.stores.memory.deleteThread({ threadId });\n }\n\n public get supports() {\n return {\n selectByIncludeResourceScope: true,\n resourceWorkingMemory: true,\n hasColumn: true,\n createTable: true,\n deleteMessages: false,\n getScoresBySpan: true,\n };\n }\n\n async getResourceById({ resourceId }: { resourceId: string }): Promise<StorageResourceType | null> {\n return this.stores.memory.getResourceById({ resourceId });\n }\n\n async saveResource({ resource }: { resource: StorageResourceType }): Promise<StorageResourceType> {\n return this.stores.memory.saveResource({ resource });\n }\n\n async updateResource({\n resourceId,\n workingMemory,\n metadata,\n }: {\n resourceId: string;\n workingMemory?: string;\n metadata?: Record<string, unknown>;\n }): Promise<StorageResourceType> {\n return this.stores.memory.updateResource({ resourceId, workingMemory, metadata });\n }\n\n /**\n * Processes messages to include context messages based on withPreviousMessages and withNextMessages\n * @param records - The sorted array of records to process\n * @param include - The array of include specifications with context parameters\n * @returns The processed array with context messages included\n */\n private processMessagesWithContext(\n records: any[],\n include: { id: string; withPreviousMessages?: number; withNextMessages?: number }[],\n ): any[] {\n const messagesWithContext = include.filter(item => item.withPreviousMessages || item.withNextMessages);\n\n if (messagesWithContext.length === 0) {\n return records;\n }\n\n // Create a map of message id to index in the sorted array for quick lookup\n const messageIndexMap = new Map<string, number>();\n records.forEach((message, index) => {\n messageIndexMap.set(message.id, index);\n });\n\n // Keep track of additional indices to include\n const additionalIndices = new Set<number>();\n\n for (const item of messagesWithContext) {\n const messageIndex = messageIndexMap.get(item.id);\n\n if (messageIndex !== undefined) {\n // Add previous messages if requested\n if (item.withPreviousMessages) {\n const startIdx = Math.max(0, messageIndex - item.withPreviousMessages);\n for (let i = startIdx; i < messageIndex; i++) {\n additionalIndices.add(i);\n }\n }\n\n // Add next messages if requested\n if (item.withNextMessages) {\n const endIdx = Math.min(records.length - 1, messageIndex + item.withNextMessages);\n for (let i = messageIndex + 1; i <= endIdx; i++) {\n additionalIndices.add(i);\n }\n }\n }\n }\n\n // If we need to include additional messages, create a new set of records\n if (additionalIndices.size === 0) {\n return records;\n }\n\n // Get IDs of the records that matched the original query\n const originalMatchIds = new Set(include.map(item => item.id));\n\n // Create a set of all indices we need to include\n const allIndices = new Set<number>();\n\n // Add indices of originally matched messages\n records.forEach((record, index) => {\n if (originalMatchIds.has(record.id)) {\n allIndices.add(index);\n }\n });\n\n // Add the additional context message indices\n additionalIndices.forEach(index => {\n allIndices.add(index);\n });\n\n // Create a new filtered array with only the required messages\n // while maintaining chronological order\n return Array.from(allIndices)\n .sort((a, b) => a - b)\n .map(index => records[index]);\n }\n\n public async getMessages(args: StorageGetMessagesArg & { format?: 'v1' }): Promise<MastraMessageV1[]>;\n public async getMessages(args: StorageGetMessagesArg & { format: 'v2' }): Promise<MastraMessageV2[]>;\n public async getMessages({\n threadId,\n resourceId,\n selectBy,\n format,\n threadConfig,\n }: StorageGetMessagesArg & { format?: 'v1' | 'v2' }): Promise<MastraMessageV1[] | MastraMessageV2[]> {\n return this.stores.memory.getMessages({ threadId, resourceId, selectBy, format, threadConfig });\n }\n\n async getMessagesById({ messageIds, format }: { messageIds: string[]; format: 'v1' }): Promise<MastraMessageV1[]>;\n async getMessagesById({ messageIds, format }: { messageIds: string[]; format?: 'v2' }): Promise<MastraMessageV2[]>;\n async getMessagesById({\n messageIds,\n format,\n }: {\n messageIds: string[];\n format?: 'v1' | 'v2';\n }): Promise<MastraMessageV1[] | MastraMessageV2[]> {\n return this.stores.memory.getMessagesById({ messageIds, format });\n }\n\n async saveMessages(args: { messages: MastraMessageV1[]; format?: undefined | 'v1' }): Promise<MastraMessageV1[]>;\n async saveMessages(args: { messages: MastraMessageV2[]; format: 'v2' }): Promise<MastraMessageV2[]>;\n async saveMessages(\n args: { messages: MastraMessageV1[]; format?: undefined | 'v1' } | { messages: MastraMessageV2[]; format: 'v2' },\n ): Promise<MastraMessageV2[] | MastraMessageV1[]> {\n return this.stores.memory.saveMessages(args);\n }\n\n async getThreadsByResourceIdPaginated(args: {\n resourceId: string;\n page: number;\n perPage: number;\n }): Promise<PaginationInfo & { threads: StorageThreadType[] }> {\n return this.stores.memory.getThreadsByResourceIdPaginated(args);\n }\n\n async getMessagesPaginated(\n args: StorageGetMessagesArg & { format?: 'v1' | 'v2' },\n ): Promise<PaginationInfo & { messages: MastraMessageV1[] | MastraMessageV2[] }> {\n return this.stores.memory.getMessagesPaginated(args);\n }\n\n async updateMessages(_args: {\n messages: Partial<Omit<MastraMessageV2, 'createdAt'>> &\n {\n id: string;\n content?: { metadata?: MastraMessageContentV2['metadata']; content?: MastraMessageContentV2['content'] };\n }[];\n }): Promise<MastraMessageV2[]> {\n return this.stores.memory.updateMessages(_args);\n }\n\n async getTraceById(args: { traceId: string }): Promise<TraceType> {\n return (this.stores as any).traces.getTraceById(args);\n }\n\n async getTraces(args: {\n name?: string;\n scope?: string;\n page: number;\n perPage: number;\n attributes?: Record<string, string>;\n }): Promise<Trace[]> {\n return (this.stores as any).traces.getTraces(args);\n }\n\n async getTracesPaginated(args: StorageGetTracesPaginatedArg): Promise<PaginationInfo & { traces: Trace[] }> {\n return (this.stores as any).traces.getTracesPaginated(args);\n }\n\n async getEvalsByAgentName(agentName: string, type?: 'test' | 'live'): Promise<EvalRow[]> {\n return this.stores.legacyEvals.getEvalsByAgentName(agentName, type);\n }\n\n async getEvals(options: {\n agentName?: string;\n type?: 'test' | 'live';\n page?: number;\n perPage?: number;\n fromDate?: Date;\n toDate?: Date;\n dateRange?: { start?: Date; end?: Date };\n }): Promise<PaginationInfo & { evals: EvalRow[] }> {\n return this.stores.legacyEvals.getEvals(options);\n }\n\n async getWorkflowRuns(args?: {\n namespace?: string;\n workflowName?: string;\n fromDate?: Date;\n toDate?: Date;\n limit?: number;\n offset?: number;\n }): Promise<WorkflowRuns> {\n return this.stores.workflows.getWorkflowRuns(args);\n }\n\n async getWorkflowRunById(args: { runId: string; workflowName?: string }): Promise<{\n workflowName: string;\n runId: string;\n snapshot: any;\n createdAt: Date;\n updatedAt: Date;\n } | null> {\n return this.stores.workflows.getWorkflowRunById(args);\n }\n\n async updateWorkflowResults({\n workflowName,\n runId,\n stepId,\n result,\n runtimeContext,\n }: {\n workflowName: string;\n runId: string;\n stepId: string;\n result: StepResult<any, any, any, any>;\n runtimeContext: Record<string, any>;\n }): Promise<Record<string, StepResult<any, any, any, any>>> {\n return this.stores.workflows.updateWorkflowResults({ workflowName, runId, stepId, result, runtimeContext });\n }\n\n async updateWorkflowState({\n workflowName,\n runId,\n opts,\n }: {\n workflowName: string;\n runId: string;\n opts: {\n status: string;\n result?: StepResult<any, any, any, any>;\n error?: string;\n suspendedPaths?: Record<string, number[]>;\n waitingPaths?: Record<string, number[]>;\n };\n }): Promise<WorkflowRunState | undefined> {\n return this.stores.workflows.updateWorkflowState({ workflowName, runId, opts });\n }\n\n async persistWorkflowSnapshot({\n workflowName,\n runId,\n resourceId,\n snapshot,\n }: {\n workflowName: string;\n runId: string;\n resourceId?: string;\n snapshot: WorkflowRunState;\n }): Promise<void> {\n return this.stores.workflows.persistWorkflowSnapshot({ workflowName, runId, resourceId, snapshot });\n }\n\n async loadWorkflowSnapshot({\n workflowName,\n runId,\n }: {\n workflowName: string;\n runId: string;\n }): Promise<WorkflowRunState | null> {\n return this.stores.workflows.loadWorkflowSnapshot({ workflowName, runId });\n }\n\n async getScoreById({ id: _id }: { id: string }): Promise<ScoreRowData | null> {\n return this.stores.scores.getScoreById({ id: _id });\n }\n\n async getScoresByScorerId({\n scorerId,\n source,\n entityId,\n entityType,\n pagination,\n }: {\n scorerId: string;\n pagination: StoragePagination;\n source?: ScoringSource;\n entityId?: string;\n entityType?: string;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.stores.scores.getScoresByScorerId({ scorerId, source, pagination, entityId, entityType });\n }\n\n async saveScore(_score: ScoreRowData): Promise<{ score: ScoreRowData }> {\n return this.stores.scores.saveScore(_score);\n }\n\n async getScoresByRunId({\n runId,\n pagination,\n }: {\n runId: string;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.stores.scores.getScoresByRunId({ runId, pagination });\n }\n\n async getScoresByEntityId({\n entityId,\n entityType,\n pagination,\n }: {\n pagination: StoragePagination;\n entityId: string;\n entityType: string;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.stores.scores.getScoresByEntityId({ entityId, entityType, pagination });\n }\n\n async getScoresBySpan({\n traceId,\n spanId,\n pagination,\n }: {\n traceId: string;\n spanId: string;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.stores.scores.getScoresBySpan({ traceId, spanId, pagination });\n }\n}\n","import { BaseFilterTranslator } from '@mastra/core/vector/filter';\nimport type {\n VectorFilter,\n OperatorValueMap,\n LogicalOperatorValueMap,\n BlacklistedRootOperators,\n} from '@mastra/core/vector/filter';\n\ntype LanceOperatorValueMap = OperatorValueMap & {\n $like: string;\n $notLike: string;\n $contains: string;\n};\n\ntype LanceBlacklisted = BlacklistedRootOperators | '$like' | '$notLike' | '$contains';\n\nexport type LanceVectorFilter = VectorFilter<\n keyof LanceOperatorValueMap,\n LanceOperatorValueMap,\n LogicalOperatorValueMap,\n LanceBlacklisted\n>;\n\nexport class LanceFilterTranslator extends BaseFilterTranslator<LanceVectorFilter, string> {\n translate(filter: LanceVectorFilter): string {\n if (!filter || Object.keys(filter).length === 0) {\n return '';\n }\n\n // Check for fields with periods that aren't nested at top level\n if (typeof filter === 'object' && filter !== null) {\n const keys = Object.keys(filter);\n for (const key of keys) {\n if (key.includes('.') && !this.isNormalNestedField(key)) {\n throw new Error(`Field names containing periods (.) are not supported: ${key}`);\n }\n }\n }\n\n return this.processFilter(filter);\n }\n\n private processFilter(filter: unknown, parentPath = ''): string {\n // Handle null case\n if (filter === null) {\n return `${parentPath} IS NULL`;\n }\n\n // Handle Date objects at top level\n if (filter instanceof Date) {\n return `${parentPath} = ${this.formatValue(filter)}`;\n }\n\n // Handle top-level operators\n if (typeof filter === 'object' && filter !== null) {\n const obj = filter as Record<string, unknown>;\n const keys = Object.keys(obj);\n\n // Handle logical operators at top level\n if (keys.length === 1 && this.isOperator(keys[0]!)) {\n const operator = keys[0]!;\n const operatorValue = obj[operator];\n\n if (this.isLogicalOperator(operator)) {\n if (operator === '$and' || operator === '$or') {\n return this.processLogicalOperator(operator, operatorValue as unknown[]);\n }\n throw new Error(BaseFilterTranslator.ErrorMessages.UNSUPPORTED_OPERATOR(operator));\n }\n\n throw new Error(BaseFilterTranslator.ErrorMessages.INVALID_TOP_LEVEL_OPERATOR(operator));\n }\n\n // Check for fields with periods that aren't nested\n for (const key of keys) {\n if (key.includes('.') && !this.isNormalNestedField(key)) {\n throw new Error(`Field names containing periods (.) are not supported: ${key}`);\n }\n }\n\n // Handle multiple fields (implicit AND)\n if (keys.length > 1) {\n const conditions = keys.map(key => {\n const value = obj[key];\n // Check if key is a nested path or a field\n if (this.isNestedObject(value) && !this.isDateObject(value)) {\n return this.processNestedObject(key, value);\n } else {\n return this.processField(key, value);\n }\n });\n return conditions.join(' AND ');\n }\n\n // Handle single field\n if (keys.length === 1) {\n const key = keys[0]!;\n const value = obj[key]!;\n\n if (this.isNestedObject(value) && !this.isDateObject(value)) {\n return this.processNestedObject(key!, value);\n } else {\n return this.processField(key!, value);\n }\n }\n }\n\n return '';\n }\n\n private processLogicalOperator(operator: string, conditions: unknown[]): string {\n if (!Array.isArray(conditions)) {\n throw new Error(`Logical operator ${operator} must have an array value`);\n }\n\n if (conditions.length === 0) {\n return operator === '$and' ? 'true' : 'false';\n }\n\n const sqlOperator = operator === '$and' ? 'AND' : 'OR';\n\n const processedConditions = conditions.map(condition => {\n if (typeof condition !== 'object' || condition === null) {\n throw new Error(BaseFilterTranslator.ErrorMessages.INVALID_LOGICAL_OPERATOR_CONTENT(operator));\n }\n\n // Check if condition is a nested logical operator\n const condObj = condition as Record<string, unknown>;\n const keys = Object.keys(condObj);\n\n if (keys.length === 1 && this.isOperator(keys[0]!)) {\n if (this.isLogicalOperator(keys[0])) {\n return `(${this.processLogicalOperator(keys[0], condObj[keys[0]] as unknown[])})`;\n } else {\n throw new Error(BaseFilterTranslator.ErrorMessages.UNSUPPORTED_OPERATOR(keys[0]));\n }\n }\n\n // Handle multiple fields within a logical condition (implicit AND)\n if (keys.length > 1) {\n return `(${this.processFilter(condition)})`;\n }\n\n return this.processFilter(condition);\n });\n\n return processedConditions.join(` ${sqlOperator} `);\n }\n\n private processNestedObject(path: string, value: unknown): string {\n if (typeof value !== 'object' || value === null) {\n throw new Error(`Expected object for nested path ${path}`);\n }\n\n const obj = value as Record<string, unknown>;\n const keys = Object.keys(obj);\n\n // Handle empty object\n if (keys.length === 0) {\n return `${path} = {}`;\n }\n\n // Handle operators on a field\n if (keys.every(k => this.isOperator(k))) {\n return this.processOperators(path, obj);\n }\n\n // Process each nested field and join with AND\n const conditions = keys.map(key => {\n const nestedPath = key.includes('.')\n ? `${path}.${key}` // Key already contains dots (pre-dotted path)\n : `${path}.${key}`; // Normal nested field\n\n if (this.isNestedObject(obj[key]) && !this.isDateObject(obj[key])) {\n return this.processNestedObject(nestedPath, obj[key]);\n } else {\n return this.processField(nestedPath, obj[key]);\n }\n });\n\n return conditions.join(' AND ');\n }\n\n private processField(field: string, value: unknown): string {\n // Check for illegal field names\n if (field.includes('.') && !this.isNormalNestedField(field)) {\n throw new Error(`Field names containing periods (.) are not supported: ${field}`);\n }\n\n // Escape field name if needed\n const escapedField = this.escapeFieldName(field);\n\n // Handle null value\n if (value === null) {\n return `${escapedField} IS NULL`;\n }\n\n // Handle Date objects properly\n if (value instanceof Date) {\n return `${escapedField} = ${this.formatValue(value)}`;\n }\n\n // Handle arrays (convert to IN)\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return 'false'; // Empty array is usually false in SQL\n }\n const normalizedValues = this.normalizeArrayValues(value);\n return `${escapedField} IN (${this.formatArrayValues(normalizedValues)})`;\n }\n\n // Handle operator objects\n if (this.isOperatorObject(value)) {\n return this.processOperators(field, value as Record<string, unknown>);\n }\n\n // Handle basic values (normalize dates and other special values)\n return `${escapedField} = ${this.formatValue(this.normalizeComparisonValue(value))}`;\n }\n\n private processOperators(field: string, operators: Record<string, unknown>): string {\n const escapedField = this.escapeFieldName(field);\n const operatorKeys = Object.keys(operators);\n\n // Check for logical operators at field level\n if (operatorKeys.some(op => this.isLogicalOperator(op))) {\n const logicalOp = operatorKeys.find(op => this.isLogicalOperator(op)) || '';\n throw new Error(`Unsupported operator: ${logicalOp} cannot be used at field level`);\n }\n\n // Process each operator and join with AND\n return operatorKeys\n .map(op => {\n const value = operators[op];\n\n // Check if this is a supported operator\n if (!this.isFieldOperator(op) && !this.isCustomOperator(op)) {\n throw new Error(BaseFilterTranslator.ErrorMessages.UNSUPPORTED_OPERATOR(op));\n }\n\n switch (op) {\n case '$eq':\n if (value === null) {\n return `${escapedField} IS NULL`;\n }\n return `${escapedField} = ${this.formatValue(this.normalizeComparisonValue(value))}`;\n case '$ne':\n if (value === null) {\n return `${escapedField} IS NOT NULL`;\n }\n return `${escapedField} != ${this.formatValue(this.normalizeComparisonValue(value))}`;\n case '$gt':\n return `${escapedField} > ${this.formatValue(this.normalizeComparisonValue(value))}`;\n case '$gte':\n return `${escapedField} >= ${this.formatValue(this.normalizeComparisonValue(value))}`;\n case '$lt':\n return `${escapedField} < ${this.formatValue(this.normalizeComparisonValue(value))}`;\n case '$lte':\n return `${escapedField} <= ${this.formatValue(this.normalizeComparisonValue(value))}`;\n case '$in':\n if (!Array.isArray(value)) {\n throw new Error(`$in operator requires array value for field: ${field}`);\n }\n if (value.length === 0) {\n return 'false'; // Empty IN is false\n }\n const normalizedValues = this.normalizeArrayValues(value);\n return `${escapedField} IN (${this.formatArrayValues(normalizedValues)})`;\n case '$like':\n return `${escapedField} LIKE ${this.formatValue(value)}`;\n case '$notLike':\n return `${escapedField} NOT LIKE ${this.formatValue(value)}`;\n case '$regex':\n return `regexp_match(${escapedField}, ${this.formatValue(value)})`;\n default:\n throw new Error(BaseFilterTranslator.ErrorMessages.UNSUPPORTED_OPERATOR(op));\n }\n })\n .join(' AND ');\n }\n\n private formatValue(value: unknown): string {\n if (value === null) {\n return 'NULL';\n }\n\n if (typeof value === 'string') {\n // Escape single quotes in SQL strings by doubling them\n return `'${value.replace(/'/g, \"''\")}'`;\n }\n\n if (typeof value === 'number') {\n return value.toString();\n }\n\n if (typeof value === 'boolean') {\n return value ? 'true' : 'false';\n }\n\n if (value instanceof Date) {\n return `timestamp '${value.toISOString()}'`;\n }\n\n if (typeof value === 'object') {\n if (value instanceof Date) {\n return `timestamp '${value.toISOString()}'`;\n }\n return JSON.stringify(value);\n }\n\n return String(value);\n }\n\n private formatArrayValues(array: unknown[]): string {\n return array.map(item => this.formatValue(item)).join(', ');\n }\n\n normalizeArrayValues(array: unknown[]): unknown[] {\n return array.map(item => {\n if (item instanceof Date) {\n return item; // Keep Date objects as is to properly format them later\n }\n return this.normalizeComparisonValue(item);\n });\n }\n\n normalizeComparisonValue(value: unknown): unknown {\n // Date objects should be preserved as is, not converted to strings\n if (value instanceof Date) {\n return value;\n }\n\n return super.normalizeComparisonValue(value);\n }\n\n private isOperatorObject(value: unknown): boolean {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n\n const obj = value as Record<string, unknown>;\n const keys = Object.keys(obj);\n\n return keys.length > 0 && keys.some(key => this.isOperator(key));\n }\n\n private isNestedObject(value: unknown): boolean {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n }\n\n private isNormalNestedField(field: string): boolean {\n // Check if field is a proper nested field name\n const parts = field.split('.');\n // A valid nested field shouldn't have empty parts or start/end with a dot\n return !field.startsWith('.') && !field.endsWith('.') && parts.every(part => part.trim().length > 0);\n }\n\n private escapeFieldName(field: string): string {\n // If field contains special characters or is a SQL keyword, escape with backticks\n if (field.includes(' ') || field.includes('-') || /^[A-Z]+$/.test(field) || this.isSqlKeyword(field)) {\n // For nested fields, escape each part\n if (field.includes('.')) {\n return field\n .split('.')\n .map(part => `\\`${part}\\``)\n .join('.');\n }\n return `\\`${field}\\``;\n }\n\n return field;\n }\n\n private isSqlKeyword(str: string): boolean {\n // Common SQL keywords that might need escaping\n const sqlKeywords = [\n 'SELECT',\n 'FROM',\n 'WHERE',\n 'AND',\n 'OR',\n 'NOT',\n 'INSERT',\n 'UPDATE',\n 'DELETE',\n 'CREATE',\n 'ALTER',\n 'DROP',\n 'TABLE',\n 'VIEW',\n 'INDEX',\n 'JOIN',\n 'INNER',\n 'OUTER',\n 'LEFT',\n 'RIGHT',\n 'FULL',\n 'UNION',\n 'ALL',\n 'DISTINCT',\n 'AS',\n 'ON',\n 'BETWEEN',\n 'LIKE',\n 'IN',\n 'IS',\n 'NULL',\n 'TRUE',\n 'FALSE',\n 'ASC',\n 'DESC',\n 'GROUP',\n 'ORDER',\n 'BY',\n 'HAVING',\n 'LIMIT',\n 'OFFSET',\n 'CASE',\n 'WHEN',\n 'THEN',\n 'ELSE',\n 'END',\n 'CAST',\n 'CUBE',\n ];\n\n return sqlKeywords.includes(str.toUpperCase());\n }\n\n private isDateObject(value: unknown): boolean {\n return value instanceof Date;\n }\n\n /**\n * Override getSupportedOperators to add custom operators for LanceDB\n */\n protected override getSupportedOperators() {\n return {\n ...BaseFilterTranslator.DEFAULT_OPERATORS,\n custom: ['$like', '$notLike', '$regex'],\n };\n }\n}\n","import { connect, Index } from '@lancedb/lancedb';\nimport type { Connection, ConnectionOptions, CreateTableOptions, Table, TableLike } from '@lancedb/lancedb';\n\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport type {\n CreateIndexParams,\n DeleteIndexParams,\n DeleteVectorParams,\n DescribeIndexParams,\n IndexStats,\n QueryResult,\n QueryVectorParams,\n UpdateVectorParams,\n UpsertVectorParams,\n DeleteVectorsParams,\n} from '@mastra/core/vector';\n\nimport { MastraVector } from '@mastra/core/vector';\nimport type { LanceVectorFilter } from './filter';\nimport { LanceFilterTranslator } from './filter';\nimport type { IndexConfig } from './types';\n\ninterface LanceCreateIndexParams extends CreateIndexParams {\n indexConfig?: LanceIndexConfig;\n tableName?: string;\n}\n\ninterface LanceIndexConfig extends IndexConfig {\n numPartitions?: number;\n numSubVectors?: number;\n}\n\ninterface LanceUpsertVectorParams extends UpsertVectorParams {\n tableName: string;\n}\n\ninterface LanceQueryVectorParams extends QueryVectorParams<LanceVectorFilter> {\n tableName: string;\n columns?: string[];\n includeAllColumns?: boolean;\n}\n\nexport class LanceVectorStore extends MastraVector<LanceVectorFilter> {\n private lanceClient!: Connection;\n\n /**\n * Creates a new instance of LanceVectorStore\n * @param uri The URI to connect to LanceDB\n * @param options connection options\n *\n * Usage:\n *\n * Connect to a local database\n * ```ts\n * const store = await LanceVectorStore.create('/path/to/db');\n * ```\n *\n * Connect to a LanceDB cloud database\n * ```ts\n * const store = await LanceVectorStore.create('db://host:port');\n * ```\n *\n * Connect to a cloud database\n * ```ts\n * const store = await LanceVectorStore.create('s3://bucket/db', { storageOptions: { timeout: '60s' } });\n * ```\n */\n public static async create(uri: string, options?: ConnectionOptions): Promise<LanceVectorStore> {\n const instance = new LanceVectorStore();\n try {\n instance.lanceClient = await connect(uri, options);\n return instance;\n } catch (e) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_VECTOR_CONNECT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { uri },\n },\n e,\n );\n }\n }\n\n /**\n * @internal\n * Private constructor to enforce using the create factory method\n */\n private constructor() {\n super();\n }\n\n close() {\n if (this.lanceClient) {\n this.lanceClient.close();\n }\n }\n\n async query({\n tableName,\n queryVector,\n filter,\n includeVector = false,\n topK = 10,\n columns = [],\n includeAllColumns = false,\n }: LanceQueryVectorParams): Promise<QueryResult[]> {\n try {\n if (!this.lanceClient) {\n throw new Error('LanceDB client not initialized. Use LanceVectorStore.create() to create an instance');\n }\n\n if (!tableName) {\n throw new Error('tableName is required');\n }\n\n if (!queryVector) {\n throw new Error('queryVector is required');\n }\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_VECTOR_QUERY_FAILED_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: 'LanceDB client not initialized. Use LanceVectorStore.create() to create an instance',\n details: { tableName },\n },\n error,\n );\n }\n\n try {\n // Open the table\n const table = await this.lanceClient.openTable(tableName);\n\n // Prepare the list of columns to select\n const selectColumns = [...columns];\n if (!selectColumns.includes('id')) {\n selectColumns.push('id');\n }\n\n // Create the query builder\n let query = table.search(queryVector);\n\n // Add filter if provided\n if (filter && Object.keys(filter).length > 0) {\n const whereClause = this.filterTranslator(filter);\n this.logger.debug(`Where clause generated: ${whereClause}`);\n query = query.where(whereClause);\n }\n\n // Apply column selection and limit\n if (!includeAllColumns && selectColumns.length > 0) {\n query = query.select(selectColumns);\n }\n query = query.limit(topK);\n\n // Execute the query\n const results = await query.toArray();\n\n return results.map(result => {\n // Collect all metadata_ prefixed fields\n const flatMetadata: Record<string, any> = {};\n\n // Get all keys from the result object\n Object.keys(result).forEach(key => {\n // Skip reserved keys (id, score, and the vector column)\n if (key !== 'id' && key !== 'score' && key !== 'vector' && key !== '_distance') {\n if (key.startsWith('metadata_')) {\n // Remove the prefix and add to flat metadata\n const metadataKey = key.substring('metadata_'.length);\n flatMetadata[metadataKey] = result[key];\n }\n }\n });\n\n // Reconstruct nested metadata object\n const metadata = this.unflattenObject(flatMetadata);\n\n return {\n id: String(result.id || ''),\n metadata,\n vector:\n includeVector && result.vector\n ? Array.isArray(result.vector)\n ? result.vector\n : Array.from(result.vector as any[])\n : undefined,\n document: result.document,\n score: result._distance,\n };\n });\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_VECTOR_QUERY_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName, includeVector, columnsCount: columns?.length, includeAllColumns },\n },\n error,\n );\n }\n }\n\n private filterTranslator(filter: LanceVectorFilter): string {\n // Add metadata_ prefix to filter keys if they don't already have it\n const processFilterKeys = (filterObj: Record<string, any>): Record<string, any> => {\n const result: Record<string, any> = {};\n\n Object.entries(filterObj).forEach(([key, value]) => {\n // Don't add prefix to logical operators\n if (key === '$or' || key === '$and' || key === '$not' || key === '$in') {\n // For logical operators, process their array contents\n if (Array.isArray(value)) {\n result[key] = value.map(item =>\n typeof item === 'object' && item !== null ? processFilterKeys(item as Record<string, any>) : item,\n );\n } else {\n result[key] = value;\n }\n }\n // Don't add prefix if it already has metadata_ prefix\n else if (key.startsWith('metadata_')) {\n result[key] = value;\n }\n // Add metadata_ prefix to regular field keys\n else {\n // Convert dot notation to underscore notation for nested fields\n if (key.includes('.')) {\n const convertedKey = `metadata_${key.replace(/\\./g, '_')}`;\n result[convertedKey] = value;\n } else {\n result[`metadata_${key}`] = value;\n }\n }\n });\n\n return result;\n };\n\n const prefixedFilter = filter && typeof filter === 'object' ? processFilterKeys(filter as Record<string, any>) : {};\n\n const translator = new LanceFilterTranslator();\n return translator.translate(prefixedFilter);\n }\n\n async upsert({ tableName, vectors, metadata = [], ids = [] }: LanceUpsertVectorParams): Promise<string[]> {\n try {\n if (!this.lanceClient) {\n throw new Error('LanceDB client not initialized. Use LanceVectorStore.create() to create an instance');\n }\n\n if (!tableName) {\n throw new Error('tableName is required');\n }\n\n if (!vectors || !Array.isArray(vectors) || vectors.length === 0) {\n throw new Error('vectors array is required and must not be empty');\n }\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_VECTOR_UPSERT_FAILED_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: 'LanceDB client not initialized. Use LanceVectorStore.create() to create an instance',\n details: { tableName },\n },\n error,\n );\n }\n\n try {\n const tables = await this.lanceClient.tableNames();\n if (!tables.includes(tableName)) {\n throw new Error(`Table ${tableName} does not exist`);\n }\n\n const table = await this.lanceClient.openTable(tableName);\n\n // Generate IDs if not provided\n const vectorIds = ids.length === vectors.length ? ids : vectors.map((_, i) => ids[i] || crypto.randomUUID());\n\n // Create data with metadata fields expanded at the top level\n const data = vectors.map((vector, i) => {\n const id = String(vectorIds[i]);\n const metadataItem = metadata[i] || {};\n\n // Create the base object with id and vector\n const rowData: Record<string, any> = {\n id,\n vector: vector,\n };\n\n // Flatten the metadata object and prefix all keys with 'metadata_'\n if (Object.keys(metadataItem).length > 0) {\n const flattenedMetadata = this.flattenObject(metadataItem, 'metadata');\n // Add all flattened metadata properties to the row data object\n Object.entries(flattenedMetadata).forEach(([key, value]) => {\n rowData[key] = value;\n });\n }\n\n return rowData;\n });\n\n await table.add(data, { mode: 'overwrite' });\n\n return vectorIds;\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_VECTOR_UPSERT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName, vectorCount: vectors.length, metadataCount: metadata.length, idsCount: ids.length },\n },\n error,\n );\n }\n }\n\n /**\n * Flattens a nested object, creating new keys with underscores for nested properties.\n * Example: { metadata: { text: 'test' } } → { metadata_text: 'test' }\n */\n private flattenObject(obj: Record<string, unknown>, prefix = ''): Record<string, unknown> {\n return Object.keys(obj).reduce((acc: Record<string, unknown>, k: string) => {\n const pre = prefix.length ? `${prefix}_` : '';\n if (typeof obj[k] === 'object' && obj[k] !== null && !Array.isArray(obj[k])) {\n Object.assign(acc, this.flattenObject(obj[k] as Record<string, unknown>, pre + k));\n } else {\n acc[pre + k] = obj[k];\n }\n return acc;\n }, {});\n }\n\n async createTable(\n tableName: string,\n data: Record<string, unknown>[] | TableLike,\n options?: Partial<CreateTableOptions>,\n ): Promise<Table> {\n if (!this.lanceClient) {\n throw new MastraError({\n id: 'STORAGE_LANCE_VECTOR_CREATE_TABLE_FAILED_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: 'LanceDB client not initialized. Use LanceVectorStore.create() to create an instance',\n details: { tableName },\n });\n }\n\n // Flatten nested objects if data is an array of records\n if (Array.isArray(data)) {\n data = data.map(record => this.flattenObject(record));\n }\n\n try {\n return await this.lanceClient.createTable(tableName, data, options);\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_VECTOR_CREATE_TABLE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n\n async listTables(): Promise<string[]> {\n if (!this.lanceClient) {\n throw new MastraError({\n id: 'STORAGE_LANCE_VECTOR_LIST_TABLES_FAILED_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: 'LanceDB client not initialized. Use LanceVectorStore.create() to create an instance',\n details: { methodName: 'listTables' },\n });\n }\n try {\n return await this.lanceClient.tableNames();\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_VECTOR_LIST_TABLES_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getTableSchema(tableName: string): Promise<any> {\n if (!this.lanceClient) {\n throw new MastraError({\n id: 'STORAGE_LANCE_VECTOR_GET_TABLE_SCHEMA_FAILED_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: 'LanceDB client not initialized. Use LanceVectorStore.create() to create an instance',\n details: { tableName },\n });\n }\n\n try {\n const table = await this.lanceClient.openTable(tableName);\n return await table.schema();\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_VECTOR_GET_TABLE_SCHEMA_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n\n /**\n * indexName is actually a column name in a table in lanceDB\n */\n async createIndex({\n tableName,\n indexName,\n dimension,\n metric = 'cosine',\n indexConfig = {},\n }: LanceCreateIndexParams): Promise<void> {\n try {\n if (!this.lanceClient) {\n throw new Error('LanceDB client not initialized. Use LanceVectorStore.create() to create an instance');\n }\n\n if (!tableName) {\n throw new Error('tableName is required');\n }\n\n if (!indexName) {\n throw new Error('indexName is required');\n }\n\n if (typeof dimension !== 'number' || dimension <= 0) {\n throw new Error('dimension must be a positive number');\n }\n } catch (err) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_VECTOR_CREATE_INDEX_FAILED_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { tableName: tableName || '', indexName, dimension, metric },\n },\n err,\n );\n }\n\n try {\n const tables = await this.lanceClient.tableNames();\n if (!tables.includes(tableName)) {\n throw new Error(\n `Table ${tableName} does not exist. Please create the table first by calling createTable() method.`,\n );\n }\n\n const table = await this.lanceClient.openTable(tableName);\n\n // Convert metric to LanceDB metric\n type LanceMetric = 'cosine' | 'l2' | 'dot';\n let metricType: LanceMetric | undefined;\n if (metric === 'euclidean') {\n metricType = 'l2';\n } else if (metric === 'dotproduct') {\n metricType = 'dot';\n } else if (metric === 'cosine') {\n metricType = 'cosine';\n }\n\n if (indexConfig.type === 'ivfflat') {\n await table.createIndex(indexName, {\n config: Index.ivfPq({\n numPartitions: indexConfig.numPartitions || 128,\n numSubVectors: indexConfig.numSubVectors || 16,\n distanceType: metricType,\n }),\n });\n } else {\n // Default to HNSW PQ index\n this.logger.debug('Creating HNSW PQ index with config:', indexConfig);\n await table.createIndex(indexName, {\n config: Index.hnswPq({\n m: indexConfig?.hnsw?.m || 16,\n efConstruction: indexConfig?.hnsw?.efConstruction || 100,\n distanceType: metricType,\n }),\n });\n }\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_VECTOR_CREATE_INDEX_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName: tableName || '', indexName, dimension },\n },\n error,\n );\n }\n }\n\n async listIndexes(): Promise<string[]> {\n if (!this.lanceClient) {\n throw new MastraError({\n id: 'STORAGE_LANCE_VECTOR_LIST_INDEXES_FAILED_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: 'LanceDB client not initialized. Use LanceVectorStore.create() to create an instance',\n details: { methodName: 'listIndexes' },\n });\n }\n\n try {\n const tables = await this.lanceClient.tableNames();\n const allIndices: string[] = [];\n\n for (const tableName of tables) {\n const table = await this.lanceClient.openTable(tableName);\n const tableIndices = await table.listIndices();\n allIndices.push(...tableIndices.map(index => index.name));\n }\n\n return allIndices;\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_VECTOR_LIST_INDEXES_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async describeIndex({ indexName }: DescribeIndexParams): Promise<IndexStats> {\n try {\n if (!this.lanceClient) {\n throw new Error('LanceDB client not initialized. Use LanceVectorStore.create() to create an instance');\n }\n\n if (!indexName) {\n throw new Error('indexName is required');\n }\n } catch (err) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_VECTOR_DESCRIBE_INDEX_FAILED_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { indexName },\n },\n err,\n );\n }\n\n try {\n const tables = await this.lanceClient.tableNames();\n\n for (const tableName of tables) {\n this.logger.debug('Checking table:' + tableName);\n const table = await this.lanceClient.openTable(tableName);\n const tableIndices = await table.listIndices();\n const foundIndex = tableIndices.find(index => index.name === indexName);\n\n if (foundIndex) {\n const stats = await table.indexStats(foundIndex.name);\n\n if (!stats) {\n throw new Error(`Index stats not found for index: ${indexName}`);\n }\n\n const schema = await table.schema();\n const vectorCol = foundIndex.columns[0] || 'vector';\n\n // Find the vector column in the schema\n const vectorField = schema.fields.find(field => field.name === vectorCol);\n const dimension = vectorField?.type?.['listSize'] || 0;\n\n return {\n dimension: dimension,\n metric: stats.distanceType as 'cosine' | 'euclidean' | 'dotproduct' | undefined,\n count: stats.numIndexedRows,\n };\n }\n }\n\n throw new Error(`IndexName: ${indexName} not found`);\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_VECTOR_DESCRIBE_INDEX_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { indexName },\n },\n error,\n );\n }\n }\n\n async deleteIndex({ indexName }: DeleteIndexParams): Promise<void> {\n try {\n if (!this.lanceClient) {\n throw new Error('LanceDB client not initialized. Use LanceVectorStore.create() to create an instance');\n }\n\n if (!indexName) {\n throw new Error('indexName is required');\n }\n } catch (err) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_VECTOR_DELETE_INDEX_FAILED_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { indexName },\n },\n err,\n );\n }\n try {\n const tables = await this.lanceClient.tableNames();\n\n for (const tableName of tables) {\n const table = await this.lanceClient.openTable(tableName);\n const tableIndices = await table.listIndices();\n const foundIndex = tableIndices.find(index => index.name === indexName);\n\n if (foundIndex) {\n await table.dropIndex(indexName);\n return;\n }\n }\n\n throw new Error(`Index ${indexName} not found`);\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_VECTOR_DELETE_INDEX_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { indexName },\n },\n error,\n );\n }\n }\n\n /**\n * Deletes all tables in the database\n */\n async deleteAllTables(): Promise<void> {\n if (!this.lanceClient) {\n throw new MastraError({\n id: 'STORAGE_LANCE_VECTOR_DELETE_ALL_TABLES_FAILED_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { methodName: 'deleteAllTables' },\n text: 'LanceDB client not initialized. Use LanceVectorStore.create() to create an instance',\n });\n }\n try {\n await this.lanceClient.dropAllTables();\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_VECTOR_DELETE_ALL_TABLES_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { methodName: 'deleteAllTables' },\n },\n error,\n );\n }\n }\n\n async deleteTable(tableName: string): Promise<void> {\n if (!this.lanceClient) {\n throw new MastraError({\n id: 'STORAGE_LANCE_VECTOR_DELETE_TABLE_FAILED_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { tableName },\n text: 'LanceDB client not initialized. Use LanceVectorStore.create() to create an instance',\n });\n }\n\n try {\n await this.lanceClient.dropTable(tableName);\n } catch (error: any) {\n // throw new Error(`Failed to delete tables: ${error.message}`);\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_VECTOR_DELETE_TABLE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n\n async updateVector(params: UpdateVectorParams<LanceVectorFilter>): Promise<void> {\n const { indexName, update } = params;\n\n // Validate mutually exclusive parameters\n if ('id' in params && 'filter' in params && params.id && params.filter) {\n throw new MastraError({\n id: 'STORAGE_LANCE_VECTOR_UPDATE_VECTOR_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: 'id and filter are mutually exclusive',\n details: { indexName },\n });\n }\n\n if (!('id' in params || 'filter' in params) || (!params.id && !params.filter)) {\n throw new MastraError({\n id: 'STORAGE_LANCE_VECTOR_UPDATE_VECTOR_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: 'Either id or filter must be provided',\n details: { indexName },\n });\n }\n\n if ('filter' in params && params.filter && Object.keys(params.filter).length === 0) {\n throw new MastraError({\n id: 'STORAGE_LANCE_VECTOR_UPDATE_VECTOR_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: 'Cannot update with empty filter',\n details: { indexName },\n });\n }\n\n if (!update.vector && !update.metadata) {\n throw new MastraError({\n id: 'STORAGE_LANCE_VECTOR_UPDATE_VECTOR_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: 'No updates provided',\n details: { indexName },\n });\n }\n\n try {\n if (!this.lanceClient) {\n throw new Error('LanceDB client not initialized. Use LanceVectorStore.create() to create an instance');\n }\n\n if (!indexName) {\n throw new Error('indexName is required');\n }\n\n // In LanceDB, the indexName is actually a column name in a table\n // We need to find which table has this column as an index\n const tables = await this.lanceClient.tableNames();\n\n for (const tableName of tables) {\n this.logger.debug('Checking table:' + tableName);\n const table = await this.lanceClient.openTable(tableName);\n\n try {\n const schema = await table.schema();\n const hasColumn = schema.fields.some(field => field.name === indexName);\n\n if (hasColumn) {\n this.logger.debug(`Found column ${indexName} in table ${tableName}`);\n\n let whereClause: string;\n if ('id' in params && params.id) {\n whereClause = `id = '${params.id}'`;\n } else if ('filter' in params && params.filter) {\n // Use filter translator to build SQL WHERE clause\n const translator = new LanceFilterTranslator();\n const processFilterKeys = (filter: Record<string, any>): Record<string, any> => {\n const processedFilter: Record<string, any> = {};\n Object.entries(filter).forEach(([key, value]) => {\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n Object.entries(value).forEach(([nestedKey, nestedValue]) => {\n processedFilter[`metadata_${key}_${nestedKey}`] = nestedValue;\n });\n } else {\n processedFilter[`metadata_${key}`] = value;\n }\n });\n return processedFilter;\n };\n\n const prefixedFilter = processFilterKeys(params.filter as Record<string, any>);\n whereClause = translator.translate(prefixedFilter) || '';\n\n if (!whereClause) {\n throw new Error('Failed to translate filter to SQL');\n }\n } else {\n throw new Error('Either id or filter must be provided');\n }\n\n // Query for existing records that match\n const existingRecords = await table\n .query()\n .where(whereClause)\n .select(schema.fields.map(field => field.name))\n .toArray();\n\n if (existingRecords.length === 0) {\n this.logger.info(`No records found matching criteria in table ${tableName}`);\n return;\n }\n\n // Update each matching record\n const updatedRecords = existingRecords.map(record => {\n const rowData: Record<string, any> = {};\n\n // Copy all existing field values except special fields\n Object.entries(record).forEach(([key, value]) => {\n // Skip special fields\n if (key !== '_distance') {\n // Handle vector field specially to avoid nested properties\n if (key === indexName) {\n // If we're about to update this vector anyway, use the new value\n if (update.vector) {\n rowData[key] = update.vector;\n } else {\n // Ensure vector is a plain array\n if (Array.isArray(value)) {\n rowData[key] = [...value];\n } else if (typeof value === 'object' && value !== null) {\n // Handle vector objects by converting to array if needed\n rowData[key] = Array.from(value as any[]);\n } else {\n rowData[key] = value;\n }\n }\n } else {\n rowData[key] = value;\n }\n }\n });\n\n // Apply metadata updates if provided\n if (update.metadata) {\n Object.entries(update.metadata).forEach(([key, value]) => {\n rowData[`metadata_${key}`] = value;\n });\n }\n\n return rowData;\n });\n\n // Update all records\n await table.add(updatedRecords, { mode: 'overwrite' });\n return;\n }\n } catch (err) {\n this.logger.error(`Error checking schema for table ${tableName}:` + err);\n // Continue to the next table if there's an error\n continue;\n }\n }\n\n throw new Error(`No table found with column/index '${indexName}'`);\n } catch (error: any) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_VECTOR_UPDATE_VECTOR_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n indexName,\n ...('id' in params && params.id && { id: params.id }),\n ...('filter' in params && params.filter && { filter: JSON.stringify(params.filter) }),\n hasVector: !!update.vector,\n hasMetadata: !!update.metadata,\n },\n },\n error,\n );\n }\n }\n\n async deleteVector({ indexName, id }: DeleteVectorParams): Promise<void> {\n try {\n if (!this.lanceClient) {\n throw new Error('LanceDB client not initialized. Use LanceVectorStore.create() to create an instance');\n }\n\n if (!indexName) {\n throw new Error('indexName is required');\n }\n\n if (!id) {\n throw new Error('id is required');\n }\n } catch (err) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_VECTOR_DELETE_VECTOR_FAILED_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: {\n indexName,\n ...(id && { id }),\n },\n },\n err,\n );\n }\n\n try {\n // In LanceDB, the indexName is actually a column name in a table\n // We need to find which table has this column as an index\n const tables = await this.lanceClient.tableNames();\n\n for (const tableName of tables) {\n this.logger.debug('Checking table:' + tableName);\n const table = await this.lanceClient.openTable(tableName);\n\n try {\n // Try to get the schema to check if this table has the column we're looking for\n const schema = await table.schema();\n const hasColumn = schema.fields.some(field => field.name === indexName);\n\n if (hasColumn) {\n this.logger.debug(`Found column ${indexName} in table ${tableName}`);\n await table.delete(`id = '${id}'`);\n return;\n }\n } catch (err) {\n this.logger.error(`Error checking schema for table ${tableName}:` + err);\n // Continue to the next table if there's an error\n continue;\n }\n }\n\n throw new Error(`No table found with column/index '${indexName}'`);\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_VECTOR_DELETE_VECTOR_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n indexName,\n ...(id && { id }),\n },\n },\n error,\n );\n }\n }\n\n /**\n * Converts a flattened object with keys using underscore notation back to a nested object.\n * Example: { name: 'test', details_text: 'test' } → { name: 'test', details: { text: 'test' } }\n */\n private unflattenObject(obj: Record<string, any>): Record<string, any> {\n const result: Record<string, any> = {};\n\n Object.keys(obj).forEach(key => {\n const value = obj[key];\n const parts = key.split('_');\n\n // Start with the result object\n let current = result;\n\n // Process all parts except the last one\n for (let i = 0; i < parts.length - 1; i++) {\n const part = parts[i];\n // Skip empty parts\n if (!part) continue;\n\n // Create nested object if it doesn't exist\n if (!current[part] || typeof current[part] !== 'object') {\n current[part] = {};\n }\n current = current[part];\n }\n\n // Set the value at the last part\n const lastPart = parts[parts.length - 1];\n if (lastPart) {\n current[lastPart] = value;\n }\n });\n\n return result;\n }\n\n async deleteVectors({ indexName, filter, ids }: DeleteVectorsParams<LanceVectorFilter>): Promise<void> {\n // Validate mutually exclusive parameters\n if (ids && filter) {\n throw new MastraError({\n id: 'STORAGE_LANCE_VECTOR_DELETE_VECTORS_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: 'ids and filter are mutually exclusive',\n details: { indexName },\n });\n }\n\n if (!ids && !filter) {\n throw new MastraError({\n id: 'STORAGE_LANCE_VECTOR_DELETE_VECTORS_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: 'Either filter or ids must be provided',\n details: { indexName },\n });\n }\n\n // Validate non-empty arrays and objects\n if (ids && ids.length === 0) {\n throw new MastraError({\n id: 'STORAGE_LANCE_VECTOR_DELETE_VECTORS_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: 'Cannot delete with empty ids array',\n details: { indexName },\n });\n }\n\n if (filter && Object.keys(filter).length === 0) {\n throw new MastraError({\n id: 'STORAGE_LANCE_VECTOR_DELETE_VECTORS_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: 'Cannot delete with empty filter',\n details: { indexName },\n });\n }\n\n try {\n if (!this.lanceClient) {\n throw new Error('LanceDB client not initialized. Use LanceVectorStore.create() to create an instance');\n }\n\n if (!indexName) {\n throw new Error('indexName is required');\n }\n\n // In LanceDB, the indexName is actually a column name in a table\n // We need to find which table has this column as an index\n const tables = await this.lanceClient.tableNames();\n\n for (const tableName of tables) {\n this.logger.debug('Checking table:' + tableName);\n const table = await this.lanceClient.openTable(tableName);\n\n try {\n const schema = await table.schema();\n const hasColumn = schema.fields.some(field => field.name === indexName);\n\n if (hasColumn) {\n this.logger.debug(`Found column ${indexName} in table ${tableName}`);\n\n if (ids) {\n // Delete by IDs\n const idsConditions = ids.map(id => `id = '${id}'`).join(' OR ');\n await table.delete(idsConditions);\n } else if (filter) {\n // Delete by filter using SQL WHERE clause\n const translator = new LanceFilterTranslator();\n const processFilterKeys = (filter: Record<string, any>): Record<string, any> => {\n const processedFilter: Record<string, any> = {};\n Object.entries(filter).forEach(([key, value]) => {\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n Object.entries(value).forEach(([nestedKey, nestedValue]) => {\n processedFilter[`metadata_${key}_${nestedKey}`] = nestedValue;\n });\n } else {\n processedFilter[`metadata_${key}`] = value;\n }\n });\n return processedFilter;\n };\n\n const prefixedFilter = processFilterKeys(filter as Record<string, any>);\n const whereClause = translator.translate(prefixedFilter);\n\n if (!whereClause) {\n throw new Error('Failed to translate filter to SQL');\n }\n\n await table.delete(whereClause);\n }\n\n return;\n }\n } catch (err) {\n this.logger.error(`Error checking schema for table ${tableName}:` + err);\n // Continue to the next table if there's an error\n continue;\n }\n }\n\n throw new Error(`No table found with column/index '${indexName}'`);\n } catch (error: any) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: 'STORAGE_LANCE_VECTOR_DELETE_VECTORS_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n indexName,\n ...(filter && { filter: JSON.stringify(filter) }),\n ...(ids && { idsCount: ids.length }),\n },\n },\n error,\n );\n }\n }\n}\n"]}
|