vision-agent 1.1.10__tar.gz → 1.1.12__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. {vision_agent-1.1.10 → vision_agent-1.1.12}/.gitignore +1 -0
  2. {vision_agent-1.1.10 → vision_agent-1.1.12}/PKG-INFO +2 -2
  3. {vision_agent-1.1.10 → vision_agent-1.1.12}/pyproject.toml +2 -2
  4. {vision_agent-1.1.10 → vision_agent-1.1.12}/vision_agent/tools/tools.py +10 -14
  5. {vision_agent-1.1.10 → vision_agent-1.1.12}/LICENSE +0 -0
  6. {vision_agent-1.1.10 → vision_agent-1.1.12}/README.md +0 -0
  7. {vision_agent-1.1.10 → vision_agent-1.1.12}/vision_agent/.sim_tools/df.csv +0 -0
  8. {vision_agent-1.1.10 → vision_agent-1.1.12}/vision_agent/.sim_tools/embs.npy +0 -0
  9. {vision_agent-1.1.10 → vision_agent-1.1.12}/vision_agent/__init__.py +0 -0
  10. {vision_agent-1.1.10 → vision_agent-1.1.12}/vision_agent/agent/README.md +0 -0
  11. {vision_agent-1.1.10 → vision_agent-1.1.12}/vision_agent/agent/__init__.py +0 -0
  12. {vision_agent-1.1.10 → vision_agent-1.1.12}/vision_agent/agent/agent.py +0 -0
  13. {vision_agent-1.1.10 → vision_agent-1.1.12}/vision_agent/agent/vision_agent_coder_prompts_v2.py +0 -0
  14. {vision_agent-1.1.10 → vision_agent-1.1.12}/vision_agent/agent/vision_agent_coder_v2.py +0 -0
  15. {vision_agent-1.1.10 → vision_agent-1.1.12}/vision_agent/agent/vision_agent_planner_prompts_v2.py +0 -0
  16. {vision_agent-1.1.10 → vision_agent-1.1.12}/vision_agent/agent/vision_agent_planner_v2.py +0 -0
  17. {vision_agent-1.1.10 → vision_agent-1.1.12}/vision_agent/agent/vision_agent_prompts_v2.py +0 -0
  18. {vision_agent-1.1.10 → vision_agent-1.1.12}/vision_agent/agent/vision_agent_v2.py +0 -0
  19. {vision_agent-1.1.10 → vision_agent-1.1.12}/vision_agent/clients/__init__.py +0 -0
  20. {vision_agent-1.1.10 → vision_agent-1.1.12}/vision_agent/clients/http.py +0 -0
  21. {vision_agent-1.1.10 → vision_agent-1.1.12}/vision_agent/configs/__init__.py +0 -0
  22. {vision_agent-1.1.10 → vision_agent-1.1.12}/vision_agent/configs/anthropic_config.py +0 -0
  23. {vision_agent-1.1.10 → vision_agent-1.1.12}/vision_agent/configs/config.py +0 -0
  24. {vision_agent-1.1.10 → vision_agent-1.1.12}/vision_agent/configs/openai_config.py +0 -0
  25. {vision_agent-1.1.10 → vision_agent-1.1.12}/vision_agent/fonts/__init__.py +0 -0
  26. {vision_agent-1.1.10 → vision_agent-1.1.12}/vision_agent/fonts/default_font_ch_en.ttf +0 -0
  27. {vision_agent-1.1.10 → vision_agent-1.1.12}/vision_agent/lmm/__init__.py +0 -0
  28. {vision_agent-1.1.10 → vision_agent-1.1.12}/vision_agent/lmm/lmm.py +0 -0
  29. {vision_agent-1.1.10 → vision_agent-1.1.12}/vision_agent/models/__init__.py +0 -0
  30. {vision_agent-1.1.10 → vision_agent-1.1.12}/vision_agent/models/agent_types.py +0 -0
  31. {vision_agent-1.1.10 → vision_agent-1.1.12}/vision_agent/models/lmm_types.py +0 -0
  32. {vision_agent-1.1.10 → vision_agent-1.1.12}/vision_agent/models/tools_types.py +0 -0
  33. {vision_agent-1.1.10 → vision_agent-1.1.12}/vision_agent/sim/__init__.py +0 -0
  34. {vision_agent-1.1.10 → vision_agent-1.1.12}/vision_agent/sim/sim.py +0 -0
  35. {vision_agent-1.1.10 → vision_agent-1.1.12}/vision_agent/tools/__init__.py +0 -0
  36. {vision_agent-1.1.10 → vision_agent-1.1.12}/vision_agent/tools/meta_tools.py +0 -0
  37. {vision_agent-1.1.10 → vision_agent-1.1.12}/vision_agent/tools/planner_tools.py +0 -0
  38. {vision_agent-1.1.10 → vision_agent-1.1.12}/vision_agent/tools/prompts.py +0 -0
  39. {vision_agent-1.1.10 → vision_agent-1.1.12}/vision_agent/utils/__init__.py +0 -0
  40. {vision_agent-1.1.10 → vision_agent-1.1.12}/vision_agent/utils/agent.py +0 -0
  41. {vision_agent-1.1.10 → vision_agent-1.1.12}/vision_agent/utils/exceptions.py +0 -0
  42. {vision_agent-1.1.10 → vision_agent-1.1.12}/vision_agent/utils/execute.py +0 -0
  43. {vision_agent-1.1.10 → vision_agent-1.1.12}/vision_agent/utils/image_utils.py +0 -0
  44. {vision_agent-1.1.10 → vision_agent-1.1.12}/vision_agent/utils/tools.py +0 -0
  45. {vision_agent-1.1.10 → vision_agent-1.1.12}/vision_agent/utils/tools_doc.py +0 -0
  46. {vision_agent-1.1.10 → vision_agent-1.1.12}/vision_agent/utils/video.py +0 -0
  47. {vision_agent-1.1.10 → vision_agent-1.1.12}/vision_agent/utils/video_tracking.py +0 -0
@@ -97,3 +97,4 @@ local/
97
97
  vision-agent-benchmark/
98
98
  vision_agent/tools/suggestion.py
99
99
  vision_agent/agent/visual_design_patterns.py
100
+ */node_modules
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: vision-agent
3
- Version: 1.1.10
3
+ Version: 1.1.12
4
4
  Summary: Toolset for Vision Agent
5
5
  Project-URL: Homepage, https://landing.ai
6
6
  Project-URL: repository, https://github.com/landing-ai/vision-agent
@@ -28,7 +28,6 @@ Requires-Dist: pillow-heif<0.17,>=0.16.0
28
28
  Requires-Dist: pillow==10.*
29
29
  Requires-Dist: pydantic<3,>=2.0.0
30
30
  Requires-Dist: pymupdf<2,>=1.23.0
31
- Requires-Dist: pytube==15.0.0
32
31
  Requires-Dist: requests==2.*
33
32
  Requires-Dist: rich<14,>=13.7.1
34
33
  Requires-Dist: scikit-learn<2,>=1.5.2
@@ -37,6 +36,7 @@ Requires-Dist: tabulate<0.10,>=0.9.0
37
36
  Requires-Dist: tenacity<9,>=8.3.0
38
37
  Requires-Dist: tqdm<5.0.0,>=4.64.0
39
38
  Requires-Dist: typing-extensions==4.*
39
+ Requires-Dist: yt-dlp>=2025.3.31
40
40
  Description-Content-Type: text/markdown
41
41
 
42
42
  <div align="center">
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "vision-agent"
7
- version = "1.1.10"
7
+ version = "1.1.12"
8
8
  description = "Toolset for Vision Agent"
9
9
  authors = [{ name = "Landing AI", email = "dev@landing.ai" }]
10
10
  requires-python = ">=3.9,<4.0"
@@ -28,7 +28,6 @@ dependencies = [
28
28
  "ipykernel>=6.29.4,<7",
29
29
  "tenacity>=8.3.0,<9",
30
30
  "pillow-heif>=0.16.0,<0.17",
31
- "pytube==15.0.0",
32
31
  "anthropic>=0.31.0,<0.32",
33
32
  "pydantic>=2.0.0,<3",
34
33
  "av>=11.0.0,<12",
@@ -39,6 +38,7 @@ dependencies = [
39
38
  "dotenv>=0.9.9,<0.10",
40
39
  "pymupdf>=1.23.0,<2",
41
40
  "google-genai>=1.0.0,<2",
41
+ "yt-dlp>=2025.3.31",
42
42
  ]
43
43
 
44
44
  [project.urls]
@@ -19,7 +19,7 @@ import requests
19
19
  from IPython.display import display
20
20
  from PIL import Image, ImageDraw, ImageFont
21
21
  from pillow_heif import register_heif_opener # type: ignore
22
- from pytube import YouTube # type: ignore
22
+ import yt_dlp # type: ignore
23
23
  import pymupdf # type: ignore
24
24
  from google import genai # type: ignore
25
25
  from google.genai import types # type: ignore
@@ -3174,7 +3174,6 @@ def extract_frames_and_timestamps(
3174
3174
  [{"frame": np.ndarray, "timestamp": 0.0}, ...]
3175
3175
  """
3176
3176
  if isinstance(fps, str):
3177
- # fps could be a string when it's passed in from a web endpoint deployment
3178
3177
  fps = float(fps)
3179
3178
 
3180
3179
  def reformat(
@@ -3194,23 +3193,20 @@ def extract_frames_and_timestamps(
3194
3193
  )
3195
3194
  ):
3196
3195
  with tempfile.TemporaryDirectory() as temp_dir:
3197
- yt = YouTube(str(video_uri))
3198
- # Download the highest resolution video
3199
- video = (
3200
- yt.streams.filter(progressive=True, file_extension="mp4")
3201
- .order_by("resolution")
3202
- .desc()
3203
- .first()
3204
- )
3205
- if not video:
3206
- raise Exception("No suitable video stream found")
3207
- video_file_path = video.download(output_path=temp_dir)
3196
+ ydl_opts = {
3197
+ "outtmpl": os.path.join(temp_dir, "%(title)s.%(ext)s"),
3198
+ "format": "bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best",
3199
+ "quiet": True,
3200
+ }
3201
+ with yt_dlp.YoutubeDL(ydl_opts) as ydl:
3202
+ info = ydl.extract_info(str(video_uri), download=True)
3203
+ video_file_path = ydl.prepare_filename(info)
3208
3204
 
3209
3205
  return reformat(extract_frames_from_video(video_file_path, fps))
3206
+
3210
3207
  elif str(video_uri).startswith(("http", "https")):
3211
3208
  _, image_suffix = os.path.splitext(video_uri)
3212
3209
  with tempfile.NamedTemporaryFile(delete=False, suffix=image_suffix) as tmp_file:
3213
- # Download the video and save it to the temporary file
3214
3210
  with urllib.request.urlopen(str(video_uri)) as response:
3215
3211
  tmp_file.write(response.read())
3216
3212
  return reformat(extract_frames_from_video(tmp_file.name, fps))
File without changes
File without changes