ragscope 0.1.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/LICENSE +183 -0
- package/README.md +135 -0
- package/dist/bin/ragscope.d.ts +3 -0
- package/dist/bin/ragscope.d.ts.map +1 -0
- package/dist/bin/ragscope.js +135 -0
- package/dist/bin/ragscope.js.map +1 -0
- package/dist/src/app.d.ts +5 -0
- package/dist/src/app.d.ts.map +1 -0
- package/dist/src/app.js +88 -0
- package/dist/src/app.js.map +1 -0
- package/dist/src/app.test.d.ts +2 -0
- package/dist/src/app.test.d.ts.map +1 -0
- package/dist/src/app.test.js +59 -0
- package/dist/src/app.test.js.map +1 -0
- package/dist/src/audit/scorer.d.ts +17 -0
- package/dist/src/audit/scorer.d.ts.map +1 -0
- package/dist/src/audit/scorer.js +85 -0
- package/dist/src/audit/scorer.js.map +1 -0
- package/dist/src/audit/scorer.test.d.ts +2 -0
- package/dist/src/audit/scorer.test.d.ts.map +1 -0
- package/dist/src/audit/scorer.test.js +101 -0
- package/dist/src/audit/scorer.test.js.map +1 -0
- package/dist/src/db/index.d.ts +731 -0
- package/dist/src/db/index.d.ts.map +1 -0
- package/dist/src/db/index.js +59 -0
- package/dist/src/db/index.js.map +1 -0
- package/dist/src/db/queries.d.ts +12 -0
- package/dist/src/db/queries.d.ts.map +1 -0
- package/dist/src/db/queries.js +35 -0
- package/dist/src/db/queries.js.map +1 -0
- package/dist/src/db/queries.test.d.ts +2 -0
- package/dist/src/db/queries.test.d.ts.map +1 -0
- package/dist/src/db/queries.test.js +101 -0
- package/dist/src/db/queries.test.js.map +1 -0
- package/dist/src/db/schema.d.ts +725 -0
- package/dist/src/db/schema.d.ts.map +1 -0
- package/dist/src/db/schema.js +47 -0
- package/dist/src/db/schema.js.map +1 -0
- package/dist/src/enrichment/boundaries.d.ts +4 -0
- package/dist/src/enrichment/boundaries.d.ts.map +1 -0
- package/dist/src/enrichment/boundaries.js +19 -0
- package/dist/src/enrichment/boundaries.js.map +1 -0
- package/dist/src/enrichment/boundaries.test.d.ts +2 -0
- package/dist/src/enrichment/boundaries.test.d.ts.map +1 -0
- package/dist/src/enrichment/boundaries.test.js +69 -0
- package/dist/src/enrichment/boundaries.test.js.map +1 -0
- package/dist/src/enrichment/embeddings.d.ts +3 -0
- package/dist/src/enrichment/embeddings.d.ts.map +1 -0
- package/dist/src/enrichment/embeddings.js +37 -0
- package/dist/src/enrichment/embeddings.js.map +1 -0
- package/dist/src/enrichment/normalizer.d.ts +10 -0
- package/dist/src/enrichment/normalizer.d.ts.map +1 -0
- package/dist/src/enrichment/normalizer.js +42 -0
- package/dist/src/enrichment/normalizer.js.map +1 -0
- package/dist/src/enrichment/normalizer.test.d.ts +2 -0
- package/dist/src/enrichment/normalizer.test.d.ts.map +1 -0
- package/dist/src/enrichment/normalizer.test.js +47 -0
- package/dist/src/enrichment/normalizer.test.js.map +1 -0
- package/dist/src/enrichment/pipeline.d.ts +4 -0
- package/dist/src/enrichment/pipeline.d.ts.map +1 -0
- package/dist/src/enrichment/pipeline.js +93 -0
- package/dist/src/enrichment/pipeline.js.map +1 -0
- package/dist/src/enrichment/pipeline.test.d.ts +2 -0
- package/dist/src/enrichment/pipeline.test.d.ts.map +1 -0
- package/dist/src/enrichment/pipeline.test.js +133 -0
- package/dist/src/enrichment/pipeline.test.js.map +1 -0
- package/dist/src/enrichment/reranker.d.ts +20 -0
- package/dist/src/enrichment/reranker.d.ts.map +1 -0
- package/dist/src/enrichment/reranker.js +45 -0
- package/dist/src/enrichment/reranker.js.map +1 -0
- package/dist/src/enrichment/reranker.test.d.ts +2 -0
- package/dist/src/enrichment/reranker.test.d.ts.map +1 -0
- package/dist/src/enrichment/reranker.test.js +82 -0
- package/dist/src/enrichment/reranker.test.js.map +1 -0
- package/dist/src/enrichment/tokenizer.d.ts +2 -0
- package/dist/src/enrichment/tokenizer.d.ts.map +1 -0
- package/dist/src/enrichment/tokenizer.js +40 -0
- package/dist/src/enrichment/tokenizer.js.map +1 -0
- package/dist/src/enrichment/tokenizer.test.d.ts +2 -0
- package/dist/src/enrichment/tokenizer.test.d.ts.map +1 -0
- package/dist/src/enrichment/tokenizer.test.js +36 -0
- package/dist/src/enrichment/tokenizer.test.js.map +1 -0
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +3 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/ingestion/langfuse.d.ts +17 -0
- package/dist/src/ingestion/langfuse.d.ts.map +1 -0
- package/dist/src/ingestion/langfuse.js +102 -0
- package/dist/src/ingestion/langfuse.js.map +1 -0
- package/dist/src/ingestion/otlp-parser.d.ts +3 -0
- package/dist/src/ingestion/otlp-parser.d.ts.map +1 -0
- package/dist/src/ingestion/otlp-parser.js +122 -0
- package/dist/src/ingestion/otlp-parser.js.map +1 -0
- package/dist/src/ingestion/otlp-parser.test.d.ts +2 -0
- package/dist/src/ingestion/otlp-parser.test.d.ts.map +1 -0
- package/dist/src/ingestion/otlp-parser.test.js +194 -0
- package/dist/src/ingestion/otlp-parser.test.js.map +1 -0
- package/dist/src/types.d.ts +114 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +3 -0
- package/dist/src/types.js.map +1 -0
- package/package.json +78 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/db/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAA;AAIrC,MAAM,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAA;AAE5C,wBAAgB,QAAQ,CAAC,MAAM,SAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwD3C"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import Database from 'better-sqlite3';
|
|
2
|
+
import { drizzle } from 'drizzle-orm/better-sqlite3';
|
|
3
|
+
import { traces, spans, chunks } from './schema.js';
|
|
4
|
+
export function createDb(dbPath = ':memory:') {
|
|
5
|
+
const sqlite = new Database(dbPath);
|
|
6
|
+
sqlite.pragma('journal_mode = WAL');
|
|
7
|
+
sqlite.pragma('foreign_keys = ON');
|
|
8
|
+
sqlite.exec(`
|
|
9
|
+
CREATE TABLE IF NOT EXISTS traces (
|
|
10
|
+
id TEXT PRIMARY KEY,
|
|
11
|
+
service_name TEXT NOT NULL,
|
|
12
|
+
query TEXT,
|
|
13
|
+
source TEXT NOT NULL,
|
|
14
|
+
total_latency_ms REAL,
|
|
15
|
+
span_count INTEGER NOT NULL DEFAULT 0,
|
|
16
|
+
chunk_count INTEGER NOT NULL DEFAULT 0,
|
|
17
|
+
created_at INTEGER NOT NULL
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
CREATE TABLE IF NOT EXISTS spans (
|
|
21
|
+
id TEXT PRIMARY KEY,
|
|
22
|
+
trace_id TEXT NOT NULL REFERENCES traces(id),
|
|
23
|
+
parent_span_id TEXT,
|
|
24
|
+
name TEXT NOT NULL,
|
|
25
|
+
kind TEXT NOT NULL,
|
|
26
|
+
start_time_ms INTEGER NOT NULL,
|
|
27
|
+
end_time_ms INTEGER NOT NULL,
|
|
28
|
+
latency_ms INTEGER NOT NULL,
|
|
29
|
+
operation_name TEXT,
|
|
30
|
+
model TEXT,
|
|
31
|
+
system TEXT,
|
|
32
|
+
input_tokens INTEGER,
|
|
33
|
+
output_tokens INTEGER,
|
|
34
|
+
raw_attributes TEXT NOT NULL DEFAULT '[]',
|
|
35
|
+
prompt TEXT
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
CREATE TABLE IF NOT EXISTS chunks (
|
|
39
|
+
id TEXT PRIMARY KEY,
|
|
40
|
+
span_id TEXT NOT NULL REFERENCES spans(id),
|
|
41
|
+
trace_id TEXT NOT NULL REFERENCES traces(id),
|
|
42
|
+
chunk_id TEXT NOT NULL,
|
|
43
|
+
content TEXT,
|
|
44
|
+
score_raw REAL,
|
|
45
|
+
score_normalized REAL,
|
|
46
|
+
rank_retrieval INTEGER,
|
|
47
|
+
rank_reranked INTEGER,
|
|
48
|
+
score_reranked REAL,
|
|
49
|
+
token_count INTEGER,
|
|
50
|
+
vector_store TEXT,
|
|
51
|
+
in_context INTEGER NOT NULL DEFAULT 0,
|
|
52
|
+
context_position INTEGER,
|
|
53
|
+
overlap_with_next REAL,
|
|
54
|
+
score_missing INTEGER NOT NULL DEFAULT 0
|
|
55
|
+
);
|
|
56
|
+
`);
|
|
57
|
+
return drizzle(sqlite, { schema: { traces, spans, chunks } });
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/db/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAA;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAInD,MAAM,UAAU,QAAQ,CAAC,MAAM,GAAG,UAAU;IAC1C,MAAM,MAAM,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAA;IACnC,MAAM,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAA;IACnC,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAA;IAElC,MAAM,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDX,CAAC,CAAA;IAEF,OAAO,OAAO,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAAA;AAC/D,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Db } from './index.js';
|
|
2
|
+
import type { RagTrace, RagSpan, RagChunk } from '../types.js';
|
|
3
|
+
export declare function insertTrace(db: Db, trace: RagTrace): Promise<void>;
|
|
4
|
+
export declare function insertSpans(db: Db, rows: RagSpan[]): Promise<void>;
|
|
5
|
+
export declare function insertChunks(db: Db, rows: RagChunk[]): Promise<void>;
|
|
6
|
+
export declare function getTraces(db: Db, limit?: number): Promise<RagTrace[]>;
|
|
7
|
+
export declare function getTraceById(db: Db, traceId: string): Promise<{
|
|
8
|
+
trace: RagTrace;
|
|
9
|
+
spans: RagSpan[];
|
|
10
|
+
chunks: RagChunk[];
|
|
11
|
+
} | null>;
|
|
12
|
+
//# sourceMappingURL=queries.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../../src/db/queries.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,YAAY,CAAA;AAEpC,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE9D,wBAAsB,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAExE;AAED,wBAAsB,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAGxE;AAED,wBAAsB,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAG1E;AAED,wBAAsB,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,SAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAMxE;AAED,wBAAsB,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IACnE,KAAK,EAAE,QAAQ,CAAA;IACf,KAAK,EAAE,OAAO,EAAE,CAAA;IAChB,MAAM,EAAE,QAAQ,EAAE,CAAA;CACnB,GAAG,IAAI,CAAC,CAYR"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { eq, desc } from 'drizzle-orm';
|
|
2
|
+
import { traces, spans, chunks } from './schema.js';
|
|
3
|
+
export async function insertTrace(db, trace) {
|
|
4
|
+
await db.insert(traces).values(trace).onConflictDoNothing();
|
|
5
|
+
}
|
|
6
|
+
export async function insertSpans(db, rows) {
|
|
7
|
+
if (rows.length === 0)
|
|
8
|
+
return;
|
|
9
|
+
await db.insert(spans).values(rows).onConflictDoNothing();
|
|
10
|
+
}
|
|
11
|
+
export async function insertChunks(db, rows) {
|
|
12
|
+
if (rows.length === 0)
|
|
13
|
+
return;
|
|
14
|
+
await db.insert(chunks).values(rows).onConflictDoNothing();
|
|
15
|
+
}
|
|
16
|
+
export async function getTraces(db, limit = 100) {
|
|
17
|
+
return db
|
|
18
|
+
.select()
|
|
19
|
+
.from(traces)
|
|
20
|
+
.orderBy(desc(traces.createdAt))
|
|
21
|
+
.limit(limit);
|
|
22
|
+
}
|
|
23
|
+
export async function getTraceById(db, traceId) {
|
|
24
|
+
const traceRows = await db.select().from(traces).where(eq(traces.id, traceId));
|
|
25
|
+
if (traceRows.length === 0)
|
|
26
|
+
return null;
|
|
27
|
+
const spanRows = await db.select().from(spans).where(eq(spans.traceId, traceId));
|
|
28
|
+
const chunkRows = await db.select().from(chunks).where(eq(chunks.traceId, traceId));
|
|
29
|
+
return {
|
|
30
|
+
trace: traceRows[0],
|
|
31
|
+
spans: spanRows,
|
|
32
|
+
chunks: chunkRows,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=queries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../../src/db/queries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAEtC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAGnD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,EAAM,EAAE,KAAe;IACvD,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,mBAAmB,EAAE,CAAA;AAC7D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,EAAM,EAAE,IAAe;IACvD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAM;IAC7B,MAAM,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,mBAAmB,EAAE,CAAA;AAC3D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,EAAM,EAAE,IAAgB;IACzD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAM;IAC7B,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,mBAAmB,EAAE,CAAA;AAC5D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,EAAM,EAAE,KAAK,GAAG,GAAG;IACjD,OAAO,EAAE;SACN,MAAM,EAAE;SACR,IAAI,CAAC,MAAM,CAAC;SACZ,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;SAC/B,KAAK,CAAC,KAAK,CAA0B,CAAA;AAC1C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,EAAM,EAAE,OAAe;IAKxD,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAA;IAC9E,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IAEvC,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;IAChF,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;IAEnF,OAAO;QACL,KAAK,EAAE,SAAS,CAAC,CAAC,CAAwB;QAC1C,KAAK,EAAE,QAAgC;QACvC,MAAM,EAAE,SAAkC;KAC3C,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queries.test.d.ts","sourceRoot":"","sources":["../../../src/db/queries.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach } from 'vitest';
|
|
2
|
+
import { createDb } from './index.js';
|
|
3
|
+
import { insertTrace, insertSpans, insertChunks, getTraces, getTraceById } from './queries.js';
|
|
4
|
+
function makeTrace(overrides = {}) {
|
|
5
|
+
return {
|
|
6
|
+
id: 'trace-001',
|
|
7
|
+
serviceName: 'test-app',
|
|
8
|
+
query: 'What is Paris?',
|
|
9
|
+
source: 'traceai',
|
|
10
|
+
totalLatencyMs: 250,
|
|
11
|
+
spanCount: 2,
|
|
12
|
+
chunkCount: 3,
|
|
13
|
+
createdAt: Date.now(),
|
|
14
|
+
...overrides,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
function makeSpan(overrides = {}) {
|
|
18
|
+
return {
|
|
19
|
+
id: 'span-001',
|
|
20
|
+
traceId: 'trace-001',
|
|
21
|
+
parentSpanId: null,
|
|
22
|
+
name: 'qdrant.query',
|
|
23
|
+
kind: 'RETRIEVER',
|
|
24
|
+
startTimeMs: 1000,
|
|
25
|
+
endTimeMs: 1100,
|
|
26
|
+
latencyMs: 100,
|
|
27
|
+
operationName: 'retrieve',
|
|
28
|
+
model: null,
|
|
29
|
+
system: 'qdrant',
|
|
30
|
+
inputTokens: null,
|
|
31
|
+
outputTokens: null,
|
|
32
|
+
...overrides,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
function makeChunk(overrides = {}) {
|
|
36
|
+
return {
|
|
37
|
+
id: 'chunk-uuid-001',
|
|
38
|
+
spanId: 'span-001',
|
|
39
|
+
traceId: 'trace-001',
|
|
40
|
+
chunkId: 'doc-1',
|
|
41
|
+
content: 'Paris is the capital of France',
|
|
42
|
+
scoreRaw: 0.92,
|
|
43
|
+
scoreNormalized: 0.92,
|
|
44
|
+
rankRetrieval: 1,
|
|
45
|
+
rankReranked: null,
|
|
46
|
+
scoreReranked: null,
|
|
47
|
+
tokenCount: 7,
|
|
48
|
+
vectorStore: 'qdrant',
|
|
49
|
+
inContext: true,
|
|
50
|
+
contextPosition: 0,
|
|
51
|
+
overlapWithNext: null,
|
|
52
|
+
scoreMissing: false,
|
|
53
|
+
...overrides,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
describe('DB queries', () => {
|
|
57
|
+
let db;
|
|
58
|
+
beforeEach(() => {
|
|
59
|
+
db = createDb(':memory:');
|
|
60
|
+
});
|
|
61
|
+
it('inserts and retrieves a trace', async () => {
|
|
62
|
+
await insertTrace(db, makeTrace());
|
|
63
|
+
const traces = await getTraces(db);
|
|
64
|
+
expect(traces).toHaveLength(1);
|
|
65
|
+
expect(traces[0].id).toBe('trace-001');
|
|
66
|
+
expect(traces[0].serviceName).toBe('test-app');
|
|
67
|
+
});
|
|
68
|
+
it('orders traces by createdAt descending', async () => {
|
|
69
|
+
await insertTrace(db, makeTrace({ id: 'trace-old', createdAt: 1000 }));
|
|
70
|
+
await insertTrace(db, makeTrace({ id: 'trace-new', createdAt: 9000 }));
|
|
71
|
+
const traces = await getTraces(db);
|
|
72
|
+
expect(traces[0].id).toBe('trace-new');
|
|
73
|
+
expect(traces[1].id).toBe('trace-old');
|
|
74
|
+
});
|
|
75
|
+
it('returns null for unknown traceId', async () => {
|
|
76
|
+
const result = await getTraceById(db, 'nonexistent');
|
|
77
|
+
expect(result).toBeNull();
|
|
78
|
+
});
|
|
79
|
+
it('retrieves trace with spans and chunks', async () => {
|
|
80
|
+
await insertTrace(db, makeTrace());
|
|
81
|
+
await insertSpans(db, [makeSpan()]);
|
|
82
|
+
await insertChunks(db, [makeChunk()]);
|
|
83
|
+
const result = await getTraceById(db, 'trace-001');
|
|
84
|
+
expect(result).not.toBeNull();
|
|
85
|
+
expect(result.spans).toHaveLength(1);
|
|
86
|
+
expect(result.chunks).toHaveLength(1);
|
|
87
|
+
expect(result.chunks[0].chunkId).toBe('doc-1');
|
|
88
|
+
});
|
|
89
|
+
it('ignores duplicate inserts gracefully', async () => {
|
|
90
|
+
const trace = makeTrace();
|
|
91
|
+
await insertTrace(db, trace);
|
|
92
|
+
await insertTrace(db, trace);
|
|
93
|
+
const traces = await getTraces(db);
|
|
94
|
+
expect(traces).toHaveLength(1);
|
|
95
|
+
});
|
|
96
|
+
it('handles empty spans and chunks insert', async () => {
|
|
97
|
+
await expect(insertSpans(db, [])).resolves.toBeUndefined();
|
|
98
|
+
await expect(insertChunks(db, [])).resolves.toBeUndefined();
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
//# sourceMappingURL=queries.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queries.test.js","sourceRoot":"","sources":["../../../src/db/queries.test.ts"],"names":[],"mappings":"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"}
|