@mastra/duckdb 1.19.0-alpha.2 → 1.19.0-alpha.3

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.
@@ -1151,11 +1151,11 @@ function getComparisonDateRange$1(comparePeriod, timestamp) {
1151
1151
  }
1152
1152
  }
1153
1153
  /** Insert a single feedback event. */
1154
- async function createFeedback(db, args) {
1154
+ async function createFeedback(db, args, preserveIdentity = false) {
1155
1155
  const f = args.feedback;
1156
1156
  const feedbackSource = f.feedbackSource ?? f.source ?? "";
1157
1157
  const feedbackUserId = f.feedbackUserId !== void 0 ? f.feedbackUserId : f.userId ?? null;
1158
- await db.execute(`INSERT INTO feedback_events (
1158
+ const sql = `INSERT INTO feedback_events (
1159
1159
  feedbackId, timestamp, cursorId, traceId, spanId, experimentId,
1160
1160
  entityType, entityId, entityName, entityVersionId, parentEntityVersionId, parentEntityType, parentEntityId, parentEntityName, rootEntityVersionId, rootEntityType, rootEntityId, rootEntityName,
1161
1161
  userId, organizationId, resourceId, runId, sessionId, threadId, requestId, environment, executionSource, serviceName,
@@ -1203,12 +1203,25 @@ async function createFeedback(db, args) {
1203
1203
  jsonV(f.metadata),
1204
1204
  jsonV(f.scope ?? null)
1205
1205
  ].join(", ")})
1206
- ${FEEDBACK_UPSERT_CLAUSE}`);
1206
+ ${args.onConflict === "ignore" ? "ON CONFLICT DO NOTHING" : FEEDBACK_UPSERT_CLAUSE}`;
1207
+ if (preserveIdentity) {
1208
+ if (!(await db.query(`${sql}
1209
+ WHERE feedback_events.traceId IS NOT DISTINCT FROM excluded.traceId
1210
+ AND feedback_events.timestamp IS NOT DISTINCT FROM excluded.timestamp
1211
+ AND feedback_events.organizationId IS NOT DISTINCT FROM excluded.organizationId
1212
+ AND feedback_events.resourceId IS NOT DISTINCT FROM excluded.resourceId
1213
+ RETURNING feedbackId`)).length) throw new _mastra_core_error.MastraError({
1214
+ id: "OBSERVABILITY_FEEDBACK_IDENTITY_CONFLICT",
1215
+ domain: _mastra_core_error.ErrorDomain.MASTRA_OBSERVABILITY,
1216
+ category: _mastra_core_error.ErrorCategory.USER,
1217
+ text: "Feedback replacement must preserve its trace, timestamp, and tenant"
1218
+ });
1219
+ } else await db.execute(sql);
1207
1220
  }
1208
1221
  /** Insert multiple feedback events in a single statement. */
1209
1222
  async function batchCreateFeedback(db, args) {
1210
1223
  if (args.feedbacks.length === 0) return;
1211
- const tuples = [...new Map(args.feedbacks.map((feedback) => [feedback.feedbackId, feedback])).values()].map((f) => {
1224
+ const tuples = [...new Map((args.onConflict === "ignore" ? [...args.feedbacks].reverse() : args.feedbacks).map((feedback) => [feedback.feedbackId, feedback])).values()].map((f) => {
1212
1225
  const legacyFeedback = f;
1213
1226
  const feedbackSource = legacyFeedback.feedbackSource ?? legacyFeedback.source ?? "";
1214
1227
  const feedbackUserId = legacyFeedback.feedbackUserId !== void 0 ? legacyFeedback.feedbackUserId : legacyFeedback.userId ?? null;
@@ -1262,7 +1275,7 @@ async function batchCreateFeedback(db, args) {
1262
1275
  feedbackUserId, sourceId, reviewStatus, feedbackSource, feedbackType, value, valueString, valueNumber, comment, tags, metadata, scope
1263
1276
  )
1264
1277
  VALUES ${tuples.join(",\n ")}
1265
- ${FEEDBACK_UPSERT_CLAUSE}`);
1278
+ ${args.onConflict === "ignore" ? "ON CONFLICT DO NOTHING" : FEEDBACK_UPSERT_CLAUSE}`);
1266
1279
  }
1267
1280
  /**
1268
1281
  * Delete feedback events by feedbackId. Optional `organizationId` and
@@ -6500,6 +6513,7 @@ var ObservabilityStorageDuckDB = class ObservabilityStorageDuckDB extends _mastr
6500
6513
  "thread-query",
6501
6514
  "trace-query-tenant-scope",
6502
6515
  "feedback",
6516
+ "feedback-replacement",
6503
6517
  "trace-query-context-ids",
6504
6518
  ...require_features.contextFieldFeatures,
6505
6519
  ...require_features.timingFeatures,
@@ -6528,6 +6542,7 @@ var ObservabilityStorageDuckDB = class ObservabilityStorageDuckDB extends _mastr
6528
6542
  "thread-query",
6529
6543
  "trace-query-tenant-scope",
6530
6544
  "feedback",
6545
+ "feedback-replacement",
6531
6546
  "trace-query-context-ids",
6532
6547
  ...require_features.contextFieldFeatures,
6533
6548
  ...require_features.timingFeatures,
@@ -6670,6 +6685,12 @@ var ObservabilityStorageDuckDB = class ObservabilityStorageDuckDB extends _mastr
6670
6685
  async getScorePercentiles(args) {
6671
6686
  return getScorePercentiles(this.db, args);
6672
6687
  }
6688
+ async writeFeedbackReplacement(args) {
6689
+ return createFeedback(this.db, {
6690
+ feedback: args.feedback,
6691
+ onConflict: "replace"
6692
+ }, true);
6693
+ }
6673
6694
  async createFeedback(args) {
6674
6695
  return createFeedback(this.db, args);
6675
6696
  }
@@ -6700,4 +6721,4 @@ var ObservabilityStorageDuckDB = class ObservabilityStorageDuckDB extends _mastr
6700
6721
  };
6701
6722
  exports.ObservabilityStorageDuckDB = ObservabilityStorageDuckDB;
6702
6723
 
6703
- //# sourceMappingURL=observability-Dw-rZPtV.cjs.map
6724
+ //# sourceMappingURL=observability-DGLhUhwg.cjs.map