This commit is contained in:
elpresidank 2026-05-12 08:06:58 -05:00
parent e8c7a4f6e0
commit ffd97375a8
160 changed files with 6704 additions and 1895 deletions

View file

@ -19,6 +19,7 @@ import {
type EmbeddingsRequest,
type EmbeddingsResponse,
} from "@trustgraph/base";
import { makeProcessorProgram } from "@trustgraph/base";
import { QdrantGraphEmbeddingsStore } from "./qdrant-graph.js";
export class GraphEmbeddingsStoreService extends FlowProcessor {
@ -29,7 +30,7 @@ export class GraphEmbeddingsStoreService extends FlowProcessor {
this.store = new QdrantGraphEmbeddingsStore();
this.registerSpecification(
new ConsumerSpec<EntityContexts>(
ConsumerSpec.fromPromise<EntityContexts>(
"store-graph-embeddings-input",
this.onMessage.bind(this),
),
@ -47,10 +48,10 @@ export class GraphEmbeddingsStoreService extends FlowProcessor {
private async onMessage(
msg: EntityContexts,
properties: Record<string, string>,
_properties: Record<string, string>,
flowCtx: FlowContext,
): Promise<void> {
if (!msg.entities || msg.entities.length === 0) return;
if (msg.entities.length === 0) return;
const embeddingsClient =
flowCtx.flow.requestor<EmbeddingsRequest, EmbeddingsResponse>("embeddings-client");
@ -63,7 +64,7 @@ export class GraphEmbeddingsStoreService extends FlowProcessor {
// Call embeddings service
const embResponse = await embeddingsClient.request({ text: texts });
if (embResponse.error) {
if (embResponse.error !== undefined) {
console.error(
"[GraphEmbeddingsStore] Embeddings error:",
embResponse.error.message,
@ -86,6 +87,11 @@ export class GraphEmbeddingsStoreService extends FlowProcessor {
}
}
export const program = makeProcessorProgram({
id: "graph-embeddings-store",
make: (config) => new GraphEmbeddingsStoreService(config),
});
export async function run(): Promise<void> {
await GraphEmbeddingsStoreService.launch("graph-embeddings-store");
}

View file

@ -9,7 +9,6 @@
*/
import { QdrantClient } from "@qdrant/js-client-rest";
import { randomUUID } from "node:crypto";
export interface QdrantDocEmbeddingsConfig {
url?: string;
@ -36,7 +35,10 @@ export class QdrantDocEmbeddingsStore {
const url = config.url ?? process.env.QDRANT_URL ?? "http://localhost:6333";
const apiKey = config.apiKey ?? process.env.QDRANT_API_KEY;
this.client = new QdrantClient({ url, apiKey });
this.client = new QdrantClient({
url,
...(apiKey !== undefined && apiKey.length > 0 ? { apiKey } : {}),
});
console.log("[QdrantDocEmbeddings] Store initialized");
}
@ -61,8 +63,8 @@ export class QdrantDocEmbeddingsStore {
async store(message: DocEmbeddingsMessage): Promise<void> {
for (const chunk of message.chunks) {
if (!chunk.chunkId || chunk.chunkId === "") continue;
if (!chunk.vector || chunk.vector.length === 0) continue;
if (chunk.chunkId.length === 0) continue;
if (chunk.vector.length === 0) continue;
const dim = chunk.vector.length;
const name = this.collectionName(message.user, message.collection, dim);
@ -72,11 +74,13 @@ export class QdrantDocEmbeddingsStore {
await this.client.upsert(name, {
points: [
{
id: randomUUID(),
id: crypto.randomUUID(),
vector: chunk.vector,
payload: {
chunk_id: chunk.chunkId,
...(chunk.content ? { content: chunk.content } : {}),
...(chunk.content !== undefined && chunk.content.length > 0
? { content: chunk.content }
: {}),
},
},
],

View file

@ -9,7 +9,6 @@
*/
import { QdrantClient } from "@qdrant/js-client-rest";
import { randomUUID } from "node:crypto";
import type { Term } from "@trustgraph/base";
export interface QdrantGraphEmbeddingsConfig {
@ -50,7 +49,10 @@ export class QdrantGraphEmbeddingsStore {
const url = config.url ?? process.env.QDRANT_URL ?? "http://localhost:6333";
const apiKey = config.apiKey ?? process.env.QDRANT_API_KEY;
this.client = new QdrantClient({ url, apiKey });
this.client = new QdrantClient({
url,
...(apiKey !== undefined && apiKey.length > 0 ? { apiKey } : {}),
});
console.log("[QdrantGraphEmbeddings] Store initialized");
}
@ -76,8 +78,8 @@ export class QdrantGraphEmbeddingsStore {
async store(message: GraphEmbeddingsMessage): Promise<void> {
for (const entry of message.entities) {
const entityValue = getTermValue(entry.entity);
if (!entityValue || entityValue === "") continue;
if (!entry.vector || entry.vector.length === 0) continue;
if (entityValue === null || entityValue.length === 0) continue;
if (entry.vector.length === 0) continue;
const dim = entry.vector.length;
const name = this.collectionName(message.user, message.collection, dim);
@ -85,14 +87,14 @@ export class QdrantGraphEmbeddingsStore {
await this.ensureCollection(name, dim);
const payload: Record<string, unknown> = { entity: entityValue };
if (entry.chunkId) {
if (entry.chunkId !== undefined && entry.chunkId.length > 0) {
payload.chunk_id = entry.chunkId;
}
await this.client.upsert(name, {
points: [
{
id: randomUUID(),
id: crypto.randomUUID(),
vector: entry.vector,
payload,
},

View file

@ -15,6 +15,7 @@ import {
type FlowContext,
type Triples,
} from "@trustgraph/base";
import { makeProcessorProgram } from "@trustgraph/base";
import { FalkorDBTriplesStore } from "./falkordb.js";
export class TriplesStoreService extends FlowProcessor {
@ -25,7 +26,7 @@ export class TriplesStoreService extends FlowProcessor {
this.store = new FalkorDBTriplesStore();
this.registerSpecification(
new ConsumerSpec<Triples>("store-triples-input", this.onMessage.bind(this)),
ConsumerSpec.fromPromise<Triples>("store-triples-input", this.onMessage.bind(this)),
);
console.log("[TriplesStore] Service initialized");
@ -33,10 +34,10 @@ export class TriplesStoreService extends FlowProcessor {
private async onMessage(
msg: Triples,
properties: Record<string, string>,
flowCtx: FlowContext,
_properties: Record<string, string>,
_flowCtx: FlowContext,
): Promise<void> {
if (!msg.triples || msg.triples.length === 0) return;
if (msg.triples.length === 0) return;
const user = msg.metadata?.user ?? "default";
const collection = msg.metadata?.collection ?? "default";
@ -49,6 +50,11 @@ export class TriplesStoreService extends FlowProcessor {
}
}
export const program = makeProcessorProgram({
id: "triples-store",
make: (config) => new TriplesStoreService(config),
});
export async function run(): Promise<void> {
await TriplesStoreService.launch("triples-store");
}