@llmops/sdk 1.0.0-beta.16 → 1.0.0-beta.17

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/dist/store/d1.cjs CHANGED
@@ -1,6 +1,26 @@
1
1
  let node_crypto = require("node:crypto");
2
2
 
3
3
  //#region src/store/d1/d1-store.ts
4
+ /** JSON columns stored as TEXT in D1 — parse them back to objects on read */
5
+ const JSON_COLUMNS = new Set([
6
+ "tags",
7
+ "metadata",
8
+ "attributes",
9
+ "guardrailResults",
10
+ "input",
11
+ "output"
12
+ ]);
13
+ function parseJsonColumns(row) {
14
+ if (!row || typeof row !== "object") return row;
15
+ const parsed = { ...row };
16
+ for (const key of Object.keys(parsed)) if (JSON_COLUMNS.has(key) && typeof parsed[key] === "string") try {
17
+ parsed[key] = JSON.parse(parsed[key]);
18
+ } catch {}
19
+ return parsed;
20
+ }
21
+ function parseJsonRows(rows) {
22
+ return rows.map(parseJsonColumns);
23
+ }
4
24
  function buildTagFilters(tags) {
5
25
  const conditions = [];
6
26
  const params = [];
@@ -100,16 +120,17 @@ function createD1LLMRequestsStore(db) {
100
120
  queryParams.push(...tagFilter.params);
101
121
  const where = conditions.join(" AND ");
102
122
  const total = (await db.prepare(`SELECT COUNT(*) AS "total" FROM "llm_requests" WHERE ${where}`).bind(...queryParams).first())?.total ?? 0;
103
- const { results: data } = await db.prepare(`SELECT * FROM "llm_requests" WHERE ${where} ORDER BY "createdAt" DESC LIMIT ? OFFSET ?`).bind(...queryParams, limit, offset).all();
123
+ const { results } = await db.prepare(`SELECT * FROM "llm_requests" WHERE ${where} ORDER BY "createdAt" DESC LIMIT ? OFFSET ?`).bind(...queryParams, limit, offset).all();
104
124
  return {
105
- data,
125
+ data: parseJsonRows(results),
106
126
  total,
107
127
  limit,
108
128
  offset
109
129
  };
110
130
  },
111
131
  getRequestByRequestId: async (requestId) => {
112
- return db.prepare(`SELECT * FROM "llm_requests" WHERE "requestId" = ?`).bind(requestId).first();
132
+ const row = await db.prepare(`SELECT * FROM "llm_requests" WHERE "requestId" = ?`).bind(requestId).first();
133
+ return row ? parseJsonColumns(row) : void 0;
113
134
  },
114
135
  getTotalCost: async (params) => {
115
136
  const conditions = [`"createdAt" >= ?`, `"createdAt" <= ?`];
@@ -386,9 +407,9 @@ function createD1TracesStore(db) {
386
407
  queryParams.push(...tagFilter.params);
387
408
  const where = conditions.join(" AND ");
388
409
  const total = (await db.prepare(`SELECT COUNT(*) AS "total" FROM "traces" WHERE ${where}`).bind(...queryParams).first())?.total ?? 0;
389
- const { results: data } = await db.prepare(`SELECT * FROM "traces" WHERE ${where} ORDER BY "startTime" DESC LIMIT ? OFFSET ?`).bind(...queryParams, limit, offset).all();
410
+ const { results } = await db.prepare(`SELECT * FROM "traces" WHERE ${where} ORDER BY "startTime" DESC LIMIT ? OFFSET ?`).bind(...queryParams, limit, offset).all();
390
411
  return {
391
- data,
412
+ data: parseJsonRows(results),
392
413
  total,
393
414
  limit,
394
415
  offset
@@ -399,9 +420,9 @@ function createD1TracesStore(db) {
399
420
  if (!trace) return void 0;
400
421
  const [spanResult, eventResult] = await db.batch([db.prepare(`SELECT * FROM "spans" WHERE "traceId" = ? ORDER BY "startTime" ASC`).bind(traceId), db.prepare(`SELECT * FROM "span_events" WHERE "traceId" = ? ORDER BY "timestamp" ASC`).bind(traceId)]);
401
422
  return {
402
- trace,
403
- spans: spanResult.results ?? [],
404
- events: eventResult.results ?? []
423
+ trace: parseJsonColumns(trace),
424
+ spans: parseJsonRows(spanResult.results ?? []),
425
+ events: parseJsonRows(eventResult.results ?? [])
405
426
  };
406
427
  },
407
428
  getTraceStats: async (params) => {
package/dist/store/d1.mjs CHANGED
@@ -1,6 +1,26 @@
1
1
  import { randomUUID } from "node:crypto";
2
2
 
3
3
  //#region src/store/d1/d1-store.ts
4
+ /** JSON columns stored as TEXT in D1 — parse them back to objects on read */
5
+ const JSON_COLUMNS = new Set([
6
+ "tags",
7
+ "metadata",
8
+ "attributes",
9
+ "guardrailResults",
10
+ "input",
11
+ "output"
12
+ ]);
13
+ function parseJsonColumns(row) {
14
+ if (!row || typeof row !== "object") return row;
15
+ const parsed = { ...row };
16
+ for (const key of Object.keys(parsed)) if (JSON_COLUMNS.has(key) && typeof parsed[key] === "string") try {
17
+ parsed[key] = JSON.parse(parsed[key]);
18
+ } catch {}
19
+ return parsed;
20
+ }
21
+ function parseJsonRows(rows) {
22
+ return rows.map(parseJsonColumns);
23
+ }
4
24
  function buildTagFilters(tags) {
5
25
  const conditions = [];
6
26
  const params = [];
@@ -100,16 +120,17 @@ function createD1LLMRequestsStore(db) {
100
120
  queryParams.push(...tagFilter.params);
101
121
  const where = conditions.join(" AND ");
102
122
  const total = (await db.prepare(`SELECT COUNT(*) AS "total" FROM "llm_requests" WHERE ${where}`).bind(...queryParams).first())?.total ?? 0;
103
- const { results: data } = await db.prepare(`SELECT * FROM "llm_requests" WHERE ${where} ORDER BY "createdAt" DESC LIMIT ? OFFSET ?`).bind(...queryParams, limit, offset).all();
123
+ const { results } = await db.prepare(`SELECT * FROM "llm_requests" WHERE ${where} ORDER BY "createdAt" DESC LIMIT ? OFFSET ?`).bind(...queryParams, limit, offset).all();
104
124
  return {
105
- data,
125
+ data: parseJsonRows(results),
106
126
  total,
107
127
  limit,
108
128
  offset
109
129
  };
110
130
  },
111
131
  getRequestByRequestId: async (requestId) => {
112
- return db.prepare(`SELECT * FROM "llm_requests" WHERE "requestId" = ?`).bind(requestId).first();
132
+ const row = await db.prepare(`SELECT * FROM "llm_requests" WHERE "requestId" = ?`).bind(requestId).first();
133
+ return row ? parseJsonColumns(row) : void 0;
113
134
  },
114
135
  getTotalCost: async (params) => {
115
136
  const conditions = [`"createdAt" >= ?`, `"createdAt" <= ?`];
@@ -386,9 +407,9 @@ function createD1TracesStore(db) {
386
407
  queryParams.push(...tagFilter.params);
387
408
  const where = conditions.join(" AND ");
388
409
  const total = (await db.prepare(`SELECT COUNT(*) AS "total" FROM "traces" WHERE ${where}`).bind(...queryParams).first())?.total ?? 0;
389
- const { results: data } = await db.prepare(`SELECT * FROM "traces" WHERE ${where} ORDER BY "startTime" DESC LIMIT ? OFFSET ?`).bind(...queryParams, limit, offset).all();
410
+ const { results } = await db.prepare(`SELECT * FROM "traces" WHERE ${where} ORDER BY "startTime" DESC LIMIT ? OFFSET ?`).bind(...queryParams, limit, offset).all();
390
411
  return {
391
- data,
412
+ data: parseJsonRows(results),
392
413
  total,
393
414
  limit,
394
415
  offset
@@ -399,9 +420,9 @@ function createD1TracesStore(db) {
399
420
  if (!trace) return void 0;
400
421
  const [spanResult, eventResult] = await db.batch([db.prepare(`SELECT * FROM "spans" WHERE "traceId" = ? ORDER BY "startTime" ASC`).bind(traceId), db.prepare(`SELECT * FROM "span_events" WHERE "traceId" = ? ORDER BY "timestamp" ASC`).bind(traceId)]);
401
422
  return {
402
- trace,
403
- spans: spanResult.results ?? [],
404
- events: eventResult.results ?? []
423
+ trace: parseJsonColumns(trace),
424
+ spans: parseJsonRows(spanResult.results ?? []),
425
+ events: parseJsonRows(eventResult.results ?? [])
405
426
  };
406
427
  },
407
428
  getTraceStats: async (params) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@llmops/sdk",
3
- "version": "1.0.0-beta.16",
3
+ "version": "1.0.0-beta.17",
4
4
  "description": "An LLMOps toolkit for TypeScript applications",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -114,8 +114,8 @@
114
114
  "access": "public"
115
115
  },
116
116
  "dependencies": {
117
- "@llmops/app": "^1.0.0-beta.16",
118
- "@llmops/core": "^1.0.0-beta.16"
117
+ "@llmops/app": "^1.0.0-beta.17",
118
+ "@llmops/core": "^1.0.0-beta.17"
119
119
  },
120
120
  "peerDependencies": {
121
121
  "pg": "*"