@mastra/duckdb 1.8.0-alpha.1 → 1.8.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.
@@ -3,7 +3,7 @@ name: mastra-duckdb
3
3
  description: Documentation for @mastra/duckdb. Use when working with @mastra/duckdb APIs, configuration, or implementation.
4
4
  metadata:
5
5
  package: "@mastra/duckdb"
6
- version: "1.8.0-alpha.1"
6
+ version: "1.8.0"
7
7
  ---
8
8
 
9
9
  ## When to use
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.8.0-alpha.1",
2
+ "version": "1.8.0",
3
3
  "package": "@mastra/duckdb",
4
4
  "exports": {},
5
5
  "modules": {}
package/dist/index.cjs CHANGED
@@ -528,7 +528,7 @@ var ObservabilityStorageDuckDB = class extends _mastra_core_storage.Observabilit
528
528
  async loadDelegate() {
529
529
  if (this.delegate) return this.delegate;
530
530
  if (this.unavailableError) return null;
531
- if (!this.loadPromise) this.loadPromise = Promise.resolve().then(() => require("./observability-DlMgmuxw.cjs")).then(({ ObservabilityStorageDuckDB }) => {
531
+ if (!this.loadPromise) this.loadPromise = Promise.resolve().then(() => require("./observability-BZcL6fKR.cjs")).then(({ ObservabilityStorageDuckDB }) => {
532
532
  const delegate = new ObservabilityStorageDuckDB({ db: this.db });
533
533
  this.delegate = delegate;
534
534
  return delegate;
package/dist/index.js CHANGED
@@ -527,7 +527,7 @@ var ObservabilityStorageDuckDB = class extends ObservabilityStorage {
527
527
  async loadDelegate() {
528
528
  if (this.delegate) return this.delegate;
529
529
  if (this.unavailableError) return null;
530
- if (!this.loadPromise) this.loadPromise = import("./observability-2dvzwZpP.js").then(({ ObservabilityStorageDuckDB }) => {
530
+ if (!this.loadPromise) this.loadPromise = import("./observability-COgD6BOK.js").then(({ ObservabilityStorageDuckDB }) => {
531
531
  const delegate = new ObservabilityStorageDuckDB({ db: this.db });
532
532
  this.delegate = delegate;
533
533
  return delegate;
@@ -767,6 +767,45 @@ function parseUpdateFeedbackReviewStatusArgs(args) {
767
767
  }
768
768
  //#endregion
769
769
  //#region src/storage/domains/observability/feedback.ts
770
+ const FEEDBACK_UPSERT_CLAUSE = `ON CONFLICT (feedbackId) DO UPDATE SET ${[
771
+ "timestamp",
772
+ "cursorId",
773
+ "traceId",
774
+ "spanId",
775
+ "experimentId",
776
+ "entityType",
777
+ "entityId",
778
+ "entityName",
779
+ "entityVersionId",
780
+ "parentEntityVersionId",
781
+ "parentEntityType",
782
+ "parentEntityId",
783
+ "parentEntityName",
784
+ "rootEntityVersionId",
785
+ "rootEntityType",
786
+ "rootEntityId",
787
+ "rootEntityName",
788
+ "userId",
789
+ "organizationId",
790
+ "resourceId",
791
+ "runId",
792
+ "sessionId",
793
+ "threadId",
794
+ "requestId",
795
+ "environment",
796
+ "executionSource",
797
+ "serviceName",
798
+ "feedbackUserId",
799
+ "sourceId",
800
+ "reviewStatus",
801
+ "feedbackSource",
802
+ "feedbackType",
803
+ "value",
804
+ "comment",
805
+ "tags",
806
+ "metadata",
807
+ "scope"
808
+ ].map((column) => `${column} = excluded.${column}`).join(", ")}`;
770
809
  const FEEDBACK_GROUP_BY_COLUMNS = /* @__PURE__ */ new Set([
771
810
  "timestamp",
772
811
  "traceId",
@@ -983,12 +1022,12 @@ async function createFeedback(db, args) {
983
1022
  jsonV(f.metadata),
984
1023
  jsonV(f.scope ?? null)
985
1024
  ].join(", ")})
986
- ON CONFLICT DO NOTHING`);
1025
+ ${FEEDBACK_UPSERT_CLAUSE}`);
987
1026
  }
988
1027
  /** Insert multiple feedback events in a single statement. */
989
1028
  async function batchCreateFeedback(db, args) {
990
1029
  if (args.feedbacks.length === 0) return;
991
- const tuples = args.feedbacks.map((f) => {
1030
+ const tuples = [...new Map(args.feedbacks.map((feedback) => [feedback.feedbackId, feedback])).values()].map((f) => {
992
1031
  const legacyFeedback = f;
993
1032
  const feedbackSource = legacyFeedback.feedbackSource ?? legacyFeedback.source ?? "";
994
1033
  const feedbackUserId = legacyFeedback.feedbackUserId ?? legacyFeedback.userId ?? null;
@@ -1040,7 +1079,7 @@ async function batchCreateFeedback(db, args) {
1040
1079
  feedbackUserId, sourceId, reviewStatus, feedbackSource, feedbackType, value, comment, tags, metadata, scope
1041
1080
  )
1042
1081
  VALUES ${tuples.join(",\n ")}
1043
- ON CONFLICT DO NOTHING`);
1082
+ ${FEEDBACK_UPSERT_CLAUSE}`);
1044
1083
  }
1045
1084
  /**
1046
1085
  * Delete feedback events by feedbackId. Optional `organizationId` and
@@ -2761,6 +2800,44 @@ const SCORE_FIELDS = {
2761
2800
  parameterType: "scalar"
2762
2801
  }
2763
2802
  };
2803
+ const FEEDBACK_FIELDS = {
2804
+ feedbackType: {
2805
+ sql: "s.feedbackType",
2806
+ parameterType: "scalar"
2807
+ },
2808
+ feedbackSource: {
2809
+ sql: "s.feedbackSource",
2810
+ parameterType: "scalar"
2811
+ },
2812
+ feedbackUserId: {
2813
+ sql: "s.feedbackUserId",
2814
+ parameterType: "scalar"
2815
+ },
2816
+ sourceId: {
2817
+ sql: "s.sourceId",
2818
+ parameterType: "scalar"
2819
+ },
2820
+ entityVersionId: {
2821
+ sql: "s.entityVersionId",
2822
+ parameterType: "scalar"
2823
+ },
2824
+ parentEntityVersionId: {
2825
+ sql: "s.parentEntityVersionId",
2826
+ parameterType: "scalar"
2827
+ },
2828
+ rootEntityVersionId: {
2829
+ sql: "s.rootEntityVersionId",
2830
+ parameterType: "scalar"
2831
+ },
2832
+ timestamp: {
2833
+ sql: "s.timestamp",
2834
+ parameterType: "timestamp"
2835
+ },
2836
+ comment: {
2837
+ sql: "s.comment",
2838
+ parameterType: "scalar"
2839
+ }
2840
+ };
2764
2841
  const TRACE_SELECT = `
2765
2842
  r.traceId AS traceId,
2766
2843
  r.spanId AS rootSpanId,
@@ -2863,12 +2940,40 @@ function compileScalarPredicate(predicate, registry, allowMetadata = false) {
2863
2940
  ]
2864
2941
  };
2865
2942
  }
2943
+ function compileFeedbackScalarPredicate(predicate) {
2944
+ if (predicate.type === "boolean") {
2945
+ const values = [];
2946
+ return {
2947
+ sql: predicate.args.map((arg) => {
2948
+ const compiled = compileFeedbackScalarPredicate(arg);
2949
+ values.push(...compiled.values);
2950
+ return `(${compiled.sql})`;
2951
+ }).join(predicate.operator === "and" ? " AND " : " OR "),
2952
+ values
2953
+ };
2954
+ }
2955
+ if (predicate.type === "not") {
2956
+ const compiled = compileFeedbackScalarPredicate(predicate.arg);
2957
+ return {
2958
+ sql: `NOT (${compiled.sql})`,
2959
+ values: compiled.values
2960
+ };
2961
+ }
2962
+ if (predicate.field !== "value") return compileScalarPredicate(predicate, FEEDBACK_FIELDS);
2963
+ if (predicate.type === "presence") return {
2964
+ sql: `s.value IS ${predicate.operator === "exists" ? "NOT " : ""}NULL`,
2965
+ values: []
2966
+ };
2967
+ return compileScalarPredicate(predicate, { value: {
2968
+ sql: typeof (predicate.type === "membership" ? predicate.values[0] : predicate.value) === "number" ? "TRY_CAST(s.value AS DOUBLE)" : "s.value",
2969
+ parameterType: "scalar"
2970
+ } });
2971
+ }
2866
2972
  function compilePredicate(predicate) {
2867
2973
  if (predicate.type === "relation") {
2868
- const registry = predicate.collection === "spans" ? SPAN_FIELDS : SCORE_FIELDS;
2869
- const compiled = compileScalarPredicate(predicate.predicate, registry);
2974
+ const compiled = predicate.collection === "feedback" ? compileFeedbackScalarPredicate(predicate.predicate) : compileScalarPredicate(predicate.predicate, predicate.collection === "spans" ? SPAN_FIELDS : SCORE_FIELDS);
2870
2975
  const existence = `EXISTS (
2871
- SELECT 1 FROM ${predicate.collection === "spans" ? "current_spans" : "current_scores"} s
2976
+ SELECT 1 FROM ${predicate.collection === "spans" ? "current_spans" : predicate.collection === "scores" ? "current_scores" : "current_feedback"} s
2872
2977
  WHERE s.traceId IS NOT NULL
2873
2978
  AND s.traceId = r.traceId
2874
2979
  AND (${compiled.sql})
@@ -2988,6 +3093,11 @@ function compileDuckDBTraceQuery(plan) {
2988
3093
  SELECT s.*
2989
3094
  FROM score_events s
2990
3095
  INNER JOIN root_scope roots ON roots.traceId = s.traceId
3096
+ )`);
3097
+ if (relatedCollections.has("feedback")) ctes.push(`current_feedback AS (
3098
+ SELECT f.*
3099
+ FROM feedback_events f
3100
+ INNER JOIN root_scope roots ON roots.traceId = f.traceId
2991
3101
  )`);
2992
3102
  ctes.push(`candidates AS (
2993
3103
  SELECT ${TRACE_SELECT}
@@ -4459,4 +4569,4 @@ var ObservabilityStorageDuckDB = class extends _mastra_core_storage.Observabilit
4459
4569
  //#endregion
4460
4570
  exports.ObservabilityStorageDuckDB = ObservabilityStorageDuckDB;
4461
4571
 
4462
- //# sourceMappingURL=observability-DlMgmuxw.cjs.map
4572
+ //# sourceMappingURL=observability-BZcL6fKR.cjs.map