vision-agent 0.2.235__py3-none-any.whl → 0.2.237__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/.sim_tools/df.csv +57 -80
- vision_agent/.sim_tools/embs.npy +0 -0
- vision_agent/agent/agent.py +2 -2
- vision_agent/agent/vision_agent.py +3 -2
- vision_agent/agent/vision_agent_coder.py +13 -19
- vision_agent/agent/vision_agent_coder_prompts.py +1 -1
- vision_agent/agent/vision_agent_coder_prompts_v2.py +1 -1
- vision_agent/agent/vision_agent_coder_v2.py +17 -17
- vision_agent/agent/vision_agent_planner.py +16 -21
- vision_agent/agent/vision_agent_planner_prompts_v2.py +20 -21
- vision_agent/agent/vision_agent_planner_v2.py +30 -14
- vision_agent/agent/vision_agent_v2.py +12 -12
- vision_agent/clients/landing_public_api.py +1 -1
- vision_agent/configs/config.py +17 -3
- vision_agent/lmm/__init__.py +0 -1
- vision_agent/lmm/lmm.py +4 -3
- vision_agent/models/__init__.py +11 -0
- vision_agent/{lmm/types.py → models/lmm_types.py} +4 -1
- vision_agent/sim/__init__.py +8 -0
- vision_agent/{utils → sim}/sim.py +3 -3
- vision_agent/tools/__init__.py +10 -23
- vision_agent/tools/meta_tools.py +4 -5
- vision_agent/tools/planner_tools.py +127 -37
- vision_agent/tools/tools.py +388 -302
- vision_agent/utils/__init__.py +0 -1
- vision_agent/{agent/agent_utils.py → utils/agent.py} +11 -2
- vision_agent/utils/image_utils.py +18 -7
- vision_agent/{tools/tool_utils.py → utils/tools.py} +1 -93
- vision_agent/utils/tools_doc.py +87 -0
- vision_agent/utils/video.py +15 -0
- vision_agent/utils/video_tracking.py +38 -5
- {vision_agent-0.2.235.dist-info → vision_agent-0.2.237.dist-info}/METADATA +2 -2
- vision_agent-0.2.237.dist-info/RECORD +55 -0
- vision_agent-0.2.235.dist-info/RECORD +0 -52
- /vision_agent/{agent/types.py → models/agent_types.py} +0 -0
- /vision_agent/{tools → models}/tools_types.py +0 -0
- {vision_agent-0.2.235.dist-info → vision_agent-0.2.237.dist-info}/LICENSE +0 -0
- {vision_agent-0.2.235.dist-info → vision_agent-0.2.237.dist-info}/WHEEL +0 -0
vision_agent/utils/__init__.py
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
import base64
|
1
2
|
import copy
|
2
3
|
import json
|
3
4
|
import logging
|
@@ -14,8 +15,7 @@ from rich.syntax import Syntax
|
|
14
15
|
from rich.table import Table
|
15
16
|
|
16
17
|
import vision_agent.tools as T
|
17
|
-
from vision_agent.
|
18
|
-
from vision_agent.lmm.types import Message
|
18
|
+
from vision_agent.models import AgentMessage, Message, PlanContext
|
19
19
|
from vision_agent.utils.execute import CodeInterpreter, Execution
|
20
20
|
from vision_agent.utils.image_utils import b64_to_pil, convert_to_b64
|
21
21
|
|
@@ -185,6 +185,7 @@ class DefaultImports:
|
|
185
185
|
"import os",
|
186
186
|
"import numpy as np",
|
187
187
|
"from vision_agent.tools import *",
|
188
|
+
"from vision_agent.tools.planner_tools import judge_od_results",
|
188
189
|
"from typing import *",
|
189
190
|
"from pillow_heif import register_heif_opener",
|
190
191
|
"register_heif_opener()",
|
@@ -248,6 +249,14 @@ def add_media_to_chat(
|
|
248
249
|
) as temp_file:
|
249
250
|
media_pil.save(temp_file, format="PNG")
|
250
251
|
media = str(temp_file.name)
|
252
|
+
elif isinstance(media, str) and media.startswith("data:video/"):
|
253
|
+
ext = media.split(";")[0].split("/")[-1]
|
254
|
+
with tempfile.NamedTemporaryFile(
|
255
|
+
mode="wb", suffix=f".{ext}", delete=False
|
256
|
+
) as temp_file:
|
257
|
+
media_bytes = base64.b64decode(media.split(",")[1])
|
258
|
+
temp_file.write(media_bytes)
|
259
|
+
media = str(temp_file.name)
|
251
260
|
if code_interpreter is not None:
|
252
261
|
media = str(code_interpreter.upload_file(media))
|
253
262
|
media_list_i.append(media)
|
@@ -183,7 +183,9 @@ def encode_image_bytes(image: bytes, resize: Optional[int] = None) -> str:
|
|
183
183
|
return encoded_image
|
184
184
|
|
185
185
|
|
186
|
-
def encode_media(
|
186
|
+
def encode_media(
|
187
|
+
media: Union[str, Path, np.ndarray, ImageType], resize: Optional[int] = None
|
188
|
+
) -> str:
|
187
189
|
if isinstance(media, str) and media.startswith(("http", "https")):
|
188
190
|
# for mp4 video url, we assume there is a same url but ends with png
|
189
191
|
# vision-agent-ui will upload this png when uploading the video
|
@@ -191,16 +193,25 @@ def encode_media(media: Union[str, Path], resize: Optional[int] = None) -> str:
|
|
191
193
|
return media[:-4] + ".png"
|
192
194
|
return media
|
193
195
|
|
194
|
-
|
195
|
-
if isinstance(media, str) and media.startswith("data:image/"):
|
196
|
-
image_pil = b64_to_pil(media)
|
196
|
+
def resize_to_b64(image: ImageType, resize: Optional[int] = None) -> str:
|
197
197
|
if resize is not None:
|
198
|
-
|
199
|
-
image_pil.thumbnail((resize, resize))
|
198
|
+
image.thumbnail((resize, resize))
|
200
199
|
buffer = io.BytesIO()
|
201
|
-
|
200
|
+
image.save(buffer, format="PNG")
|
202
201
|
return base64.b64encode(buffer.getvalue()).decode("utf-8")
|
203
202
|
|
203
|
+
# if media is in base64, numpy array or PIL Image ensure it's the correct resize
|
204
|
+
if isinstance(media, str) and media.startswith("data:image/"):
|
205
|
+
image_pil = b64_to_pil(media)
|
206
|
+
return resize_to_b64(image_pil, resize=resize)
|
207
|
+
|
208
|
+
if isinstance(media, np.ndarray):
|
209
|
+
image_pil = Image.fromarray(media).convert("RGB")
|
210
|
+
return resize_to_b64(image_pil, resize=resize)
|
211
|
+
|
212
|
+
if isinstance(media, ImageType):
|
213
|
+
return resize_to_b64(media, resize=resize)
|
214
|
+
|
204
215
|
extension = "png"
|
205
216
|
extension = Path(media).suffix
|
206
217
|
if extension.lower() not in {
|
@@ -1,18 +1,15 @@
|
|
1
|
-
import inspect
|
2
1
|
import logging
|
3
2
|
import os
|
4
3
|
from base64 import b64encode
|
5
|
-
from typing import Any,
|
4
|
+
from typing import Any, Dict, List, MutableMapping, Optional, Tuple
|
6
5
|
|
7
6
|
import numpy as np
|
8
|
-
import pandas as pd
|
9
7
|
from IPython.display import display
|
10
8
|
from pydantic import BaseModel
|
11
9
|
from requests import Session
|
12
10
|
from requests.adapters import HTTPAdapter
|
13
11
|
from urllib3.util.retry import Retry
|
14
12
|
|
15
|
-
from vision_agent.tools.tools_types import BoundingBoxes
|
16
13
|
from vision_agent.utils.exceptions import RemoteToolCallFailed
|
17
14
|
from vision_agent.utils.execute import Error, MimeType
|
18
15
|
from vision_agent.utils.image_utils import normalize_bbox
|
@@ -121,89 +118,6 @@ def _create_requests_session(
|
|
121
118
|
return session
|
122
119
|
|
123
120
|
|
124
|
-
def get_tool_documentation(funcs: List[Callable[..., Any]]) -> str:
|
125
|
-
docstrings = ""
|
126
|
-
for func in funcs:
|
127
|
-
docstrings += f"{func.__name__}{inspect.signature(func)}:\n{func.__doc__}\n\n"
|
128
|
-
|
129
|
-
return docstrings
|
130
|
-
|
131
|
-
|
132
|
-
def get_tool_descriptions(funcs: List[Callable[..., Any]]) -> str:
|
133
|
-
descriptions = ""
|
134
|
-
for func in funcs:
|
135
|
-
description = func.__doc__
|
136
|
-
if description is None:
|
137
|
-
description = ""
|
138
|
-
|
139
|
-
if "Parameters:" in description:
|
140
|
-
description = (
|
141
|
-
description[: description.find("Parameters:")]
|
142
|
-
.replace("\n", " ")
|
143
|
-
.strip()
|
144
|
-
)
|
145
|
-
|
146
|
-
description = " ".join(description.split())
|
147
|
-
descriptions += f"- {func.__name__}{inspect.signature(func)}: {description}\n"
|
148
|
-
return descriptions
|
149
|
-
|
150
|
-
|
151
|
-
def get_tool_descriptions_by_names(
|
152
|
-
tool_name: Optional[List[str]],
|
153
|
-
funcs: List[Callable[..., Any]],
|
154
|
-
util_funcs: List[
|
155
|
-
Callable[..., Any]
|
156
|
-
], # util_funcs will always be added to the list of functions
|
157
|
-
) -> str:
|
158
|
-
if tool_name is None:
|
159
|
-
return get_tool_descriptions(funcs + util_funcs)
|
160
|
-
|
161
|
-
invalid_names = [
|
162
|
-
name for name in tool_name if name not in {func.__name__ for func in funcs}
|
163
|
-
]
|
164
|
-
|
165
|
-
if invalid_names:
|
166
|
-
raise ValueError(f"Invalid customized tool names: {', '.join(invalid_names)}")
|
167
|
-
|
168
|
-
filtered_funcs = (
|
169
|
-
funcs
|
170
|
-
if not tool_name
|
171
|
-
else [func for func in funcs if func.__name__ in tool_name]
|
172
|
-
)
|
173
|
-
return get_tool_descriptions(filtered_funcs + util_funcs)
|
174
|
-
|
175
|
-
|
176
|
-
def get_tools_df(funcs: List[Callable[..., Any]]) -> pd.DataFrame:
|
177
|
-
data: Dict[str, List[str]] = {"desc": [], "doc": [], "name": []}
|
178
|
-
|
179
|
-
for func in funcs:
|
180
|
-
desc = func.__doc__
|
181
|
-
if desc is None:
|
182
|
-
desc = ""
|
183
|
-
desc = desc[: desc.find("Parameters:")].replace("\n", " ").strip()
|
184
|
-
desc = " ".join(desc.split())
|
185
|
-
|
186
|
-
doc = f"{func.__name__}{inspect.signature(func)}:\n{func.__doc__}"
|
187
|
-
data["desc"].append(desc)
|
188
|
-
data["doc"].append(doc)
|
189
|
-
data["name"].append(func.__name__)
|
190
|
-
|
191
|
-
return pd.DataFrame(data) # type: ignore
|
192
|
-
|
193
|
-
|
194
|
-
def get_tools_info(funcs: List[Callable[..., Any]]) -> Dict[str, str]:
|
195
|
-
data: Dict[str, str] = {}
|
196
|
-
|
197
|
-
for func in funcs:
|
198
|
-
desc = func.__doc__
|
199
|
-
if desc is None:
|
200
|
-
desc = ""
|
201
|
-
|
202
|
-
data[func.__name__] = f"{func.__name__}{inspect.signature(func)}:\n{desc}"
|
203
|
-
|
204
|
-
return data
|
205
|
-
|
206
|
-
|
207
121
|
def _call_post(
|
208
122
|
url: str,
|
209
123
|
payload: dict[str, Any],
|
@@ -259,12 +173,6 @@ def _call_post(
|
|
259
173
|
display({MimeType.APPLICATION_JSON: trace}, raw=True)
|
260
174
|
|
261
175
|
|
262
|
-
def filter_bboxes_by_threshold(
|
263
|
-
bboxes: BoundingBoxes, threshold: float
|
264
|
-
) -> BoundingBoxes:
|
265
|
-
return list(filter(lambda bbox: bbox.score >= threshold, bboxes))
|
266
|
-
|
267
|
-
|
268
176
|
def add_bboxes_from_masks(
|
269
177
|
all_preds: List[List[Dict[str, Any]]],
|
270
178
|
) -> List[List[Dict[str, Any]]]:
|
@@ -0,0 +1,87 @@
|
|
1
|
+
import inspect
|
2
|
+
from typing import Any, Callable, Dict, List, Optional
|
3
|
+
|
4
|
+
import pandas as pd
|
5
|
+
|
6
|
+
|
7
|
+
def get_tool_documentation(funcs: List[Callable[..., Any]]) -> str:
|
8
|
+
docstrings = ""
|
9
|
+
for func in funcs:
|
10
|
+
docstrings += f"{func.__name__}{inspect.signature(func)}:\n{func.__doc__}\n\n"
|
11
|
+
|
12
|
+
return docstrings
|
13
|
+
|
14
|
+
|
15
|
+
def get_tool_descriptions(funcs: List[Callable[..., Any]]) -> str:
|
16
|
+
descriptions = ""
|
17
|
+
for func in funcs:
|
18
|
+
description = func.__doc__
|
19
|
+
if description is None:
|
20
|
+
description = ""
|
21
|
+
|
22
|
+
if "Parameters:" in description:
|
23
|
+
description = (
|
24
|
+
description[: description.find("Parameters:")]
|
25
|
+
.replace("\n", " ")
|
26
|
+
.strip()
|
27
|
+
)
|
28
|
+
|
29
|
+
description = " ".join(description.split())
|
30
|
+
descriptions += f"- {func.__name__}{inspect.signature(func)}: {description}\n"
|
31
|
+
return descriptions
|
32
|
+
|
33
|
+
|
34
|
+
def get_tool_descriptions_by_names(
|
35
|
+
tool_name: Optional[List[str]],
|
36
|
+
funcs: List[Callable[..., Any]],
|
37
|
+
util_funcs: List[
|
38
|
+
Callable[..., Any]
|
39
|
+
], # util_funcs will always be added to the list of functions
|
40
|
+
) -> str:
|
41
|
+
if tool_name is None:
|
42
|
+
return get_tool_descriptions(funcs + util_funcs)
|
43
|
+
|
44
|
+
invalid_names = [
|
45
|
+
name for name in tool_name if name not in {func.__name__ for func in funcs}
|
46
|
+
]
|
47
|
+
|
48
|
+
if invalid_names:
|
49
|
+
raise ValueError(f"Invalid customized tool names: {', '.join(invalid_names)}")
|
50
|
+
|
51
|
+
filtered_funcs = (
|
52
|
+
funcs
|
53
|
+
if not tool_name
|
54
|
+
else [func for func in funcs if func.__name__ in tool_name]
|
55
|
+
)
|
56
|
+
return get_tool_descriptions(filtered_funcs + util_funcs)
|
57
|
+
|
58
|
+
|
59
|
+
def get_tools_df(funcs: List[Callable[..., Any]]) -> pd.DataFrame:
|
60
|
+
data: Dict[str, List[str]] = {"desc": [], "doc": [], "name": []}
|
61
|
+
|
62
|
+
for func in funcs:
|
63
|
+
desc = func.__doc__
|
64
|
+
if desc is None:
|
65
|
+
desc = ""
|
66
|
+
desc = desc[: desc.find("Parameters:")].replace("\n", " ").strip()
|
67
|
+
desc = " ".join(desc.split())
|
68
|
+
|
69
|
+
doc = f"{func.__name__}{inspect.signature(func)}:\n{func.__doc__}"
|
70
|
+
data["desc"].append(desc)
|
71
|
+
data["doc"].append(doc)
|
72
|
+
data["name"].append(func.__name__)
|
73
|
+
|
74
|
+
return pd.DataFrame(data) # type: ignore
|
75
|
+
|
76
|
+
|
77
|
+
def get_tools_info(funcs: List[Callable[..., Any]]) -> Dict[str, str]:
|
78
|
+
data: Dict[str, str] = {}
|
79
|
+
|
80
|
+
for func in funcs:
|
81
|
+
desc = func.__doc__
|
82
|
+
if desc is None:
|
83
|
+
desc = ""
|
84
|
+
|
85
|
+
data[func.__name__] = f"{func.__name__}{inspect.signature(func)}:\n{desc}"
|
86
|
+
|
87
|
+
return data
|
vision_agent/utils/video.py
CHANGED
@@ -106,6 +106,20 @@ def frames_to_bytes(
|
|
106
106
|
return buffer_bytes
|
107
107
|
|
108
108
|
|
109
|
+
def rescale(frame: np.ndarray, max_size: Tuple[int, int]) -> np.ndarray:
|
110
|
+
h, w = frame.shape[:2]
|
111
|
+
new_h, new_w = h, w
|
112
|
+
if new_h > max_size[0]:
|
113
|
+
new_h = max_size[0]
|
114
|
+
new_w = int(w * new_h / h)
|
115
|
+
if new_w > max_size[1]:
|
116
|
+
new_w = max_size[1]
|
117
|
+
new_h = int(h * new_w / w)
|
118
|
+
if h != new_h or w != new_w:
|
119
|
+
frame = cv2.resize(frame, (new_w, new_h))
|
120
|
+
return frame
|
121
|
+
|
122
|
+
|
109
123
|
# WARNING: This cache is a little dangerous because if the underlying video
|
110
124
|
# contents change but the filename remains the same it will return the old file contents.
|
111
125
|
# For vision agent it's unlikely to change the file contents while keeping the
|
@@ -158,6 +172,7 @@ def extract_frames_from_video(
|
|
158
172
|
# causes the last frame to be skipped
|
159
173
|
elapsed_time = round(elapsed_time, 8)
|
160
174
|
if elapsed_time >= targ_frame_time:
|
175
|
+
frame = rescale(frame, (1024, 1024))
|
161
176
|
frames.append((cv2.cvtColor(frame, cv2.COLOR_BGR2RGB), i / orig_fps))
|
162
177
|
elapsed_time -= targ_frame_time
|
163
178
|
|
@@ -5,11 +5,8 @@ from typing import Any, Callable, Dict, List, Optional, Tuple
|
|
5
5
|
import numpy as np
|
6
6
|
from scipy.optimize import linear_sum_assignment # type: ignore
|
7
7
|
|
8
|
-
from vision_agent.tools.tool_utils import (
|
9
|
-
add_bboxes_from_masks,
|
10
|
-
send_task_inference_request,
|
11
|
-
)
|
12
8
|
from vision_agent.utils.image_utils import denormalize_bbox, rle_decode_array
|
9
|
+
from vision_agent.utils.tools import add_bboxes_from_masks, send_task_inference_request
|
13
10
|
from vision_agent.utils.video import frames_to_bytes
|
14
11
|
|
15
12
|
|
@@ -115,6 +112,40 @@ def process_segment(
|
|
115
112
|
metadata=metadata,
|
116
113
|
)
|
117
114
|
|
115
|
+
segment_detections = join_scores(transformed_detections, segment_detections)
|
116
|
+
return segment_detections
|
117
|
+
|
118
|
+
|
119
|
+
def join_scores(
|
120
|
+
transformed_detections: List[Optional[Dict[str, Any]]],
|
121
|
+
segment_detections: List[List[Dict[str, Any]]],
|
122
|
+
) -> List[List[Dict[str, Any]]]:
|
123
|
+
# The scores should really be returned from the SAM2 endpoint so we don't have to
|
124
|
+
# try and match them.
|
125
|
+
for detection in transformed_detections:
|
126
|
+
if detection is not None:
|
127
|
+
for i in range(len(detection["scores"])):
|
128
|
+
id_to_score = {}
|
129
|
+
if len(segment_detections) > 0:
|
130
|
+
# This assumes none of the initial boxes are filtered out by SAM2
|
131
|
+
# so we have a 1:1 mapping between the initial boxes and the SAM2 boxes
|
132
|
+
for j, segment_detection in enumerate(segment_detections[0]):
|
133
|
+
id_to_score[segment_detection["id"]] = detection["scores"][j]
|
134
|
+
|
135
|
+
# after we've created the id_to_score, assign the scores. Some of the
|
136
|
+
# boxes could have been removed in subsequent frames, hence the mapping
|
137
|
+
# is needed
|
138
|
+
for t in range(len(segment_detections)):
|
139
|
+
for segment_detection in segment_detections[t]:
|
140
|
+
if segment_detection["id"] in id_to_score:
|
141
|
+
segment_detection["score"] = id_to_score[
|
142
|
+
segment_detection["id"]
|
143
|
+
]
|
144
|
+
else:
|
145
|
+
# if we can't find the score, set it to 1.0 so it doesn't
|
146
|
+
# get filtered out
|
147
|
+
segment_detection["score"] = 1.0
|
148
|
+
|
118
149
|
return segment_detections
|
119
150
|
|
120
151
|
|
@@ -141,11 +172,13 @@ def transform_detections(
|
|
141
172
|
bboxes = [
|
142
173
|
denormalize_bbox(detection["bbox"], image_size) for detection in frame
|
143
174
|
]
|
175
|
+
scores = [detection["score"] for detection in frame]
|
144
176
|
|
145
177
|
output_list.append(
|
146
178
|
{
|
147
179
|
"labels": labels,
|
148
180
|
"bboxes": bboxes,
|
181
|
+
"scores": scores,
|
149
182
|
}
|
150
183
|
)
|
151
184
|
else:
|
@@ -280,7 +313,7 @@ def post_process(
|
|
280
313
|
"label": label,
|
281
314
|
"mask": detection["decoded_mask"],
|
282
315
|
"rle": detection["mask"],
|
283
|
-
"score":
|
316
|
+
"score": detection["score"],
|
284
317
|
}
|
285
318
|
)
|
286
319
|
del detection["decoded_mask"]
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: vision-agent
|
3
|
-
Version: 0.2.
|
3
|
+
Version: 0.2.237
|
4
4
|
Summary: Toolset for Vision Agent
|
5
5
|
Author: Landing AI
|
6
6
|
Author-email: dev@landing.ai
|
@@ -85,7 +85,7 @@ You can run VisionAgent in a local Jupyter Notebook [Counting cans in an image](
|
|
85
85
|
You can use VisionAgent to generate code to count the number of people in an image:
|
86
86
|
```python
|
87
87
|
from vision_agent.agent import VisionAgentCoderV2
|
88
|
-
from vision_agent.
|
88
|
+
from vision_agent.models import AgentMessage
|
89
89
|
|
90
90
|
agent = VisionAgentCoderV2(verbose=True)
|
91
91
|
code_context = agent.generate_code(
|
@@ -0,0 +1,55 @@
|
|
1
|
+
vision_agent/.sim_tools/df.csv,sha256=3tuSr8bjF1pzjEpRJi7LLJssU_2A25SDCWvs4VZKkg4,41479
|
2
|
+
vision_agent/.sim_tools/embs.npy,sha256=pi7h3NHlrKncIGNR-oPn_XoTe2PzBb9-aFMi7qK0tEw,245888
|
3
|
+
vision_agent/__init__.py,sha256=EAb4-f9iyuEYkBrX4ag1syM8Syx8118_t0R6_C34M9w,57
|
4
|
+
vision_agent/agent/README.md,sha256=Q4w7FWw38qaWosQYAZ7NqWx8Q5XzuWrlv7nLhjUd1-8,5527
|
5
|
+
vision_agent/agent/__init__.py,sha256=M8CffavdIh8Zh-skznLHIaQkYGCGK7vk4dq1FaVkbs4,617
|
6
|
+
vision_agent/agent/agent.py,sha256=RoS7kMfXYILv0zuPpcxqQIlaHGa3K-qw_5EwgsEJTPQ,1530
|
7
|
+
vision_agent/agent/vision_agent.py,sha256=4LqvwPTSsiuJEDwBbMx9Dg9ALJwNR6x1c63TZvOMm8A,23486
|
8
|
+
vision_agent/agent/vision_agent_coder.py,sha256=Ry6AiyAj3hsSeYPu_5guMcTzf2E4SoebPzpHyJtSPbQ,27360
|
9
|
+
vision_agent/agent/vision_agent_coder_prompts.py,sha256=D4RJxTWoxpl-WtYRvHNxaLSdWVHsdYb0jJIQ2ZCGU0A,12277
|
10
|
+
vision_agent/agent/vision_agent_coder_prompts_v2.py,sha256=53b_DhQtffX5wxLuCbNQ83AJhB0P_3wEnuKr-v5bx-o,4866
|
11
|
+
vision_agent/agent/vision_agent_coder_v2.py,sha256=bWAUyk7-lYKwLIjkL_wUTeYv06zIIroJE1yIDRaGUHw,17059
|
12
|
+
vision_agent/agent/vision_agent_planner.py,sha256=rp_atRMDg35WFXNKOTkjUpGPrpSCsiMhcfZtqK-DIV4,18668
|
13
|
+
vision_agent/agent/vision_agent_planner_prompts.py,sha256=rYRdJthc-sQN57VgCBKrF09Sd73BSxcBdjNe6C4WNZ8,6837
|
14
|
+
vision_agent/agent/vision_agent_planner_prompts_v2.py,sha256=TiiF5BGnFVraFlQnDaeRU67927LvszvpcMUOgVgo0ps,35843
|
15
|
+
vision_agent/agent/vision_agent_planner_v2.py,sha256=IqEP5ded5P4ESkLEur81gUvJtTmTdlKAx9uQyLyIwPc,21212
|
16
|
+
vision_agent/agent/vision_agent_prompts.py,sha256=KaJwYPUP7_GvQsCPPs6Fdawmi3AQWmWajBUuzj7gTG4,13812
|
17
|
+
vision_agent/agent/vision_agent_prompts_v2.py,sha256=Wyxa15NOe75PefAfw3_RRwvgjg8YVqCrU7WvvWoYJpk,2733
|
18
|
+
vision_agent/agent/vision_agent_v2.py,sha256=O070_QdgsqNzex5eRtye8QmJgCtHcf_B7zeteWpw3LM,10895
|
19
|
+
vision_agent/clients/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
20
|
+
vision_agent/clients/http.py,sha256=k883i6M_4nl7zwwHSI-yP5sAgQZIDPM1nrKD6YFJ3Xs,2009
|
21
|
+
vision_agent/clients/landing_public_api.py,sha256=Vz9lldtNbaJRWzT7T8-uQrC-dMnt47LIsDrxHgoVdEw,1492
|
22
|
+
vision_agent/configs/__init__.py,sha256=Iu75-w9_nlPmnB_qKA7nYaaaHf7xtTrDmK8N4v2WV34,27
|
23
|
+
vision_agent/configs/anthropic_config.py,sha256=T1UuESgiY8913A6wA42P7-cg8FTk9-LkJpyywo7OnIQ,4298
|
24
|
+
vision_agent/configs/anthropic_openai_config.py,sha256=YQjFxmlxppn5L55dJjK_v1myBJQ_V5J4q25pmUtwTOU,4310
|
25
|
+
vision_agent/configs/config.py,sha256=rUz5zca4Pn5dTUwJXiJzRDYua5PWizApCKI3y0zOvhc,4699
|
26
|
+
vision_agent/configs/openai_config.py,sha256=v2_AIY89d7LKWn4uqA2G047U2IdmnqZrGH2Iww9gRIw,4498
|
27
|
+
vision_agent/fonts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
28
|
+
vision_agent/fonts/default_font_ch_en.ttf,sha256=1YM0Z3XqLDjSNbF7ihQFSAIUdjF9m1rtHiNC_6QosTE,1594400
|
29
|
+
vision_agent/lmm/__init__.py,sha256=4qX2lmGnKWHeKftXueEi9xj_ieK2nQh_ipHf72nKGFk,84
|
30
|
+
vision_agent/lmm/lmm.py,sha256=XYp1frrqQ-6q-0y2IWwM8-EIH5UrFZ21SAhkcM32J9w,19355
|
31
|
+
vision_agent/models/__init__.py,sha256=qAdygB-0EsmxMHNzYTPNM6tAF8Fym95gm9bsHJafdgE,287
|
32
|
+
vision_agent/models/agent_types.py,sha256=dIdxATH_PP76pD5Wfo0oofWt6iPQh0vpf48QbEQSzhs,2472
|
33
|
+
vision_agent/models/lmm_types.py,sha256=v04h-NjbczHOIN8UWa1vvO5-1BDuZ4JQhD2mge1cXmw,305
|
34
|
+
vision_agent/models/tools_types.py,sha256=8hYf2OZhI58gvf65KGaeGkt4EQ56nwLFqIQDPHioOBc,2339
|
35
|
+
vision_agent/sim/__init__.py,sha256=XYL4BKCB-pamJzCR1y2d5lC8FL64WGu0oEzWzLfguAQ,120
|
36
|
+
vision_agent/sim/sim.py,sha256=VSU_1rYd4ifvF45xKWBEYugxdeeEQVpj0QL6rjx49i4,9801
|
37
|
+
vision_agent/tools/__init__.py,sha256=T-MPNBVbvWtfo71hobaZsdYzQ52oyymolk_OAb2Pq_g,2463
|
38
|
+
vision_agent/tools/meta_tools.py,sha256=-heMwGkx0hX_9zUp1dgBqsJpVnl6Y6tErMsjFy0dwLM,28652
|
39
|
+
vision_agent/tools/planner_tools.py,sha256=iXyHjTBIWeQOCfcdQNufoQXfipHu_H38DIoK375FdnA,18492
|
40
|
+
vision_agent/tools/prompts.py,sha256=V1z4YJLXZuUl_iZ5rY0M5hHc_2tmMEUKr0WocXKGt4E,1430
|
41
|
+
vision_agent/tools/tools.py,sha256=-xg5Msq5ZtHgaISpHnbq5rJ5MIERwfH6wPHg6KpaYjg,111457
|
42
|
+
vision_agent/utils/__init__.py,sha256=mANUs_84VL-3gpZbXryvV2mWU623eWnRlJCSUHtMjuw,122
|
43
|
+
vision_agent/utils/agent.py,sha256=QGKcbzpAjcVj0958bXYLv07-d2i1GU7-bXVG7bTGRMA,14619
|
44
|
+
vision_agent/utils/exceptions.py,sha256=booSPSuoULF7OXRr_YbC4dtKt6gM_HyiFQHBuaW86C4,2052
|
45
|
+
vision_agent/utils/execute.py,sha256=vOEP5Ys7S2lc0_7pOJbgk7OaWi85hrCNu9_8Bo3zk6I,29356
|
46
|
+
vision_agent/utils/image_utils.py,sha256=bJM2mEvB6E__M9pxi74yQYzAiZ7mu3KE2ptyVrp5vzQ,12533
|
47
|
+
vision_agent/utils/tools.py,sha256=USZL0MKsiJgqA8RFiYRTcj_Kn2FVYKLHK4wIk0gP1Ow,7694
|
48
|
+
vision_agent/utils/tools_doc.py,sha256=yFue6KSXoa_Z1ngCdBEc4SdPZOWF1rVLeaHu02I8Wis,2523
|
49
|
+
vision_agent/utils/type_defs.py,sha256=BE12s3JNQy36QvauXHjwyeffVh5enfcvd4vTzSwvEZI,1384
|
50
|
+
vision_agent/utils/video.py,sha256=Dt9_pqGgr63gmpurzisnpF6d9tr65-zxS1CccXdVuxk,6458
|
51
|
+
vision_agent/utils/video_tracking.py,sha256=GM9qfeawqhmZVWoKrzw5-NETd4gEo7ImMfWtBnhC3bw,12086
|
52
|
+
vision_agent-0.2.237.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
53
|
+
vision_agent-0.2.237.dist-info/METADATA,sha256=MkwC7kWf1f5E1ArMWdjNx_GGNgFwfWQtHbfyDzHN8EM,5755
|
54
|
+
vision_agent-0.2.237.dist-info/WHEEL,sha256=7Z8_27uaHI_UZAc4Uox4PpBhQ9Y5_modZXWMxtUi4NU,88
|
55
|
+
vision_agent-0.2.237.dist-info/RECORD,,
|
@@ -1,52 +0,0 @@
|
|
1
|
-
vision_agent/.sim_tools/df.csv,sha256=oVUuyoVTCnayorbGUAvWed8l1YA_-rF9rSF78fMtvuU,42468
|
2
|
-
vision_agent/.sim_tools/embs.npy,sha256=YJe8EcKVNmeX_75CS2T1sbY-sUS_1HQAMT-34zc18a0,254080
|
3
|
-
vision_agent/__init__.py,sha256=EAb4-f9iyuEYkBrX4ag1syM8Syx8118_t0R6_C34M9w,57
|
4
|
-
vision_agent/agent/README.md,sha256=Q4w7FWw38qaWosQYAZ7NqWx8Q5XzuWrlv7nLhjUd1-8,5527
|
5
|
-
vision_agent/agent/__init__.py,sha256=M8CffavdIh8Zh-skznLHIaQkYGCGK7vk4dq1FaVkbs4,617
|
6
|
-
vision_agent/agent/agent.py,sha256=_1tHWAs7Jm5tqDzEcPfCRvJV3uRRveyh4n9_9pd6I1w,1565
|
7
|
-
vision_agent/agent/agent_utils.py,sha256=4RgG8SUEGuMFHkIt0jCFkRQF6G1PZp3Ub4LuVYKF7Ic,14092
|
8
|
-
vision_agent/agent/types.py,sha256=dIdxATH_PP76pD5Wfo0oofWt6iPQh0vpf48QbEQSzhs,2472
|
9
|
-
vision_agent/agent/vision_agent.py,sha256=fH9NOLk7twL1fPr9vLSqkaYhah-gfDWfTOVF2FfMyzI,23461
|
10
|
-
vision_agent/agent/vision_agent_coder.py,sha256=flUxOibyGZK19BCSK5mhaD3HjCxHw6c6FtKom6N2q1E,27359
|
11
|
-
vision_agent/agent/vision_agent_coder_prompts.py,sha256=_kkPLezUVnBXieNPlxMQab_6J6P7F-aa6ItF5NhZZsM,12281
|
12
|
-
vision_agent/agent/vision_agent_coder_prompts_v2.py,sha256=NUMWq-Lxq5JmmyWs3C5O_1Hm-zCbf9I_yPK5UtWGspE,4871
|
13
|
-
vision_agent/agent/vision_agent_coder_v2.py,sha256=yQYcO0s4BI9pWaAQQAVtkwWa3UF5w0iLKvwpeJ6iegM,17077
|
14
|
-
vision_agent/agent/vision_agent_planner.py,sha256=fFzjNkZBKkh8Y_oS06ATI4qz31xmIJvixb_tV1kX8KA,18590
|
15
|
-
vision_agent/agent/vision_agent_planner_prompts.py,sha256=rYRdJthc-sQN57VgCBKrF09Sd73BSxcBdjNe6C4WNZ8,6837
|
16
|
-
vision_agent/agent/vision_agent_planner_prompts_v2.py,sha256=JLiFZvwQFLYukgj4l-SzxSIjmJHTEkL2HSZbkjU529w,35591
|
17
|
-
vision_agent/agent/vision_agent_planner_v2.py,sha256=wISmdTN-W1pjgZg3_aneGowI3lRQRHTSbpyeTJ79O5A,20645
|
18
|
-
vision_agent/agent/vision_agent_prompts.py,sha256=KaJwYPUP7_GvQsCPPs6Fdawmi3AQWmWajBUuzj7gTG4,13812
|
19
|
-
vision_agent/agent/vision_agent_prompts_v2.py,sha256=Wyxa15NOe75PefAfw3_RRwvgjg8YVqCrU7WvvWoYJpk,2733
|
20
|
-
vision_agent/agent/vision_agent_v2.py,sha256=Q96YsLovCUOd6m2Cg7EGCiHshDq65vxHsfVj7IToyls,10936
|
21
|
-
vision_agent/clients/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
22
|
-
vision_agent/clients/http.py,sha256=k883i6M_4nl7zwwHSI-yP5sAgQZIDPM1nrKD6YFJ3Xs,2009
|
23
|
-
vision_agent/clients/landing_public_api.py,sha256=lU2ev6E8NICmR8DMUljuGcVFy5VNJQ4WQkWC8WnnJEc,1503
|
24
|
-
vision_agent/configs/__init__.py,sha256=Iu75-w9_nlPmnB_qKA7nYaaaHf7xtTrDmK8N4v2WV34,27
|
25
|
-
vision_agent/configs/anthropic_config.py,sha256=T1UuESgiY8913A6wA42P7-cg8FTk9-LkJpyywo7OnIQ,4298
|
26
|
-
vision_agent/configs/anthropic_openai_config.py,sha256=YQjFxmlxppn5L55dJjK_v1myBJQ_V5J4q25pmUtwTOU,4310
|
27
|
-
vision_agent/configs/config.py,sha256=YQjFxmlxppn5L55dJjK_v1myBJQ_V5J4q25pmUtwTOU,4310
|
28
|
-
vision_agent/configs/openai_config.py,sha256=v2_AIY89d7LKWn4uqA2G047U2IdmnqZrGH2Iww9gRIw,4498
|
29
|
-
vision_agent/fonts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
30
|
-
vision_agent/fonts/default_font_ch_en.ttf,sha256=1YM0Z3XqLDjSNbF7ihQFSAIUdjF9m1rtHiNC_6QosTE,1594400
|
31
|
-
vision_agent/lmm/__init__.py,sha256=xk2Rn8Zgpy2xwYaOGHzy4tXxnxo2aj6SkpNjeJ8yxcY,111
|
32
|
-
vision_agent/lmm/lmm.py,sha256=arwfYPWme_RxCxSpEQ0ZkpHO22GFPCwVeoSvXqLPOAk,19288
|
33
|
-
vision_agent/lmm/types.py,sha256=ZEXR_ptBL0ZwDMTDYkgxUCmSZFmBYPQd2jreNzr_8UY,221
|
34
|
-
vision_agent/tools/__init__.py,sha256=zopUrANPx7p0NGy6BxmEaYhDrj8DX8w7BLfgmCbz-mU,2897
|
35
|
-
vision_agent/tools/meta_tools.py,sha256=TPeS7QWnc_PmmU_ndiDT03dXbQ5yDSP33E7U8cSj7Ls,28660
|
36
|
-
vision_agent/tools/planner_tools.py,sha256=8pJZCGGOGIqGiV2or52BjyRP6eDlporuQ2hXCIHfLTQ,15382
|
37
|
-
vision_agent/tools/prompts.py,sha256=V1z4YJLXZuUl_iZ5rY0M5hHc_2tmMEUKr0WocXKGt4E,1430
|
38
|
-
vision_agent/tools/tool_utils.py,sha256=l4oWkgPd_s8QzXqqbrLwPgcfnhsJaPpdMKikOcwRaoQ,10396
|
39
|
-
vision_agent/tools/tools.py,sha256=MBeFVYyCx-QQLCFb0Cn4m6SgmT6-6HxUOmCKAARrv6s,108547
|
40
|
-
vision_agent/tools/tools_types.py,sha256=8hYf2OZhI58gvf65KGaeGkt4EQ56nwLFqIQDPHioOBc,2339
|
41
|
-
vision_agent/utils/__init__.py,sha256=QKk4zVjMwGxQI0MQ-aZZA50N-qItxRY4EB9CwQkZ2HY,185
|
42
|
-
vision_agent/utils/exceptions.py,sha256=booSPSuoULF7OXRr_YbC4dtKt6gM_HyiFQHBuaW86C4,2052
|
43
|
-
vision_agent/utils/execute.py,sha256=vOEP5Ys7S2lc0_7pOJbgk7OaWi85hrCNu9_8Bo3zk6I,29356
|
44
|
-
vision_agent/utils/image_utils.py,sha256=z_ONgcza125B10NkoGwPOzXnL470bpTWZbkB16NeeH0,12188
|
45
|
-
vision_agent/utils/sim.py,sha256=DYya76dYVtifFyXilMLxBzGgyfyeqhEwU4RJ4894lCI,9796
|
46
|
-
vision_agent/utils/type_defs.py,sha256=BE12s3JNQy36QvauXHjwyeffVh5enfcvd4vTzSwvEZI,1384
|
47
|
-
vision_agent/utils/video.py,sha256=e1VwKhXzzlC5LcFMyrcQYrPnpnX4wxDpnQ-76sB4jgM,6001
|
48
|
-
vision_agent/utils/video_tracking.py,sha256=PXZYB0ZJM97WU52XbucyoXX2GW9-gNpSHrPF30_Lq1Q,10263
|
49
|
-
vision_agent-0.2.235.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
50
|
-
vision_agent-0.2.235.dist-info/METADATA,sha256=bAPsRs8veydvltpYRLYxAOB_bhASv9zKkE9TjkPVm2Q,5760
|
51
|
-
vision_agent-0.2.235.dist-info/WHEEL,sha256=7Z8_27uaHI_UZAc4Uox4PpBhQ9Y5_modZXWMxtUi4NU,88
|
52
|
-
vision_agent-0.2.235.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|