altozachmo commited on
Commit
50df397
·
1 Parent(s): d8ea933

testing new youtube analyzer

Browse files
.github/workflows/main.yaml CHANGED
@@ -13,6 +13,16 @@ jobs:
13
  with:
14
  fetch-depth: 0
15
  lfs: true
 
 
 
 
 
 
 
 
 
 
16
  - name: Push to hub
17
  env:
18
  HF_TOKEN: ${{ secrets.HF_TOKEN }}
 
13
  with:
14
  fetch-depth: 0
15
  lfs: true
16
+
17
+ - name: Install uv
18
+ uses: astral-sh/setup-uv@v5
19
+ with:
20
+ # Install a specific version of uv.
21
+ version: "0.6.17"
22
+
23
+ - name: Compile uv dependencies
24
+ run: uv pip compile pyproject.toml -o requirements.txt
25
+
26
  - name: Push to hub
27
  env:
28
  HF_TOKEN: ${{ secrets.HF_TOKEN }}
agents/agent.py CHANGED
@@ -6,6 +6,7 @@ from smolagents import (
6
  )
7
  from tools.text_search import TextSearch
8
  from tools.text_splitter import text_splitter
 
9
 
10
  class MyAgent:
11
  def __init__(
@@ -46,6 +47,7 @@ class MyAgent:
46
  TextSearch(), # Search tool for text queries
47
  text_splitter, # Text splitter tool for breaking down large texts
48
  # into manageable lists.
 
49
  ]
50
 
51
 
 
6
  )
7
  from tools.text_search import TextSearch
8
  from tools.text_splitter import text_splitter
9
+ from tools.video_analyzer import YouTubeObjectCounterTool
10
 
11
  class MyAgent:
12
  def __init__(
 
47
  TextSearch(), # Search tool for text queries
48
  text_splitter, # Text splitter tool for breaking down large texts
49
  # into manageable lists.
50
+ YouTubeObjectCounterTool(), # Tool for analyzing YouTube videos
51
  ]
52
 
53
 
app.py CHANGED
@@ -70,7 +70,7 @@ def run_and_submit_all(profile: gr.OAuthProfile | None):
70
  results_log = []
71
  answers_payload = []
72
  print(f"Running agent on {len(questions_data)} questions...")
73
- for item in tqdm(questions_data, desc="Agent is answering questions...", total=len(questions_data)):
74
  task_id = item.get("task_id")
75
  question_text = item.get("question")
76
  if not task_id or question_text is None:
 
70
  results_log = []
71
  answers_payload = []
72
  print(f"Running agent on {len(questions_data)} questions...")
73
+ for item in tqdm(questions_data[0:3], desc="Agent is answering questions...", total=len(questions_data)):
74
  task_id = item.get("task_id")
75
  question_text = item.get("question")
76
  if not task_id or question_text is None:
pyproject.toml CHANGED
@@ -5,14 +5,20 @@ description = "Add your description here"
5
  readme = "README.md"
6
  requires-python = ">=3.12"
7
  dependencies = [
 
8
  "gradio[oauth]>=5.27.0",
9
  "litellm==1.67.1",
10
  "numpy>=2.2.5",
11
  "openai>=1.76.0",
 
12
  "pandas>=2.2.3",
13
  "python-dotenv>=1.1.0",
14
  "requests>=2.32.3",
15
  "smolagents[litellm]>=1.14.0",
 
 
16
  "tqdm>=4.67.1",
 
17
  "wikipedia-api>=0.8.1",
 
18
  ]
 
5
  readme = "README.md"
6
  requires-python = ">=3.12"
7
  dependencies = [
8
+ "ffmpeg>=1.4",
9
  "gradio[oauth]>=5.27.0",
10
  "litellm==1.67.1",
11
  "numpy>=2.2.5",
12
  "openai>=1.76.0",
13
+ "opencv-python>=4.11.0.86",
14
  "pandas>=2.2.3",
15
  "python-dotenv>=1.1.0",
16
  "requests>=2.32.3",
17
  "smolagents[litellm]>=1.14.0",
18
+ "timm>=1.0.15",
19
+ "torch>=2.7.0",
20
  "tqdm>=4.67.1",
21
+ "transformers>=4.51.3",
22
  "wikipedia-api>=0.8.1",
23
+ "yt-dlp>=2025.3.31",
24
  ]
requirements.txt CHANGED
@@ -48,10 +48,15 @@ duckduckgo-search==8.0.1
48
  # via smolagents
49
  fastapi==0.115.12
50
  # via gradio
 
 
51
  ffmpy==0.5.0
52
  # via gradio
53
  filelock==3.18.0
54
- # via huggingface-hub
 
 
 
55
  frozenlist==1.6.0
56
  # via
57
  # aiohttp
@@ -60,6 +65,7 @@ fsspec==2025.3.2
60
  # via
61
  # gradio-client
62
  # huggingface-hub
 
63
  gradio==5.27.0
64
  # via hf-agents-gaia-agent (pyproject.toml)
65
  gradio-client==1.9.0
@@ -85,6 +91,7 @@ huggingface-hub==0.30.2
85
  # gradio-client
86
  # smolagents
87
  # tokenizers
 
88
  idna==3.10
89
  # via
90
  # anyio
@@ -100,6 +107,7 @@ jinja2==3.1.6
100
  # gradio
101
  # litellm
102
  # smolagents
 
103
  jiter==0.9.0
104
  # via openai
105
  jsonschema==4.23.0
@@ -122,19 +130,27 @@ markupsafe==3.0.2
122
  # jinja2
123
  mdurl==0.1.2
124
  # via markdown-it-py
 
 
125
  multidict==6.4.3
126
  # via
127
  # aiohttp
128
  # yarl
 
 
129
  numpy==2.2.5
130
  # via
131
  # hf-agents-gaia-agent (pyproject.toml)
132
  # gradio
 
133
  # pandas
 
134
  openai==1.76.0
135
  # via
136
  # hf-agents-gaia-agent (pyproject.toml)
137
  # litellm
 
 
138
  orjson==3.10.16
139
  # via gradio
140
  packaging==25.0
@@ -142,6 +158,7 @@ packaging==25.0
142
  # gradio
143
  # gradio-client
144
  # huggingface-hub
 
145
  pandas==2.2.3
146
  # via
147
  # hf-agents-gaia-agent (pyproject.toml)
@@ -185,18 +202,22 @@ pyyaml==6.0.2
185
  # via
186
  # gradio
187
  # huggingface-hub
 
188
  referencing==0.36.2
189
  # via
190
  # jsonschema
191
  # jsonschema-specifications
192
  regex==2024.11.6
193
- # via tiktoken
 
 
194
  requests==2.32.3
195
  # via
196
  # hf-agents-gaia-agent (pyproject.toml)
197
  # huggingface-hub
198
  # smolagents
199
  # tiktoken
 
200
  # wikipedia-api
201
  rich==14.0.0
202
  # via
@@ -210,8 +231,12 @@ ruff==0.11.7
210
  # via gradio
211
  safehttpx==0.1.6
212
  # via gradio
 
 
213
  semantic-version==2.10.0
214
  # via gradio
 
 
215
  shellingham==1.5.4
216
  # via typer
217
  six==1.17.0
@@ -230,17 +255,26 @@ starlette==0.46.2
230
  # via
231
  # fastapi
232
  # gradio
 
 
233
  tiktoken==0.9.0
234
  # via litellm
235
  tokenizers==0.21.1
236
- # via litellm
 
 
237
  tomlkit==0.13.2
238
  # via gradio
 
 
239
  tqdm==4.67.1
240
  # via
241
  # hf-agents-gaia-agent (pyproject.toml)
242
  # huggingface-hub
243
  # openai
 
 
 
244
  typer==0.15.2
245
  # via gradio
246
  typing-extensions==4.13.2
@@ -255,6 +289,7 @@ typing-extensions==4.13.2
255
  # pydantic
256
  # pydantic-core
257
  # referencing
 
258
  # typer
259
  # typing-inspection
260
  typing-inspection==0.4.0
@@ -271,5 +306,7 @@ wikipedia-api==0.8.1
271
  # via hf-agents-gaia-agent (pyproject.toml)
272
  yarl==1.20.0
273
  # via aiohttp
 
 
274
  zipp==3.21.0
275
  # via importlib-metadata
 
48
  # via smolagents
49
  fastapi==0.115.12
50
  # via gradio
51
+ ffmpeg==1.4
52
+ # via hf-agents-gaia-agent (pyproject.toml)
53
  ffmpy==0.5.0
54
  # via gradio
55
  filelock==3.18.0
56
+ # via
57
+ # huggingface-hub
58
+ # torch
59
+ # transformers
60
  frozenlist==1.6.0
61
  # via
62
  # aiohttp
 
65
  # via
66
  # gradio-client
67
  # huggingface-hub
68
+ # torch
69
  gradio==5.27.0
70
  # via hf-agents-gaia-agent (pyproject.toml)
71
  gradio-client==1.9.0
 
91
  # gradio-client
92
  # smolagents
93
  # tokenizers
94
+ # transformers
95
  idna==3.10
96
  # via
97
  # anyio
 
107
  # gradio
108
  # litellm
109
  # smolagents
110
+ # torch
111
  jiter==0.9.0
112
  # via openai
113
  jsonschema==4.23.0
 
130
  # jinja2
131
  mdurl==0.1.2
132
  # via markdown-it-py
133
+ mpmath==1.3.0
134
+ # via sympy
135
  multidict==6.4.3
136
  # via
137
  # aiohttp
138
  # yarl
139
+ networkx==3.4.2
140
+ # via torch
141
  numpy==2.2.5
142
  # via
143
  # hf-agents-gaia-agent (pyproject.toml)
144
  # gradio
145
+ # opencv-python
146
  # pandas
147
+ # transformers
148
  openai==1.76.0
149
  # via
150
  # hf-agents-gaia-agent (pyproject.toml)
151
  # litellm
152
+ opencv-python==4.11.0.86
153
+ # via hf-agents-gaia-agent (pyproject.toml)
154
  orjson==3.10.16
155
  # via gradio
156
  packaging==25.0
 
158
  # gradio
159
  # gradio-client
160
  # huggingface-hub
161
+ # transformers
162
  pandas==2.2.3
163
  # via
164
  # hf-agents-gaia-agent (pyproject.toml)
 
202
  # via
203
  # gradio
204
  # huggingface-hub
205
+ # transformers
206
  referencing==0.36.2
207
  # via
208
  # jsonschema
209
  # jsonschema-specifications
210
  regex==2024.11.6
211
+ # via
212
+ # tiktoken
213
+ # transformers
214
  requests==2.32.3
215
  # via
216
  # hf-agents-gaia-agent (pyproject.toml)
217
  # huggingface-hub
218
  # smolagents
219
  # tiktoken
220
+ # transformers
221
  # wikipedia-api
222
  rich==14.0.0
223
  # via
 
231
  # via gradio
232
  safehttpx==0.1.6
233
  # via gradio
234
+ safetensors==0.5.3
235
+ # via transformers
236
  semantic-version==2.10.0
237
  # via gradio
238
+ setuptools==80.0.0
239
+ # via torch
240
  shellingham==1.5.4
241
  # via typer
242
  six==1.17.0
 
255
  # via
256
  # fastapi
257
  # gradio
258
+ sympy==1.14.0
259
+ # via torch
260
  tiktoken==0.9.0
261
  # via litellm
262
  tokenizers==0.21.1
263
+ # via
264
+ # litellm
265
+ # transformers
266
  tomlkit==0.13.2
267
  # via gradio
268
+ torch==2.7.0
269
+ # via hf-agents-gaia-agent (pyproject.toml)
270
  tqdm==4.67.1
271
  # via
272
  # hf-agents-gaia-agent (pyproject.toml)
273
  # huggingface-hub
274
  # openai
275
+ # transformers
276
+ transformers==4.51.3
277
+ # via hf-agents-gaia-agent (pyproject.toml)
278
  typer==0.15.2
279
  # via gradio
280
  typing-extensions==4.13.2
 
289
  # pydantic
290
  # pydantic-core
291
  # referencing
292
+ # torch
293
  # typer
294
  # typing-inspection
295
  typing-inspection==0.4.0
 
306
  # via hf-agents-gaia-agent (pyproject.toml)
307
  yarl==1.20.0
308
  # via aiohttp
309
+ yt-dlp==2025.3.31
310
+ # via hf-agents-gaia-agent (pyproject.toml)
311
  zipp==3.21.0
312
  # via importlib-metadata
run_local_agent.py CHANGED
@@ -28,6 +28,6 @@ if __name__ == "__main__":
28
  with open(QUESTIONS_FILEPATH, "r") as f:
29
  questions = json.load(f)
30
 
31
- answers = run_agent(agent, [questions[0]])
32
  print("Answers:", answers)
33
  print("Finished running the agent.")
 
28
  with open(QUESTIONS_FILEPATH, "r") as f:
29
  questions = json.load(f)
30
 
31
+ answers = run_agent(agent, [questions[1]])
32
  print("Answers:", answers)
33
  print("Finished running the agent.")
tools/video_analyzer.py ADDED
@@ -0,0 +1,190 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from smolagents import Tool
2
+ import os
3
+ import cv2
4
+ import tempfile
5
+ from yt_dlp import YoutubeDL
6
+ from transformers import pipeline
7
+ from typing import Any
8
+ from PIL import Image
9
+ import numpy as np
10
+ from transformers import logging
11
+
12
+ class YouTubeObjectCounterTool(Tool):
13
+ name = "youtube_object_counter"
14
+ description = "Analyzes a YouTube video frame by frame and counts the number of objects of a specified type visible in each frame."
15
+ inputs = {
16
+ "url": {
17
+ "type": "string",
18
+ "description": "The URL of the YouTube video to analyze."
19
+ },
20
+ "label": {
21
+ "type": "string",
22
+ "description": "The type of object to count (e.g., 'bird', 'person', 'car', 'dog'). Use common object names recognized by standard object detection models."
23
+ }
24
+ }
25
+ output_type = "string"
26
+
27
+ def _download_video(self, url):
28
+ """Downloads the YouTube video to a temporary file."""
29
+ print(f"Downloading video from {url}...")
30
+ temp_dir = tempfile.mkdtemp()
31
+
32
+ video_path = os.path.join(temp_dir, "video.mp4")
33
+
34
+ ydl_opts = {
35
+ 'format': 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best',
36
+ 'outtmpl': video_path,
37
+ 'quiet': True,
38
+ 'no_warnings': True
39
+ }
40
+
41
+ try:
42
+ with YoutubeDL(ydl_opts) as ydl:
43
+ ydl.download([url])
44
+ print(f"Video downloaded to {video_path}")
45
+ return video_path
46
+ except Exception as e:
47
+ error_msg = f"Error downloading video: {str(e)}"
48
+ print(error_msg)
49
+ raise RuntimeError(error_msg)
50
+
51
+ def _count_objects_in_frame(self, frame, label: str):
52
+ """Counts objects of specified label in a single frame using the object detection model."""
53
+
54
+ try:
55
+ # Convert OpenCV BGR frame to RGB
56
+ rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
57
+
58
+ # Convert numpy array to PIL Image
59
+ pil_image = Image.fromarray(rgb_frame)
60
+
61
+ # Load the detector
62
+ detector = pipeline("object-detection", model="facebook/detr-resnet-50")
63
+
64
+ # Run detection with PIL Image
65
+ results = detector(pil_image)
66
+
67
+ # Count objects matching the label
68
+ object_count = sum(1 for result in results if label.lower() in result['label'].lower())
69
+ return object_count
70
+ except Exception as e:
71
+ print(f"Error detecting objects in frame: {str(e)}")
72
+ return 0
73
+
74
+ def _analyze_video(self, video_path: str, label: str) -> dict[str, Any]:
75
+ """Analyzes the video frame by frame and counts objects of the specified label."""
76
+ sample_rate = 30
77
+ print(f"Analyzing video {video_path}, looking for '{label}' objects, sampling every {sample_rate} frames...")
78
+
79
+ # Open the video file
80
+ cap = cv2.VideoCapture(video_path)
81
+ if not cap.isOpened():
82
+ raise RuntimeError(f"Error: Could not open video file {video_path}")
83
+
84
+ # Get video properties
85
+ fps = cap.get(cv2.CAP_PROP_FPS)
86
+ frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
87
+ duration = frame_count / fps
88
+
89
+ # Initialize results
90
+ frame_results = []
91
+ total_objects = 0
92
+ max_objects = 0
93
+ max_objects_frame = 0
94
+ frame_idx = 0
95
+
96
+ # Process frames
97
+ while cap.isOpened():
98
+ ret, frame = cap.read()
99
+ if not ret:
100
+ break
101
+
102
+ # Only process every nth frame
103
+ if frame_idx % sample_rate == 0:
104
+ time_point = frame_idx / fps
105
+ print(f"Processing frame {frame_idx} at time {time_point:.2f}s...")
106
+
107
+ object_count = self._count_objects_in_frame(frame, label)
108
+ total_objects += object_count
109
+
110
+ if object_count > max_objects:
111
+ max_objects = object_count
112
+ max_objects_frame = frame_idx
113
+
114
+ frame_results.append({
115
+ "frame": frame_idx,
116
+ "time": time_point,
117
+ "object_count": object_count
118
+ })
119
+
120
+ frame_idx += 1
121
+
122
+ # Release resources
123
+ cap.release()
124
+
125
+ # Calculate statistics
126
+ avg_objects_per_frame = total_objects / len(frame_results) if frame_results else 0
127
+ max_objects_time = max_objects_frame / fps if max_objects_frame else 0
128
+
129
+ # Clean up the temporary file
130
+ try:
131
+ os.remove(video_path)
132
+ print(f"Deleted temporary video file: {video_path}")
133
+ except Exception as e:
134
+ print(f"Warning: Failed to delete temporary video file: {video_path} | {str(e)}")
135
+
136
+ return {
137
+ "frame_results": frame_results,
138
+ "total_frames_analyzed": len(frame_results),
139
+ "video_duration": duration,
140
+ "fps": fps,
141
+ "total_frames": frame_count,
142
+ "average_objects_per_analyzed_frame": avg_objects_per_frame,
143
+ "max_objects_in_single_frame": max_objects,
144
+ "max_objects_frame": max_objects_frame,
145
+ "max_objects_time": max_objects_time,
146
+ "label": label
147
+ }
148
+
149
+ def forward(self, url: str, label: str) -> str:
150
+ """
151
+ Analyzes a YouTube video frame by frame and counts objects of the specified type.
152
+
153
+ Args:
154
+ url (str): The URL of the YouTube video to analyze.
155
+ label (str): The type of object to count (e.g., 'bird', 'person', 'car', 'dog').
156
+
157
+ Returns:
158
+ str: A detailed report of object counts per frame and summary statistics.
159
+ """
160
+
161
+ logging.set_verbosity_error()
162
+ try:
163
+ # Download the video
164
+ video_path = self._download_video(url)
165
+
166
+ # Analyze the video
167
+ results = self._analyze_video(video_path, label)
168
+
169
+ # Generate a report
170
+ report = [
171
+ f"# {label.title()} Count Analysis for YouTube Video",
172
+ f"Video URL: {url}",
173
+ f"Video duration: {results['video_duration']:.2f} seconds",
174
+ f"Analyzed {results['total_frames_analyzed']} frames out of {results['total_frames']} total frames",
175
+ f"Sampling rate: 1 frame every 30 frames (approximately {results['fps']/30:.2f} frames per second)",
176
+ "## Summary",
177
+ f"Average {label}s per analyzed frame: {results['average_objects_per_analyzed_frame']:.2f}",
178
+ f"Maximum {label}s in a single frame: {results['max_objects_in_single_frame']} (at {results['max_objects_time']:.2f} seconds)",
179
+ ]
180
+
181
+ # Add frame-by-frame details
182
+ report.append("## Frame-by-Frame Analysis")
183
+ for result in results["frame_results"]:
184
+ report.append(f"Frame {result['frame']} (Time: {result['time']:.2f}s): {result['object_count']} {label}s")
185
+
186
+ return "\n".join(report)
187
+
188
+ except Exception as e:
189
+ return f"Error analyzing video: {str(e)}"
190
+
uv.lock CHANGED
@@ -2,8 +2,12 @@ version = 1
2
  revision = 1
3
  requires-python = ">=3.12"
4
  resolution-markers = [
5
- "python_full_version >= '3.13'",
6
- "python_full_version < '3.13'",
 
 
 
 
7
  ]
8
 
9
  [[package]]
@@ -352,6 +356,12 @@ wheels = [
352
  { url = "https://files.pythonhosted.org/packages/50/b3/b51f09c2ba432a576fe63758bddc81f78f0c6309d9e5c10d194313bf021e/fastapi-0.115.12-py3-none-any.whl", hash = "sha256:e94613d6c05e27be7ffebdd6ea5f388112e5e430c8f7d6494a9d1d88d43e814d", size = 95164 },
353
  ]
354
 
 
 
 
 
 
 
355
  [[package]]
356
  name = "ffmpy"
357
  version = "0.5.0"
@@ -525,30 +535,42 @@ name = "hf-agents-gaia-agent"
525
  version = "0.1.0"
526
  source = { virtual = "." }
527
  dependencies = [
 
528
  { name = "gradio", extra = ["oauth"] },
529
  { name = "litellm" },
530
  { name = "numpy" },
531
  { name = "openai" },
 
532
  { name = "pandas" },
533
  { name = "python-dotenv" },
534
  { name = "requests" },
535
  { name = "smolagents", extra = ["litellm"] },
 
 
536
  { name = "tqdm" },
 
537
  { name = "wikipedia-api" },
 
538
  ]
539
 
540
  [package.metadata]
541
  requires-dist = [
 
542
  { name = "gradio", extras = ["oauth"], specifier = ">=5.27.0" },
543
  { name = "litellm", specifier = "==1.67.1" },
544
  { name = "numpy", specifier = ">=2.2.5" },
545
  { name = "openai", specifier = ">=1.76.0" },
 
546
  { name = "pandas", specifier = ">=2.2.3" },
547
  { name = "python-dotenv", specifier = ">=1.1.0" },
548
  { name = "requests", specifier = ">=2.32.3" },
549
  { name = "smolagents", extras = ["litellm"], specifier = ">=1.14.0" },
 
 
550
  { name = "tqdm", specifier = ">=4.67.1" },
 
551
  { name = "wikipedia-api", specifier = ">=0.8.1" },
 
552
  ]
553
 
554
  [[package]]
@@ -837,6 +859,15 @@ wheels = [
837
  { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979 },
838
  ]
839
 
 
 
 
 
 
 
 
 
 
840
  [[package]]
841
  name = "multidict"
842
  version = "6.4.3"
@@ -897,6 +928,15 @@ wheels = [
897
  { url = "https://files.pythonhosted.org/packages/96/10/7d526c8974f017f1e7ca584c71ee62a638e9334d8d33f27d7cdfc9ae79e4/multidict-6.4.3-py3-none-any.whl", hash = "sha256:59fe01ee8e2a1e8ceb3f6dbb216b09c8d9f4ef1c22c4fc825d045a147fa2ebc9", size = 10400 },
898
  ]
899
 
 
 
 
 
 
 
 
 
 
900
  [[package]]
901
  name = "numpy"
902
  version = "2.2.5"
@@ -935,6 +975,139 @@ wheels = [
935
  { url = "https://files.pythonhosted.org/packages/63/be/b85e4aa4bf42c6502851b971f1c326d583fcc68227385f92089cf50a7b45/numpy-2.2.5-cp313-cp313t-win_amd64.whl", hash = "sha256:d403c84991b5ad291d3809bace5e85f4bbf44a04bdc9a88ed2bb1807b3360bb8", size = 12750096 },
936
  ]
937
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
938
  [[package]]
939
  name = "openai"
940
  version = "1.76.0"
@@ -954,6 +1127,23 @@ wheels = [
954
  { url = "https://files.pythonhosted.org/packages/59/aa/84e02ab500ca871eb8f62784426963a1c7c17a72fea3c7f268af4bbaafa5/openai-1.76.0-py3-none-any.whl", hash = "sha256:a712b50e78cf78e6d7b2a8f69c4978243517c2c36999756673e07a14ce37dc0a", size = 661201 },
955
  ]
956
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
957
  [[package]]
958
  name = "orjson"
959
  version = "3.10.16"
@@ -1460,6 +1650,28 @@ wheels = [
1460
  { url = "https://files.pythonhosted.org/packages/4d/c0/1108ad9f01567f66b3154063605b350b69c3c9366732e09e45f9fd0d1deb/safehttpx-0.1.6-py3-none-any.whl", hash = "sha256:407cff0b410b071623087c63dd2080c3b44dc076888d8c5823c00d1e58cb381c", size = 8692 },
1461
  ]
1462
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1463
  [[package]]
1464
  name = "semantic-version"
1465
  version = "2.10.0"
@@ -1469,6 +1681,15 @@ wheels = [
1469
  { url = "https://files.pythonhosted.org/packages/6a/23/8146aad7d88f4fcb3a6218f41a60f6c2d4e3a72de72da1825dc7c8f7877c/semantic_version-2.10.0-py2.py3-none-any.whl", hash = "sha256:de78a3b8e0feda74cabc54aab2da702113e33ac9d9eb9d2389bcf1f58b7d9177", size = 15552 },
1470
  ]
1471
 
 
 
 
 
 
 
 
 
 
1472
  [[package]]
1473
  name = "shellingham"
1474
  version = "1.5.4"
@@ -1541,6 +1762,18 @@ wheels = [
1541
  { url = "https://files.pythonhosted.org/packages/8b/0c/9d30a4ebeb6db2b25a841afbb80f6ef9a854fc3b41be131d249a977b4959/starlette-0.46.2-py3-none-any.whl", hash = "sha256:595633ce89f8ffa71a015caed34a5b2dc1c0cdb3f0f1fbd1e69339cf2abeec35", size = 72037 },
1542
  ]
1543
 
 
 
 
 
 
 
 
 
 
 
 
 
1544
  [[package]]
1545
  name = "tiktoken"
1546
  version = "0.9.0"
@@ -1565,6 +1798,22 @@ wheels = [
1565
  { url = "https://files.pythonhosted.org/packages/de/a8/8f499c179ec900783ffe133e9aab10044481679bb9aad78436d239eee716/tiktoken-0.9.0-cp313-cp313-win_amd64.whl", hash = "sha256:5ea0edb6f83dc56d794723286215918c1cde03712cbbafa0348b33448faf5b95", size = 894669 },
1566
  ]
1567
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1568
  [[package]]
1569
  name = "tokenizers"
1570
  version = "0.21.1"
@@ -1599,6 +1848,73 @@ wheels = [
1599
  { url = "https://files.pythonhosted.org/packages/f9/b6/a447b5e4ec71e13871be01ba81f5dfc9d0af7e473da256ff46bc0e24026f/tomlkit-0.13.2-py3-none-any.whl", hash = "sha256:7a974427f6e119197f670fbbbeae7bef749a6c14e793db934baefc1b5f03efde", size = 37955 },
1600
  ]
1601
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1602
  [[package]]
1603
  name = "tqdm"
1604
  version = "4.67.1"
@@ -1611,6 +1927,40 @@ wheels = [
1611
  { url = "https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", size = 78540 },
1612
  ]
1613
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1614
  [[package]]
1615
  name = "typer"
1616
  version = "0.15.2"
@@ -1783,6 +2133,15 @@ wheels = [
1783
  { url = "https://files.pythonhosted.org/packages/ea/1f/70c57b3d7278e94ed22d85e09685d3f0a38ebdd8c5c73b65ba4c0d0fe002/yarl-1.20.0-py3-none-any.whl", hash = "sha256:5d0fe6af927a47a230f31e6004621fd0959eaa915fc62acfafa67ff7229a3124", size = 46124 },
1784
  ]
1785
 
 
 
 
 
 
 
 
 
 
1786
  [[package]]
1787
  name = "zipp"
1788
  version = "3.21.0"
 
2
  revision = 1
3
  requires-python = ">=3.12"
4
  resolution-markers = [
5
+ "python_full_version >= '3.13' and sys_platform == 'darwin'",
6
+ "python_full_version >= '3.13' and platform_machine == 'aarch64' and sys_platform == 'linux'",
7
+ "(python_full_version >= '3.13' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.13' and sys_platform != 'darwin' and sys_platform != 'linux')",
8
+ "python_full_version < '3.13' and sys_platform == 'darwin'",
9
+ "python_full_version < '3.13' and platform_machine == 'aarch64' and sys_platform == 'linux'",
10
+ "(python_full_version < '3.13' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'linux')",
11
  ]
12
 
13
  [[package]]
 
356
  { url = "https://files.pythonhosted.org/packages/50/b3/b51f09c2ba432a576fe63758bddc81f78f0c6309d9e5c10d194313bf021e/fastapi-0.115.12-py3-none-any.whl", hash = "sha256:e94613d6c05e27be7ffebdd6ea5f388112e5e430c8f7d6494a9d1d88d43e814d", size = 95164 },
357
  ]
358
 
359
+ [[package]]
360
+ name = "ffmpeg"
361
+ version = "1.4"
362
+ source = { registry = "https://pypi.org/simple" }
363
+ sdist = { url = "https://files.pythonhosted.org/packages/f0/cc/3b7408b8ecf7c1d20ad480c3eaed7619857bf1054b690226e906fdf14258/ffmpeg-1.4.tar.gz", hash = "sha256:6931692c890ff21d39938433c2189747815dca0c60ddc7f9bb97f199dba0b5b9", size = 5055 }
364
+
365
  [[package]]
366
  name = "ffmpy"
367
  version = "0.5.0"
 
535
  version = "0.1.0"
536
  source = { virtual = "." }
537
  dependencies = [
538
+ { name = "ffmpeg" },
539
  { name = "gradio", extra = ["oauth"] },
540
  { name = "litellm" },
541
  { name = "numpy" },
542
  { name = "openai" },
543
+ { name = "opencv-python" },
544
  { name = "pandas" },
545
  { name = "python-dotenv" },
546
  { name = "requests" },
547
  { name = "smolagents", extra = ["litellm"] },
548
+ { name = "timm" },
549
+ { name = "torch" },
550
  { name = "tqdm" },
551
+ { name = "transformers" },
552
  { name = "wikipedia-api" },
553
+ { name = "yt-dlp" },
554
  ]
555
 
556
  [package.metadata]
557
  requires-dist = [
558
+ { name = "ffmpeg", specifier = ">=1.4" },
559
  { name = "gradio", extras = ["oauth"], specifier = ">=5.27.0" },
560
  { name = "litellm", specifier = "==1.67.1" },
561
  { name = "numpy", specifier = ">=2.2.5" },
562
  { name = "openai", specifier = ">=1.76.0" },
563
+ { name = "opencv-python", specifier = ">=4.11.0.86" },
564
  { name = "pandas", specifier = ">=2.2.3" },
565
  { name = "python-dotenv", specifier = ">=1.1.0" },
566
  { name = "requests", specifier = ">=2.32.3" },
567
  { name = "smolagents", extras = ["litellm"], specifier = ">=1.14.0" },
568
+ { name = "timm", specifier = ">=1.0.15" },
569
+ { name = "torch", specifier = ">=2.7.0" },
570
  { name = "tqdm", specifier = ">=4.67.1" },
571
+ { name = "transformers", specifier = ">=4.51.3" },
572
  { name = "wikipedia-api", specifier = ">=0.8.1" },
573
+ { name = "yt-dlp", specifier = ">=2025.3.31" },
574
  ]
575
 
576
  [[package]]
 
859
  { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979 },
860
  ]
861
 
862
+ [[package]]
863
+ name = "mpmath"
864
+ version = "1.3.0"
865
+ source = { registry = "https://pypi.org/simple" }
866
+ sdist = { url = "https://files.pythonhosted.org/packages/e0/47/dd32fa426cc72114383ac549964eecb20ecfd886d1e5ccf5340b55b02f57/mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f", size = 508106 }
867
+ wheels = [
868
+ { url = "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", size = 536198 },
869
+ ]
870
+
871
  [[package]]
872
  name = "multidict"
873
  version = "6.4.3"
 
928
  { url = "https://files.pythonhosted.org/packages/96/10/7d526c8974f017f1e7ca584c71ee62a638e9334d8d33f27d7cdfc9ae79e4/multidict-6.4.3-py3-none-any.whl", hash = "sha256:59fe01ee8e2a1e8ceb3f6dbb216b09c8d9f4ef1c22c4fc825d045a147fa2ebc9", size = 10400 },
929
  ]
930
 
931
+ [[package]]
932
+ name = "networkx"
933
+ version = "3.4.2"
934
+ source = { registry = "https://pypi.org/simple" }
935
+ sdist = { url = "https://files.pythonhosted.org/packages/fd/1d/06475e1cd5264c0b870ea2cc6fdb3e37177c1e565c43f56ff17a10e3937f/networkx-3.4.2.tar.gz", hash = "sha256:307c3669428c5362aab27c8a1260aa8f47c4e91d3891f48be0141738d8d053e1", size = 2151368 }
936
+ wheels = [
937
+ { url = "https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl", hash = "sha256:df5d4365b724cf81b8c6a7312509d0c22386097011ad1abe274afd5e9d3bbc5f", size = 1723263 },
938
+ ]
939
+
940
  [[package]]
941
  name = "numpy"
942
  version = "2.2.5"
 
975
  { url = "https://files.pythonhosted.org/packages/63/be/b85e4aa4bf42c6502851b971f1c326d583fcc68227385f92089cf50a7b45/numpy-2.2.5-cp313-cp313t-win_amd64.whl", hash = "sha256:d403c84991b5ad291d3809bace5e85f4bbf44a04bdc9a88ed2bb1807b3360bb8", size = 12750096 },
976
  ]
977
 
978
+ [[package]]
979
+ name = "nvidia-cublas-cu12"
980
+ version = "12.6.4.1"
981
+ source = { registry = "https://pypi.org/simple" }
982
+ wheels = [
983
+ { url = "https://files.pythonhosted.org/packages/af/eb/ff4b8c503fa1f1796679dce648854d58751982426e4e4b37d6fce49d259c/nvidia_cublas_cu12-12.6.4.1-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:08ed2686e9875d01b58e3cb379c6896df8e76c75e0d4a7f7dace3d7b6d9ef8eb", size = 393138322 },
984
+ ]
985
+
986
+ [[package]]
987
+ name = "nvidia-cuda-cupti-cu12"
988
+ version = "12.6.80"
989
+ source = { registry = "https://pypi.org/simple" }
990
+ wheels = [
991
+ { url = "https://files.pythonhosted.org/packages/49/60/7b6497946d74bcf1de852a21824d63baad12cd417db4195fc1bfe59db953/nvidia_cuda_cupti_cu12-12.6.80-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6768bad6cab4f19e8292125e5f1ac8aa7d1718704012a0e3272a6f61c4bce132", size = 8917980 },
992
+ { url = "https://files.pythonhosted.org/packages/a5/24/120ee57b218d9952c379d1e026c4479c9ece9997a4fb46303611ee48f038/nvidia_cuda_cupti_cu12-12.6.80-py3-none-manylinux2014_x86_64.whl", hash = "sha256:a3eff6cdfcc6a4c35db968a06fcadb061cbc7d6dde548609a941ff8701b98b73", size = 8917972 },
993
+ ]
994
+
995
+ [[package]]
996
+ name = "nvidia-cuda-nvrtc-cu12"
997
+ version = "12.6.77"
998
+ source = { registry = "https://pypi.org/simple" }
999
+ wheels = [
1000
+ { url = "https://files.pythonhosted.org/packages/75/2e/46030320b5a80661e88039f59060d1790298b4718944a65a7f2aeda3d9e9/nvidia_cuda_nvrtc_cu12-12.6.77-py3-none-manylinux2014_x86_64.whl", hash = "sha256:35b0cc6ee3a9636d5409133e79273ce1f3fd087abb0532d2d2e8fff1fe9efc53", size = 23650380 },
1001
+ ]
1002
+
1003
+ [[package]]
1004
+ name = "nvidia-cuda-runtime-cu12"
1005
+ version = "12.6.77"
1006
+ source = { registry = "https://pypi.org/simple" }
1007
+ wheels = [
1008
+ { url = "https://files.pythonhosted.org/packages/e1/23/e717c5ac26d26cf39a27fbc076240fad2e3b817e5889d671b67f4f9f49c5/nvidia_cuda_runtime_cu12-12.6.77-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ba3b56a4f896141e25e19ab287cd71e52a6a0f4b29d0d31609f60e3b4d5219b7", size = 897690 },
1009
+ { url = "https://files.pythonhosted.org/packages/f0/62/65c05e161eeddbafeca24dc461f47de550d9fa8a7e04eb213e32b55cfd99/nvidia_cuda_runtime_cu12-12.6.77-py3-none-manylinux2014_x86_64.whl", hash = "sha256:a84d15d5e1da416dd4774cb42edf5e954a3e60cc945698dc1d5be02321c44dc8", size = 897678 },
1010
+ ]
1011
+
1012
+ [[package]]
1013
+ name = "nvidia-cudnn-cu12"
1014
+ version = "9.5.1.17"
1015
+ source = { registry = "https://pypi.org/simple" }
1016
+ dependencies = [
1017
+ { name = "nvidia-cublas-cu12", marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux')" },
1018
+ ]
1019
+ wheels = [
1020
+ { url = "https://files.pythonhosted.org/packages/2a/78/4535c9c7f859a64781e43c969a3a7e84c54634e319a996d43ef32ce46f83/nvidia_cudnn_cu12-9.5.1.17-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:30ac3869f6db17d170e0e556dd6cc5eee02647abc31ca856634d5a40f82c15b2", size = 570988386 },
1021
+ ]
1022
+
1023
+ [[package]]
1024
+ name = "nvidia-cufft-cu12"
1025
+ version = "11.3.0.4"
1026
+ source = { registry = "https://pypi.org/simple" }
1027
+ dependencies = [
1028
+ { name = "nvidia-nvjitlink-cu12", marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux')" },
1029
+ ]
1030
+ wheels = [
1031
+ { url = "https://files.pythonhosted.org/packages/8f/16/73727675941ab8e6ffd86ca3a4b7b47065edcca7a997920b831f8147c99d/nvidia_cufft_cu12-11.3.0.4-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ccba62eb9cef5559abd5e0d54ceed2d9934030f51163df018532142a8ec533e5", size = 200221632 },
1032
+ { url = "https://files.pythonhosted.org/packages/60/de/99ec247a07ea40c969d904fc14f3a356b3e2a704121675b75c366b694ee1/nvidia_cufft_cu12-11.3.0.4-py3-none-manylinux2014_x86_64.whl", hash = "sha256:768160ac89f6f7b459bee747e8d175dbf53619cfe74b2a5636264163138013ca", size = 200221622 },
1033
+ ]
1034
+
1035
+ [[package]]
1036
+ name = "nvidia-cufile-cu12"
1037
+ version = "1.11.1.6"
1038
+ source = { registry = "https://pypi.org/simple" }
1039
+ wheels = [
1040
+ { url = "https://files.pythonhosted.org/packages/b2/66/cc9876340ac68ae71b15c743ddb13f8b30d5244af344ec8322b449e35426/nvidia_cufile_cu12-1.11.1.6-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:cc23469d1c7e52ce6c1d55253273d32c565dd22068647f3aa59b3c6b005bf159", size = 1142103 },
1041
+ ]
1042
+
1043
+ [[package]]
1044
+ name = "nvidia-curand-cu12"
1045
+ version = "10.3.7.77"
1046
+ source = { registry = "https://pypi.org/simple" }
1047
+ wheels = [
1048
+ { url = "https://files.pythonhosted.org/packages/73/1b/44a01c4e70933637c93e6e1a8063d1e998b50213a6b65ac5a9169c47e98e/nvidia_curand_cu12-10.3.7.77-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a42cd1344297f70b9e39a1e4f467a4e1c10f1da54ff7a85c12197f6c652c8bdf", size = 56279010 },
1049
+ { url = "https://files.pythonhosted.org/packages/4a/aa/2c7ff0b5ee02eaef890c0ce7d4f74bc30901871c5e45dee1ae6d0083cd80/nvidia_curand_cu12-10.3.7.77-py3-none-manylinux2014_x86_64.whl", hash = "sha256:99f1a32f1ac2bd134897fc7a203f779303261268a65762a623bf30cc9fe79117", size = 56279000 },
1050
+ ]
1051
+
1052
+ [[package]]
1053
+ name = "nvidia-cusolver-cu12"
1054
+ version = "11.7.1.2"
1055
+ source = { registry = "https://pypi.org/simple" }
1056
+ dependencies = [
1057
+ { name = "nvidia-cublas-cu12", marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux')" },
1058
+ { name = "nvidia-cusparse-cu12", marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux')" },
1059
+ { name = "nvidia-nvjitlink-cu12", marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux')" },
1060
+ ]
1061
+ wheels = [
1062
+ { url = "https://files.pythonhosted.org/packages/f0/6e/c2cf12c9ff8b872e92b4a5740701e51ff17689c4d726fca91875b07f655d/nvidia_cusolver_cu12-11.7.1.2-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e9e49843a7707e42022babb9bcfa33c29857a93b88020c4e4434656a655b698c", size = 158229790 },
1063
+ { url = "https://files.pythonhosted.org/packages/9f/81/baba53585da791d043c10084cf9553e074548408e04ae884cfe9193bd484/nvidia_cusolver_cu12-11.7.1.2-py3-none-manylinux2014_x86_64.whl", hash = "sha256:6cf28f17f64107a0c4d7802be5ff5537b2130bfc112f25d5a30df227058ca0e6", size = 158229780 },
1064
+ ]
1065
+
1066
+ [[package]]
1067
+ name = "nvidia-cusparse-cu12"
1068
+ version = "12.5.4.2"
1069
+ source = { registry = "https://pypi.org/simple" }
1070
+ dependencies = [
1071
+ { name = "nvidia-nvjitlink-cu12", marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux')" },
1072
+ ]
1073
+ wheels = [
1074
+ { url = "https://files.pythonhosted.org/packages/06/1e/b8b7c2f4099a37b96af5c9bb158632ea9e5d9d27d7391d7eb8fc45236674/nvidia_cusparse_cu12-12.5.4.2-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7556d9eca156e18184b94947ade0fba5bb47d69cec46bf8660fd2c71a4b48b73", size = 216561367 },
1075
+ { url = "https://files.pythonhosted.org/packages/43/ac/64c4316ba163e8217a99680c7605f779accffc6a4bcd0c778c12948d3707/nvidia_cusparse_cu12-12.5.4.2-py3-none-manylinux2014_x86_64.whl", hash = "sha256:23749a6571191a215cb74d1cdbff4a86e7b19f1200c071b3fcf844a5bea23a2f", size = 216561357 },
1076
+ ]
1077
+
1078
+ [[package]]
1079
+ name = "nvidia-cusparselt-cu12"
1080
+ version = "0.6.3"
1081
+ source = { registry = "https://pypi.org/simple" }
1082
+ wheels = [
1083
+ { url = "https://files.pythonhosted.org/packages/3b/9a/72ef35b399b0e183bc2e8f6f558036922d453c4d8237dab26c666a04244b/nvidia_cusparselt_cu12-0.6.3-py3-none-manylinux2014_x86_64.whl", hash = "sha256:e5c8a26c36445dd2e6812f1177978a24e2d37cacce7e090f297a688d1ec44f46", size = 156785796 },
1084
+ ]
1085
+
1086
+ [[package]]
1087
+ name = "nvidia-nccl-cu12"
1088
+ version = "2.26.2"
1089
+ source = { registry = "https://pypi.org/simple" }
1090
+ wheels = [
1091
+ { url = "https://files.pythonhosted.org/packages/67/ca/f42388aed0fddd64ade7493dbba36e1f534d4e6fdbdd355c6a90030ae028/nvidia_nccl_cu12-2.26.2-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:694cf3879a206553cc9d7dbda76b13efaf610fdb70a50cba303de1b0d1530ac6", size = 201319755 },
1092
+ ]
1093
+
1094
+ [[package]]
1095
+ name = "nvidia-nvjitlink-cu12"
1096
+ version = "12.6.85"
1097
+ source = { registry = "https://pypi.org/simple" }
1098
+ wheels = [
1099
+ { url = "https://files.pythonhosted.org/packages/9d/d7/c5383e47c7e9bf1c99d5bd2a8c935af2b6d705ad831a7ec5c97db4d82f4f/nvidia_nvjitlink_cu12-12.6.85-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:eedc36df9e88b682efe4309aa16b5b4e78c2407eac59e8c10a6a47535164369a", size = 19744971 },
1100
+ ]
1101
+
1102
+ [[package]]
1103
+ name = "nvidia-nvtx-cu12"
1104
+ version = "12.6.77"
1105
+ source = { registry = "https://pypi.org/simple" }
1106
+ wheels = [
1107
+ { url = "https://files.pythonhosted.org/packages/56/9a/fff8376f8e3d084cd1530e1ef7b879bb7d6d265620c95c1b322725c694f4/nvidia_nvtx_cu12-12.6.77-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b90bed3df379fa79afbd21be8e04a0314336b8ae16768b58f2d34cb1d04cd7d2", size = 89276 },
1108
+ { url = "https://files.pythonhosted.org/packages/9e/4e/0d0c945463719429b7bd21dece907ad0bde437a2ff12b9b12fee94722ab0/nvidia_nvtx_cu12-12.6.77-py3-none-manylinux2014_x86_64.whl", hash = "sha256:6574241a3ec5fdc9334353ab8c479fe75841dbe8f4532a8fc97ce63503330ba1", size = 89265 },
1109
+ ]
1110
+
1111
  [[package]]
1112
  name = "openai"
1113
  version = "1.76.0"
 
1127
  { url = "https://files.pythonhosted.org/packages/59/aa/84e02ab500ca871eb8f62784426963a1c7c17a72fea3c7f268af4bbaafa5/openai-1.76.0-py3-none-any.whl", hash = "sha256:a712b50e78cf78e6d7b2a8f69c4978243517c2c36999756673e07a14ce37dc0a", size = 661201 },
1128
  ]
1129
 
1130
+ [[package]]
1131
+ name = "opencv-python"
1132
+ version = "4.11.0.86"
1133
+ source = { registry = "https://pypi.org/simple" }
1134
+ dependencies = [
1135
+ { name = "numpy" },
1136
+ ]
1137
+ sdist = { url = "https://files.pythonhosted.org/packages/17/06/68c27a523103dad5837dc5b87e71285280c4f098c60e4fe8a8db6486ab09/opencv-python-4.11.0.86.tar.gz", hash = "sha256:03d60ccae62304860d232272e4a4fda93c39d595780cb40b161b310244b736a4", size = 95171956 }
1138
+ wheels = [
1139
+ { url = "https://files.pythonhosted.org/packages/05/4d/53b30a2a3ac1f75f65a59eb29cf2ee7207ce64867db47036ad61743d5a23/opencv_python-4.11.0.86-cp37-abi3-macosx_13_0_arm64.whl", hash = "sha256:432f67c223f1dc2824f5e73cdfcd9db0efc8710647d4e813012195dc9122a52a", size = 37326322 },
1140
+ { url = "https://files.pythonhosted.org/packages/3b/84/0a67490741867eacdfa37bc18df96e08a9d579583b419010d7f3da8ff503/opencv_python-4.11.0.86-cp37-abi3-macosx_13_0_x86_64.whl", hash = "sha256:9d05ef13d23fe97f575153558653e2d6e87103995d54e6a35db3f282fe1f9c66", size = 56723197 },
1141
+ { url = "https://files.pythonhosted.org/packages/f3/bd/29c126788da65c1fb2b5fb621b7fed0ed5f9122aa22a0868c5e2c15c6d23/opencv_python-4.11.0.86-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b92ae2c8852208817e6776ba1ea0d6b1e0a1b5431e971a2a0ddd2a8cc398202", size = 42230439 },
1142
+ { url = "https://files.pythonhosted.org/packages/2c/8b/90eb44a40476fa0e71e05a0283947cfd74a5d36121a11d926ad6f3193cc4/opencv_python-4.11.0.86-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b02611523803495003bd87362db3e1d2a0454a6a63025dc6658a9830570aa0d", size = 62986597 },
1143
+ { url = "https://files.pythonhosted.org/packages/fb/d7/1d5941a9dde095468b288d989ff6539dd69cd429dbf1b9e839013d21b6f0/opencv_python-4.11.0.86-cp37-abi3-win32.whl", hash = "sha256:810549cb2a4aedaa84ad9a1c92fbfdfc14090e2749cedf2c1589ad8359aa169b", size = 29384337 },
1144
+ { url = "https://files.pythonhosted.org/packages/a4/7d/f1c30a92854540bf789e9cd5dde7ef49bbe63f855b85a2e6b3db8135c591/opencv_python-4.11.0.86-cp37-abi3-win_amd64.whl", hash = "sha256:085ad9b77c18853ea66283e98affefe2de8cc4c1f43eda4c100cf9b2721142ec", size = 39488044 },
1145
+ ]
1146
+
1147
  [[package]]
1148
  name = "orjson"
1149
  version = "3.10.16"
 
1650
  { url = "https://files.pythonhosted.org/packages/4d/c0/1108ad9f01567f66b3154063605b350b69c3c9366732e09e45f9fd0d1deb/safehttpx-0.1.6-py3-none-any.whl", hash = "sha256:407cff0b410b071623087c63dd2080c3b44dc076888d8c5823c00d1e58cb381c", size = 8692 },
1651
  ]
1652
 
1653
+ [[package]]
1654
+ name = "safetensors"
1655
+ version = "0.5.3"
1656
+ source = { registry = "https://pypi.org/simple" }
1657
+ sdist = { url = "https://files.pythonhosted.org/packages/71/7e/2d5d6ee7b40c0682315367ec7475693d110f512922d582fef1bd4a63adc3/safetensors-0.5.3.tar.gz", hash = "sha256:b6b0d6ecacec39a4fdd99cc19f4576f5219ce858e6fd8dbe7609df0b8dc56965", size = 67210 }
1658
+ wheels = [
1659
+ { url = "https://files.pythonhosted.org/packages/18/ae/88f6c49dbd0cc4da0e08610019a3c78a7d390879a919411a410a1876d03a/safetensors-0.5.3-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:bd20eb133db8ed15b40110b7c00c6df51655a2998132193de2f75f72d99c7073", size = 436917 },
1660
+ { url = "https://files.pythonhosted.org/packages/b8/3b/11f1b4a2f5d2ab7da34ecc062b0bc301f2be024d110a6466726bec8c055c/safetensors-0.5.3-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:21d01c14ff6c415c485616b8b0bf961c46b3b343ca59110d38d744e577f9cce7", size = 418419 },
1661
+ { url = "https://files.pythonhosted.org/packages/5d/9a/add3e6fef267658075c5a41573c26d42d80c935cdc992384dfae435feaef/safetensors-0.5.3-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:11bce6164887cd491ca75c2326a113ba934be596e22b28b1742ce27b1d076467", size = 459493 },
1662
+ { url = "https://files.pythonhosted.org/packages/df/5c/bf2cae92222513cc23b3ff85c4a1bb2811a2c3583ac0f8e8d502751de934/safetensors-0.5.3-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4a243be3590bc3301c821da7a18d87224ef35cbd3e5f5727e4e0728b8172411e", size = 472400 },
1663
+ { url = "https://files.pythonhosted.org/packages/58/11/7456afb740bd45782d0f4c8e8e1bb9e572f1bf82899fb6ace58af47b4282/safetensors-0.5.3-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8bd84b12b1670a6f8e50f01e28156422a2bc07fb16fc4e98bded13039d688a0d", size = 522891 },
1664
+ { url = "https://files.pythonhosted.org/packages/57/3d/fe73a9d2ace487e7285f6e157afee2383bd1ddb911b7cb44a55cf812eae3/safetensors-0.5.3-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:391ac8cab7c829452175f871fcaf414aa1e292b5448bd02620f675a7f3e7abb9", size = 537694 },
1665
+ { url = "https://files.pythonhosted.org/packages/a6/f8/dae3421624fcc87a89d42e1898a798bc7ff72c61f38973a65d60df8f124c/safetensors-0.5.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cead1fa41fc54b1e61089fa57452e8834f798cb1dc7a09ba3524f1eb08e0317a", size = 471642 },
1666
+ { url = "https://files.pythonhosted.org/packages/ce/20/1fbe16f9b815f6c5a672f5b760951e20e17e43f67f231428f871909a37f6/safetensors-0.5.3-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1077f3e94182d72618357b04b5ced540ceb71c8a813d3319f1aba448e68a770d", size = 502241 },
1667
+ { url = "https://files.pythonhosted.org/packages/5f/18/8e108846b506487aa4629fe4116b27db65c3dde922de2c8e0cc1133f3f29/safetensors-0.5.3-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:799021e78287bac619c7b3f3606730a22da4cda27759ddf55d37c8db7511c74b", size = 638001 },
1668
+ { url = "https://files.pythonhosted.org/packages/82/5a/c116111d8291af6c8c8a8b40628fe833b9db97d8141c2a82359d14d9e078/safetensors-0.5.3-cp38-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:df26da01aaac504334644e1b7642fa000bfec820e7cef83aeac4e355e03195ff", size = 734013 },
1669
+ { url = "https://files.pythonhosted.org/packages/7d/ff/41fcc4d3b7de837963622e8610d998710705bbde9a8a17221d85e5d0baad/safetensors-0.5.3-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:32c3ef2d7af8b9f52ff685ed0bc43913cdcde135089ae322ee576de93eae5135", size = 670687 },
1670
+ { url = "https://files.pythonhosted.org/packages/40/ad/2b113098e69c985a3d8fbda4b902778eae4a35b7d5188859b4a63d30c161/safetensors-0.5.3-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:37f1521be045e56fc2b54c606d4455573e717b2d887c579ee1dbba5f868ece04", size = 643147 },
1671
+ { url = "https://files.pythonhosted.org/packages/0a/0c/95aeb51d4246bd9a3242d3d8349c1112b4ee7611a4b40f0c5c93b05f001d/safetensors-0.5.3-cp38-abi3-win32.whl", hash = "sha256:cfc0ec0846dcf6763b0ed3d1846ff36008c6e7290683b61616c4b040f6a54ace", size = 296677 },
1672
+ { url = "https://files.pythonhosted.org/packages/69/e2/b011c38e5394c4c18fb5500778a55ec43ad6106126e74723ffaee246f56e/safetensors-0.5.3-cp38-abi3-win_amd64.whl", hash = "sha256:836cbbc320b47e80acd40e44c8682db0e8ad7123209f69b093def21ec7cafd11", size = 308878 },
1673
+ ]
1674
+
1675
  [[package]]
1676
  name = "semantic-version"
1677
  version = "2.10.0"
 
1681
  { url = "https://files.pythonhosted.org/packages/6a/23/8146aad7d88f4fcb3a6218f41a60f6c2d4e3a72de72da1825dc7c8f7877c/semantic_version-2.10.0-py2.py3-none-any.whl", hash = "sha256:de78a3b8e0feda74cabc54aab2da702113e33ac9d9eb9d2389bcf1f58b7d9177", size = 15552 },
1682
  ]
1683
 
1684
+ [[package]]
1685
+ name = "setuptools"
1686
+ version = "80.0.0"
1687
+ source = { registry = "https://pypi.org/simple" }
1688
+ sdist = { url = "https://files.pythonhosted.org/packages/44/80/97e25f0f1e4067677806084b7382a6ff9979f3d15119375c475c288db9d7/setuptools-80.0.0.tar.gz", hash = "sha256:c40a5b3729d58dd749c0f08f1a07d134fb8a0a3d7f87dc33e7c5e1f762138650", size = 1354221 }
1689
+ wheels = [
1690
+ { url = "https://files.pythonhosted.org/packages/23/63/5517029d6696ddf2bd378d46f63f479be001c31b462303170a1da57650cb/setuptools-80.0.0-py3-none-any.whl", hash = "sha256:a38f898dcd6e5380f4da4381a87ec90bd0a7eec23d204a5552e80ee3cab6bd27", size = 1240907 },
1691
+ ]
1692
+
1693
  [[package]]
1694
  name = "shellingham"
1695
  version = "1.5.4"
 
1762
  { url = "https://files.pythonhosted.org/packages/8b/0c/9d30a4ebeb6db2b25a841afbb80f6ef9a854fc3b41be131d249a977b4959/starlette-0.46.2-py3-none-any.whl", hash = "sha256:595633ce89f8ffa71a015caed34a5b2dc1c0cdb3f0f1fbd1e69339cf2abeec35", size = 72037 },
1763
  ]
1764
 
1765
+ [[package]]
1766
+ name = "sympy"
1767
+ version = "1.14.0"
1768
+ source = { registry = "https://pypi.org/simple" }
1769
+ dependencies = [
1770
+ { name = "mpmath" },
1771
+ ]
1772
+ sdist = { url = "https://files.pythonhosted.org/packages/83/d3/803453b36afefb7c2bb238361cd4ae6125a569b4db67cd9e79846ba2d68c/sympy-1.14.0.tar.gz", hash = "sha256:d3d3fe8df1e5a0b42f0e7bdf50541697dbe7d23746e894990c030e2b05e72517", size = 7793921 }
1773
+ wheels = [
1774
+ { url = "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", hash = "sha256:e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5", size = 6299353 },
1775
+ ]
1776
+
1777
  [[package]]
1778
  name = "tiktoken"
1779
  version = "0.9.0"
 
1798
  { url = "https://files.pythonhosted.org/packages/de/a8/8f499c179ec900783ffe133e9aab10044481679bb9aad78436d239eee716/tiktoken-0.9.0-cp313-cp313-win_amd64.whl", hash = "sha256:5ea0edb6f83dc56d794723286215918c1cde03712cbbafa0348b33448faf5b95", size = 894669 },
1799
  ]
1800
 
1801
+ [[package]]
1802
+ name = "timm"
1803
+ version = "1.0.15"
1804
+ source = { registry = "https://pypi.org/simple" }
1805
+ dependencies = [
1806
+ { name = "huggingface-hub" },
1807
+ { name = "pyyaml" },
1808
+ { name = "safetensors" },
1809
+ { name = "torch" },
1810
+ { name = "torchvision" },
1811
+ ]
1812
+ sdist = { url = "https://files.pythonhosted.org/packages/bc/0c/66b0f9b4a4cb9ffdac7b52b17b37c7d3c4f75623b469e388b0c6d89b4e88/timm-1.0.15.tar.gz", hash = "sha256:756a3bc30c96565f056e608a9b559daed904617eaadb6be536f96874879b1055", size = 2230258 }
1813
+ wheels = [
1814
+ { url = "https://files.pythonhosted.org/packages/6c/d0/179abca8b984b3deefd996f362b612c39da73b60f685921e6cd58b6125b4/timm-1.0.15-py3-none-any.whl", hash = "sha256:5a3dc460c24e322ecc7fd1f3e3eb112423ddee320cb059cc1956fbc9731748ef", size = 2361373 },
1815
+ ]
1816
+
1817
  [[package]]
1818
  name = "tokenizers"
1819
  version = "0.21.1"
 
1848
  { url = "https://files.pythonhosted.org/packages/f9/b6/a447b5e4ec71e13871be01ba81f5dfc9d0af7e473da256ff46bc0e24026f/tomlkit-0.13.2-py3-none-any.whl", hash = "sha256:7a974427f6e119197f670fbbbeae7bef749a6c14e793db934baefc1b5f03efde", size = 37955 },
1849
  ]
1850
 
1851
+ [[package]]
1852
+ name = "torch"
1853
+ version = "2.7.0"
1854
+ source = { registry = "https://pypi.org/simple" }
1855
+ dependencies = [
1856
+ { name = "filelock" },
1857
+ { name = "fsspec" },
1858
+ { name = "jinja2" },
1859
+ { name = "networkx" },
1860
+ { name = "nvidia-cublas-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
1861
+ { name = "nvidia-cuda-cupti-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
1862
+ { name = "nvidia-cuda-nvrtc-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
1863
+ { name = "nvidia-cuda-runtime-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
1864
+ { name = "nvidia-cudnn-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
1865
+ { name = "nvidia-cufft-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
1866
+ { name = "nvidia-cufile-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
1867
+ { name = "nvidia-curand-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
1868
+ { name = "nvidia-cusolver-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
1869
+ { name = "nvidia-cusparse-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
1870
+ { name = "nvidia-cusparselt-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
1871
+ { name = "nvidia-nccl-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
1872
+ { name = "nvidia-nvjitlink-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
1873
+ { name = "nvidia-nvtx-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
1874
+ { name = "setuptools" },
1875
+ { name = "sympy" },
1876
+ { name = "triton", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
1877
+ { name = "typing-extensions" },
1878
+ ]
1879
+ wheels = [
1880
+ { url = "https://files.pythonhosted.org/packages/aa/5e/ac759f4c0ab7c01feffa777bd68b43d2ac61560a9770eeac074b450f81d4/torch-2.7.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:36a6368c7ace41ad1c0f69f18056020b6a5ca47bedaca9a2f3b578f5a104c26c", size = 99013250 },
1881
+ { url = "https://files.pythonhosted.org/packages/9c/58/2d245b6f1ef61cf11dfc4aceeaacbb40fea706ccebac3f863890c720ab73/torch-2.7.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:15aab3e31c16feb12ae0a88dba3434a458874636f360c567caa6a91f6bfba481", size = 865042157 },
1882
+ { url = "https://files.pythonhosted.org/packages/44/80/b353c024e6b624cd9ce1d66dcb9d24e0294680f95b369f19280e241a0159/torch-2.7.0-cp312-cp312-win_amd64.whl", hash = "sha256:f56d4b2510934e072bab3ab8987e00e60e1262fb238176168f5e0c43a1320c6d", size = 212482262 },
1883
+ { url = "https://files.pythonhosted.org/packages/ee/8d/b2939e5254be932db1a34b2bd099070c509e8887e0c5a90c498a917e4032/torch-2.7.0-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:30b7688a87239a7de83f269333651d8e582afffce6f591fff08c046f7787296e", size = 68574294 },
1884
+ { url = "https://files.pythonhosted.org/packages/14/24/720ea9a66c29151b315ea6ba6f404650834af57a26b2a04af23ec246b2d5/torch-2.7.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:868ccdc11798535b5727509480cd1d86d74220cfdc42842c4617338c1109a205", size = 99015553 },
1885
+ { url = "https://files.pythonhosted.org/packages/4b/27/285a8cf12bd7cd71f9f211a968516b07dcffed3ef0be585c6e823675ab91/torch-2.7.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:9b52347118116cf3dff2ab5a3c3dd97c719eb924ac658ca2a7335652076df708", size = 865046389 },
1886
+ { url = "https://files.pythonhosted.org/packages/74/c8/2ab2b6eadc45554af8768ae99668c5a8a8552e2012c7238ded7e9e4395e1/torch-2.7.0-cp313-cp313-win_amd64.whl", hash = "sha256:434cf3b378340efc87c758f250e884f34460624c0523fe5c9b518d205c91dd1b", size = 212490304 },
1887
+ { url = "https://files.pythonhosted.org/packages/28/fd/74ba6fde80e2b9eef4237fe668ffae302c76f0e4221759949a632ca13afa/torch-2.7.0-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:edad98dddd82220465b106506bb91ee5ce32bd075cddbcf2b443dfaa2cbd83bf", size = 68856166 },
1888
+ { url = "https://files.pythonhosted.org/packages/cb/b4/8df3f9fe6bdf59e56a0e538592c308d18638eb5f5dc4b08d02abb173c9f0/torch-2.7.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:2a885fc25afefb6e6eb18a7d1e8bfa01cc153e92271d980a49243b250d5ab6d9", size = 99091348 },
1889
+ { url = "https://files.pythonhosted.org/packages/9d/f5/0bd30e9da04c3036614aa1b935a9f7e505a9e4f1f731b15e165faf8a4c74/torch-2.7.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:176300ff5bc11a5f5b0784e40bde9e10a35c4ae9609beed96b4aeb46a27f5fae", size = 865104023 },
1890
+ { url = "https://files.pythonhosted.org/packages/d1/b7/2235d0c3012c596df1c8d39a3f4afc1ee1b6e318d469eda4c8bb68566448/torch-2.7.0-cp313-cp313t-win_amd64.whl", hash = "sha256:d0ca446a93f474985d81dc866fcc8dccefb9460a29a456f79d99c29a78a66993", size = 212750916 },
1891
+ { url = "https://files.pythonhosted.org/packages/90/48/7e6477cf40d48cc0a61fa0d41ee9582b9a316b12772fcac17bc1a40178e7/torch-2.7.0-cp313-none-macosx_11_0_arm64.whl", hash = "sha256:27f5007bdf45f7bb7af7f11d1828d5c2487e030690afb3d89a651fd7036a390e", size = 68575074 },
1892
+ ]
1893
+
1894
+ [[package]]
1895
+ name = "torchvision"
1896
+ version = "0.22.0"
1897
+ source = { registry = "https://pypi.org/simple" }
1898
+ dependencies = [
1899
+ { name = "numpy" },
1900
+ { name = "pillow" },
1901
+ { name = "torch" },
1902
+ ]
1903
+ wheels = [
1904
+ { url = "https://files.pythonhosted.org/packages/cb/ea/887d1d61cf4431a46280972de665f350af1898ce5006cd046326e5d0a2f2/torchvision-0.22.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:31c3165418fe21c3d81fe3459e51077c2f948801b8933ed18169f54652796a0f", size = 1947826 },
1905
+ { url = "https://files.pythonhosted.org/packages/72/ef/21f8b6122e13ae045b8e49658029c695fd774cd21083b3fa5c3f9c5d3e35/torchvision-0.22.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:8f116bc82e0c076e70ba7776e611ed392b9666aa443662e687808b08993d26af", size = 2514571 },
1906
+ { url = "https://files.pythonhosted.org/packages/7c/48/5f7617f6c60d135f86277c53f9d5682dfa4e66f4697f505f1530e8b69fb1/torchvision-0.22.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:ce4dc334ebd508de2c534817c9388e928bc2500cf981906ae8d6e2ca3bf4727a", size = 7446522 },
1907
+ { url = "https://files.pythonhosted.org/packages/99/94/a015e93955f5d3a68689cc7c385a3cfcd2d62b84655d18b61f32fb04eb67/torchvision-0.22.0-cp312-cp312-win_amd64.whl", hash = "sha256:24b8c9255c209ca419cc7174906da2791c8b557b75c23496663ec7d73b55bebf", size = 1716664 },
1908
+ { url = "https://files.pythonhosted.org/packages/e1/2a/9b34685599dcb341d12fc2730055155623db7a619d2415a8d31f17050952/torchvision-0.22.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ece17995857dd328485c9c027c0b20ffc52db232e30c84ff6c95ab77201112c5", size = 1947823 },
1909
+ { url = "https://files.pythonhosted.org/packages/77/77/88f64879483d66daf84f1d1c4d5c31ebb08e640411139042a258d5f7dbfe/torchvision-0.22.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:471c6dd75bb984c6ebe4f60322894a290bf3d4b195e769d80754f3689cd7f238", size = 2471592 },
1910
+ { url = "https://files.pythonhosted.org/packages/f7/82/2f813eaae7c1fae1f9d9e7829578f5a91f39ef48d6c1c588a8900533dd3d/torchvision-0.22.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:2b839ac0610a38f56bef115ee5b9eaca5f9c2da3c3569a68cc62dbcc179c157f", size = 7446333 },
1911
+ { url = "https://files.pythonhosted.org/packages/58/19/ca7a4f8907a56351dfe6ae0a708f4e6b3569b5c61d282e3e7f61cf42a4ce/torchvision-0.22.0-cp313-cp313-win_amd64.whl", hash = "sha256:4ada1c08b2f761443cd65b7c7b4aec9e2fc28f75b0d4e1b1ebc9d3953ebccc4d", size = 1716693 },
1912
+ { url = "https://files.pythonhosted.org/packages/6f/a7/f43e9c8d13118b4ffbaebea664c9338ab20fa115a908125afd2238ff16e7/torchvision-0.22.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:cdc96daa4658b47ce9384154c86ed1e70cba9d972a19f5de6e33f8f94a626790", size = 2137621 },
1913
+ { url = "https://files.pythonhosted.org/packages/6a/9a/2b59f5758ba7e3f23bc84e16947493bbce97392ec6d18efba7bdf0a3b10e/torchvision-0.22.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:753d3c84eeadd5979a33b3b73a25ecd0aa4af44d6b45ed2c70d44f5e0ac68312", size = 2476555 },
1914
+ { url = "https://files.pythonhosted.org/packages/7d/40/a7bc2ab9b1e56d10a7fd9ae83191bb425fa308caa23d148f1c568006e02c/torchvision-0.22.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:b30e3ed29e4a61f7499bca50f57d8ebd23dfc52b14608efa17a534a55ee59a03", size = 7617924 },
1915
+ { url = "https://files.pythonhosted.org/packages/c1/7b/30d423bdb2546250d719d7821aaf9058cc093d165565b245b159c788a9dd/torchvision-0.22.0-cp313-cp313t-win_amd64.whl", hash = "sha256:e5d680162694fac4c8a374954e261ddfb4eb0ce103287b0f693e4e9c579ef957", size = 1638621 },
1916
+ ]
1917
+
1918
  [[package]]
1919
  name = "tqdm"
1920
  version = "4.67.1"
 
1927
  { url = "https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", size = 78540 },
1928
  ]
1929
 
1930
+ [[package]]
1931
+ name = "transformers"
1932
+ version = "4.51.3"
1933
+ source = { registry = "https://pypi.org/simple" }
1934
+ dependencies = [
1935
+ { name = "filelock" },
1936
+ { name = "huggingface-hub" },
1937
+ { name = "numpy" },
1938
+ { name = "packaging" },
1939
+ { name = "pyyaml" },
1940
+ { name = "regex" },
1941
+ { name = "requests" },
1942
+ { name = "safetensors" },
1943
+ { name = "tokenizers" },
1944
+ { name = "tqdm" },
1945
+ ]
1946
+ sdist = { url = "https://files.pythonhosted.org/packages/f1/11/7414d5bc07690002ce4d7553602107bf969af85144bbd02830f9fb471236/transformers-4.51.3.tar.gz", hash = "sha256:e292fcab3990c6defe6328f0f7d2004283ca81a7a07b2de9a46d67fd81ea1409", size = 8941266 }
1947
+ wheels = [
1948
+ { url = "https://files.pythonhosted.org/packages/a9/b6/5257d04ae327b44db31f15cce39e6020cc986333c715660b1315a9724d82/transformers-4.51.3-py3-none-any.whl", hash = "sha256:fd3279633ceb2b777013234bbf0b4f5c2d23c4626b05497691f00cfda55e8a83", size = 10383940 },
1949
+ ]
1950
+
1951
+ [[package]]
1952
+ name = "triton"
1953
+ version = "3.3.0"
1954
+ source = { registry = "https://pypi.org/simple" }
1955
+ dependencies = [
1956
+ { name = "setuptools", marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux')" },
1957
+ ]
1958
+ wheels = [
1959
+ { url = "https://files.pythonhosted.org/packages/11/53/ce18470914ab6cfbec9384ee565d23c4d1c55f0548160b1c7b33000b11fd/triton-3.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b68c778f6c4218403a6bd01be7484f6dc9e20fe2083d22dd8aef33e3b87a10a3", size = 156504509 },
1960
+ { url = "https://files.pythonhosted.org/packages/7d/74/4bf2702b65e93accaa20397b74da46fb7a0356452c1bb94dbabaf0582930/triton-3.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:47bc87ad66fa4ef17968299acacecaab71ce40a238890acc6ad197c3abe2b8f1", size = 156516468 },
1961
+ { url = "https://files.pythonhosted.org/packages/0a/93/f28a696fa750b9b608baa236f8225dd3290e5aff27433b06143adc025961/triton-3.3.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ce4700fc14032af1e049005ae94ba908e71cd6c2df682239aed08e49bc71b742", size = 156580729 },
1962
+ ]
1963
+
1964
  [[package]]
1965
  name = "typer"
1966
  version = "0.15.2"
 
2133
  { url = "https://files.pythonhosted.org/packages/ea/1f/70c57b3d7278e94ed22d85e09685d3f0a38ebdd8c5c73b65ba4c0d0fe002/yarl-1.20.0-py3-none-any.whl", hash = "sha256:5d0fe6af927a47a230f31e6004621fd0959eaa915fc62acfafa67ff7229a3124", size = 46124 },
2134
  ]
2135
 
2136
+ [[package]]
2137
+ name = "yt-dlp"
2138
+ version = "2025.3.31"
2139
+ source = { registry = "https://pypi.org/simple" }
2140
+ sdist = { url = "https://files.pythonhosted.org/packages/a2/11/333d16f88b1515d4c601e1dfbf1028e6798f0b2a8ff1dc5aaa7b797aa9e8/yt_dlp-2025.3.31.tar.gz", hash = "sha256:1bfe0e660d1a70a09e27b2d58f92e30b1e2e362cc487829f2f824346ae49fb91", size = 2967466 }
2141
+ wheels = [
2142
+ { url = "https://files.pythonhosted.org/packages/a8/bf/7b0affb8f163376309696cfd1c677818fa0969fbb9d88225087208799afe/yt_dlp-2025.3.31-py3-none-any.whl", hash = "sha256:8ecb3aa218a3bebe431119f513a8972b9b9d992edf67168c00ab92329a03baec", size = 3226021 },
2143
+ ]
2144
+
2145
  [[package]]
2146
  name = "zipp"
2147
  version = "3.21.0"