vision-agent 0.2.239__py3-none-any.whl → 0.2.240__py3-none-any.whl
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.
- vision_agent/tools/tools.py +8 -7
 - vision_agent/utils/video.py +25 -34
 - {vision_agent-0.2.239.dist-info → vision_agent-0.2.240.dist-info}/METADATA +1 -1
 - {vision_agent-0.2.239.dist-info → vision_agent-0.2.240.dist-info}/RECORD +6 -6
 - {vision_agent-0.2.239.dist-info → vision_agent-0.2.240.dist-info}/LICENSE +0 -0
 - {vision_agent-0.2.239.dist-info → vision_agent-0.2.240.dist-info}/WHEEL +0 -0
 
    
        vision_agent/tools/tools.py
    CHANGED
    
    | 
         @@ -8,7 +8,7 @@ from base64 import b64encode 
     | 
|
| 
       8 
8 
     | 
    
         
             
            from concurrent.futures import ThreadPoolExecutor, as_completed
         
     | 
| 
       9 
9 
     | 
    
         
             
            from importlib import resources
         
     | 
| 
       10 
10 
     | 
    
         
             
            from pathlib import Path
         
     | 
| 
       11 
     | 
    
         
            -
            from typing import Any, Callable, Dict, List, Optional, Tuple, Union, cast
         
     | 
| 
      
 11 
     | 
    
         
            +
            from typing import IO, Any, Callable, Dict, List, Optional, Tuple, Union, cast
         
     | 
| 
       12 
12 
     | 
    
         
             
            from uuid import UUID
         
     | 
| 
       13 
13 
     | 
    
         | 
| 
       14 
14 
     | 
    
         
             
            import cv2
         
     | 
| 
         @@ -2797,16 +2797,17 @@ def save_video( 
     | 
|
| 
       2797 
2797 
     | 
    
         
             
                    ):
         
     | 
| 
       2798 
2798 
     | 
    
         
             
                        raise ValueError("A frame is not a valid NumPy array with shape (H, W, C)")
         
     | 
| 
       2799 
2799 
     | 
    
         | 
| 
      
 2800 
     | 
    
         
            +
                output_file: IO[bytes]
         
     | 
| 
       2800 
2801 
     | 
    
         
             
                if output_video_path is None:
         
     | 
| 
       2801 
     | 
    
         
            -
                     
     | 
| 
       2802 
     | 
    
         
            -
                        delete=False, suffix=".mp4"
         
     | 
| 
       2803 
     | 
    
         
            -
                    ).name
         
     | 
| 
      
 2802 
     | 
    
         
            +
                    output_file = tempfile.NamedTemporaryFile(delete=False, suffix=".mp4")
         
     | 
| 
       2804 
2803 
     | 
    
         
             
                else:
         
     | 
| 
       2805 
2804 
     | 
    
         
             
                    Path(output_video_path).parent.mkdir(parents=True, exist_ok=True)
         
     | 
| 
      
 2805 
     | 
    
         
            +
                    output_file = open(output_video_path, "wb")
         
     | 
| 
       2806 
2806 
     | 
    
         | 
| 
       2807 
     | 
    
         
            -
                 
     | 
| 
       2808 
     | 
    
         
            -
             
     | 
| 
       2809 
     | 
    
         
            -
                 
     | 
| 
      
 2807 
     | 
    
         
            +
                with output_file as file:
         
     | 
| 
      
 2808 
     | 
    
         
            +
                    video_writer(frames, fps, file=file)
         
     | 
| 
      
 2809 
     | 
    
         
            +
                _save_video_to_result(output_file.name)
         
     | 
| 
      
 2810 
     | 
    
         
            +
                return output_file.name
         
     | 
| 
       2810 
2811 
     | 
    
         | 
| 
       2811 
2812 
     | 
    
         | 
| 
       2812 
2813 
     | 
    
         
             
            def _save_video_to_result(video_uri: str) -> None:
         
     | 
    
        vision_agent/utils/video.py
    CHANGED
    
    | 
         @@ -1,8 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            import logging
         
     | 
| 
       2 
     | 
    
         
            -
            import os
         
     | 
| 
       3 
2 
     | 
    
         
             
            import tempfile
         
     | 
| 
       4 
3 
     | 
    
         
             
            from functools import lru_cache
         
     | 
| 
       5 
     | 
    
         
            -
            from typing import List, Optional, Tuple
         
     | 
| 
      
 4 
     | 
    
         
            +
            from typing import IO, List, Optional, Tuple
         
     | 
| 
       6 
5 
     | 
    
         | 
| 
       7 
6 
     | 
    
         
             
            import av  # type: ignore
         
     | 
| 
       8 
7 
     | 
    
         
             
            import cv2
         
     | 
| 
         @@ -25,39 +24,32 @@ def _resize_frame(frame: np.ndarray) -> np.ndarray: 
     | 
|
| 
       25 
24 
     | 
    
         
             
            def video_writer(
         
     | 
| 
       26 
25 
     | 
    
         
             
                frames: List[np.ndarray],
         
     | 
| 
       27 
26 
     | 
    
         
             
                fps: float = _DEFAULT_INPUT_FPS,
         
     | 
| 
       28 
     | 
    
         
            -
                 
     | 
| 
       29 
     | 
    
         
            -
                file_ext: str = ".mp4",
         
     | 
| 
      
 27 
     | 
    
         
            +
                file: Optional[IO[bytes]] = None,
         
     | 
| 
       30 
28 
     | 
    
         
             
            ) -> str:
         
     | 
| 
       31 
     | 
    
         
            -
                tempf = None
         
     | 
| 
       32 
29 
     | 
    
         
             
                if isinstance(fps, str):
         
     | 
| 
       33 
30 
     | 
    
         
             
                    # fps could be a string when it's passed in from a web endpoint deployment
         
     | 
| 
       34 
31 
     | 
    
         
             
                    fps = float(fps)
         
     | 
| 
       35 
     | 
    
         
            -
                if  
     | 
| 
       36 
     | 
    
         
            -
                     
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
       46 
     | 
    
         
            -
             
     | 
| 
       47 
     | 
    
         
            -
             
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
     | 
    
         
            -
             
     | 
| 
       50 
     | 
    
         
            -
             
     | 
| 
       51 
     | 
    
         
            -
             
     | 
| 
      
 32 
     | 
    
         
            +
                if file is None:
         
     | 
| 
      
 33 
     | 
    
         
            +
                    file = tempfile.NamedTemporaryFile(delete=False, suffix=".mp4")
         
     | 
| 
      
 34 
     | 
    
         
            +
                with av.open(file, "w") as container:
         
     | 
| 
      
 35 
     | 
    
         
            +
                    stream = container.add_stream("h264", rate=fps)
         
     | 
| 
      
 36 
     | 
    
         
            +
                    height, width = frames[0].shape[:2]
         
     | 
| 
      
 37 
     | 
    
         
            +
                    stream.height = height - (height % 2)
         
     | 
| 
      
 38 
     | 
    
         
            +
                    stream.width = width - (width % 2)
         
     | 
| 
      
 39 
     | 
    
         
            +
                    stream.pix_fmt = "yuv420p"
         
     | 
| 
      
 40 
     | 
    
         
            +
                    stream.options = {"crf": "10"}
         
     | 
| 
      
 41 
     | 
    
         
            +
                    for frame in frames:
         
     | 
| 
      
 42 
     | 
    
         
            +
                        # Remove the alpha channel (convert RGBA to RGB)
         
     | 
| 
      
 43 
     | 
    
         
            +
                        frame_rgb = frame[:, :, :3]
         
     | 
| 
      
 44 
     | 
    
         
            +
                        # Resize the frame to make dimensions divisible by 2
         
     | 
| 
      
 45 
     | 
    
         
            +
                        frame_rgb = _resize_frame(frame_rgb)
         
     | 
| 
      
 46 
     | 
    
         
            +
                        av_frame = av.VideoFrame.from_ndarray(frame_rgb, format="rgb24")
         
     | 
| 
      
 47 
     | 
    
         
            +
                        for packet in stream.encode(av_frame):
         
     | 
| 
      
 48 
     | 
    
         
            +
                            container.mux(packet)
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
                    for packet in stream.encode():
         
     | 
| 
       52 
51 
     | 
    
         
             
                        container.mux(packet)
         
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
       54 
     | 
    
         
            -
                for packet in stream.encode():
         
     | 
| 
       55 
     | 
    
         
            -
                    container.mux(packet)
         
     | 
| 
       56 
     | 
    
         
            -
                container.close()
         
     | 
| 
       57 
     | 
    
         
            -
                # for windows nee to manually close tempfile, cannot use with NamedTemporaryFile(delete=True)
         
     | 
| 
       58 
     | 
    
         
            -
                if tempf is not None:
         
     | 
| 
       59 
     | 
    
         
            -
                    tempf.close()
         
     | 
| 
       60 
     | 
    
         
            -
                return filename
         
     | 
| 
      
 52 
     | 
    
         
            +
                return file.name
         
     | 
| 
       61 
53 
     | 
    
         | 
| 
       62 
54 
     | 
    
         | 
| 
       63 
55 
     | 
    
         
             
            def frames_to_bytes(
         
     | 
| 
         @@ -73,11 +65,10 @@ def frames_to_bytes( 
     | 
|
| 
       73 
65 
     | 
    
         
             
                if isinstance(fps, str):
         
     | 
| 
       74 
66 
     | 
    
         
             
                    # fps could be a string when it's passed in from a web endpoint deployment
         
     | 
| 
       75 
67 
     | 
    
         
             
                    fps = float(fps)
         
     | 
| 
       76 
     | 
    
         
            -
                 
     | 
| 
       77 
     | 
    
         
            -
             
     | 
| 
       78 
     | 
    
         
            -
             
     | 
| 
      
 68 
     | 
    
         
            +
                with tempfile.NamedTemporaryFile(delete=True, suffix=file_ext) as f:
         
     | 
| 
      
 69 
     | 
    
         
            +
                    video_writer(frames, fps, f)
         
     | 
| 
      
 70 
     | 
    
         
            +
                    f.seek(0)
         
     | 
| 
       79 
71 
     | 
    
         
             
                    buffer_bytes = f.read()
         
     | 
| 
       80 
     | 
    
         
            -
                os.unlink(filename)
         
     | 
| 
       81 
72 
     | 
    
         
             
                return buffer_bytes
         
     | 
| 
       82 
73 
     | 
    
         | 
| 
       83 
74 
     | 
    
         | 
| 
         @@ -38,7 +38,7 @@ vision_agent/tools/__init__.py,sha256=T-MPNBVbvWtfo71hobaZsdYzQ52oyymolk_OAb2Pq_ 
     | 
|
| 
       38 
38 
     | 
    
         
             
            vision_agent/tools/meta_tools.py,sha256=-heMwGkx0hX_9zUp1dgBqsJpVnl6Y6tErMsjFy0dwLM,28652
         
     | 
| 
       39 
39 
     | 
    
         
             
            vision_agent/tools/planner_tools.py,sha256=orBTdJQz2NKoLuX9WE6XixaYuG305xz0UBYvZOiuquQ,19474
         
     | 
| 
       40 
40 
     | 
    
         
             
            vision_agent/tools/prompts.py,sha256=V1z4YJLXZuUl_iZ5rY0M5hHc_2tmMEUKr0WocXKGt4E,1430
         
     | 
| 
       41 
     | 
    
         
            -
            vision_agent/tools/tools.py,sha256= 
     | 
| 
      
 41 
     | 
    
         
            +
            vision_agent/tools/tools.py,sha256=8J-SYpyUeqMDajF7kp2aiTeBBQrJEWGVdEsQLPAc-OM,111511
         
     | 
| 
       42 
42 
     | 
    
         
             
            vision_agent/utils/__init__.py,sha256=mANUs_84VL-3gpZbXryvV2mWU623eWnRlJCSUHtMjuw,122
         
     | 
| 
       43 
43 
     | 
    
         
             
            vision_agent/utils/agent.py,sha256=QGKcbzpAjcVj0958bXYLv07-d2i1GU7-bXVG7bTGRMA,14619
         
     | 
| 
       44 
44 
     | 
    
         
             
            vision_agent/utils/exceptions.py,sha256=booSPSuoULF7OXRr_YbC4dtKt6gM_HyiFQHBuaW86C4,2052
         
     | 
| 
         @@ -47,9 +47,9 @@ vision_agent/utils/image_utils.py,sha256=bJM2mEvB6E__M9pxi74yQYzAiZ7mu3KE2ptyVrp 
     | 
|
| 
       47 
47 
     | 
    
         
             
            vision_agent/utils/tools.py,sha256=USZL0MKsiJgqA8RFiYRTcj_Kn2FVYKLHK4wIk0gP1Ow,7694
         
     | 
| 
       48 
48 
     | 
    
         
             
            vision_agent/utils/tools_doc.py,sha256=yFue6KSXoa_Z1ngCdBEc4SdPZOWF1rVLeaHu02I8Wis,2523
         
     | 
| 
       49 
49 
     | 
    
         
             
            vision_agent/utils/type_defs.py,sha256=BE12s3JNQy36QvauXHjwyeffVh5enfcvd4vTzSwvEZI,1384
         
     | 
| 
       50 
     | 
    
         
            -
            vision_agent/utils/video.py,sha256= 
     | 
| 
      
 50 
     | 
    
         
            +
            vision_agent/utils/video.py,sha256=rjsQ1sKKisaQ6AVjJz0zd_G4g-ovRweS_rs4JEhenoI,5340
         
     | 
| 
       51 
51 
     | 
    
         
             
            vision_agent/utils/video_tracking.py,sha256=GM9qfeawqhmZVWoKrzw5-NETd4gEo7ImMfWtBnhC3bw,12086
         
     | 
| 
       52 
     | 
    
         
            -
            vision_agent-0.2. 
     | 
| 
       53 
     | 
    
         
            -
            vision_agent-0.2. 
     | 
| 
       54 
     | 
    
         
            -
            vision_agent-0.2. 
     | 
| 
       55 
     | 
    
         
            -
            vision_agent-0.2. 
     | 
| 
      
 52 
     | 
    
         
            +
            vision_agent-0.2.240.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
         
     | 
| 
      
 53 
     | 
    
         
            +
            vision_agent-0.2.240.dist-info/METADATA,sha256=l9FlzNIT3ncQNxkIlTTUsB1aaL-7u2b1OtvYcRv0AIE,5712
         
     | 
| 
      
 54 
     | 
    
         
            +
            vision_agent-0.2.240.dist-info/WHEEL,sha256=7Z8_27uaHI_UZAc4Uox4PpBhQ9Y5_modZXWMxtUi4NU,88
         
     | 
| 
      
 55 
     | 
    
         
            +
            vision_agent-0.2.240.dist-info/RECORD,,
         
     | 
| 
         
            File without changes
         
     | 
| 
         
            File without changes
         
     |