From c6fabe262c837890433da8e388b526abb8d9e276 Mon Sep 17 00:00:00 2001 From: Daniel Date: Tue, 31 Mar 2026 10:52:49 +0800 Subject: [PATCH] fix --- .../api/app/repositories/job_repository.py | 2 + .../api/app/repositories/worker_repository.py | 2 + .../api/app/services/rag/lightrag_adapter.py | 9 +++- gig-poc/apps/web/src/api/client.ts | 43 +++++++++++++------ 4 files changed, 42 insertions(+), 14 deletions(-) diff --git a/gig-poc/apps/api/app/repositories/job_repository.py b/gig-poc/apps/api/app/repositories/job_repository.py index fcaa64f..1c98e47 100644 --- a/gig-poc/apps/api/app/repositories/job_repository.py +++ b/gig-poc/apps/api/app/repositories/job_repository.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from sqlalchemy import select from sqlalchemy.orm import Session, selectinload diff --git a/gig-poc/apps/api/app/repositories/worker_repository.py b/gig-poc/apps/api/app/repositories/worker_repository.py index 1eb51f3..f1716b7 100644 --- a/gig-poc/apps/api/app/repositories/worker_repository.py +++ b/gig-poc/apps/api/app/repositories/worker_repository.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from sqlalchemy import select from sqlalchemy.orm import Session, selectinload diff --git a/gig-poc/apps/api/app/services/rag/lightrag_adapter.py b/gig-poc/apps/api/app/services/rag/lightrag_adapter.py index 9a90b0a..0c115a2 100644 --- a/gig-poc/apps/api/app/services/rag/lightrag_adapter.py +++ b/gig-poc/apps/api/app/services/rag/lightrag_adapter.py @@ -2,6 +2,7 @@ from __future__ import annotations import json import math +import uuid from collections import defaultdict from qdrant_client import QdrantClient, models @@ -46,7 +47,7 @@ class LightRAGAdapter: collection_name=self.settings.qdrant_collection, points=[ models.PointStruct( - id=job.job_id, + id=self._point_id(job.job_id), vector=self._vectorize(payload["document"]), payload=payload, ) @@ -69,7 +70,7 @@ class LightRAGAdapter: collection_name=self.settings.qdrant_collection, points=[ models.PointStruct( - id=worker.worker_id, + id=self._point_id(worker.worker_id), vector=self._vectorize(payload["document"]), payload=payload, ) @@ -141,3 +142,7 @@ class LightRAGAdapter: if chunk: tokens.append(chunk) return tokens + + def _point_id(self, entity_id: str) -> str: + # Qdrant v1.14 accepts point IDs as UUID or unsigned int. + return str(uuid.uuid5(uuid.NAMESPACE_URL, entity_id)) diff --git a/gig-poc/apps/web/src/api/client.ts b/gig-poc/apps/web/src/api/client.ts index 7d538e6..b0db360 100644 --- a/gig-poc/apps/web/src/api/client.ts +++ b/gig-poc/apps/web/src/api/client.ts @@ -1,5 +1,9 @@ const API_BASE = import.meta.env.VITE_API_BASE ?? "/api"; +type ExtractResponse = { data: T }; +type MatchResponse = { items: T[] }; +type ListResponse = { items: T[] }; + async function request(path: string, init?: RequestInit): Promise { const response = await fetch(`${API_BASE}${path}`, { headers: { @@ -16,18 +20,33 @@ async function request(path: string, init?: RequestInit): Promise { } export const api = { - health: () => request("/health"), - extractJob: (text: string) => request("/poc/extract/job", { method: "POST", body: JSON.stringify({ text }) }), - extractWorker: (text: string) => request("/poc/extract/worker", { method: "POST", body: JSON.stringify({ text }) }), - ingestJob: (job: unknown) => request("/poc/ingest/job", { method: "POST", body: JSON.stringify({ job }) }), - ingestWorker: (worker: unknown) => request("/poc/ingest/worker", { method: "POST", body: JSON.stringify({ worker }) }), - bootstrap: () => request("/poc/ingest/bootstrap", { method: "POST" }), + health: () => request("/health"), + extractJob: (text: string) => + request>>("/poc/extract/job", { + method: "POST", + body: JSON.stringify({ text }) + }), + extractWorker: (text: string) => + request>>("/poc/extract/worker", { + method: "POST", + body: JSON.stringify({ text }) + }), + ingestJob: (job: unknown) => request("/poc/ingest/job", { method: "POST", body: JSON.stringify({ job }) }), + ingestWorker: (worker: unknown) => + request("/poc/ingest/worker", { method: "POST", body: JSON.stringify({ worker }) }), + bootstrap: () => request("/poc/ingest/bootstrap", { method: "POST" }), matchWorkers: (job: unknown, top_n = 10) => - request("/poc/match/workers", { method: "POST", body: JSON.stringify({ job, top_n }) }), + request>>("/poc/match/workers", { + method: "POST", + body: JSON.stringify({ job, top_n }) + }), matchJobs: (worker: unknown, top_n = 10) => - request("/poc/match/jobs", { method: "POST", body: JSON.stringify({ worker, top_n }) }), - jobs: () => request("/poc/jobs"), - workers: () => request("/poc/workers"), - job: (jobId: string) => request(`/poc/jobs/${jobId}`), - worker: (workerId: string) => request(`/poc/workers/${workerId}`) + request>>("/poc/match/jobs", { + method: "POST", + body: JSON.stringify({ worker, top_n }) + }), + jobs: () => request>>("/poc/jobs"), + workers: () => request>>("/poc/workers"), + job: (jobId: string) => request>(`/poc/jobs/${jobId}`), + worker: (workerId: string) => request>(`/poc/workers/${workerId}`) };