@mastra/libsql 0.16.2 → 1.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +225 -15
- package/README.md +27 -20
- package/dist/index.cjs +303 -560
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +303 -560
- package/dist/index.js.map +1 -1
- package/dist/storage/domains/memory/index.d.ts +14 -45
- package/dist/storage/domains/memory/index.d.ts.map +1 -1
- package/dist/storage/domains/observability/index.d.ts +12 -12
- package/dist/storage/domains/observability/index.d.ts.map +1 -1
- package/dist/storage/domains/operations/index.d.ts.map +1 -1
- package/dist/storage/domains/scores/index.d.ts +5 -5
- package/dist/storage/domains/scores/index.d.ts.map +1 -1
- package/dist/storage/domains/workflows/index.d.ts +4 -11
- package/dist/storage/domains/workflows/index.d.ts.map +1 -1
- package/dist/storage/index.d.ts +34 -94
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/vector/index.d.ts +3 -1
- package/dist/vector/index.d.ts.map +1 -1
- package/package.json +8 -12
- package/dist/storage/domains/legacy-evals/index.d.ts +0 -18
- package/dist/storage/domains/legacy-evals/index.d.ts.map +0 -1
- package/dist/storage/domains/traces/index.d.ts +0 -21
- package/dist/storage/domains/traces/index.d.ts.map +0 -1
package/dist/index.cjs
CHANGED
|
@@ -7,7 +7,7 @@ var vector = require('@mastra/core/vector');
|
|
|
7
7
|
var filter = require('@mastra/core/vector/filter');
|
|
8
8
|
var storage = require('@mastra/core/storage');
|
|
9
9
|
var agent = require('@mastra/core/agent');
|
|
10
|
-
var
|
|
10
|
+
var evals = require('@mastra/core/evals');
|
|
11
11
|
|
|
12
12
|
// src/vector/index.ts
|
|
13
13
|
var LibSQLFilterTranslator = class extends filter.BaseFilterTranslator {
|
|
@@ -507,9 +507,10 @@ var LibSQLVector = class extends vector.MastraVector {
|
|
|
507
507
|
syncUrl,
|
|
508
508
|
syncInterval,
|
|
509
509
|
maxRetries = 5,
|
|
510
|
-
initialBackoffMs = 100
|
|
510
|
+
initialBackoffMs = 100,
|
|
511
|
+
id
|
|
511
512
|
}) {
|
|
512
|
-
super();
|
|
513
|
+
super({ id });
|
|
513
514
|
this.turso = client.createClient({
|
|
514
515
|
url: connectionUrl,
|
|
515
516
|
syncUrl,
|
|
@@ -920,120 +921,6 @@ var LibSQLVector = class extends vector.MastraVector {
|
|
|
920
921
|
});
|
|
921
922
|
}
|
|
922
923
|
};
|
|
923
|
-
function transformEvalRow(row) {
|
|
924
|
-
const resultValue = JSON.parse(row.result);
|
|
925
|
-
const testInfoValue = row.test_info ? JSON.parse(row.test_info) : void 0;
|
|
926
|
-
if (!resultValue || typeof resultValue !== "object" || !("score" in resultValue)) {
|
|
927
|
-
throw new Error(`Invalid MetricResult format: ${JSON.stringify(resultValue)}`);
|
|
928
|
-
}
|
|
929
|
-
return {
|
|
930
|
-
input: row.input,
|
|
931
|
-
output: row.output,
|
|
932
|
-
result: resultValue,
|
|
933
|
-
agentName: row.agent_name,
|
|
934
|
-
metricName: row.metric_name,
|
|
935
|
-
instructions: row.instructions,
|
|
936
|
-
testInfo: testInfoValue,
|
|
937
|
-
globalRunId: row.global_run_id,
|
|
938
|
-
runId: row.run_id,
|
|
939
|
-
createdAt: row.created_at
|
|
940
|
-
};
|
|
941
|
-
}
|
|
942
|
-
var LegacyEvalsLibSQL = class extends storage.LegacyEvalsStorage {
|
|
943
|
-
client;
|
|
944
|
-
constructor({ client }) {
|
|
945
|
-
super();
|
|
946
|
-
this.client = client;
|
|
947
|
-
}
|
|
948
|
-
/** @deprecated use getEvals instead */
|
|
949
|
-
async getEvalsByAgentName(agentName, type) {
|
|
950
|
-
try {
|
|
951
|
-
const baseQuery = `SELECT * FROM ${storage.TABLE_EVALS} WHERE agent_name = ?`;
|
|
952
|
-
const typeCondition = type === "test" ? " AND test_info IS NOT NULL AND test_info->>'testPath' IS NOT NULL" : type === "live" ? " AND (test_info IS NULL OR test_info->>'testPath' IS NULL)" : "";
|
|
953
|
-
const result = await this.client.execute({
|
|
954
|
-
sql: `${baseQuery}${typeCondition} ORDER BY created_at DESC`,
|
|
955
|
-
args: [agentName]
|
|
956
|
-
});
|
|
957
|
-
return result.rows?.map((row) => transformEvalRow(row)) ?? [];
|
|
958
|
-
} catch (error$1) {
|
|
959
|
-
if (error$1 instanceof Error && error$1.message.includes("no such table")) {
|
|
960
|
-
return [];
|
|
961
|
-
}
|
|
962
|
-
throw new error.MastraError(
|
|
963
|
-
{
|
|
964
|
-
id: "LIBSQL_STORE_GET_EVALS_BY_AGENT_NAME_FAILED",
|
|
965
|
-
domain: error.ErrorDomain.STORAGE,
|
|
966
|
-
category: error.ErrorCategory.THIRD_PARTY,
|
|
967
|
-
details: { agentName }
|
|
968
|
-
},
|
|
969
|
-
error$1
|
|
970
|
-
);
|
|
971
|
-
}
|
|
972
|
-
}
|
|
973
|
-
async getEvals(options = {}) {
|
|
974
|
-
const { agentName, type, page = 0, perPage = 100, dateRange } = options;
|
|
975
|
-
const fromDate = dateRange?.start;
|
|
976
|
-
const toDate = dateRange?.end;
|
|
977
|
-
const conditions = [];
|
|
978
|
-
const queryParams = [];
|
|
979
|
-
if (agentName) {
|
|
980
|
-
conditions.push(`agent_name = ?`);
|
|
981
|
-
queryParams.push(agentName);
|
|
982
|
-
}
|
|
983
|
-
if (type === "test") {
|
|
984
|
-
conditions.push(`(test_info IS NOT NULL AND json_extract(test_info, '$.testPath') IS NOT NULL)`);
|
|
985
|
-
} else if (type === "live") {
|
|
986
|
-
conditions.push(`(test_info IS NULL OR json_extract(test_info, '$.testPath') IS NULL)`);
|
|
987
|
-
}
|
|
988
|
-
if (fromDate) {
|
|
989
|
-
conditions.push(`created_at >= ?`);
|
|
990
|
-
queryParams.push(fromDate.toISOString());
|
|
991
|
-
}
|
|
992
|
-
if (toDate) {
|
|
993
|
-
conditions.push(`created_at <= ?`);
|
|
994
|
-
queryParams.push(toDate.toISOString());
|
|
995
|
-
}
|
|
996
|
-
const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "";
|
|
997
|
-
try {
|
|
998
|
-
const countResult = await this.client.execute({
|
|
999
|
-
sql: `SELECT COUNT(*) as count FROM ${storage.TABLE_EVALS} ${whereClause}`,
|
|
1000
|
-
args: queryParams
|
|
1001
|
-
});
|
|
1002
|
-
const total = Number(countResult.rows?.[0]?.count ?? 0);
|
|
1003
|
-
const currentOffset = page * perPage;
|
|
1004
|
-
const hasMore = currentOffset + perPage < total;
|
|
1005
|
-
if (total === 0) {
|
|
1006
|
-
return {
|
|
1007
|
-
evals: [],
|
|
1008
|
-
total: 0,
|
|
1009
|
-
page,
|
|
1010
|
-
perPage,
|
|
1011
|
-
hasMore: false
|
|
1012
|
-
};
|
|
1013
|
-
}
|
|
1014
|
-
const dataResult = await this.client.execute({
|
|
1015
|
-
sql: `SELECT * FROM ${storage.TABLE_EVALS} ${whereClause} ORDER BY created_at DESC LIMIT ? OFFSET ?`,
|
|
1016
|
-
args: [...queryParams, perPage, currentOffset]
|
|
1017
|
-
});
|
|
1018
|
-
return {
|
|
1019
|
-
evals: dataResult.rows?.map((row) => transformEvalRow(row)) ?? [],
|
|
1020
|
-
total,
|
|
1021
|
-
page,
|
|
1022
|
-
perPage,
|
|
1023
|
-
hasMore
|
|
1024
|
-
};
|
|
1025
|
-
} catch (error$1) {
|
|
1026
|
-
throw new error.MastraError(
|
|
1027
|
-
{
|
|
1028
|
-
id: "LIBSQL_STORE_GET_EVALS_FAILED",
|
|
1029
|
-
domain: error.ErrorDomain.STORAGE,
|
|
1030
|
-
category: error.ErrorCategory.THIRD_PARTY
|
|
1031
|
-
},
|
|
1032
|
-
error$1
|
|
1033
|
-
);
|
|
1034
|
-
}
|
|
1035
|
-
}
|
|
1036
|
-
};
|
|
1037
924
|
var MemoryLibSQL = class extends storage.MemoryStorage {
|
|
1038
925
|
client;
|
|
1039
926
|
operations;
|
|
@@ -1061,10 +948,9 @@ var MemoryLibSQL = class extends storage.MemoryStorage {
|
|
|
1061
948
|
}
|
|
1062
949
|
async _getIncludedMessages({
|
|
1063
950
|
threadId,
|
|
1064
|
-
|
|
951
|
+
include
|
|
1065
952
|
}) {
|
|
1066
953
|
if (!threadId.trim()) throw new Error("threadId must be a non-empty string");
|
|
1067
|
-
const include = selectBy?.include;
|
|
1068
954
|
if (!include) return null;
|
|
1069
955
|
const unionQueries = [];
|
|
1070
956
|
const params = [];
|
|
@@ -1107,24 +993,10 @@ var MemoryLibSQL = class extends storage.MemoryStorage {
|
|
|
1107
993
|
});
|
|
1108
994
|
return dedupedRows;
|
|
1109
995
|
}
|
|
1110
|
-
async
|
|
1111
|
-
|
|
1112
|
-
resourceId,
|
|
1113
|
-
selectBy,
|
|
1114
|
-
format
|
|
1115
|
-
}) {
|
|
996
|
+
async listMessagesById({ messageIds }) {
|
|
997
|
+
if (messageIds.length === 0) return { messages: [] };
|
|
1116
998
|
try {
|
|
1117
|
-
|
|
1118
|
-
const messages = [];
|
|
1119
|
-
const limit = storage.resolveMessageLimit({ last: selectBy?.last, defaultLimit: 40 });
|
|
1120
|
-
if (selectBy?.include?.length) {
|
|
1121
|
-
const includeMessages = await this._getIncludedMessages({ threadId, selectBy });
|
|
1122
|
-
if (includeMessages) {
|
|
1123
|
-
messages.push(...includeMessages);
|
|
1124
|
-
}
|
|
1125
|
-
}
|
|
1126
|
-
const excludeIds = messages.map((m) => m.id);
|
|
1127
|
-
const remainingSql = `
|
|
999
|
+
const sql = `
|
|
1128
1000
|
SELECT
|
|
1129
1001
|
id,
|
|
1130
1002
|
content,
|
|
@@ -1134,105 +1006,71 @@ var MemoryLibSQL = class extends storage.MemoryStorage {
|
|
|
1134
1006
|
thread_id,
|
|
1135
1007
|
"resourceId"
|
|
1136
1008
|
FROM "${storage.TABLE_MESSAGES}"
|
|
1137
|
-
WHERE
|
|
1138
|
-
${excludeIds.length ? `AND id NOT IN (${excludeIds.map(() => "?").join(", ")})` : ""}
|
|
1009
|
+
WHERE id IN (${messageIds.map(() => "?").join(", ")})
|
|
1139
1010
|
ORDER BY "createdAt" DESC
|
|
1140
|
-
LIMIT ?
|
|
1141
1011
|
`;
|
|
1142
|
-
const
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
}
|
|
1147
|
-
messages.sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());
|
|
1148
|
-
const list = new agent.MessageList().add(messages, "memory");
|
|
1149
|
-
if (format === `v2`) return list.get.all.v2();
|
|
1150
|
-
return list.get.all.v1();
|
|
1012
|
+
const result = await this.client.execute({ sql, args: messageIds });
|
|
1013
|
+
if (!result.rows) return { messages: [] };
|
|
1014
|
+
const list = new agent.MessageList().add(result.rows.map(this.parseRow), "memory");
|
|
1015
|
+
return { messages: list.get.all.db() };
|
|
1151
1016
|
} catch (error$1) {
|
|
1152
1017
|
throw new error.MastraError(
|
|
1153
1018
|
{
|
|
1154
|
-
id: "
|
|
1019
|
+
id: "LIBSQL_STORE_LIST_MESSAGES_BY_ID_FAILED",
|
|
1155
1020
|
domain: error.ErrorDomain.STORAGE,
|
|
1156
1021
|
category: error.ErrorCategory.THIRD_PARTY,
|
|
1157
|
-
details: {
|
|
1022
|
+
details: { messageIds: JSON.stringify(messageIds) }
|
|
1158
1023
|
},
|
|
1159
1024
|
error$1
|
|
1160
1025
|
);
|
|
1161
1026
|
}
|
|
1162
1027
|
}
|
|
1163
|
-
async
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
}) {
|
|
1167
|
-
if (messageIds.length === 0) return [];
|
|
1168
|
-
try {
|
|
1169
|
-
const sql = `
|
|
1170
|
-
SELECT
|
|
1171
|
-
id,
|
|
1172
|
-
content,
|
|
1173
|
-
role,
|
|
1174
|
-
type,
|
|
1175
|
-
"createdAt",
|
|
1176
|
-
thread_id,
|
|
1177
|
-
"resourceId"
|
|
1178
|
-
FROM "${storage.TABLE_MESSAGES}"
|
|
1179
|
-
WHERE id IN (${messageIds.map(() => "?").join(", ")})
|
|
1180
|
-
ORDER BY "createdAt" DESC
|
|
1181
|
-
`;
|
|
1182
|
-
const result = await this.client.execute({ sql, args: messageIds });
|
|
1183
|
-
if (!result.rows) return [];
|
|
1184
|
-
const list = new agent.MessageList().add(result.rows.map(this.parseRow), "memory");
|
|
1185
|
-
if (format === `v1`) return list.get.all.v1();
|
|
1186
|
-
return list.get.all.v2();
|
|
1187
|
-
} catch (error$1) {
|
|
1028
|
+
async listMessages(args) {
|
|
1029
|
+
const { threadId, resourceId, include, filter, perPage: perPageInput, page = 0, orderBy } = args;
|
|
1030
|
+
if (!threadId.trim()) {
|
|
1188
1031
|
throw new error.MastraError(
|
|
1189
1032
|
{
|
|
1190
|
-
id: "
|
|
1033
|
+
id: "STORAGE_LIBSQL_LIST_MESSAGES_INVALID_THREAD_ID",
|
|
1191
1034
|
domain: error.ErrorDomain.STORAGE,
|
|
1192
1035
|
category: error.ErrorCategory.THIRD_PARTY,
|
|
1193
|
-
details: {
|
|
1036
|
+
details: { threadId }
|
|
1194
1037
|
},
|
|
1195
|
-
|
|
1038
|
+
new Error("threadId must be a non-empty string")
|
|
1196
1039
|
);
|
|
1197
1040
|
}
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
const includeMessages = await this._getIncludedMessages({ threadId, selectBy });
|
|
1209
|
-
if (includeMessages) {
|
|
1210
|
-
messages.push(...includeMessages);
|
|
1211
|
-
}
|
|
1212
|
-
} catch (error$1) {
|
|
1213
|
-
throw new error.MastraError(
|
|
1214
|
-
{
|
|
1215
|
-
id: "LIBSQL_STORE_GET_MESSAGES_PAGINATED_GET_INCLUDE_MESSAGES_FAILED",
|
|
1216
|
-
domain: error.ErrorDomain.STORAGE,
|
|
1217
|
-
category: error.ErrorCategory.THIRD_PARTY,
|
|
1218
|
-
details: { threadId }
|
|
1219
|
-
},
|
|
1220
|
-
error$1
|
|
1221
|
-
);
|
|
1222
|
-
}
|
|
1041
|
+
if (page < 0) {
|
|
1042
|
+
throw new error.MastraError(
|
|
1043
|
+
{
|
|
1044
|
+
id: "LIBSQL_STORE_LIST_MESSAGES_INVALID_PAGE",
|
|
1045
|
+
domain: error.ErrorDomain.STORAGE,
|
|
1046
|
+
category: error.ErrorCategory.USER,
|
|
1047
|
+
details: { page }
|
|
1048
|
+
},
|
|
1049
|
+
new Error("page must be >= 0")
|
|
1050
|
+
);
|
|
1223
1051
|
}
|
|
1052
|
+
const perPage = storage.normalizePerPage(perPageInput, 40);
|
|
1053
|
+
const { offset, perPage: perPageForResponse } = storage.calculatePagination(page, perPageInput, perPage);
|
|
1224
1054
|
try {
|
|
1225
|
-
|
|
1226
|
-
const
|
|
1055
|
+
const { field, direction } = this.parseOrderBy(orderBy, "ASC");
|
|
1056
|
+
const orderByStatement = `ORDER BY "${field}" ${direction}`;
|
|
1227
1057
|
const conditions = [`thread_id = ?`];
|
|
1228
1058
|
const queryParams = [threadId];
|
|
1229
|
-
if (
|
|
1059
|
+
if (resourceId) {
|
|
1060
|
+
conditions.push(`"resourceId" = ?`);
|
|
1061
|
+
queryParams.push(resourceId);
|
|
1062
|
+
}
|
|
1063
|
+
if (filter?.dateRange?.start) {
|
|
1230
1064
|
conditions.push(`"createdAt" >= ?`);
|
|
1231
|
-
queryParams.push(
|
|
1065
|
+
queryParams.push(
|
|
1066
|
+
filter.dateRange.start instanceof Date ? filter.dateRange.start.toISOString() : filter.dateRange.start
|
|
1067
|
+
);
|
|
1232
1068
|
}
|
|
1233
|
-
if (
|
|
1069
|
+
if (filter?.dateRange?.end) {
|
|
1234
1070
|
conditions.push(`"createdAt" <= ?`);
|
|
1235
|
-
queryParams.push(
|
|
1071
|
+
queryParams.push(
|
|
1072
|
+
filter.dateRange.end instanceof Date ? filter.dateRange.end.toISOString() : filter.dateRange.end
|
|
1073
|
+
);
|
|
1236
1074
|
}
|
|
1237
1075
|
const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "";
|
|
1238
1076
|
const countResult = await this.client.execute({
|
|
@@ -1240,50 +1078,80 @@ var MemoryLibSQL = class extends storage.MemoryStorage {
|
|
|
1240
1078
|
args: queryParams
|
|
1241
1079
|
});
|
|
1242
1080
|
const total = Number(countResult.rows?.[0]?.count ?? 0);
|
|
1243
|
-
|
|
1081
|
+
const limitValue = perPageInput === false ? total : perPage;
|
|
1082
|
+
const dataResult = await this.client.execute({
|
|
1083
|
+
sql: `SELECT id, content, role, type, "createdAt", "resourceId", "thread_id" FROM ${storage.TABLE_MESSAGES} ${whereClause} ${orderByStatement} LIMIT ? OFFSET ?`,
|
|
1084
|
+
args: [...queryParams, limitValue, offset]
|
|
1085
|
+
});
|
|
1086
|
+
const messages = (dataResult.rows || []).map((row) => this.parseRow(row));
|
|
1087
|
+
if (total === 0 && messages.length === 0 && (!include || include.length === 0)) {
|
|
1244
1088
|
return {
|
|
1245
1089
|
messages: [],
|
|
1246
1090
|
total: 0,
|
|
1247
1091
|
page,
|
|
1248
|
-
perPage,
|
|
1092
|
+
perPage: perPageForResponse,
|
|
1249
1093
|
hasMore: false
|
|
1250
1094
|
};
|
|
1251
1095
|
}
|
|
1252
|
-
const
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1096
|
+
const messageIds = new Set(messages.map((m) => m.id));
|
|
1097
|
+
if (include && include.length > 0) {
|
|
1098
|
+
const includeMessages = await this._getIncludedMessages({ threadId, include });
|
|
1099
|
+
if (includeMessages) {
|
|
1100
|
+
for (const includeMsg of includeMessages) {
|
|
1101
|
+
if (!messageIds.has(includeMsg.id)) {
|
|
1102
|
+
messages.push(includeMsg);
|
|
1103
|
+
messageIds.add(includeMsg.id);
|
|
1104
|
+
}
|
|
1105
|
+
}
|
|
1106
|
+
}
|
|
1107
|
+
}
|
|
1108
|
+
const list = new agent.MessageList().add(messages, "memory");
|
|
1109
|
+
let finalMessages = list.get.all.db();
|
|
1110
|
+
finalMessages = finalMessages.sort((a, b) => {
|
|
1111
|
+
const isDateField = field === "createdAt" || field === "updatedAt";
|
|
1112
|
+
const aValue = isDateField ? new Date(a[field]).getTime() : a[field];
|
|
1113
|
+
const bValue = isDateField ? new Date(b[field]).getTime() : b[field];
|
|
1114
|
+
if (typeof aValue === "number" && typeof bValue === "number") {
|
|
1115
|
+
return direction === "ASC" ? aValue - bValue : bValue - aValue;
|
|
1116
|
+
}
|
|
1117
|
+
return direction === "ASC" ? String(aValue).localeCompare(String(bValue)) : String(bValue).localeCompare(String(aValue));
|
|
1257
1118
|
});
|
|
1258
|
-
|
|
1259
|
-
const
|
|
1119
|
+
const returnedThreadMessageIds = new Set(finalMessages.filter((m) => m.threadId === threadId).map((m) => m.id));
|
|
1120
|
+
const allThreadMessagesReturned = returnedThreadMessageIds.size >= total;
|
|
1121
|
+
const hasMore = perPageInput !== false && !allThreadMessagesReturned && offset + perPage < total;
|
|
1260
1122
|
return {
|
|
1261
|
-
messages:
|
|
1123
|
+
messages: finalMessages,
|
|
1262
1124
|
total,
|
|
1263
1125
|
page,
|
|
1264
|
-
perPage,
|
|
1265
|
-
hasMore
|
|
1126
|
+
perPage: perPageForResponse,
|
|
1127
|
+
hasMore
|
|
1266
1128
|
};
|
|
1267
1129
|
} catch (error$1) {
|
|
1268
1130
|
const mastraError = new error.MastraError(
|
|
1269
1131
|
{
|
|
1270
|
-
id: "
|
|
1132
|
+
id: "LIBSQL_STORE_LIST_MESSAGES_FAILED",
|
|
1271
1133
|
domain: error.ErrorDomain.STORAGE,
|
|
1272
1134
|
category: error.ErrorCategory.THIRD_PARTY,
|
|
1273
|
-
details: {
|
|
1135
|
+
details: {
|
|
1136
|
+
threadId,
|
|
1137
|
+
resourceId: resourceId ?? ""
|
|
1138
|
+
}
|
|
1274
1139
|
},
|
|
1275
1140
|
error$1
|
|
1276
1141
|
);
|
|
1277
|
-
this.logger?.trackException?.(mastraError);
|
|
1278
1142
|
this.logger?.error?.(mastraError.toString());
|
|
1279
|
-
|
|
1143
|
+
this.logger?.trackException?.(mastraError);
|
|
1144
|
+
return {
|
|
1145
|
+
messages: [],
|
|
1146
|
+
total: 0,
|
|
1147
|
+
page,
|
|
1148
|
+
perPage: perPageForResponse,
|
|
1149
|
+
hasMore: false
|
|
1150
|
+
};
|
|
1280
1151
|
}
|
|
1281
1152
|
}
|
|
1282
|
-
async saveMessages({
|
|
1283
|
-
messages
|
|
1284
|
-
format
|
|
1285
|
-
}) {
|
|
1286
|
-
if (messages.length === 0) return messages;
|
|
1153
|
+
async saveMessages({ messages }) {
|
|
1154
|
+
if (messages.length === 0) return { messages };
|
|
1287
1155
|
try {
|
|
1288
1156
|
const threadId = messages[0]?.threadId;
|
|
1289
1157
|
if (!threadId) {
|
|
@@ -1340,8 +1208,7 @@ var MemoryLibSQL = class extends storage.MemoryStorage {
|
|
|
1340
1208
|
await this.client.execute(threadUpdateStatement);
|
|
1341
1209
|
}
|
|
1342
1210
|
const list = new agent.MessageList().add(messages, "memory");
|
|
1343
|
-
|
|
1344
|
-
return list.get.all.v1();
|
|
1211
|
+
return { messages: list.get.all.db() };
|
|
1345
1212
|
} catch (error$1) {
|
|
1346
1213
|
throw new error.MastraError(
|
|
1347
1214
|
{
|
|
@@ -1580,53 +1447,22 @@ var MemoryLibSQL = class extends storage.MemoryStorage {
|
|
|
1580
1447
|
);
|
|
1581
1448
|
}
|
|
1582
1449
|
}
|
|
1583
|
-
|
|
1584
|
-
|
|
1585
|
-
|
|
1586
|
-
|
|
1587
|
-
const resourceId = args.resourceId;
|
|
1588
|
-
const orderBy = this.castThreadOrderBy(args.orderBy);
|
|
1589
|
-
const sortDirection = this.castThreadSortDirection(args.sortDirection);
|
|
1590
|
-
try {
|
|
1591
|
-
const baseQuery = `FROM ${storage.TABLE_THREADS} WHERE resourceId = ?`;
|
|
1592
|
-
const queryParams = [resourceId];
|
|
1593
|
-
const mapRowToStorageThreadType = (row) => ({
|
|
1594
|
-
id: row.id,
|
|
1595
|
-
resourceId: row.resourceId,
|
|
1596
|
-
title: row.title,
|
|
1597
|
-
createdAt: new Date(row.createdAt),
|
|
1598
|
-
// Convert string to Date
|
|
1599
|
-
updatedAt: new Date(row.updatedAt),
|
|
1600
|
-
// Convert string to Date
|
|
1601
|
-
metadata: typeof row.metadata === "string" ? JSON.parse(row.metadata) : row.metadata
|
|
1602
|
-
});
|
|
1603
|
-
const result = await this.client.execute({
|
|
1604
|
-
sql: `SELECT * ${baseQuery} ORDER BY ${orderBy} ${sortDirection}`,
|
|
1605
|
-
args: queryParams
|
|
1606
|
-
});
|
|
1607
|
-
if (!result.rows) {
|
|
1608
|
-
return [];
|
|
1609
|
-
}
|
|
1610
|
-
return result.rows.map(mapRowToStorageThreadType);
|
|
1611
|
-
} catch (error$1) {
|
|
1612
|
-
const mastraError = new error.MastraError(
|
|
1450
|
+
async listThreadsByResourceId(args) {
|
|
1451
|
+
const { resourceId, page = 0, perPage: perPageInput, orderBy } = args;
|
|
1452
|
+
if (page < 0) {
|
|
1453
|
+
throw new error.MastraError(
|
|
1613
1454
|
{
|
|
1614
|
-
id: "
|
|
1455
|
+
id: "LIBSQL_STORE_LIST_THREADS_BY_RESOURCE_ID_INVALID_PAGE",
|
|
1615
1456
|
domain: error.ErrorDomain.STORAGE,
|
|
1616
|
-
category: error.ErrorCategory.
|
|
1617
|
-
details: {
|
|
1457
|
+
category: error.ErrorCategory.USER,
|
|
1458
|
+
details: { page }
|
|
1618
1459
|
},
|
|
1619
|
-
|
|
1460
|
+
new Error("page must be >= 0")
|
|
1620
1461
|
);
|
|
1621
|
-
this.logger?.trackException?.(mastraError);
|
|
1622
|
-
this.logger?.error?.(mastraError.toString());
|
|
1623
|
-
return [];
|
|
1624
1462
|
}
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
const {
|
|
1628
|
-
const orderBy = this.castThreadOrderBy(args.orderBy);
|
|
1629
|
-
const sortDirection = this.castThreadSortDirection(args.sortDirection);
|
|
1463
|
+
const perPage = storage.normalizePerPage(perPageInput, 100);
|
|
1464
|
+
const { offset, perPage: perPageForResponse } = storage.calculatePagination(page, perPageInput, perPage);
|
|
1465
|
+
const { field, direction } = this.parseOrderBy(orderBy);
|
|
1630
1466
|
try {
|
|
1631
1467
|
const baseQuery = `FROM ${storage.TABLE_THREADS} WHERE resourceId = ?`;
|
|
1632
1468
|
const queryParams = [resourceId];
|
|
@@ -1640,7 +1476,6 @@ var MemoryLibSQL = class extends storage.MemoryStorage {
|
|
|
1640
1476
|
// Convert string to Date
|
|
1641
1477
|
metadata: typeof row.metadata === "string" ? JSON.parse(row.metadata) : row.metadata
|
|
1642
1478
|
});
|
|
1643
|
-
const currentOffset = page * perPage;
|
|
1644
1479
|
const countResult = await this.client.execute({
|
|
1645
1480
|
sql: `SELECT COUNT(*) as count ${baseQuery}`,
|
|
1646
1481
|
args: queryParams
|
|
@@ -1651,26 +1486,27 @@ var MemoryLibSQL = class extends storage.MemoryStorage {
|
|
|
1651
1486
|
threads: [],
|
|
1652
1487
|
total: 0,
|
|
1653
1488
|
page,
|
|
1654
|
-
perPage,
|
|
1489
|
+
perPage: perPageForResponse,
|
|
1655
1490
|
hasMore: false
|
|
1656
1491
|
};
|
|
1657
1492
|
}
|
|
1493
|
+
const limitValue = perPageInput === false ? total : perPage;
|
|
1658
1494
|
const dataResult = await this.client.execute({
|
|
1659
|
-
sql: `SELECT * ${baseQuery} ORDER BY ${
|
|
1660
|
-
args: [...queryParams,
|
|
1495
|
+
sql: `SELECT * ${baseQuery} ORDER BY "${field}" ${direction} LIMIT ? OFFSET ?`,
|
|
1496
|
+
args: [...queryParams, limitValue, offset]
|
|
1661
1497
|
});
|
|
1662
1498
|
const threads = (dataResult.rows || []).map(mapRowToStorageThreadType);
|
|
1663
1499
|
return {
|
|
1664
1500
|
threads,
|
|
1665
1501
|
total,
|
|
1666
1502
|
page,
|
|
1667
|
-
perPage,
|
|
1668
|
-
hasMore:
|
|
1503
|
+
perPage: perPageForResponse,
|
|
1504
|
+
hasMore: perPageInput === false ? false : offset + perPage < total
|
|
1669
1505
|
};
|
|
1670
1506
|
} catch (error$1) {
|
|
1671
1507
|
const mastraError = new error.MastraError(
|
|
1672
1508
|
{
|
|
1673
|
-
id: "
|
|
1509
|
+
id: "LIBSQL_STORE_LIST_THREADS_BY_RESOURCE_ID_FAILED",
|
|
1674
1510
|
domain: error.ErrorDomain.STORAGE,
|
|
1675
1511
|
category: error.ErrorCategory.THIRD_PARTY,
|
|
1676
1512
|
details: { resourceId }
|
|
@@ -1679,7 +1515,13 @@ var MemoryLibSQL = class extends storage.MemoryStorage {
|
|
|
1679
1515
|
);
|
|
1680
1516
|
this.logger?.trackException?.(mastraError);
|
|
1681
1517
|
this.logger?.error?.(mastraError.toString());
|
|
1682
|
-
return {
|
|
1518
|
+
return {
|
|
1519
|
+
threads: [],
|
|
1520
|
+
total: 0,
|
|
1521
|
+
page,
|
|
1522
|
+
perPage: perPageForResponse,
|
|
1523
|
+
hasMore: false
|
|
1524
|
+
};
|
|
1683
1525
|
}
|
|
1684
1526
|
}
|
|
1685
1527
|
async saveThread({ thread }) {
|
|
@@ -1950,7 +1792,7 @@ var ObservabilityLibSQL = class extends storage.ObservabilityStorage {
|
|
|
1950
1792
|
super();
|
|
1951
1793
|
this.operations = operations;
|
|
1952
1794
|
}
|
|
1953
|
-
async
|
|
1795
|
+
async createSpan(span) {
|
|
1954
1796
|
try {
|
|
1955
1797
|
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
1956
1798
|
const record = {
|
|
@@ -1958,11 +1800,11 @@ var ObservabilityLibSQL = class extends storage.ObservabilityStorage {
|
|
|
1958
1800
|
createdAt: now,
|
|
1959
1801
|
updatedAt: now
|
|
1960
1802
|
};
|
|
1961
|
-
return this.operations.insert({ tableName: storage.
|
|
1803
|
+
return this.operations.insert({ tableName: storage.TABLE_SPANS, record });
|
|
1962
1804
|
} catch (error$1) {
|
|
1963
1805
|
throw new error.MastraError(
|
|
1964
1806
|
{
|
|
1965
|
-
id: "
|
|
1807
|
+
id: "LIBSQL_STORE_CREATE_SPAN_FAILED",
|
|
1966
1808
|
domain: error.ErrorDomain.STORAGE,
|
|
1967
1809
|
category: error.ErrorCategory.USER,
|
|
1968
1810
|
details: {
|
|
@@ -1976,10 +1818,10 @@ var ObservabilityLibSQL = class extends storage.ObservabilityStorage {
|
|
|
1976
1818
|
);
|
|
1977
1819
|
}
|
|
1978
1820
|
}
|
|
1979
|
-
async
|
|
1821
|
+
async getTrace(traceId) {
|
|
1980
1822
|
try {
|
|
1981
1823
|
const spans = await this.operations.loadMany({
|
|
1982
|
-
tableName: storage.
|
|
1824
|
+
tableName: storage.TABLE_SPANS,
|
|
1983
1825
|
whereClause: { sql: " WHERE traceId = ?", args: [traceId] },
|
|
1984
1826
|
orderBy: "startedAt DESC"
|
|
1985
1827
|
});
|
|
@@ -1988,12 +1830,12 @@ var ObservabilityLibSQL = class extends storage.ObservabilityStorage {
|
|
|
1988
1830
|
}
|
|
1989
1831
|
return {
|
|
1990
1832
|
traceId,
|
|
1991
|
-
spans: spans.map((span) => transformFromSqlRow({ tableName: storage.
|
|
1833
|
+
spans: spans.map((span) => transformFromSqlRow({ tableName: storage.TABLE_SPANS, sqlRow: span }))
|
|
1992
1834
|
};
|
|
1993
1835
|
} catch (error$1) {
|
|
1994
1836
|
throw new error.MastraError(
|
|
1995
1837
|
{
|
|
1996
|
-
id: "
|
|
1838
|
+
id: "LIBSQL_STORE_GET_TRACE_FAILED",
|
|
1997
1839
|
domain: error.ErrorDomain.STORAGE,
|
|
1998
1840
|
category: error.ErrorCategory.USER,
|
|
1999
1841
|
details: {
|
|
@@ -2004,21 +1846,21 @@ var ObservabilityLibSQL = class extends storage.ObservabilityStorage {
|
|
|
2004
1846
|
);
|
|
2005
1847
|
}
|
|
2006
1848
|
}
|
|
2007
|
-
async
|
|
1849
|
+
async updateSpan({
|
|
2008
1850
|
spanId,
|
|
2009
1851
|
traceId,
|
|
2010
1852
|
updates
|
|
2011
1853
|
}) {
|
|
2012
1854
|
try {
|
|
2013
1855
|
await this.operations.update({
|
|
2014
|
-
tableName: storage.
|
|
1856
|
+
tableName: storage.TABLE_SPANS,
|
|
2015
1857
|
keys: { spanId, traceId },
|
|
2016
1858
|
data: { ...updates, updatedAt: (/* @__PURE__ */ new Date()).toISOString() }
|
|
2017
1859
|
});
|
|
2018
1860
|
} catch (error$1) {
|
|
2019
1861
|
throw new error.MastraError(
|
|
2020
1862
|
{
|
|
2021
|
-
id: "
|
|
1863
|
+
id: "LIBSQL_STORE_UPDATE_SPAN_FAILED",
|
|
2022
1864
|
domain: error.ErrorDomain.STORAGE,
|
|
2023
1865
|
category: error.ErrorCategory.USER,
|
|
2024
1866
|
details: {
|
|
@@ -2030,7 +1872,7 @@ var ObservabilityLibSQL = class extends storage.ObservabilityStorage {
|
|
|
2030
1872
|
);
|
|
2031
1873
|
}
|
|
2032
1874
|
}
|
|
2033
|
-
async
|
|
1875
|
+
async getTracesPaginated({
|
|
2034
1876
|
filters,
|
|
2035
1877
|
pagination
|
|
2036
1878
|
}) {
|
|
@@ -2042,7 +1884,7 @@ var ObservabilityLibSQL = class extends storage.ObservabilityStorage {
|
|
|
2042
1884
|
...buildDateRangeFilter(pagination?.dateRange, "startedAt"),
|
|
2043
1885
|
parentSpanId: null
|
|
2044
1886
|
};
|
|
2045
|
-
const whereClause = prepareWhereClause(filtersWithDateRange, storage.
|
|
1887
|
+
const whereClause = prepareWhereClause(filtersWithDateRange, storage.SPAN_SCHEMA);
|
|
2046
1888
|
let actualWhereClause = whereClause.sql || "";
|
|
2047
1889
|
if (entityId && entityType) {
|
|
2048
1890
|
const statement = `name = ?`;
|
|
@@ -2053,7 +1895,7 @@ var ObservabilityLibSQL = class extends storage.ObservabilityStorage {
|
|
|
2053
1895
|
name = `agent run: '${entityId}'`;
|
|
2054
1896
|
} else {
|
|
2055
1897
|
const error$1 = new error.MastraError({
|
|
2056
|
-
id: "
|
|
1898
|
+
id: "LIBSQL_STORE_GET_TRACES_PAGINATED_FAILED",
|
|
2057
1899
|
domain: error.ErrorDomain.STORAGE,
|
|
2058
1900
|
category: error.ErrorCategory.USER,
|
|
2059
1901
|
details: {
|
|
@@ -2075,13 +1917,13 @@ var ObservabilityLibSQL = class extends storage.ObservabilityStorage {
|
|
|
2075
1917
|
let count = 0;
|
|
2076
1918
|
try {
|
|
2077
1919
|
count = await this.operations.loadTotalCount({
|
|
2078
|
-
tableName: storage.
|
|
1920
|
+
tableName: storage.TABLE_SPANS,
|
|
2079
1921
|
whereClause: { sql: actualWhereClause, args: whereClause.args }
|
|
2080
1922
|
});
|
|
2081
1923
|
} catch (error$1) {
|
|
2082
1924
|
throw new error.MastraError(
|
|
2083
1925
|
{
|
|
2084
|
-
id: "
|
|
1926
|
+
id: "LIBSQL_STORE_GET_TRACES_PAGINATED_COUNT_FAILED",
|
|
2085
1927
|
domain: error.ErrorDomain.STORAGE,
|
|
2086
1928
|
category: error.ErrorCategory.USER
|
|
2087
1929
|
},
|
|
@@ -2101,7 +1943,7 @@ var ObservabilityLibSQL = class extends storage.ObservabilityStorage {
|
|
|
2101
1943
|
}
|
|
2102
1944
|
try {
|
|
2103
1945
|
const spans = await this.operations.loadMany({
|
|
2104
|
-
tableName: storage.
|
|
1946
|
+
tableName: storage.TABLE_SPANS,
|
|
2105
1947
|
whereClause: {
|
|
2106
1948
|
sql: actualWhereClause,
|
|
2107
1949
|
args: whereClause.args
|
|
@@ -2117,12 +1959,12 @@ var ObservabilityLibSQL = class extends storage.ObservabilityStorage {
|
|
|
2117
1959
|
perPage,
|
|
2118
1960
|
hasMore: spans.length === perPage
|
|
2119
1961
|
},
|
|
2120
|
-
spans: spans.map((span) => transformFromSqlRow({ tableName: storage.
|
|
1962
|
+
spans: spans.map((span) => transformFromSqlRow({ tableName: storage.TABLE_SPANS, sqlRow: span }))
|
|
2121
1963
|
};
|
|
2122
1964
|
} catch (error$1) {
|
|
2123
1965
|
throw new error.MastraError(
|
|
2124
1966
|
{
|
|
2125
|
-
id: "
|
|
1967
|
+
id: "LIBSQL_STORE_GET_TRACES_PAGINATED_FAILED",
|
|
2126
1968
|
domain: error.ErrorDomain.STORAGE,
|
|
2127
1969
|
category: error.ErrorCategory.USER
|
|
2128
1970
|
},
|
|
@@ -2130,11 +1972,11 @@ var ObservabilityLibSQL = class extends storage.ObservabilityStorage {
|
|
|
2130
1972
|
);
|
|
2131
1973
|
}
|
|
2132
1974
|
}
|
|
2133
|
-
async
|
|
1975
|
+
async batchCreateSpans(args) {
|
|
2134
1976
|
try {
|
|
2135
1977
|
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
2136
1978
|
return this.operations.batchInsert({
|
|
2137
|
-
tableName: storage.
|
|
1979
|
+
tableName: storage.TABLE_SPANS,
|
|
2138
1980
|
records: args.records.map((record) => ({
|
|
2139
1981
|
...record,
|
|
2140
1982
|
createdAt: now,
|
|
@@ -2144,7 +1986,7 @@ var ObservabilityLibSQL = class extends storage.ObservabilityStorage {
|
|
|
2144
1986
|
} catch (error$1) {
|
|
2145
1987
|
throw new error.MastraError(
|
|
2146
1988
|
{
|
|
2147
|
-
id: "
|
|
1989
|
+
id: "LIBSQL_STORE_BATCH_CREATE_SPANS_FAILED",
|
|
2148
1990
|
domain: error.ErrorDomain.STORAGE,
|
|
2149
1991
|
category: error.ErrorCategory.USER
|
|
2150
1992
|
},
|
|
@@ -2152,10 +1994,10 @@ var ObservabilityLibSQL = class extends storage.ObservabilityStorage {
|
|
|
2152
1994
|
);
|
|
2153
1995
|
}
|
|
2154
1996
|
}
|
|
2155
|
-
async
|
|
1997
|
+
async batchUpdateSpans(args) {
|
|
2156
1998
|
try {
|
|
2157
1999
|
return this.operations.batchUpdate({
|
|
2158
|
-
tableName: storage.
|
|
2000
|
+
tableName: storage.TABLE_SPANS,
|
|
2159
2001
|
updates: args.records.map((record) => ({
|
|
2160
2002
|
keys: { spanId: record.spanId, traceId: record.traceId },
|
|
2161
2003
|
data: { ...record.updates, updatedAt: (/* @__PURE__ */ new Date()).toISOString() }
|
|
@@ -2164,7 +2006,7 @@ var ObservabilityLibSQL = class extends storage.ObservabilityStorage {
|
|
|
2164
2006
|
} catch (error$1) {
|
|
2165
2007
|
throw new error.MastraError(
|
|
2166
2008
|
{
|
|
2167
|
-
id: "
|
|
2009
|
+
id: "LIBSQL_STORE_BATCH_UPDATE_SPANS_FAILED",
|
|
2168
2010
|
domain: error.ErrorDomain.STORAGE,
|
|
2169
2011
|
category: error.ErrorCategory.USER
|
|
2170
2012
|
},
|
|
@@ -2172,17 +2014,17 @@ var ObservabilityLibSQL = class extends storage.ObservabilityStorage {
|
|
|
2172
2014
|
);
|
|
2173
2015
|
}
|
|
2174
2016
|
}
|
|
2175
|
-
async
|
|
2017
|
+
async batchDeleteTraces(args) {
|
|
2176
2018
|
try {
|
|
2177
2019
|
const keys = args.traceIds.map((traceId) => ({ traceId }));
|
|
2178
2020
|
return this.operations.batchDelete({
|
|
2179
|
-
tableName: storage.
|
|
2021
|
+
tableName: storage.TABLE_SPANS,
|
|
2180
2022
|
keys
|
|
2181
2023
|
});
|
|
2182
2024
|
} catch (error$1) {
|
|
2183
2025
|
throw new error.MastraError(
|
|
2184
2026
|
{
|
|
2185
|
-
id: "
|
|
2027
|
+
id: "LIBSQL_STORE_BATCH_DELETE_TRACES_FAILED",
|
|
2186
2028
|
domain: error.ErrorDomain.STORAGE,
|
|
2187
2029
|
category: error.ErrorCategory.USER
|
|
2188
2030
|
},
|
|
@@ -2238,7 +2080,7 @@ var StoreOperationsLibSQL = class extends storage.StoreOperations {
|
|
|
2238
2080
|
)`;
|
|
2239
2081
|
return stmnt;
|
|
2240
2082
|
}
|
|
2241
|
-
if (tableName === storage.
|
|
2083
|
+
if (tableName === storage.TABLE_SPANS) {
|
|
2242
2084
|
const stmnt = `CREATE TABLE IF NOT EXISTS ${parsedTableName} (
|
|
2243
2085
|
${columns.join(",\n")},
|
|
2244
2086
|
PRIMARY KEY (traceId, spanId)
|
|
@@ -2586,22 +2428,44 @@ var ScoresLibSQL = class extends storage.ScoresStorage {
|
|
|
2586
2428
|
this.operations = operations;
|
|
2587
2429
|
this.client = client;
|
|
2588
2430
|
}
|
|
2589
|
-
async
|
|
2431
|
+
async listScoresByRunId({
|
|
2590
2432
|
runId,
|
|
2591
2433
|
pagination
|
|
2592
2434
|
}) {
|
|
2593
2435
|
try {
|
|
2436
|
+
const { page, perPage: perPageInput } = pagination;
|
|
2437
|
+
const countResult = await this.client.execute({
|
|
2438
|
+
sql: `SELECT COUNT(*) as count FROM ${storage.TABLE_SCORERS} WHERE runId = ?`,
|
|
2439
|
+
args: [runId]
|
|
2440
|
+
});
|
|
2441
|
+
const total = Number(countResult.rows?.[0]?.count ?? 0);
|
|
2442
|
+
if (total === 0) {
|
|
2443
|
+
return {
|
|
2444
|
+
pagination: {
|
|
2445
|
+
total: 0,
|
|
2446
|
+
page,
|
|
2447
|
+
perPage: perPageInput,
|
|
2448
|
+
hasMore: false
|
|
2449
|
+
},
|
|
2450
|
+
scores: []
|
|
2451
|
+
};
|
|
2452
|
+
}
|
|
2453
|
+
const perPage = storage.normalizePerPage(perPageInput, 100);
|
|
2454
|
+
const { offset: start, perPage: perPageForResponse } = storage.calculatePagination(page, perPageInput, perPage);
|
|
2455
|
+
const limitValue = perPageInput === false ? total : perPage;
|
|
2456
|
+
const end = perPageInput === false ? total : start + perPage;
|
|
2594
2457
|
const result = await this.client.execute({
|
|
2595
2458
|
sql: `SELECT * FROM ${storage.TABLE_SCORERS} WHERE runId = ? ORDER BY createdAt DESC LIMIT ? OFFSET ?`,
|
|
2596
|
-
args: [runId,
|
|
2459
|
+
args: [runId, limitValue, start]
|
|
2597
2460
|
});
|
|
2461
|
+
const scores = result.rows?.map((row) => this.transformScoreRow(row)) ?? [];
|
|
2598
2462
|
return {
|
|
2599
|
-
scores
|
|
2463
|
+
scores,
|
|
2600
2464
|
pagination: {
|
|
2601
|
-
total
|
|
2602
|
-
page
|
|
2603
|
-
perPage:
|
|
2604
|
-
hasMore:
|
|
2465
|
+
total,
|
|
2466
|
+
page,
|
|
2467
|
+
perPage: perPageForResponse,
|
|
2468
|
+
hasMore: end < total
|
|
2605
2469
|
}
|
|
2606
2470
|
};
|
|
2607
2471
|
} catch (error$1) {
|
|
@@ -2615,7 +2479,7 @@ var ScoresLibSQL = class extends storage.ScoresStorage {
|
|
|
2615
2479
|
);
|
|
2616
2480
|
}
|
|
2617
2481
|
}
|
|
2618
|
-
async
|
|
2482
|
+
async listScoresByScorerId({
|
|
2619
2483
|
scorerId,
|
|
2620
2484
|
entityId,
|
|
2621
2485
|
entityType,
|
|
@@ -2623,6 +2487,7 @@ var ScoresLibSQL = class extends storage.ScoresStorage {
|
|
|
2623
2487
|
pagination
|
|
2624
2488
|
}) {
|
|
2625
2489
|
try {
|
|
2490
|
+
const { page, perPage: perPageInput } = pagination;
|
|
2626
2491
|
const conditions = [];
|
|
2627
2492
|
const queryParams = [];
|
|
2628
2493
|
if (scorerId) {
|
|
@@ -2642,17 +2507,38 @@ var ScoresLibSQL = class extends storage.ScoresStorage {
|
|
|
2642
2507
|
queryParams.push(source);
|
|
2643
2508
|
}
|
|
2644
2509
|
const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "";
|
|
2510
|
+
const countResult = await this.client.execute({
|
|
2511
|
+
sql: `SELECT COUNT(*) as count FROM ${storage.TABLE_SCORERS} ${whereClause}`,
|
|
2512
|
+
args: queryParams
|
|
2513
|
+
});
|
|
2514
|
+
const total = Number(countResult.rows?.[0]?.count ?? 0);
|
|
2515
|
+
if (total === 0) {
|
|
2516
|
+
return {
|
|
2517
|
+
pagination: {
|
|
2518
|
+
total: 0,
|
|
2519
|
+
page,
|
|
2520
|
+
perPage: perPageInput,
|
|
2521
|
+
hasMore: false
|
|
2522
|
+
},
|
|
2523
|
+
scores: []
|
|
2524
|
+
};
|
|
2525
|
+
}
|
|
2526
|
+
const perPage = storage.normalizePerPage(perPageInput, 100);
|
|
2527
|
+
const { offset: start, perPage: perPageForResponse } = storage.calculatePagination(page, perPageInput, perPage);
|
|
2528
|
+
const limitValue = perPageInput === false ? total : perPage;
|
|
2529
|
+
const end = perPageInput === false ? total : start + perPage;
|
|
2645
2530
|
const result = await this.client.execute({
|
|
2646
2531
|
sql: `SELECT * FROM ${storage.TABLE_SCORERS} ${whereClause} ORDER BY createdAt DESC LIMIT ? OFFSET ?`,
|
|
2647
|
-
args: [...queryParams,
|
|
2532
|
+
args: [...queryParams, limitValue, start]
|
|
2648
2533
|
});
|
|
2534
|
+
const scores = result.rows?.map((row) => this.transformScoreRow(row)) ?? [];
|
|
2649
2535
|
return {
|
|
2650
|
-
scores
|
|
2536
|
+
scores,
|
|
2651
2537
|
pagination: {
|
|
2652
|
-
total
|
|
2653
|
-
page
|
|
2654
|
-
perPage:
|
|
2655
|
-
hasMore:
|
|
2538
|
+
total,
|
|
2539
|
+
page,
|
|
2540
|
+
perPage: perPageForResponse,
|
|
2541
|
+
hasMore: end < total
|
|
2656
2542
|
}
|
|
2657
2543
|
};
|
|
2658
2544
|
} catch (error$1) {
|
|
@@ -2671,7 +2557,7 @@ var ScoresLibSQL = class extends storage.ScoresStorage {
|
|
|
2671
2557
|
const inputValue = storage.safelyParseJSON(row.input ?? "{}");
|
|
2672
2558
|
const outputValue = storage.safelyParseJSON(row.output ?? "{}");
|
|
2673
2559
|
const additionalLLMContextValue = row.additionalLLMContext ? storage.safelyParseJSON(row.additionalLLMContext) : null;
|
|
2674
|
-
const
|
|
2560
|
+
const requestContextValue = row.requestContext ? storage.safelyParseJSON(row.requestContext) : null;
|
|
2675
2561
|
const metadataValue = row.metadata ? storage.safelyParseJSON(row.metadata) : null;
|
|
2676
2562
|
const entityValue = row.entity ? storage.safelyParseJSON(row.entity) : null;
|
|
2677
2563
|
const preprocessStepResultValue = row.preprocessStepResult ? storage.safelyParseJSON(row.preprocessStepResult) : null;
|
|
@@ -2694,7 +2580,7 @@ var ScoresLibSQL = class extends storage.ScoresStorage {
|
|
|
2694
2580
|
input: inputValue,
|
|
2695
2581
|
output: outputValue,
|
|
2696
2582
|
additionalContext: additionalLLMContextValue,
|
|
2697
|
-
|
|
2583
|
+
requestContext: requestContextValue,
|
|
2698
2584
|
entityType: row.entityType,
|
|
2699
2585
|
entity: entityValue,
|
|
2700
2586
|
entityId: row.entityId,
|
|
@@ -2716,7 +2602,7 @@ var ScoresLibSQL = class extends storage.ScoresStorage {
|
|
|
2716
2602
|
async saveScore(score) {
|
|
2717
2603
|
let parsedScore;
|
|
2718
2604
|
try {
|
|
2719
|
-
parsedScore =
|
|
2605
|
+
parsedScore = evals.saveScorePayloadSchema.parse(score);
|
|
2720
2606
|
} catch (error$1) {
|
|
2721
2607
|
throw new error.MastraError(
|
|
2722
2608
|
{
|
|
@@ -2724,7 +2610,7 @@ var ScoresLibSQL = class extends storage.ScoresStorage {
|
|
|
2724
2610
|
domain: error.ErrorDomain.STORAGE,
|
|
2725
2611
|
category: error.ErrorCategory.USER,
|
|
2726
2612
|
details: {
|
|
2727
|
-
scorer: score.scorer.
|
|
2613
|
+
scorer: score.scorer.id,
|
|
2728
2614
|
entityId: score.entityId,
|
|
2729
2615
|
entityType: score.entityType,
|
|
2730
2616
|
traceId: score.traceId || "",
|
|
@@ -2758,23 +2644,45 @@ var ScoresLibSQL = class extends storage.ScoresStorage {
|
|
|
2758
2644
|
);
|
|
2759
2645
|
}
|
|
2760
2646
|
}
|
|
2761
|
-
async
|
|
2647
|
+
async listScoresByEntityId({
|
|
2762
2648
|
entityId,
|
|
2763
2649
|
entityType,
|
|
2764
2650
|
pagination
|
|
2765
2651
|
}) {
|
|
2766
2652
|
try {
|
|
2653
|
+
const { page, perPage: perPageInput } = pagination;
|
|
2654
|
+
const countResult = await this.client.execute({
|
|
2655
|
+
sql: `SELECT COUNT(*) as count FROM ${storage.TABLE_SCORERS} WHERE entityId = ? AND entityType = ?`,
|
|
2656
|
+
args: [entityId, entityType]
|
|
2657
|
+
});
|
|
2658
|
+
const total = Number(countResult.rows?.[0]?.count ?? 0);
|
|
2659
|
+
if (total === 0) {
|
|
2660
|
+
return {
|
|
2661
|
+
pagination: {
|
|
2662
|
+
total: 0,
|
|
2663
|
+
page,
|
|
2664
|
+
perPage: perPageInput,
|
|
2665
|
+
hasMore: false
|
|
2666
|
+
},
|
|
2667
|
+
scores: []
|
|
2668
|
+
};
|
|
2669
|
+
}
|
|
2670
|
+
const perPage = storage.normalizePerPage(perPageInput, 100);
|
|
2671
|
+
const { offset: start, perPage: perPageForResponse } = storage.calculatePagination(page, perPageInput, perPage);
|
|
2672
|
+
const limitValue = perPageInput === false ? total : perPage;
|
|
2673
|
+
const end = perPageInput === false ? total : start + perPage;
|
|
2767
2674
|
const result = await this.client.execute({
|
|
2768
2675
|
sql: `SELECT * FROM ${storage.TABLE_SCORERS} WHERE entityId = ? AND entityType = ? ORDER BY createdAt DESC LIMIT ? OFFSET ?`,
|
|
2769
|
-
args: [entityId, entityType,
|
|
2676
|
+
args: [entityId, entityType, limitValue, start]
|
|
2770
2677
|
});
|
|
2678
|
+
const scores = result.rows?.map((row) => this.transformScoreRow(row)) ?? [];
|
|
2771
2679
|
return {
|
|
2772
|
-
scores
|
|
2680
|
+
scores,
|
|
2773
2681
|
pagination: {
|
|
2774
|
-
total
|
|
2775
|
-
page
|
|
2776
|
-
perPage:
|
|
2777
|
-
hasMore:
|
|
2682
|
+
total,
|
|
2683
|
+
page,
|
|
2684
|
+
perPage: perPageForResponse,
|
|
2685
|
+
hasMore: end < total
|
|
2778
2686
|
}
|
|
2779
2687
|
};
|
|
2780
2688
|
} catch (error$1) {
|
|
@@ -2788,30 +2696,34 @@ var ScoresLibSQL = class extends storage.ScoresStorage {
|
|
|
2788
2696
|
);
|
|
2789
2697
|
}
|
|
2790
2698
|
}
|
|
2791
|
-
async
|
|
2699
|
+
async listScoresBySpan({
|
|
2792
2700
|
traceId,
|
|
2793
2701
|
spanId,
|
|
2794
2702
|
pagination
|
|
2795
2703
|
}) {
|
|
2796
2704
|
try {
|
|
2705
|
+
const { page, perPage: perPageInput } = pagination;
|
|
2706
|
+
const perPage = storage.normalizePerPage(perPageInput, 100);
|
|
2707
|
+
const { offset: start, perPage: perPageForResponse } = storage.calculatePagination(page, perPageInput, perPage);
|
|
2797
2708
|
const countSQLResult = await this.client.execute({
|
|
2798
2709
|
sql: `SELECT COUNT(*) as count FROM ${storage.TABLE_SCORERS} WHERE traceId = ? AND spanId = ?`,
|
|
2799
2710
|
args: [traceId, spanId]
|
|
2800
2711
|
});
|
|
2801
2712
|
const total = Number(countSQLResult.rows?.[0]?.count ?? 0);
|
|
2713
|
+
const limitValue = perPageInput === false ? total : perPage;
|
|
2714
|
+
const end = perPageInput === false ? total : start + perPage;
|
|
2802
2715
|
const result = await this.client.execute({
|
|
2803
2716
|
sql: `SELECT * FROM ${storage.TABLE_SCORERS} WHERE traceId = ? AND spanId = ? ORDER BY createdAt DESC LIMIT ? OFFSET ?`,
|
|
2804
|
-
args: [traceId, spanId,
|
|
2717
|
+
args: [traceId, spanId, limitValue, start]
|
|
2805
2718
|
});
|
|
2806
|
-
const
|
|
2807
|
-
const scores = result.rows?.slice(0, pagination.perPage).map((row) => this.transformScoreRow(row)) ?? [];
|
|
2719
|
+
const scores = result.rows?.map((row) => this.transformScoreRow(row)) ?? [];
|
|
2808
2720
|
return {
|
|
2809
2721
|
scores,
|
|
2810
2722
|
pagination: {
|
|
2811
2723
|
total,
|
|
2812
|
-
page
|
|
2813
|
-
perPage:
|
|
2814
|
-
hasMore
|
|
2724
|
+
page,
|
|
2725
|
+
perPage: perPageForResponse,
|
|
2726
|
+
hasMore: end < total
|
|
2815
2727
|
}
|
|
2816
2728
|
};
|
|
2817
2729
|
} catch (error$1) {
|
|
@@ -2826,134 +2738,6 @@ var ScoresLibSQL = class extends storage.ScoresStorage {
|
|
|
2826
2738
|
}
|
|
2827
2739
|
}
|
|
2828
2740
|
};
|
|
2829
|
-
var TracesLibSQL = class extends storage.TracesStorage {
|
|
2830
|
-
client;
|
|
2831
|
-
operations;
|
|
2832
|
-
constructor({ client, operations }) {
|
|
2833
|
-
super();
|
|
2834
|
-
this.client = client;
|
|
2835
|
-
this.operations = operations;
|
|
2836
|
-
}
|
|
2837
|
-
async getTraces(args) {
|
|
2838
|
-
if (args.fromDate || args.toDate) {
|
|
2839
|
-
args.dateRange = {
|
|
2840
|
-
start: args.fromDate,
|
|
2841
|
-
end: args.toDate
|
|
2842
|
-
};
|
|
2843
|
-
}
|
|
2844
|
-
try {
|
|
2845
|
-
const result = await this.getTracesPaginated(args);
|
|
2846
|
-
return result.traces;
|
|
2847
|
-
} catch (error$1) {
|
|
2848
|
-
throw new error.MastraError(
|
|
2849
|
-
{
|
|
2850
|
-
id: "LIBSQL_STORE_GET_TRACES_FAILED",
|
|
2851
|
-
domain: error.ErrorDomain.STORAGE,
|
|
2852
|
-
category: error.ErrorCategory.THIRD_PARTY
|
|
2853
|
-
},
|
|
2854
|
-
error$1
|
|
2855
|
-
);
|
|
2856
|
-
}
|
|
2857
|
-
}
|
|
2858
|
-
async getTracesPaginated(args) {
|
|
2859
|
-
const { name, scope, page = 0, perPage = 100, attributes, filters, dateRange } = args;
|
|
2860
|
-
const fromDate = dateRange?.start;
|
|
2861
|
-
const toDate = dateRange?.end;
|
|
2862
|
-
const currentOffset = page * perPage;
|
|
2863
|
-
const queryArgs = [];
|
|
2864
|
-
const conditions = [];
|
|
2865
|
-
if (name) {
|
|
2866
|
-
conditions.push("name LIKE ?");
|
|
2867
|
-
queryArgs.push(`${name}%`);
|
|
2868
|
-
}
|
|
2869
|
-
if (scope) {
|
|
2870
|
-
conditions.push("scope = ?");
|
|
2871
|
-
queryArgs.push(scope);
|
|
2872
|
-
}
|
|
2873
|
-
if (attributes) {
|
|
2874
|
-
Object.entries(attributes).forEach(([key, value]) => {
|
|
2875
|
-
conditions.push(`json_extract(attributes, '$.${key}') = ?`);
|
|
2876
|
-
queryArgs.push(value);
|
|
2877
|
-
});
|
|
2878
|
-
}
|
|
2879
|
-
if (filters) {
|
|
2880
|
-
Object.entries(filters).forEach(([key, value]) => {
|
|
2881
|
-
conditions.push(`${utils.parseSqlIdentifier(key, "filter key")} = ?`);
|
|
2882
|
-
queryArgs.push(value);
|
|
2883
|
-
});
|
|
2884
|
-
}
|
|
2885
|
-
if (fromDate) {
|
|
2886
|
-
conditions.push("createdAt >= ?");
|
|
2887
|
-
queryArgs.push(fromDate.toISOString());
|
|
2888
|
-
}
|
|
2889
|
-
if (toDate) {
|
|
2890
|
-
conditions.push("createdAt <= ?");
|
|
2891
|
-
queryArgs.push(toDate.toISOString());
|
|
2892
|
-
}
|
|
2893
|
-
const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "";
|
|
2894
|
-
try {
|
|
2895
|
-
const countResult = await this.client.execute({
|
|
2896
|
-
sql: `SELECT COUNT(*) as count FROM ${storage.TABLE_TRACES} ${whereClause}`,
|
|
2897
|
-
args: queryArgs
|
|
2898
|
-
});
|
|
2899
|
-
const total = Number(countResult.rows?.[0]?.count ?? 0);
|
|
2900
|
-
if (total === 0) {
|
|
2901
|
-
return {
|
|
2902
|
-
traces: [],
|
|
2903
|
-
total: 0,
|
|
2904
|
-
page,
|
|
2905
|
-
perPage,
|
|
2906
|
-
hasMore: false
|
|
2907
|
-
};
|
|
2908
|
-
}
|
|
2909
|
-
const dataResult = await this.client.execute({
|
|
2910
|
-
sql: `SELECT * FROM ${storage.TABLE_TRACES} ${whereClause} ORDER BY "startTime" DESC LIMIT ? OFFSET ?`,
|
|
2911
|
-
args: [...queryArgs, perPage, currentOffset]
|
|
2912
|
-
});
|
|
2913
|
-
const traces = dataResult.rows?.map(
|
|
2914
|
-
(row) => ({
|
|
2915
|
-
id: row.id,
|
|
2916
|
-
parentSpanId: row.parentSpanId,
|
|
2917
|
-
traceId: row.traceId,
|
|
2918
|
-
name: row.name,
|
|
2919
|
-
scope: row.scope,
|
|
2920
|
-
kind: row.kind,
|
|
2921
|
-
status: storage.safelyParseJSON(row.status),
|
|
2922
|
-
events: storage.safelyParseJSON(row.events),
|
|
2923
|
-
links: storage.safelyParseJSON(row.links),
|
|
2924
|
-
attributes: storage.safelyParseJSON(row.attributes),
|
|
2925
|
-
startTime: row.startTime,
|
|
2926
|
-
endTime: row.endTime,
|
|
2927
|
-
other: storage.safelyParseJSON(row.other),
|
|
2928
|
-
createdAt: row.createdAt
|
|
2929
|
-
})
|
|
2930
|
-
) ?? [];
|
|
2931
|
-
return {
|
|
2932
|
-
traces,
|
|
2933
|
-
total,
|
|
2934
|
-
page,
|
|
2935
|
-
perPage,
|
|
2936
|
-
hasMore: currentOffset + traces.length < total
|
|
2937
|
-
};
|
|
2938
|
-
} catch (error$1) {
|
|
2939
|
-
throw new error.MastraError(
|
|
2940
|
-
{
|
|
2941
|
-
id: "LIBSQL_STORE_GET_TRACES_PAGINATED_FAILED",
|
|
2942
|
-
domain: error.ErrorDomain.STORAGE,
|
|
2943
|
-
category: error.ErrorCategory.THIRD_PARTY
|
|
2944
|
-
},
|
|
2945
|
-
error$1
|
|
2946
|
-
);
|
|
2947
|
-
}
|
|
2948
|
-
}
|
|
2949
|
-
async batchTraceInsert({ records }) {
|
|
2950
|
-
this.logger.debug("Batch inserting traces", { count: records.length });
|
|
2951
|
-
await this.operations.batchInsert({
|
|
2952
|
-
tableName: storage.TABLE_TRACES,
|
|
2953
|
-
records
|
|
2954
|
-
});
|
|
2955
|
-
}
|
|
2956
|
-
};
|
|
2957
2741
|
function parseWorkflowRun(row) {
|
|
2958
2742
|
let parsedSnapshot = row.snapshot;
|
|
2959
2743
|
if (typeof parsedSnapshot === "string") {
|
|
@@ -3055,7 +2839,7 @@ var WorkflowsLibSQL = class extends storage.WorkflowsStorage {
|
|
|
3055
2839
|
runId,
|
|
3056
2840
|
stepId,
|
|
3057
2841
|
result,
|
|
3058
|
-
|
|
2842
|
+
requestContext
|
|
3059
2843
|
}) {
|
|
3060
2844
|
return this.executeWithRetry(async () => {
|
|
3061
2845
|
const tx = await this.client.transaction("write");
|
|
@@ -3077,14 +2861,14 @@ var WorkflowsLibSQL = class extends storage.WorkflowsStorage {
|
|
|
3077
2861
|
waitingPaths: {},
|
|
3078
2862
|
status: "pending",
|
|
3079
2863
|
runId,
|
|
3080
|
-
|
|
2864
|
+
requestContext: {}
|
|
3081
2865
|
};
|
|
3082
2866
|
} else {
|
|
3083
2867
|
const existingSnapshot = existingSnapshotResult.rows[0].snapshot;
|
|
3084
2868
|
snapshot = typeof existingSnapshot === "string" ? JSON.parse(existingSnapshot) : existingSnapshot;
|
|
3085
2869
|
}
|
|
3086
2870
|
snapshot.context[stepId] = result;
|
|
3087
|
-
snapshot.
|
|
2871
|
+
snapshot.requestContext = { ...snapshot.requestContext, ...requestContext };
|
|
3088
2872
|
await tx.execute({
|
|
3089
2873
|
sql: `UPDATE ${storage.TABLE_WORKFLOW_SNAPSHOT} SET snapshot = ? WHERE workflow_name = ? AND run_id = ?`,
|
|
3090
2874
|
args: [JSON.stringify(snapshot), workflowName, runId]
|
|
@@ -3202,12 +2986,12 @@ var WorkflowsLibSQL = class extends storage.WorkflowsStorage {
|
|
|
3202
2986
|
);
|
|
3203
2987
|
}
|
|
3204
2988
|
}
|
|
3205
|
-
async
|
|
2989
|
+
async listWorkflowRuns({
|
|
3206
2990
|
workflowName,
|
|
3207
2991
|
fromDate,
|
|
3208
2992
|
toDate,
|
|
3209
|
-
|
|
3210
|
-
|
|
2993
|
+
page,
|
|
2994
|
+
perPage,
|
|
3211
2995
|
resourceId
|
|
3212
2996
|
} = {}) {
|
|
3213
2997
|
try {
|
|
@@ -3236,23 +3020,26 @@ var WorkflowsLibSQL = class extends storage.WorkflowsStorage {
|
|
|
3236
3020
|
}
|
|
3237
3021
|
const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "";
|
|
3238
3022
|
let total = 0;
|
|
3239
|
-
|
|
3023
|
+
const usePagination = typeof perPage === "number" && typeof page === "number";
|
|
3024
|
+
if (usePagination) {
|
|
3240
3025
|
const countResult = await this.client.execute({
|
|
3241
3026
|
sql: `SELECT COUNT(*) as count FROM ${storage.TABLE_WORKFLOW_SNAPSHOT} ${whereClause}`,
|
|
3242
3027
|
args
|
|
3243
3028
|
});
|
|
3244
3029
|
total = Number(countResult.rows?.[0]?.count ?? 0);
|
|
3245
3030
|
}
|
|
3031
|
+
const normalizedPerPage = usePagination ? storage.normalizePerPage(perPage, Number.MAX_SAFE_INTEGER) : 0;
|
|
3032
|
+
const offset = usePagination ? page * normalizedPerPage : 0;
|
|
3246
3033
|
const result = await this.client.execute({
|
|
3247
|
-
sql: `SELECT * FROM ${storage.TABLE_WORKFLOW_SNAPSHOT} ${whereClause} ORDER BY createdAt DESC${
|
|
3248
|
-
args:
|
|
3034
|
+
sql: `SELECT * FROM ${storage.TABLE_WORKFLOW_SNAPSHOT} ${whereClause} ORDER BY createdAt DESC${usePagination ? ` LIMIT ? OFFSET ?` : ""}`,
|
|
3035
|
+
args: usePagination ? [...args, normalizedPerPage, offset] : args
|
|
3249
3036
|
});
|
|
3250
3037
|
const runs = (result.rows || []).map((row) => parseWorkflowRun(row));
|
|
3251
3038
|
return { runs, total: total || runs.length };
|
|
3252
3039
|
} catch (error$1) {
|
|
3253
3040
|
throw new error.MastraError(
|
|
3254
3041
|
{
|
|
3255
|
-
id: "
|
|
3042
|
+
id: "LIBSQL_STORE_LIST_WORKFLOW_RUNS_FAILED",
|
|
3256
3043
|
domain: error.ErrorDomain.STORAGE,
|
|
3257
3044
|
category: error.ErrorCategory.THIRD_PARTY
|
|
3258
3045
|
},
|
|
@@ -3269,7 +3056,10 @@ var LibSQLStore = class extends storage.MastraStorage {
|
|
|
3269
3056
|
initialBackoffMs;
|
|
3270
3057
|
stores;
|
|
3271
3058
|
constructor(config) {
|
|
3272
|
-
|
|
3059
|
+
if (!config.id || typeof config.id !== "string" || config.id.trim() === "") {
|
|
3060
|
+
throw new Error("LibSQLStore: id must be provided and cannot be empty.");
|
|
3061
|
+
}
|
|
3062
|
+
super({ id: config.id, name: `LibSQLStore` });
|
|
3273
3063
|
this.maxRetries = config.maxRetries ?? 5;
|
|
3274
3064
|
this.initialBackoffMs = config.initialBackoffMs ?? 100;
|
|
3275
3065
|
if ("url" in config) {
|
|
@@ -3293,18 +3083,14 @@ var LibSQLStore = class extends storage.MastraStorage {
|
|
|
3293
3083
|
initialBackoffMs: this.initialBackoffMs
|
|
3294
3084
|
});
|
|
3295
3085
|
const scores = new ScoresLibSQL({ client: this.client, operations });
|
|
3296
|
-
const traces = new TracesLibSQL({ client: this.client, operations });
|
|
3297
3086
|
const workflows = new WorkflowsLibSQL({ client: this.client, operations });
|
|
3298
3087
|
const memory = new MemoryLibSQL({ client: this.client, operations });
|
|
3299
|
-
const legacyEvals = new LegacyEvalsLibSQL({ client: this.client });
|
|
3300
3088
|
const observability = new ObservabilityLibSQL({ operations });
|
|
3301
3089
|
this.stores = {
|
|
3302
3090
|
operations,
|
|
3303
3091
|
scores,
|
|
3304
|
-
traces,
|
|
3305
3092
|
workflows,
|
|
3306
3093
|
memory,
|
|
3307
|
-
legacyEvals,
|
|
3308
3094
|
observability
|
|
3309
3095
|
};
|
|
3310
3096
|
}
|
|
@@ -3315,8 +3101,8 @@ var LibSQLStore = class extends storage.MastraStorage {
|
|
|
3315
3101
|
hasColumn: true,
|
|
3316
3102
|
createTable: true,
|
|
3317
3103
|
deleteMessages: true,
|
|
3318
|
-
|
|
3319
|
-
|
|
3104
|
+
observabilityInstance: true,
|
|
3105
|
+
listScoresBySpan: true
|
|
3320
3106
|
};
|
|
3321
3107
|
}
|
|
3322
3108
|
async createTable({
|
|
@@ -3356,15 +3142,6 @@ var LibSQLStore = class extends storage.MastraStorage {
|
|
|
3356
3142
|
async getThreadById({ threadId }) {
|
|
3357
3143
|
return this.stores.memory.getThreadById({ threadId });
|
|
3358
3144
|
}
|
|
3359
|
-
/**
|
|
3360
|
-
* @deprecated use getThreadsByResourceIdPaginated instead for paginated results.
|
|
3361
|
-
*/
|
|
3362
|
-
async getThreadsByResourceId(args) {
|
|
3363
|
-
return this.stores.memory.getThreadsByResourceId(args);
|
|
3364
|
-
}
|
|
3365
|
-
async getThreadsByResourceIdPaginated(args) {
|
|
3366
|
-
return this.stores.memory.getThreadsByResourceIdPaginated(args);
|
|
3367
|
-
}
|
|
3368
3145
|
async saveThread({ thread }) {
|
|
3369
3146
|
return this.stores.memory.saveThread({ thread });
|
|
3370
3147
|
}
|
|
@@ -3378,24 +3155,12 @@ var LibSQLStore = class extends storage.MastraStorage {
|
|
|
3378
3155
|
async deleteThread({ threadId }) {
|
|
3379
3156
|
return this.stores.memory.deleteThread({ threadId });
|
|
3380
3157
|
}
|
|
3381
|
-
async
|
|
3382
|
-
|
|
3383
|
-
selectBy,
|
|
3384
|
-
format
|
|
3385
|
-
}) {
|
|
3386
|
-
return this.stores.memory.getMessages({ threadId, selectBy, format });
|
|
3387
|
-
}
|
|
3388
|
-
async getMessagesById({
|
|
3389
|
-
messageIds,
|
|
3390
|
-
format
|
|
3391
|
-
}) {
|
|
3392
|
-
return this.stores.memory.getMessagesById({ messageIds, format });
|
|
3393
|
-
}
|
|
3394
|
-
async getMessagesPaginated(args) {
|
|
3395
|
-
return this.stores.memory.getMessagesPaginated(args);
|
|
3158
|
+
async listMessagesById({ messageIds }) {
|
|
3159
|
+
return this.stores.memory.listMessagesById({ messageIds });
|
|
3396
3160
|
}
|
|
3397
3161
|
async saveMessages(args) {
|
|
3398
|
-
|
|
3162
|
+
const result = await this.stores.memory.saveMessages({ messages: args.messages });
|
|
3163
|
+
return { messages: result.messages };
|
|
3399
3164
|
}
|
|
3400
3165
|
async updateMessages({
|
|
3401
3166
|
messages
|
|
@@ -3405,55 +3170,33 @@ var LibSQLStore = class extends storage.MastraStorage {
|
|
|
3405
3170
|
async deleteMessages(messageIds) {
|
|
3406
3171
|
return this.stores.memory.deleteMessages(messageIds);
|
|
3407
3172
|
}
|
|
3408
|
-
/** @deprecated use getEvals instead */
|
|
3409
|
-
async getEvalsByAgentName(agentName, type) {
|
|
3410
|
-
return this.stores.legacyEvals.getEvalsByAgentName(agentName, type);
|
|
3411
|
-
}
|
|
3412
|
-
async getEvals(options = {}) {
|
|
3413
|
-
return this.stores.legacyEvals.getEvals(options);
|
|
3414
|
-
}
|
|
3415
3173
|
async getScoreById({ id }) {
|
|
3416
3174
|
return this.stores.scores.getScoreById({ id });
|
|
3417
3175
|
}
|
|
3418
3176
|
async saveScore(score) {
|
|
3419
3177
|
return this.stores.scores.saveScore(score);
|
|
3420
3178
|
}
|
|
3421
|
-
async
|
|
3179
|
+
async listScoresByScorerId({
|
|
3422
3180
|
scorerId,
|
|
3423
3181
|
entityId,
|
|
3424
3182
|
entityType,
|
|
3425
3183
|
source,
|
|
3426
3184
|
pagination
|
|
3427
3185
|
}) {
|
|
3428
|
-
return this.stores.scores.
|
|
3186
|
+
return this.stores.scores.listScoresByScorerId({ scorerId, entityId, entityType, source, pagination });
|
|
3429
3187
|
}
|
|
3430
|
-
async
|
|
3188
|
+
async listScoresByRunId({
|
|
3431
3189
|
runId,
|
|
3432
3190
|
pagination
|
|
3433
3191
|
}) {
|
|
3434
|
-
return this.stores.scores.
|
|
3192
|
+
return this.stores.scores.listScoresByRunId({ runId, pagination });
|
|
3435
3193
|
}
|
|
3436
|
-
async
|
|
3194
|
+
async listScoresByEntityId({
|
|
3437
3195
|
entityId,
|
|
3438
3196
|
entityType,
|
|
3439
3197
|
pagination
|
|
3440
3198
|
}) {
|
|
3441
|
-
return this.stores.scores.
|
|
3442
|
-
}
|
|
3443
|
-
/**
|
|
3444
|
-
* TRACES
|
|
3445
|
-
*/
|
|
3446
|
-
/**
|
|
3447
|
-
* @deprecated use getTracesPaginated instead.
|
|
3448
|
-
*/
|
|
3449
|
-
async getTraces(args) {
|
|
3450
|
-
return this.stores.traces.getTraces(args);
|
|
3451
|
-
}
|
|
3452
|
-
async getTracesPaginated(args) {
|
|
3453
|
-
return this.stores.traces.getTracesPaginated(args);
|
|
3454
|
-
}
|
|
3455
|
-
async batchTraceInsert(args) {
|
|
3456
|
-
return this.stores.traces.batchTraceInsert(args);
|
|
3199
|
+
return this.stores.scores.listScoresByEntityId({ entityId, entityType, pagination });
|
|
3457
3200
|
}
|
|
3458
3201
|
/**
|
|
3459
3202
|
* WORKFLOWS
|
|
@@ -3463,9 +3206,9 @@ var LibSQLStore = class extends storage.MastraStorage {
|
|
|
3463
3206
|
runId,
|
|
3464
3207
|
stepId,
|
|
3465
3208
|
result,
|
|
3466
|
-
|
|
3209
|
+
requestContext
|
|
3467
3210
|
}) {
|
|
3468
|
-
return this.stores.workflows.updateWorkflowResults({ workflowName, runId, stepId, result,
|
|
3211
|
+
return this.stores.workflows.updateWorkflowResults({ workflowName, runId, stepId, result, requestContext });
|
|
3469
3212
|
}
|
|
3470
3213
|
async updateWorkflowState({
|
|
3471
3214
|
workflowName,
|
|
@@ -3488,15 +3231,15 @@ var LibSQLStore = class extends storage.MastraStorage {
|
|
|
3488
3231
|
}) {
|
|
3489
3232
|
return this.stores.workflows.loadWorkflowSnapshot({ workflowName, runId });
|
|
3490
3233
|
}
|
|
3491
|
-
async
|
|
3234
|
+
async listWorkflowRuns({
|
|
3492
3235
|
workflowName,
|
|
3493
3236
|
fromDate,
|
|
3494
3237
|
toDate,
|
|
3495
|
-
|
|
3496
|
-
|
|
3238
|
+
perPage,
|
|
3239
|
+
page,
|
|
3497
3240
|
resourceId
|
|
3498
3241
|
} = {}) {
|
|
3499
|
-
return this.stores.workflows.
|
|
3242
|
+
return this.stores.workflows.listWorkflowRuns({ workflowName, fromDate, toDate, perPage, page, resourceId });
|
|
3500
3243
|
}
|
|
3501
3244
|
async getWorkflowRunById({
|
|
3502
3245
|
runId,
|
|
@@ -3517,30 +3260,30 @@ var LibSQLStore = class extends storage.MastraStorage {
|
|
|
3517
3260
|
}) {
|
|
3518
3261
|
return this.stores.memory.updateResource({ resourceId, workingMemory, metadata });
|
|
3519
3262
|
}
|
|
3520
|
-
async
|
|
3521
|
-
return this.stores.observability.
|
|
3263
|
+
async createSpan(span) {
|
|
3264
|
+
return this.stores.observability.createSpan(span);
|
|
3522
3265
|
}
|
|
3523
|
-
async
|
|
3524
|
-
return this.stores.observability.
|
|
3266
|
+
async updateSpan(params) {
|
|
3267
|
+
return this.stores.observability.updateSpan(params);
|
|
3525
3268
|
}
|
|
3526
|
-
async
|
|
3527
|
-
return this.stores.observability.
|
|
3269
|
+
async getTrace(traceId) {
|
|
3270
|
+
return this.stores.observability.getTrace(traceId);
|
|
3528
3271
|
}
|
|
3529
|
-
async
|
|
3530
|
-
return this.stores.observability.
|
|
3272
|
+
async getTracesPaginated(args) {
|
|
3273
|
+
return this.stores.observability.getTracesPaginated(args);
|
|
3531
3274
|
}
|
|
3532
|
-
async
|
|
3275
|
+
async listScoresBySpan({
|
|
3533
3276
|
traceId,
|
|
3534
3277
|
spanId,
|
|
3535
3278
|
pagination
|
|
3536
3279
|
}) {
|
|
3537
|
-
return this.stores.scores.
|
|
3280
|
+
return this.stores.scores.listScoresBySpan({ traceId, spanId, pagination });
|
|
3538
3281
|
}
|
|
3539
|
-
async
|
|
3540
|
-
return this.stores.observability.
|
|
3282
|
+
async batchCreateSpans(args) {
|
|
3283
|
+
return this.stores.observability.batchCreateSpans(args);
|
|
3541
3284
|
}
|
|
3542
|
-
async
|
|
3543
|
-
return this.stores.observability.
|
|
3285
|
+
async batchUpdateSpans(args) {
|
|
3286
|
+
return this.stores.observability.batchUpdateSpans(args);
|
|
3544
3287
|
}
|
|
3545
3288
|
};
|
|
3546
3289
|
|