Spaces:
Sleeping
Sleeping
Commit
·
0827021
1
Parent(s):
c4a0174
Add initial implementation of the RAG application with Gradio interface
Browse files- app.py +117 -0
- main.py +0 -236
- pyproject.toml +2 -0
- src/__init__.py +0 -0
- src/config.py +23 -0
- src/data_loader.py +20 -0
- src/embedding_generator.py +76 -0
- src/rag_pipeline.py +23 -0
- src/vector_store.py +124 -0
- uv.lock +403 -0
app.py
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import gradio as gr
|
| 2 |
+
import os
|
| 3 |
+
import atexit
|
| 4 |
+
import glob
|
| 5 |
+
import shutil
|
| 6 |
+
from src.config import (
|
| 7 |
+
DOCS_DIR,
|
| 8 |
+
COLLECTION_NAME,
|
| 9 |
+
EMBEDDING_MODEL_NAME,
|
| 10 |
+
MILVUS_DB_PATH,
|
| 11 |
+
)
|
| 12 |
+
from src.data_loader import load_data
|
| 13 |
+
from src.embedding_generator import (
|
| 14 |
+
generate_document_embeddings,
|
| 15 |
+
generate_query_embeddings,
|
| 16 |
+
)
|
| 17 |
+
from src.vector_store import (
|
| 18 |
+
get_milvus_client,
|
| 19 |
+
create_collection_if_not_exists,
|
| 20 |
+
insert_data,
|
| 21 |
+
search,
|
| 22 |
+
)
|
| 23 |
+
from src.rag_pipeline import answer_question
|
| 24 |
+
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
|
| 25 |
+
|
| 26 |
+
# Initialize models and clients
|
| 27 |
+
embedding_model = HuggingFaceEmbedding(
|
| 28 |
+
model_name=EMBEDDING_MODEL_NAME,
|
| 29 |
+
trust_remote_code=True,
|
| 30 |
+
cache_folder=".hf_cache",
|
| 31 |
+
)
|
| 32 |
+
|
| 33 |
+
milvus_client = get_milvus_client(MILVUS_DB_PATH)
|
| 34 |
+
|
| 35 |
+
# --- Cleanup Function ---
|
| 36 |
+
def cleanup_documents():
|
| 37 |
+
"""Remove all files from the documents directory."""
|
| 38 |
+
print("Cleaning up uploaded documents...")
|
| 39 |
+
files = glob.glob(os.path.join(DOCS_DIR, '*'))
|
| 40 |
+
for f in files:
|
| 41 |
+
if os.path.isfile(f):
|
| 42 |
+
os.remove(f)
|
| 43 |
+
print("Cleanup complete.")
|
| 44 |
+
|
| 45 |
+
# Register the cleanup function to run on exit
|
| 46 |
+
atexit.register(cleanup_documents)
|
| 47 |
+
|
| 48 |
+
|
| 49 |
+
def index_documents(file_list):
|
| 50 |
+
"""Index documents from a list of files."""
|
| 51 |
+
if not file_list:
|
| 52 |
+
return "No files to index."
|
| 53 |
+
|
| 54 |
+
os.makedirs(DOCS_DIR, exist_ok=True)
|
| 55 |
+
|
| 56 |
+
# Move uploaded files to the documents directory
|
| 57 |
+
for file in file_list:
|
| 58 |
+
shutil.copy(file.name, os.path.join(DOCS_DIR, os.path.basename(file.name)))
|
| 59 |
+
|
| 60 |
+
docs = load_data(DOCS_DIR)
|
| 61 |
+
documents = [doc.text for doc in docs]
|
| 62 |
+
|
| 63 |
+
if not documents:
|
| 64 |
+
return "No documents found in the uploaded files."
|
| 65 |
+
|
| 66 |
+
binary_embeddings = generate_document_embeddings(documents, embedding_model)
|
| 67 |
+
if not binary_embeddings:
|
| 68 |
+
return "Could not generate embeddings for the documents."
|
| 69 |
+
|
| 70 |
+
dim = len(binary_embeddings[0]) * 8
|
| 71 |
+
|
| 72 |
+
create_collection_if_not_exists(milvus_client, COLLECTION_NAME, dim)
|
| 73 |
+
|
| 74 |
+
data_to_insert = [
|
| 75 |
+
{"context": context, "binary_vector": binary_embedding}
|
| 76 |
+
for context, binary_embedding in zip(documents, binary_embeddings)
|
| 77 |
+
]
|
| 78 |
+
insert_data(milvus_client, COLLECTION_NAME, data_to_insert)
|
| 79 |
+
|
| 80 |
+
return f"Successfully indexed {len(documents)} documents."
|
| 81 |
+
|
| 82 |
+
|
| 83 |
+
def chat_interface(message, history):
|
| 84 |
+
"""Chat interface for the RAG pipeline."""
|
| 85 |
+
query_embedding = generate_query_embeddings(message, embedding_model)
|
| 86 |
+
if not query_embedding:
|
| 87 |
+
return "Sorry, I could not process your query."
|
| 88 |
+
|
| 89 |
+
contexts = search(milvus_client, COLLECTION_NAME, query_embedding)
|
| 90 |
+
if not contexts:
|
| 91 |
+
return "I couldn't find any relevant information in the documents."
|
| 92 |
+
|
| 93 |
+
answer = answer_question(message, contexts)
|
| 94 |
+
return answer
|
| 95 |
+
|
| 96 |
+
|
| 97 |
+
with gr.Blocks() as demo:
|
| 98 |
+
gr.Markdown("## RAG with Binary Quantization")
|
| 99 |
+
|
| 100 |
+
with gr.Tab("Upload & Index"):
|
| 101 |
+
file_input = gr.File(file_count="multiple", label="Upload Documents")
|
| 102 |
+
index_button = gr.Button("Update Index")
|
| 103 |
+
index_status = gr.Textbox(label="Indexing Status")
|
| 104 |
+
|
| 105 |
+
with gr.Tab("Chat"):
|
| 106 |
+
gr.ChatInterface(chat_interface)
|
| 107 |
+
|
| 108 |
+
index_button.click(
|
| 109 |
+
fn=index_documents,
|
| 110 |
+
inputs=[file_input],
|
| 111 |
+
outputs=[index_status],
|
| 112 |
+
)
|
| 113 |
+
|
| 114 |
+
if __name__ == "__main__":
|
| 115 |
+
# Ensure the documents directory exists from the start
|
| 116 |
+
os.makedirs(DOCS_DIR, exist_ok=True)
|
| 117 |
+
demo.launch()
|
main.py
DELETED
|
@@ -1,236 +0,0 @@
|
|
| 1 |
-
import os
|
| 2 |
-
from dotenv import load_dotenv
|
| 3 |
-
from langchain.chat_models import init_chat_model
|
| 4 |
-
from llama_index.core import SimpleDirectoryReader
|
| 5 |
-
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
|
| 6 |
-
import numpy as np
|
| 7 |
-
from pymilvus import MilvusClient, DataType
|
| 8 |
-
import logging
|
| 9 |
-
from langchain_core.messages import HumanMessage
|
| 10 |
-
|
| 11 |
-
logging.basicConfig(level=logging.INFO)
|
| 12 |
-
logger = logging.getLogger(__name__)
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
load_dotenv()
|
| 16 |
-
|
| 17 |
-
DOCS_DIR = "documents"
|
| 18 |
-
MODEL_NAME = "gpt-4.1"
|
| 19 |
-
TEMPERATURE = 0.2
|
| 20 |
-
COLLECTION_NAME = "fast_rag"
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
def batch_iterate(items, batch_size):
|
| 24 |
-
"""Iterate over items in batches."""
|
| 25 |
-
for i in range(0, len(items), batch_size):
|
| 26 |
-
yield items[i:i + batch_size]
|
| 27 |
-
|
| 28 |
-
|
| 29 |
-
llm = init_chat_model(MODEL_NAME, model_provider="openai", temperature=TEMPERATURE)
|
| 30 |
-
|
| 31 |
-
## Generate binary embeddings
|
| 32 |
-
def generate_binary_embeddings():
|
| 33 |
-
"""Generate binary embeddings from documents."""
|
| 34 |
-
try:
|
| 35 |
-
# Define loader
|
| 36 |
-
loader = SimpleDirectoryReader(
|
| 37 |
-
input_dir=DOCS_DIR,
|
| 38 |
-
required_exts=[".pdf"],
|
| 39 |
-
recursive=True,
|
| 40 |
-
)
|
| 41 |
-
|
| 42 |
-
docs = loader.load_data()
|
| 43 |
-
documents = [doc.text for doc in docs]
|
| 44 |
-
|
| 45 |
-
if not documents:
|
| 46 |
-
logger.error("No documents found in the documents directory.")
|
| 47 |
-
return [], []
|
| 48 |
-
|
| 49 |
-
# Generate embeddings
|
| 50 |
-
embedding_model = HuggingFaceEmbedding(
|
| 51 |
-
model_name="BAAI/bge-large-en-v1.5",
|
| 52 |
-
trust_remote_code=True,
|
| 53 |
-
cache_folder=".hf_cache",
|
| 54 |
-
)
|
| 55 |
-
|
| 56 |
-
binary_embeddings = []
|
| 57 |
-
|
| 58 |
-
for context in batch_iterate(documents, batch_size=512):
|
| 59 |
-
# generate float32 embeddings
|
| 60 |
-
batch_embeddings = embedding_model.get_text_embedding_batch(context)
|
| 61 |
-
|
| 62 |
-
# convert float32 to binary vectors
|
| 63 |
-
embeds_array = np.array(batch_embeddings)
|
| 64 |
-
binary_embeds = np.where(embeds_array > 0, 1, 0).astype(np.uint8)
|
| 65 |
-
|
| 66 |
-
# convert to bytes array
|
| 67 |
-
packed_embeds = np.packbits(binary_embeds, axis=1)
|
| 68 |
-
byte_embeds = [vec.tobytes() for vec in packed_embeds]
|
| 69 |
-
|
| 70 |
-
binary_embeddings.extend(byte_embeds)
|
| 71 |
-
|
| 72 |
-
logger.info(f"Generated {len(binary_embeddings)} binary embeddings")
|
| 73 |
-
return documents, binary_embeddings
|
| 74 |
-
|
| 75 |
-
except Exception as e:
|
| 76 |
-
logger.error(f"Error generating embeddings: {e}")
|
| 77 |
-
return [], []
|
| 78 |
-
|
| 79 |
-
|
| 80 |
-
documents, binary_embeddings = generate_binary_embeddings()
|
| 81 |
-
|
| 82 |
-
## Vector indexing
|
| 83 |
-
client = MilvusClient("milvus_binary_quantized.db")
|
| 84 |
-
|
| 85 |
-
# Initialize client and schema
|
| 86 |
-
def create_collection(documents, embeddings):
|
| 87 |
-
try:
|
| 88 |
-
if client.has_collection(COLLECTION_NAME):
|
| 89 |
-
logger.info(f"Collection {COLLECTION_NAME} already exists, dropping it...")
|
| 90 |
-
client.drop_collection(COLLECTION_NAME)
|
| 91 |
-
|
| 92 |
-
# Initialize client
|
| 93 |
-
schema = client.create_schema(
|
| 94 |
-
auto_id=True,
|
| 95 |
-
enable_dynamic_fields=True,
|
| 96 |
-
)
|
| 97 |
-
except Exception as e:
|
| 98 |
-
logger.error(f"Error creating collection: {e}")
|
| 99 |
-
return None
|
| 100 |
-
|
| 101 |
-
# Add primary key field
|
| 102 |
-
schema.add_field(
|
| 103 |
-
field_name="id",
|
| 104 |
-
datatype=DataType.INT64,
|
| 105 |
-
is_primary=True,
|
| 106 |
-
auto_id=True,
|
| 107 |
-
)
|
| 108 |
-
|
| 109 |
-
# Add fields to schema
|
| 110 |
-
schema.add_field(
|
| 111 |
-
field_name="context",
|
| 112 |
-
datatype=DataType.VARCHAR,
|
| 113 |
-
max_length=65535, # max length for VARCHAR
|
| 114 |
-
)
|
| 115 |
-
schema.add_field(
|
| 116 |
-
field_name="binary_vector",
|
| 117 |
-
datatype=DataType.BINARY_VECTOR,
|
| 118 |
-
dim=1024, # dimension for binary vector
|
| 119 |
-
)
|
| 120 |
-
|
| 121 |
-
# Create index params for binary vector
|
| 122 |
-
index_params = client.prepare_index_params()
|
| 123 |
-
index_params.add_index(
|
| 124 |
-
field_name="binary_vector",
|
| 125 |
-
index_name="binary_vector_index",
|
| 126 |
-
index_type="BIN_FLAT", # Exact search for binary vectors
|
| 127 |
-
metric_type="HAMMING", # Hamming distance for binary vectors
|
| 128 |
-
)
|
| 129 |
-
|
| 130 |
-
# Create collection with schema and index
|
| 131 |
-
client.create_collection(
|
| 132 |
-
collection_name=COLLECTION_NAME,
|
| 133 |
-
schema=schema,
|
| 134 |
-
index_params=index_params,
|
| 135 |
-
)
|
| 136 |
-
|
| 137 |
-
# Insert data into collection
|
| 138 |
-
client.insert(
|
| 139 |
-
collection_name=COLLECTION_NAME,
|
| 140 |
-
data=[
|
| 141 |
-
{
|
| 142 |
-
"context": context,
|
| 143 |
-
"binary_vector": binary_embedding
|
| 144 |
-
}
|
| 145 |
-
for context, binary_embedding in zip(documents, embeddings)
|
| 146 |
-
]
|
| 147 |
-
)
|
| 148 |
-
|
| 149 |
-
create_collection(documents, binary_embeddings)
|
| 150 |
-
|
| 151 |
-
|
| 152 |
-
def get_query_embeddings(query: str) -> bytes:
|
| 153 |
-
"""Get query embeddings."""
|
| 154 |
-
try:
|
| 155 |
-
embedding_model = HuggingFaceEmbedding(
|
| 156 |
-
model_name="BAAI/bge-large-en-v1.5",
|
| 157 |
-
trust_remote_code=True,
|
| 158 |
-
cache_folder=".hf_cache",
|
| 159 |
-
)
|
| 160 |
-
except Exception as e:
|
| 161 |
-
logger.error(f"Error getting query embeddings: {e}")
|
| 162 |
-
return None
|
| 163 |
-
|
| 164 |
-
# Generate float32 embeddings
|
| 165 |
-
query_embedding = embedding_model.get_text_embedding(query)
|
| 166 |
-
|
| 167 |
-
# Convert float32 to binary vector
|
| 168 |
-
binary_vector = np.where(np.array(query_embedding) > 0, 1, 0).astype(np.uint8)
|
| 169 |
-
|
| 170 |
-
# Convert to bytes array
|
| 171 |
-
packed_vector = np.packbits(binary_vector, axis=0)
|
| 172 |
-
|
| 173 |
-
return packed_vector.tobytes()
|
| 174 |
-
|
| 175 |
-
|
| 176 |
-
def search_documents(query: str, limit: int = 5):
|
| 177 |
-
"""Search documents using binary embeddings."""
|
| 178 |
-
try:
|
| 179 |
-
binary_query = get_query_embeddings(query)
|
| 180 |
-
if binary_query is None:
|
| 181 |
-
logger.error("Failed to generate query embeddings")
|
| 182 |
-
return []
|
| 183 |
-
|
| 184 |
-
search_results = client.search(
|
| 185 |
-
collection_name=COLLECTION_NAME,
|
| 186 |
-
data=[binary_query],
|
| 187 |
-
anns_field="binary_vector",
|
| 188 |
-
search_params={
|
| 189 |
-
"metric_type": "HAMMING",
|
| 190 |
-
},
|
| 191 |
-
output_fields=["context"],
|
| 192 |
-
limit=limit,
|
| 193 |
-
)
|
| 194 |
-
|
| 195 |
-
# logger.info(f"Search results: {search_results}")
|
| 196 |
-
|
| 197 |
-
if not search_results:
|
| 198 |
-
logger.error("No search results found")
|
| 199 |
-
return []
|
| 200 |
-
|
| 201 |
-
contexts = [res.entity.context for res in search_results[0]]
|
| 202 |
-
|
| 203 |
-
return contexts
|
| 204 |
-
|
| 205 |
-
except Exception as e:
|
| 206 |
-
logger.error(f"Error searching documents: {e}")
|
| 207 |
-
return []
|
| 208 |
-
|
| 209 |
-
|
| 210 |
-
# Test the search functionality
|
| 211 |
-
query = "authors of the document"
|
| 212 |
-
contexts = search_documents(query, limit=5)
|
| 213 |
-
|
| 214 |
-
prompt = f"""
|
| 215 |
-
# Role and objective
|
| 216 |
-
You are a helpful assistant that can answer questions about the following context.
|
| 217 |
-
|
| 218 |
-
# Intstructions
|
| 219 |
-
Given the context information, answer the user's query.
|
| 220 |
-
If the context information is not relevant to the user's query, say "I don't know".
|
| 221 |
-
|
| 222 |
-
# Context
|
| 223 |
-
{contexts}
|
| 224 |
-
|
| 225 |
-
# User's query
|
| 226 |
-
{query}
|
| 227 |
-
|
| 228 |
-
# Answer
|
| 229 |
-
"""
|
| 230 |
-
|
| 231 |
-
human_message = HumanMessage(content=prompt)
|
| 232 |
-
print(f"Human message: {human_message}")
|
| 233 |
-
|
| 234 |
-
response = llm.invoke(input=[human_message])
|
| 235 |
-
|
| 236 |
-
print(f"Response from the model: {response.content}")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pyproject.toml
CHANGED
|
@@ -16,4 +16,6 @@ dependencies = [
|
|
| 16 |
"logging>=0.4.9.6",
|
| 17 |
"numpy>=2.3.2",
|
| 18 |
"pymilvus>=2.5.14",
|
|
|
|
|
|
|
| 19 |
]
|
|
|
|
| 16 |
"logging>=0.4.9.6",
|
| 17 |
"numpy>=2.3.2",
|
| 18 |
"pymilvus>=2.5.14",
|
| 19 |
+
"gradio>=4.0.0",
|
| 20 |
+
"docx2txt>=0.9",
|
| 21 |
]
|
src/__init__.py
ADDED
|
File without changes
|
src/config.py
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
DOCS_DIR = "documents"
|
| 2 |
+
MODEL_NAME = "gpt-4.1"
|
| 3 |
+
MODEL_PROVIDER = "openai"
|
| 4 |
+
TEMPERATURE = 0.2
|
| 5 |
+
COLLECTION_NAME = "fast_rag"
|
| 6 |
+
EMBEDDING_MODEL_NAME = "BAAI/bge-large-en-v1.5"
|
| 7 |
+
MILVUS_DB_PATH = "milvus_binary_quantized.db"
|
| 8 |
+
|
| 9 |
+
PROMPT = """ # Role and objective
|
| 10 |
+
You are a helpful assistant that can answer questions about the following context.
|
| 11 |
+
|
| 12 |
+
# Intstructions
|
| 13 |
+
Given the context information, answer the user's query.
|
| 14 |
+
If the context information is not relevant to the user's query, say "I don't know".
|
| 15 |
+
|
| 16 |
+
# Context
|
| 17 |
+
{contexts}
|
| 18 |
+
|
| 19 |
+
# User's query
|
| 20 |
+
{query}
|
| 21 |
+
|
| 22 |
+
# Answer
|
| 23 |
+
"""
|
src/data_loader.py
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from llama_index.core import SimpleDirectoryReader
|
| 2 |
+
|
| 3 |
+
|
| 4 |
+
def load_data(data_dir: str) -> list:
|
| 5 |
+
"""
|
| 6 |
+
Load a data from a directory
|
| 7 |
+
|
| 8 |
+
Args:
|
| 9 |
+
data_dir: The directory to load the data from
|
| 10 |
+
|
| 11 |
+
Returns:
|
| 12 |
+
A list of documents
|
| 13 |
+
"""
|
| 14 |
+
try:
|
| 15 |
+
loader = SimpleDirectoryReader(input_dir=data_dir, required_exts=[".pdf", ".txt", ".md", ".docx", ".doc"], recursive=True)
|
| 16 |
+
docs = loader.load_data()
|
| 17 |
+
return docs
|
| 18 |
+
except Exception as e:
|
| 19 |
+
print(f"Error loading data from {data_dir}: {e}")
|
| 20 |
+
return []
|
src/embedding_generator.py
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from typing import Any, Generator
|
| 2 |
+
import numpy as np
|
| 3 |
+
|
| 4 |
+
|
| 5 |
+
# Helper function for batching
|
| 6 |
+
def batch_iterate(items: Any, batch_size: int) -> Generator[Any, None, None]:
|
| 7 |
+
"""
|
| 8 |
+
Iterate over items in batches.
|
| 9 |
+
|
| 10 |
+
Args:
|
| 11 |
+
items: The items to iterate over
|
| 12 |
+
batch_size: The size of the batches
|
| 13 |
+
|
| 14 |
+
Returns:
|
| 15 |
+
A generator of batches
|
| 16 |
+
"""
|
| 17 |
+
for i in range(0, len(items), batch_size):
|
| 18 |
+
yield items[i:i + batch_size]
|
| 19 |
+
|
| 20 |
+
|
| 21 |
+
def generate_document_embeddings(documents: list[str], embedding_model: Any) -> list[bytes]:
|
| 22 |
+
"""
|
| 23 |
+
Generate document embeddings.
|
| 24 |
+
|
| 25 |
+
Args:
|
| 26 |
+
documents: The documents to generate embeddings for
|
| 27 |
+
embedding_model: The embedding model to use
|
| 28 |
+
|
| 29 |
+
Returns:
|
| 30 |
+
A list of document embeddings
|
| 31 |
+
"""
|
| 32 |
+
binary_embeddings = []
|
| 33 |
+
|
| 34 |
+
try:
|
| 35 |
+
for context in batch_iterate(documents, batch_size=512):
|
| 36 |
+
# generate float32 embeddings
|
| 37 |
+
batch_embeddings = embedding_model.get_text_embedding_batch(context)
|
| 38 |
+
|
| 39 |
+
# convert float32 to binary vectors
|
| 40 |
+
embeds_array = np.array(batch_embeddings)
|
| 41 |
+
binary_embeds = np.where(embeds_array > 0, 1, 0).astype(np.uint8)
|
| 42 |
+
|
| 43 |
+
# convert to bytes array
|
| 44 |
+
packed_embeds = np.packbits(binary_embeds, axis=1)
|
| 45 |
+
|
| 46 |
+
binary_embeddings.extend(packed_embeds)
|
| 47 |
+
return binary_embeddings
|
| 48 |
+
except Exception as e:
|
| 49 |
+
print(f"Error generating document embeddings: {e}")
|
| 50 |
+
return []
|
| 51 |
+
|
| 52 |
+
def generate_query_embeddings(query: str, embdding_model: Any) -> bytes:
|
| 53 |
+
"""
|
| 54 |
+
Generate query embeddings.
|
| 55 |
+
|
| 56 |
+
Args:
|
| 57 |
+
query: The query to generate embeddings for
|
| 58 |
+
embdding_model: The embedding model to use
|
| 59 |
+
|
| 60 |
+
Returns:
|
| 61 |
+
A bytes array of query embeddings
|
| 62 |
+
"""
|
| 63 |
+
try:
|
| 64 |
+
# generate float32 embeddings
|
| 65 |
+
query_embedding = embdding_model.get_text_embedding(query)
|
| 66 |
+
|
| 67 |
+
# convert float32 to binary vector
|
| 68 |
+
binary_vector = np.where(np.array(query_embedding) > 0, 1, 0).astype(np.uint8)
|
| 69 |
+
|
| 70 |
+
# convert to bytes array
|
| 71 |
+
packed_vector = np.packbits(binary_vector, axis=0)
|
| 72 |
+
return packed_vector.tobytes()
|
| 73 |
+
except Exception as e:
|
| 74 |
+
print(f"Error generating query embeddings: {e}")
|
| 75 |
+
return None
|
| 76 |
+
|
src/rag_pipeline.py
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from langchain_core.messages import HumanMessage
|
| 2 |
+
from langchain.chat_models import init_chat_model
|
| 3 |
+
from .config import PROMPT, MODEL_NAME, TEMPERATURE, MODEL_PROVIDER
|
| 4 |
+
|
| 5 |
+
|
| 6 |
+
llm = init_chat_model(MODEL_NAME, model_provider=MODEL_PROVIDER, temperature=TEMPERATURE)
|
| 7 |
+
|
| 8 |
+
def answer_question(query: str, contexts: list[str]) -> str:
|
| 9 |
+
"""
|
| 10 |
+
Answer a question using the provided context.
|
| 11 |
+
|
| 12 |
+
Args:
|
| 13 |
+
query: The query to answer
|
| 14 |
+
contexts: The context to use for answering the question
|
| 15 |
+
|
| 16 |
+
Returns:
|
| 17 |
+
The answer to the question
|
| 18 |
+
"""
|
| 19 |
+
prompt = PROMPT.format(contexts=contexts, query=query)
|
| 20 |
+
human_message = HumanMessage(content=prompt)
|
| 21 |
+
|
| 22 |
+
response = llm.invoke([human_message])
|
| 23 |
+
return response.content
|
src/vector_store.py
ADDED
|
@@ -0,0 +1,124 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from pymilvus import MilvusClient, DataType
|
| 2 |
+
|
| 3 |
+
|
| 4 |
+
def get_milvus_client(db_path: str) -> MilvusClient:
|
| 5 |
+
"""
|
| 6 |
+
Get a Milvus client.
|
| 7 |
+
|
| 8 |
+
Args:
|
| 9 |
+
db_path: The path to the Milvus database
|
| 10 |
+
|
| 11 |
+
Returns:
|
| 12 |
+
A Milvus client
|
| 13 |
+
"""
|
| 14 |
+
try:
|
| 15 |
+
client = MilvusClient(db_path)
|
| 16 |
+
return client
|
| 17 |
+
|
| 18 |
+
except Exception as e:
|
| 19 |
+
print(f"Error getting Milvus client: {e}")
|
| 20 |
+
return None
|
| 21 |
+
|
| 22 |
+
def create_collection_if_not_exists(client: MilvusClient, collection_name: str, dim: int) -> None:
|
| 23 |
+
"""
|
| 24 |
+
Create a collection in Milvus if it does not exist.
|
| 25 |
+
|
| 26 |
+
Args:
|
| 27 |
+
client: The Milvus client
|
| 28 |
+
collection_name: The name of the collection to create
|
| 29 |
+
dim: The dimension of the binary vector
|
| 30 |
+
"""
|
| 31 |
+
try:
|
| 32 |
+
|
| 33 |
+
# Drop collection if it exists
|
| 34 |
+
if client.has_collection(collection_name):
|
| 35 |
+
print(f"Collection {collection_name} exists, dropping it...")
|
| 36 |
+
client.drop_collection(collection_name)
|
| 37 |
+
|
| 38 |
+
# Initialize client
|
| 39 |
+
schema = client.create_schema(
|
| 40 |
+
auto_id=True,
|
| 41 |
+
enable_dynamic_fields=True,
|
| 42 |
+
)
|
| 43 |
+
# Add primary key field
|
| 44 |
+
schema.add_field(
|
| 45 |
+
field_name="id",
|
| 46 |
+
datatype=DataType.INT64,
|
| 47 |
+
is_primary=True,
|
| 48 |
+
auto_id=True,
|
| 49 |
+
)
|
| 50 |
+
# Add fields to schema
|
| 51 |
+
schema.add_field(
|
| 52 |
+
field_name="context",
|
| 53 |
+
datatype=DataType.VARCHAR,
|
| 54 |
+
max_length=65535, # max length for VARCHAR
|
| 55 |
+
)
|
| 56 |
+
schema.add_field(
|
| 57 |
+
field_name="binary_vector",
|
| 58 |
+
datatype=DataType.BINARY_VECTOR,
|
| 59 |
+
dim=dim,
|
| 60 |
+
)
|
| 61 |
+
# Create index params for binary vector
|
| 62 |
+
index_params = client.prepare_index_params()
|
| 63 |
+
index_params.add_index(
|
| 64 |
+
field_name="binary_vector",
|
| 65 |
+
index_name="binary_vector_index",
|
| 66 |
+
index_type="BIN_FLAT", # Exact search for binary vectors
|
| 67 |
+
metric_type="HAMMING", # Hamming distance for binary vectors
|
| 68 |
+
)
|
| 69 |
+
# Create collection with schema and index
|
| 70 |
+
client.create_collection(
|
| 71 |
+
collection_name=collection_name,
|
| 72 |
+
schema=schema,
|
| 73 |
+
index_params=index_params,
|
| 74 |
+
)
|
| 75 |
+
print(f"Collection {collection_name} created successfully.")
|
| 76 |
+
except Exception as e:
|
| 77 |
+
print(f"Error creating collection: {e}")
|
| 78 |
+
return None
|
| 79 |
+
|
| 80 |
+
def insert_data(client: MilvusClient, collection_name: str, data: list[dict]):
|
| 81 |
+
"""
|
| 82 |
+
Insert data into a collection in Milvus.
|
| 83 |
+
|
| 84 |
+
Args:
|
| 85 |
+
client: The Milvus client
|
| 86 |
+
collection_name: The name of the collection to insert data into
|
| 87 |
+
data: The data to insert
|
| 88 |
+
"""
|
| 89 |
+
try:
|
| 90 |
+
client.insert(
|
| 91 |
+
collection_name=collection_name,
|
| 92 |
+
data=data,
|
| 93 |
+
)
|
| 94 |
+
except Exception as e:
|
| 95 |
+
print(f"Error inserting data: {e}")
|
| 96 |
+
|
| 97 |
+
|
| 98 |
+
def search(client: MilvusClient, collection_name: str, binary_query: bytes, limit: int = 5):
|
| 99 |
+
"""
|
| 100 |
+
Search for data in a collection in Milvus.
|
| 101 |
+
"""
|
| 102 |
+
try:
|
| 103 |
+
# Search for data
|
| 104 |
+
results = client.search(
|
| 105 |
+
collection_name=collection_name,
|
| 106 |
+
data=[binary_query],
|
| 107 |
+
anns_field="binary_vector",
|
| 108 |
+
search_params={
|
| 109 |
+
"metric_type": "HAMMING",
|
| 110 |
+
},
|
| 111 |
+
output_fields=["context"],
|
| 112 |
+
limit=limit,
|
| 113 |
+
)
|
| 114 |
+
|
| 115 |
+
if not results:
|
| 116 |
+
print("No search results found")
|
| 117 |
+
return []
|
| 118 |
+
|
| 119 |
+
contexts = [res.entity.context for res in results[0]]
|
| 120 |
+
return contexts
|
| 121 |
+
|
| 122 |
+
except Exception as e:
|
| 123 |
+
print(f"Error searching for data: {e}")
|
| 124 |
+
return []
|
uv.lock
CHANGED
|
@@ -6,6 +6,15 @@ resolution-markers = [
|
|
| 6 |
"python_full_version < '3.13'",
|
| 7 |
]
|
| 8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9 |
[[package]]
|
| 10 |
name = "aiohappyeyeballs"
|
| 11 |
version = "2.6.1"
|
|
@@ -123,6 +132,62 @@ wheels = [
|
|
| 123 |
{ url = "https://files.pythonhosted.org/packages/77/06/bb80f5f86020c4551da315d78b3ab75e8228f89f0162f2c3a819e407941a/attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3", size = 63815, upload-time = "2025-03-13T11:10:21.14Z" },
|
| 124 |
]
|
| 125 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 126 |
[[package]]
|
| 127 |
name = "banks"
|
| 128 |
version = "2.2.0"
|
|
@@ -176,6 +241,44 @@ wheels = [
|
|
| 176 |
{ url = "https://files.pythonhosted.org/packages/09/71/54e999902aed72baf26bca0d50781b01838251a462612966e9fc4891eadd/black-25.1.0-py3-none-any.whl", hash = "sha256:95e8176dae143ba9097f351d174fdaf0ccd29efb414b362ae3fd72bf0f710717", size = 207646, upload-time = "2025-01-29T04:15:38.082Z" },
|
| 177 |
]
|
| 178 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 179 |
[[package]]
|
| 180 |
name = "certifi"
|
| 181 |
version = "2025.8.3"
|
|
@@ -326,6 +429,15 @@ wheels = [
|
|
| 326 |
{ url = "https://files.pythonhosted.org/packages/12/b3/231ffd4ab1fc9d679809f356cebee130ac7daa00d6d6f3206dd4fd137e9e/distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2", size = 20277, upload-time = "2023-12-24T09:54:30.421Z" },
|
| 327 |
]
|
| 328 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 329 |
[[package]]
|
| 330 |
name = "dotenv"
|
| 331 |
version = "0.9.9"
|
|
@@ -337,6 +449,29 @@ wheels = [
|
|
| 337 |
{ url = "https://files.pythonhosted.org/packages/b2/b7/545d2c10c1fc15e48653c91efde329a790f2eecfbbf2bd16003b5db2bab0/dotenv-0.9.9-py2.py3-none-any.whl", hash = "sha256:29cf74a087b31dafdb5a446b6d7e11cbce8ed2741540e2339c69fbef92c94ce9", size = 1892, upload-time = "2025-02-19T22:15:01.647Z" },
|
| 338 |
]
|
| 339 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 340 |
[[package]]
|
| 341 |
name = "filelock"
|
| 342 |
version = "3.18.0"
|
|
@@ -424,6 +559,64 @@ wheels = [
|
|
| 424 |
{ url = "https://files.pythonhosted.org/packages/2f/e0/014d5d9d7a4564cf1c40b5039bc882db69fd881111e03ab3657ac0b218e2/fsspec-2025.7.0-py3-none-any.whl", hash = "sha256:8b012e39f63c7d5f10474de957f3ab793b47b45ae7d39f2fb735f8bbe25c0e21", size = 199597, upload-time = "2025-07-15T16:05:19.529Z" },
|
| 425 |
]
|
| 426 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 427 |
[[package]]
|
| 428 |
name = "greenlet"
|
| 429 |
version = "3.2.3"
|
|
@@ -469,6 +662,15 @@ wheels = [
|
|
| 469 |
{ url = "https://files.pythonhosted.org/packages/e6/65/7b3fcef8c9fb6d1023484d9caf87e78450a5c9cd1e191ce9632990b65284/griffe-1.9.0-py3-none-any.whl", hash = "sha256:bcf90ee3ad42bbae70a2a490c782fc8e443de9b84aa089d857c278a4e23215fc", size = 137060, upload-time = "2025-07-28T17:45:36.973Z" },
|
| 470 |
]
|
| 471 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 472 |
[[package]]
|
| 473 |
name = "grpcio"
|
| 474 |
version = "1.67.1"
|
|
@@ -1021,6 +1223,18 @@ version = "0.4.9.6"
|
|
| 1021 |
source = { registry = "https://pypi.org/simple" }
|
| 1022 |
sdist = { url = "https://files.pythonhosted.org/packages/93/4b/979db9e44be09f71e85c9c8cfc42f258adfb7d93ce01deed2788b2948919/logging-0.4.9.6.tar.gz", hash = "sha256:26f6b50773f085042d301085bd1bf5d9f3735704db9f37c1ce6d8b85c38f2417", size = 96029, upload-time = "2013-06-04T23:43:22.086Z" }
|
| 1023 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1024 |
[[package]]
|
| 1025 |
name = "markupsafe"
|
| 1026 |
version = "3.0.2"
|
|
@@ -1071,6 +1285,15 @@ wheels = [
|
|
| 1071 |
{ url = "https://files.pythonhosted.org/packages/34/75/51952c7b2d3873b44a0028b1bd26a25078c18f92f256608e8d1dc61b39fd/marshmallow-3.26.1-py3-none-any.whl", hash = "sha256:3350409f20a70a7e4e11a27661187b77cdcaeb20abca41c1454fe33636bea09c", size = 50878, upload-time = "2025-02-03T15:32:22.295Z" },
|
| 1072 |
]
|
| 1073 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1074 |
[[package]]
|
| 1075 |
name = "milvus-lite"
|
| 1076 |
version = "2.5.1"
|
|
@@ -1741,6 +1964,24 @@ wheels = [
|
|
| 1741 |
{ url = "https://files.pythonhosted.org/packages/58/f0/427018098906416f580e3cf1366d3b1abfb408a0652e9f31600c24a1903c/pydantic_settings-2.10.1-py3-none-any.whl", hash = "sha256:a60952460b99cf661dc25c29c0ef171721f98bfcb52ef8d9ea4c943d7c8cc796", size = 45235, upload-time = "2025-06-24T13:26:45.485Z" },
|
| 1742 |
]
|
| 1743 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1744 |
[[package]]
|
| 1745 |
name = "pymilvus"
|
| 1746 |
version = "2.5.14"
|
|
@@ -1789,6 +2030,15 @@ wheels = [
|
|
| 1789 |
{ url = "https://files.pythonhosted.org/packages/5f/ed/539768cf28c661b5b068d66d96a2f155c4971a5d55684a514c1a0e0dec2f/python_dotenv-1.1.1-py3-none-any.whl", hash = "sha256:31f23644fe2602f88ff55e1f5c79ba497e01224ee7737937930c448e4d0e24dc", size = 20556, upload-time = "2025-06-24T04:21:06.073Z" },
|
| 1790 |
]
|
| 1791 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1792 |
[[package]]
|
| 1793 |
name = "pytz"
|
| 1794 |
version = "2025.2"
|
|
@@ -1830,7 +2080,9 @@ version = "0.1.0"
|
|
| 1830 |
source = { virtual = "." }
|
| 1831 |
dependencies = [
|
| 1832 |
{ name = "black" },
|
|
|
|
| 1833 |
{ name = "dotenv" },
|
|
|
|
| 1834 |
{ name = "isort" },
|
| 1835 |
{ name = "langchain" },
|
| 1836 |
{ name = "langchain-community" },
|
|
@@ -1845,7 +2097,9 @@ dependencies = [
|
|
| 1845 |
[package.metadata]
|
| 1846 |
requires-dist = [
|
| 1847 |
{ name = "black", specifier = ">=25.1.0" },
|
|
|
|
| 1848 |
{ name = "dotenv", specifier = ">=0.9.9" },
|
|
|
|
| 1849 |
{ name = "isort", specifier = ">=6.0.1" },
|
| 1850 |
{ name = "langchain", specifier = ">=0.3.27" },
|
| 1851 |
{ name = "langchain-community", specifier = ">=0.3.27" },
|
|
@@ -1934,6 +2188,56 @@ wheels = [
|
|
| 1934 |
{ url = "https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06", size = 54481, upload-time = "2023-05-01T04:11:28.427Z" },
|
| 1935 |
]
|
| 1936 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1937 |
[[package]]
|
| 1938 |
name = "safetensors"
|
| 1939 |
version = "0.5.3"
|
|
@@ -2041,6 +2345,15 @@ wheels = [
|
|
| 2041 |
{ url = "https://files.pythonhosted.org/packages/6e/6c/a76329897a7cae4937d403e623aa6aaea616a0bb5b36588f0b9d1c9a3739/scipy-1.16.1-cp314-cp314t-win_amd64.whl", hash = "sha256:c0c804d60492a0aad7f5b2bb1862f4548b990049e27e828391ff2bf6f7199998", size = 39427705, upload-time = "2025-07-27T16:31:53.96Z" },
|
| 2042 |
]
|
| 2043 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2044 |
[[package]]
|
| 2045 |
name = "sentence-transformers"
|
| 2046 |
version = "5.0.0"
|
|
@@ -2069,6 +2382,15 @@ wheels = [
|
|
| 2069 |
{ url = "https://files.pythonhosted.org/packages/a3/dc/17031897dae0efacfea57dfd3a82fdd2a2aeb58e0ff71b77b87e44edc772/setuptools-80.9.0-py3-none-any.whl", hash = "sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922", size = 1201486, upload-time = "2025-05-27T00:56:49.664Z" },
|
| 2070 |
]
|
| 2071 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2072 |
[[package]]
|
| 2073 |
name = "six"
|
| 2074 |
version = "1.17.0"
|
|
@@ -2130,6 +2452,19 @@ asyncio = [
|
|
| 2130 |
{ name = "greenlet" },
|
| 2131 |
]
|
| 2132 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2133 |
[[package]]
|
| 2134 |
name = "striprtf"
|
| 2135 |
version = "0.0.26"
|
|
@@ -2218,6 +2553,15 @@ wheels = [
|
|
| 2218 |
{ url = "https://files.pythonhosted.org/packages/41/f2/fd673d979185f5dcbac4be7d09461cbb99751554ffb6718d0013af8604cb/tokenizers-0.21.4-cp39-abi3-win_amd64.whl", hash = "sha256:475d807a5c3eb72c59ad9b5fcdb254f6e17f53dfcbb9903233b0dfa9c943b597", size = 2507568, upload-time = "2025-07-28T15:48:55.456Z" },
|
| 2219 |
]
|
| 2220 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2221 |
[[package]]
|
| 2222 |
name = "torch"
|
| 2223 |
version = "2.7.1"
|
|
@@ -2307,6 +2651,21 @@ wheels = [
|
|
| 2307 |
{ url = "https://files.pythonhosted.org/packages/28/71/bd20ffcb7a64c753dc2463489a61bf69d531f308e390ad06390268c4ea04/triton-3.3.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a3198adb9d78b77818a5388bff89fa72ff36f9da0bc689db2f0a651a67ce6a42", size = 155735832, upload-time = "2025-05-29T23:40:10.522Z" },
|
| 2308 |
]
|
| 2309 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2310 |
[[package]]
|
| 2311 |
name = "typing-extensions"
|
| 2312 |
version = "4.14.1"
|
|
@@ -2387,6 +2746,50 @@ wheels = [
|
|
| 2387 |
{ url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795, upload-time = "2025-06-18T14:07:40.39Z" },
|
| 2388 |
]
|
| 2389 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2390 |
[[package]]
|
| 2391 |
name = "wrapt"
|
| 2392 |
version = "1.17.2"
|
|
|
|
| 6 |
"python_full_version < '3.13'",
|
| 7 |
]
|
| 8 |
|
| 9 |
+
[[package]]
|
| 10 |
+
name = "aiofiles"
|
| 11 |
+
version = "24.1.0"
|
| 12 |
+
source = { registry = "https://pypi.org/simple" }
|
| 13 |
+
sdist = { url = "https://files.pythonhosted.org/packages/0b/03/a88171e277e8caa88a4c77808c20ebb04ba74cc4681bf1e9416c862de237/aiofiles-24.1.0.tar.gz", hash = "sha256:22a075c9e5a3810f0c2e48f3008c94d68c65d763b9b03857924c99e57355166c", size = 30247, upload-time = "2024-06-24T11:02:03.584Z" }
|
| 14 |
+
wheels = [
|
| 15 |
+
{ url = "https://files.pythonhosted.org/packages/a5/45/30bb92d442636f570cb5651bc661f52b610e2eec3f891a5dc3a4c3667db0/aiofiles-24.1.0-py3-none-any.whl", hash = "sha256:b4ec55f4195e3eb5d7abd1bf7e061763e864dd4954231fb8539a0ef8bb8260e5", size = 15896, upload-time = "2024-06-24T11:02:01.529Z" },
|
| 16 |
+
]
|
| 17 |
+
|
| 18 |
[[package]]
|
| 19 |
name = "aiohappyeyeballs"
|
| 20 |
version = "2.6.1"
|
|
|
|
| 132 |
{ url = "https://files.pythonhosted.org/packages/77/06/bb80f5f86020c4551da315d78b3ab75e8228f89f0162f2c3a819e407941a/attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3", size = 63815, upload-time = "2025-03-13T11:10:21.14Z" },
|
| 133 |
]
|
| 134 |
|
| 135 |
+
[[package]]
|
| 136 |
+
name = "audioop-lts"
|
| 137 |
+
version = "0.2.2"
|
| 138 |
+
source = { registry = "https://pypi.org/simple" }
|
| 139 |
+
sdist = { url = "https://files.pythonhosted.org/packages/38/53/946db57842a50b2da2e0c1e34bd37f36f5aadba1a929a3971c5d7841dbca/audioop_lts-0.2.2.tar.gz", hash = "sha256:64d0c62d88e67b98a1a5e71987b7aa7b5bcffc7dcee65b635823dbdd0a8dbbd0", size = 30686, upload-time = "2025-08-05T16:43:17.409Z" }
|
| 140 |
+
wheels = [
|
| 141 |
+
{ url = "https://files.pythonhosted.org/packages/de/d4/94d277ca941de5a507b07f0b592f199c22454eeaec8f008a286b3fbbacd6/audioop_lts-0.2.2-cp313-abi3-macosx_10_13_universal2.whl", hash = "sha256:fd3d4602dc64914d462924a08c1a9816435a2155d74f325853c1f1ac3b2d9800", size = 46523, upload-time = "2025-08-05T16:42:20.836Z" },
|
| 142 |
+
{ url = "https://files.pythonhosted.org/packages/f8/5a/656d1c2da4b555920ce4177167bfeb8623d98765594af59702c8873f60ec/audioop_lts-0.2.2-cp313-abi3-macosx_10_13_x86_64.whl", hash = "sha256:550c114a8df0aafe9a05442a1162dfc8fec37e9af1d625ae6060fed6e756f303", size = 27455, upload-time = "2025-08-05T16:42:22.283Z" },
|
| 143 |
+
{ url = "https://files.pythonhosted.org/packages/1b/83/ea581e364ce7b0d41456fb79d6ee0ad482beda61faf0cab20cbd4c63a541/audioop_lts-0.2.2-cp313-abi3-macosx_11_0_arm64.whl", hash = "sha256:9a13dc409f2564de15dd68be65b462ba0dde01b19663720c68c1140c782d1d75", size = 26997, upload-time = "2025-08-05T16:42:23.849Z" },
|
| 144 |
+
{ url = "https://files.pythonhosted.org/packages/b8/3b/e8964210b5e216e5041593b7d33e97ee65967f17c282e8510d19c666dab4/audioop_lts-0.2.2-cp313-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:51c916108c56aa6e426ce611946f901badac950ee2ddaf302b7ed35d9958970d", size = 85844, upload-time = "2025-08-05T16:42:25.208Z" },
|
| 145 |
+
{ url = "https://files.pythonhosted.org/packages/c7/2e/0a1c52faf10d51def20531a59ce4c706cb7952323b11709e10de324d6493/audioop_lts-0.2.2-cp313-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:47eba38322370347b1c47024defbd36374a211e8dd5b0dcbce7b34fdb6f8847b", size = 85056, upload-time = "2025-08-05T16:42:26.559Z" },
|
| 146 |
+
{ url = "https://files.pythonhosted.org/packages/75/e8/cd95eef479656cb75ab05dfece8c1f8c395d17a7c651d88f8e6e291a63ab/audioop_lts-0.2.2-cp313-abi3-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ba7c3a7e5f23e215cb271516197030c32aef2e754252c4c70a50aaff7031a2c8", size = 93892, upload-time = "2025-08-05T16:42:27.902Z" },
|
| 147 |
+
{ url = "https://files.pythonhosted.org/packages/5c/1e/a0c42570b74f83efa5cca34905b3eef03f7ab09fe5637015df538a7f3345/audioop_lts-0.2.2-cp313-abi3-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:def246fe9e180626731b26e89816e79aae2276f825420a07b4a647abaa84becc", size = 96660, upload-time = "2025-08-05T16:42:28.9Z" },
|
| 148 |
+
{ url = "https://files.pythonhosted.org/packages/50/d5/8a0ae607ca07dbb34027bac8db805498ee7bfecc05fd2c148cc1ed7646e7/audioop_lts-0.2.2-cp313-abi3-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e160bf9df356d841bb6c180eeeea1834085464626dc1b68fa4e1d59070affdc3", size = 79143, upload-time = "2025-08-05T16:42:29.929Z" },
|
| 149 |
+
{ url = "https://files.pythonhosted.org/packages/12/17/0d28c46179e7910bfb0bb62760ccb33edb5de973052cb2230b662c14ca2e/audioop_lts-0.2.2-cp313-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:4b4cd51a57b698b2d06cb9993b7ac8dfe89a3b2878e96bc7948e9f19ff51dba6", size = 84313, upload-time = "2025-08-05T16:42:30.949Z" },
|
| 150 |
+
{ url = "https://files.pythonhosted.org/packages/84/ba/bd5d3806641564f2024e97ca98ea8f8811d4e01d9b9f9831474bc9e14f9e/audioop_lts-0.2.2-cp313-abi3-musllinux_1_2_ppc64le.whl", hash = "sha256:4a53aa7c16a60a6857e6b0b165261436396ef7293f8b5c9c828a3a203147ed4a", size = 93044, upload-time = "2025-08-05T16:42:31.959Z" },
|
| 151 |
+
{ url = "https://files.pythonhosted.org/packages/f9/5e/435ce8d5642f1f7679540d1e73c1c42d933331c0976eb397d1717d7f01a3/audioop_lts-0.2.2-cp313-abi3-musllinux_1_2_riscv64.whl", hash = "sha256:3fc38008969796f0f689f1453722a0f463da1b8a6fbee11987830bfbb664f623", size = 78766, upload-time = "2025-08-05T16:42:33.302Z" },
|
| 152 |
+
{ url = "https://files.pythonhosted.org/packages/ae/3b/b909e76b606cbfd53875693ec8c156e93e15a1366a012f0b7e4fb52d3c34/audioop_lts-0.2.2-cp313-abi3-musllinux_1_2_s390x.whl", hash = "sha256:15ab25dd3e620790f40e9ead897f91e79c0d3ce65fe193c8ed6c26cffdd24be7", size = 87640, upload-time = "2025-08-05T16:42:34.854Z" },
|
| 153 |
+
{ url = "https://files.pythonhosted.org/packages/30/e7/8f1603b4572d79b775f2140d7952f200f5e6c62904585d08a01f0a70393a/audioop_lts-0.2.2-cp313-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:03f061a1915538fd96272bac9551841859dbb2e3bf73ebe4a23ef043766f5449", size = 86052, upload-time = "2025-08-05T16:42:35.839Z" },
|
| 154 |
+
{ url = "https://files.pythonhosted.org/packages/b5/96/c37846df657ccdda62ba1ae2b6534fa90e2e1b1742ca8dcf8ebd38c53801/audioop_lts-0.2.2-cp313-abi3-win32.whl", hash = "sha256:3bcddaaf6cc5935a300a8387c99f7a7fbbe212a11568ec6cf6e4bc458c048636", size = 26185, upload-time = "2025-08-05T16:42:37.04Z" },
|
| 155 |
+
{ url = "https://files.pythonhosted.org/packages/34/a5/9d78fdb5b844a83da8a71226c7bdae7cc638861085fff7a1d707cb4823fa/audioop_lts-0.2.2-cp313-abi3-win_amd64.whl", hash = "sha256:a2c2a947fae7d1062ef08c4e369e0ba2086049a5e598fda41122535557012e9e", size = 30503, upload-time = "2025-08-05T16:42:38.427Z" },
|
| 156 |
+
{ url = "https://files.pythonhosted.org/packages/34/25/20d8fde083123e90c61b51afb547bb0ea7e77bab50d98c0ab243d02a0e43/audioop_lts-0.2.2-cp313-abi3-win_arm64.whl", hash = "sha256:5f93a5db13927a37d2d09637ccca4b2b6b48c19cd9eda7b17a2e9f77edee6a6f", size = 24173, upload-time = "2025-08-05T16:42:39.704Z" },
|
| 157 |
+
{ url = "https://files.pythonhosted.org/packages/58/a7/0a764f77b5c4ac58dc13c01a580f5d32ae8c74c92020b961556a43e26d02/audioop_lts-0.2.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:73f80bf4cd5d2ca7814da30a120de1f9408ee0619cc75da87d0641273d202a09", size = 47096, upload-time = "2025-08-05T16:42:40.684Z" },
|
| 158 |
+
{ url = "https://files.pythonhosted.org/packages/aa/ed/ebebedde1a18848b085ad0fa54b66ceb95f1f94a3fc04f1cd1b5ccb0ed42/audioop_lts-0.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:106753a83a25ee4d6f473f2be6b0966fc1c9af7e0017192f5531a3e7463dce58", size = 27748, upload-time = "2025-08-05T16:42:41.992Z" },
|
| 159 |
+
{ url = "https://files.pythonhosted.org/packages/cb/6e/11ca8c21af79f15dbb1c7f8017952ee8c810c438ce4e2b25638dfef2b02c/audioop_lts-0.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:fbdd522624141e40948ab3e8cdae6e04c748d78710e9f0f8d4dae2750831de19", size = 27329, upload-time = "2025-08-05T16:42:42.987Z" },
|
| 160 |
+
{ url = "https://files.pythonhosted.org/packages/84/52/0022f93d56d85eec5da6b9da6a958a1ef09e80c39f2cc0a590c6af81dcbb/audioop_lts-0.2.2-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:143fad0311e8209ece30a8dbddab3b65ab419cbe8c0dde6e8828da25999be911", size = 92407, upload-time = "2025-08-05T16:42:44.336Z" },
|
| 161 |
+
{ url = "https://files.pythonhosted.org/packages/87/1d/48a889855e67be8718adbc7a01f3c01d5743c325453a5e81cf3717664aad/audioop_lts-0.2.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dfbbc74ec68a0fd08cfec1f4b5e8cca3d3cd7de5501b01c4b5d209995033cde9", size = 91811, upload-time = "2025-08-05T16:42:45.325Z" },
|
| 162 |
+
{ url = "https://files.pythonhosted.org/packages/98/a6/94b7213190e8077547ffae75e13ed05edc488653c85aa5c41472c297d295/audioop_lts-0.2.2-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cfcac6aa6f42397471e4943e0feb2244549db5c5d01efcd02725b96af417f3fe", size = 100470, upload-time = "2025-08-05T16:42:46.468Z" },
|
| 163 |
+
{ url = "https://files.pythonhosted.org/packages/e9/e9/78450d7cb921ede0cfc33426d3a8023a3bda755883c95c868ee36db8d48d/audioop_lts-0.2.2-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:752d76472d9804ac60f0078c79cdae8b956f293177acd2316cd1e15149aee132", size = 103878, upload-time = "2025-08-05T16:42:47.576Z" },
|
| 164 |
+
{ url = "https://files.pythonhosted.org/packages/4f/e2/cd5439aad4f3e34ae1ee852025dc6aa8f67a82b97641e390bf7bd9891d3e/audioop_lts-0.2.2-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:83c381767e2cc10e93e40281a04852facc4cd9334550e0f392f72d1c0a9c5753", size = 84867, upload-time = "2025-08-05T16:42:49.003Z" },
|
| 165 |
+
{ url = "https://files.pythonhosted.org/packages/68/4b/9d853e9076c43ebba0d411e8d2aa19061083349ac695a7d082540bad64d0/audioop_lts-0.2.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c0022283e9556e0f3643b7c3c03f05063ca72b3063291834cca43234f20c60bb", size = 90001, upload-time = "2025-08-05T16:42:50.038Z" },
|
| 166 |
+
{ url = "https://files.pythonhosted.org/packages/58/26/4bae7f9d2f116ed5593989d0e521d679b0d583973d203384679323d8fa85/audioop_lts-0.2.2-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:a2d4f1513d63c795e82948e1305f31a6d530626e5f9f2605408b300ae6095093", size = 99046, upload-time = "2025-08-05T16:42:51.111Z" },
|
| 167 |
+
{ url = "https://files.pythonhosted.org/packages/b2/67/a9f4fb3e250dda9e9046f8866e9fa7d52664f8985e445c6b4ad6dfb55641/audioop_lts-0.2.2-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:c9c8e68d8b4a56fda8c025e538e639f8c5953f5073886b596c93ec9b620055e7", size = 84788, upload-time = "2025-08-05T16:42:52.198Z" },
|
| 168 |
+
{ url = "https://files.pythonhosted.org/packages/70/f7/3de86562db0121956148bcb0fe5b506615e3bcf6e63c4357a612b910765a/audioop_lts-0.2.2-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:96f19de485a2925314f5020e85911fb447ff5fbef56e8c7c6927851b95533a1c", size = 94472, upload-time = "2025-08-05T16:42:53.59Z" },
|
| 169 |
+
{ url = "https://files.pythonhosted.org/packages/f1/32/fd772bf9078ae1001207d2df1eef3da05bea611a87dd0e8217989b2848fa/audioop_lts-0.2.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e541c3ef484852ef36545f66209444c48b28661e864ccadb29daddb6a4b8e5f5", size = 92279, upload-time = "2025-08-05T16:42:54.632Z" },
|
| 170 |
+
{ url = "https://files.pythonhosted.org/packages/4f/41/affea7181592ab0ab560044632571a38edaf9130b84928177823fbf3176a/audioop_lts-0.2.2-cp313-cp313t-win32.whl", hash = "sha256:d5e73fa573e273e4f2e5ff96f9043858a5e9311e94ffefd88a3186a910c70917", size = 26568, upload-time = "2025-08-05T16:42:55.627Z" },
|
| 171 |
+
{ url = "https://files.pythonhosted.org/packages/28/2b/0372842877016641db8fc54d5c88596b542eec2f8f6c20a36fb6612bf9ee/audioop_lts-0.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:9191d68659eda01e448188f60364c7763a7ca6653ed3f87ebb165822153a8547", size = 30942, upload-time = "2025-08-05T16:42:56.674Z" },
|
| 172 |
+
{ url = "https://files.pythonhosted.org/packages/ee/ca/baf2b9cc7e96c179bb4a54f30fcd83e6ecb340031bde68f486403f943768/audioop_lts-0.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:c174e322bb5783c099aaf87faeb240c8d210686b04bd61dfd05a8e5a83d88969", size = 24603, upload-time = "2025-08-05T16:42:57.571Z" },
|
| 173 |
+
{ url = "https://files.pythonhosted.org/packages/5c/73/413b5a2804091e2c7d5def1d618e4837f1cb82464e230f827226278556b7/audioop_lts-0.2.2-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:f9ee9b52f5f857fbaf9d605a360884f034c92c1c23021fb90b2e39b8e64bede6", size = 47104, upload-time = "2025-08-05T16:42:58.518Z" },
|
| 174 |
+
{ url = "https://files.pythonhosted.org/packages/ae/8c/daa3308dc6593944410c2c68306a5e217f5c05b70a12e70228e7dd42dc5c/audioop_lts-0.2.2-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:49ee1a41738a23e98d98b937a0638357a2477bc99e61b0f768a8f654f45d9b7a", size = 27754, upload-time = "2025-08-05T16:43:00.132Z" },
|
| 175 |
+
{ url = "https://files.pythonhosted.org/packages/4e/86/c2e0f627168fcf61781a8f72cab06b228fe1da4b9fa4ab39cfb791b5836b/audioop_lts-0.2.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5b00be98ccd0fc123dcfad31d50030d25fcf31488cde9e61692029cd7394733b", size = 27332, upload-time = "2025-08-05T16:43:01.666Z" },
|
| 176 |
+
{ url = "https://files.pythonhosted.org/packages/c7/bd/35dce665255434f54e5307de39e31912a6f902d4572da7c37582809de14f/audioop_lts-0.2.2-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a6d2e0f9f7a69403e388894d4ca5ada5c47230716a03f2847cfc7bd1ecb589d6", size = 92396, upload-time = "2025-08-05T16:43:02.991Z" },
|
| 177 |
+
{ url = "https://files.pythonhosted.org/packages/2d/d2/deeb9f51def1437b3afa35aeb729d577c04bcd89394cb56f9239a9f50b6f/audioop_lts-0.2.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f9b0b8a03ef474f56d1a842af1a2e01398b8f7654009823c6d9e0ecff4d5cfbf", size = 91811, upload-time = "2025-08-05T16:43:04.096Z" },
|
| 178 |
+
{ url = "https://files.pythonhosted.org/packages/76/3b/09f8b35b227cee28cc8231e296a82759ed80c1a08e349811d69773c48426/audioop_lts-0.2.2-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2b267b70747d82125f1a021506565bdc5609a2b24bcb4773c16d79d2bb260bbd", size = 100483, upload-time = "2025-08-05T16:43:05.085Z" },
|
| 179 |
+
{ url = "https://files.pythonhosted.org/packages/0b/15/05b48a935cf3b130c248bfdbdea71ce6437f5394ee8533e0edd7cfd93d5e/audioop_lts-0.2.2-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0337d658f9b81f4cd0fdb1f47635070cc084871a3d4646d9de74fdf4e7c3d24a", size = 103885, upload-time = "2025-08-05T16:43:06.197Z" },
|
| 180 |
+
{ url = "https://files.pythonhosted.org/packages/83/80/186b7fce6d35b68d3d739f228dc31d60b3412105854edb975aa155a58339/audioop_lts-0.2.2-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:167d3b62586faef8b6b2275c3218796b12621a60e43f7e9d5845d627b9c9b80e", size = 84899, upload-time = "2025-08-05T16:43:07.291Z" },
|
| 181 |
+
{ url = "https://files.pythonhosted.org/packages/49/89/c78cc5ac6cb5828f17514fb12966e299c850bc885e80f8ad94e38d450886/audioop_lts-0.2.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:0d9385e96f9f6da847f4d571ce3cb15b5091140edf3db97276872647ce37efd7", size = 89998, upload-time = "2025-08-05T16:43:08.335Z" },
|
| 182 |
+
{ url = "https://files.pythonhosted.org/packages/4c/4b/6401888d0c010e586c2ca50fce4c903d70a6bb55928b16cfbdfd957a13da/audioop_lts-0.2.2-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:48159d96962674eccdca9a3df280e864e8ac75e40a577cc97c5c42667ffabfc5", size = 99046, upload-time = "2025-08-05T16:43:09.367Z" },
|
| 183 |
+
{ url = "https://files.pythonhosted.org/packages/de/f8/c874ca9bb447dae0e2ef2e231f6c4c2b0c39e31ae684d2420b0f9e97ee68/audioop_lts-0.2.2-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:8fefe5868cd082db1186f2837d64cfbfa78b548ea0d0543e9b28935ccce81ce9", size = 84843, upload-time = "2025-08-05T16:43:10.749Z" },
|
| 184 |
+
{ url = "https://files.pythonhosted.org/packages/3e/c0/0323e66f3daebc13fd46b36b30c3be47e3fc4257eae44f1e77eb828c703f/audioop_lts-0.2.2-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:58cf54380c3884fb49fdd37dfb7a772632b6701d28edd3e2904743c5e1773602", size = 94490, upload-time = "2025-08-05T16:43:12.131Z" },
|
| 185 |
+
{ url = "https://files.pythonhosted.org/packages/98/6b/acc7734ac02d95ab791c10c3f17ffa3584ccb9ac5c18fd771c638ed6d1f5/audioop_lts-0.2.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:088327f00488cdeed296edd9215ca159f3a5a5034741465789cad403fcf4bec0", size = 92297, upload-time = "2025-08-05T16:43:13.139Z" },
|
| 186 |
+
{ url = "https://files.pythonhosted.org/packages/13/c3/c3dc3f564ce6877ecd2a05f8d751b9b27a8c320c2533a98b0c86349778d0/audioop_lts-0.2.2-cp314-cp314t-win32.whl", hash = "sha256:068aa17a38b4e0e7de771c62c60bbca2455924b67a8814f3b0dee92b5820c0b3", size = 27331, upload-time = "2025-08-05T16:43:14.19Z" },
|
| 187 |
+
{ url = "https://files.pythonhosted.org/packages/72/bb/b4608537e9ffcb86449091939d52d24a055216a36a8bf66b936af8c3e7ac/audioop_lts-0.2.2-cp314-cp314t-win_amd64.whl", hash = "sha256:a5bf613e96f49712073de86f20dbdd4014ca18efd4d34ed18c75bd808337851b", size = 31697, upload-time = "2025-08-05T16:43:15.193Z" },
|
| 188 |
+
{ url = "https://files.pythonhosted.org/packages/f6/22/91616fe707a5c5510de2cac9b046a30defe7007ba8a0c04f9c08f27df312/audioop_lts-0.2.2-cp314-cp314t-win_arm64.whl", hash = "sha256:b492c3b040153e68b9fdaff5913305aaaba5bb433d8a7f73d5cf6a64ed3cc1dd", size = 25206, upload-time = "2025-08-05T16:43:16.444Z" },
|
| 189 |
+
]
|
| 190 |
+
|
| 191 |
[[package]]
|
| 192 |
name = "banks"
|
| 193 |
version = "2.2.0"
|
|
|
|
| 241 |
{ url = "https://files.pythonhosted.org/packages/09/71/54e999902aed72baf26bca0d50781b01838251a462612966e9fc4891eadd/black-25.1.0-py3-none-any.whl", hash = "sha256:95e8176dae143ba9097f351d174fdaf0ccd29efb414b362ae3fd72bf0f710717", size = 207646, upload-time = "2025-01-29T04:15:38.082Z" },
|
| 242 |
]
|
| 243 |
|
| 244 |
+
[[package]]
|
| 245 |
+
name = "brotli"
|
| 246 |
+
version = "1.1.0"
|
| 247 |
+
source = { registry = "https://pypi.org/simple" }
|
| 248 |
+
sdist = { url = "https://files.pythonhosted.org/packages/2f/c2/f9e977608bdf958650638c3f1e28f85a1b075f075ebbe77db8555463787b/Brotli-1.1.0.tar.gz", hash = "sha256:81de08ac11bcb85841e440c13611c00b67d3bf82698314928d0b676362546724", size = 7372270, upload-time = "2023-09-07T14:05:41.643Z" }
|
| 249 |
+
wheels = [
|
| 250 |
+
{ url = "https://files.pythonhosted.org/packages/5c/d0/5373ae13b93fe00095a58efcbce837fd470ca39f703a235d2a999baadfbc/Brotli-1.1.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:32d95b80260d79926f5fab3c41701dbb818fde1c9da590e77e571eefd14abe28", size = 815693, upload-time = "2024-10-18T12:32:23.824Z" },
|
| 251 |
+
{ url = "https://files.pythonhosted.org/packages/8e/48/f6e1cdf86751300c288c1459724bfa6917a80e30dbfc326f92cea5d3683a/Brotli-1.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b760c65308ff1e462f65d69c12e4ae085cff3b332d894637f6273a12a482d09f", size = 422489, upload-time = "2024-10-18T12:32:25.641Z" },
|
| 252 |
+
{ url = "https://files.pythonhosted.org/packages/06/88/564958cedce636d0f1bed313381dfc4b4e3d3f6015a63dae6146e1b8c65c/Brotli-1.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:316cc9b17edf613ac76b1f1f305d2a748f1b976b033b049a6ecdfd5612c70409", size = 873081, upload-time = "2023-09-07T14:03:57.967Z" },
|
| 253 |
+
{ url = "https://files.pythonhosted.org/packages/58/79/b7026a8bb65da9a6bb7d14329fd2bd48d2b7f86d7329d5cc8ddc6a90526f/Brotli-1.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:caf9ee9a5775f3111642d33b86237b05808dafcd6268faa492250e9b78046eb2", size = 446244, upload-time = "2023-09-07T14:03:59.319Z" },
|
| 254 |
+
{ url = "https://files.pythonhosted.org/packages/e5/18/c18c32ecea41b6c0004e15606e274006366fe19436b6adccc1ae7b2e50c2/Brotli-1.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70051525001750221daa10907c77830bc889cb6d865cc0b813d9db7fefc21451", size = 2906505, upload-time = "2023-09-07T14:04:01.327Z" },
|
| 255 |
+
{ url = "https://files.pythonhosted.org/packages/08/c8/69ec0496b1ada7569b62d85893d928e865df29b90736558d6c98c2031208/Brotli-1.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7f4bf76817c14aa98cc6697ac02f3972cb8c3da93e9ef16b9c66573a68014f91", size = 2944152, upload-time = "2023-09-07T14:04:03.033Z" },
|
| 256 |
+
{ url = "https://files.pythonhosted.org/packages/ab/fb/0517cea182219d6768113a38167ef6d4eb157a033178cc938033a552ed6d/Brotli-1.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0c5516f0aed654134a2fc936325cc2e642f8a0e096d075209672eb321cff408", size = 2919252, upload-time = "2023-09-07T14:04:04.675Z" },
|
| 257 |
+
{ url = "https://files.pythonhosted.org/packages/c7/53/73a3431662e33ae61a5c80b1b9d2d18f58dfa910ae8dd696e57d39f1a2f5/Brotli-1.1.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6c3020404e0b5eefd7c9485ccf8393cfb75ec38ce75586e046573c9dc29967a0", size = 2845955, upload-time = "2023-09-07T14:04:06.585Z" },
|
| 258 |
+
{ url = "https://files.pythonhosted.org/packages/55/ac/bd280708d9c5ebdbf9de01459e625a3e3803cce0784f47d633562cf40e83/Brotli-1.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4ed11165dd45ce798d99a136808a794a748d5dc38511303239d4e2363c0695dc", size = 2914304, upload-time = "2023-09-07T14:04:08.668Z" },
|
| 259 |
+
{ url = "https://files.pythonhosted.org/packages/76/58/5c391b41ecfc4527d2cc3350719b02e87cb424ef8ba2023fb662f9bf743c/Brotli-1.1.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:4093c631e96fdd49e0377a9c167bfd75b6d0bad2ace734c6eb20b348bc3ea180", size = 2814452, upload-time = "2023-09-07T14:04:10.736Z" },
|
| 260 |
+
{ url = "https://files.pythonhosted.org/packages/c7/4e/91b8256dfe99c407f174924b65a01f5305e303f486cc7a2e8a5d43c8bec3/Brotli-1.1.0-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:7e4c4629ddad63006efa0ef968c8e4751c5868ff0b1c5c40f76524e894c50248", size = 2938751, upload-time = "2023-09-07T14:04:12.875Z" },
|
| 261 |
+
{ url = "https://files.pythonhosted.org/packages/5a/a6/e2a39a5d3b412938362bbbeba5af904092bf3f95b867b4a3eb856104074e/Brotli-1.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:861bf317735688269936f755fa136a99d1ed526883859f86e41a5d43c61d8966", size = 2933757, upload-time = "2023-09-07T14:04:14.551Z" },
|
| 262 |
+
{ url = "https://files.pythonhosted.org/packages/13/f0/358354786280a509482e0e77c1a5459e439766597d280f28cb097642fc26/Brotli-1.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:87a3044c3a35055527ac75e419dfa9f4f3667a1e887ee80360589eb8c90aabb9", size = 2936146, upload-time = "2024-10-18T12:32:27.257Z" },
|
| 263 |
+
{ url = "https://files.pythonhosted.org/packages/80/f7/daf538c1060d3a88266b80ecc1d1c98b79553b3f117a485653f17070ea2a/Brotli-1.1.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:c5529b34c1c9d937168297f2c1fde7ebe9ebdd5e121297ff9c043bdb2ae3d6fb", size = 2848055, upload-time = "2024-10-18T12:32:29.376Z" },
|
| 264 |
+
{ url = "https://files.pythonhosted.org/packages/ad/cf/0eaa0585c4077d3c2d1edf322d8e97aabf317941d3a72d7b3ad8bce004b0/Brotli-1.1.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:ca63e1890ede90b2e4454f9a65135a4d387a4585ff8282bb72964fab893f2111", size = 3035102, upload-time = "2024-10-18T12:32:31.371Z" },
|
| 265 |
+
{ url = "https://files.pythonhosted.org/packages/d8/63/1c1585b2aa554fe6dbce30f0c18bdbc877fa9a1bf5ff17677d9cca0ac122/Brotli-1.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e79e6520141d792237c70bcd7a3b122d00f2613769ae0cb61c52e89fd3443839", size = 2930029, upload-time = "2024-10-18T12:32:33.293Z" },
|
| 266 |
+
{ url = "https://files.pythonhosted.org/packages/5f/3b/4e3fd1893eb3bbfef8e5a80d4508bec17a57bb92d586c85c12d28666bb13/Brotli-1.1.0-cp312-cp312-win32.whl", hash = "sha256:5f4d5ea15c9382135076d2fb28dde923352fe02951e66935a9efaac8f10e81b0", size = 333276, upload-time = "2023-09-07T14:04:16.49Z" },
|
| 267 |
+
{ url = "https://files.pythonhosted.org/packages/3d/d5/942051b45a9e883b5b6e98c041698b1eb2012d25e5948c58d6bf85b1bb43/Brotli-1.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:906bc3a79de8c4ae5b86d3d75a8b77e44404b0f4261714306e3ad248d8ab0951", size = 357255, upload-time = "2023-09-07T14:04:17.83Z" },
|
| 268 |
+
{ url = "https://files.pythonhosted.org/packages/0a/9f/fb37bb8ffc52a8da37b1c03c459a8cd55df7a57bdccd8831d500e994a0ca/Brotli-1.1.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8bf32b98b75c13ec7cf774164172683d6e7891088f6316e54425fde1efc276d5", size = 815681, upload-time = "2024-10-18T12:32:34.942Z" },
|
| 269 |
+
{ url = "https://files.pythonhosted.org/packages/06/b3/dbd332a988586fefb0aa49c779f59f47cae76855c2d00f450364bb574cac/Brotli-1.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7bc37c4d6b87fb1017ea28c9508b36bbcb0c3d18b4260fcdf08b200c74a6aee8", size = 422475, upload-time = "2024-10-18T12:32:36.485Z" },
|
| 270 |
+
{ url = "https://files.pythonhosted.org/packages/bb/80/6aaddc2f63dbcf2d93c2d204e49c11a9ec93a8c7c63261e2b4bd35198283/Brotli-1.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c0ef38c7a7014ffac184db9e04debe495d317cc9c6fb10071f7fefd93100a4f", size = 2906173, upload-time = "2024-10-18T12:32:37.978Z" },
|
| 271 |
+
{ url = "https://files.pythonhosted.org/packages/ea/1d/e6ca79c96ff5b641df6097d299347507d39a9604bde8915e76bf026d6c77/Brotli-1.1.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91d7cc2a76b5567591d12c01f019dd7afce6ba8cba6571187e21e2fc418ae648", size = 2943803, upload-time = "2024-10-18T12:32:39.606Z" },
|
| 272 |
+
{ url = "https://files.pythonhosted.org/packages/ac/a3/d98d2472e0130b7dd3acdbb7f390d478123dbf62b7d32bda5c830a96116d/Brotli-1.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a93dde851926f4f2678e704fadeb39e16c35d8baebd5252c9fd94ce8ce68c4a0", size = 2918946, upload-time = "2024-10-18T12:32:41.679Z" },
|
| 273 |
+
{ url = "https://files.pythonhosted.org/packages/c4/a5/c69e6d272aee3e1423ed005d8915a7eaa0384c7de503da987f2d224d0721/Brotli-1.1.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f0db75f47be8b8abc8d9e31bc7aad0547ca26f24a54e6fd10231d623f183d089", size = 2845707, upload-time = "2024-10-18T12:32:43.478Z" },
|
| 274 |
+
{ url = "https://files.pythonhosted.org/packages/58/9f/4149d38b52725afa39067350696c09526de0125ebfbaab5acc5af28b42ea/Brotli-1.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6967ced6730aed543b8673008b5a391c3b1076d834ca438bbd70635c73775368", size = 2936231, upload-time = "2024-10-18T12:32:45.224Z" },
|
| 275 |
+
{ url = "https://files.pythonhosted.org/packages/5a/5a/145de884285611838a16bebfdb060c231c52b8f84dfbe52b852a15780386/Brotli-1.1.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:7eedaa5d036d9336c95915035fb57422054014ebdeb6f3b42eac809928e40d0c", size = 2848157, upload-time = "2024-10-18T12:32:46.894Z" },
|
| 276 |
+
{ url = "https://files.pythonhosted.org/packages/50/ae/408b6bfb8525dadebd3b3dd5b19d631da4f7d46420321db44cd99dcf2f2c/Brotli-1.1.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:d487f5432bf35b60ed625d7e1b448e2dc855422e87469e3f450aa5552b0eb284", size = 3035122, upload-time = "2024-10-18T12:32:48.844Z" },
|
| 277 |
+
{ url = "https://files.pythonhosted.org/packages/af/85/a94e5cfaa0ca449d8f91c3d6f78313ebf919a0dbd55a100c711c6e9655bc/Brotli-1.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:832436e59afb93e1836081a20f324cb185836c617659b07b129141a8426973c7", size = 2930206, upload-time = "2024-10-18T12:32:51.198Z" },
|
| 278 |
+
{ url = "https://files.pythonhosted.org/packages/c2/f0/a61d9262cd01351df22e57ad7c34f66794709acab13f34be2675f45bf89d/Brotli-1.1.0-cp313-cp313-win32.whl", hash = "sha256:43395e90523f9c23a3d5bdf004733246fba087f2948f87ab28015f12359ca6a0", size = 333804, upload-time = "2024-10-18T12:32:52.661Z" },
|
| 279 |
+
{ url = "https://files.pythonhosted.org/packages/7e/c1/ec214e9c94000d1c1974ec67ced1c970c148aa6b8d8373066123fc3dbf06/Brotli-1.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:9011560a466d2eb3f5a6e4929cf4a09be405c64154e12df0dd72713f6500e32b", size = 358517, upload-time = "2024-10-18T12:32:54.066Z" },
|
| 280 |
+
]
|
| 281 |
+
|
| 282 |
[[package]]
|
| 283 |
name = "certifi"
|
| 284 |
version = "2025.8.3"
|
|
|
|
| 429 |
{ url = "https://files.pythonhosted.org/packages/12/b3/231ffd4ab1fc9d679809f356cebee130ac7daa00d6d6f3206dd4fd137e9e/distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2", size = 20277, upload-time = "2023-12-24T09:54:30.421Z" },
|
| 430 |
]
|
| 431 |
|
| 432 |
+
[[package]]
|
| 433 |
+
name = "docx2txt"
|
| 434 |
+
version = "0.9"
|
| 435 |
+
source = { registry = "https://pypi.org/simple" }
|
| 436 |
+
sdist = { url = "https://files.pythonhosted.org/packages/ea/07/4486a038624e885e227fe79111914c01f55aa70a51920ff1a7f2bd216d10/docx2txt-0.9.tar.gz", hash = "sha256:18013f6229b14909028b19aa7bf4f8f3d6e4632d7b089ab29f7f0a4d1f660e28", size = 3613, upload-time = "2025-03-24T20:59:25.21Z" }
|
| 437 |
+
wheels = [
|
| 438 |
+
{ url = "https://files.pythonhosted.org/packages/d6/51/756e71bec48ece0ecc2a10e921ef2756e197dcb7e478f2b43673b6683902/docx2txt-0.9-py3-none-any.whl", hash = "sha256:e3718c0653fd6f2fcf4b51b02a61452ad1c38a4c163bcf0a6fd9486cd38f529a", size = 4025, upload-time = "2025-03-24T20:59:24.394Z" },
|
| 439 |
+
]
|
| 440 |
+
|
| 441 |
[[package]]
|
| 442 |
name = "dotenv"
|
| 443 |
version = "0.9.9"
|
|
|
|
| 449 |
{ url = "https://files.pythonhosted.org/packages/b2/b7/545d2c10c1fc15e48653c91efde329a790f2eecfbbf2bd16003b5db2bab0/dotenv-0.9.9-py2.py3-none-any.whl", hash = "sha256:29cf74a087b31dafdb5a446b6d7e11cbce8ed2741540e2339c69fbef92c94ce9", size = 1892, upload-time = "2025-02-19T22:15:01.647Z" },
|
| 450 |
]
|
| 451 |
|
| 452 |
+
[[package]]
|
| 453 |
+
name = "fastapi"
|
| 454 |
+
version = "0.116.1"
|
| 455 |
+
source = { registry = "https://pypi.org/simple" }
|
| 456 |
+
dependencies = [
|
| 457 |
+
{ name = "pydantic" },
|
| 458 |
+
{ name = "starlette" },
|
| 459 |
+
{ name = "typing-extensions" },
|
| 460 |
+
]
|
| 461 |
+
sdist = { url = "https://files.pythonhosted.org/packages/78/d7/6c8b3bfe33eeffa208183ec037fee0cce9f7f024089ab1c5d12ef04bd27c/fastapi-0.116.1.tar.gz", hash = "sha256:ed52cbf946abfd70c5a0dccb24673f0670deeb517a88b3544d03c2a6bf283143", size = 296485, upload-time = "2025-07-11T16:22:32.057Z" }
|
| 462 |
+
wheels = [
|
| 463 |
+
{ url = "https://files.pythonhosted.org/packages/e5/47/d63c60f59a59467fda0f93f46335c9d18526d7071f025cb5b89d5353ea42/fastapi-0.116.1-py3-none-any.whl", hash = "sha256:c46ac7c312df840f0c9e220f7964bada936781bc4e2e6eb71f1c4d7553786565", size = 95631, upload-time = "2025-07-11T16:22:30.485Z" },
|
| 464 |
+
]
|
| 465 |
+
|
| 466 |
+
[[package]]
|
| 467 |
+
name = "ffmpy"
|
| 468 |
+
version = "0.6.1"
|
| 469 |
+
source = { registry = "https://pypi.org/simple" }
|
| 470 |
+
sdist = { url = "https://files.pythonhosted.org/packages/0b/f6/67cadf1686030be511004e75fa1c1397f8f193cd4d15d4788edef7c28621/ffmpy-0.6.1.tar.gz", hash = "sha256:b5830fd05f72bace05b8fb28724d54a7a63c5119d7f74ca36a75df33f749142d", size = 4958, upload-time = "2025-07-22T12:08:22.276Z" }
|
| 471 |
+
wheels = [
|
| 472 |
+
{ url = "https://files.pythonhosted.org/packages/74/d4/1806897b31c480efc4e97c22506ac46c716084f573aef780bb7fb7a16e8a/ffmpy-0.6.1-py3-none-any.whl", hash = "sha256:69a37e2d7d6feb840e233d5640f3499a8b0a8657336774c86e4c52a3219222d4", size = 5512, upload-time = "2025-07-22T12:08:21.176Z" },
|
| 473 |
+
]
|
| 474 |
+
|
| 475 |
[[package]]
|
| 476 |
name = "filelock"
|
| 477 |
version = "3.18.0"
|
|
|
|
| 559 |
{ url = "https://files.pythonhosted.org/packages/2f/e0/014d5d9d7a4564cf1c40b5039bc882db69fd881111e03ab3657ac0b218e2/fsspec-2025.7.0-py3-none-any.whl", hash = "sha256:8b012e39f63c7d5f10474de957f3ab793b47b45ae7d39f2fb735f8bbe25c0e21", size = 199597, upload-time = "2025-07-15T16:05:19.529Z" },
|
| 560 |
]
|
| 561 |
|
| 562 |
+
[[package]]
|
| 563 |
+
name = "gradio"
|
| 564 |
+
version = "5.41.0"
|
| 565 |
+
source = { registry = "https://pypi.org/simple" }
|
| 566 |
+
dependencies = [
|
| 567 |
+
{ name = "aiofiles" },
|
| 568 |
+
{ name = "anyio" },
|
| 569 |
+
{ name = "audioop-lts", marker = "python_full_version >= '3.13'" },
|
| 570 |
+
{ name = "brotli" },
|
| 571 |
+
{ name = "fastapi" },
|
| 572 |
+
{ name = "ffmpy" },
|
| 573 |
+
{ name = "gradio-client" },
|
| 574 |
+
{ name = "groovy" },
|
| 575 |
+
{ name = "httpx" },
|
| 576 |
+
{ name = "huggingface-hub" },
|
| 577 |
+
{ name = "jinja2" },
|
| 578 |
+
{ name = "markupsafe" },
|
| 579 |
+
{ name = "numpy" },
|
| 580 |
+
{ name = "orjson" },
|
| 581 |
+
{ name = "packaging" },
|
| 582 |
+
{ name = "pandas" },
|
| 583 |
+
{ name = "pillow" },
|
| 584 |
+
{ name = "pydantic" },
|
| 585 |
+
{ name = "pydub" },
|
| 586 |
+
{ name = "python-multipart" },
|
| 587 |
+
{ name = "pyyaml" },
|
| 588 |
+
{ name = "ruff", marker = "sys_platform != 'emscripten'" },
|
| 589 |
+
{ name = "safehttpx" },
|
| 590 |
+
{ name = "semantic-version" },
|
| 591 |
+
{ name = "starlette", marker = "sys_platform != 'emscripten'" },
|
| 592 |
+
{ name = "tomlkit" },
|
| 593 |
+
{ name = "typer", marker = "sys_platform != 'emscripten'" },
|
| 594 |
+
{ name = "typing-extensions" },
|
| 595 |
+
{ name = "urllib3", marker = "sys_platform == 'emscripten'" },
|
| 596 |
+
{ name = "uvicorn", marker = "sys_platform != 'emscripten'" },
|
| 597 |
+
]
|
| 598 |
+
sdist = { url = "https://files.pythonhosted.org/packages/29/e5/bc734d730783c91b223cae09210a8f9f354f37353dfea043d97ded347fe7/gradio-5.41.0.tar.gz", hash = "sha256:bf4afc16b195918f863259a06edc3cdefe121d74481ec0d6b73bd6955bcbb25c", size = 71643573, upload-time = "2025-08-05T21:52:52.842Z" }
|
| 599 |
+
wheels = [
|
| 600 |
+
{ url = "https://files.pythonhosted.org/packages/3b/25/65ff157e13fbf16c8ff6332ca3abfc512f6173583b157e6d1352c41fd839/gradio-5.41.0-py3-none-any.whl", hash = "sha256:b61e964a24df352c1c3195acfdbd744590b181742ca8f4b7610a99213448db20", size = 59675263, upload-time = "2025-08-05T21:52:46.259Z" },
|
| 601 |
+
]
|
| 602 |
+
|
| 603 |
+
[[package]]
|
| 604 |
+
name = "gradio-client"
|
| 605 |
+
version = "1.11.0"
|
| 606 |
+
source = { registry = "https://pypi.org/simple" }
|
| 607 |
+
dependencies = [
|
| 608 |
+
{ name = "fsspec" },
|
| 609 |
+
{ name = "httpx" },
|
| 610 |
+
{ name = "huggingface-hub" },
|
| 611 |
+
{ name = "packaging" },
|
| 612 |
+
{ name = "typing-extensions" },
|
| 613 |
+
{ name = "websockets" },
|
| 614 |
+
]
|
| 615 |
+
sdist = { url = "https://files.pythonhosted.org/packages/6b/98/60c699708bad11b5f28bfb1deaf979c4a8fcc31ec292c6a71dfd1eb14cdb/gradio_client-1.11.0.tar.gz", hash = "sha256:377c31d8082173663b230dad341614b127b2460fe24d5fd72ed456fb3f0b3a9e", size = 322444, upload-time = "2025-07-17T02:02:45.968Z" }
|
| 616 |
+
wheels = [
|
| 617 |
+
{ url = "https://files.pythonhosted.org/packages/e0/38/7f50ae95de8fa419276742230f57a34e8c0f47231da0ad54479dd0088972/gradio_client-1.11.0-py3-none-any.whl", hash = "sha256:afb714aea50224f6f04679fe2ce79c1be75011012d0dc3b3ee575610a0dc8eb2", size = 324452, upload-time = "2025-07-17T02:02:44.542Z" },
|
| 618 |
+
]
|
| 619 |
+
|
| 620 |
[[package]]
|
| 621 |
name = "greenlet"
|
| 622 |
version = "3.2.3"
|
|
|
|
| 662 |
{ url = "https://files.pythonhosted.org/packages/e6/65/7b3fcef8c9fb6d1023484d9caf87e78450a5c9cd1e191ce9632990b65284/griffe-1.9.0-py3-none-any.whl", hash = "sha256:bcf90ee3ad42bbae70a2a490c782fc8e443de9b84aa089d857c278a4e23215fc", size = 137060, upload-time = "2025-07-28T17:45:36.973Z" },
|
| 663 |
]
|
| 664 |
|
| 665 |
+
[[package]]
|
| 666 |
+
name = "groovy"
|
| 667 |
+
version = "0.1.2"
|
| 668 |
+
source = { registry = "https://pypi.org/simple" }
|
| 669 |
+
sdist = { url = "https://files.pythonhosted.org/packages/52/36/bbdede67400277bef33d3ec0e6a31750da972c469f75966b4930c753218f/groovy-0.1.2.tar.gz", hash = "sha256:25c1dc09b3f9d7e292458aa762c6beb96ea037071bf5e917fc81fb78d2231083", size = 17325, upload-time = "2025-02-28T20:24:56.068Z" }
|
| 670 |
+
wheels = [
|
| 671 |
+
{ url = "https://files.pythonhosted.org/packages/28/27/3d6dcadc8a3214d8522c1e7f6a19554e33659be44546d44a2f7572ac7d2a/groovy-0.1.2-py3-none-any.whl", hash = "sha256:7f7975bab18c729a257a8b1ae9dcd70b7cafb1720481beae47719af57c35fa64", size = 14090, upload-time = "2025-02-28T20:24:55.152Z" },
|
| 672 |
+
]
|
| 673 |
+
|
| 674 |
[[package]]
|
| 675 |
name = "grpcio"
|
| 676 |
version = "1.67.1"
|
|
|
|
| 1223 |
source = { registry = "https://pypi.org/simple" }
|
| 1224 |
sdist = { url = "https://files.pythonhosted.org/packages/93/4b/979db9e44be09f71e85c9c8cfc42f258adfb7d93ce01deed2788b2948919/logging-0.4.9.6.tar.gz", hash = "sha256:26f6b50773f085042d301085bd1bf5d9f3735704db9f37c1ce6d8b85c38f2417", size = 96029, upload-time = "2013-06-04T23:43:22.086Z" }
|
| 1225 |
|
| 1226 |
+
[[package]]
|
| 1227 |
+
name = "markdown-it-py"
|
| 1228 |
+
version = "3.0.0"
|
| 1229 |
+
source = { registry = "https://pypi.org/simple" }
|
| 1230 |
+
dependencies = [
|
| 1231 |
+
{ name = "mdurl" },
|
| 1232 |
+
]
|
| 1233 |
+
sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596, upload-time = "2023-06-03T06:41:14.443Z" }
|
| 1234 |
+
wheels = [
|
| 1235 |
+
{ url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528, upload-time = "2023-06-03T06:41:11.019Z" },
|
| 1236 |
+
]
|
| 1237 |
+
|
| 1238 |
[[package]]
|
| 1239 |
name = "markupsafe"
|
| 1240 |
version = "3.0.2"
|
|
|
|
| 1285 |
{ url = "https://files.pythonhosted.org/packages/34/75/51952c7b2d3873b44a0028b1bd26a25078c18f92f256608e8d1dc61b39fd/marshmallow-3.26.1-py3-none-any.whl", hash = "sha256:3350409f20a70a7e4e11a27661187b77cdcaeb20abca41c1454fe33636bea09c", size = 50878, upload-time = "2025-02-03T15:32:22.295Z" },
|
| 1286 |
]
|
| 1287 |
|
| 1288 |
+
[[package]]
|
| 1289 |
+
name = "mdurl"
|
| 1290 |
+
version = "0.1.2"
|
| 1291 |
+
source = { registry = "https://pypi.org/simple" }
|
| 1292 |
+
sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" }
|
| 1293 |
+
wheels = [
|
| 1294 |
+
{ url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" },
|
| 1295 |
+
]
|
| 1296 |
+
|
| 1297 |
[[package]]
|
| 1298 |
name = "milvus-lite"
|
| 1299 |
version = "2.5.1"
|
|
|
|
| 1964 |
{ url = "https://files.pythonhosted.org/packages/58/f0/427018098906416f580e3cf1366d3b1abfb408a0652e9f31600c24a1903c/pydantic_settings-2.10.1-py3-none-any.whl", hash = "sha256:a60952460b99cf661dc25c29c0ef171721f98bfcb52ef8d9ea4c943d7c8cc796", size = 45235, upload-time = "2025-06-24T13:26:45.485Z" },
|
| 1965 |
]
|
| 1966 |
|
| 1967 |
+
[[package]]
|
| 1968 |
+
name = "pydub"
|
| 1969 |
+
version = "0.25.1"
|
| 1970 |
+
source = { registry = "https://pypi.org/simple" }
|
| 1971 |
+
sdist = { url = "https://files.pythonhosted.org/packages/fe/9a/e6bca0eed82db26562c73b5076539a4a08d3cffd19c3cc5913a3e61145fd/pydub-0.25.1.tar.gz", hash = "sha256:980a33ce9949cab2a569606b65674d748ecbca4f0796887fd6f46173a7b0d30f", size = 38326, upload-time = "2021-03-10T02:09:54.659Z" }
|
| 1972 |
+
wheels = [
|
| 1973 |
+
{ url = "https://files.pythonhosted.org/packages/a6/53/d78dc063216e62fc55f6b2eebb447f6a4b0a59f55c8406376f76bf959b08/pydub-0.25.1-py2.py3-none-any.whl", hash = "sha256:65617e33033874b59d87db603aa1ed450633288aefead953b30bded59cb599a6", size = 32327, upload-time = "2021-03-10T02:09:53.503Z" },
|
| 1974 |
+
]
|
| 1975 |
+
|
| 1976 |
+
[[package]]
|
| 1977 |
+
name = "pygments"
|
| 1978 |
+
version = "2.19.2"
|
| 1979 |
+
source = { registry = "https://pypi.org/simple" }
|
| 1980 |
+
sdist = { url = "https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", size = 4968631, upload-time = "2025-06-21T13:39:12.283Z" }
|
| 1981 |
+
wheels = [
|
| 1982 |
+
{ url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217, upload-time = "2025-06-21T13:39:07.939Z" },
|
| 1983 |
+
]
|
| 1984 |
+
|
| 1985 |
[[package]]
|
| 1986 |
name = "pymilvus"
|
| 1987 |
version = "2.5.14"
|
|
|
|
| 2030 |
{ url = "https://files.pythonhosted.org/packages/5f/ed/539768cf28c661b5b068d66d96a2f155c4971a5d55684a514c1a0e0dec2f/python_dotenv-1.1.1-py3-none-any.whl", hash = "sha256:31f23644fe2602f88ff55e1f5c79ba497e01224ee7737937930c448e4d0e24dc", size = 20556, upload-time = "2025-06-24T04:21:06.073Z" },
|
| 2031 |
]
|
| 2032 |
|
| 2033 |
+
[[package]]
|
| 2034 |
+
name = "python-multipart"
|
| 2035 |
+
version = "0.0.20"
|
| 2036 |
+
source = { registry = "https://pypi.org/simple" }
|
| 2037 |
+
sdist = { url = "https://files.pythonhosted.org/packages/f3/87/f44d7c9f274c7ee665a29b885ec97089ec5dc034c7f3fafa03da9e39a09e/python_multipart-0.0.20.tar.gz", hash = "sha256:8dd0cab45b8e23064ae09147625994d090fa46f5b0d1e13af944c331a7fa9d13", size = 37158, upload-time = "2024-12-16T19:45:46.972Z" }
|
| 2038 |
+
wheels = [
|
| 2039 |
+
{ url = "https://files.pythonhosted.org/packages/45/58/38b5afbc1a800eeea951b9285d3912613f2603bdf897a4ab0f4bd7f405fc/python_multipart-0.0.20-py3-none-any.whl", hash = "sha256:8a62d3a8335e06589fe01f2a3e178cdcc632f3fbe0d492ad9ee0ec35aab1f104", size = 24546, upload-time = "2024-12-16T19:45:44.423Z" },
|
| 2040 |
+
]
|
| 2041 |
+
|
| 2042 |
[[package]]
|
| 2043 |
name = "pytz"
|
| 2044 |
version = "2025.2"
|
|
|
|
| 2080 |
source = { virtual = "." }
|
| 2081 |
dependencies = [
|
| 2082 |
{ name = "black" },
|
| 2083 |
+
{ name = "docx2txt" },
|
| 2084 |
{ name = "dotenv" },
|
| 2085 |
+
{ name = "gradio" },
|
| 2086 |
{ name = "isort" },
|
| 2087 |
{ name = "langchain" },
|
| 2088 |
{ name = "langchain-community" },
|
|
|
|
| 2097 |
[package.metadata]
|
| 2098 |
requires-dist = [
|
| 2099 |
{ name = "black", specifier = ">=25.1.0" },
|
| 2100 |
+
{ name = "docx2txt", specifier = ">=0.9" },
|
| 2101 |
{ name = "dotenv", specifier = ">=0.9.9" },
|
| 2102 |
+
{ name = "gradio", specifier = ">=4.0.0" },
|
| 2103 |
{ name = "isort", specifier = ">=6.0.1" },
|
| 2104 |
{ name = "langchain", specifier = ">=0.3.27" },
|
| 2105 |
{ name = "langchain-community", specifier = ">=0.3.27" },
|
|
|
|
| 2188 |
{ url = "https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06", size = 54481, upload-time = "2023-05-01T04:11:28.427Z" },
|
| 2189 |
]
|
| 2190 |
|
| 2191 |
+
[[package]]
|
| 2192 |
+
name = "rich"
|
| 2193 |
+
version = "14.1.0"
|
| 2194 |
+
source = { registry = "https://pypi.org/simple" }
|
| 2195 |
+
dependencies = [
|
| 2196 |
+
{ name = "markdown-it-py" },
|
| 2197 |
+
{ name = "pygments" },
|
| 2198 |
+
]
|
| 2199 |
+
sdist = { url = "https://files.pythonhosted.org/packages/fe/75/af448d8e52bf1d8fa6a9d089ca6c07ff4453d86c65c145d0a300bb073b9b/rich-14.1.0.tar.gz", hash = "sha256:e497a48b844b0320d45007cdebfeaeed8db2a4f4bcf49f15e455cfc4af11eaa8", size = 224441, upload-time = "2025-07-25T07:32:58.125Z" }
|
| 2200 |
+
wheels = [
|
| 2201 |
+
{ url = "https://files.pythonhosted.org/packages/e3/30/3c4d035596d3cf444529e0b2953ad0466f6049528a879d27534700580395/rich-14.1.0-py3-none-any.whl", hash = "sha256:536f5f1785986d6dbdea3c75205c473f970777b4a0d6c6dd1b696aa05a3fa04f", size = 243368, upload-time = "2025-07-25T07:32:56.73Z" },
|
| 2202 |
+
]
|
| 2203 |
+
|
| 2204 |
+
[[package]]
|
| 2205 |
+
name = "ruff"
|
| 2206 |
+
version = "0.12.7"
|
| 2207 |
+
source = { registry = "https://pypi.org/simple" }
|
| 2208 |
+
sdist = { url = "https://files.pythonhosted.org/packages/a1/81/0bd3594fa0f690466e41bd033bdcdf86cba8288345ac77ad4afbe5ec743a/ruff-0.12.7.tar.gz", hash = "sha256:1fc3193f238bc2d7968772c82831a4ff69252f673be371fb49663f0068b7ec71", size = 5197814, upload-time = "2025-07-29T22:32:35.877Z" }
|
| 2209 |
+
wheels = [
|
| 2210 |
+
{ url = "https://files.pythonhosted.org/packages/e1/d2/6cb35e9c85e7a91e8d22ab32ae07ac39cc34a71f1009a6f9e4a2a019e602/ruff-0.12.7-py3-none-linux_armv6l.whl", hash = "sha256:76e4f31529899b8c434c3c1dede98c4483b89590e15fb49f2d46183801565303", size = 11852189, upload-time = "2025-07-29T22:31:41.281Z" },
|
| 2211 |
+
{ url = "https://files.pythonhosted.org/packages/63/5b/a4136b9921aa84638f1a6be7fb086f8cad0fde538ba76bda3682f2599a2f/ruff-0.12.7-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:789b7a03e72507c54fb3ba6209e4bb36517b90f1a3569ea17084e3fd295500fb", size = 12519389, upload-time = "2025-07-29T22:31:54.265Z" },
|
| 2212 |
+
{ url = "https://files.pythonhosted.org/packages/a8/c9/3e24a8472484269b6b1821794141f879c54645a111ded4b6f58f9ab0705f/ruff-0.12.7-py3-none-macosx_11_0_arm64.whl", hash = "sha256:2e1c2a3b8626339bb6369116e7030a4cf194ea48f49b64bb505732a7fce4f4e3", size = 11743384, upload-time = "2025-07-29T22:31:59.575Z" },
|
| 2213 |
+
{ url = "https://files.pythonhosted.org/packages/26/7c/458dd25deeb3452c43eaee853c0b17a1e84169f8021a26d500ead77964fd/ruff-0.12.7-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:32dec41817623d388e645612ec70d5757a6d9c035f3744a52c7b195a57e03860", size = 11943759, upload-time = "2025-07-29T22:32:01.95Z" },
|
| 2214 |
+
{ url = "https://files.pythonhosted.org/packages/7f/8b/658798472ef260ca050e400ab96ef7e85c366c39cf3dfbef4d0a46a528b6/ruff-0.12.7-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:47ef751f722053a5df5fa48d412dbb54d41ab9b17875c6840a58ec63ff0c247c", size = 11654028, upload-time = "2025-07-29T22:32:04.367Z" },
|
| 2215 |
+
{ url = "https://files.pythonhosted.org/packages/a8/86/9c2336f13b2a3326d06d39178fd3448dcc7025f82514d1b15816fe42bfe8/ruff-0.12.7-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a828a5fc25a3efd3e1ff7b241fd392686c9386f20e5ac90aa9234a5faa12c423", size = 13225209, upload-time = "2025-07-29T22:32:06.952Z" },
|
| 2216 |
+
{ url = "https://files.pythonhosted.org/packages/76/69/df73f65f53d6c463b19b6b312fd2391dc36425d926ec237a7ed028a90fc1/ruff-0.12.7-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:5726f59b171111fa6a69d82aef48f00b56598b03a22f0f4170664ff4d8298efb", size = 14182353, upload-time = "2025-07-29T22:32:10.053Z" },
|
| 2217 |
+
{ url = "https://files.pythonhosted.org/packages/58/1e/de6cda406d99fea84b66811c189b5ea139814b98125b052424b55d28a41c/ruff-0.12.7-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:74e6f5c04c4dd4aba223f4fe6e7104f79e0eebf7d307e4f9b18c18362124bccd", size = 13631555, upload-time = "2025-07-29T22:32:12.644Z" },
|
| 2218 |
+
{ url = "https://files.pythonhosted.org/packages/6f/ae/625d46d5164a6cc9261945a5e89df24457dc8262539ace3ac36c40f0b51e/ruff-0.12.7-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d0bfe4e77fba61bf2ccadf8cf005d6133e3ce08793bbe870dd1c734f2699a3e", size = 12667556, upload-time = "2025-07-29T22:32:15.312Z" },
|
| 2219 |
+
{ url = "https://files.pythonhosted.org/packages/55/bf/9cb1ea5e3066779e42ade8d0cd3d3b0582a5720a814ae1586f85014656b6/ruff-0.12.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06bfb01e1623bf7f59ea749a841da56f8f653d641bfd046edee32ede7ff6c606", size = 12939784, upload-time = "2025-07-29T22:32:17.69Z" },
|
| 2220 |
+
{ url = "https://files.pythonhosted.org/packages/55/7f/7ead2663be5627c04be83754c4f3096603bf5e99ed856c7cd29618c691bd/ruff-0.12.7-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:e41df94a957d50083fd09b916d6e89e497246698c3f3d5c681c8b3e7b9bb4ac8", size = 11771356, upload-time = "2025-07-29T22:32:20.134Z" },
|
| 2221 |
+
{ url = "https://files.pythonhosted.org/packages/17/40/a95352ea16edf78cd3a938085dccc55df692a4d8ba1b3af7accbe2c806b0/ruff-0.12.7-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:4000623300563c709458d0ce170c3d0d788c23a058912f28bbadc6f905d67afa", size = 11612124, upload-time = "2025-07-29T22:32:22.645Z" },
|
| 2222 |
+
{ url = "https://files.pythonhosted.org/packages/4d/74/633b04871c669e23b8917877e812376827c06df866e1677f15abfadc95cb/ruff-0.12.7-py3-none-musllinux_1_2_i686.whl", hash = "sha256:69ffe0e5f9b2cf2b8e289a3f8945b402a1b19eff24ec389f45f23c42a3dd6fb5", size = 12479945, upload-time = "2025-07-29T22:32:24.765Z" },
|
| 2223 |
+
{ url = "https://files.pythonhosted.org/packages/be/34/c3ef2d7799c9778b835a76189c6f53c179d3bdebc8c65288c29032e03613/ruff-0.12.7-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:a07a5c8ffa2611a52732bdc67bf88e243abd84fe2d7f6daef3826b59abbfeda4", size = 12998677, upload-time = "2025-07-29T22:32:27.022Z" },
|
| 2224 |
+
{ url = "https://files.pythonhosted.org/packages/77/ab/aca2e756ad7b09b3d662a41773f3edcbd262872a4fc81f920dc1ffa44541/ruff-0.12.7-py3-none-win32.whl", hash = "sha256:c928f1b2ec59fb77dfdf70e0419408898b63998789cc98197e15f560b9e77f77", size = 11756687, upload-time = "2025-07-29T22:32:29.381Z" },
|
| 2225 |
+
{ url = "https://files.pythonhosted.org/packages/b4/71/26d45a5042bc71db22ddd8252ca9d01e9ca454f230e2996bb04f16d72799/ruff-0.12.7-py3-none-win_amd64.whl", hash = "sha256:9c18f3d707ee9edf89da76131956aba1270c6348bfee8f6c647de841eac7194f", size = 12912365, upload-time = "2025-07-29T22:32:31.517Z" },
|
| 2226 |
+
{ url = "https://files.pythonhosted.org/packages/4c/9b/0b8aa09817b63e78d94b4977f18b1fcaead3165a5ee49251c5d5c245bb2d/ruff-0.12.7-py3-none-win_arm64.whl", hash = "sha256:dfce05101dbd11833a0776716d5d1578641b7fddb537fe7fa956ab85d1769b69", size = 11982083, upload-time = "2025-07-29T22:32:33.881Z" },
|
| 2227 |
+
]
|
| 2228 |
+
|
| 2229 |
+
[[package]]
|
| 2230 |
+
name = "safehttpx"
|
| 2231 |
+
version = "0.1.6"
|
| 2232 |
+
source = { registry = "https://pypi.org/simple" }
|
| 2233 |
+
dependencies = [
|
| 2234 |
+
{ name = "httpx" },
|
| 2235 |
+
]
|
| 2236 |
+
sdist = { url = "https://files.pythonhosted.org/packages/67/4c/19db75e6405692b2a96af8f06d1258f8aa7290bdc35ac966f03e207f6d7f/safehttpx-0.1.6.tar.gz", hash = "sha256:b356bfc82cee3a24c395b94a2dbeabbed60aff1aa5fa3b5fe97c4f2456ebce42", size = 9987, upload-time = "2024-12-02T18:44:10.226Z" }
|
| 2237 |
+
wheels = [
|
| 2238 |
+
{ url = "https://files.pythonhosted.org/packages/4d/c0/1108ad9f01567f66b3154063605b350b69c3c9366732e09e45f9fd0d1deb/safehttpx-0.1.6-py3-none-any.whl", hash = "sha256:407cff0b410b071623087c63dd2080c3b44dc076888d8c5823c00d1e58cb381c", size = 8692, upload-time = "2024-12-02T18:44:08.555Z" },
|
| 2239 |
+
]
|
| 2240 |
+
|
| 2241 |
[[package]]
|
| 2242 |
name = "safetensors"
|
| 2243 |
version = "0.5.3"
|
|
|
|
| 2345 |
{ url = "https://files.pythonhosted.org/packages/6e/6c/a76329897a7cae4937d403e623aa6aaea616a0bb5b36588f0b9d1c9a3739/scipy-1.16.1-cp314-cp314t-win_amd64.whl", hash = "sha256:c0c804d60492a0aad7f5b2bb1862f4548b990049e27e828391ff2bf6f7199998", size = 39427705, upload-time = "2025-07-27T16:31:53.96Z" },
|
| 2346 |
]
|
| 2347 |
|
| 2348 |
+
[[package]]
|
| 2349 |
+
name = "semantic-version"
|
| 2350 |
+
version = "2.10.0"
|
| 2351 |
+
source = { registry = "https://pypi.org/simple" }
|
| 2352 |
+
sdist = { url = "https://files.pythonhosted.org/packages/7d/31/f2289ce78b9b473d582568c234e104d2a342fd658cc288a7553d83bb8595/semantic_version-2.10.0.tar.gz", hash = "sha256:bdabb6d336998cbb378d4b9db3a4b56a1e3235701dc05ea2690d9a997ed5041c", size = 52289, upload-time = "2022-05-26T13:35:23.454Z" }
|
| 2353 |
+
wheels = [
|
| 2354 |
+
{ 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" },
|
| 2355 |
+
]
|
| 2356 |
+
|
| 2357 |
[[package]]
|
| 2358 |
name = "sentence-transformers"
|
| 2359 |
version = "5.0.0"
|
|
|
|
| 2382 |
{ url = "https://files.pythonhosted.org/packages/a3/dc/17031897dae0efacfea57dfd3a82fdd2a2aeb58e0ff71b77b87e44edc772/setuptools-80.9.0-py3-none-any.whl", hash = "sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922", size = 1201486, upload-time = "2025-05-27T00:56:49.664Z" },
|
| 2383 |
]
|
| 2384 |
|
| 2385 |
+
[[package]]
|
| 2386 |
+
name = "shellingham"
|
| 2387 |
+
version = "1.5.4"
|
| 2388 |
+
source = { registry = "https://pypi.org/simple" }
|
| 2389 |
+
sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310, upload-time = "2023-10-24T04:13:40.426Z" }
|
| 2390 |
+
wheels = [
|
| 2391 |
+
{ url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755, upload-time = "2023-10-24T04:13:38.866Z" },
|
| 2392 |
+
]
|
| 2393 |
+
|
| 2394 |
[[package]]
|
| 2395 |
name = "six"
|
| 2396 |
version = "1.17.0"
|
|
|
|
| 2452 |
{ name = "greenlet" },
|
| 2453 |
]
|
| 2454 |
|
| 2455 |
+
[[package]]
|
| 2456 |
+
name = "starlette"
|
| 2457 |
+
version = "0.47.2"
|
| 2458 |
+
source = { registry = "https://pypi.org/simple" }
|
| 2459 |
+
dependencies = [
|
| 2460 |
+
{ name = "anyio" },
|
| 2461 |
+
{ name = "typing-extensions", marker = "python_full_version < '3.13'" },
|
| 2462 |
+
]
|
| 2463 |
+
sdist = { url = "https://files.pythonhosted.org/packages/04/57/d062573f391d062710d4088fa1369428c38d51460ab6fedff920efef932e/starlette-0.47.2.tar.gz", hash = "sha256:6ae9aa5db235e4846decc1e7b79c4f346adf41e9777aebeb49dfd09bbd7023d8", size = 2583948, upload-time = "2025-07-20T17:31:58.522Z" }
|
| 2464 |
+
wheels = [
|
| 2465 |
+
{ url = "https://files.pythonhosted.org/packages/f7/1f/b876b1f83aef204198a42dc101613fefccb32258e5428b5f9259677864b4/starlette-0.47.2-py3-none-any.whl", hash = "sha256:c5847e96134e5c5371ee9fac6fdf1a67336d5815e09eb2a01fdb57a351ef915b", size = 72984, upload-time = "2025-07-20T17:31:56.738Z" },
|
| 2466 |
+
]
|
| 2467 |
+
|
| 2468 |
[[package]]
|
| 2469 |
name = "striprtf"
|
| 2470 |
version = "0.0.26"
|
|
|
|
| 2553 |
{ url = "https://files.pythonhosted.org/packages/41/f2/fd673d979185f5dcbac4be7d09461cbb99751554ffb6718d0013af8604cb/tokenizers-0.21.4-cp39-abi3-win_amd64.whl", hash = "sha256:475d807a5c3eb72c59ad9b5fcdb254f6e17f53dfcbb9903233b0dfa9c943b597", size = 2507568, upload-time = "2025-07-28T15:48:55.456Z" },
|
| 2554 |
]
|
| 2555 |
|
| 2556 |
+
[[package]]
|
| 2557 |
+
name = "tomlkit"
|
| 2558 |
+
version = "0.13.3"
|
| 2559 |
+
source = { registry = "https://pypi.org/simple" }
|
| 2560 |
+
sdist = { url = "https://files.pythonhosted.org/packages/cc/18/0bbf3884e9eaa38819ebe46a7bd25dcd56b67434402b66a58c4b8e552575/tomlkit-0.13.3.tar.gz", hash = "sha256:430cf247ee57df2b94ee3fbe588e71d362a941ebb545dec29b53961d61add2a1", size = 185207, upload-time = "2025-06-05T07:13:44.947Z" }
|
| 2561 |
+
wheels = [
|
| 2562 |
+
{ url = "https://files.pythonhosted.org/packages/bd/75/8539d011f6be8e29f339c42e633aae3cb73bffa95dd0f9adec09b9c58e85/tomlkit-0.13.3-py3-none-any.whl", hash = "sha256:c89c649d79ee40629a9fda55f8ace8c6a1b42deb912b2a8fd8d942ddadb606b0", size = 38901, upload-time = "2025-06-05T07:13:43.546Z" },
|
| 2563 |
+
]
|
| 2564 |
+
|
| 2565 |
[[package]]
|
| 2566 |
name = "torch"
|
| 2567 |
version = "2.7.1"
|
|
|
|
| 2651 |
{ url = "https://files.pythonhosted.org/packages/28/71/bd20ffcb7a64c753dc2463489a61bf69d531f308e390ad06390268c4ea04/triton-3.3.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a3198adb9d78b77818a5388bff89fa72ff36f9da0bc689db2f0a651a67ce6a42", size = 155735832, upload-time = "2025-05-29T23:40:10.522Z" },
|
| 2652 |
]
|
| 2653 |
|
| 2654 |
+
[[package]]
|
| 2655 |
+
name = "typer"
|
| 2656 |
+
version = "0.16.0"
|
| 2657 |
+
source = { registry = "https://pypi.org/simple" }
|
| 2658 |
+
dependencies = [
|
| 2659 |
+
{ name = "click" },
|
| 2660 |
+
{ name = "rich" },
|
| 2661 |
+
{ name = "shellingham" },
|
| 2662 |
+
{ name = "typing-extensions" },
|
| 2663 |
+
]
|
| 2664 |
+
sdist = { url = "https://files.pythonhosted.org/packages/c5/8c/7d682431efca5fd290017663ea4588bf6f2c6aad085c7f108c5dbc316e70/typer-0.16.0.tar.gz", hash = "sha256:af377ffaee1dbe37ae9440cb4e8f11686ea5ce4e9bae01b84ae7c63b87f1dd3b", size = 102625, upload-time = "2025-05-26T14:30:31.824Z" }
|
| 2665 |
+
wheels = [
|
| 2666 |
+
{ url = "https://files.pythonhosted.org/packages/76/42/3efaf858001d2c2913de7f354563e3a3a2f0decae3efe98427125a8f441e/typer-0.16.0-py3-none-any.whl", hash = "sha256:1f79bed11d4d02d4310e3c1b7ba594183bcedb0ac73b27a9e5f28f6fb5b98855", size = 46317, upload-time = "2025-05-26T14:30:30.523Z" },
|
| 2667 |
+
]
|
| 2668 |
+
|
| 2669 |
[[package]]
|
| 2670 |
name = "typing-extensions"
|
| 2671 |
version = "4.14.1"
|
|
|
|
| 2746 |
{ url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795, upload-time = "2025-06-18T14:07:40.39Z" },
|
| 2747 |
]
|
| 2748 |
|
| 2749 |
+
[[package]]
|
| 2750 |
+
name = "uvicorn"
|
| 2751 |
+
version = "0.35.0"
|
| 2752 |
+
source = { registry = "https://pypi.org/simple" }
|
| 2753 |
+
dependencies = [
|
| 2754 |
+
{ name = "click" },
|
| 2755 |
+
{ name = "h11" },
|
| 2756 |
+
]
|
| 2757 |
+
sdist = { url = "https://files.pythonhosted.org/packages/5e/42/e0e305207bb88c6b8d3061399c6a961ffe5fbb7e2aa63c9234df7259e9cd/uvicorn-0.35.0.tar.gz", hash = "sha256:bc662f087f7cf2ce11a1d7fd70b90c9f98ef2e2831556dd078d131b96cc94a01", size = 78473, upload-time = "2025-06-28T16:15:46.058Z" }
|
| 2758 |
+
wheels = [
|
| 2759 |
+
{ url = "https://files.pythonhosted.org/packages/d2/e2/dc81b1bd1dcfe91735810265e9d26bc8ec5da45b4c0f6237e286819194c3/uvicorn-0.35.0-py3-none-any.whl", hash = "sha256:197535216b25ff9b785e29a0b79199f55222193d47f820816e7da751e9bc8d4a", size = 66406, upload-time = "2025-06-28T16:15:44.816Z" },
|
| 2760 |
+
]
|
| 2761 |
+
|
| 2762 |
+
[[package]]
|
| 2763 |
+
name = "websockets"
|
| 2764 |
+
version = "15.0.1"
|
| 2765 |
+
source = { registry = "https://pypi.org/simple" }
|
| 2766 |
+
sdist = { url = "https://files.pythonhosted.org/packages/21/e6/26d09fab466b7ca9c7737474c52be4f76a40301b08362eb2dbc19dcc16c1/websockets-15.0.1.tar.gz", hash = "sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee", size = 177016, upload-time = "2025-03-05T20:03:41.606Z" }
|
| 2767 |
+
wheels = [
|
| 2768 |
+
{ url = "https://files.pythonhosted.org/packages/51/6b/4545a0d843594f5d0771e86463606a3988b5a09ca5123136f8a76580dd63/websockets-15.0.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:3e90baa811a5d73f3ca0bcbf32064d663ed81318ab225ee4f427ad4e26e5aff3", size = 175437, upload-time = "2025-03-05T20:02:16.706Z" },
|
| 2769 |
+
{ url = "https://files.pythonhosted.org/packages/f4/71/809a0f5f6a06522af902e0f2ea2757f71ead94610010cf570ab5c98e99ed/websockets-15.0.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:592f1a9fe869c778694f0aa806ba0374e97648ab57936f092fd9d87f8bc03665", size = 173096, upload-time = "2025-03-05T20:02:18.832Z" },
|
| 2770 |
+
{ url = "https://files.pythonhosted.org/packages/3d/69/1a681dd6f02180916f116894181eab8b2e25b31e484c5d0eae637ec01f7c/websockets-15.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0701bc3cfcb9164d04a14b149fd74be7347a530ad3bbf15ab2c678a2cd3dd9a2", size = 173332, upload-time = "2025-03-05T20:02:20.187Z" },
|
| 2771 |
+
{ url = "https://files.pythonhosted.org/packages/a6/02/0073b3952f5bce97eafbb35757f8d0d54812b6174ed8dd952aa08429bcc3/websockets-15.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8b56bdcdb4505c8078cb6c7157d9811a85790f2f2b3632c7d1462ab5783d215", size = 183152, upload-time = "2025-03-05T20:02:22.286Z" },
|
| 2772 |
+
{ url = "https://files.pythonhosted.org/packages/74/45/c205c8480eafd114b428284840da0b1be9ffd0e4f87338dc95dc6ff961a1/websockets-15.0.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0af68c55afbd5f07986df82831c7bff04846928ea8d1fd7f30052638788bc9b5", size = 182096, upload-time = "2025-03-05T20:02:24.368Z" },
|
| 2773 |
+
{ url = "https://files.pythonhosted.org/packages/14/8f/aa61f528fba38578ec553c145857a181384c72b98156f858ca5c8e82d9d3/websockets-15.0.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64dee438fed052b52e4f98f76c5790513235efaa1ef7f3f2192c392cd7c91b65", size = 182523, upload-time = "2025-03-05T20:02:25.669Z" },
|
| 2774 |
+
{ url = "https://files.pythonhosted.org/packages/ec/6d/0267396610add5bc0d0d3e77f546d4cd287200804fe02323797de77dbce9/websockets-15.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d5f6b181bb38171a8ad1d6aa58a67a6aa9d4b38d0f8c5f496b9e42561dfc62fe", size = 182790, upload-time = "2025-03-05T20:02:26.99Z" },
|
| 2775 |
+
{ url = "https://files.pythonhosted.org/packages/02/05/c68c5adbf679cf610ae2f74a9b871ae84564462955d991178f95a1ddb7dd/websockets-15.0.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5d54b09eba2bada6011aea5375542a157637b91029687eb4fdb2dab11059c1b4", size = 182165, upload-time = "2025-03-05T20:02:30.291Z" },
|
| 2776 |
+
{ url = "https://files.pythonhosted.org/packages/29/93/bb672df7b2f5faac89761cb5fa34f5cec45a4026c383a4b5761c6cea5c16/websockets-15.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3be571a8b5afed347da347bfcf27ba12b069d9d7f42cb8c7028b5e98bbb12597", size = 182160, upload-time = "2025-03-05T20:02:31.634Z" },
|
| 2777 |
+
{ url = "https://files.pythonhosted.org/packages/ff/83/de1f7709376dc3ca9b7eeb4b9a07b4526b14876b6d372a4dc62312bebee0/websockets-15.0.1-cp312-cp312-win32.whl", hash = "sha256:c338ffa0520bdb12fbc527265235639fb76e7bc7faafbb93f6ba80d9c06578a9", size = 176395, upload-time = "2025-03-05T20:02:33.017Z" },
|
| 2778 |
+
{ url = "https://files.pythonhosted.org/packages/7d/71/abf2ebc3bbfa40f391ce1428c7168fb20582d0ff57019b69ea20fa698043/websockets-15.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:fcd5cf9e305d7b8338754470cf69cf81f420459dbae8a3b40cee57417f4614a7", size = 176841, upload-time = "2025-03-05T20:02:34.498Z" },
|
| 2779 |
+
{ url = "https://files.pythonhosted.org/packages/cb/9f/51f0cf64471a9d2b4d0fc6c534f323b664e7095640c34562f5182e5a7195/websockets-15.0.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ee443ef070bb3b6ed74514f5efaa37a252af57c90eb33b956d35c8e9c10a1931", size = 175440, upload-time = "2025-03-05T20:02:36.695Z" },
|
| 2780 |
+
{ url = "https://files.pythonhosted.org/packages/8a/05/aa116ec9943c718905997412c5989f7ed671bc0188ee2ba89520e8765d7b/websockets-15.0.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5a939de6b7b4e18ca683218320fc67ea886038265fd1ed30173f5ce3f8e85675", size = 173098, upload-time = "2025-03-05T20:02:37.985Z" },
|
| 2781 |
+
{ url = "https://files.pythonhosted.org/packages/ff/0b/33cef55ff24f2d92924923c99926dcce78e7bd922d649467f0eda8368923/websockets-15.0.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:746ee8dba912cd6fc889a8147168991d50ed70447bf18bcda7039f7d2e3d9151", size = 173329, upload-time = "2025-03-05T20:02:39.298Z" },
|
| 2782 |
+
{ url = "https://files.pythonhosted.org/packages/31/1d/063b25dcc01faa8fada1469bdf769de3768b7044eac9d41f734fd7b6ad6d/websockets-15.0.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:595b6c3969023ecf9041b2936ac3827e4623bfa3ccf007575f04c5a6aa318c22", size = 183111, upload-time = "2025-03-05T20:02:40.595Z" },
|
| 2783 |
+
{ url = "https://files.pythonhosted.org/packages/93/53/9a87ee494a51bf63e4ec9241c1ccc4f7c2f45fff85d5bde2ff74fcb68b9e/websockets-15.0.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c714d2fc58b5ca3e285461a4cc0c9a66bd0e24c5da9911e30158286c9b5be7f", size = 182054, upload-time = "2025-03-05T20:02:41.926Z" },
|
| 2784 |
+
{ url = "https://files.pythonhosted.org/packages/ff/b2/83a6ddf56cdcbad4e3d841fcc55d6ba7d19aeb89c50f24dd7e859ec0805f/websockets-15.0.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f3c1e2ab208db911594ae5b4f79addeb3501604a165019dd221c0bdcabe4db8", size = 182496, upload-time = "2025-03-05T20:02:43.304Z" },
|
| 2785 |
+
{ url = "https://files.pythonhosted.org/packages/98/41/e7038944ed0abf34c45aa4635ba28136f06052e08fc2168520bb8b25149f/websockets-15.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:229cf1d3ca6c1804400b0a9790dc66528e08a6a1feec0d5040e8b9eb14422375", size = 182829, upload-time = "2025-03-05T20:02:48.812Z" },
|
| 2786 |
+
{ url = "https://files.pythonhosted.org/packages/e0/17/de15b6158680c7623c6ef0db361da965ab25d813ae54fcfeae2e5b9ef910/websockets-15.0.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:756c56e867a90fb00177d530dca4b097dd753cde348448a1012ed6c5131f8b7d", size = 182217, upload-time = "2025-03-05T20:02:50.14Z" },
|
| 2787 |
+
{ url = "https://files.pythonhosted.org/packages/33/2b/1f168cb6041853eef0362fb9554c3824367c5560cbdaad89ac40f8c2edfc/websockets-15.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:558d023b3df0bffe50a04e710bc87742de35060580a293c2a984299ed83bc4e4", size = 182195, upload-time = "2025-03-05T20:02:51.561Z" },
|
| 2788 |
+
{ url = "https://files.pythonhosted.org/packages/86/eb/20b6cdf273913d0ad05a6a14aed4b9a85591c18a987a3d47f20fa13dcc47/websockets-15.0.1-cp313-cp313-win32.whl", hash = "sha256:ba9e56e8ceeeedb2e080147ba85ffcd5cd0711b89576b83784d8605a7df455fa", size = 176393, upload-time = "2025-03-05T20:02:53.814Z" },
|
| 2789 |
+
{ url = "https://files.pythonhosted.org/packages/1b/6c/c65773d6cab416a64d191d6ee8a8b1c68a09970ea6909d16965d26bfed1e/websockets-15.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:e09473f095a819042ecb2ab9465aee615bd9c2028e4ef7d933600a8401c79561", size = 176837, upload-time = "2025-03-05T20:02:55.237Z" },
|
| 2790 |
+
{ 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" },
|
| 2791 |
+
]
|
| 2792 |
+
|
| 2793 |
[[package]]
|
| 2794 |
name = "wrapt"
|
| 2795 |
version = "1.17.2"
|