@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 +29 -8
- package/dist/store/d1.mjs +29 -8
- package/package.json +3 -3
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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.
|
|
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.
|
|
118
|
-
"@llmops/core": "^1.0.0-beta.
|
|
117
|
+
"@llmops/app": "^1.0.0-beta.17",
|
|
118
|
+
"@llmops/core": "^1.0.0-beta.17"
|
|
119
119
|
},
|
|
120
120
|
"peerDependencies": {
|
|
121
121
|
"pg": "*"
|