Upload folder using huggingface_hub
Browse files- app.py +22 -116
- modules/channel_utils.py +120 -0
- modules/db.py +8 -8
- modules/embeddings.py +31 -0
- modules/indexer.py +3 -7
- modules/retriever.py +3 -5
- pyproject.toml +1 -0
- uv.lock +384 -0
app.py
CHANGED
|
@@ -6,6 +6,7 @@ import gradio as gr
|
|
| 6 |
from gradio_modal import Modal
|
| 7 |
import chromadb
|
| 8 |
from downloader import export_channel_json
|
|
|
|
| 9 |
from modules.collector import fetch_all_channel_videos
|
| 10 |
from modules.db import (
|
| 11 |
delete_channel_from_collection,
|
|
@@ -18,6 +19,7 @@ from dotenv import load_dotenv
|
|
| 18 |
|
| 19 |
from youtube_poller import start_poll
|
| 20 |
from youtube_sync import sync_channels_from_youtube
|
|
|
|
| 21 |
|
| 22 |
load_dotenv()
|
| 23 |
|
|
@@ -137,71 +139,6 @@ def list_channels_radio():
|
|
| 137 |
return choices
|
| 138 |
|
| 139 |
|
| 140 |
-
# -------------------------------
|
| 141 |
-
# Fetch channel videos as HTML table with pagination
|
| 142 |
-
# -------------------------------
|
| 143 |
-
def fetch_channel_html(channel_id: str, page: int = 1, page_size: int = 10):
|
| 144 |
-
collection = get_collection()
|
| 145 |
-
offset = (page - 1) * page_size
|
| 146 |
-
|
| 147 |
-
all_results = collection.get(
|
| 148 |
-
where={"channel_id": channel_id}, include=["metadatas"]
|
| 149 |
-
)
|
| 150 |
-
total_count = (
|
| 151 |
-
len(all_results["metadatas"])
|
| 152 |
-
if all_results and "metadatas" in all_results
|
| 153 |
-
else 0
|
| 154 |
-
)
|
| 155 |
-
results = collection.get(
|
| 156 |
-
where={"channel_id": channel_id},
|
| 157 |
-
include=["documents", "metadatas"],
|
| 158 |
-
limit=page_size,
|
| 159 |
-
offset=offset,
|
| 160 |
-
)
|
| 161 |
-
|
| 162 |
-
# handle empty
|
| 163 |
-
if not results or not results.get("metadatas"):
|
| 164 |
-
return f"""
|
| 165 |
-
<div style="display:flex;justify-content:center;align-items:center;
|
| 166 |
-
height:200px;flex-direction:column;color:#666;">
|
| 167 |
-
⚠️ No videos found for this channel (page {page}).
|
| 168 |
-
</div>
|
| 169 |
-
"""
|
| 170 |
-
|
| 171 |
-
videos = results["metadatas"]
|
| 172 |
-
|
| 173 |
-
# build table
|
| 174 |
-
html = (
|
| 175 |
-
f"<div>Total: {total_count} videos</div>"
|
| 176 |
-
+ """
|
| 177 |
-
<table border="1" style="border-collapse:collapse;width:100%;font-family:sans-serif;">
|
| 178 |
-
<thead style="background:#f0f0f0;">
|
| 179 |
-
<tr>
|
| 180 |
-
<th>#</th>
|
| 181 |
-
<th>Title</th>
|
| 182 |
-
<th>Video URL</th>
|
| 183 |
-
<th>Description</th>
|
| 184 |
-
</tr>
|
| 185 |
-
</thead>
|
| 186 |
-
<tbody>
|
| 187 |
-
"""
|
| 188 |
-
)
|
| 189 |
-
|
| 190 |
-
for idx, v in enumerate(videos, start=offset + 1):
|
| 191 |
-
html += f"""
|
| 192 |
-
<tr>
|
| 193 |
-
<td>{idx}</td>
|
| 194 |
-
<td>{v.get('video_title','')}</td>
|
| 195 |
-
<td><a href="https://youtube.com/watch?v={v.get('video_id')}"
|
| 196 |
-
target="_blank">Watch Video</a></td>
|
| 197 |
-
<td>{v.get('description','')}</td>
|
| 198 |
-
</tr>
|
| 199 |
-
"""
|
| 200 |
-
|
| 201 |
-
html += "</tbody></table>"
|
| 202 |
-
return html
|
| 203 |
-
|
| 204 |
-
|
| 205 |
# Delete a channel
|
| 206 |
# -------------------------------
|
| 207 |
def delete_channel(channel_url: str):
|
|
@@ -250,43 +187,22 @@ with gr.Blocks() as demo:
|
|
| 250 |
gr.Markdown("### Videos List")
|
| 251 |
|
| 252 |
# the HTML table that shows one page of videos
|
| 253 |
-
modal_html = gr.HTML()
|
| 254 |
-
|
| 255 |
-
|
| 256 |
-
|
| 257 |
-
|
| 258 |
-
|
| 259 |
-
|
| 260 |
-
|
| 261 |
-
|
| 262 |
-
|
| 263 |
-
|
| 264 |
-
|
| 265 |
-
|
| 266 |
-
|
| 267 |
-
|
| 268 |
-
|
| 269 |
-
current_page = gr.State(1)
|
| 270 |
-
page_size = 10 # change if you like
|
| 271 |
-
|
| 272 |
-
def update_table(channel_id, page):
|
| 273 |
-
return fetch_channel_html(channel_id, page, page_size), f"Page {page}"
|
| 274 |
-
|
| 275 |
-
def prev_page(channel_id, page):
|
| 276 |
-
new_page = max(1, page - 1)
|
| 277 |
-
return (
|
| 278 |
-
fetch_channel_html(channel_id, new_page, page_size),
|
| 279 |
-
f"Page {new_page}",
|
| 280 |
-
new_page,
|
| 281 |
-
)
|
| 282 |
-
|
| 283 |
-
def next_page(channel_id, page):
|
| 284 |
-
new_page = page + 1
|
| 285 |
-
return (
|
| 286 |
-
fetch_channel_html(channel_id, new_page, page_size),
|
| 287 |
-
f"Page {new_page}",
|
| 288 |
-
new_page,
|
| 289 |
-
)
|
| 290 |
|
| 291 |
# Modal to add new channels
|
| 292 |
with Modal(visible=False) as add_channel_modal:
|
|
@@ -372,7 +288,7 @@ with gr.Blocks() as demo:
|
|
| 372 |
size="sm",
|
| 373 |
scale=0,
|
| 374 |
variant="stop",
|
| 375 |
-
visible=False
|
| 376 |
)
|
| 377 |
add_channels_btn = gr.Button(
|
| 378 |
"➕ Add", size="sm", scale=0, variant="primary"
|
|
@@ -503,7 +419,8 @@ with gr.Blocks() as demo:
|
|
| 503 |
# Show videos modal when button clicked
|
| 504 |
def show_selected_channel_videos(selected_channel_id):
|
| 505 |
# print("selected_channel_id = ", selected_channel_id)
|
| 506 |
-
|
|
|
|
| 507 |
|
| 508 |
channel_radio.change(
|
| 509 |
enable_if_not_none, inputs=[channel_radio], outputs=[show_videos_btn]
|
|
@@ -513,7 +430,7 @@ with gr.Blocks() as demo:
|
|
| 513 |
).then(
|
| 514 |
show_selected_channel_videos,
|
| 515 |
inputs=[channel_radio],
|
| 516 |
-
outputs=[
|
| 517 |
).then(
|
| 518 |
show_component, outputs=[videos_list_modal]
|
| 519 |
).then(
|
|
@@ -546,17 +463,6 @@ with gr.Blocks() as demo:
|
|
| 546 |
get_channel_choices, inputs=[channel_list_state], outputs=[search_channel]
|
| 547 |
)
|
| 548 |
|
| 549 |
-
prev_btn.click(
|
| 550 |
-
prev_page,
|
| 551 |
-
[channel_radio, current_page], # you’ll need to pass channel_id here
|
| 552 |
-
[modal_html, page_info, current_page],
|
| 553 |
-
)
|
| 554 |
-
|
| 555 |
-
next_btn.click(
|
| 556 |
-
next_page,
|
| 557 |
-
[channel_radio, current_page],
|
| 558 |
-
[modal_html, page_info, current_page],
|
| 559 |
-
)
|
| 560 |
export_btn.click(close_component, outputs=[my_sidebar]).then(
|
| 561 |
show_component, outputs=[download_status]
|
| 562 |
).then(hide_component, outputs=[download_ready_btn]).then(
|
|
|
|
| 6 |
from gradio_modal import Modal
|
| 7 |
import chromadb
|
| 8 |
from downloader import export_channel_json
|
| 9 |
+
from modules.channel_utils import fetch_channel_dataframe
|
| 10 |
from modules.collector import fetch_all_channel_videos
|
| 11 |
from modules.db import (
|
| 12 |
delete_channel_from_collection,
|
|
|
|
| 19 |
|
| 20 |
from youtube_poller import start_poll
|
| 21 |
from youtube_sync import sync_channels_from_youtube
|
| 22 |
+
import pandas as pd
|
| 23 |
|
| 24 |
load_dotenv()
|
| 25 |
|
|
|
|
| 139 |
return choices
|
| 140 |
|
| 141 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 142 |
# Delete a channel
|
| 143 |
# -------------------------------
|
| 144 |
def delete_channel(channel_url: str):
|
|
|
|
| 187 |
gr.Markdown("### Videos List")
|
| 188 |
|
| 189 |
# the HTML table that shows one page of videos
|
| 190 |
+
# modal_html = gr.HTML()
|
| 191 |
+
channel_videos_df = gr.DataFrame(
|
| 192 |
+
show_search=True,
|
| 193 |
+
show_copy_button=True,
|
| 194 |
+
show_fullscreen_button=True,
|
| 195 |
+
datatype=[
|
| 196 |
+
"int",
|
| 197 |
+
"str",
|
| 198 |
+
"str",
|
| 199 |
+
"html",
|
| 200 |
+
],
|
| 201 |
+
headers=["#", "title", "description", "url"],
|
| 202 |
+
column_widths=["5%","25%","60%","10%"],
|
| 203 |
+
wrap=True,
|
| 204 |
+
col_count=(4, "fixed"),
|
| 205 |
+
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 206 |
|
| 207 |
# Modal to add new channels
|
| 208 |
with Modal(visible=False) as add_channel_modal:
|
|
|
|
| 288 |
size="sm",
|
| 289 |
scale=0,
|
| 290 |
variant="stop",
|
| 291 |
+
visible=False,
|
| 292 |
)
|
| 293 |
add_channels_btn = gr.Button(
|
| 294 |
"➕ Add", size="sm", scale=0, variant="primary"
|
|
|
|
| 419 |
# Show videos modal when button clicked
|
| 420 |
def show_selected_channel_videos(selected_channel_id):
|
| 421 |
# print("selected_channel_id = ", selected_channel_id)
|
| 422 |
+
df = fetch_channel_dataframe(selected_channel_id)
|
| 423 |
+
return gr.update(value=df, label=f"{len(df)} videos")
|
| 424 |
|
| 425 |
channel_radio.change(
|
| 426 |
enable_if_not_none, inputs=[channel_radio], outputs=[show_videos_btn]
|
|
|
|
| 430 |
).then(
|
| 431 |
show_selected_channel_videos,
|
| 432 |
inputs=[channel_radio],
|
| 433 |
+
outputs=[channel_videos_df],
|
| 434 |
).then(
|
| 435 |
show_component, outputs=[videos_list_modal]
|
| 436 |
).then(
|
|
|
|
| 463 |
get_channel_choices, inputs=[channel_list_state], outputs=[search_channel]
|
| 464 |
)
|
| 465 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 466 |
export_btn.click(close_component, outputs=[my_sidebar]).then(
|
| 467 |
show_component, outputs=[download_status]
|
| 468 |
).then(hide_component, outputs=[download_ready_btn]).then(
|
modules/channel_utils.py
ADDED
|
@@ -0,0 +1,120 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from modules.db import get_collection
|
| 2 |
+
import pandas as pd
|
| 3 |
+
|
| 4 |
+
page_size = 10 # change if you like
|
| 5 |
+
|
| 6 |
+
|
| 7 |
+
# -------------------------------
|
| 8 |
+
# Fetch channel videos as HTML table with pagination
|
| 9 |
+
# -------------------------------
|
| 10 |
+
def fetch_channel_html(channel_id: str, page: int = 1, page_size: int = 10):
|
| 11 |
+
collection = get_collection()
|
| 12 |
+
offset = (page - 1) * page_size
|
| 13 |
+
|
| 14 |
+
all_results = collection.get(
|
| 15 |
+
where={"channel_id": channel_id}, include=["metadatas"]
|
| 16 |
+
)
|
| 17 |
+
total_count = (
|
| 18 |
+
len(all_results["metadatas"])
|
| 19 |
+
if all_results and "metadatas" in all_results
|
| 20 |
+
else 0
|
| 21 |
+
)
|
| 22 |
+
results = collection.get(
|
| 23 |
+
where={"channel_id": channel_id},
|
| 24 |
+
include=["documents", "metadatas"],
|
| 25 |
+
limit=page_size,
|
| 26 |
+
offset=offset,
|
| 27 |
+
)
|
| 28 |
+
|
| 29 |
+
# handle empty
|
| 30 |
+
if not results or not results.get("metadatas"):
|
| 31 |
+
return f"""
|
| 32 |
+
<div style="display:flex;justify-content:center;align-items:center;
|
| 33 |
+
height:200px;flex-direction:column;color:#666;">
|
| 34 |
+
⚠️ No videos found for this channel (page {page}).
|
| 35 |
+
</div>
|
| 36 |
+
"""
|
| 37 |
+
|
| 38 |
+
videos = results["metadatas"]
|
| 39 |
+
|
| 40 |
+
# build table
|
| 41 |
+
html = (
|
| 42 |
+
f"<div>Total: {total_count} videos</div>"
|
| 43 |
+
+ """
|
| 44 |
+
<table border="1" style="border-collapse:collapse;width:100%;font-family:sans-serif;">
|
| 45 |
+
<thead style="background:#f0f0f0;">
|
| 46 |
+
<tr>
|
| 47 |
+
<th>#</th>
|
| 48 |
+
<th>Title</th>
|
| 49 |
+
<th>Video URL</th>
|
| 50 |
+
<th>Description</th>
|
| 51 |
+
</tr>
|
| 52 |
+
</thead>
|
| 53 |
+
<tbody>
|
| 54 |
+
"""
|
| 55 |
+
)
|
| 56 |
+
|
| 57 |
+
for idx, v in enumerate(videos, start=offset + 1):
|
| 58 |
+
html += f"""
|
| 59 |
+
<tr>
|
| 60 |
+
<td>{idx}</td>
|
| 61 |
+
<td>{v.get('video_title','')}</td>
|
| 62 |
+
<td><a href="https://youtube.com/watch?v={v.get('video_id')}"
|
| 63 |
+
target="_blank">Watch Video</a></td>
|
| 64 |
+
<td>{v.get('description','')}</td>
|
| 65 |
+
</tr>
|
| 66 |
+
"""
|
| 67 |
+
|
| 68 |
+
html += "</tbody></table>"
|
| 69 |
+
return html
|
| 70 |
+
|
| 71 |
+
|
| 72 |
+
# -------------------------------
|
| 73 |
+
# Fetch channel videos as HTML table with pagination
|
| 74 |
+
# -------------------------------
|
| 75 |
+
def fetch_channel_dataframe(channel_id: str):
|
| 76 |
+
collection = get_collection()
|
| 77 |
+
|
| 78 |
+
results = collection.get(
|
| 79 |
+
where={"channel_id": channel_id}, include=["documents", "metadatas"]
|
| 80 |
+
)
|
| 81 |
+
total_count = len(results["metadatas"]) if results and "metadatas" in results else 0
|
| 82 |
+
# handle empty
|
| 83 |
+
if not results or not results.get("metadatas"):
|
| 84 |
+
return pd.DataFrame(data=[])
|
| 85 |
+
|
| 86 |
+
videos = results["metadatas"]
|
| 87 |
+
|
| 88 |
+
items = []
|
| 89 |
+
for idx, v in enumerate(videos, start=1):
|
| 90 |
+
item = {
|
| 91 |
+
"#": idx,
|
| 92 |
+
"title": v.get("video_title", "-"),
|
| 93 |
+
"description": v.get("description", ""),
|
| 94 |
+
"url": f"""<a style="color: blue" href="https://youtube.com/watch?v={v.get('video_id')}"
|
| 95 |
+
target="_blank">▶️Watch Video</a>""",
|
| 96 |
+
}
|
| 97 |
+
items.append(item)
|
| 98 |
+
return pd.DataFrame(data=items)
|
| 99 |
+
|
| 100 |
+
|
| 101 |
+
def update_table(channel_id, page):
|
| 102 |
+
return fetch_channel_html(channel_id, page, page_size), f"Page {page}"
|
| 103 |
+
|
| 104 |
+
|
| 105 |
+
def prev_page(channel_id, page):
|
| 106 |
+
new_page = max(1, page - 1)
|
| 107 |
+
return (
|
| 108 |
+
fetch_channel_html(channel_id, new_page, page_size),
|
| 109 |
+
f"Page {new_page}",
|
| 110 |
+
new_page,
|
| 111 |
+
)
|
| 112 |
+
|
| 113 |
+
|
| 114 |
+
def next_page(channel_id, page):
|
| 115 |
+
new_page = page + 1
|
| 116 |
+
return (
|
| 117 |
+
fetch_channel_html(channel_id, new_page, page_size),
|
| 118 |
+
f"Page {new_page}",
|
| 119 |
+
new_page,
|
| 120 |
+
)
|
modules/db.py
CHANGED
|
@@ -15,14 +15,14 @@ def get_collection():
|
|
| 15 |
except Exception:
|
| 16 |
collection = client.create_collection("yt_metadata")
|
| 17 |
|
| 18 |
-
# Check dimension mismatch
|
| 19 |
-
try:
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
except Exception:
|
| 23 |
-
|
| 24 |
-
|
| 25 |
-
|
| 26 |
|
| 27 |
return collection
|
| 28 |
|
|
|
|
| 15 |
except Exception:
|
| 16 |
collection = client.create_collection("yt_metadata")
|
| 17 |
|
| 18 |
+
# # Check dimension mismatch
|
| 19 |
+
# try:
|
| 20 |
+
# # quick test query
|
| 21 |
+
# collection.query(query_embeddings=[[0.0] * 1536], n_results=1)
|
| 22 |
+
# except Exception:
|
| 23 |
+
# # Delete and recreate with fresh schema
|
| 24 |
+
# client.delete_collection("yt_metadata")
|
| 25 |
+
# collection = client.create_collection("yt_metadata")
|
| 26 |
|
| 27 |
return collection
|
| 28 |
|
modules/embeddings.py
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from sentence_transformers import SentenceTransformer
|
| 2 |
+
from openai import OpenAI
|
| 3 |
+
from dotenv import load_dotenv
|
| 4 |
+
load_dotenv()
|
| 5 |
+
|
| 6 |
+
|
| 7 |
+
# Step 1: Load SentenceTransformer model
|
| 8 |
+
# Old MiniLM version:
|
| 9 |
+
# model = SentenceTransformer("sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2")
|
| 10 |
+
|
| 11 |
+
# Better MPNet alternative:
|
| 12 |
+
model = SentenceTransformer("sentence-transformers/paraphrase-multilingual-mpnet-base-v2")
|
| 13 |
+
client = OpenAI()
|
| 14 |
+
|
| 15 |
+
def _get_hf_embedding(text: str) -> list:
|
| 16 |
+
return model.encode(text).tolist()
|
| 17 |
+
|
| 18 |
+
def _get_openai_embedding(text: str) -> list:
|
| 19 |
+
response = client.embeddings.create(
|
| 20 |
+
model="text-embedding-3-large", # or "text-embedding-3-large"
|
| 21 |
+
input=text
|
| 22 |
+
)
|
| 23 |
+
return response.data[0].embedding
|
| 24 |
+
|
| 25 |
+
|
| 26 |
+
def get_embedding(text: str) -> list:
|
| 27 |
+
"""
|
| 28 |
+
Switch according to the embedding model you want.
|
| 29 |
+
"""
|
| 30 |
+
# return _get_hf_embedding(text)
|
| 31 |
+
return _get_openai_embedding(text)
|
modules/indexer.py
CHANGED
|
@@ -2,6 +2,8 @@
|
|
| 2 |
from typing import Dict, List
|
| 3 |
from openai import OpenAI
|
| 4 |
|
|
|
|
|
|
|
| 5 |
def index_videos(videos: List[Dict], collection, channel_url: str, batch_size: int = 50):
|
| 6 |
client = OpenAI()
|
| 7 |
|
|
@@ -19,13 +21,7 @@ def index_videos(videos: List[Dict], collection, channel_url: str, batch_size: i
|
|
| 19 |
# Prepare text inputs
|
| 20 |
texts = [f"{vid.get('title', '')} - {vid.get('description', '')}" for vid in batch]
|
| 21 |
|
| 22 |
-
|
| 23 |
-
response = client.embeddings.create(
|
| 24 |
-
input=texts,
|
| 25 |
-
model="text-embedding-3-small"
|
| 26 |
-
)
|
| 27 |
-
|
| 28 |
-
embeddings = [item.embedding for item in response.data]
|
| 29 |
|
| 30 |
# Build metadata + ids
|
| 31 |
metadatas, ids = [], []
|
|
|
|
| 2 |
from typing import Dict, List
|
| 3 |
from openai import OpenAI
|
| 4 |
|
| 5 |
+
from modules.embeddings import get_embedding
|
| 6 |
+
|
| 7 |
def index_videos(videos: List[Dict], collection, channel_url: str, batch_size: int = 50):
|
| 8 |
client = OpenAI()
|
| 9 |
|
|
|
|
| 21 |
# Prepare text inputs
|
| 22 |
texts = [f"{vid.get('title', '')} - {vid.get('description', '')}" for vid in batch]
|
| 23 |
|
| 24 |
+
embeddings = [get_embedding(text) for text in texts]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 25 |
|
| 26 |
# Build metadata + ids
|
| 27 |
metadatas, ids = [], []
|
modules/retriever.py
CHANGED
|
@@ -2,6 +2,8 @@
|
|
| 2 |
from typing import List, Dict
|
| 3 |
from openai import OpenAI
|
| 4 |
|
|
|
|
|
|
|
| 5 |
|
| 6 |
def retrieve_videos(
|
| 7 |
query: str, collection, top_k: int = 3, channel_id: str = None
|
|
@@ -9,11 +11,7 @@ def retrieve_videos(
|
|
| 9 |
client = OpenAI()
|
| 10 |
|
| 11 |
# Create embedding for query
|
| 12 |
-
embedding = (
|
| 13 |
-
client.embeddings.create(input=query, model="text-embedding-3-small")
|
| 14 |
-
.data[0]
|
| 15 |
-
.embedding
|
| 16 |
-
)
|
| 17 |
|
| 18 |
# Query Chroma
|
| 19 |
if not channel_id:
|
|
|
|
| 2 |
from typing import List, Dict
|
| 3 |
from openai import OpenAI
|
| 4 |
|
| 5 |
+
from modules.embeddings import get_embedding
|
| 6 |
+
|
| 7 |
|
| 8 |
def retrieve_videos(
|
| 9 |
query: str, collection, top_k: int = 3, channel_id: str = None
|
|
|
|
| 11 |
client = OpenAI()
|
| 12 |
|
| 13 |
# Create embedding for query
|
| 14 |
+
embedding = get_embedding(query)
|
|
|
|
|
|
|
|
|
|
|
|
|
| 15 |
|
| 16 |
# Query Chroma
|
| 17 |
if not channel_id:
|
pyproject.toml
CHANGED
|
@@ -12,4 +12,5 @@ dependencies = [
|
|
| 12 |
"gradio>=5.44.0",
|
| 13 |
"gradio-modal>=0.0.4",
|
| 14 |
"openai>=1.102.0",
|
|
|
|
| 15 |
]
|
|
|
|
| 12 |
"gradio>=5.44.0",
|
| 13 |
"gradio-modal>=0.0.4",
|
| 14 |
"openai>=1.102.0",
|
| 15 |
+
"sentence-transformers>=5.1.0",
|
| 16 |
]
|
uv.lock
CHANGED
|
@@ -762,6 +762,15 @@ wheels = [
|
|
| 762 |
{ url = "https://files.pythonhosted.org/packages/b3/4a/4175a563579e884192ba6e81725fc0448b042024419be8d83aa8a80a3f44/jiter-0.10.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3aa96f2abba33dc77f79b4cf791840230375f9534e5fac927ccceb58c5e604a5", size = 354213, upload-time = "2025-05-18T19:04:41.894Z" },
|
| 763 |
]
|
| 764 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 765 |
[[package]]
|
| 766 |
name = "jsonschema"
|
| 767 |
version = "4.25.1"
|
|
@@ -933,6 +942,15 @@ wheels = [
|
|
| 933 |
{ url = "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", size = 536198, upload-time = "2023-03-07T16:47:09.197Z" },
|
| 934 |
]
|
| 935 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 936 |
[[package]]
|
| 937 |
name = "numpy"
|
| 938 |
version = "2.3.2"
|
|
@@ -985,6 +1003,132 @@ wheels = [
|
|
| 985 |
{ url = "https://files.pythonhosted.org/packages/c1/9e/1652778bce745a67b5fe05adde60ed362d38eb17d919a540e813d30f6874/numpy-2.3.2-cp314-cp314t-win_arm64.whl", hash = "sha256:092aeb3449833ea9c0bf0089d70c29ae480685dd2377ec9cdbbb620257f84631", size = 10544226, upload-time = "2025-07-24T20:56:34.509Z" },
|
| 986 |
]
|
| 987 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 988 |
[[package]]
|
| 989 |
name = "oauthlib"
|
| 990 |
version = "3.3.1"
|
|
@@ -1568,6 +1712,42 @@ wheels = [
|
|
| 1568 |
{ url = "https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0", size = 26775, upload-time = "2025-01-25T08:48:14.241Z" },
|
| 1569 |
]
|
| 1570 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1571 |
[[package]]
|
| 1572 |
name = "requests"
|
| 1573 |
version = "2.32.5"
|
|
@@ -1725,6 +1905,99 @@ wheels = [
|
|
| 1725 |
{ 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" },
|
| 1726 |
]
|
| 1727 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1728 |
[[package]]
|
| 1729 |
name = "semantic-version"
|
| 1730 |
version = "2.10.0"
|
|
@@ -1734,6 +2007,34 @@ wheels = [
|
|
| 1734 |
{ 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" },
|
| 1735 |
]
|
| 1736 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1737 |
[[package]]
|
| 1738 |
name = "sgmllib3k"
|
| 1739 |
version = "1.0.0"
|
|
@@ -1800,6 +2101,15 @@ wheels = [
|
|
| 1800 |
{ url = "https://files.pythonhosted.org/packages/e5/30/643397144bfbfec6f6ef821f36f33e57d35946c44a2352d3c9f0ae847619/tenacity-9.1.2-py3-none-any.whl", hash = "sha256:f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138", size = 28248, upload-time = "2025-04-02T08:25:07.678Z" },
|
| 1801 |
]
|
| 1802 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1803 |
[[package]]
|
| 1804 |
name = "tokenizers"
|
| 1805 |
version = "0.21.4"
|
|
@@ -1834,6 +2144,45 @@ wheels = [
|
|
| 1834 |
{ 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" },
|
| 1835 |
]
|
| 1836 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1837 |
[[package]]
|
| 1838 |
name = "tqdm"
|
| 1839 |
version = "4.67.1"
|
|
@@ -1846,6 +2195,39 @@ wheels = [
|
|
| 1846 |
{ url = "https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", size = 78540, upload-time = "2024-11-24T20:12:19.698Z" },
|
| 1847 |
]
|
| 1848 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1849 |
[[package]]
|
| 1850 |
name = "typer"
|
| 1851 |
version = "0.16.1"
|
|
@@ -2042,6 +2424,7 @@ dependencies = [
|
|
| 2042 |
{ name = "gradio" },
|
| 2043 |
{ name = "gradio-modal" },
|
| 2044 |
{ name = "openai" },
|
|
|
|
| 2045 |
]
|
| 2046 |
|
| 2047 |
[package.metadata]
|
|
@@ -2053,6 +2436,7 @@ requires-dist = [
|
|
| 2053 |
{ name = "gradio", specifier = ">=5.44.0" },
|
| 2054 |
{ name = "gradio-modal", specifier = ">=0.0.4" },
|
| 2055 |
{ name = "openai", specifier = ">=1.102.0" },
|
|
|
|
| 2056 |
]
|
| 2057 |
|
| 2058 |
[[package]]
|
|
|
|
| 762 |
{ url = "https://files.pythonhosted.org/packages/b3/4a/4175a563579e884192ba6e81725fc0448b042024419be8d83aa8a80a3f44/jiter-0.10.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3aa96f2abba33dc77f79b4cf791840230375f9534e5fac927ccceb58c5e604a5", size = 354213, upload-time = "2025-05-18T19:04:41.894Z" },
|
| 763 |
]
|
| 764 |
|
| 765 |
+
[[package]]
|
| 766 |
+
name = "joblib"
|
| 767 |
+
version = "1.5.2"
|
| 768 |
+
source = { registry = "https://pypi.org/simple" }
|
| 769 |
+
sdist = { url = "https://files.pythonhosted.org/packages/e8/5d/447af5ea094b9e4c4054f82e223ada074c552335b9b4b2d14bd9b35a67c4/joblib-1.5.2.tar.gz", hash = "sha256:3faa5c39054b2f03ca547da9b2f52fde67c06240c31853f306aea97f13647b55", size = 331077, upload-time = "2025-08-27T12:15:46.575Z" }
|
| 770 |
+
wheels = [
|
| 771 |
+
{ url = "https://files.pythonhosted.org/packages/1e/e8/685f47e0d754320684db4425a0967f7d3fa70126bffd76110b7009a0090f/joblib-1.5.2-py3-none-any.whl", hash = "sha256:4e1f0bdbb987e6d843c70cf43714cb276623def372df3c22fe5266b2670bc241", size = 308396, upload-time = "2025-08-27T12:15:45.188Z" },
|
| 772 |
+
]
|
| 773 |
+
|
| 774 |
[[package]]
|
| 775 |
name = "jsonschema"
|
| 776 |
version = "4.25.1"
|
|
|
|
| 942 |
{ url = "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", size = 536198, upload-time = "2023-03-07T16:47:09.197Z" },
|
| 943 |
]
|
| 944 |
|
| 945 |
+
[[package]]
|
| 946 |
+
name = "networkx"
|
| 947 |
+
version = "3.5"
|
| 948 |
+
source = { registry = "https://pypi.org/simple" }
|
| 949 |
+
sdist = { url = "https://files.pythonhosted.org/packages/6c/4f/ccdb8ad3a38e583f214547fd2f7ff1fc160c43a75af88e6aec213404b96a/networkx-3.5.tar.gz", hash = "sha256:d4c6f9cf81f52d69230866796b82afbccdec3db7ae4fbd1b65ea750feed50037", size = 2471065, upload-time = "2025-05-29T11:35:07.804Z" }
|
| 950 |
+
wheels = [
|
| 951 |
+
{ url = "https://files.pythonhosted.org/packages/eb/8d/776adee7bbf76365fdd7f2552710282c79a4ead5d2a46408c9043a2b70ba/networkx-3.5-py3-none-any.whl", hash = "sha256:0030d386a9a06dee3565298b4a734b68589749a544acbb6c412dc9e2489ec6ec", size = 2034406, upload-time = "2025-05-29T11:35:04.961Z" },
|
| 952 |
+
]
|
| 953 |
+
|
| 954 |
[[package]]
|
| 955 |
name = "numpy"
|
| 956 |
version = "2.3.2"
|
|
|
|
| 1003 |
{ url = "https://files.pythonhosted.org/packages/c1/9e/1652778bce745a67b5fe05adde60ed362d38eb17d919a540e813d30f6874/numpy-2.3.2-cp314-cp314t-win_arm64.whl", hash = "sha256:092aeb3449833ea9c0bf0089d70c29ae480685dd2377ec9cdbbb620257f84631", size = 10544226, upload-time = "2025-07-24T20:56:34.509Z" },
|
| 1004 |
]
|
| 1005 |
|
| 1006 |
+
[[package]]
|
| 1007 |
+
name = "nvidia-cublas-cu12"
|
| 1008 |
+
version = "12.8.4.1"
|
| 1009 |
+
source = { registry = "https://pypi.org/simple" }
|
| 1010 |
+
wheels = [
|
| 1011 |
+
{ url = "https://files.pythonhosted.org/packages/dc/61/e24b560ab2e2eaeb3c839129175fb330dfcfc29e5203196e5541a4c44682/nvidia_cublas_cu12-12.8.4.1-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:8ac4e771d5a348c551b2a426eda6193c19aa630236b418086020df5ba9667142", size = 594346921, upload-time = "2025-03-07T01:44:31.254Z" },
|
| 1012 |
+
]
|
| 1013 |
+
|
| 1014 |
+
[[package]]
|
| 1015 |
+
name = "nvidia-cuda-cupti-cu12"
|
| 1016 |
+
version = "12.8.90"
|
| 1017 |
+
source = { registry = "https://pypi.org/simple" }
|
| 1018 |
+
wheels = [
|
| 1019 |
+
{ url = "https://files.pythonhosted.org/packages/f8/02/2adcaa145158bf1a8295d83591d22e4103dbfd821bcaf6f3f53151ca4ffa/nvidia_cuda_cupti_cu12-12.8.90-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ea0cb07ebda26bb9b29ba82cda34849e73c166c18162d3913575b0c9db9a6182", size = 10248621, upload-time = "2025-03-07T01:40:21.213Z" },
|
| 1020 |
+
]
|
| 1021 |
+
|
| 1022 |
+
[[package]]
|
| 1023 |
+
name = "nvidia-cuda-nvrtc-cu12"
|
| 1024 |
+
version = "12.8.93"
|
| 1025 |
+
source = { registry = "https://pypi.org/simple" }
|
| 1026 |
+
wheels = [
|
| 1027 |
+
{ url = "https://files.pythonhosted.org/packages/05/6b/32f747947df2da6994e999492ab306a903659555dddc0fbdeb9d71f75e52/nvidia_cuda_nvrtc_cu12-12.8.93-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:a7756528852ef889772a84c6cd89d41dfa74667e24cca16bb31f8f061e3e9994", size = 88040029, upload-time = "2025-03-07T01:42:13.562Z" },
|
| 1028 |
+
]
|
| 1029 |
+
|
| 1030 |
+
[[package]]
|
| 1031 |
+
name = "nvidia-cuda-runtime-cu12"
|
| 1032 |
+
version = "12.8.90"
|
| 1033 |
+
source = { registry = "https://pypi.org/simple" }
|
| 1034 |
+
wheels = [
|
| 1035 |
+
{ url = "https://files.pythonhosted.org/packages/0d/9b/a997b638fcd068ad6e4d53b8551a7d30fe8b404d6f1804abf1df69838932/nvidia_cuda_runtime_cu12-12.8.90-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:adade8dcbd0edf427b7204d480d6066d33902cab2a4707dcfc48a2d0fd44ab90", size = 954765, upload-time = "2025-03-07T01:40:01.615Z" },
|
| 1036 |
+
]
|
| 1037 |
+
|
| 1038 |
+
[[package]]
|
| 1039 |
+
name = "nvidia-cudnn-cu12"
|
| 1040 |
+
version = "9.10.2.21"
|
| 1041 |
+
source = { registry = "https://pypi.org/simple" }
|
| 1042 |
+
dependencies = [
|
| 1043 |
+
{ name = "nvidia-cublas-cu12" },
|
| 1044 |
+
]
|
| 1045 |
+
wheels = [
|
| 1046 |
+
{ url = "https://files.pythonhosted.org/packages/ba/51/e123d997aa098c61d029f76663dedbfb9bc8dcf8c60cbd6adbe42f76d049/nvidia_cudnn_cu12-9.10.2.21-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:949452be657fa16687d0930933f032835951ef0892b37d2d53824d1a84dc97a8", size = 706758467, upload-time = "2025-06-06T21:54:08.597Z" },
|
| 1047 |
+
]
|
| 1048 |
+
|
| 1049 |
+
[[package]]
|
| 1050 |
+
name = "nvidia-cufft-cu12"
|
| 1051 |
+
version = "11.3.3.83"
|
| 1052 |
+
source = { registry = "https://pypi.org/simple" }
|
| 1053 |
+
dependencies = [
|
| 1054 |
+
{ name = "nvidia-nvjitlink-cu12" },
|
| 1055 |
+
]
|
| 1056 |
+
wheels = [
|
| 1057 |
+
{ url = "https://files.pythonhosted.org/packages/1f/13/ee4e00f30e676b66ae65b4f08cb5bcbb8392c03f54f2d5413ea99a5d1c80/nvidia_cufft_cu12-11.3.3.83-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4d2dd21ec0b88cf61b62e6b43564355e5222e4a3fb394cac0db101f2dd0d4f74", size = 193118695, upload-time = "2025-03-07T01:45:27.821Z" },
|
| 1058 |
+
]
|
| 1059 |
+
|
| 1060 |
+
[[package]]
|
| 1061 |
+
name = "nvidia-cufile-cu12"
|
| 1062 |
+
version = "1.13.1.3"
|
| 1063 |
+
source = { registry = "https://pypi.org/simple" }
|
| 1064 |
+
wheels = [
|
| 1065 |
+
{ url = "https://files.pythonhosted.org/packages/bb/fe/1bcba1dfbfb8d01be8d93f07bfc502c93fa23afa6fd5ab3fc7c1df71038a/nvidia_cufile_cu12-1.13.1.3-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1d069003be650e131b21c932ec3d8969c1715379251f8d23a1860554b1cb24fc", size = 1197834, upload-time = "2025-03-07T01:45:50.723Z" },
|
| 1066 |
+
]
|
| 1067 |
+
|
| 1068 |
+
[[package]]
|
| 1069 |
+
name = "nvidia-curand-cu12"
|
| 1070 |
+
version = "10.3.9.90"
|
| 1071 |
+
source = { registry = "https://pypi.org/simple" }
|
| 1072 |
+
wheels = [
|
| 1073 |
+
{ url = "https://files.pythonhosted.org/packages/fb/aa/6584b56dc84ebe9cf93226a5cde4d99080c8e90ab40f0c27bda7a0f29aa1/nvidia_curand_cu12-10.3.9.90-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:b32331d4f4df5d6eefa0554c565b626c7216f87a06a4f56fab27c3b68a830ec9", size = 63619976, upload-time = "2025-03-07T01:46:23.323Z" },
|
| 1074 |
+
]
|
| 1075 |
+
|
| 1076 |
+
[[package]]
|
| 1077 |
+
name = "nvidia-cusolver-cu12"
|
| 1078 |
+
version = "11.7.3.90"
|
| 1079 |
+
source = { registry = "https://pypi.org/simple" }
|
| 1080 |
+
dependencies = [
|
| 1081 |
+
{ name = "nvidia-cublas-cu12" },
|
| 1082 |
+
{ name = "nvidia-cusparse-cu12" },
|
| 1083 |
+
{ name = "nvidia-nvjitlink-cu12" },
|
| 1084 |
+
]
|
| 1085 |
+
wheels = [
|
| 1086 |
+
{ url = "https://files.pythonhosted.org/packages/85/48/9a13d2975803e8cf2777d5ed57b87a0b6ca2cc795f9a4f59796a910bfb80/nvidia_cusolver_cu12-11.7.3.90-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:4376c11ad263152bd50ea295c05370360776f8c3427b30991df774f9fb26c450", size = 267506905, upload-time = "2025-03-07T01:47:16.273Z" },
|
| 1087 |
+
]
|
| 1088 |
+
|
| 1089 |
+
[[package]]
|
| 1090 |
+
name = "nvidia-cusparse-cu12"
|
| 1091 |
+
version = "12.5.8.93"
|
| 1092 |
+
source = { registry = "https://pypi.org/simple" }
|
| 1093 |
+
dependencies = [
|
| 1094 |
+
{ name = "nvidia-nvjitlink-cu12" },
|
| 1095 |
+
]
|
| 1096 |
+
wheels = [
|
| 1097 |
+
{ url = "https://files.pythonhosted.org/packages/c2/f5/e1854cb2f2bcd4280c44736c93550cc300ff4b8c95ebe370d0aa7d2b473d/nvidia_cusparse_cu12-12.5.8.93-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1ec05d76bbbd8b61b06a80e1eaf8cf4959c3d4ce8e711b65ebd0443bb0ebb13b", size = 288216466, upload-time = "2025-03-07T01:48:13.779Z" },
|
| 1098 |
+
]
|
| 1099 |
+
|
| 1100 |
+
[[package]]
|
| 1101 |
+
name = "nvidia-cusparselt-cu12"
|
| 1102 |
+
version = "0.7.1"
|
| 1103 |
+
source = { registry = "https://pypi.org/simple" }
|
| 1104 |
+
wheels = [
|
| 1105 |
+
{ url = "https://files.pythonhosted.org/packages/56/79/12978b96bd44274fe38b5dde5cfb660b1d114f70a65ef962bcbbed99b549/nvidia_cusparselt_cu12-0.7.1-py3-none-manylinux2014_x86_64.whl", hash = "sha256:f1bb701d6b930d5a7cea44c19ceb973311500847f81b634d802b7b539dc55623", size = 287193691, upload-time = "2025-02-26T00:15:44.104Z" },
|
| 1106 |
+
]
|
| 1107 |
+
|
| 1108 |
+
[[package]]
|
| 1109 |
+
name = "nvidia-nccl-cu12"
|
| 1110 |
+
version = "2.27.3"
|
| 1111 |
+
source = { registry = "https://pypi.org/simple" }
|
| 1112 |
+
wheels = [
|
| 1113 |
+
{ url = "https://files.pythonhosted.org/packages/5c/5b/4e4fff7bad39adf89f735f2bc87248c81db71205b62bcc0d5ca5b606b3c3/nvidia_nccl_cu12-2.27.3-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:adf27ccf4238253e0b826bce3ff5fa532d65fc42322c8bfdfaf28024c0fbe039", size = 322364134, upload-time = "2025-06-03T21:58:04.013Z" },
|
| 1114 |
+
]
|
| 1115 |
+
|
| 1116 |
+
[[package]]
|
| 1117 |
+
name = "nvidia-nvjitlink-cu12"
|
| 1118 |
+
version = "12.8.93"
|
| 1119 |
+
source = { registry = "https://pypi.org/simple" }
|
| 1120 |
+
wheels = [
|
| 1121 |
+
{ url = "https://files.pythonhosted.org/packages/f6/74/86a07f1d0f42998ca31312f998bd3b9a7eff7f52378f4f270c8679c77fb9/nvidia_nvjitlink_cu12-12.8.93-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:81ff63371a7ebd6e6451970684f916be2eab07321b73c9d244dc2b4da7f73b88", size = 39254836, upload-time = "2025-03-07T01:49:55.661Z" },
|
| 1122 |
+
]
|
| 1123 |
+
|
| 1124 |
+
[[package]]
|
| 1125 |
+
name = "nvidia-nvtx-cu12"
|
| 1126 |
+
version = "12.8.90"
|
| 1127 |
+
source = { registry = "https://pypi.org/simple" }
|
| 1128 |
+
wheels = [
|
| 1129 |
+
{ url = "https://files.pythonhosted.org/packages/a2/eb/86626c1bbc2edb86323022371c39aa48df6fd8b0a1647bc274577f72e90b/nvidia_nvtx_cu12-12.8.90-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5b17e2001cc0d751a5bc2c6ec6d26ad95913324a4adb86788c944f8ce9ba441f", size = 89954, upload-time = "2025-03-07T01:42:44.131Z" },
|
| 1130 |
+
]
|
| 1131 |
+
|
| 1132 |
[[package]]
|
| 1133 |
name = "oauthlib"
|
| 1134 |
version = "3.3.1"
|
|
|
|
| 1712 |
{ url = "https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0", size = 26775, upload-time = "2025-01-25T08:48:14.241Z" },
|
| 1713 |
]
|
| 1714 |
|
| 1715 |
+
[[package]]
|
| 1716 |
+
name = "regex"
|
| 1717 |
+
version = "2025.7.34"
|
| 1718 |
+
source = { registry = "https://pypi.org/simple" }
|
| 1719 |
+
sdist = { url = "https://files.pythonhosted.org/packages/0b/de/e13fa6dc61d78b30ba47481f99933a3b49a57779d625c392d8036770a60d/regex-2025.7.34.tar.gz", hash = "sha256:9ead9765217afd04a86822dfcd4ed2747dfe426e887da413b15ff0ac2457e21a", size = 400714, upload-time = "2025-07-31T00:21:16.262Z" }
|
| 1720 |
+
wheels = [
|
| 1721 |
+
{ url = "https://files.pythonhosted.org/packages/15/16/b709b2119975035169a25aa8e4940ca177b1a2e25e14f8d996d09130368e/regex-2025.7.34-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:c3c9740a77aeef3f5e3aaab92403946a8d34437db930a0280e7e81ddcada61f5", size = 485334, upload-time = "2025-07-31T00:19:56.58Z" },
|
| 1722 |
+
{ url = "https://files.pythonhosted.org/packages/94/a6/c09136046be0595f0331bc58a0e5f89c2d324cf734e0b0ec53cf4b12a636/regex-2025.7.34-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:69ed3bc611540f2ea70a4080f853741ec698be556b1df404599f8724690edbcd", size = 289942, upload-time = "2025-07-31T00:19:57.943Z" },
|
| 1723 |
+
{ url = "https://files.pythonhosted.org/packages/36/91/08fc0fd0f40bdfb0e0df4134ee37cfb16e66a1044ac56d36911fd01c69d2/regex-2025.7.34-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d03c6f9dcd562c56527c42b8530aad93193e0b3254a588be1f2ed378cdfdea1b", size = 285991, upload-time = "2025-07-31T00:19:59.837Z" },
|
| 1724 |
+
{ url = "https://files.pythonhosted.org/packages/be/2f/99dc8f6f756606f0c214d14c7b6c17270b6bbe26d5c1f05cde9dbb1c551f/regex-2025.7.34-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6164b1d99dee1dfad33f301f174d8139d4368a9fb50bf0a3603b2eaf579963ad", size = 797415, upload-time = "2025-07-31T00:20:01.668Z" },
|
| 1725 |
+
{ url = "https://files.pythonhosted.org/packages/62/cf/2fcdca1110495458ba4e95c52ce73b361cf1cafd8a53b5c31542cde9a15b/regex-2025.7.34-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1e4f4f62599b8142362f164ce776f19d79bdd21273e86920a7b604a4275b4f59", size = 862487, upload-time = "2025-07-31T00:20:03.142Z" },
|
| 1726 |
+
{ url = "https://files.pythonhosted.org/packages/90/38/899105dd27fed394e3fae45607c1983e138273ec167e47882fc401f112b9/regex-2025.7.34-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:72a26dcc6a59c057b292f39d41465d8233a10fd69121fa24f8f43ec6294e5415", size = 910717, upload-time = "2025-07-31T00:20:04.727Z" },
|
| 1727 |
+
{ url = "https://files.pythonhosted.org/packages/ee/f6/4716198dbd0bcc9c45625ac4c81a435d1c4d8ad662e8576dac06bab35b17/regex-2025.7.34-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d5273fddf7a3e602695c92716c420c377599ed3c853ea669c1fe26218867002f", size = 801943, upload-time = "2025-07-31T00:20:07.1Z" },
|
| 1728 |
+
{ url = "https://files.pythonhosted.org/packages/40/5d/cff8896d27e4e3dd11dd72ac78797c7987eb50fe4debc2c0f2f1682eb06d/regex-2025.7.34-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c1844be23cd40135b3a5a4dd298e1e0c0cb36757364dd6cdc6025770363e06c1", size = 786664, upload-time = "2025-07-31T00:20:08.818Z" },
|
| 1729 |
+
{ url = "https://files.pythonhosted.org/packages/10/29/758bf83cf7b4c34f07ac3423ea03cee3eb3176941641e4ccc05620f6c0b8/regex-2025.7.34-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:dde35e2afbbe2272f8abee3b9fe6772d9b5a07d82607b5788e8508974059925c", size = 856457, upload-time = "2025-07-31T00:20:10.328Z" },
|
| 1730 |
+
{ url = "https://files.pythonhosted.org/packages/d7/30/c19d212b619963c5b460bfed0ea69a092c6a43cba52a973d46c27b3e2975/regex-2025.7.34-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:f3f6e8e7af516a7549412ce57613e859c3be27d55341a894aacaa11703a4c31a", size = 849008, upload-time = "2025-07-31T00:20:11.823Z" },
|
| 1731 |
+
{ url = "https://files.pythonhosted.org/packages/9e/b8/3c35da3b12c87e3cc00010ef6c3a4ae787cff0bc381aa3d251def219969a/regex-2025.7.34-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:469142fb94a869beb25b5f18ea87646d21def10fbacb0bcb749224f3509476f0", size = 788101, upload-time = "2025-07-31T00:20:13.729Z" },
|
| 1732 |
+
{ url = "https://files.pythonhosted.org/packages/47/80/2f46677c0b3c2b723b2c358d19f9346e714113865da0f5f736ca1a883bde/regex-2025.7.34-cp313-cp313-win32.whl", hash = "sha256:da7507d083ee33ccea1310447410c27ca11fb9ef18c95899ca57ff60a7e4d8f1", size = 264401, upload-time = "2025-07-31T00:20:15.233Z" },
|
| 1733 |
+
{ url = "https://files.pythonhosted.org/packages/be/fa/917d64dd074682606a003cba33585c28138c77d848ef72fc77cbb1183849/regex-2025.7.34-cp313-cp313-win_amd64.whl", hash = "sha256:9d644de5520441e5f7e2db63aec2748948cc39ed4d7a87fd5db578ea4043d997", size = 275368, upload-time = "2025-07-31T00:20:16.711Z" },
|
| 1734 |
+
{ url = "https://files.pythonhosted.org/packages/65/cd/f94383666704170a2154a5df7b16be28f0c27a266bffcd843e58bc84120f/regex-2025.7.34-cp313-cp313-win_arm64.whl", hash = "sha256:7bf1c5503a9f2cbd2f52d7e260acb3131b07b6273c470abb78568174fe6bde3f", size = 268482, upload-time = "2025-07-31T00:20:18.189Z" },
|
| 1735 |
+
{ url = "https://files.pythonhosted.org/packages/ac/23/6376f3a23cf2f3c00514b1cdd8c990afb4dfbac3cb4a68b633c6b7e2e307/regex-2025.7.34-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:8283afe7042d8270cecf27cca558873168e771183d4d593e3c5fe5f12402212a", size = 485385, upload-time = "2025-07-31T00:20:19.692Z" },
|
| 1736 |
+
{ url = "https://files.pythonhosted.org/packages/73/5b/6d4d3a0b4d312adbfd6d5694c8dddcf1396708976dd87e4d00af439d962b/regex-2025.7.34-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:6c053f9647e3421dd2f5dff8172eb7b4eec129df9d1d2f7133a4386319b47435", size = 289788, upload-time = "2025-07-31T00:20:21.941Z" },
|
| 1737 |
+
{ url = "https://files.pythonhosted.org/packages/92/71/5862ac9913746e5054d01cb9fb8125b3d0802c0706ef547cae1e7f4428fa/regex-2025.7.34-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a16dd56bbcb7d10e62861c3cd000290ddff28ea142ffb5eb3470f183628011ac", size = 286136, upload-time = "2025-07-31T00:20:26.146Z" },
|
| 1738 |
+
{ url = "https://files.pythonhosted.org/packages/27/df/5b505dc447eb71278eba10d5ec940769ca89c1af70f0468bfbcb98035dc2/regex-2025.7.34-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:69c593ff5a24c0d5c1112b0df9b09eae42b33c014bdca7022d6523b210b69f72", size = 797753, upload-time = "2025-07-31T00:20:27.919Z" },
|
| 1739 |
+
{ url = "https://files.pythonhosted.org/packages/86/38/3e3dc953d13998fa047e9a2414b556201dbd7147034fbac129392363253b/regex-2025.7.34-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:98d0ce170fcde1a03b5df19c5650db22ab58af375aaa6ff07978a85c9f250f0e", size = 863263, upload-time = "2025-07-31T00:20:29.803Z" },
|
| 1740 |
+
{ url = "https://files.pythonhosted.org/packages/68/e5/3ff66b29dde12f5b874dda2d9dec7245c2051f2528d8c2a797901497f140/regex-2025.7.34-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d72765a4bff8c43711d5b0f5b452991a9947853dfa471972169b3cc0ba1d0751", size = 910103, upload-time = "2025-07-31T00:20:31.313Z" },
|
| 1741 |
+
{ url = "https://files.pythonhosted.org/packages/9e/fe/14176f2182125977fba3711adea73f472a11f3f9288c1317c59cd16ad5e6/regex-2025.7.34-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4494f8fd95a77eb434039ad8460e64d57baa0434f1395b7da44015bef650d0e4", size = 801709, upload-time = "2025-07-31T00:20:33.323Z" },
|
| 1742 |
+
{ url = "https://files.pythonhosted.org/packages/5a/0d/80d4e66ed24f1ba876a9e8e31b709f9fd22d5c266bf5f3ab3c1afe683d7d/regex-2025.7.34-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4f42b522259c66e918a0121a12429b2abcf696c6f967fa37bdc7b72e61469f98", size = 786726, upload-time = "2025-07-31T00:20:35.252Z" },
|
| 1743 |
+
{ url = "https://files.pythonhosted.org/packages/12/75/c3ebb30e04a56c046f5c85179dc173818551037daae2c0c940c7b19152cb/regex-2025.7.34-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:aaef1f056d96a0a5d53ad47d019d5b4c66fe4be2da87016e0d43b7242599ffc7", size = 857306, upload-time = "2025-07-31T00:20:37.12Z" },
|
| 1744 |
+
{ url = "https://files.pythonhosted.org/packages/b1/b2/a4dc5d8b14f90924f27f0ac4c4c4f5e195b723be98adecc884f6716614b6/regex-2025.7.34-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:656433e5b7dccc9bc0da6312da8eb897b81f5e560321ec413500e5367fcd5d47", size = 848494, upload-time = "2025-07-31T00:20:38.818Z" },
|
| 1745 |
+
{ url = "https://files.pythonhosted.org/packages/0d/21/9ac6e07a4c5e8646a90b56b61f7e9dac11ae0747c857f91d3d2bc7c241d9/regex-2025.7.34-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e91eb2c62c39705e17b4d42d4b86c4e86c884c0d15d9c5a47d0835f8387add8e", size = 787850, upload-time = "2025-07-31T00:20:40.478Z" },
|
| 1746 |
+
{ url = "https://files.pythonhosted.org/packages/be/6c/d51204e28e7bc54f9a03bb799b04730d7e54ff2718862b8d4e09e7110a6a/regex-2025.7.34-cp314-cp314-win32.whl", hash = "sha256:f978ddfb6216028c8f1d6b0f7ef779949498b64117fc35a939022f67f810bdcb", size = 269730, upload-time = "2025-07-31T00:20:42.253Z" },
|
| 1747 |
+
{ url = "https://files.pythonhosted.org/packages/74/52/a7e92d02fa1fdef59d113098cb9f02c5d03289a0e9f9e5d4d6acccd10677/regex-2025.7.34-cp314-cp314-win_amd64.whl", hash = "sha256:4b7dc33b9b48fb37ead12ffc7bdb846ac72f99a80373c4da48f64b373a7abeae", size = 278640, upload-time = "2025-07-31T00:20:44.42Z" },
|
| 1748 |
+
{ url = "https://files.pythonhosted.org/packages/d1/78/a815529b559b1771080faa90c3ab401730661f99d495ab0071649f139ebd/regex-2025.7.34-cp314-cp314-win_arm64.whl", hash = "sha256:4b8c4d39f451e64809912c82392933d80fe2e4a87eeef8859fcc5380d0173c64", size = 271757, upload-time = "2025-07-31T00:20:46.355Z" },
|
| 1749 |
+
]
|
| 1750 |
+
|
| 1751 |
[[package]]
|
| 1752 |
name = "requests"
|
| 1753 |
version = "2.32.5"
|
|
|
|
| 1905 |
{ 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" },
|
| 1906 |
]
|
| 1907 |
|
| 1908 |
+
[[package]]
|
| 1909 |
+
name = "safetensors"
|
| 1910 |
+
version = "0.6.2"
|
| 1911 |
+
source = { registry = "https://pypi.org/simple" }
|
| 1912 |
+
sdist = { url = "https://files.pythonhosted.org/packages/ac/cc/738f3011628920e027a11754d9cae9abec1aed00f7ae860abbf843755233/safetensors-0.6.2.tar.gz", hash = "sha256:43ff2aa0e6fa2dc3ea5524ac7ad93a9839256b8703761e76e2d0b2a3fa4f15d9", size = 197968, upload-time = "2025-08-08T13:13:58.654Z" }
|
| 1913 |
+
wheels = [
|
| 1914 |
+
{ url = "https://files.pythonhosted.org/packages/4d/b1/3f5fd73c039fc87dba3ff8b5d528bfc5a32b597fea8e7a6a4800343a17c7/safetensors-0.6.2-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:9c85ede8ec58f120bad982ec47746981e210492a6db876882aa021446af8ffba", size = 454797, upload-time = "2025-08-08T13:13:52.066Z" },
|
| 1915 |
+
{ url = "https://files.pythonhosted.org/packages/8c/c9/bb114c158540ee17907ec470d01980957fdaf87b4aa07914c24eba87b9c6/safetensors-0.6.2-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:d6675cf4b39c98dbd7d940598028f3742e0375a6b4d4277e76beb0c35f4b843b", size = 432206, upload-time = "2025-08-08T13:13:50.931Z" },
|
| 1916 |
+
{ url = "https://files.pythonhosted.org/packages/d3/8e/f70c34e47df3110e8e0bb268d90db8d4be8958a54ab0336c9be4fe86dac8/safetensors-0.6.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d2d2b3ce1e2509c68932ca03ab8f20570920cd9754b05063d4368ee52833ecd", size = 473261, upload-time = "2025-08-08T13:13:41.259Z" },
|
| 1917 |
+
{ url = "https://files.pythonhosted.org/packages/2a/f5/be9c6a7c7ef773e1996dc214e73485286df1836dbd063e8085ee1976f9cb/safetensors-0.6.2-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:93de35a18f46b0f5a6a1f9e26d91b442094f2df02e9fd7acf224cfec4238821a", size = 485117, upload-time = "2025-08-08T13:13:43.506Z" },
|
| 1918 |
+
{ url = "https://files.pythonhosted.org/packages/c9/55/23f2d0a2c96ed8665bf17a30ab4ce5270413f4d74b6d87dd663258b9af31/safetensors-0.6.2-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:89a89b505f335640f9120fac65ddeb83e40f1fd081cb8ed88b505bdccec8d0a1", size = 616154, upload-time = "2025-08-08T13:13:45.096Z" },
|
| 1919 |
+
{ url = "https://files.pythonhosted.org/packages/98/c6/affb0bd9ce02aa46e7acddbe087912a04d953d7a4d74b708c91b5806ef3f/safetensors-0.6.2-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fc4d0d0b937e04bdf2ae6f70cd3ad51328635fe0e6214aa1fc811f3b576b3bda", size = 520713, upload-time = "2025-08-08T13:13:46.25Z" },
|
| 1920 |
+
{ url = "https://files.pythonhosted.org/packages/fe/5d/5a514d7b88e310c8b146e2404e0dc161282e78634d9358975fd56dfd14be/safetensors-0.6.2-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8045db2c872db8f4cbe3faa0495932d89c38c899c603f21e9b6486951a5ecb8f", size = 485835, upload-time = "2025-08-08T13:13:49.373Z" },
|
| 1921 |
+
{ url = "https://files.pythonhosted.org/packages/7a/7b/4fc3b2ba62c352b2071bea9cfbad330fadda70579f617506ae1a2f129cab/safetensors-0.6.2-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:81e67e8bab9878bb568cffbc5f5e655adb38d2418351dc0859ccac158f753e19", size = 521503, upload-time = "2025-08-08T13:13:47.651Z" },
|
| 1922 |
+
{ url = "https://files.pythonhosted.org/packages/5a/50/0057e11fe1f3cead9254315a6c106a16dd4b1a19cd247f7cc6414f6b7866/safetensors-0.6.2-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:b0e4d029ab0a0e0e4fdf142b194514695b1d7d3735503ba700cf36d0fc7136ce", size = 652256, upload-time = "2025-08-08T13:13:53.167Z" },
|
| 1923 |
+
{ url = "https://files.pythonhosted.org/packages/e9/29/473f789e4ac242593ac1656fbece6e1ecd860bb289e635e963667807afe3/safetensors-0.6.2-cp38-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:fa48268185c52bfe8771e46325a1e21d317207bcabcb72e65c6e28e9ffeb29c7", size = 747281, upload-time = "2025-08-08T13:13:54.656Z" },
|
| 1924 |
+
{ url = "https://files.pythonhosted.org/packages/68/52/f7324aad7f2df99e05525c84d352dc217e0fa637a4f603e9f2eedfbe2c67/safetensors-0.6.2-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:d83c20c12c2d2f465997c51b7ecb00e407e5f94d7dec3ea0cc11d86f60d3fde5", size = 692286, upload-time = "2025-08-08T13:13:55.884Z" },
|
| 1925 |
+
{ url = "https://files.pythonhosted.org/packages/ad/fe/cad1d9762868c7c5dc70c8620074df28ebb1a8e4c17d4c0cb031889c457e/safetensors-0.6.2-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:d944cea65fad0ead848b6ec2c37cc0b197194bec228f8020054742190e9312ac", size = 655957, upload-time = "2025-08-08T13:13:57.029Z" },
|
| 1926 |
+
{ url = "https://files.pythonhosted.org/packages/59/a7/e2158e17bbe57d104f0abbd95dff60dda916cf277c9f9663b4bf9bad8b6e/safetensors-0.6.2-cp38-abi3-win32.whl", hash = "sha256:cab75ca7c064d3911411461151cb69380c9225798a20e712b102edda2542ddb1", size = 308926, upload-time = "2025-08-08T13:14:01.095Z" },
|
| 1927 |
+
{ url = "https://files.pythonhosted.org/packages/2c/c3/c0be1135726618dc1e28d181b8c442403d8dbb9e273fd791de2d4384bcdd/safetensors-0.6.2-cp38-abi3-win_amd64.whl", hash = "sha256:c7b214870df923cbc1593c3faee16bec59ea462758699bd3fee399d00aac072c", size = 320192, upload-time = "2025-08-08T13:13:59.467Z" },
|
| 1928 |
+
]
|
| 1929 |
+
|
| 1930 |
+
[[package]]
|
| 1931 |
+
name = "scikit-learn"
|
| 1932 |
+
version = "1.7.1"
|
| 1933 |
+
source = { registry = "https://pypi.org/simple" }
|
| 1934 |
+
dependencies = [
|
| 1935 |
+
{ name = "joblib" },
|
| 1936 |
+
{ name = "numpy" },
|
| 1937 |
+
{ name = "scipy" },
|
| 1938 |
+
{ name = "threadpoolctl" },
|
| 1939 |
+
]
|
| 1940 |
+
sdist = { url = "https://files.pythonhosted.org/packages/41/84/5f4af978fff619706b8961accac84780a6d298d82a8873446f72edb4ead0/scikit_learn-1.7.1.tar.gz", hash = "sha256:24b3f1e976a4665aa74ee0fcaac2b8fccc6ae77c8e07ab25da3ba6d3292b9802", size = 7190445, upload-time = "2025-07-18T08:01:54.5Z" }
|
| 1941 |
+
wheels = [
|
| 1942 |
+
{ url = "https://files.pythonhosted.org/packages/52/f8/e0533303f318a0f37b88300d21f79b6ac067188d4824f1047a37214ab718/scikit_learn-1.7.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b7839687fa46d02e01035ad775982f2470be2668e13ddd151f0f55a5bf123bae", size = 9213143, upload-time = "2025-07-18T08:01:32.942Z" },
|
| 1943 |
+
{ url = "https://files.pythonhosted.org/packages/71/f3/f1df377d1bdfc3e3e2adc9c119c238b182293e6740df4cbeac6de2cc3e23/scikit_learn-1.7.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:a10f276639195a96c86aa572ee0698ad64ee939a7b042060b98bd1930c261d10", size = 8591977, upload-time = "2025-07-18T08:01:34.967Z" },
|
| 1944 |
+
{ url = "https://files.pythonhosted.org/packages/99/72/c86a4cd867816350fe8dee13f30222340b9cd6b96173955819a5561810c5/scikit_learn-1.7.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:13679981fdaebc10cc4c13c43344416a86fcbc61449cb3e6517e1df9d12c8309", size = 9436142, upload-time = "2025-07-18T08:01:37.397Z" },
|
| 1945 |
+
{ url = "https://files.pythonhosted.org/packages/e8/66/277967b29bd297538dc7a6ecfb1a7dce751beabd0d7f7a2233be7a4f7832/scikit_learn-1.7.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4f1262883c6a63f067a980a8cdd2d2e7f2513dddcef6a9eaada6416a7a7cbe43", size = 9282996, upload-time = "2025-07-18T08:01:39.721Z" },
|
| 1946 |
+
{ url = "https://files.pythonhosted.org/packages/e2/47/9291cfa1db1dae9880420d1e07dbc7e8dd4a7cdbc42eaba22512e6bde958/scikit_learn-1.7.1-cp313-cp313-win_amd64.whl", hash = "sha256:ca6d31fb10e04d50bfd2b50d66744729dbb512d4efd0223b864e2fdbfc4cee11", size = 8707418, upload-time = "2025-07-18T08:01:42.124Z" },
|
| 1947 |
+
{ url = "https://files.pythonhosted.org/packages/61/95/45726819beccdaa34d3362ea9b2ff9f2b5d3b8bf721bd632675870308ceb/scikit_learn-1.7.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:781674d096303cfe3d351ae6963ff7c958db61cde3421cd490e3a5a58f2a94ae", size = 9561466, upload-time = "2025-07-18T08:01:44.195Z" },
|
| 1948 |
+
{ url = "https://files.pythonhosted.org/packages/ee/1c/6f4b3344805de783d20a51eb24d4c9ad4b11a7f75c1801e6ec6d777361fd/scikit_learn-1.7.1-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:10679f7f125fe7ecd5fad37dd1aa2daae7e3ad8df7f3eefa08901b8254b3e12c", size = 9040467, upload-time = "2025-07-18T08:01:46.671Z" },
|
| 1949 |
+
{ url = "https://files.pythonhosted.org/packages/6f/80/abe18fe471af9f1d181904203d62697998b27d9b62124cd281d740ded2f9/scikit_learn-1.7.1-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1f812729e38c8cb37f760dce71a9b83ccfb04f59b3dca7c6079dcdc60544fa9e", size = 9532052, upload-time = "2025-07-18T08:01:48.676Z" },
|
| 1950 |
+
{ url = "https://files.pythonhosted.org/packages/14/82/b21aa1e0c4cee7e74864d3a5a721ab8fcae5ca55033cb6263dca297ed35b/scikit_learn-1.7.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:88e1a20131cf741b84b89567e1717f27a2ced228e0f29103426102bc2e3b8ef7", size = 9361575, upload-time = "2025-07-18T08:01:50.639Z" },
|
| 1951 |
+
{ url = "https://files.pythonhosted.org/packages/f2/20/f4777fcd5627dc6695fa6b92179d0edb7a3ac1b91bcd9a1c7f64fa7ade23/scikit_learn-1.7.1-cp313-cp313t-win_amd64.whl", hash = "sha256:b1bd1d919210b6a10b7554b717c9000b5485aa95a1d0f177ae0d7ee8ec750da5", size = 9277310, upload-time = "2025-07-18T08:01:52.547Z" },
|
| 1952 |
+
]
|
| 1953 |
+
|
| 1954 |
+
[[package]]
|
| 1955 |
+
name = "scipy"
|
| 1956 |
+
version = "1.16.1"
|
| 1957 |
+
source = { registry = "https://pypi.org/simple" }
|
| 1958 |
+
dependencies = [
|
| 1959 |
+
{ name = "numpy" },
|
| 1960 |
+
]
|
| 1961 |
+
sdist = { url = "https://files.pythonhosted.org/packages/f5/4a/b927028464795439faec8eaf0b03b011005c487bb2d07409f28bf30879c4/scipy-1.16.1.tar.gz", hash = "sha256:44c76f9e8b6e8e488a586190ab38016e4ed2f8a038af7cd3defa903c0a2238b3", size = 30580861, upload-time = "2025-07-27T16:33:30.834Z" }
|
| 1962 |
+
wheels = [
|
| 1963 |
+
{ url = "https://files.pythonhosted.org/packages/93/0b/b5c99382b839854a71ca9482c684e3472badc62620287cbbdab499b75ce6/scipy-1.16.1-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:5451606823a5e73dfa621a89948096c6528e2896e40b39248295d3a0138d594f", size = 36533717, upload-time = "2025-07-27T16:28:51.706Z" },
|
| 1964 |
+
{ url = "https://files.pythonhosted.org/packages/eb/e5/69ab2771062c91e23e07c12e7d5033a6b9b80b0903ee709c3c36b3eb520c/scipy-1.16.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:89728678c5ca5abd610aee148c199ac1afb16e19844401ca97d43dc548a354eb", size = 28570009, upload-time = "2025-07-27T16:28:57.017Z" },
|
| 1965 |
+
{ url = "https://files.pythonhosted.org/packages/f4/69/bd75dbfdd3cf524f4d753484d723594aed62cfaac510123e91a6686d520b/scipy-1.16.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:e756d688cb03fd07de0fffad475649b03cb89bee696c98ce508b17c11a03f95c", size = 20841942, upload-time = "2025-07-27T16:29:01.152Z" },
|
| 1966 |
+
{ url = "https://files.pythonhosted.org/packages/ea/74/add181c87663f178ba7d6144b370243a87af8476664d5435e57d599e6874/scipy-1.16.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:5aa2687b9935da3ed89c5dbed5234576589dd28d0bf7cd237501ccfbdf1ad608", size = 23498507, upload-time = "2025-07-27T16:29:05.202Z" },
|
| 1967 |
+
{ url = "https://files.pythonhosted.org/packages/1d/74/ece2e582a0d9550cee33e2e416cc96737dce423a994d12bbe59716f47ff1/scipy-1.16.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0851f6a1e537fe9399f35986897e395a1aa61c574b178c0d456be5b1a0f5ca1f", size = 33286040, upload-time = "2025-07-27T16:29:10.201Z" },
|
| 1968 |
+
{ url = "https://files.pythonhosted.org/packages/e4/82/08e4076df538fb56caa1d489588d880ec7c52d8273a606bb54d660528f7c/scipy-1.16.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fedc2cbd1baed37474b1924c331b97bdff611d762c196fac1a9b71e67b813b1b", size = 35176096, upload-time = "2025-07-27T16:29:17.091Z" },
|
| 1969 |
+
{ url = "https://files.pythonhosted.org/packages/fa/79/cd710aab8c921375711a8321c6be696e705a120e3011a643efbbcdeeabcc/scipy-1.16.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:2ef500e72f9623a6735769e4b93e9dcb158d40752cdbb077f305487e3e2d1f45", size = 35490328, upload-time = "2025-07-27T16:29:22.928Z" },
|
| 1970 |
+
{ url = "https://files.pythonhosted.org/packages/71/73/e9cc3d35ee4526d784520d4494a3e1ca969b071fb5ae5910c036a375ceec/scipy-1.16.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:978d8311674b05a8f7ff2ea6c6bce5d8b45a0cb09d4c5793e0318f448613ea65", size = 37939921, upload-time = "2025-07-27T16:29:29.108Z" },
|
| 1971 |
+
{ url = "https://files.pythonhosted.org/packages/21/12/c0efd2941f01940119b5305c375ae5c0fcb7ec193f806bd8f158b73a1782/scipy-1.16.1-cp313-cp313-win_amd64.whl", hash = "sha256:81929ed0fa7a5713fcdd8b2e6f73697d3b4c4816d090dd34ff937c20fa90e8ab", size = 38479462, upload-time = "2025-07-27T16:30:24.078Z" },
|
| 1972 |
+
{ url = "https://files.pythonhosted.org/packages/7a/19/c3d08b675260046a991040e1ea5d65f91f40c7df1045fffff412dcfc6765/scipy-1.16.1-cp313-cp313t-macosx_10_14_x86_64.whl", hash = "sha256:bcc12db731858abda693cecdb3bdc9e6d4bd200213f49d224fe22df82687bdd6", size = 36938832, upload-time = "2025-07-27T16:29:35.057Z" },
|
| 1973 |
+
{ url = "https://files.pythonhosted.org/packages/81/f2/ce53db652c033a414a5b34598dba6b95f3d38153a2417c5a3883da429029/scipy-1.16.1-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:744d977daa4becb9fc59135e75c069f8d301a87d64f88f1e602a9ecf51e77b27", size = 29093084, upload-time = "2025-07-27T16:29:40.201Z" },
|
| 1974 |
+
{ url = "https://files.pythonhosted.org/packages/a9/ae/7a10ff04a7dc15f9057d05b33737ade244e4bd195caa3f7cc04d77b9e214/scipy-1.16.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:dc54f76ac18073bcecffb98d93f03ed6b81a92ef91b5d3b135dcc81d55a724c7", size = 21365098, upload-time = "2025-07-27T16:29:44.295Z" },
|
| 1975 |
+
{ url = "https://files.pythonhosted.org/packages/36/ac/029ff710959932ad3c2a98721b20b405f05f752f07344622fd61a47c5197/scipy-1.16.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:367d567ee9fc1e9e2047d31f39d9d6a7a04e0710c86e701e053f237d14a9b4f6", size = 23896858, upload-time = "2025-07-27T16:29:48.784Z" },
|
| 1976 |
+
{ url = "https://files.pythonhosted.org/packages/71/13/d1ef77b6bd7898720e1f0b6b3743cb945f6c3cafa7718eaac8841035ab60/scipy-1.16.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4cf5785e44e19dcd32a0e4807555e1e9a9b8d475c6afff3d21c3c543a6aa84f4", size = 33438311, upload-time = "2025-07-27T16:29:54.164Z" },
|
| 1977 |
+
{ url = "https://files.pythonhosted.org/packages/2d/e0/e64a6821ffbb00b4c5b05169f1c1fddb4800e9307efe3db3788995a82a2c/scipy-1.16.1-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3d0b80fb26d3e13a794c71d4b837e2a589d839fd574a6bbb4ee1288c213ad4a3", size = 35279542, upload-time = "2025-07-27T16:30:00.249Z" },
|
| 1978 |
+
{ url = "https://files.pythonhosted.org/packages/57/59/0dc3c8b43e118f1e4ee2b798dcc96ac21bb20014e5f1f7a8e85cc0653bdb/scipy-1.16.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:8503517c44c18d1030d666cb70aaac1cc8913608816e06742498833b128488b7", size = 35667665, upload-time = "2025-07-27T16:30:05.916Z" },
|
| 1979 |
+
{ url = "https://files.pythonhosted.org/packages/45/5f/844ee26e34e2f3f9f8febb9343748e72daeaec64fe0c70e9bf1ff84ec955/scipy-1.16.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:30cc4bb81c41831ecfd6dc450baf48ffd80ef5aed0f5cf3ea775740e80f16ecc", size = 38045210, upload-time = "2025-07-27T16:30:11.655Z" },
|
| 1980 |
+
{ url = "https://files.pythonhosted.org/packages/8d/d7/210f2b45290f444f1de64bc7353aa598ece9f0e90c384b4a156f9b1a5063/scipy-1.16.1-cp313-cp313t-win_amd64.whl", hash = "sha256:c24fa02f7ed23ae514460a22c57eca8f530dbfa50b1cfdbf4f37c05b5309cc39", size = 38593661, upload-time = "2025-07-27T16:30:17.825Z" },
|
| 1981 |
+
{ url = "https://files.pythonhosted.org/packages/81/ea/84d481a5237ed223bd3d32d6e82d7a6a96e34756492666c260cef16011d1/scipy-1.16.1-cp314-cp314-macosx_10_14_x86_64.whl", hash = "sha256:796a5a9ad36fa3a782375db8f4241ab02a091308eb079746bc0f874c9b998318", size = 36525921, upload-time = "2025-07-27T16:30:30.081Z" },
|
| 1982 |
+
{ url = "https://files.pythonhosted.org/packages/4e/9f/d9edbdeff9f3a664807ae3aea383e10afaa247e8e6255e6d2aa4515e8863/scipy-1.16.1-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:3ea0733a2ff73fd6fdc5fecca54ee9b459f4d74f00b99aced7d9a3adb43fb1cc", size = 28564152, upload-time = "2025-07-27T16:30:35.336Z" },
|
| 1983 |
+
{ url = "https://files.pythonhosted.org/packages/3b/95/8125bcb1fe04bc267d103e76516243e8d5e11229e6b306bda1024a5423d1/scipy-1.16.1-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:85764fb15a2ad994e708258bb4ed8290d1305c62a4e1ef07c414356a24fcfbf8", size = 20836028, upload-time = "2025-07-27T16:30:39.421Z" },
|
| 1984 |
+
{ url = "https://files.pythonhosted.org/packages/77/9c/bf92e215701fc70bbcd3d14d86337cf56a9b912a804b9c776a269524a9e9/scipy-1.16.1-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:ca66d980469cb623b1759bdd6e9fd97d4e33a9fad5b33771ced24d0cb24df67e", size = 23489666, upload-time = "2025-07-27T16:30:43.663Z" },
|
| 1985 |
+
{ url = "https://files.pythonhosted.org/packages/5e/00/5e941d397d9adac41b02839011594620d54d99488d1be5be755c00cde9ee/scipy-1.16.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e7cc1ffcc230f568549fc56670bcf3df1884c30bd652c5da8138199c8c76dae0", size = 33358318, upload-time = "2025-07-27T16:30:48.982Z" },
|
| 1986 |
+
{ url = "https://files.pythonhosted.org/packages/0e/87/8db3aa10dde6e3e8e7eb0133f24baa011377d543f5b19c71469cf2648026/scipy-1.16.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3ddfb1e8d0b540cb4ee9c53fc3dea3186f97711248fb94b4142a1b27178d8b4b", size = 35185724, upload-time = "2025-07-27T16:30:54.26Z" },
|
| 1987 |
+
{ url = "https://files.pythonhosted.org/packages/89/b4/6ab9ae443216807622bcff02690262d8184078ea467efee2f8c93288a3b1/scipy-1.16.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4dc0e7be79e95d8ba3435d193e0d8ce372f47f774cffd882f88ea4e1e1ddc731", size = 35554335, upload-time = "2025-07-27T16:30:59.765Z" },
|
| 1988 |
+
{ url = "https://files.pythonhosted.org/packages/9c/9a/d0e9dc03c5269a1afb60661118296a32ed5d2c24298af61b676c11e05e56/scipy-1.16.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:f23634f9e5adb51b2a77766dac217063e764337fbc816aa8ad9aaebcd4397fd3", size = 37960310, upload-time = "2025-07-27T16:31:06.151Z" },
|
| 1989 |
+
{ url = "https://files.pythonhosted.org/packages/5e/00/c8f3130a50521a7977874817ca89e0599b1b4ee8e938bad8ae798a0e1f0d/scipy-1.16.1-cp314-cp314-win_amd64.whl", hash = "sha256:57d75524cb1c5a374958a2eae3d84e1929bb971204cc9d52213fb8589183fc19", size = 39319239, upload-time = "2025-07-27T16:31:59.942Z" },
|
| 1990 |
+
{ url = "https://files.pythonhosted.org/packages/f2/f2/1ca3eda54c3a7e4c92f6acef7db7b3a057deb135540d23aa6343ef8ad333/scipy-1.16.1-cp314-cp314t-macosx_10_14_x86_64.whl", hash = "sha256:d8da7c3dd67bcd93f15618938f43ed0995982eb38973023d46d4646c4283ad65", size = 36939460, upload-time = "2025-07-27T16:31:11.865Z" },
|
| 1991 |
+
{ url = "https://files.pythonhosted.org/packages/80/30/98c2840b293a132400c0940bb9e140171dcb8189588619048f42b2ce7b4f/scipy-1.16.1-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:cc1d2f2fd48ba1e0620554fe5bc44d3e8f5d4185c8c109c7fbdf5af2792cfad2", size = 29093322, upload-time = "2025-07-27T16:31:17.045Z" },
|
| 1992 |
+
{ url = "https://files.pythonhosted.org/packages/c1/e6/1e6e006e850622cf2a039b62d1a6ddc4497d4851e58b68008526f04a9a00/scipy-1.16.1-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:21a611ced9275cb861bacadbada0b8c0623bc00b05b09eb97f23b370fc2ae56d", size = 21365329, upload-time = "2025-07-27T16:31:21.188Z" },
|
| 1993 |
+
{ url = "https://files.pythonhosted.org/packages/8e/02/72a5aa5b820589dda9a25e329ca752842bfbbaf635e36bc7065a9b42216e/scipy-1.16.1-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:8dfbb25dffc4c3dd9371d8ab456ca81beeaf6f9e1c2119f179392f0dc1ab7695", size = 23897544, upload-time = "2025-07-27T16:31:25.408Z" },
|
| 1994 |
+
{ url = "https://files.pythonhosted.org/packages/2b/dc/7122d806a6f9eb8a33532982234bed91f90272e990f414f2830cfe656e0b/scipy-1.16.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f0ebb7204f063fad87fc0a0e4ff4a2ff40b2a226e4ba1b7e34bf4b79bf97cd86", size = 33442112, upload-time = "2025-07-27T16:31:30.62Z" },
|
| 1995 |
+
{ url = "https://files.pythonhosted.org/packages/24/39/e383af23564daa1021a5b3afbe0d8d6a68ec639b943661841f44ac92de85/scipy-1.16.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f1b9e5962656f2734c2b285a8745358ecb4e4efbadd00208c80a389227ec61ff", size = 35286594, upload-time = "2025-07-27T16:31:36.112Z" },
|
| 1996 |
+
{ url = "https://files.pythonhosted.org/packages/95/47/1a0b0aff40c3056d955f38b0df5d178350c3d74734ec54f9c68d23910be5/scipy-1.16.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5e1a106f8c023d57a2a903e771228bf5c5b27b5d692088f457acacd3b54511e4", size = 35665080, upload-time = "2025-07-27T16:31:42.025Z" },
|
| 1997 |
+
{ url = "https://files.pythonhosted.org/packages/64/df/ce88803e9ed6e27fe9b9abefa157cf2c80e4fa527cf17ee14be41f790ad4/scipy-1.16.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:709559a1db68a9abc3b2c8672c4badf1614f3b440b3ab326d86a5c0491eafae3", size = 38050306, upload-time = "2025-07-27T16:31:48.109Z" },
|
| 1998 |
+
{ 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" },
|
| 1999 |
+
]
|
| 2000 |
+
|
| 2001 |
[[package]]
|
| 2002 |
name = "semantic-version"
|
| 2003 |
version = "2.10.0"
|
|
|
|
| 2007 |
{ 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" },
|
| 2008 |
]
|
| 2009 |
|
| 2010 |
+
[[package]]
|
| 2011 |
+
name = "sentence-transformers"
|
| 2012 |
+
version = "5.1.0"
|
| 2013 |
+
source = { registry = "https://pypi.org/simple" }
|
| 2014 |
+
dependencies = [
|
| 2015 |
+
{ name = "huggingface-hub" },
|
| 2016 |
+
{ name = "pillow" },
|
| 2017 |
+
{ name = "scikit-learn" },
|
| 2018 |
+
{ name = "scipy" },
|
| 2019 |
+
{ name = "torch" },
|
| 2020 |
+
{ name = "tqdm" },
|
| 2021 |
+
{ name = "transformers" },
|
| 2022 |
+
{ name = "typing-extensions" },
|
| 2023 |
+
]
|
| 2024 |
+
sdist = { url = "https://files.pythonhosted.org/packages/46/b8/1b99379b730bc403d8e9ddc2db56f8ac9ce743734b44a1dbeebb900490d4/sentence_transformers-5.1.0.tar.gz", hash = "sha256:70c7630697cc1c64ffca328d6e8688430ebd134b3c2df03dc07cb3a016b04739", size = 370745, upload-time = "2025-08-06T13:48:55.226Z" }
|
| 2025 |
+
wheels = [
|
| 2026 |
+
{ url = "https://files.pythonhosted.org/packages/6d/70/2b5b76e98191ec3b8b0d1dde52d00ddcc3806799149a9ce987b0d2d31015/sentence_transformers-5.1.0-py3-none-any.whl", hash = "sha256:fc803929f6a3ce82e2b2c06e0efed7a36de535c633d5ce55efac0b710ea5643e", size = 483377, upload-time = "2025-08-06T13:48:53.627Z" },
|
| 2027 |
+
]
|
| 2028 |
+
|
| 2029 |
+
[[package]]
|
| 2030 |
+
name = "setuptools"
|
| 2031 |
+
version = "80.9.0"
|
| 2032 |
+
source = { registry = "https://pypi.org/simple" }
|
| 2033 |
+
sdist = { url = "https://files.pythonhosted.org/packages/18/5d/3bf57dcd21979b887f014ea83c24ae194cfcd12b9e0fda66b957c69d1fca/setuptools-80.9.0.tar.gz", hash = "sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c", size = 1319958, upload-time = "2025-05-27T00:56:51.443Z" }
|
| 2034 |
+
wheels = [
|
| 2035 |
+
{ 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" },
|
| 2036 |
+
]
|
| 2037 |
+
|
| 2038 |
[[package]]
|
| 2039 |
name = "sgmllib3k"
|
| 2040 |
version = "1.0.0"
|
|
|
|
| 2101 |
{ url = "https://files.pythonhosted.org/packages/e5/30/643397144bfbfec6f6ef821f36f33e57d35946c44a2352d3c9f0ae847619/tenacity-9.1.2-py3-none-any.whl", hash = "sha256:f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138", size = 28248, upload-time = "2025-04-02T08:25:07.678Z" },
|
| 2102 |
]
|
| 2103 |
|
| 2104 |
+
[[package]]
|
| 2105 |
+
name = "threadpoolctl"
|
| 2106 |
+
version = "3.6.0"
|
| 2107 |
+
source = { registry = "https://pypi.org/simple" }
|
| 2108 |
+
sdist = { url = "https://files.pythonhosted.org/packages/b7/4d/08c89e34946fce2aec4fbb45c9016efd5f4d7f24af8e5d93296e935631d8/threadpoolctl-3.6.0.tar.gz", hash = "sha256:8ab8b4aa3491d812b623328249fab5302a68d2d71745c8a4c719a2fcaba9f44e", size = 21274, upload-time = "2025-03-13T13:49:23.031Z" }
|
| 2109 |
+
wheels = [
|
| 2110 |
+
{ url = "https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl", hash = "sha256:43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb", size = 18638, upload-time = "2025-03-13T13:49:21.846Z" },
|
| 2111 |
+
]
|
| 2112 |
+
|
| 2113 |
[[package]]
|
| 2114 |
name = "tokenizers"
|
| 2115 |
version = "0.21.4"
|
|
|
|
| 2144 |
{ 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" },
|
| 2145 |
]
|
| 2146 |
|
| 2147 |
+
[[package]]
|
| 2148 |
+
name = "torch"
|
| 2149 |
+
version = "2.8.0"
|
| 2150 |
+
source = { registry = "https://pypi.org/simple" }
|
| 2151 |
+
dependencies = [
|
| 2152 |
+
{ name = "filelock" },
|
| 2153 |
+
{ name = "fsspec" },
|
| 2154 |
+
{ name = "jinja2" },
|
| 2155 |
+
{ name = "networkx" },
|
| 2156 |
+
{ name = "nvidia-cublas-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
|
| 2157 |
+
{ name = "nvidia-cuda-cupti-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
|
| 2158 |
+
{ name = "nvidia-cuda-nvrtc-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
|
| 2159 |
+
{ name = "nvidia-cuda-runtime-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
|
| 2160 |
+
{ name = "nvidia-cudnn-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
|
| 2161 |
+
{ name = "nvidia-cufft-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
|
| 2162 |
+
{ name = "nvidia-cufile-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
|
| 2163 |
+
{ name = "nvidia-curand-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
|
| 2164 |
+
{ name = "nvidia-cusolver-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
|
| 2165 |
+
{ name = "nvidia-cusparse-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
|
| 2166 |
+
{ name = "nvidia-cusparselt-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
|
| 2167 |
+
{ name = "nvidia-nccl-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
|
| 2168 |
+
{ name = "nvidia-nvjitlink-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
|
| 2169 |
+
{ name = "nvidia-nvtx-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
|
| 2170 |
+
{ name = "setuptools" },
|
| 2171 |
+
{ name = "sympy" },
|
| 2172 |
+
{ name = "triton", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
|
| 2173 |
+
{ name = "typing-extensions" },
|
| 2174 |
+
]
|
| 2175 |
+
wheels = [
|
| 2176 |
+
{ url = "https://files.pythonhosted.org/packages/10/4e/469ced5a0603245d6a19a556e9053300033f9c5baccf43a3d25ba73e189e/torch-2.8.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:2b2f96814e0345f5a5aed9bf9734efa913678ed19caf6dc2cddb7930672d6128", size = 101936856, upload-time = "2025-08-06T14:54:01.526Z" },
|
| 2177 |
+
{ url = "https://files.pythonhosted.org/packages/16/82/3948e54c01b2109238357c6f86242e6ecbf0c63a1af46906772902f82057/torch-2.8.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:65616ca8ec6f43245e1f5f296603e33923f4c30f93d65e103d9e50c25b35150b", size = 887922844, upload-time = "2025-08-06T14:55:50.78Z" },
|
| 2178 |
+
{ url = "https://files.pythonhosted.org/packages/e3/54/941ea0a860f2717d86a811adf0c2cd01b3983bdd460d0803053c4e0b8649/torch-2.8.0-cp313-cp313-win_amd64.whl", hash = "sha256:659df54119ae03e83a800addc125856effda88b016dfc54d9f65215c3975be16", size = 241330968, upload-time = "2025-08-06T14:54:45.293Z" },
|
| 2179 |
+
{ url = "https://files.pythonhosted.org/packages/de/69/8b7b13bba430f5e21d77708b616f767683629fc4f8037564a177d20f90ed/torch-2.8.0-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:1a62a1ec4b0498930e2543535cf70b1bef8c777713de7ceb84cd79115f553767", size = 73915128, upload-time = "2025-08-06T14:54:34.769Z" },
|
| 2180 |
+
{ url = "https://files.pythonhosted.org/packages/15/0e/8a800e093b7f7430dbaefa80075aee9158ec22e4c4fc3c1a66e4fb96cb4f/torch-2.8.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:83c13411a26fac3d101fe8035a6b0476ae606deb8688e904e796a3534c197def", size = 102020139, upload-time = "2025-08-06T14:54:39.047Z" },
|
| 2181 |
+
{ url = "https://files.pythonhosted.org/packages/4a/15/5e488ca0bc6162c86a33b58642bc577c84ded17c7b72d97e49b5833e2d73/torch-2.8.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:8f0a9d617a66509ded240add3754e462430a6c1fc5589f86c17b433dd808f97a", size = 887990692, upload-time = "2025-08-06T14:56:18.286Z" },
|
| 2182 |
+
{ url = "https://files.pythonhosted.org/packages/b4/a8/6a04e4b54472fc5dba7ca2341ab219e529f3c07b6941059fbf18dccac31f/torch-2.8.0-cp313-cp313t-win_amd64.whl", hash = "sha256:a7242b86f42be98ac674b88a4988643b9bc6145437ec8f048fea23f72feb5eca", size = 241603453, upload-time = "2025-08-06T14:55:22.945Z" },
|
| 2183 |
+
{ url = "https://files.pythonhosted.org/packages/04/6e/650bb7f28f771af0cb791b02348db8b7f5f64f40f6829ee82aa6ce99aabe/torch-2.8.0-cp313-none-macosx_11_0_arm64.whl", hash = "sha256:7b677e17f5a3e69fdef7eb3b9da72622f8d322692930297e4ccb52fefc6c8211", size = 73632395, upload-time = "2025-08-06T14:55:28.645Z" },
|
| 2184 |
+
]
|
| 2185 |
+
|
| 2186 |
[[package]]
|
| 2187 |
name = "tqdm"
|
| 2188 |
version = "4.67.1"
|
|
|
|
| 2195 |
{ url = "https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", size = 78540, upload-time = "2024-11-24T20:12:19.698Z" },
|
| 2196 |
]
|
| 2197 |
|
| 2198 |
+
[[package]]
|
| 2199 |
+
name = "transformers"
|
| 2200 |
+
version = "4.55.4"
|
| 2201 |
+
source = { registry = "https://pypi.org/simple" }
|
| 2202 |
+
dependencies = [
|
| 2203 |
+
{ name = "filelock" },
|
| 2204 |
+
{ name = "huggingface-hub" },
|
| 2205 |
+
{ name = "numpy" },
|
| 2206 |
+
{ name = "packaging" },
|
| 2207 |
+
{ name = "pyyaml" },
|
| 2208 |
+
{ name = "regex" },
|
| 2209 |
+
{ name = "requests" },
|
| 2210 |
+
{ name = "safetensors" },
|
| 2211 |
+
{ name = "tokenizers" },
|
| 2212 |
+
{ name = "tqdm" },
|
| 2213 |
+
]
|
| 2214 |
+
sdist = { url = "https://files.pythonhosted.org/packages/2b/43/3cb831d5f28cc723516e5bb43a8c6042aca3038bb36b6bd6016b40dfd1e8/transformers-4.55.4.tar.gz", hash = "sha256:574a30559bc273c7a4585599ff28ab6b676e96dc56ffd2025ecfce2fd0ab915d", size = 9573015, upload-time = "2025-08-22T15:18:43.192Z" }
|
| 2215 |
+
wheels = [
|
| 2216 |
+
{ url = "https://files.pythonhosted.org/packages/fa/0a/8791a6ee0529c45f669566969e99b75e2ab20eb0bfee8794ce295c18bdad/transformers-4.55.4-py3-none-any.whl", hash = "sha256:df28f3849665faba4af5106f0db4510323277c4bb595055340544f7e59d06458", size = 11269659, upload-time = "2025-08-22T15:18:40.025Z" },
|
| 2217 |
+
]
|
| 2218 |
+
|
| 2219 |
+
[[package]]
|
| 2220 |
+
name = "triton"
|
| 2221 |
+
version = "3.4.0"
|
| 2222 |
+
source = { registry = "https://pypi.org/simple" }
|
| 2223 |
+
dependencies = [
|
| 2224 |
+
{ name = "setuptools" },
|
| 2225 |
+
]
|
| 2226 |
+
wheels = [
|
| 2227 |
+
{ url = "https://files.pythonhosted.org/packages/30/7b/0a685684ed5322d2af0bddefed7906674f67974aa88b0fae6e82e3b766f6/triton-3.4.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00be2964616f4c619193cb0d1b29a99bd4b001d7dc333816073f92cf2a8ccdeb", size = 155569223, upload-time = "2025-07-30T19:58:44.017Z" },
|
| 2228 |
+
{ url = "https://files.pythonhosted.org/packages/20/63/8cb444ad5cdb25d999b7d647abac25af0ee37d292afc009940c05b82dda0/triton-3.4.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7936b18a3499ed62059414d7df563e6c163c5e16c3773678a3ee3d417865035d", size = 155659780, upload-time = "2025-07-30T19:58:51.171Z" },
|
| 2229 |
+
]
|
| 2230 |
+
|
| 2231 |
[[package]]
|
| 2232 |
name = "typer"
|
| 2233 |
version = "0.16.1"
|
|
|
|
| 2424 |
{ name = "gradio" },
|
| 2425 |
{ name = "gradio-modal" },
|
| 2426 |
{ name = "openai" },
|
| 2427 |
+
{ name = "sentence-transformers" },
|
| 2428 |
]
|
| 2429 |
|
| 2430 |
[package.metadata]
|
|
|
|
| 2436 |
{ name = "gradio", specifier = ">=5.44.0" },
|
| 2437 |
{ name = "gradio-modal", specifier = ">=0.0.4" },
|
| 2438 |
{ name = "openai", specifier = ">=1.102.0" },
|
| 2439 |
+
{ name = "sentence-transformers", specifier = ">=5.1.0" },
|
| 2440 |
]
|
| 2441 |
|
| 2442 |
[[package]]
|