Oleh Kuznetsov commited on
Commit
6e1997a
·
1 Parent(s): 07f77e4

feat(rec): Add data ingestion; add gemini demo

Browse files
Files changed (8) hide show
  1. .gitignore +2 -1
  2. Dockerfile +3 -2
  3. app.py +46 -9
  4. ingest.py +101 -0
  5. prompts/api.txt +7 -0
  6. pyproject.toml +5 -1
  7. requirements.txt +94 -9
  8. uv.lock +432 -2
.gitignore CHANGED
@@ -1,3 +1,4 @@
1
  *__pycache__*
2
  .venv
3
- .env
 
 
1
  *__pycache__*
2
  .venv
3
+ .env
4
+ data
Dockerfile CHANGED
@@ -27,12 +27,13 @@ USER user
27
 
28
  # Environment variables
29
  ENV HOME=/home/user \
30
- PATH=/home/user/.local/bin:$PATH
31
 
32
  # Setup application directory
33
  WORKDIR $HOME/app
34
  ADD --chown=user ./prompts $HOME/app/prompts
 
35
  ADD --chown=user ./app.py $HOME/app/app.py
36
 
37
  # Run the application
38
- CMD ["uv", "run", "--no-cache", "app.py"]
 
27
 
28
  # Environment variables
29
  ENV HOME=/home/user \
30
+ PATH=/home/user/.local/bin:$PATH
31
 
32
  # Setup application directory
33
  WORKDIR $HOME/app
34
  ADD --chown=user ./prompts $HOME/app/prompts
35
+ ADD --chown=user ./ingest.py $HOME/app/ingest.py
36
  ADD --chown=user ./app.py $HOME/app/app.py
37
 
38
  # Run the application
39
+ CMD ["/bin/sh", "-c", "uv run --no-cache ingest.py && uv run --no-cache app.py"]
app.py CHANGED
@@ -1,27 +1,32 @@
 
1
  import os
2
  import random
3
- import json
4
-
5
  from pathlib import Path
6
 
7
  import gradio as gr
 
 
8
  from pydantic import BaseModel
9
  from vllm import LLM, SamplingParams
10
  from vllm.sampling_params import GuidedDecodingParams
11
 
12
 
 
 
13
  VLLM_MODEL_NAME = os.getenv("VLLM_MODEL_NAME")
14
  VLLM_GPU_MEMORY_UTILIZATION = float(os.getenv("VLLM_GPU_MEMORY_UTILIZATION"))
15
  VLLM_MAX_SEQ_LEN = int(os.getenv("VLLM_MAX_SEQ_LEN"))
16
- HF_TOKEN = os.getenv("HF_TOKEN")
17
  VLLM_DTYPE = os.getenv("VLLM_DTYPE")
18
 
 
 
19
  # -------------------------------- HELPERS -------------------------------------
20
  def load_prompt(path: Path) -> str:
21
  with path.open("r") as file:
22
  prompt = file.read()
23
  return prompt
24
 
 
25
  # -------------------------------- Data Models -------------------------------
26
  class StructuredQueryRewriteResponse(BaseModel):
27
  general: str | None
@@ -30,10 +35,16 @@ class StructuredQueryRewriteResponse(BaseModel):
30
  technical: str | None
31
  curiosity: str | None
32
 
 
33
  class QueryRewrite(BaseModel):
34
  rewrites: list[str] | None = None
35
  structured: StructuredQueryRewriteResponse | None = None
36
 
 
 
 
 
 
37
  # -------------------------------- VLLM --------------------------------------
38
  local_llm = LLM(
39
  model=VLLM_MODEL_NAME,
@@ -59,8 +70,25 @@ vllm_system_prompt = (
59
  )
60
  vllm_prompt = load_prompt(Path("./prompts/local.txt"))
61
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
62
 
63
- # Dummy model functions for demonstration
64
  def recommend_sadaimrec(query: str):
65
  prompt = vllm_prompt.format(query=query)
66
  messages = [
@@ -79,18 +107,25 @@ def recommend_sadaimrec(query: str):
79
  return f"SADAIMREC: response to '{rewrite.model_dump_json(indent=4)}'"
80
 
81
 
82
- def recommend_chatgpt(query: str):
83
- return f"CHATGPT: response to '{query}'"
 
 
 
 
 
 
 
84
 
85
 
86
  # Mapping names to functions
87
  pipelines = {
88
  "sadaimrec": recommend_sadaimrec,
89
- "chatgpt": recommend_chatgpt,
90
  }
91
 
92
 
93
- # Interface logic
94
  def generate_responses(query):
95
  # Randomize model order
96
  pipeline_names = list(pipelines.keys())
@@ -188,4 +223,6 @@ with gr.Blocks() as demo:
188
  )
189
 
190
  if __name__ == "__main__":
191
- demo.launch(server_name="0.0.0.0", server_port=7860)
 
 
 
1
+ import json
2
  import os
3
  import random
 
 
4
  from pathlib import Path
5
 
6
  import gradio as gr
7
+ from google import genai
8
+ from google.genai import types
9
  from pydantic import BaseModel
10
  from vllm import LLM, SamplingParams
11
  from vllm.sampling_params import GuidedDecodingParams
12
 
13
 
14
+ HF_TOKEN = os.getenv("HF_TOKEN")
15
+
16
  VLLM_MODEL_NAME = os.getenv("VLLM_MODEL_NAME")
17
  VLLM_GPU_MEMORY_UTILIZATION = float(os.getenv("VLLM_GPU_MEMORY_UTILIZATION"))
18
  VLLM_MAX_SEQ_LEN = int(os.getenv("VLLM_MAX_SEQ_LEN"))
 
19
  VLLM_DTYPE = os.getenv("VLLM_DTYPE")
20
 
21
+ GEMINI_API_KEY = os.getenv("GEMINI_API_KEY")
22
+
23
  # -------------------------------- HELPERS -------------------------------------
24
  def load_prompt(path: Path) -> str:
25
  with path.open("r") as file:
26
  prompt = file.read()
27
  return prompt
28
 
29
+
30
  # -------------------------------- Data Models -------------------------------
31
  class StructuredQueryRewriteResponse(BaseModel):
32
  general: str | None
 
35
  technical: str | None
36
  curiosity: str | None
37
 
38
+
39
  class QueryRewrite(BaseModel):
40
  rewrites: list[str] | None = None
41
  structured: StructuredQueryRewriteResponse | None = None
42
 
43
+
44
+ class APIGenreRecommendationResponse(BaseModel):
45
+ genres: list[str]
46
+
47
+
48
  # -------------------------------- VLLM --------------------------------------
49
  local_llm = LLM(
50
  model=VLLM_MODEL_NAME,
 
70
  )
71
  vllm_prompt = load_prompt(Path("./prompts/local.txt"))
72
 
73
+ # -------------------------------- GEMINI ------------------------------------
74
+ gemini_config = types.GenerateContentConfig(
75
+ response_mime_type="application/json",
76
+ response_schema=APIGenreRecommendationResponse,
77
+ temperature=0.7,
78
+ max_output_tokens=1024,
79
+ system_instruction=("You are a helpful music genre recommendation assistant."),
80
+ )
81
+ gemini_llm = genai.Client(
82
+ api_key=GEMINI_API_KEY,
83
+ http_options={"api_version": "v1alpha"},
84
+ )
85
+ gemini_prompt = load_prompt(Path("./prompts/api.txt"))
86
+
87
+
88
+ # ---------------------------- RETRIEVAL ---------------------------------------
89
+
90
 
91
+ # ----------------------- GENERATE RECOMMENDATIONS -----------------------------
92
  def recommend_sadaimrec(query: str):
93
  prompt = vllm_prompt.format(query=query)
94
  messages = [
 
107
  return f"SADAIMREC: response to '{rewrite.model_dump_json(indent=4)}'"
108
 
109
 
110
+ def recommend_gemini(query: str):
111
+ prompt = gemini_prompt.format(query=query)
112
+ response = gemini_llm.models.generate_content(
113
+ model="gemini-2.0-flash",
114
+ contents=prompt,
115
+ config=gemini_config,
116
+ )
117
+ parsed_content: APIGenreRecommendationResponse = response.parsed
118
+ return f"CHATGPT: response to '{parsed_content.model_dump_json(indent=4)}'"
119
 
120
 
121
  # Mapping names to functions
122
  pipelines = {
123
  "sadaimrec": recommend_sadaimrec,
124
+ "chatgpt": recommend_gemini,
125
  }
126
 
127
 
128
+ # -------------------------------------- INTERFACE -----------------------------
129
  def generate_responses(query):
130
  # Randomize model order
131
  pipeline_names = list(pipelines.keys())
 
223
  )
224
 
225
  if __name__ == "__main__":
226
+ demo.queue(max_size=10, default_concurrency_limit=1).launch(
227
+ server_name="0.0.0.0", server_port=7860
228
+ )
ingest.py ADDED
@@ -0,0 +1,101 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ from pathlib import Path
3
+ from typing import Any
4
+
5
+ import pandas as pd
6
+ from fastembed import SparseTextEmbedding, SparseEmbedding
7
+ from sentence_transformers import SentenceTransformer
8
+ from huggingface_hub import hf_hub_download
9
+ from qdrant_client import QdrantClient
10
+ from qdrant_client import models as qmodels
11
+
12
+ DATA_PATH = Path(os.getenv("DATA_PATH"))
13
+ DB_PATH = DATA_PATH / "db"
14
+ HF_TOKEN = os.getenv("HF_TOKEN")
15
+
16
+ RECREATE_DB = bool(os.getenv("RECREATE_DB", "False").lower == "true")
17
+ DATA_REPO = os.getenv("DATA_REPO")
18
+ DATA_FILENAME = os.getenv("DATA_FILENAME")
19
+
20
+ client = QdrantClient(path=str(DB_PATH))
21
+ collection_name = "knowledge_cards"
22
+ dense_model_dims = 1024
23
+ dense_batch_size = 128
24
+ sparse_batch_size = 256
25
+
26
+ dense_encoder = SentenceTransformer(
27
+ model_name_or_path="mixedbread-ai/mxbai-embed-large-v1", device="cuda"
28
+ )
29
+ sparse_encoder = SparseTextEmbedding(model_name="Qdrant/bm25", cuda=True)
30
+
31
+
32
+ # Utils
33
+ def convert_serialized_sparse_embeddings(sparse_dict: dict[str, float]):
34
+ """Convert all dictionary keys to strings for PyArrow compatibility."""
35
+ return SparseEmbedding.from_dict({int(k): v for k, v in sparse_dict.items()})
36
+
37
+
38
+ def ingest_data(chunks: list[dict[str, Any]]):
39
+ if client.collection_exists(collection_name) and RECREATE_DB:
40
+ print("Recreating collection.", flush=True)
41
+ client.delete_collection(collection_name)
42
+ elif client.collection_exists(collection_name):
43
+ print("Collection already exists, skipping ingestion.", flush=True)
44
+ return
45
+
46
+ print("Ingesting knowledge cards...", flush=True)
47
+ client.create_collection(
48
+ collection_name=collection_name,
49
+ vectors_config={
50
+ "dense": qmodels.VectorParams(
51
+ size=dense_model_dims,
52
+ distance=qmodels.Distance.COSINE,
53
+ )
54
+ },
55
+ sparse_vectors_config={
56
+ "sparse": qmodels.SparseVectorParams(modifier=qmodels.Modifier.IDF)
57
+ },
58
+ )
59
+
60
+ # Generate embeddings
61
+ chunk_texts = [chunk["text"] for chunk in chunks]
62
+ dense_vectors = list(
63
+ dense_encoder.encode(
64
+ chunk_texts,
65
+ batch_size=dense_batch_size,
66
+ normalize_embeddings=True,
67
+ )
68
+ )
69
+ sparse_vectors = list(
70
+ sparse_encoder.embed(chunk_texts, batch_size=sparse_batch_size)
71
+ )
72
+
73
+ # Upload to db
74
+ client.upload_points(
75
+ collection_name=collection_name,
76
+ points=[
77
+ qmodels.PointStruct(
78
+ id=idx,
79
+ payload=chunk,
80
+ vector={"dense": dense, "sparse": sparse.as_object()},
81
+ )
82
+ for idx, (chunk, dense, sparse) in enumerate(
83
+ zip(chunks, dense_vectors, sparse_vectors)
84
+ )
85
+ ],
86
+ )
87
+
88
+
89
+ def ingest():
90
+ downloaded_path = hf_hub_download(
91
+ repo_id=DATA_REPO, filename=DATA_FILENAME, token=HF_TOKEN, repo_type="dataset"
92
+ )
93
+ print(f"Downloaded knowledge card dataset; path = {downloaded_path}", flush=True)
94
+ chunk_df = pd.read_parquet(downloaded_path)
95
+ chunks = chunk_df.to_dict(orient="records")
96
+ ingest_data(chunks=chunks)
97
+ print("Ingestion is finished.", flush=True)
98
+
99
+
100
+ if __name__ == "__main__":
101
+ ingest()
prompts/api.txt ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ # Purpose
2
+
3
+ Recommend 5 genres based on the user query
4
+
5
+ # Query
6
+
7
+ {query}
pyproject.toml CHANGED
@@ -5,8 +5,12 @@ description = "Add your description here"
5
  readme = "README.md"
6
  requires-python = ">=3.12"
7
  dependencies = [
 
8
  "gradio>=5.29.0",
9
- "openai>=1.77.0",
 
10
  "pydantic>=2.11.4",
 
 
11
  "vllm>=0.8.5.post1",
12
  ]
 
5
  readme = "README.md"
6
  requires-python = ">=3.12"
7
  dependencies = [
8
+ "google-genai>=1.13.0",
9
  "gradio>=5.29.0",
10
+ "pandas>=2.2.3",
11
+ "pyarrow>=20.0.0",
12
  "pydantic>=2.11.4",
13
+ "qdrant-client[fastembed-gpu]>=1.14.2",
14
+ "sentence-transformers>=4.1.0",
15
  "vllm>=0.8.5.post1",
16
  ]
requirements.txt CHANGED
@@ -14,6 +14,7 @@ annotated-types==0.7.0
14
  # via pydantic
15
  anyio==4.9.0
16
  # via
 
17
  # gradio
18
  # httpx
19
  # openai
@@ -29,7 +30,9 @@ attrs==25.3.0
29
  blake3==1.0.4
30
  # via vllm
31
  cachetools==5.5.2
32
- # via vllm
 
 
33
  certifi==2025.4.26
34
  # via
35
  # httpcore
@@ -47,6 +50,8 @@ cloudpickle==3.1.1
47
  # via
48
  # outlines
49
  # vllm
 
 
50
  compressed-tensors==0.9.3
51
  # via vllm
52
  cupy-cuda12x==13.4.1
@@ -77,6 +82,8 @@ fastapi==0.115.12
77
  # vllm
78
  fastapi-cli==0.0.7
79
  # via fastapi
 
 
80
  fastrlock==0.8.3
81
  # via cupy-cuda12x
82
  ffmpy==0.5.0
@@ -88,6 +95,8 @@ filelock==3.18.0
88
  # torch
89
  # transformers
90
  # vllm
 
 
91
  frozenlist==1.6.0
92
  # via
93
  # aiohttp
@@ -99,6 +108,10 @@ fsspec==2025.3.2
99
  # torch
100
  gguf==0.16.2
101
  # via vllm
 
 
 
 
102
  googleapis-common-protos==1.70.0
103
  # via
104
  # opentelemetry-exporter-otlp-proto-grpc
@@ -110,13 +123,19 @@ gradio-client==1.10.0
110
  groovy==0.1.2
111
  # via gradio
112
  grpcio==1.71.0
113
- # via opentelemetry-exporter-otlp-proto-grpc
 
 
114
  h11==0.16.0
115
  # via
116
  # httpcore
117
  # uvicorn
 
 
118
  hf-xet==1.1.0
119
  # via huggingface-hub
 
 
120
  httpcore==1.0.9
121
  # via httpx
122
  httptools==0.6.4
@@ -124,17 +143,25 @@ httptools==0.6.4
124
  httpx==0.28.1
125
  # via
126
  # fastapi
 
127
  # gradio
128
  # gradio-client
129
  # openai
 
130
  # safehttpx
131
  huggingface-hub==0.30.2
132
  # via
 
133
  # gradio
134
  # gradio-client
 
135
  # tokenizers
136
  # transformers
137
  # vllm
 
 
 
 
138
  idna==3.10
139
  # via
140
  # anyio
@@ -159,6 +186,8 @@ jinja2==3.1.6
159
  # torch
160
  jiter==0.9.0
161
  # via openai
 
 
162
  jsonschema==4.23.0
163
  # via
164
  # mistral-common
@@ -177,6 +206,8 @@ llvmlite==0.44.0
177
  # via numba
178
  lm-format-enforcer==0.10.11
179
  # via vllm
 
 
180
  markdown-it-py==3.0.0
181
  # via rich
182
  markupsafe==3.0.2
@@ -187,6 +218,8 @@ mdurl==0.1.2
187
  # via markdown-it-py
188
  mistral-common==1.5.4
189
  # via vllm
 
 
190
  mpmath==1.3.0
191
  # via sympy
192
  msgpack==1.1.0
@@ -210,13 +243,17 @@ numba==0.61.2
210
  numpy==2.2.5
211
  # via
212
  # cupy-cuda12x
 
213
  # gguf
214
  # gradio
215
  # mistral-common
216
  # numba
 
217
  # opencv-python-headless
218
  # outlines
219
  # pandas
 
 
220
  # scipy
221
  # torchvision
222
  # transformers
@@ -256,10 +293,10 @@ nvidia-nvjitlink-cu12==12.4.127
256
  # torch
257
  nvidia-nvtx-cu12==12.4.127
258
  # via torch
 
 
259
  openai==1.77.0
260
- # via
261
- # sdmrec-demo (pyproject.toml)
262
- # vllm
263
  opencv-python-headless==4.11.0.86
264
  # via
265
  # mistral-common
@@ -307,18 +344,25 @@ packaging==25.0
307
  # gradio-client
308
  # huggingface-hub
309
  # lm-format-enforcer
 
310
  # ray
311
  # transformers
312
  pandas==2.2.3
313
- # via gradio
 
 
314
  partial-json-parser==0.2.1.1.post5
315
  # via vllm
316
  pillow==11.2.1
317
  # via
 
318
  # gradio
319
  # mistral-common
 
320
  # torchvision
321
  # vllm
 
 
322
  prometheus-client==0.21.1
323
  # via
324
  # prometheus-fastapi-instrumentator
@@ -332,13 +376,25 @@ propcache==0.3.1
332
  protobuf==4.25.7
333
  # via
334
  # googleapis-common-protos
 
335
  # opentelemetry-proto
 
336
  # ray
337
  # vllm
338
  psutil==7.0.0
339
  # via vllm
340
  py-cpuinfo==9.0.0
341
  # via vllm
 
 
 
 
 
 
 
 
 
 
342
  pycountry==24.6.1
343
  # via outlines
344
  pydantic==2.11.4
@@ -346,11 +402,13 @@ pydantic==2.11.4
346
  # sdmrec-demo (pyproject.toml)
347
  # compressed-tensors
348
  # fastapi
 
349
  # gradio
350
  # lm-format-enforcer
351
  # mistral-common
352
  # openai
353
  # outlines
 
354
  # vllm
355
  # xgrammar
356
  pydantic-core==2.33.2
@@ -383,6 +441,8 @@ pyyaml==6.0.2
383
  # vllm
384
  pyzmq==26.4.0
385
  # via vllm
 
 
386
  ray==2.45.0
387
  # via vllm
388
  referencing==0.36.2
@@ -396,6 +456,8 @@ regex==2024.11.6
396
  # transformers
397
  requests==2.32.3
398
  # via
 
 
399
  # huggingface-hub
400
  # mistral-common
401
  # opentelemetry-exporter-otlp-proto-http
@@ -414,16 +476,25 @@ rpds-py==0.24.0
414
  # via
415
  # jsonschema
416
  # referencing
 
 
417
  ruff==0.11.8
418
  # via gradio
419
  safehttpx==0.1.6
420
  # via gradio
421
  safetensors==0.5.3
422
  # via transformers
 
 
423
  scipy==1.15.2
424
- # via vllm
 
 
 
425
  semantic-version==2.10.0
426
  # via gradio
 
 
427
  sentencepiece==0.2.0
428
  # via
429
  # gguf
@@ -450,7 +521,11 @@ starlette==0.46.2
450
  # gradio
451
  # prometheus-fastapi-instrumentator
452
  sympy==1.13.1
453
- # via torch
 
 
 
 
454
  tiktoken==0.9.0
455
  # via
456
  # mistral-common
@@ -458,6 +533,7 @@ tiktoken==0.9.0
458
  # xgrammar
459
  tokenizers==0.21.1
460
  # via
 
461
  # transformers
462
  # vllm
463
  tomlkit==0.13.2
@@ -466,6 +542,7 @@ torch==2.6.0
466
  # via
467
  # compressed-tensors
468
  # outlines
 
469
  # torchaudio
470
  # torchvision
471
  # vllm
@@ -477,15 +554,18 @@ torchvision==0.21.0
477
  # via vllm
478
  tqdm==4.67.1
479
  # via
 
480
  # gguf
481
  # huggingface-hub
482
  # openai
483
  # outlines
 
484
  # transformers
485
  # vllm
486
  transformers==4.51.3
487
  # via
488
  # compressed-tensors
 
489
  # vllm
490
  # xgrammar
491
  triton==3.2.0
@@ -500,6 +580,7 @@ typing-extensions==4.13.2
500
  # via
501
  # anyio
502
  # fastapi
 
503
  # gradio
504
  # gradio-client
505
  # huggingface-hub
@@ -511,6 +592,7 @@ typing-extensions==4.13.2
511
  # pydantic-core
512
  # referencing
513
  # rich-toolkit
 
514
  # torch
515
  # typer
516
  # typing-inspection
@@ -520,7 +602,9 @@ typing-inspection==0.4.0
520
  tzdata==2025.2
521
  # via pandas
522
  urllib3==2.4.0
523
- # via requests
 
 
524
  uvicorn==0.34.2
525
  # via
526
  # fastapi
@@ -536,6 +620,7 @@ watchfiles==1.0.5
536
  # vllm
537
  websockets==15.0.1
538
  # via
 
539
  # gradio-client
540
  # uvicorn
541
  wrapt==1.17.2
 
14
  # via pydantic
15
  anyio==4.9.0
16
  # via
17
+ # google-genai
18
  # gradio
19
  # httpx
20
  # openai
 
30
  blake3==1.0.4
31
  # via vllm
32
  cachetools==5.5.2
33
+ # via
34
+ # google-auth
35
+ # vllm
36
  certifi==2025.4.26
37
  # via
38
  # httpcore
 
50
  # via
51
  # outlines
52
  # vllm
53
+ coloredlogs==15.0.1
54
+ # via onnxruntime-gpu
55
  compressed-tensors==0.9.3
56
  # via vllm
57
  cupy-cuda12x==13.4.1
 
82
  # vllm
83
  fastapi-cli==0.0.7
84
  # via fastapi
85
+ fastembed-gpu==0.6.1
86
+ # via qdrant-client
87
  fastrlock==0.8.3
88
  # via cupy-cuda12x
89
  ffmpy==0.5.0
 
95
  # torch
96
  # transformers
97
  # vllm
98
+ flatbuffers==25.2.10
99
+ # via onnxruntime-gpu
100
  frozenlist==1.6.0
101
  # via
102
  # aiohttp
 
108
  # torch
109
  gguf==0.16.2
110
  # via vllm
111
+ google-auth==2.39.0
112
+ # via google-genai
113
+ google-genai==1.13.0
114
+ # via sdmrec-demo (pyproject.toml)
115
  googleapis-common-protos==1.70.0
116
  # via
117
  # opentelemetry-exporter-otlp-proto-grpc
 
123
  groovy==0.1.2
124
  # via gradio
125
  grpcio==1.71.0
126
+ # via
127
+ # opentelemetry-exporter-otlp-proto-grpc
128
+ # qdrant-client
129
  h11==0.16.0
130
  # via
131
  # httpcore
132
  # uvicorn
133
+ h2==4.2.0
134
+ # via httpx
135
  hf-xet==1.1.0
136
  # via huggingface-hub
137
+ hpack==4.1.0
138
+ # via h2
139
  httpcore==1.0.9
140
  # via httpx
141
  httptools==0.6.4
 
143
  httpx==0.28.1
144
  # via
145
  # fastapi
146
+ # google-genai
147
  # gradio
148
  # gradio-client
149
  # openai
150
+ # qdrant-client
151
  # safehttpx
152
  huggingface-hub==0.30.2
153
  # via
154
+ # fastembed-gpu
155
  # gradio
156
  # gradio-client
157
+ # sentence-transformers
158
  # tokenizers
159
  # transformers
160
  # vllm
161
+ humanfriendly==10.0
162
+ # via coloredlogs
163
+ hyperframe==6.1.0
164
+ # via h2
165
  idna==3.10
166
  # via
167
  # anyio
 
186
  # torch
187
  jiter==0.9.0
188
  # via openai
189
+ joblib==1.5.0
190
+ # via scikit-learn
191
  jsonschema==4.23.0
192
  # via
193
  # mistral-common
 
206
  # via numba
207
  lm-format-enforcer==0.10.11
208
  # via vllm
209
+ loguru==0.7.3
210
+ # via fastembed-gpu
211
  markdown-it-py==3.0.0
212
  # via rich
213
  markupsafe==3.0.2
 
218
  # via markdown-it-py
219
  mistral-common==1.5.4
220
  # via vllm
221
+ mmh3==5.1.0
222
+ # via fastembed-gpu
223
  mpmath==1.3.0
224
  # via sympy
225
  msgpack==1.1.0
 
243
  numpy==2.2.5
244
  # via
245
  # cupy-cuda12x
246
+ # fastembed-gpu
247
  # gguf
248
  # gradio
249
  # mistral-common
250
  # numba
251
+ # onnxruntime-gpu
252
  # opencv-python-headless
253
  # outlines
254
  # pandas
255
+ # qdrant-client
256
+ # scikit-learn
257
  # scipy
258
  # torchvision
259
  # transformers
 
293
  # torch
294
  nvidia-nvtx-cu12==12.4.127
295
  # via torch
296
+ onnxruntime-gpu==1.21.1
297
+ # via fastembed-gpu
298
  openai==1.77.0
299
+ # via vllm
 
 
300
  opencv-python-headless==4.11.0.86
301
  # via
302
  # mistral-common
 
344
  # gradio-client
345
  # huggingface-hub
346
  # lm-format-enforcer
347
+ # onnxruntime-gpu
348
  # ray
349
  # transformers
350
  pandas==2.2.3
351
+ # via
352
+ # sdmrec-demo (pyproject.toml)
353
+ # gradio
354
  partial-json-parser==0.2.1.1.post5
355
  # via vllm
356
  pillow==11.2.1
357
  # via
358
+ # fastembed-gpu
359
  # gradio
360
  # mistral-common
361
+ # sentence-transformers
362
  # torchvision
363
  # vllm
364
+ portalocker==2.10.1
365
+ # via qdrant-client
366
  prometheus-client==0.21.1
367
  # via
368
  # prometheus-fastapi-instrumentator
 
376
  protobuf==4.25.7
377
  # via
378
  # googleapis-common-protos
379
+ # onnxruntime-gpu
380
  # opentelemetry-proto
381
+ # qdrant-client
382
  # ray
383
  # vllm
384
  psutil==7.0.0
385
  # via vllm
386
  py-cpuinfo==9.0.0
387
  # via vllm
388
+ py-rust-stemmers==0.1.5
389
+ # via fastembed-gpu
390
+ pyarrow==20.0.0
391
+ # via sdmrec-demo (pyproject.toml)
392
+ pyasn1==0.6.1
393
+ # via
394
+ # pyasn1-modules
395
+ # rsa
396
+ pyasn1-modules==0.4.2
397
+ # via google-auth
398
  pycountry==24.6.1
399
  # via outlines
400
  pydantic==2.11.4
 
402
  # sdmrec-demo (pyproject.toml)
403
  # compressed-tensors
404
  # fastapi
405
+ # google-genai
406
  # gradio
407
  # lm-format-enforcer
408
  # mistral-common
409
  # openai
410
  # outlines
411
+ # qdrant-client
412
  # vllm
413
  # xgrammar
414
  pydantic-core==2.33.2
 
441
  # vllm
442
  pyzmq==26.4.0
443
  # via vllm
444
+ qdrant-client==1.14.2
445
+ # via sdmrec-demo (pyproject.toml)
446
  ray==2.45.0
447
  # via vllm
448
  referencing==0.36.2
 
456
  # transformers
457
  requests==2.32.3
458
  # via
459
+ # fastembed-gpu
460
+ # google-genai
461
  # huggingface-hub
462
  # mistral-common
463
  # opentelemetry-exporter-otlp-proto-http
 
476
  # via
477
  # jsonschema
478
  # referencing
479
+ rsa==4.9.1
480
+ # via google-auth
481
  ruff==0.11.8
482
  # via gradio
483
  safehttpx==0.1.6
484
  # via gradio
485
  safetensors==0.5.3
486
  # via transformers
487
+ scikit-learn==1.6.1
488
+ # via sentence-transformers
489
  scipy==1.15.2
490
+ # via
491
+ # scikit-learn
492
+ # sentence-transformers
493
+ # vllm
494
  semantic-version==2.10.0
495
  # via gradio
496
+ sentence-transformers==4.1.0
497
+ # via sdmrec-demo (pyproject.toml)
498
  sentencepiece==0.2.0
499
  # via
500
  # gguf
 
521
  # gradio
522
  # prometheus-fastapi-instrumentator
523
  sympy==1.13.1
524
+ # via
525
+ # onnxruntime-gpu
526
+ # torch
527
+ threadpoolctl==3.6.0
528
+ # via scikit-learn
529
  tiktoken==0.9.0
530
  # via
531
  # mistral-common
 
533
  # xgrammar
534
  tokenizers==0.21.1
535
  # via
536
+ # fastembed-gpu
537
  # transformers
538
  # vllm
539
  tomlkit==0.13.2
 
542
  # via
543
  # compressed-tensors
544
  # outlines
545
+ # sentence-transformers
546
  # torchaudio
547
  # torchvision
548
  # vllm
 
554
  # via vllm
555
  tqdm==4.67.1
556
  # via
557
+ # fastembed-gpu
558
  # gguf
559
  # huggingface-hub
560
  # openai
561
  # outlines
562
+ # sentence-transformers
563
  # transformers
564
  # vllm
565
  transformers==4.51.3
566
  # via
567
  # compressed-tensors
568
+ # sentence-transformers
569
  # vllm
570
  # xgrammar
571
  triton==3.2.0
 
580
  # via
581
  # anyio
582
  # fastapi
583
+ # google-genai
584
  # gradio
585
  # gradio-client
586
  # huggingface-hub
 
592
  # pydantic-core
593
  # referencing
594
  # rich-toolkit
595
+ # sentence-transformers
596
  # torch
597
  # typer
598
  # typing-inspection
 
602
  tzdata==2025.2
603
  # via pandas
604
  urllib3==2.4.0
605
+ # via
606
+ # qdrant-client
607
+ # requests
608
  uvicorn==0.34.2
609
  # via
610
  # fastapi
 
620
  # vllm
621
  websockets==15.0.1
622
  # via
623
+ # google-genai
624
  # gradio-client
625
  # uvicorn
626
  wrapt==1.17.2
uv.lock CHANGED
@@ -339,6 +339,18 @@ wheels = [
339
  { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" },
340
  ]
341
 
 
 
 
 
 
 
 
 
 
 
 
 
342
  [[package]]
343
  name = "compressed-tensors"
344
  version = "0.9.3"
@@ -496,6 +508,27 @@ standard = [
496
  { name = "uvicorn", extra = ["standard"] },
497
  ]
498
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
499
  [[package]]
500
  name = "fastrlock"
501
  version = "0.8.3"
@@ -532,6 +565,15 @@ wheels = [
532
  { url = "https://files.pythonhosted.org/packages/4d/36/2a115987e2d8c300a974597416d9de88f2444426de9571f4b59b2cca3acc/filelock-3.18.0-py3-none-any.whl", hash = "sha256:c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de", size = 16215, upload-time = "2025-03-14T07:11:39.145Z" },
533
  ]
534
 
 
 
 
 
 
 
 
 
 
535
  [[package]]
536
  name = "frozenlist"
537
  version = "1.6.0"
@@ -616,6 +658,38 @@ wheels = [
616
  { url = "https://files.pythonhosted.org/packages/15/18/89697e4996920aa1e60f0061d0bb110f738a5ba3de12ed74309f51a10a0a/gguf-0.16.2-py3-none-any.whl", hash = "sha256:e73eb19b30fcc7c7f32894345024dda8b1a0c959b94a12b7c40ded8dd3f96810", size = 92154, upload-time = "2025-04-19T14:31:02.279Z" },
617
  ]
618
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
619
  [[package]]
620
  name = "googleapis-common-protos"
621
  version = "1.70.0"
@@ -731,6 +805,19 @@ wheels = [
731
  { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" },
732
  ]
733
 
 
 
 
 
 
 
 
 
 
 
 
 
 
734
  [[package]]
735
  name = "hf-xet"
736
  version = "1.1.0"
@@ -746,6 +833,15 @@ wheels = [
746
  { url = "https://files.pythonhosted.org/packages/53/d6/cb32842cbf1cf5a154b41fa918a2fd86003af9bca227a2397cd7f312a8a6/hf_xet-1.1.0-cp37-abi3-win_amd64.whl", hash = "sha256:73153eab9abf3d6973b21e94a67ccba5d595c3e12feb8c0bf50be02964e7f126", size = 4204376, upload-time = "2025-04-29T21:15:52.69Z" },
747
  ]
748
 
 
 
 
 
 
 
 
 
 
749
  [[package]]
750
  name = "httpcore"
751
  version = "1.0.9"
@@ -796,6 +892,11 @@ wheels = [
796
  { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517, upload-time = "2024-12-06T15:37:21.509Z" },
797
  ]
798
 
 
 
 
 
 
799
  [[package]]
800
  name = "huggingface-hub"
801
  version = "0.30.2"
@@ -819,6 +920,27 @@ hf-xet = [
819
  { name = "hf-xet" },
820
  ]
821
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
822
  [[package]]
823
  name = "idna"
824
  version = "3.10"
@@ -896,6 +1018,15 @@ wheels = [
896
  { url = "https://files.pythonhosted.org/packages/ee/47/3729f00f35a696e68da15d64eb9283c330e776f3b5789bac7f2c0c4df209/jiter-0.9.0-cp313-cp313t-win_amd64.whl", hash = "sha256:6f7838bc467ab7e8ef9f387bd6de195c43bad82a569c1699cb822f6609dd4cdf", size = 206867, upload-time = "2025-03-10T21:36:25.843Z" },
897
  ]
898
 
 
 
 
 
 
 
 
 
 
899
  [[package]]
900
  name = "jsonschema"
901
  version = "4.23.0"
@@ -978,6 +1109,19 @@ wheels = [
978
  { url = "https://files.pythonhosted.org/packages/06/cb/bf172960241842e953b3354247f792aae2fc5221552a0741a1c98f35b6f7/lm_format_enforcer-0.10.11-py3-none-any.whl", hash = "sha256:563e0dbc930a6d50fb687951506c5de098c6e962601be0ce723f3b7d0b916a1b", size = 44229, upload-time = "2025-02-26T22:18:42.543Z" },
979
  ]
980
 
 
 
 
 
 
 
 
 
 
 
 
 
 
981
  [[package]]
982
  name = "markdown-it-py"
983
  version = "3.0.0"
@@ -1061,6 +1205,46 @@ opencv = [
1061
  { name = "opencv-python-headless" },
1062
  ]
1063
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1064
  [[package]]
1065
  name = "mpmath"
1066
  version = "1.3.0"
@@ -1402,6 +1586,26 @@ wheels = [
1402
  { url = "https://files.pythonhosted.org/packages/87/20/199b8713428322a2f22b722c62b8cc278cc53dffa9705d744484b5035ee9/nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:781e950d9b9f60d8241ccea575b32f5105a5baf4c2351cab5256a24869f12a1a", size = 99144, upload-time = "2024-04-03T20:56:12.406Z" },
1403
  ]
1404
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1405
  [[package]]
1406
  name = "openai"
1407
  version = "1.77.0"
@@ -1737,6 +1941,18 @@ wheels = [
1737
  { url = "https://files.pythonhosted.org/packages/67/32/32dc030cfa91ca0fc52baebbba2e009bb001122a1daa8b6a79ad830b38d3/pillow-11.2.1-cp313-cp313t-win_arm64.whl", hash = "sha256:225c832a13326e34f212d2072982bb1adb210e0cc0b153e688743018c94a2681", size = 2417234, upload-time = "2025-04-12T17:49:08.399Z" },
1738
  ]
1739
 
 
 
 
 
 
 
 
 
 
 
 
 
1740
  [[package]]
1741
  name = "prometheus-client"
1742
  version = "0.21.1"
@@ -1854,6 +2070,90 @@ wheels = [
1854
  { url = "https://files.pythonhosted.org/packages/e0/a9/023730ba63db1e494a271cb018dcd361bd2c917ba7004c3e49d5daf795a2/py_cpuinfo-9.0.0-py3-none-any.whl", hash = "sha256:859625bc251f64e21f077d099d4162689c762b5d6a4c3c97553d56241c9674d5", size = 22335, upload-time = "2022-10-25T20:38:27.636Z" },
1855
  ]
1856
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1857
  [[package]]
1858
  name = "pycountry"
1859
  version = "24.6.1"
@@ -1947,6 +2247,15 @@ wheels = [
1947
  { url = "https://files.pythonhosted.org/packages/8a/0b/9fcc47d19c48b59121088dd6da2488a49d5f72dacf8262e2790a1d2c7d15/pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c", size = 1225293, upload-time = "2025-01-06T17:26:25.553Z" },
1948
  ]
1949
 
 
 
 
 
 
 
 
 
 
1950
  [[package]]
1951
  name = "python-dateutil"
1952
  version = "2.9.0.post0"
@@ -1995,6 +2304,19 @@ wheels = [
1995
  { url = "https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00", size = 509225, upload-time = "2025-03-25T02:24:58.468Z" },
1996
  ]
1997
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1998
  [[package]]
1999
  name = "pyyaml"
2000
  version = "6.0.2"
@@ -2062,6 +2384,29 @@ wheels = [
2062
  { url = "https://files.pythonhosted.org/packages/05/4c/bf3cad0d64c3214ac881299c4562b815f05d503bccc513e3fd4fdc6f67e4/pyzmq-26.4.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:26a2a7451606b87f67cdeca2c2789d86f605da08b4bd616b1a9981605ca3a364", size = 1395540, upload-time = "2025-04-04T12:04:30.562Z" },
2063
  ]
2064
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2065
  [[package]]
2066
  name = "ray"
2067
  version = "2.45.0"
@@ -2234,6 +2579,18 @@ wheels = [
2234
  { url = "https://files.pythonhosted.org/packages/2d/e5/22865285789f3412ad0c3d7ec4dc0a3e86483b794be8a5d9ed5a19390900/rpds_py-0.24.0-cp313-cp313t-win_amd64.whl", hash = "sha256:675269d407a257b8c00a6b58205b72eec8231656506c56fd429d924ca00bb350", size = 237354, upload-time = "2025-03-26T14:54:33.199Z" },
2235
  ]
2236
 
 
 
 
 
 
 
 
 
 
 
 
 
2237
  [[package]]
2238
  name = "ruff"
2239
  version = "0.11.8"
@@ -2293,6 +2650,34 @@ wheels = [
2293
  { url = "https://files.pythonhosted.org/packages/69/e2/b011c38e5394c4c18fb5500778a55ec43ad6106126e74723ffaee246f56e/safetensors-0.5.3-cp38-abi3-win_amd64.whl", hash = "sha256:836cbbc320b47e80acd40e44c8682db0e8ad7123209f69b093def21ec7cafd11", size = 308878, upload-time = "2025-02-26T09:15:14.99Z" },
2294
  ]
2295
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2296
  [[package]]
2297
  name = "scipy"
2298
  version = "1.15.2"
@@ -2336,17 +2721,25 @@ name = "sdmrec-demo"
2336
  version = "0.1.0"
2337
  source = { virtual = "." }
2338
  dependencies = [
 
2339
  { name = "gradio" },
2340
- { name = "openai" },
 
2341
  { name = "pydantic" },
 
 
2342
  { name = "vllm" },
2343
  ]
2344
 
2345
  [package.metadata]
2346
  requires-dist = [
 
2347
  { name = "gradio", specifier = ">=5.29.0" },
2348
- { name = "openai", specifier = ">=1.77.0" },
 
2349
  { name = "pydantic", specifier = ">=2.11.4" },
 
 
2350
  { name = "vllm", specifier = ">=0.8.5.post1" },
2351
  ]
2352
 
@@ -2359,6 +2752,25 @@ wheels = [
2359
  { url = "https://files.pythonhosted.org/packages/6a/23/8146aad7d88f4fcb3a6218f41a60f6c2d4e3a72de72da1825dc7c8f7877c/semantic_version-2.10.0-py2.py3-none-any.whl", hash = "sha256:de78a3b8e0feda74cabc54aab2da702113e33ac9d9eb9d2389bcf1f58b7d9177", size = 15552, upload-time = "2022-05-26T13:35:21.206Z" },
2360
  ]
2361
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2362
  [[package]]
2363
  name = "sentencepiece"
2364
  version = "0.2.0"
@@ -2435,6 +2847,15 @@ wheels = [
2435
  { url = "https://files.pythonhosted.org/packages/b2/fe/81695a1aa331a842b582453b605175f419fe8540355886031328089d840a/sympy-1.13.1-py3-none-any.whl", hash = "sha256:db36cdc64bf61b9b24578b6f7bab1ecdd2452cf008f34faa33776680c26d66f8", size = 6189177, upload-time = "2024-07-19T09:26:48.863Z" },
2436
  ]
2437
 
 
 
 
 
 
 
 
 
 
2438
  [[package]]
2439
  name = "tiktoken"
2440
  version = "0.9.0"
@@ -2844,6 +3265,15 @@ wheels = [
2844
  { url = "https://files.pythonhosted.org/packages/fa/a8/5b41e0da817d64113292ab1f8247140aac61cbf6cfd085d6a0fa77f4984f/websockets-15.0.1-py3-none-any.whl", hash = "sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f", size = 169743, upload-time = "2025-03-05T20:03:39.41Z" },
2845
  ]
2846
 
 
 
 
 
 
 
 
 
 
2847
  [[package]]
2848
  name = "wrapt"
2849
  version = "1.17.2"
 
339
  { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" },
340
  ]
341
 
342
+ [[package]]
343
+ name = "coloredlogs"
344
+ version = "15.0.1"
345
+ source = { registry = "https://pypi.org/simple" }
346
+ dependencies = [
347
+ { name = "humanfriendly" },
348
+ ]
349
+ sdist = { url = "https://files.pythonhosted.org/packages/cc/c7/eed8f27100517e8c0e6b923d5f0845d0cb99763da6fdee00478f91db7325/coloredlogs-15.0.1.tar.gz", hash = "sha256:7c991aa71a4577af2f82600d8f8f3a89f936baeaf9b50a9c197da014e5bf16b0", size = 278520, upload-time = "2021-06-11T10:22:45.202Z" }
350
+ wheels = [
351
+ { url = "https://files.pythonhosted.org/packages/a7/06/3d6badcf13db419e25b07041d9c7b4a2c331d3f4e7134445ec5df57714cd/coloredlogs-15.0.1-py2.py3-none-any.whl", hash = "sha256:612ee75c546f53e92e70049c9dbfcc18c935a2b9a53b66085ce9ef6a6e5c0934", size = 46018, upload-time = "2021-06-11T10:22:42.561Z" },
352
+ ]
353
+
354
  [[package]]
355
  name = "compressed-tensors"
356
  version = "0.9.3"
 
508
  { name = "uvicorn", extra = ["standard"] },
509
  ]
510
 
511
+ [[package]]
512
+ name = "fastembed-gpu"
513
+ version = "0.6.1"
514
+ source = { registry = "https://pypi.org/simple" }
515
+ dependencies = [
516
+ { name = "huggingface-hub" },
517
+ { name = "loguru" },
518
+ { name = "mmh3" },
519
+ { name = "numpy" },
520
+ { name = "onnxruntime-gpu" },
521
+ { name = "pillow" },
522
+ { name = "py-rust-stemmers" },
523
+ { name = "requests" },
524
+ { name = "tokenizers" },
525
+ { name = "tqdm" },
526
+ ]
527
+ sdist = { url = "https://files.pythonhosted.org/packages/5e/f1/0cde735baa81827ef54c875ab1689f307bf6562f5ec12e3aeed53f002e56/fastembed_gpu-0.6.1.tar.gz", hash = "sha256:5a9ed9cc5f81c26eed9e99cd5f8d4af8ceefcf2c0c1a879432aa1fa9a72cc2dd", size = 51705, upload-time = "2025-04-10T13:48:17.65Z" }
528
+ wheels = [
529
+ { url = "https://files.pythonhosted.org/packages/7f/f1/4746523eaf1273be4274244cadd72b25fd30c31c4113b61d5866388318e8/fastembed_gpu-0.6.1-py3-none-any.whl", hash = "sha256:66273814c4c69be850236663547549770c6085d6289c4e8ecfae9a4f626c72f0", size = 86839, upload-time = "2025-04-10T13:48:16.549Z" },
530
+ ]
531
+
532
  [[package]]
533
  name = "fastrlock"
534
  version = "0.8.3"
 
565
  { url = "https://files.pythonhosted.org/packages/4d/36/2a115987e2d8c300a974597416d9de88f2444426de9571f4b59b2cca3acc/filelock-3.18.0-py3-none-any.whl", hash = "sha256:c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de", size = 16215, upload-time = "2025-03-14T07:11:39.145Z" },
566
  ]
567
 
568
+ [[package]]
569
+ name = "flatbuffers"
570
+ version = "25.2.10"
571
+ source = { registry = "https://pypi.org/simple" }
572
+ sdist = { url = "https://files.pythonhosted.org/packages/e4/30/eb5dce7994fc71a2f685d98ec33cc660c0a5887db5610137e60d8cbc4489/flatbuffers-25.2.10.tar.gz", hash = "sha256:97e451377a41262f8d9bd4295cc836133415cc03d8cb966410a4af92eb00d26e", size = 22170, upload-time = "2025-02-11T04:26:46.257Z" }
573
+ wheels = [
574
+ { url = "https://files.pythonhosted.org/packages/b8/25/155f9f080d5e4bc0082edfda032ea2bc2b8fab3f4d25d46c1e9dd22a1a89/flatbuffers-25.2.10-py2.py3-none-any.whl", hash = "sha256:ebba5f4d5ea615af3f7fd70fc310636fbb2bbd1f566ac0a23d98dd412de50051", size = 30953, upload-time = "2025-02-11T04:26:44.484Z" },
575
+ ]
576
+
577
  [[package]]
578
  name = "frozenlist"
579
  version = "1.6.0"
 
658
  { url = "https://files.pythonhosted.org/packages/15/18/89697e4996920aa1e60f0061d0bb110f738a5ba3de12ed74309f51a10a0a/gguf-0.16.2-py3-none-any.whl", hash = "sha256:e73eb19b30fcc7c7f32894345024dda8b1a0c959b94a12b7c40ded8dd3f96810", size = 92154, upload-time = "2025-04-19T14:31:02.279Z" },
659
  ]
660
 
661
+ [[package]]
662
+ name = "google-auth"
663
+ version = "2.39.0"
664
+ source = { registry = "https://pypi.org/simple" }
665
+ dependencies = [
666
+ { name = "cachetools" },
667
+ { name = "pyasn1-modules" },
668
+ { name = "rsa" },
669
+ ]
670
+ sdist = { url = "https://files.pythonhosted.org/packages/cb/8e/8f45c9a32f73e786e954b8f9761c61422955d23c45d1e8c347f9b4b59e8e/google_auth-2.39.0.tar.gz", hash = "sha256:73222d43cdc35a3aeacbfdcaf73142a97839f10de930550d89ebfe1d0a00cde7", size = 274834, upload-time = "2025-04-14T17:44:49.402Z" }
671
+ wheels = [
672
+ { url = "https://files.pythonhosted.org/packages/ce/12/ad37a1ef86006d0a0117fc06a4a00bd461c775356b534b425f00dde208ea/google_auth-2.39.0-py2.py3-none-any.whl", hash = "sha256:0150b6711e97fb9f52fe599f55648950cc4540015565d8fbb31be2ad6e1548a2", size = 212319, upload-time = "2025-04-14T17:44:47.699Z" },
673
+ ]
674
+
675
+ [[package]]
676
+ name = "google-genai"
677
+ version = "1.13.0"
678
+ source = { registry = "https://pypi.org/simple" }
679
+ dependencies = [
680
+ { name = "anyio" },
681
+ { name = "google-auth" },
682
+ { name = "httpx" },
683
+ { name = "pydantic" },
684
+ { name = "requests" },
685
+ { name = "typing-extensions" },
686
+ { name = "websockets" },
687
+ ]
688
+ sdist = { url = "https://files.pythonhosted.org/packages/5e/1f/0861dad47febbb391123a529f3655582e2a7ce14aadb6ddc527dd7dea470/google_genai-1.13.0.tar.gz", hash = "sha256:de7b4960d361c7ea85b715ce0e07fe34903d94affa82d566d9eb04e8f92512b9", size = 165727, upload-time = "2025-04-30T23:47:02.605Z" }
689
+ wheels = [
690
+ { url = "https://files.pythonhosted.org/packages/c5/2c/1833fa15311fa4f0790e9c8ea3488382fe428c3eca62b329d6aa355871ae/google_genai-1.13.0-py3-none-any.whl", hash = "sha256:e88417c95f333827ed051282803db627192fd8e5fdf5b49b6f26644a67775d1a", size = 164405, upload-time = "2025-04-30T23:47:00.901Z" },
691
+ ]
692
+
693
  [[package]]
694
  name = "googleapis-common-protos"
695
  version = "1.70.0"
 
805
  { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" },
806
  ]
807
 
808
+ [[package]]
809
+ name = "h2"
810
+ version = "4.2.0"
811
+ source = { registry = "https://pypi.org/simple" }
812
+ dependencies = [
813
+ { name = "hpack" },
814
+ { name = "hyperframe" },
815
+ ]
816
+ sdist = { url = "https://files.pythonhosted.org/packages/1b/38/d7f80fd13e6582fb8e0df8c9a653dcc02b03ca34f4d72f34869298c5baf8/h2-4.2.0.tar.gz", hash = "sha256:c8a52129695e88b1a0578d8d2cc6842bbd79128ac685463b887ee278126ad01f", size = 2150682, upload-time = "2025-02-02T07:43:51.815Z" }
817
+ wheels = [
818
+ { url = "https://files.pythonhosted.org/packages/d0/9e/984486f2d0a0bd2b024bf4bc1c62688fcafa9e61991f041fb0e2def4a982/h2-4.2.0-py3-none-any.whl", hash = "sha256:479a53ad425bb29af087f3458a61d30780bc818e4ebcf01f0b536ba916462ed0", size = 60957, upload-time = "2025-02-01T11:02:26.481Z" },
819
+ ]
820
+
821
  [[package]]
822
  name = "hf-xet"
823
  version = "1.1.0"
 
833
  { url = "https://files.pythonhosted.org/packages/53/d6/cb32842cbf1cf5a154b41fa918a2fd86003af9bca227a2397cd7f312a8a6/hf_xet-1.1.0-cp37-abi3-win_amd64.whl", hash = "sha256:73153eab9abf3d6973b21e94a67ccba5d595c3e12feb8c0bf50be02964e7f126", size = 4204376, upload-time = "2025-04-29T21:15:52.69Z" },
834
  ]
835
 
836
+ [[package]]
837
+ name = "hpack"
838
+ version = "4.1.0"
839
+ source = { registry = "https://pypi.org/simple" }
840
+ sdist = { url = "https://files.pythonhosted.org/packages/2c/48/71de9ed269fdae9c8057e5a4c0aa7402e8bb16f2c6e90b3aa53327b113f8/hpack-4.1.0.tar.gz", hash = "sha256:ec5eca154f7056aa06f196a557655c5b009b382873ac8d1e66e79e87535f1dca", size = 51276, upload-time = "2025-01-22T21:44:58.347Z" }
841
+ wheels = [
842
+ { url = "https://files.pythonhosted.org/packages/07/c6/80c95b1b2b94682a72cbdbfb85b81ae2daffa4291fbfa1b1464502ede10d/hpack-4.1.0-py3-none-any.whl", hash = "sha256:157ac792668d995c657d93111f46b4535ed114f0c9c8d672271bbec7eae1b496", size = 34357, upload-time = "2025-01-22T21:44:56.92Z" },
843
+ ]
844
+
845
  [[package]]
846
  name = "httpcore"
847
  version = "1.0.9"
 
892
  { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517, upload-time = "2024-12-06T15:37:21.509Z" },
893
  ]
894
 
895
+ [package.optional-dependencies]
896
+ http2 = [
897
+ { name = "h2" },
898
+ ]
899
+
900
  [[package]]
901
  name = "huggingface-hub"
902
  version = "0.30.2"
 
920
  { name = "hf-xet" },
921
  ]
922
 
923
+ [[package]]
924
+ name = "humanfriendly"
925
+ version = "10.0"
926
+ source = { registry = "https://pypi.org/simple" }
927
+ dependencies = [
928
+ { name = "pyreadline3", marker = "sys_platform == 'win32'" },
929
+ ]
930
+ sdist = { url = "https://files.pythonhosted.org/packages/cc/3f/2c29224acb2e2df4d2046e4c73ee2662023c58ff5b113c4c1adac0886c43/humanfriendly-10.0.tar.gz", hash = "sha256:6b0b831ce8f15f7300721aa49829fc4e83921a9a301cc7f606be6686a2288ddc", size = 360702, upload-time = "2021-09-17T21:40:43.31Z" }
931
+ wheels = [
932
+ { url = "https://files.pythonhosted.org/packages/f0/0f/310fb31e39e2d734ccaa2c0fb981ee41f7bd5056ce9bc29b2248bd569169/humanfriendly-10.0-py2.py3-none-any.whl", hash = "sha256:1697e1a8a8f550fd43c2865cd84542fc175a61dcb779b6fee18cf6b6ccba1477", size = 86794, upload-time = "2021-09-17T21:40:39.897Z" },
933
+ ]
934
+
935
+ [[package]]
936
+ name = "hyperframe"
937
+ version = "6.1.0"
938
+ source = { registry = "https://pypi.org/simple" }
939
+ sdist = { url = "https://files.pythonhosted.org/packages/02/e7/94f8232d4a74cc99514c13a9f995811485a6903d48e5d952771ef6322e30/hyperframe-6.1.0.tar.gz", hash = "sha256:f630908a00854a7adeabd6382b43923a4c4cd4b821fcb527e6ab9e15382a3b08", size = 26566, upload-time = "2025-01-22T21:41:49.302Z" }
940
+ wheels = [
941
+ { url = "https://files.pythonhosted.org/packages/48/30/47d0bf6072f7252e6521f3447ccfa40b421b6824517f82854703d0f5a98b/hyperframe-6.1.0-py3-none-any.whl", hash = "sha256:b03380493a519fce58ea5af42e4a42317bf9bd425596f7a0835ffce80f1a42e5", size = 13007, upload-time = "2025-01-22T21:41:47.295Z" },
942
+ ]
943
+
944
  [[package]]
945
  name = "idna"
946
  version = "3.10"
 
1018
  { url = "https://files.pythonhosted.org/packages/ee/47/3729f00f35a696e68da15d64eb9283c330e776f3b5789bac7f2c0c4df209/jiter-0.9.0-cp313-cp313t-win_amd64.whl", hash = "sha256:6f7838bc467ab7e8ef9f387bd6de195c43bad82a569c1699cb822f6609dd4cdf", size = 206867, upload-time = "2025-03-10T21:36:25.843Z" },
1019
  ]
1020
 
1021
+ [[package]]
1022
+ name = "joblib"
1023
+ version = "1.5.0"
1024
+ source = { registry = "https://pypi.org/simple" }
1025
+ sdist = { url = "https://files.pythonhosted.org/packages/30/08/8bd4a0250247861420a040b33ccf42f43c426ac91d99405374ef117e5872/joblib-1.5.0.tar.gz", hash = "sha256:d8757f955389a3dd7a23152e43bc297c2e0c2d3060056dad0feefc88a06939b5", size = 330234, upload-time = "2025-05-03T21:09:39.553Z" }
1026
+ wheels = [
1027
+ { url = "https://files.pythonhosted.org/packages/da/d3/13ee227a148af1c693654932b8b0b02ed64af5e1f7406d56b088b57574cd/joblib-1.5.0-py3-none-any.whl", hash = "sha256:206144b320246485b712fc8cc51f017de58225fa8b414a1fe1764a7231aca491", size = 307682, upload-time = "2025-05-03T21:09:37.892Z" },
1028
+ ]
1029
+
1030
  [[package]]
1031
  name = "jsonschema"
1032
  version = "4.23.0"
 
1109
  { url = "https://files.pythonhosted.org/packages/06/cb/bf172960241842e953b3354247f792aae2fc5221552a0741a1c98f35b6f7/lm_format_enforcer-0.10.11-py3-none-any.whl", hash = "sha256:563e0dbc930a6d50fb687951506c5de098c6e962601be0ce723f3b7d0b916a1b", size = 44229, upload-time = "2025-02-26T22:18:42.543Z" },
1110
  ]
1111
 
1112
+ [[package]]
1113
+ name = "loguru"
1114
+ version = "0.7.3"
1115
+ source = { registry = "https://pypi.org/simple" }
1116
+ dependencies = [
1117
+ { name = "colorama", marker = "sys_platform == 'win32'" },
1118
+ { name = "win32-setctime", marker = "sys_platform == 'win32'" },
1119
+ ]
1120
+ sdist = { url = "https://files.pythonhosted.org/packages/3a/05/a1dae3dffd1116099471c643b8924f5aa6524411dc6c63fdae648c4f1aca/loguru-0.7.3.tar.gz", hash = "sha256:19480589e77d47b8d85b2c827ad95d49bf31b0dcde16593892eb51dd18706eb6", size = 63559, upload-time = "2024-12-06T11:20:56.608Z" }
1121
+ wheels = [
1122
+ { url = "https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl", hash = "sha256:31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c", size = 61595, upload-time = "2024-12-06T11:20:54.538Z" },
1123
+ ]
1124
+
1125
  [[package]]
1126
  name = "markdown-it-py"
1127
  version = "3.0.0"
 
1205
  { name = "opencv-python-headless" },
1206
  ]
1207
 
1208
+ [[package]]
1209
+ name = "mmh3"
1210
+ version = "5.1.0"
1211
+ source = { registry = "https://pypi.org/simple" }
1212
+ sdist = { url = "https://files.pythonhosted.org/packages/47/1b/1fc6888c74cbd8abad1292dde2ddfcf8fc059e114c97dd6bf16d12f36293/mmh3-5.1.0.tar.gz", hash = "sha256:136e1e670500f177f49ec106a4ebf0adf20d18d96990cc36ea492c651d2b406c", size = 33728, upload-time = "2025-01-25T08:39:43.386Z" }
1213
+ wheels = [
1214
+ { url = "https://files.pythonhosted.org/packages/f4/47/e5f452bdf16028bfd2edb4e2e35d0441e4a4740f30e68ccd4cfd2fb2c57e/mmh3-5.1.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:45712987367cb9235026e3cbf4334670522a97751abfd00b5bc8bfa022c3311d", size = 56152, upload-time = "2025-01-25T08:38:47.902Z" },
1215
+ { url = "https://files.pythonhosted.org/packages/60/38/2132d537dc7a7fdd8d2e98df90186c7fcdbd3f14f95502a24ba443c92245/mmh3-5.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b1020735eb35086ab24affbea59bb9082f7f6a0ad517cb89f0fc14f16cea4dae", size = 40564, upload-time = "2025-01-25T08:38:48.839Z" },
1216
+ { url = "https://files.pythonhosted.org/packages/c0/2a/c52cf000581bfb8d94794f58865658e7accf2fa2e90789269d4ae9560b16/mmh3-5.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:babf2a78ce5513d120c358722a2e3aa7762d6071cd10cede026f8b32452be322", size = 40104, upload-time = "2025-01-25T08:38:49.773Z" },
1217
+ { url = "https://files.pythonhosted.org/packages/83/33/30d163ce538c54fc98258db5621447e3ab208d133cece5d2577cf913e708/mmh3-5.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4f47f58cd5cbef968c84a7c1ddc192fef0a36b48b0b8a3cb67354531aa33b00", size = 102634, upload-time = "2025-01-25T08:38:51.5Z" },
1218
+ { url = "https://files.pythonhosted.org/packages/94/5c/5a18acb6ecc6852be2d215c3d811aa61d7e425ab6596be940877355d7f3e/mmh3-5.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2044a601c113c981f2c1e14fa33adc9b826c9017034fe193e9eb49a6882dbb06", size = 108888, upload-time = "2025-01-25T08:38:52.542Z" },
1219
+ { url = "https://files.pythonhosted.org/packages/1f/f6/11c556324c64a92aa12f28e221a727b6e082e426dc502e81f77056f6fc98/mmh3-5.1.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c94d999c9f2eb2da44d7c2826d3fbffdbbbbcde8488d353fee7c848ecc42b968", size = 106968, upload-time = "2025-01-25T08:38:54.286Z" },
1220
+ { url = "https://files.pythonhosted.org/packages/5d/61/ca0c196a685aba7808a5c00246f17b988a9c4f55c594ee0a02c273e404f3/mmh3-5.1.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a015dcb24fa0c7a78f88e9419ac74f5001c1ed6a92e70fd1803f74afb26a4c83", size = 93771, upload-time = "2025-01-25T08:38:55.576Z" },
1221
+ { url = "https://files.pythonhosted.org/packages/b4/55/0927c33528710085ee77b808d85bbbafdb91a1db7c8eaa89cac16d6c513e/mmh3-5.1.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:457da019c491a2d20e2022c7d4ce723675e4c081d9efc3b4d8b9f28a5ea789bd", size = 101726, upload-time = "2025-01-25T08:38:56.654Z" },
1222
+ { url = "https://files.pythonhosted.org/packages/49/39/a92c60329fa470f41c18614a93c6cd88821412a12ee78c71c3f77e1cfc2d/mmh3-5.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:71408579a570193a4ac9c77344d68ddefa440b00468a0b566dcc2ba282a9c559", size = 98523, upload-time = "2025-01-25T08:38:57.662Z" },
1223
+ { url = "https://files.pythonhosted.org/packages/81/90/26adb15345af8d9cf433ae1b6adcf12e0a4cad1e692de4fa9f8e8536c5ae/mmh3-5.1.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:8b3a04bc214a6e16c81f02f855e285c6df274a2084787eeafaa45f2fbdef1b63", size = 96628, upload-time = "2025-01-25T08:38:59.505Z" },
1224
+ { url = "https://files.pythonhosted.org/packages/8a/4d/340d1e340df972a13fd4ec84c787367f425371720a1044220869c82364e9/mmh3-5.1.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:832dae26a35514f6d3c1e267fa48e8de3c7b978afdafa0529c808ad72e13ada3", size = 105190, upload-time = "2025-01-25T08:39:00.483Z" },
1225
+ { url = "https://files.pythonhosted.org/packages/d3/7c/65047d1cccd3782d809936db446430fc7758bda9def5b0979887e08302a2/mmh3-5.1.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:bf658a61fc92ef8a48945ebb1076ef4ad74269e353fffcb642dfa0890b13673b", size = 98439, upload-time = "2025-01-25T08:39:01.484Z" },
1226
+ { url = "https://files.pythonhosted.org/packages/72/d2/3c259d43097c30f062050f7e861075099404e8886b5d4dd3cebf180d6e02/mmh3-5.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3313577453582b03383731b66447cdcdd28a68f78df28f10d275d7d19010c1df", size = 97780, upload-time = "2025-01-25T08:39:02.444Z" },
1227
+ { url = "https://files.pythonhosted.org/packages/29/29/831ea8d4abe96cdb3e28b79eab49cac7f04f9c6b6e36bfc686197ddba09d/mmh3-5.1.0-cp312-cp312-win32.whl", hash = "sha256:1d6508504c531ab86c4424b5a5ff07c1132d063863339cf92f6657ff7a580f76", size = 40835, upload-time = "2025-01-25T08:39:03.369Z" },
1228
+ { url = "https://files.pythonhosted.org/packages/12/dd/7cbc30153b73f08eeac43804c1dbc770538a01979b4094edbe1a4b8eb551/mmh3-5.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:aa75981fcdf3f21759d94f2c81b6a6e04a49dfbcdad88b152ba49b8e20544776", size = 41509, upload-time = "2025-01-25T08:39:04.284Z" },
1229
+ { url = "https://files.pythonhosted.org/packages/80/9d/627375bab4c90dd066093fc2c9a26b86f87e26d980dbf71667b44cbee3eb/mmh3-5.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:a4c1a76808dfea47f7407a0b07aaff9087447ef6280716fd0783409b3088bb3c", size = 38888, upload-time = "2025-01-25T08:39:05.174Z" },
1230
+ { url = "https://files.pythonhosted.org/packages/05/06/a098a42870db16c0a54a82c56a5bdc873de3165218cd5b3ca59dbc0d31a7/mmh3-5.1.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:7a523899ca29cfb8a5239618474a435f3d892b22004b91779fcb83504c0d5b8c", size = 56165, upload-time = "2025-01-25T08:39:06.887Z" },
1231
+ { url = "https://files.pythonhosted.org/packages/5a/65/eaada79a67fde1f43e1156d9630e2fb70655e1d3f4e8f33d7ffa31eeacfd/mmh3-5.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:17cef2c3a6ca2391ca7171a35ed574b5dab8398163129a3e3a4c05ab85a4ff40", size = 40569, upload-time = "2025-01-25T08:39:07.945Z" },
1232
+ { url = "https://files.pythonhosted.org/packages/36/7e/2b6c43ed48be583acd68e34d16f19209a9f210e4669421b0321e326d8554/mmh3-5.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:52e12895b30110f3d89dae59a888683cc886ed0472dd2eca77497edef6161997", size = 40104, upload-time = "2025-01-25T08:39:09.598Z" },
1233
+ { url = "https://files.pythonhosted.org/packages/11/2b/1f9e962fdde8e41b0f43d22c8ba719588de8952f9376df7d73a434827590/mmh3-5.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0d6719045cda75c3f40397fc24ab67b18e0cb8f69d3429ab4c39763c4c608dd", size = 102497, upload-time = "2025-01-25T08:39:10.512Z" },
1234
+ { url = "https://files.pythonhosted.org/packages/46/94/d6c5c3465387ba077cccdc028ab3eec0d86eed1eebe60dcf4d15294056be/mmh3-5.1.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d19fa07d303a91f8858982c37e6939834cb11893cb3ff20e6ee6fa2a7563826a", size = 108834, upload-time = "2025-01-25T08:39:11.568Z" },
1235
+ { url = "https://files.pythonhosted.org/packages/34/1e/92c212bb81796b69dddfd50a8a8f4b26ab0d38fdaf1d3e8628a67850543b/mmh3-5.1.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:31b47a620d622fbde8ca1ca0435c5d25de0ac57ab507209245e918128e38e676", size = 106936, upload-time = "2025-01-25T08:39:12.638Z" },
1236
+ { url = "https://files.pythonhosted.org/packages/f4/41/f2f494bbff3aad5ffd2085506255049de76cde51ddac84058e32768acc79/mmh3-5.1.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:00f810647c22c179b6821079f7aa306d51953ac893587ee09cf1afb35adf87cb", size = 93709, upload-time = "2025-01-25T08:39:14.071Z" },
1237
+ { url = "https://files.pythonhosted.org/packages/9e/a9/a2cc4a756d73d9edf4fb85c76e16fd56b0300f8120fd760c76b28f457730/mmh3-5.1.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6128b610b577eed1e89ac7177ab0c33d06ade2aba93f5c89306032306b5f1c6", size = 101623, upload-time = "2025-01-25T08:39:15.507Z" },
1238
+ { url = "https://files.pythonhosted.org/packages/5e/6f/b9d735533b6a56b2d56333ff89be6a55ac08ba7ff33465feb131992e33eb/mmh3-5.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1e550a45d2ff87a1c11b42015107f1778c93f4c6f8e731bf1b8fa770321b8cc4", size = 98521, upload-time = "2025-01-25T08:39:16.77Z" },
1239
+ { url = "https://files.pythonhosted.org/packages/99/47/dff2b54fac0d421c1e6ecbd2d9c85b2d0e6f6ee0d10b115d9364116a511e/mmh3-5.1.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:785ae09276342f79fd8092633e2d52c0f7c44d56e8cfda8274ccc9b76612dba2", size = 96696, upload-time = "2025-01-25T08:39:17.805Z" },
1240
+ { url = "https://files.pythonhosted.org/packages/be/43/9e205310f47c43ddf1575bb3a1769c36688f30f1ac105e0f0c878a29d2cd/mmh3-5.1.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:0f4be3703a867ef976434afd3661a33884abe73ceb4ee436cac49d3b4c2aaa7b", size = 105234, upload-time = "2025-01-25T08:39:18.908Z" },
1241
+ { url = "https://files.pythonhosted.org/packages/6b/44/90b11fd2b67dcb513f5bfe9b476eb6ca2d5a221c79b49884dc859100905e/mmh3-5.1.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:e513983830c4ff1f205ab97152a0050cf7164f1b4783d702256d39c637b9d107", size = 98449, upload-time = "2025-01-25T08:39:20.719Z" },
1242
+ { url = "https://files.pythonhosted.org/packages/f0/d0/25c4b0c7b8e49836541059b28e034a4cccd0936202800d43a1cc48495ecb/mmh3-5.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b9135c300535c828c0bae311b659f33a31c941572eae278568d1a953c4a57b59", size = 97796, upload-time = "2025-01-25T08:39:22.453Z" },
1243
+ { url = "https://files.pythonhosted.org/packages/23/fa/cbbb7fcd0e287a715f1cd28a10de94c0535bd94164e38b852abc18da28c6/mmh3-5.1.0-cp313-cp313-win32.whl", hash = "sha256:c65dbd12885a5598b70140d24de5839551af5a99b29f9804bb2484b29ef07692", size = 40828, upload-time = "2025-01-25T08:39:23.372Z" },
1244
+ { url = "https://files.pythonhosted.org/packages/09/33/9fb90ef822f7b734955a63851907cf72f8a3f9d8eb3c5706bfa6772a2a77/mmh3-5.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:10db7765201fc65003fa998faa067417ef6283eb5f9bba8f323c48fd9c33e91f", size = 41504, upload-time = "2025-01-25T08:39:24.286Z" },
1245
+ { url = "https://files.pythonhosted.org/packages/16/71/4ad9a42f2772793a03cb698f0fc42499f04e6e8d2560ba2f7da0fb059a8e/mmh3-5.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:b22fe2e54be81f6c07dcb36b96fa250fb72effe08aa52fbb83eade6e1e2d5fd7", size = 38890, upload-time = "2025-01-25T08:39:25.28Z" },
1246
+ ]
1247
+
1248
  [[package]]
1249
  name = "mpmath"
1250
  version = "1.3.0"
 
1586
  { url = "https://files.pythonhosted.org/packages/87/20/199b8713428322a2f22b722c62b8cc278cc53dffa9705d744484b5035ee9/nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:781e950d9b9f60d8241ccea575b32f5105a5baf4c2351cab5256a24869f12a1a", size = 99144, upload-time = "2024-04-03T20:56:12.406Z" },
1587
  ]
1588
 
1589
+ [[package]]
1590
+ name = "onnxruntime-gpu"
1591
+ version = "1.21.1"
1592
+ source = { registry = "https://pypi.org/simple" }
1593
+ dependencies = [
1594
+ { name = "coloredlogs" },
1595
+ { name = "flatbuffers" },
1596
+ { name = "numpy" },
1597
+ { name = "packaging" },
1598
+ { name = "protobuf" },
1599
+ { name = "sympy" },
1600
+ ]
1601
+ wheels = [
1602
+ { url = "https://files.pythonhosted.org/packages/b2/b4/0ee7be1326a1aa19ee8d87b7474b0248736627f430dd0d314e65fac56d6c/onnxruntime_gpu-1.21.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:968123d2668add079548980999edfd35fb6317cad9c35c0798fc0665591003f0", size = 280812383, upload-time = "2025-04-18T12:08:20.998Z" },
1603
+ { url = "https://files.pythonhosted.org/packages/dc/ad/a9199df9350b5fee6b7377d3af03ed45a2ef162feb10679b0bc10f270515/onnxruntime_gpu-1.21.1-cp312-cp312-win_amd64.whl", hash = "sha256:5c1885a46061c5f5e0ca26256d8e338db9ea0428867754bd93e517bcb0a3899c", size = 213081642, upload-time = "2025-04-18T12:02:46.786Z" },
1604
+ { url = "https://files.pythonhosted.org/packages/c2/6f/63eff0b806648f3008114b5b78e8e087e39ef8b2e077f77ffe3cbf8237b9/onnxruntime_gpu-1.21.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1405e953da84e5a9463c467d86c3fd46a50f4dc767c87c3682d9fabf0a0e2251", size = 280809517, upload-time = "2025-04-18T12:08:36.582Z" },
1605
+ { url = "https://files.pythonhosted.org/packages/84/d6/88899b113133644beeec4c9cfc9c0ec31d4bd16fa5edf2e0816484102be3/onnxruntime_gpu-1.21.1-cp313-cp313-win_amd64.whl", hash = "sha256:69f407ec2e5f8b409d2729191708cbad5b95539b6d5f7a28dac1aa9f9f644bf9", size = 213081751, upload-time = "2025-04-18T12:02:56.446Z" },
1606
+ { url = "https://files.pythonhosted.org/packages/18/95/5d573da5c9fe00ac66de6cbf6dc701314dbacc2f0fa2f4b1b25284b0fa62/onnxruntime_gpu-1.21.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dd2056e7cadcec184b1014dc4f8484e1458a633d6db8262f88c0148ef1e572a6", size = 280806546, upload-time = "2025-04-18T12:08:50.242Z" },
1607
+ ]
1608
+
1609
  [[package]]
1610
  name = "openai"
1611
  version = "1.77.0"
 
1941
  { url = "https://files.pythonhosted.org/packages/67/32/32dc030cfa91ca0fc52baebbba2e009bb001122a1daa8b6a79ad830b38d3/pillow-11.2.1-cp313-cp313t-win_arm64.whl", hash = "sha256:225c832a13326e34f212d2072982bb1adb210e0cc0b153e688743018c94a2681", size = 2417234, upload-time = "2025-04-12T17:49:08.399Z" },
1942
  ]
1943
 
1944
+ [[package]]
1945
+ name = "portalocker"
1946
+ version = "2.10.1"
1947
+ source = { registry = "https://pypi.org/simple" }
1948
+ dependencies = [
1949
+ { name = "pywin32", marker = "sys_platform == 'win32'" },
1950
+ ]
1951
+ sdist = { url = "https://files.pythonhosted.org/packages/ed/d3/c6c64067759e87af98cc668c1cc75171347d0f1577fab7ca3749134e3cd4/portalocker-2.10.1.tar.gz", hash = "sha256:ef1bf844e878ab08aee7e40184156e1151f228f103aa5c6bd0724cc330960f8f", size = 40891, upload-time = "2024-07-13T23:15:34.86Z" }
1952
+ wheels = [
1953
+ { url = "https://files.pythonhosted.org/packages/9b/fb/a70a4214956182e0d7a9099ab17d50bfcba1056188e9b14f35b9e2b62a0d/portalocker-2.10.1-py3-none-any.whl", hash = "sha256:53a5984ebc86a025552264b459b46a2086e269b21823cb572f8f28ee759e45bf", size = 18423, upload-time = "2024-07-13T23:15:32.602Z" },
1954
+ ]
1955
+
1956
  [[package]]
1957
  name = "prometheus-client"
1958
  version = "0.21.1"
 
2070
  { url = "https://files.pythonhosted.org/packages/e0/a9/023730ba63db1e494a271cb018dcd361bd2c917ba7004c3e49d5daf795a2/py_cpuinfo-9.0.0-py3-none-any.whl", hash = "sha256:859625bc251f64e21f077d099d4162689c762b5d6a4c3c97553d56241c9674d5", size = 22335, upload-time = "2022-10-25T20:38:27.636Z" },
2071
  ]
2072
 
2073
+ [[package]]
2074
+ name = "py-rust-stemmers"
2075
+ version = "0.1.5"
2076
+ source = { registry = "https://pypi.org/simple" }
2077
+ sdist = { url = "https://files.pythonhosted.org/packages/8e/63/4fbc14810c32d2a884e2e94e406a7d5bf8eee53e1103f558433817230342/py_rust_stemmers-0.1.5.tar.gz", hash = "sha256:e9c310cfb5c2470d7c7c8a0484725965e7cab8b1237e106a0863d5741da3e1f7", size = 9388, upload-time = "2025-02-19T13:56:28.708Z" }
2078
+ wheels = [
2079
+ { url = "https://files.pythonhosted.org/packages/43/e1/ea8ac92454a634b1bb1ee0a89c2f75a4e6afec15a8412527e9bbde8c6b7b/py_rust_stemmers-0.1.5-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:29772837126a28263bf54ecd1bc709dd569d15a94d5e861937813ce51e8a6df4", size = 286085, upload-time = "2025-02-19T13:55:23.871Z" },
2080
+ { url = "https://files.pythonhosted.org/packages/cb/32/fe1cc3d36a19c1ce39792b1ed151ddff5ee1d74c8801f0e93ff36e65f885/py_rust_stemmers-0.1.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4d62410ada44a01e02974b85d45d82f4b4c511aae9121e5f3c1ba1d0bea9126b", size = 272021, upload-time = "2025-02-19T13:55:25.685Z" },
2081
+ { url = "https://files.pythonhosted.org/packages/0a/38/b8f94e5e886e7ab181361a0911a14fb923b0d05b414de85f427e773bf445/py_rust_stemmers-0.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b28ef729a4c83c7d9418be3c23c0372493fcccc67e86783ff04596ef8a208cdf", size = 310547, upload-time = "2025-02-19T13:55:26.891Z" },
2082
+ { url = "https://files.pythonhosted.org/packages/a9/08/62e97652d359b75335486f4da134a6f1c281f38bd3169ed6ecfb276448c3/py_rust_stemmers-0.1.5-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a979c3f4ff7ad94a0d4cf566ca7bfecebb59e66488cc158e64485cf0c9a7879f", size = 315237, upload-time = "2025-02-19T13:55:28.116Z" },
2083
+ { url = "https://files.pythonhosted.org/packages/1c/b9/fc0278432f288d2be4ee4d5cc80fd8013d604506b9b0503e8b8cae4ba1c3/py_rust_stemmers-0.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c3593d895453fa06bf70a7b76d6f00d06def0f91fc253fe4260920650c5e078", size = 324419, upload-time = "2025-02-19T13:55:29.211Z" },
2084
+ { url = "https://files.pythonhosted.org/packages/6b/5b/74e96eaf622fe07e83c5c389d101540e305e25f76a6d0d6fb3d9e0506db8/py_rust_stemmers-0.1.5-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:96ccc7fd042ffc3f7f082f2223bb7082ed1423aa6b43d5d89ab23e321936c045", size = 324792, upload-time = "2025-02-19T13:55:30.948Z" },
2085
+ { url = "https://files.pythonhosted.org/packages/4f/f7/b76816d7d67166e9313915ad486c21d9e7da0ac02703e14375bb1cb64b5a/py_rust_stemmers-0.1.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ef18cfced2c9c676e0d7d172ba61c3fab2aa6969db64cc8f5ca33a7759efbefe", size = 488014, upload-time = "2025-02-19T13:55:32.066Z" },
2086
+ { url = "https://files.pythonhosted.org/packages/b9/ed/7d9bed02f78d85527501f86a867cd5002d97deb791b9a6b1b45b00100010/py_rust_stemmers-0.1.5-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:541d4b5aa911381e3d37ec483abb6a2cf2351b4f16d5e8d77f9aa2722956662a", size = 575582, upload-time = "2025-02-19T13:55:34.005Z" },
2087
+ { url = "https://files.pythonhosted.org/packages/93/40/eafd1b33688e8e8ae946d1ef25c4dc93f5b685bd104b9c5573405d7e1d30/py_rust_stemmers-0.1.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ffd946a36e9ac17ca96821963663012e04bc0ee94d21e8b5ae034721070b436c", size = 493267, upload-time = "2025-02-19T13:55:35.294Z" },
2088
+ { url = "https://files.pythonhosted.org/packages/2f/6a/15135b69e4fd28369433eb03264d201b1b0040ba534b05eddeb02a276684/py_rust_stemmers-0.1.5-cp312-none-win_amd64.whl", hash = "sha256:6ed61e1207f3b7428e99b5d00c055645c6415bb75033bff2d06394cbe035fd8e", size = 209395, upload-time = "2025-02-19T13:55:36.519Z" },
2089
+ { url = "https://files.pythonhosted.org/packages/80/b8/030036311ec25952bf3083b6c105be5dee052a71aa22d5fbeb857ebf8c1c/py_rust_stemmers-0.1.5-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:398b3a843a9cd4c5d09e726246bc36f66b3d05b0a937996814e91f47708f5db5", size = 286086, upload-time = "2025-02-19T13:55:37.581Z" },
2090
+ { url = "https://files.pythonhosted.org/packages/ed/be/0465dcb3a709ee243d464e89231e3da580017f34279d6304de291d65ccb0/py_rust_stemmers-0.1.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4e308fc7687901f0c73603203869908f3156fa9c17c4ba010a7fcc98a7a1c5f2", size = 272019, upload-time = "2025-02-19T13:55:39.183Z" },
2091
+ { url = "https://files.pythonhosted.org/packages/ab/b6/76ca5b1f30cba36835938b5d9abee0c130c81833d51b9006264afdf8df3c/py_rust_stemmers-0.1.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f9efc4da5e734bdd00612e7506de3d0c9b7abc4b89d192742a0569d0d1fe749", size = 310545, upload-time = "2025-02-19T13:55:40.339Z" },
2092
+ { url = "https://files.pythonhosted.org/packages/56/8f/5be87618cea2fe2e70e74115a20724802bfd06f11c7c43514b8288eb6514/py_rust_stemmers-0.1.5-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cc2cc8d2b36bc05b8b06506199ac63d437360ae38caefd98cd19e479d35afd42", size = 315236, upload-time = "2025-02-19T13:55:41.55Z" },
2093
+ { url = "https://files.pythonhosted.org/packages/00/02/ea86a316aee0f0a9d1449ad4dbffff38f4cf0a9a31045168ae8b95d8bdf8/py_rust_stemmers-0.1.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a231dc6f0b2a5f12a080dfc7abd9e6a4ea0909290b10fd0a4620e5a0f52c3d17", size = 324419, upload-time = "2025-02-19T13:55:42.693Z" },
2094
+ { url = "https://files.pythonhosted.org/packages/2a/fd/1612c22545dcc0abe2f30fc08f30a2332f2224dd536fa1508444a9ca0e39/py_rust_stemmers-0.1.5-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:5845709d48afc8b29e248f42f92431155a3d8df9ba30418301c49c6072b181b0", size = 324794, upload-time = "2025-02-19T13:55:43.896Z" },
2095
+ { url = "https://files.pythonhosted.org/packages/66/18/8a547584d7edac9e7ac9c7bdc53228d6f751c0f70a317093a77c386c8ddc/py_rust_stemmers-0.1.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e48bfd5e3ce9d223bfb9e634dc1425cf93ee57eef6f56aa9a7120ada3990d4be", size = 488014, upload-time = "2025-02-19T13:55:45.088Z" },
2096
+ { url = "https://files.pythonhosted.org/packages/3b/87/4619c395b325e26048a6e28a365afed754614788ba1f49b2eefb07621a03/py_rust_stemmers-0.1.5-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:35d32f6e7bdf6fd90e981765e32293a8be74def807147dea9fdc1f65d6ce382f", size = 575582, upload-time = "2025-02-19T13:55:46.436Z" },
2097
+ { url = "https://files.pythonhosted.org/packages/98/6e/214f1a889142b7df6d716e7f3fea6c41e87bd6c29046aa57e175d452b104/py_rust_stemmers-0.1.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:191ea8bf922c984631ffa20bf02ef0ad7eec0465baeaed3852779e8f97c7e7a3", size = 493269, upload-time = "2025-02-19T13:55:49.057Z" },
2098
+ { url = "https://files.pythonhosted.org/packages/e1/b9/c5185df277576f995ae34418eb2b2ac12f30835412270f9e05c52face521/py_rust_stemmers-0.1.5-cp313-none-win_amd64.whl", hash = "sha256:e564c9efdbe7621704e222b53bac265b0e4fbea788f07c814094f0ec6b80adcf", size = 209397, upload-time = "2025-02-19T13:55:50.853Z" },
2099
+ ]
2100
+
2101
+ [[package]]
2102
+ name = "pyarrow"
2103
+ version = "20.0.0"
2104
+ source = { registry = "https://pypi.org/simple" }
2105
+ sdist = { url = "https://files.pythonhosted.org/packages/a2/ee/a7810cb9f3d6e9238e61d312076a9859bf3668fd21c69744de9532383912/pyarrow-20.0.0.tar.gz", hash = "sha256:febc4a913592573c8d5805091a6c2b5064c8bd6e002131f01061797d91c783c1", size = 1125187, upload-time = "2025-04-27T12:34:23.264Z" }
2106
+ wheels = [
2107
+ { url = "https://files.pythonhosted.org/packages/a1/d6/0c10e0d54f6c13eb464ee9b67a68b8c71bcf2f67760ef5b6fbcddd2ab05f/pyarrow-20.0.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:75a51a5b0eef32727a247707d4755322cb970be7e935172b6a3a9f9ae98404ba", size = 30815067, upload-time = "2025-04-27T12:29:44.384Z" },
2108
+ { url = "https://files.pythonhosted.org/packages/7e/e2/04e9874abe4094a06fd8b0cbb0f1312d8dd7d707f144c2ec1e5e8f452ffa/pyarrow-20.0.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:211d5e84cecc640c7a3ab900f930aaff5cd2702177e0d562d426fb7c4f737781", size = 32297128, upload-time = "2025-04-27T12:29:52.038Z" },
2109
+ { url = "https://files.pythonhosted.org/packages/31/fd/c565e5dcc906a3b471a83273039cb75cb79aad4a2d4a12f76cc5ae90a4b8/pyarrow-20.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ba3cf4182828be7a896cbd232aa8dd6a31bd1f9e32776cc3796c012855e1199", size = 41334890, upload-time = "2025-04-27T12:29:59.452Z" },
2110
+ { url = "https://files.pythonhosted.org/packages/af/a9/3bdd799e2c9b20c1ea6dc6fa8e83f29480a97711cf806e823f808c2316ac/pyarrow-20.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c3a01f313ffe27ac4126f4c2e5ea0f36a5fc6ab51f8726cf41fee4b256680bd", size = 42421775, upload-time = "2025-04-27T12:30:06.875Z" },
2111
+ { url = "https://files.pythonhosted.org/packages/10/f7/da98ccd86354c332f593218101ae56568d5dcedb460e342000bd89c49cc1/pyarrow-20.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:a2791f69ad72addd33510fec7bb14ee06c2a448e06b649e264c094c5b5f7ce28", size = 40687231, upload-time = "2025-04-27T12:30:13.954Z" },
2112
+ { url = "https://files.pythonhosted.org/packages/bb/1b/2168d6050e52ff1e6cefc61d600723870bf569cbf41d13db939c8cf97a16/pyarrow-20.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:4250e28a22302ce8692d3a0e8ec9d9dde54ec00d237cff4dfa9c1fbf79e472a8", size = 42295639, upload-time = "2025-04-27T12:30:21.949Z" },
2113
+ { url = "https://files.pythonhosted.org/packages/b2/66/2d976c0c7158fd25591c8ca55aee026e6d5745a021915a1835578707feb3/pyarrow-20.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:89e030dc58fc760e4010148e6ff164d2f44441490280ef1e97a542375e41058e", size = 42908549, upload-time = "2025-04-27T12:30:29.551Z" },
2114
+ { url = "https://files.pythonhosted.org/packages/31/a9/dfb999c2fc6911201dcbf348247f9cc382a8990f9ab45c12eabfd7243a38/pyarrow-20.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6102b4864d77102dbbb72965618e204e550135a940c2534711d5ffa787df2a5a", size = 44557216, upload-time = "2025-04-27T12:30:36.977Z" },
2115
+ { url = "https://files.pythonhosted.org/packages/a0/8e/9adee63dfa3911be2382fb4d92e4b2e7d82610f9d9f668493bebaa2af50f/pyarrow-20.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:96d6a0a37d9c98be08f5ed6a10831d88d52cac7b13f5287f1e0f625a0de8062b", size = 25660496, upload-time = "2025-04-27T12:30:42.809Z" },
2116
+ { url = "https://files.pythonhosted.org/packages/9b/aa/daa413b81446d20d4dad2944110dcf4cf4f4179ef7f685dd5a6d7570dc8e/pyarrow-20.0.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:a15532e77b94c61efadde86d10957950392999503b3616b2ffcef7621a002893", size = 30798501, upload-time = "2025-04-27T12:30:48.351Z" },
2117
+ { url = "https://files.pythonhosted.org/packages/ff/75/2303d1caa410925de902d32ac215dc80a7ce7dd8dfe95358c165f2adf107/pyarrow-20.0.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:dd43f58037443af715f34f1322c782ec463a3c8a94a85fdb2d987ceb5658e061", size = 32277895, upload-time = "2025-04-27T12:30:55.238Z" },
2118
+ { url = "https://files.pythonhosted.org/packages/92/41/fe18c7c0b38b20811b73d1bdd54b1fccba0dab0e51d2048878042d84afa8/pyarrow-20.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa0d288143a8585806e3cc7c39566407aab646fb9ece164609dac1cfff45f6ae", size = 41327322, upload-time = "2025-04-27T12:31:05.587Z" },
2119
+ { url = "https://files.pythonhosted.org/packages/da/ab/7dbf3d11db67c72dbf36ae63dcbc9f30b866c153b3a22ef728523943eee6/pyarrow-20.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6953f0114f8d6f3d905d98e987d0924dabce59c3cda380bdfaa25a6201563b4", size = 42411441, upload-time = "2025-04-27T12:31:15.675Z" },
2120
+ { url = "https://files.pythonhosted.org/packages/90/c3/0c7da7b6dac863af75b64e2f827e4742161128c350bfe7955b426484e226/pyarrow-20.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:991f85b48a8a5e839b2128590ce07611fae48a904cae6cab1f089c5955b57eb5", size = 40677027, upload-time = "2025-04-27T12:31:24.631Z" },
2121
+ { url = "https://files.pythonhosted.org/packages/be/27/43a47fa0ff9053ab5203bb3faeec435d43c0d8bfa40179bfd076cdbd4e1c/pyarrow-20.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:97c8dc984ed09cb07d618d57d8d4b67a5100a30c3818c2fb0b04599f0da2de7b", size = 42281473, upload-time = "2025-04-27T12:31:31.311Z" },
2122
+ { url = "https://files.pythonhosted.org/packages/bc/0b/d56c63b078876da81bbb9ba695a596eabee9b085555ed12bf6eb3b7cab0e/pyarrow-20.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9b71daf534f4745818f96c214dbc1e6124d7daf059167330b610fc69b6f3d3e3", size = 42893897, upload-time = "2025-04-27T12:31:39.406Z" },
2123
+ { url = "https://files.pythonhosted.org/packages/92/ac/7d4bd020ba9145f354012838692d48300c1b8fe5634bfda886abcada67ed/pyarrow-20.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e8b88758f9303fa5a83d6c90e176714b2fd3852e776fc2d7e42a22dd6c2fb368", size = 44543847, upload-time = "2025-04-27T12:31:45.997Z" },
2124
+ { url = "https://files.pythonhosted.org/packages/9d/07/290f4abf9ca702c5df7b47739c1b2c83588641ddfa2cc75e34a301d42e55/pyarrow-20.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:30b3051b7975801c1e1d387e17c588d8ab05ced9b1e14eec57915f79869b5031", size = 25653219, upload-time = "2025-04-27T12:31:54.11Z" },
2125
+ { url = "https://files.pythonhosted.org/packages/95/df/720bb17704b10bd69dde086e1400b8eefb8f58df3f8ac9cff6c425bf57f1/pyarrow-20.0.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:ca151afa4f9b7bc45bcc791eb9a89e90a9eb2772767d0b1e5389609c7d03db63", size = 30853957, upload-time = "2025-04-27T12:31:59.215Z" },
2126
+ { url = "https://files.pythonhosted.org/packages/d9/72/0d5f875efc31baef742ba55a00a25213a19ea64d7176e0fe001c5d8b6e9a/pyarrow-20.0.0-cp313-cp313t-macosx_12_0_x86_64.whl", hash = "sha256:4680f01ecd86e0dd63e39eb5cd59ef9ff24a9d166db328679e36c108dc993d4c", size = 32247972, upload-time = "2025-04-27T12:32:05.369Z" },
2127
+ { url = "https://files.pythonhosted.org/packages/d5/bc/e48b4fa544d2eea72f7844180eb77f83f2030b84c8dad860f199f94307ed/pyarrow-20.0.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f4c8534e2ff059765647aa69b75d6543f9fef59e2cd4c6d18015192565d2b70", size = 41256434, upload-time = "2025-04-27T12:32:11.814Z" },
2128
+ { url = "https://files.pythonhosted.org/packages/c3/01/974043a29874aa2cf4f87fb07fd108828fc7362300265a2a64a94965e35b/pyarrow-20.0.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e1f8a47f4b4ae4c69c4d702cfbdfe4d41e18e5c7ef6f1bb1c50918c1e81c57b", size = 42353648, upload-time = "2025-04-27T12:32:20.766Z" },
2129
+ { url = "https://files.pythonhosted.org/packages/68/95/cc0d3634cde9ca69b0e51cbe830d8915ea32dda2157560dda27ff3b3337b/pyarrow-20.0.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:a1f60dc14658efaa927f8214734f6a01a806d7690be4b3232ba526836d216122", size = 40619853, upload-time = "2025-04-27T12:32:28.1Z" },
2130
+ { url = "https://files.pythonhosted.org/packages/29/c2/3ad40e07e96a3e74e7ed7cc8285aadfa84eb848a798c98ec0ad009eb6bcc/pyarrow-20.0.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:204a846dca751428991346976b914d6d2a82ae5b8316a6ed99789ebf976551e6", size = 42241743, upload-time = "2025-04-27T12:32:35.792Z" },
2131
+ { url = "https://files.pythonhosted.org/packages/eb/cb/65fa110b483339add6a9bc7b6373614166b14e20375d4daa73483755f830/pyarrow-20.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:f3b117b922af5e4c6b9a9115825726cac7d8b1421c37c2b5e24fbacc8930612c", size = 42839441, upload-time = "2025-04-27T12:32:46.64Z" },
2132
+ { url = "https://files.pythonhosted.org/packages/98/7b/f30b1954589243207d7a0fbc9997401044bf9a033eec78f6cb50da3f304a/pyarrow-20.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e724a3fd23ae5b9c010e7be857f4405ed5e679db5c93e66204db1a69f733936a", size = 44503279, upload-time = "2025-04-27T12:32:56.503Z" },
2133
+ { url = "https://files.pythonhosted.org/packages/37/40/ad395740cd641869a13bcf60851296c89624662575621968dcfafabaa7f6/pyarrow-20.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:82f1ee5133bd8f49d31be1299dc07f585136679666b502540db854968576faf9", size = 25944982, upload-time = "2025-04-27T12:33:04.72Z" },
2134
+ ]
2135
+
2136
+ [[package]]
2137
+ name = "pyasn1"
2138
+ version = "0.6.1"
2139
+ source = { registry = "https://pypi.org/simple" }
2140
+ sdist = { url = "https://files.pythonhosted.org/packages/ba/e9/01f1a64245b89f039897cb0130016d79f77d52669aae6ee7b159a6c4c018/pyasn1-0.6.1.tar.gz", hash = "sha256:6f580d2bdd84365380830acf45550f2511469f673cb4a5ae3857a3170128b034", size = 145322, upload-time = "2024-09-10T22:41:42.55Z" }
2141
+ wheels = [
2142
+ { url = "https://files.pythonhosted.org/packages/c8/f1/d6a797abb14f6283c0ddff96bbdd46937f64122b8c925cab503dd37f8214/pyasn1-0.6.1-py3-none-any.whl", hash = "sha256:0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629", size = 83135, upload-time = "2024-09-11T16:00:36.122Z" },
2143
+ ]
2144
+
2145
+ [[package]]
2146
+ name = "pyasn1-modules"
2147
+ version = "0.4.2"
2148
+ source = { registry = "https://pypi.org/simple" }
2149
+ dependencies = [
2150
+ { name = "pyasn1" },
2151
+ ]
2152
+ sdist = { url = "https://files.pythonhosted.org/packages/e9/e6/78ebbb10a8c8e4b61a59249394a4a594c1a7af95593dc933a349c8d00964/pyasn1_modules-0.4.2.tar.gz", hash = "sha256:677091de870a80aae844b1ca6134f54652fa2c8c5a52aa396440ac3106e941e6", size = 307892, upload-time = "2025-03-28T02:41:22.17Z" }
2153
+ wheels = [
2154
+ { url = "https://files.pythonhosted.org/packages/47/8d/d529b5d697919ba8c11ad626e835d4039be708a35b0d22de83a269a6682c/pyasn1_modules-0.4.2-py3-none-any.whl", hash = "sha256:29253a9207ce32b64c3ac6600edc75368f98473906e8fd1043bd6b5b1de2c14a", size = 181259, upload-time = "2025-03-28T02:41:19.028Z" },
2155
+ ]
2156
+
2157
  [[package]]
2158
  name = "pycountry"
2159
  version = "24.6.1"
 
2247
  { url = "https://files.pythonhosted.org/packages/8a/0b/9fcc47d19c48b59121088dd6da2488a49d5f72dacf8262e2790a1d2c7d15/pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c", size = 1225293, upload-time = "2025-01-06T17:26:25.553Z" },
2248
  ]
2249
 
2250
+ [[package]]
2251
+ name = "pyreadline3"
2252
+ version = "3.5.4"
2253
+ source = { registry = "https://pypi.org/simple" }
2254
+ sdist = { url = "https://files.pythonhosted.org/packages/0f/49/4cea918a08f02817aabae639e3d0ac046fef9f9180518a3ad394e22da148/pyreadline3-3.5.4.tar.gz", hash = "sha256:8d57d53039a1c75adba8e50dd3d992b28143480816187ea5efbd5c78e6c885b7", size = 99839, upload-time = "2024-09-19T02:40:10.062Z" }
2255
+ wheels = [
2256
+ { url = "https://files.pythonhosted.org/packages/5a/dc/491b7661614ab97483abf2056be1deee4dc2490ecbf7bff9ab5cdbac86e1/pyreadline3-3.5.4-py3-none-any.whl", hash = "sha256:eaf8e6cc3c49bcccf145fc6067ba8643d1df34d604a1ec0eccbf7a18e6d3fae6", size = 83178, upload-time = "2024-09-19T02:40:08.598Z" },
2257
+ ]
2258
+
2259
  [[package]]
2260
  name = "python-dateutil"
2261
  version = "2.9.0.post0"
 
2304
  { url = "https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00", size = 509225, upload-time = "2025-03-25T02:24:58.468Z" },
2305
  ]
2306
 
2307
+ [[package]]
2308
+ name = "pywin32"
2309
+ version = "310"
2310
+ source = { registry = "https://pypi.org/simple" }
2311
+ wheels = [
2312
+ { url = "https://files.pythonhosted.org/packages/6b/ec/4fdbe47932f671d6e348474ea35ed94227fb5df56a7c30cbbb42cd396ed0/pywin32-310-cp312-cp312-win32.whl", hash = "sha256:8a75a5cc3893e83a108c05d82198880704c44bbaee4d06e442e471d3c9ea4f3d", size = 8796239, upload-time = "2025-03-17T00:55:58.807Z" },
2313
+ { url = "https://files.pythonhosted.org/packages/e3/e5/b0627f8bb84e06991bea89ad8153a9e50ace40b2e1195d68e9dff6b03d0f/pywin32-310-cp312-cp312-win_amd64.whl", hash = "sha256:bf5c397c9a9a19a6f62f3fb821fbf36cac08f03770056711f765ec1503972060", size = 9503839, upload-time = "2025-03-17T00:56:00.8Z" },
2314
+ { url = "https://files.pythonhosted.org/packages/1f/32/9ccf53748df72301a89713936645a664ec001abd35ecc8578beda593d37d/pywin32-310-cp312-cp312-win_arm64.whl", hash = "sha256:2349cc906eae872d0663d4d6290d13b90621eaf78964bb1578632ff20e152966", size = 8459470, upload-time = "2025-03-17T00:56:02.601Z" },
2315
+ { url = "https://files.pythonhosted.org/packages/1c/09/9c1b978ffc4ae53999e89c19c77ba882d9fce476729f23ef55211ea1c034/pywin32-310-cp313-cp313-win32.whl", hash = "sha256:5d241a659c496ada3253cd01cfaa779b048e90ce4b2b38cd44168ad555ce74ab", size = 8794384, upload-time = "2025-03-17T00:56:04.383Z" },
2316
+ { url = "https://files.pythonhosted.org/packages/45/3c/b4640f740ffebadd5d34df35fecba0e1cfef8fde9f3e594df91c28ad9b50/pywin32-310-cp313-cp313-win_amd64.whl", hash = "sha256:667827eb3a90208ddbdcc9e860c81bde63a135710e21e4cb3348968e4bd5249e", size = 9503039, upload-time = "2025-03-17T00:56:06.207Z" },
2317
+ { url = "https://files.pythonhosted.org/packages/b4/f4/f785020090fb050e7fb6d34b780f2231f302609dc964672f72bfaeb59a28/pywin32-310-cp313-cp313-win_arm64.whl", hash = "sha256:e308f831de771482b7cf692a1f308f8fca701b2d8f9dde6cc440c7da17e47b33", size = 8458152, upload-time = "2025-03-17T00:56:07.819Z" },
2318
+ ]
2319
+
2320
  [[package]]
2321
  name = "pyyaml"
2322
  version = "6.0.2"
 
2384
  { url = "https://files.pythonhosted.org/packages/05/4c/bf3cad0d64c3214ac881299c4562b815f05d503bccc513e3fd4fdc6f67e4/pyzmq-26.4.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:26a2a7451606b87f67cdeca2c2789d86f605da08b4bd616b1a9981605ca3a364", size = 1395540, upload-time = "2025-04-04T12:04:30.562Z" },
2385
  ]
2386
 
2387
+ [[package]]
2388
+ name = "qdrant-client"
2389
+ version = "1.14.2"
2390
+ source = { registry = "https://pypi.org/simple" }
2391
+ dependencies = [
2392
+ { name = "grpcio" },
2393
+ { name = "httpx", extra = ["http2"] },
2394
+ { name = "numpy" },
2395
+ { name = "portalocker" },
2396
+ { name = "protobuf" },
2397
+ { name = "pydantic" },
2398
+ { name = "urllib3" },
2399
+ ]
2400
+ sdist = { url = "https://files.pythonhosted.org/packages/00/80/b84c4c52106b6da291829d8ec632f58a5692d2772e8d3c1d3be4f9a47a2e/qdrant_client-1.14.2.tar.gz", hash = "sha256:da5cab4d367d099d1330b6f30d45aefc8bd76f8b8f9d8fa5d4f813501b93af0d", size = 285531, upload-time = "2025-04-24T14:44:43.307Z" }
2401
+ wheels = [
2402
+ { url = "https://files.pythonhosted.org/packages/e4/52/f49b0aa96253010f57cf80315edecec4f469e7a39c1ed92bf727fa290e57/qdrant_client-1.14.2-py3-none-any.whl", hash = "sha256:7c283b1f0e71db9c21b85d898fb395791caca2a6d56ee751da96d797b001410c", size = 327691, upload-time = "2025-04-24T14:44:41.794Z" },
2403
+ ]
2404
+
2405
+ [package.optional-dependencies]
2406
+ fastembed-gpu = [
2407
+ { name = "fastembed-gpu" },
2408
+ ]
2409
+
2410
  [[package]]
2411
  name = "ray"
2412
  version = "2.45.0"
 
2579
  { url = "https://files.pythonhosted.org/packages/2d/e5/22865285789f3412ad0c3d7ec4dc0a3e86483b794be8a5d9ed5a19390900/rpds_py-0.24.0-cp313-cp313t-win_amd64.whl", hash = "sha256:675269d407a257b8c00a6b58205b72eec8231656506c56fd429d924ca00bb350", size = 237354, upload-time = "2025-03-26T14:54:33.199Z" },
2580
  ]
2581
 
2582
+ [[package]]
2583
+ name = "rsa"
2584
+ version = "4.9.1"
2585
+ source = { registry = "https://pypi.org/simple" }
2586
+ dependencies = [
2587
+ { name = "pyasn1" },
2588
+ ]
2589
+ sdist = { url = "https://files.pythonhosted.org/packages/da/8a/22b7beea3ee0d44b1916c0c1cb0ee3af23b700b6da9f04991899d0c555d4/rsa-4.9.1.tar.gz", hash = "sha256:e7bdbfdb5497da4c07dfd35530e1a902659db6ff241e39d9953cad06ebd0ae75", size = 29034, upload-time = "2025-04-16T09:51:18.218Z" }
2590
+ wheels = [
2591
+ { url = "https://files.pythonhosted.org/packages/64/8d/0133e4eb4beed9e425d9a98ed6e081a55d195481b7632472be1af08d2f6b/rsa-4.9.1-py3-none-any.whl", hash = "sha256:68635866661c6836b8d39430f97a996acbd61bfa49406748ea243539fe239762", size = 34696, upload-time = "2025-04-16T09:51:17.142Z" },
2592
+ ]
2593
+
2594
  [[package]]
2595
  name = "ruff"
2596
  version = "0.11.8"
 
2650
  { url = "https://files.pythonhosted.org/packages/69/e2/b011c38e5394c4c18fb5500778a55ec43ad6106126e74723ffaee246f56e/safetensors-0.5.3-cp38-abi3-win_amd64.whl", hash = "sha256:836cbbc320b47e80acd40e44c8682db0e8ad7123209f69b093def21ec7cafd11", size = 308878, upload-time = "2025-02-26T09:15:14.99Z" },
2651
  ]
2652
 
2653
+ [[package]]
2654
+ name = "scikit-learn"
2655
+ version = "1.6.1"
2656
+ source = { registry = "https://pypi.org/simple" }
2657
+ dependencies = [
2658
+ { name = "joblib" },
2659
+ { name = "numpy" },
2660
+ { name = "scipy" },
2661
+ { name = "threadpoolctl" },
2662
+ ]
2663
+ sdist = { url = "https://files.pythonhosted.org/packages/9e/a5/4ae3b3a0755f7b35a280ac90b28817d1f380318973cff14075ab41ef50d9/scikit_learn-1.6.1.tar.gz", hash = "sha256:b4fc2525eca2c69a59260f583c56a7557c6ccdf8deafdba6e060f94c1c59738e", size = 7068312, upload-time = "2025-01-10T08:07:55.348Z" }
2664
+ wheels = [
2665
+ { url = "https://files.pythonhosted.org/packages/0a/18/c797c9b8c10380d05616db3bfb48e2a3358c767affd0857d56c2eb501caa/scikit_learn-1.6.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:926f207c804104677af4857b2c609940b743d04c4c35ce0ddc8ff4f053cddc1b", size = 12104516, upload-time = "2025-01-10T08:06:40.009Z" },
2666
+ { url = "https://files.pythonhosted.org/packages/c4/b7/2e35f8e289ab70108f8cbb2e7a2208f0575dc704749721286519dcf35f6f/scikit_learn-1.6.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:2c2cae262064e6a9b77eee1c8e768fc46aa0b8338c6a8297b9b6759720ec0ff2", size = 11167837, upload-time = "2025-01-10T08:06:43.305Z" },
2667
+ { url = "https://files.pythonhosted.org/packages/a4/f6/ff7beaeb644bcad72bcfd5a03ff36d32ee4e53a8b29a639f11bcb65d06cd/scikit_learn-1.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1061b7c028a8663fb9a1a1baf9317b64a257fcb036dae5c8752b2abef31d136f", size = 12253728, upload-time = "2025-01-10T08:06:47.618Z" },
2668
+ { url = "https://files.pythonhosted.org/packages/29/7a/8bce8968883e9465de20be15542f4c7e221952441727c4dad24d534c6d99/scikit_learn-1.6.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e69fab4ebfc9c9b580a7a80111b43d214ab06250f8a7ef590a4edf72464dd86", size = 13147700, upload-time = "2025-01-10T08:06:50.888Z" },
2669
+ { url = "https://files.pythonhosted.org/packages/62/27/585859e72e117fe861c2079bcba35591a84f801e21bc1ab85bce6ce60305/scikit_learn-1.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:70b1d7e85b1c96383f872a519b3375f92f14731e279a7b4c6cfd650cf5dffc52", size = 11110613, upload-time = "2025-01-10T08:06:54.115Z" },
2670
+ { url = "https://files.pythonhosted.org/packages/2e/59/8eb1872ca87009bdcdb7f3cdc679ad557b992c12f4b61f9250659e592c63/scikit_learn-1.6.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2ffa1e9e25b3d93990e74a4be2c2fc61ee5af85811562f1288d5d055880c4322", size = 12010001, upload-time = "2025-01-10T08:06:58.613Z" },
2671
+ { url = "https://files.pythonhosted.org/packages/9d/05/f2fc4effc5b32e525408524c982c468c29d22f828834f0625c5ef3d601be/scikit_learn-1.6.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:dc5cf3d68c5a20ad6d571584c0750ec641cc46aeef1c1507be51300e6003a7e1", size = 11096360, upload-time = "2025-01-10T08:07:01.556Z" },
2672
+ { url = "https://files.pythonhosted.org/packages/c8/e4/4195d52cf4f113573fb8ebc44ed5a81bd511a92c0228889125fac2f4c3d1/scikit_learn-1.6.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c06beb2e839ecc641366000ca84f3cf6fa9faa1777e29cf0c04be6e4d096a348", size = 12209004, upload-time = "2025-01-10T08:07:06.931Z" },
2673
+ { url = "https://files.pythonhosted.org/packages/94/be/47e16cdd1e7fcf97d95b3cb08bde1abb13e627861af427a3651fcb80b517/scikit_learn-1.6.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e8ca8cb270fee8f1f76fa9bfd5c3507d60c6438bbee5687f81042e2bb98e5a97", size = 13171776, upload-time = "2025-01-10T08:07:11.715Z" },
2674
+ { url = "https://files.pythonhosted.org/packages/34/b0/ca92b90859070a1487827dbc672f998da95ce83edce1270fc23f96f1f61a/scikit_learn-1.6.1-cp313-cp313-win_amd64.whl", hash = "sha256:7a1c43c8ec9fde528d664d947dc4c0789be4077a3647f232869f41d9bf50e0fb", size = 11071865, upload-time = "2025-01-10T08:07:16.088Z" },
2675
+ { url = "https://files.pythonhosted.org/packages/12/ae/993b0fb24a356e71e9a894e42b8a9eec528d4c70217353a1cd7a48bc25d4/scikit_learn-1.6.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a17c1dea1d56dcda2fac315712f3651a1fea86565b64b48fa1bc090249cbf236", size = 11955804, upload-time = "2025-01-10T08:07:20.385Z" },
2676
+ { url = "https://files.pythonhosted.org/packages/d6/54/32fa2ee591af44507eac86406fa6bba968d1eb22831494470d0a2e4a1eb1/scikit_learn-1.6.1-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:6a7aa5f9908f0f28f4edaa6963c0a6183f1911e63a69aa03782f0d924c830a35", size = 11100530, upload-time = "2025-01-10T08:07:23.675Z" },
2677
+ { url = "https://files.pythonhosted.org/packages/3f/58/55856da1adec655bdce77b502e94a267bf40a8c0b89f8622837f89503b5a/scikit_learn-1.6.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0650e730afb87402baa88afbf31c07b84c98272622aaba002559b614600ca691", size = 12433852, upload-time = "2025-01-10T08:07:26.817Z" },
2678
+ { url = "https://files.pythonhosted.org/packages/ff/4f/c83853af13901a574f8f13b645467285a48940f185b690936bb700a50863/scikit_learn-1.6.1-cp313-cp313t-win_amd64.whl", hash = "sha256:3f59fe08dc03ea158605170eb52b22a105f238a5d512c4470ddeca71feae8e5f", size = 11337256, upload-time = "2025-01-10T08:07:31.084Z" },
2679
+ ]
2680
+
2681
  [[package]]
2682
  name = "scipy"
2683
  version = "1.15.2"
 
2721
  version = "0.1.0"
2722
  source = { virtual = "." }
2723
  dependencies = [
2724
+ { name = "google-genai" },
2725
  { name = "gradio" },
2726
+ { name = "pandas" },
2727
+ { name = "pyarrow" },
2728
  { name = "pydantic" },
2729
+ { name = "qdrant-client", extra = ["fastembed-gpu"] },
2730
+ { name = "sentence-transformers" },
2731
  { name = "vllm" },
2732
  ]
2733
 
2734
  [package.metadata]
2735
  requires-dist = [
2736
+ { name = "google-genai", specifier = ">=1.13.0" },
2737
  { name = "gradio", specifier = ">=5.29.0" },
2738
+ { name = "pandas", specifier = ">=2.2.3" },
2739
+ { name = "pyarrow", specifier = ">=20.0.0" },
2740
  { name = "pydantic", specifier = ">=2.11.4" },
2741
+ { name = "qdrant-client", extras = ["fastembed-gpu"], specifier = ">=1.14.2" },
2742
+ { name = "sentence-transformers", specifier = ">=4.1.0" },
2743
  { name = "vllm", specifier = ">=0.8.5.post1" },
2744
  ]
2745
 
 
2752
  { url = "https://files.pythonhosted.org/packages/6a/23/8146aad7d88f4fcb3a6218f41a60f6c2d4e3a72de72da1825dc7c8f7877c/semantic_version-2.10.0-py2.py3-none-any.whl", hash = "sha256:de78a3b8e0feda74cabc54aab2da702113e33ac9d9eb9d2389bcf1f58b7d9177", size = 15552, upload-time = "2022-05-26T13:35:21.206Z" },
2753
  ]
2754
 
2755
+ [[package]]
2756
+ name = "sentence-transformers"
2757
+ version = "4.1.0"
2758
+ source = { registry = "https://pypi.org/simple" }
2759
+ dependencies = [
2760
+ { name = "huggingface-hub" },
2761
+ { name = "pillow" },
2762
+ { name = "scikit-learn" },
2763
+ { name = "scipy" },
2764
+ { name = "torch" },
2765
+ { name = "tqdm" },
2766
+ { name = "transformers" },
2767
+ { name = "typing-extensions" },
2768
+ ]
2769
+ sdist = { url = "https://files.pythonhosted.org/packages/73/84/b30d1b29ff58cfdff423e36a50efd622c8e31d7039b1a0d5e72066620da1/sentence_transformers-4.1.0.tar.gz", hash = "sha256:f125ffd1c727533e0eca5d4567de72f84728de8f7482834de442fd90c2c3d50b", size = 272420, upload-time = "2025-04-15T13:46:13.732Z" }
2770
+ wheels = [
2771
+ { url = "https://files.pythonhosted.org/packages/45/2d/1151b371f28caae565ad384fdc38198f1165571870217aedda230b9d7497/sentence_transformers-4.1.0-py3-none-any.whl", hash = "sha256:382a7f6be1244a100ce40495fb7523dbe8d71b3c10b299f81e6b735092b3b8ca", size = 345695, upload-time = "2025-04-15T13:46:12.44Z" },
2772
+ ]
2773
+
2774
  [[package]]
2775
  name = "sentencepiece"
2776
  version = "0.2.0"
 
2847
  { url = "https://files.pythonhosted.org/packages/b2/fe/81695a1aa331a842b582453b605175f419fe8540355886031328089d840a/sympy-1.13.1-py3-none-any.whl", hash = "sha256:db36cdc64bf61b9b24578b6f7bab1ecdd2452cf008f34faa33776680c26d66f8", size = 6189177, upload-time = "2024-07-19T09:26:48.863Z" },
2848
  ]
2849
 
2850
+ [[package]]
2851
+ name = "threadpoolctl"
2852
+ version = "3.6.0"
2853
+ source = { registry = "https://pypi.org/simple" }
2854
+ sdist = { url = "https://files.pythonhosted.org/packages/b7/4d/08c89e34946fce2aec4fbb45c9016efd5f4d7f24af8e5d93296e935631d8/threadpoolctl-3.6.0.tar.gz", hash = "sha256:8ab8b4aa3491d812b623328249fab5302a68d2d71745c8a4c719a2fcaba9f44e", size = 21274, upload-time = "2025-03-13T13:49:23.031Z" }
2855
+ wheels = [
2856
+ { url = "https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl", hash = "sha256:43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb", size = 18638, upload-time = "2025-03-13T13:49:21.846Z" },
2857
+ ]
2858
+
2859
  [[package]]
2860
  name = "tiktoken"
2861
  version = "0.9.0"
 
3265
  { url = "https://files.pythonhosted.org/packages/fa/a8/5b41e0da817d64113292ab1f8247140aac61cbf6cfd085d6a0fa77f4984f/websockets-15.0.1-py3-none-any.whl", hash = "sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f", size = 169743, upload-time = "2025-03-05T20:03:39.41Z" },
3266
  ]
3267
 
3268
+ [[package]]
3269
+ name = "win32-setctime"
3270
+ version = "1.2.0"
3271
+ source = { registry = "https://pypi.org/simple" }
3272
+ sdist = { url = "https://files.pythonhosted.org/packages/b3/8f/705086c9d734d3b663af0e9bb3d4de6578d08f46b1b101c2442fd9aecaa2/win32_setctime-1.2.0.tar.gz", hash = "sha256:ae1fdf948f5640aae05c511ade119313fb6a30d7eabe25fef9764dca5873c4c0", size = 4867, upload-time = "2024-12-07T15:28:28.314Z" }
3273
+ wheels = [
3274
+ { url = "https://files.pythonhosted.org/packages/e1/07/c6fe3ad3e685340704d314d765b7912993bcb8dc198f0e7a89382d37974b/win32_setctime-1.2.0-py3-none-any.whl", hash = "sha256:95d644c4e708aba81dc3704a116d8cbc974d70b3bdb8be1d150e36be6e9d1390", size = 4083, upload-time = "2024-12-07T15:28:26.465Z" },
3275
+ ]
3276
+
3277
  [[package]]
3278
  name = "wrapt"
3279
  version = "1.17.2"