From 5090ddb47335e3df2529d152f86eec49d3634cff Mon Sep 17 00:00:00 2001 From: Kyryl Truskovskyi Date: Mon, 27 Jan 2025 19:57:51 -0500 Subject: [PATCH] Lance DB migration (#4) --- README.md | 30 +-- docs/architecture.png | Bin 127171 -> 55133 bytes no-ocr-api/.env.example | 6 - no-ocr-api/Dockerfile | 5 +- no-ocr-api/np_ocr/api.py | 75 +++---- no-ocr-api/np_ocr/search.py | 97 ++++----- no-ocr-api/requirements.txt | 1 - no-ocr-api/tests/lance_vs_qdrant.py | 300 ++++++++++++++++++++++++++++ no-ocr-api/tests/test_api.py | 9 + no-ocr-ui/src/components/Search.tsx | 2 +- 10 files changed, 383 insertions(+), 142 deletions(-) create mode 100644 no-ocr-api/tests/lance_vs_qdrant.py diff --git a/README.md b/README.md index 7248c6d..fc2d792 100644 --- a/README.md +++ b/README.md @@ -28,17 +28,11 @@ The core purpose of "No OCR" is to simplify AI-based PDF processing: - Perform text and/or visual queries using modern embeddings. - Use open source models for advanced question-answering on document-based diagrams, text, and more. -Key technologies: -- React-based front end (no-ocr-ui) for uploading, managing, and searching documents. -- Python-based API (no-ocr-api) that coordinates ingestion, indexing, and searching. -- Qdrant for efficient vector search and retrieval. -- ColPali & Qwen2-VL handle inference tasks (both text and vision-based). - ## Key Features - Create and manage PDF/document collections, also referred to as "cases". - Automated ingestion to build Hugging Face-style datasets (HF_Dataset). -- Vector-based search over PDF pages (and relevant images) in Qdrant. +- Vector-based search over PDF pages (and relevant images) in LanceDB. - Visual question-answering on images and diagrams via Qwen2-VL. - Deployable via Docker for both the backend (Python) and UI (React). @@ -58,8 +52,8 @@ sequenceDiagram participant no-ocr-ui (CreateCase) participant no-ocr-api participant HF_Dataset - participant IngestClient - participant Qdrant + participant SearchClient + participant LanceDB User->>no-ocr-ui (CreateCase): Upload PDFs & specify case name no-ocr-ui (CreateCase)->>no-ocr-api: POST /create_case with PDFs @@ -67,10 +61,10 @@ sequenceDiagram no-ocr-api->>no-ocr-api: Spawn background task (process_case) no-ocr-api->>HF_Dataset: Convert PDFs to HF dataset HF_Dataset-->>no-ocr-api: Return dataset - no-ocr-api->>IngestClient: Ingest dataset - IngestClient->>Qdrant: Create collection & upload points - Qdrant-->>IngestClient: Acknowledge ingestion - IngestClient-->>no-ocr-api: Done ingestion + no-ocr-api->>SearchClient: Ingest dataset + SearchClient->>LanceDB: Create collection & upload points + LanceDB-->>SearchClient: Acknowledge ingestion + SearchClient-->>no-ocr-api: Done ingestion no-ocr-api->>no-ocr-api: Mark case status as 'done' no-ocr-api-->>no-ocr-ui (CreateCase): Return creation response no-ocr-ui (CreateCase)-->>User: Display success message @@ -83,14 +77,14 @@ sequenceDiagram participant User participant no-ocr-ui participant SearchClient - participant Qdrant + participant LanceDB participant HF_Dataset participant VLLM User->>no-ocr-ui: Enter search query and select case no-ocr-ui->>SearchClient: Search images by text - SearchClient->>Qdrant: Query collection with text embedding - Qdrant-->>SearchClient: Return search results + SearchClient->>LanceDB: Query collection with text embedding + LanceDB-->>SearchClient: Return search results SearchClient-->>no-ocr-ui: Provide search results no-ocr-ui->>HF_Dataset: Load dataset for collection HF_Dataset-->>no-ocr-ui: Return dataset @@ -166,7 +160,3 @@ sequenceDiagram cd no-ocr-ui npm run dev ``` -5. (Qdrant) Run qdrant - ```bash - docker run -p 6333:6333 qdrant/qdrant:v1.12.5 - ``` \ No newline at end of file diff --git a/docs/architecture.png b/docs/architecture.png index e6f8106586a6f607aacc421ec04ee8bf13e47539..13f85adfe6dc23c41dda4b2f6e7fb48d1c33f7aa 100644 GIT binary patch literal 55133 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 diff --git a/no-ocr-api/.env.example b/no-ocr-api/.env.example index 24df422..b38380b 100644 --- a/no-ocr-api/.env.example +++ b/no-ocr-api/.env.example @@ -5,10 +5,4 @@ SEARCH_TOP_K=3 COLPALI_TOKEN= VLLM_URL= COLPALI_BASE_URL= -QDRANT_URI="localhost" -QDRANT_PORT=6333 VECTOR_SIZE=128 -INDEXING_THRESHOLD=100 -QUANTILE=0.99 -TOP_K=5 -QDRANT_HTTPS=False \ No newline at end of file diff --git a/no-ocr-api/Dockerfile b/no-ocr-api/Dockerfile index f210860..076b2af 100644 --- a/no-ocr-api/Dockerfile +++ b/no-ocr-api/Dockerfile @@ -16,7 +16,10 @@ RUN pip install --upgrade pip COPY requirements.txt requirements.txt RUN pip install -r requirements.txt +# TODO: replace with lancedb==0.18.1b1 +RUN pip install --pre --extra-index-url https://pypi.fury.io/lancedb/ lancedb==0.18.1b1 + COPY . . ENV PYTHONPATH /app/ -CMD fastapi run --host 0.0.0.0 --port 8000 --workers 1 np_ocr/api.py \ No newline at end of file +CMD fastapi run --host 0.0.0.0 --port 8000 --workers 1 np_ocr/api.py diff --git a/no-ocr-api/np_ocr/api.py b/no-ocr-api/np_ocr/api.py index d153db9..a68bc43 100644 --- a/no-ocr-api/np_ocr/api.py +++ b/no-ocr-api/np_ocr/api.py @@ -16,7 +16,7 @@ from pydantic_settings import BaseSettings from np_ocr.data import pdfs_to_hf_dataset -from np_ocr.search import IngestClient, SearchClient, call_vllm +from np_ocr.search import SearchClient, call_vllm class CustomRailwayLogFormatter(logging.Formatter): @@ -60,13 +60,7 @@ class Settings(BaseSettings): COLPALI_TOKEN: str VLLM_URL: str COLPALI_BASE_URL: str - QDRANT_URI: str - QDRANT_PORT: int VECTOR_SIZE: int = 128 - INDEXING_THRESHOLD: int = 100 - QUANTILE: float = 0.99 - TOP_K: int = 5 - QDRANT_HTTPS: bool = True VLLM_API_KEY: str VLLM_MODEL: str = "Qwen2-VL-7B-Instruct" @@ -77,12 +71,20 @@ class Config: settings = Settings() +class SearchResult(BaseModel): + score: float + pdf_name: str + pdf_page: int + image_base64: str + +class SearchResponse(BaseModel): + search_results: List[SearchResult] + class ImageAnswer(BaseModel): answer: str class CaseInfo(BaseModel): name: str - unique_name: str status: str number_of_PDFs: int files: List[str] @@ -97,8 +99,7 @@ def update_status(self, new_status: str): self.save() -search_client = SearchClient(qdrant_uri=settings.QDRANT_URI, port=settings.QDRANT_PORT, https=settings.QDRANT_HTTPS, top_k=settings.TOP_K, base_url=settings.COLPALI_BASE_URL, token=settings.COLPALI_TOKEN) -ingest_client = IngestClient(qdrant_uri=settings.QDRANT_URI, port=settings.QDRANT_PORT, https=settings.QDRANT_HTTPS, index_threshold=settings.INDEXING_THRESHOLD, vector_size=settings.VECTOR_SIZE, quantile=settings.QUANTILE, top_k=settings.TOP_K, base_url=settings.COLPALI_BASE_URL, token=settings.COLPALI_TOKEN) +search_client = SearchClient(storage_dir=settings.STORAGE_DIR, vector_size=settings.VECTOR_SIZE, base_url=settings.COLPALI_BASE_URL, token=settings.COLPALI_TOKEN) @app.post("/vllm_call") @@ -137,17 +138,6 @@ def vllm_call( return image_answer - - -class SearchResult(BaseModel): - score: float - pdf_name: str - pdf_page: int - image_base64: str - -class SearchResponse(BaseModel): - search_results: List[SearchResult] - @app.post("/search", response_model=SearchResponse) def ai_search(user_query: str = Form(...), user_id: str = Form(...), case_name: str = Form(...)): logger.info("start ai_search") @@ -167,8 +157,7 @@ def ai_search(user_query: str = Form(...), user_id: str = Form(...), case_name: with open(case_info_path, "r") as json_file: _ = json.load(json_file) # case_info is not used directly below - unique_name =f"{user_id}_{case_name}" - search_results = search_client.search_images_by_text(user_query, case_name=unique_name, top_k=settings.SEARCH_TOP_K) + search_results = search_client.search_images_by_text(user_query, case_name=case_name, user_id=user_id, top_k=settings.SEARCH_TOP_K) if not search_results: return {"message": "No results found."} @@ -178,13 +167,14 @@ def ai_search(user_query: str = Form(...), user_id: str = Form(...), case_name: dataset = load_from_disk(dataset_path) search_results_data = [] - for result in search_results.points: - payload = result.payload - logger.info(payload) - score = result.score - image_data = dataset[payload["index"]]["image"] - pdf_name = dataset[payload["index"]]["pdf_name"] - pdf_page = dataset[payload["index"]]["pdf_page"] + print(search_results) + for point in search_results: + logger.info(point) + score = point['_distance'] + index = point['index'] + image_data = dataset[index]["image"] + pdf_name = dataset[index]["pdf_name"] + pdf_page = dataset[index]["pdf_page"] # Convert image to base64 string buffered = BytesIO() @@ -204,13 +194,13 @@ def ai_search(user_query: str = Form(...), user_id: str = Form(...), case_name: return SearchResponse(search_results=search_results_data) -def process_case(case_info: CaseInfo): +def process_case(case_info: CaseInfo, user_id: str): logger.info("start post_process_case") start_time = time.time() dataset = pdfs_to_hf_dataset(case_info.case_dir) dataset.save_to_disk(case_info.case_dir / settings.HF_DATASET_DIRNAME) - ingest_client.ingest(case_info.unique_name, dataset) + search_client.ingest(case_info.name, dataset, user_id) case_info.update_status("done") @@ -247,7 +237,6 @@ def create_new_case( case_info = CaseInfo( name=case_name, - unique_name=f"{user_id}_{case_name}", status="processing", number_of_PDFs=len(files), files=file_names, @@ -256,7 +245,7 @@ def create_new_case( case_info.save() - background_tasks.add_task(process_case, case_info=case_info) + background_tasks.add_task(process_case, case_info=case_info, user_id=user_id) end_time = time.time() logger.info(f"done create_new_case, total time {end_time - start_time}") @@ -308,12 +297,6 @@ def get_cases(user_id: str): @app.get("/get_case/{case_name}") def get_case(user_id: str, case_name: str) -> CaseInfo: - logger.info("start get_case") - start_time = time.time() - - """ - Return the metadata of a specific case by its name for a specific user. - """ case_info_path = os.path.join(settings.STORAGE_DIR, user_id, case_name, settings.CASE_INFO_FILENAME) if not os.path.exists(case_info_path): # Check common cases @@ -323,11 +306,7 @@ def get_case(user_id: str, case_name: str) -> CaseInfo: with open(case_info_path, "r") as json_file: case_info = CaseInfo(**json.load(json_file)) - - end_time = time.time() - logger.info(f"done get_case, total time {end_time - start_time}") - - return case_info.dict() + return case_info @app.delete("/delete_case/{case_name}") def delete_case(user_id: str, case_name: str): @@ -344,12 +323,6 @@ def delete_case(user_id: str, case_name: str): else: raise HTTPException(status_code=404, detail="Case not found in storage.") - # Delete the case from Qdrant - try: - ingest_client.qdrant_client.delete_collection(case_name) - except Exception as e: - raise HTTPException(status_code=500, detail=f"An error occurred while deleting the case from Qdrant: {str(e)}") - end_time = time.time() logger.info(f"done delete_case, total time {end_time - start_time}") diff --git a/no-ocr-api/np_ocr/search.py b/no-ocr-api/np_ocr/search.py index 18bfb1b..55260bc 100644 --- a/no-ocr-api/np_ocr/search.py +++ b/no-ocr-api/np_ocr/search.py @@ -11,7 +11,9 @@ import requests from openai import OpenAI from pydantic import BaseModel -from qdrant_client import QdrantClient, models +import lancedb +import numpy as np +import pyarrow as pa from tqdm import tqdm logger = logging.getLogger() @@ -62,93 +64,65 @@ def process_pil_image(self, pil_image): response.raise_for_status() return response.json() - -class IngestClient: - def __init__(self, qdrant_uri: str, port: int, https: bool, index_threshold: int, vector_size: int, quantile: float, top_k: int, base_url: str, token: str): - self.qdrant_client = QdrantClient(qdrant_uri, port=port, https=https) - self.colpali_client = ColPaliClient(base_url, token) - self.index_threshold = index_threshold +class SearchClient: + def __init__(self, storage_dir: str, vector_size: int, base_url: str, token: str): + self.storage_dir = storage_dir self.vector_size = vector_size - self.quantile = quantile - self.top_k = top_k - - def ingest(self, case_name, dataset): + self.colpali_client = ColPaliClient(base_url, token) + + def ingest(self, case_name: str, dataset, user_id: str): logger.info("start ingest") start_time = time.time() - self.qdrant_client.create_collection( - collection_name=case_name, - on_disk_payload=True, - optimizers_config=models.OptimizersConfigDiff(indexing_threshold=self.index_threshold), - vectors_config=models.VectorParams( - size=self.vector_size, - distance=models.Distance.COSINE, - multivector_config=models.MultiVectorConfig(comparator=models.MultiVectorComparator.MAX_SIM), - quantization_config=models.ScalarQuantization( - scalar=models.ScalarQuantizationConfig( - type=models.ScalarType.INT8, - quantile=self.quantile, - always_ram=True, - ), - ), - ), + schema = pa.schema( + [ + pa.field("index", pa.int64()), + pa.field("pdf_name", pa.string()), + pa.field("pdf_page", pa.int64()), + pa.field("vector", pa.list_(pa.list_(pa.float32(), self.vector_size))), + ] ) + lance_client = lancedb.connect(f"{self.storage_dir}/{user_id}/{case_name}") + tbl = lance_client.create_table(case_name, schema=schema) + + # TODO: ingest in batches - # Use tqdm to create a progress bar with tqdm(total=len(dataset), desc="Indexing Progress") as pbar: for i in range(len(dataset)): - # The images are already PIL Image objects, so we can use them directly image = dataset[i]["image"] - - # Process and encode image using ColPaliClient response = self.colpali_client.process_pil_image(image) image_embedding = response["embedding"] - # Prepare point for Qdrant - point = models.PointStruct( - id=i, # we just use the index as the ID - vector=image_embedding, # This is now a list of vectors - payload={ - "index": dataset[i]["index"], - "pdf_name": dataset[i]["pdf_name"], - "pdf_page": dataset[i]["pdf_page"], - }, # can also add other metadata/data - ) + data = { + "index": dataset[i]["index"], + "pdf_name": dataset[i]["pdf_name"], + "pdf_page": dataset[i]["pdf_page"], + "vector": image_embedding, + } try: - self.qdrant_client.upsert( - collection_name=case_name, - points=[point], - wait=False, - ) + tbl.add([data]) except Exception as e: logger.error(f"Error during upsert: {e}") continue pbar.update(1) + tbl.create_index(metric="cosine") + logger.info("Indexing complete!") end_time = time.time() logger.info(f"done ingest, total time {end_time - start_time}") - -class SearchClient: - def __init__(self, qdrant_uri: str, port: int, https: bool, top_k: int, base_url: str, token: str): - self.qdrant_client = QdrantClient(qdrant_uri, port=port, https=https) - self.colpali_client = ColPaliClient(base_url=base_url, token=token) - self.top_k = top_k - - def search_images_by_text(self, query_text, case_name: str, top_k: int): + def search_images_by_text(self, query_text, case_name: str, user_id: str,top_k: int): logger.info("start search_images_by_text") start_time = time.time() - # Use ColPaliClient to query text and get the embedding - query_embedding = self.colpali_client.query_text(query_text) + lance_client = lancedb.connect(f"{self.storage_dir}/{user_id}/{case_name}") + tbl = lance_client.open_table(case_name) - # Extract the embedding from the response - multivector_query = query_embedding["embedding"] - - # Search in Qdrant - search_result = self.qdrant_client.query_points(collection_name=case_name, query=multivector_query, limit=top_k) + query_embedding = self.colpali_client.query_text(query_text) + multivector_query = np.array(query_embedding["embedding"]) + search_result = tbl.search(multivector_query).limit(top_k).select(["index", "pdf_name", "pdf_page"]).to_list() end_time = time.time() logger.info(f"done search_images_by_text, total time {end_time - start_time}") @@ -156,7 +130,6 @@ def search_images_by_text(self, query_text, case_name: str, top_k: int): return search_result - def call_vllm(image_data: PIL.Image.Image, user_query: str, base_url: str, api_key: str, model: str) -> ImageAnswer: logger.info("start call_vllm") start_time = time.time() diff --git a/no-ocr-api/requirements.txt b/no-ocr-api/requirements.txt index 7b02934..d541715 100644 --- a/no-ocr-api/requirements.txt +++ b/no-ocr-api/requirements.txt @@ -1,4 +1,3 @@ -qdrant-client==1.12.1 datasets==3.1.0 pdf2image==1.16.3 pypdf==5.0.1 diff --git a/no-ocr-api/tests/lance_vs_qdrant.py b/no-ocr-api/tests/lance_vs_qdrant.py new file mode 100644 index 0000000..88557fa --- /dev/null +++ b/no-ocr-api/tests/lance_vs_qdrant.py @@ -0,0 +1,300 @@ +import PIL.Image +import lancedb +import numpy as np +import pyarrow as pa +import base64 +import io +import json +import logging +import time +from io import BytesIO +from pathlib import Path +from typing import List + +import PIL +import PIL.Image +from PIL import Image +import requests +from openai import OpenAI +from pydantic import BaseModel +from qdrant_client import QdrantClient, models +from tqdm import tqdm + +class CustomRailwayLogFormatter(logging.Formatter): + def format(self, record): + log_record = { + "time": self.formatTime(record), + "level": record.levelname, + "message": record.getMessage() + } + return json.dumps(log_record) + +def get_logger(): + logger = logging.getLogger() + logger.setLevel(logging.INFO) + handler = logging.StreamHandler() + for handler in logger.handlers[:]: + logger.removeHandler(handler) + formatter = CustomRailwayLogFormatter() + handler.setFormatter(formatter) + logger.addHandler(handler) + return logger + +logger = get_logger() + + +class ColPaliClient: + def __init__(self, base_url: str = "http://localhost:8000", token: str = "super-secret-token"): + self.base_url = base_url + self.headers = {"Authorization": f"Bearer {token}"} + + def query_text(self, query_text: str): + response = requests.post(f"{self.base_url}/query", headers=self.headers, params={"query_text": query_text}) + response.raise_for_status() + return response.json() + + def process_image(self, image_path: str): + with open(image_path, "rb") as image_file: + files = {"image": image_file} + response = requests.post(f"{self.base_url}/process_image", files=files, headers=self.headers) + response.raise_for_status() + return response.json() + + def process_pil_image(self, pil_image): + buffered = io.BytesIO() + pil_image.save(buffered, format="JPEG") + files = {"image": buffered.getvalue()} + response = requests.post(f"{self.base_url}/process_image", files=files, headers=self.headers) + response.raise_for_status() + return response.json() + + +class IngestClientQdrant: + def __init__(self, qdrant_uri: str, port: int, https: bool, index_threshold: int, vector_size: int, quantile: float, top_k: int, base_url: str, token: str): + self.qdrant_client = QdrantClient(qdrant_uri, port=port, https=https) + self.colpali_client = ColPaliClient(base_url, token) + self.index_threshold = index_threshold + self.vector_size = vector_size + self.quantile = quantile + self.top_k = top_k + + def ingest(self, case_name, dataset): + logger.info("start ingest") + start_time = time.time() + + self.qdrant_client.create_collection( + collection_name=case_name, + on_disk_payload=True, + optimizers_config=models.OptimizersConfigDiff(indexing_threshold=self.index_threshold), + vectors_config=models.VectorParams( + size=self.vector_size, + distance=models.Distance.COSINE, + multivector_config=models.MultiVectorConfig(comparator=models.MultiVectorComparator.MAX_SIM), + quantization_config=models.ScalarQuantization( + scalar=models.ScalarQuantizationConfig( + type=models.ScalarType.INT8, + quantile=self.quantile, + always_ram=True, + ), + ), + ), + ) + + # Use tqdm to create a progress bar + with tqdm(total=len(dataset), desc="Indexing Progress") as pbar: + for i in range(len(dataset)): + # The images are already PIL Image objects, so we can use them directly + image = dataset[i]["image"] + + # Process and encode image using ColPaliClient + response = self.colpali_client.process_pil_image(image) + image_embedding = response["embedding"] + + # Prepare point for Qdrant + point = models.PointStruct( + id=i, # we just use the index as the ID + vector=image_embedding, # This is now a list of vectors + payload={ + "index": dataset[i]["index"], + "pdf_name": dataset[i]["pdf_name"], + "pdf_page": dataset[i]["pdf_page"], + }, # can also add other metadata/data + ) + + try: + self.qdrant_client.upsert( + collection_name=case_name, + points=[point], + wait=False, + ) + except Exception as e: + logger.error(f"Error during upsert: {e}") + continue + pbar.update(1) + + logger.info("Indexing complete!") + end_time = time.time() + logger.info(f"done ingest, total time {end_time - start_time}") + +class IngestClientLance: + def __init__(self, lance_uri: str, vector_size: int, base_url: str = "http://localhost:8000", token: str = "super-secret-token"): + self.lance_client = lancedb.connect(lance_uri) + self.vector_size = vector_size + self.colpali_client = ColPaliClient(base_url, token) + + def ingest(self, case_name, dataset): + logger.info("start ingest") + start_time = time.time() + + + schema = pa.schema( + [ + pa.field("index", pa.int64()), + pa.field("pdf_name", pa.string()), + pa.field("pdf_page", pa.int64()), + pa.field("vector", pa.list_(pa.list_(pa.float32(), self.vector_size))), + ] + ) + + tbl = self.lance_client.create_table(case_name, schema=schema) + with tqdm(total=len(dataset), desc="Indexing Progress") as pbar: + for i in range(len(dataset)): + image = dataset[i]["image"] + response = self.colpali_client.process_pil_image(image) + image_embedding = response["embedding"] + + data = { + "index": dataset[i]["index"], + "pdf_name": dataset[i]["pdf_name"], + "pdf_page": dataset[i]["pdf_page"], + "vector": image_embedding, + } + + try: + tbl.add([data]) + except Exception as e: + logger.error(f"Error during upsert: {e}") + continue + pbar.update(1) + + tbl.create_index(metric="cosine") + + logger.info("Indexing complete!") + end_time = time.time() + logger.info(f"done ingest, total time {end_time - start_time}") + + def search_images_by_text(self, query_text, case_name: str, top_k: int): + logger.info("start search_images_by_text") + start_time = time.time() + + query_embedding = self.colpali_client.query_text(query_text) + multivector_query = np.array(query_embedding["embedding"]) + tbl = self.lance_client.open_table(case_name) + search_result = tbl.search(multivector_query).limit(top_k).select(["index", "pdf_name", "pdf_page"]).to_list() + + end_time = time.time() + logger.info(f"done search_images_by_text, total time {end_time - start_time}") + + return search_result + +class SearchClientQdrant: + def __init__(self, qdrant_uri: str, port: int, https: bool, top_k: int, base_url: str, token: str): + self.qdrant_client = QdrantClient(qdrant_uri, port=port, https=https) + self.colpali_client = ColPaliClient(base_url=base_url, token=token) + self.top_k = top_k + + def search_images_by_text(self, query_text, case_name: str, top_k: int): + logger.info("start search_images_by_text") + start_time = time.time() + + # Use ColPaliClient to query text and get the embedding + query_embedding = self.colpali_client.query_text(query_text) + + # Extract the embedding from the response + multivector_query = query_embedding["embedding"] + + # Search in Qdrant + search_result = self.qdrant_client.query_points(collection_name=case_name, query=multivector_query, limit=top_k) + + end_time = time.time() + logger.info(f"done search_images_by_text, total time {end_time - start_time}") + + return search_result + + +def benchmark_ingest_clients(): + # Create mock data + mock_data = [ + { + "index": i, + "pdf_name": f"document_{i}.pdf", + "pdf_page": i % 10, + "image": Image.fromarray(np.random.randint(0, 255, (100, 100, 3), dtype=np.uint8)) + } + for i in range(1024) + ] + + # Initialize clients + qdrant_client = IngestClientQdrant( + qdrant_uri="http://localhost", + port=6333, + https=False, + index_threshold=100, + vector_size=128, + quantile=0.99, + top_k=10, + base_url="http://localhost:8000", + token="super-secret-token" + ) + + lance_client = IngestClientLance( + lance_uri="lance-db-data/qwe123", + vector_size=128, + base_url="http://localhost:8000", + token="super-secret-token" + ) + + # Benchmark Qdrant ingestion + # start_time = time.time() + # qdrant_client.ingest("test_case_qdrant", mock_data) + # qdrant_duration = time.time() - start_time + # logger.info(f"Qdrant ingestion time: {qdrant_duration} seconds") + + # # Benchmark Lance ingestion + # start_time = time.time() + # lance_client.ingest("test_case_lance", mock_data) + # lance_duration = time.time() - start_time + # logger.info(f"Lance ingestion time: {lance_duration} seconds") + + # Initialize search clients + qdrant_search_client = SearchClientQdrant( + qdrant_uri="http://localhost", + port=6333, + https=False, + top_k=10, + base_url="http://localhost:8000", + token="super-secret-token" + ) + + # Benchmark Qdrant search + start_time = time.time() + qdrant_search_client.search_images_by_text("example query", "test_case_qdrant", 10) + qdrant_search_duration = time.time() - start_time + logger.info(f"Qdrant search time: {qdrant_search_duration} seconds") + + # Benchmark Lance search + start_time = time.time() + lance_client.search_images_by_text("example query", "test_case_lance", 10) + lance_search_duration = time.time() - start_time + logger.info(f"Lance search time: {lance_search_duration} seconds") + + return { + # "qdrant_ingestion_duration": qdrant_duration, + # "lance_ingestion_duration": lance_duration, + "qdrant_search_duration": qdrant_search_duration, + "lance_search_duration": lance_search_duration + } + +if __name__ == "__main__": + benchmark_results = benchmark_ingest_clients() + print(benchmark_results) diff --git a/no-ocr-api/tests/test_api.py b/no-ocr-api/tests/test_api.py index eaf2a36..191102d 100644 --- a/no-ocr-api/tests/test_api.py +++ b/no-ocr-api/tests/test_api.py @@ -95,3 +95,12 @@ def test_end2end(client): vllm_result = response.json() assert "answer" in vllm_result print(f"VLLM result: {vllm_result['answer']}") + + # Step 5: Delete the case + print(f"Deleting case '{case_name}' for user '{user_id}'") + response = client.delete(f"/delete_case/{case_name}", params={"user_id": user_id}) + print(f"Response status code for delete_case: {response.status_code}") + assert response.status_code == 200 + delete_result = response.json() + assert "message" in delete_result + print(f"Delete result: {delete_result['message']}") diff --git a/no-ocr-ui/src/components/Search.tsx b/no-ocr-ui/src/components/Search.tsx index e489fe5..e366cbb 100644 --- a/no-ocr-ui/src/components/Search.tsx +++ b/no-ocr-ui/src/components/Search.tsx @@ -192,7 +192,7 @@ export default function Search() { />

-
+

Metadata: {result.pdf_name}, Page {result.pdf_page}