vision-agent 0.2.90__py3-none-any.whl → 0.2.92__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.
@@ -40,9 +40,7 @@ _SESSION_TIMEOUT = 600 # 10 minutes
40
40
 
41
41
 
42
42
  class MimeType(str, Enum):
43
- """
44
- Represents a MIME type.
45
- """
43
+ """Represents a MIME type."""
46
44
 
47
45
  TEXT_PLAIN = "text/plain"
48
46
  TEXT_HTML = "text/html"
@@ -58,7 +56,9 @@ class MimeType(str, Enum):
58
56
 
59
57
 
60
58
  class FileSerializer:
61
- """Adaptor class that allows IPython.display.display() to serialize a file to a base64 string representation."""
59
+ """Adaptor class that allows IPython.display.display() to serialize a file to a
60
+ base64 string representation.
61
+ """
62
62
 
63
63
  def __init__(self, file_uri: str):
64
64
  self.video_uri = file_uri
@@ -76,13 +76,15 @@ class FileSerializer:
76
76
 
77
77
 
78
78
  class Result:
79
- """
80
- Represents the data to be displayed as a result of executing a cell in a Jupyter notebook.
81
- The result is similar to the structure returned by ipython kernel: https://ipython.readthedocs.io/en/stable/development/execution.html#execution-semantics
79
+ """Represents the data to be displayed as a result of executing a cell in a Jupyter
80
+ notebook. The result is similar to the structure returned by ipython kernel:
81
+ https://ipython.readthedocs.io/en/stable/development/execution.html#execution-semantics
82
82
 
83
- The result can contain multiple types of data, such as text, images, plots, etc. Each type of data is represented
84
- as a string, and the result can contain multiple types of data. The display calls don't have to have text representation,
85
- for the actual result the representation is always present for the result, the other representations are always optional.
83
+ The result can contain multiple types of data, such as text, images, plots, etc.
84
+ Each type of data is represented as a string, and the result can contain multiple
85
+ types of data. The display calls don't have to have text representation, for the
86
+ actual result the representation is always present for the result, the other
87
+ representations are always optional.
86
88
 
87
89
  The class also provides methods to display the data in a Jupyter notebook.
88
90
  """
@@ -143,62 +145,43 @@ class Result:
143
145
  return str(self.raw)
144
146
 
145
147
  def _repr_html_(self) -> Optional[str]:
146
- """
147
- Returns the HTML representation of the data.
148
- """
148
+ """Returns the HTML representation of the data."""
149
149
  return self.html
150
150
 
151
151
  def _repr_markdown_(self) -> Optional[str]:
152
- """
153
- Returns the Markdown representation of the data.
154
- """
152
+ """Returns the Markdown representation of the data."""
155
153
  return self.markdown
156
154
 
157
155
  def _repr_svg_(self) -> Optional[str]:
158
- """
159
- Returns the SVG representation of the data.
160
- """
156
+ """Returns the SVG representation of the data."""
161
157
  return self.svg
162
158
 
163
159
  def _repr_png_(self) -> Optional[str]:
164
- """
165
- Returns the base64 representation of the PNG data.
166
- """
160
+ """Returns the base64 representation of the PNG data."""
167
161
  return self.png
168
162
 
169
163
  def _repr_jpeg_(self) -> Optional[str]:
170
- """
171
- Returns the base64 representation of the JPEG data.
172
- """
164
+ """Returns the base64 representation of the JPEG data."""
173
165
  return self.jpeg
174
166
 
175
167
  def _repr_pdf_(self) -> Optional[str]:
176
- """
177
- Returns the PDF representation of the data.
178
- """
168
+ """Returns the PDF representation of the data."""
179
169
  return self.pdf
180
170
 
181
171
  def _repr_latex_(self) -> Optional[str]:
182
- """
183
- Returns the LaTeX representation of the data.
184
- """
172
+ """Returns the LaTeX representation of the data."""
185
173
  return self.latex
186
174
 
187
175
  def _repr_json_(self) -> Optional[dict]:
188
- """
189
- Returns the JSON representation of the data.
190
- """
176
+ """Returns the JSON representation of the data."""
191
177
  return self.json
192
178
 
193
179
  def _repr_javascript_(self) -> Optional[str]:
194
- """
195
- Returns the JavaScript representation of the data.
196
- """
180
+ """Returns the JavaScript representation of the data."""
197
181
  return self.javascript
198
182
 
199
183
  def formats(self) -> Iterable[str]:
200
- """
201
- Returns all available formats of the result.
184
+ """Returns all available formats of the result.
202
185
 
203
186
  :return: All available formats of the result in MIME types.
204
187
  """
@@ -239,8 +222,8 @@ class Result:
239
222
 
240
223
 
241
224
  class Logs(BaseModel):
242
- """
243
- Data printed to stdout and stderr during execution, usually by print statements, logs, warnings, subprocesses, etc.
225
+ """Data printed to stdout and stderr during execution, usually by print statements,
226
+ logs, warnings, subprocesses, etc.
244
227
  """
245
228
 
246
229
  stdout: List[str] = []
@@ -257,9 +240,8 @@ class Logs(BaseModel):
257
240
 
258
241
 
259
242
  class Error(BaseModel):
260
- """
261
- Represents an error that occurred during the execution of a cell.
262
- The error contains the name of the error, the value of the error, and the traceback.
243
+ """Represents an error that occurred during the execution of a cell. The error
244
+ contains the name of the error, the value of the error, and the traceback.
263
245
  """
264
246
 
265
247
  name: str
@@ -290,9 +272,7 @@ class Error(BaseModel):
290
272
 
291
273
 
292
274
  class Execution(BaseModel):
293
- """
294
- Represents the result of a cell execution.
295
- """
275
+ """Represents the result of a cell execution."""
296
276
 
297
277
  class Config:
298
278
  arbitrary_types_allowed = True
@@ -305,8 +285,8 @@ class Execution(BaseModel):
305
285
  "Error object if an error occurred, None otherwise."
306
286
 
307
287
  def text(self, include_logs: bool = True) -> str:
308
- """
309
- Returns the text representation of this object, i.e. including the main result or the error traceback, optionally along with the logs (stdout, stderr).
288
+ """Returns the text representation of this object, i.e. including the main
289
+ result or the error traceback, optionally along with the logs (stdout, stderr).
310
290
  """
311
291
  prefix = str(self.logs) if include_logs else ""
312
292
  if self.error:
@@ -330,9 +310,9 @@ class Execution(BaseModel):
330
310
  return self.error is None
331
311
 
332
312
  def get_main_result(self) -> Optional[Result]:
333
- """
334
- Get the main result of the execution.
335
- An execution may have multiple results, e.g. intermediate outputs. The main result is the last output of the cell execution.
313
+ """Get the main result of the execution. An execution may have multiple
314
+ results, e.g. intermediate outputs. The main result is the last output of the
315
+ cell execution.
336
316
  """
337
317
  if not self.success:
338
318
  _LOGGER.info("Result is not available as the execution was not successful.")
@@ -345,16 +325,13 @@ class Execution(BaseModel):
345
325
  return main_result
346
326
 
347
327
  def to_json(self) -> str:
348
- """
349
- Returns the JSON representation of the Execution object.
350
- """
328
+ """Returns the JSON representation of the Execution object."""
351
329
  return self.model_dump_json(exclude_none=True)
352
330
 
353
331
  @field_serializer("results", when_used="json")
354
332
  def serialize_results(results: List[Result]) -> List[Dict[str, Union[str, bool]]]: # type: ignore
355
- """
356
- Serializes the results to JSON.
357
- This method is used by the Pydantic JSON encoder.
333
+ """Serializes the results to JSON. This method is used by the Pydantic JSON
334
+ encoder.
358
335
  """
359
336
  serialized = []
360
337
  for result in results:
@@ -367,9 +344,7 @@ class Execution(BaseModel):
367
344
 
368
345
  @staticmethod
369
346
  def from_exception(exec: Exception, traceback_raw: List[str]) -> "Execution":
370
- """
371
- Creates an Execution object from an exception.
372
- """
347
+ """Creates an Execution object from an exception."""
373
348
  return Execution(
374
349
  error=Error(
375
350
  name=exec.__class__.__name__,
@@ -382,9 +357,7 @@ class Execution(BaseModel):
382
357
 
383
358
  @staticmethod
384
359
  def from_e2b_execution(exec: E2BExecution) -> "Execution": # type: ignore
385
- """
386
- Creates an Execution object from an E2BResult object.
387
- """
360
+ """Creates an Execution object from an E2BResult object."""
388
361
  return Execution(
389
362
  results=[Result.from_e2b_result(res) for res in exec.results],
390
363
  logs=Logs(stdout=exec.logs.stdout, stderr=exec.logs.stderr),
@@ -545,6 +518,8 @@ nbclient version: {nbclient_version}
545
518
  nbformat version: {nbformat.__version__}
546
519
  Timeout: {self.timeout}"""
547
520
  )
521
+ sleep(1)
522
+ self._new_kernel()
548
523
 
549
524
  def _new_kernel(self) -> None:
550
525
  if self.nb_client.kc is None or not run_sync(self.nb_client.kc.is_alive)(): # type: ignore
@@ -557,17 +532,19 @@ Timeout: {self.timeout}"""
557
532
  run_sync(self.nb_client.km.shutdown_kernel)(now=True)
558
533
  run_sync(self.nb_client.km.cleanup_resources)()
559
534
 
560
- channels = [
561
- self.nb_client.kc.stdin_channel,
562
- self.nb_client.kc.hb_channel,
563
- self.nb_client.kc.control_channel,
564
- ]
535
+ if self.nb_client.kc is not None:
536
+ channels = [
537
+ self.nb_client.kc.stdin_channel,
538
+ self.nb_client.kc.hb_channel,
539
+ self.nb_client.kc.control_channel,
540
+ ]
565
541
 
566
- for ch in channels:
567
- if ch.is_alive():
568
- ch.stop()
542
+ for ch in channels:
543
+ if ch.is_alive():
544
+ ch.stop()
545
+ self.nb_client.kc.stop_channels()
569
546
 
570
- self.nb_client.kc = None
547
+ self.nb_client.kc = None
571
548
  self.nb_client.km = None
572
549
 
573
550
  def restart_kernel(self) -> None:
@@ -634,9 +611,8 @@ class CodeInterpreterFactory:
634
611
 
635
612
 
636
613
  def _parse_local_code_interpreter_outputs(outputs: List[Dict[str, Any]]) -> Execution:
637
- """
638
- Parse notebook cell outputs to Execution object.
639
- Output types: https://nbformat.readthedocs.io/en/latest/format_description.html#code-cell-outputs
614
+ """Parse notebook cell outputs to Execution object. Output types:
615
+ https://nbformat.readthedocs.io/en/latest/format_description.html#code-cell-outputs
640
616
  """
641
617
  execution = Execution()
642
618
  for data in outputs:
@@ -232,7 +232,7 @@ def overlay_heat_map(
232
232
 
233
233
  Parameters:
234
234
  image: the input image
235
- masks: the heatmap to overlay
235
+ heat_map: the heatmap to overlay
236
236
  alpha: the transparency of the overlay
237
237
 
238
238
  Returns:
@@ -14,7 +14,7 @@ class LandingaiAPIKey(BaseSettings):
14
14
  """
15
15
 
16
16
  api_key: str = Field(
17
- default="land_sk_IJrojHarPXRjqDj1Fng76mX7yCbzVm1s5rZYxaNXu5v0cNLn0w",
17
+ default="land_sk_fnmSzD0ksknSfvhyD8UGu9R4ss3bKfLL1Im5gb6tDQTy2z1Oy5",
18
18
  alias="LANDINGAI_API_KEY",
19
19
  description="The API key of LandingAI.",
20
20
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: vision-agent
3
- Version: 0.2.90
3
+ Version: 0.2.92
4
4
  Summary: Toolset for Vision Agent
5
5
  Author: Landing AI
6
6
  Author-email: dev@landing.ai
@@ -57,7 +57,7 @@ code to solve the task for them. Check out our discord for updates and roadmaps!
57
57
 
58
58
  ## Web Application
59
59
 
60
- Try Vision Agent live on [va.landing.ai](https://va.landing.ai/)
60
+ Try Vision Agent live on (note this may not be running the most up-to-date version) [va.landing.ai](https://va.landing.ai/)
61
61
 
62
62
  ## Documentation
63
63
 
@@ -79,16 +79,44 @@ using Azure OpenAI please see the Azure setup section):
79
79
  export OPENAI_API_KEY="your-api-key"
80
80
  ```
81
81
 
82
- ### Important Note on API Usage
83
- Please be aware that using the API in this project requires you to have API credits (minimum of five US dollars). This is different from the OpenAI subscription used in this chatbot. If you don't have credit, further information can be found [here](https://github.com/landing-ai/vision-agent?tab=readme-ov-file#how-to-get-started-with-openai-api-credits)
84
-
85
82
  ### Vision Agent
83
+ There are two agents that you can use. Vision Agent is a conversational agent that has
84
+ access to tools that allow it to write an navigate python code and file systems. It can
85
+ converse with the user in natural language. VisionAgentCoder is an agent that can write
86
+ code for vision tasks, such as counting people in an image. However, it cannot converse
87
+ and can only respond with code. VisionAgent can call VisionAgentCoder to write vision
88
+ code.
89
+
86
90
  #### Basic Usage
87
- You can interact with the agent as you would with any LLM or LMM model:
91
+ To run the streamlit app locally to chat with Vision Agent, you can run the following
92
+ command:
93
+
94
+ ```bash
95
+ pip install -r examples/chat/requirements.txt
96
+ export WORKSPACE=/path/to/your/workspace
97
+ export ZMQ_PORT=5555
98
+ streamlit run examples/chat/app.py
99
+ ```
100
+ You can find more details about the streamlit app [here](examples/chat/).
88
101
 
102
+ #### Basic Programmatic Usage
89
103
  ```python
90
104
  >>> from vision_agent.agent import VisionAgent
91
105
  >>> agent = VisionAgent()
106
+ >>> resp = agent("Hello")
107
+ >>> print(resp)
108
+ [{"role": "user", "content": "Hello"}, {"role": "assistant", "content": "{'thoughts': 'The user has greeted me. I will respond with a greeting and ask how I can assist them.', 'response': 'Hello! How can I assist you today?', 'let_user_respond': True}"}]
109
+ >>> resp.append({"role": "user", "content": "Can you count the number of people in this image?", "media": ["people.jpg"]})
110
+ >>> resp = agent(resp)
111
+ ```
112
+
113
+ ### Vision Agent Coder
114
+ #### Basic Usage
115
+ You can interact with the agent as you would with any LLM or LMM model:
116
+
117
+ ```python
118
+ >>> from vision_agent.agent import VisionAgentCoder
119
+ >>> agent = VisionAgentCoder()
92
120
  >>> code = agent("What percentage of the area of the jar is filled with coffee beans?", media="jar.jpg")
93
121
  ```
94
122
 
@@ -129,7 +157,7 @@ To better understand how the model came up with it's answer, you can run it in d
129
157
  mode by passing in the verbose argument:
130
158
 
131
159
  ```python
132
- >>> agent = VisionAgent(verbose=2)
160
+ >>> agent = VisionAgentCoder(verbose=2)
133
161
  ```
134
162
 
135
163
  #### Detailed Usage
@@ -219,9 +247,11 @@ def custom_tool(image_path: str) -> str:
219
247
  return np.zeros((10, 10))
220
248
  ```
221
249
 
222
- You need to ensure you call `@va.tools.register_tool` with any imports it might use and
223
- ensure the documentation is in the same format above with description, `Parameters:`,
224
- `Returns:`, and `Example\n-------`. You can find an example use case [here](examples/custom_tools/).
250
+ You need to ensure you call `@va.tools.register_tool` with any imports it uses. Global
251
+ variables will not be captured by `register_tool` so you need to include them in the
252
+ function. Make sure the documentation is in the same format above with description,
253
+ `Parameters:`, `Returns:`, and `Example\n-------`. You can find an example use case
254
+ [here](examples/custom_tools/) as this is what the agent uses to pick and use the tool.
225
255
 
226
256
  ### Azure Setup
227
257
  If you want to use Azure OpenAI models, you need to have two OpenAI model deployments:
@@ -248,7 +278,7 @@ You can then run Vision Agent using the Azure OpenAI models:
248
278
 
249
279
  ```python
250
280
  import vision_agent as va
251
- agent = va.agent.AzureVisionAgent()
281
+ agent = va.agent.AzureVisionAgentCoder()
252
282
  ```
253
283
 
254
284
  ******************************************************************************************************************************
@@ -257,7 +287,7 @@ agent = va.agent.AzureVisionAgent()
257
287
 
258
288
  #### How to get started with OpenAI API credits
259
289
 
260
- 1. Visit the[OpenAI API platform](https://beta.openai.com/signup/) to sign up for an API key.
290
+ 1. Visit the [OpenAI API platform](https://beta.openai.com/signup/) to sign up for an API key.
261
291
  2. Follow the instructions to purchase and manage your API credits.
262
292
  3. Ensure your API key is correctly configured in your project settings.
263
293
 
@@ -0,0 +1,29 @@
1
+ vision_agent/__init__.py,sha256=EAb4-f9iyuEYkBrX4ag1syM8Syx8118_t0R6_C34M9w,57
2
+ vision_agent/agent/__init__.py,sha256=qpduQ9YufJQfMmG6jwKC2xmlbtR2qK8_1eQC1sGA9Ks,135
3
+ vision_agent/agent/agent.py,sha256=Bt8yhjCFXuRdZaHxKEesG40V09nWRt45sZluri1R3AA,575
4
+ vision_agent/agent/agent_utils.py,sha256=JXdl2xz14LKQAmScY-MIW23AD2WBFCsnI0JS6dAyj3Q,1412
5
+ vision_agent/agent/vision_agent.py,sha256=i_rNpc7faqHTifp2c9sQE4Js3qYUKuJeiqauTp90OlE,8417
6
+ vision_agent/agent/vision_agent_coder.py,sha256=Ouq3ws7w5zq8fw550aBrCjerNUrQ0MNvR45dkqTtReE,30321
7
+ vision_agent/agent/vision_agent_coder_prompts.py,sha256=a3R_vHlT2FW3-DSn4OWgzF9zEAx-uKM4ZaTi9Kn-K54,11116
8
+ vision_agent/agent/vision_agent_prompts.py,sha256=hjs-m4ZHR7HE1HtOeX_1rOvTQA2FMEAqEkaBbGPBYDo,6072
9
+ vision_agent/fonts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
+ vision_agent/fonts/default_font_ch_en.ttf,sha256=1YM0Z3XqLDjSNbF7ihQFSAIUdjF9m1rtHiNC_6QosTE,1594400
11
+ vision_agent/lmm/__init__.py,sha256=YuUZRsMHdn8cMOv6iBU8yUqlIOLrbZQqZl9KPnofsHQ,103
12
+ vision_agent/lmm/lmm.py,sha256=KcS6h-8whGFmwt7t4LNlj0hZ4U-rBojYBLKLmrMsF48,15075
13
+ vision_agent/lmm/types.py,sha256=8TSRoTbXyCKVJiH-wHXI2OiGOMSkYv1vLGYeAXtNpOQ,153
14
+ vision_agent/tools/__init__.py,sha256=UNiaJAOt1C709gaJ-a9h9BzKnY5JmoEUpgKftsOnyPQ,1882
15
+ vision_agent/tools/meta_tools.py,sha256=rmxgVzj-vJKeewHbue3qHru4sYsFLxlSZV-YH-eyH5w,13366
16
+ vision_agent/tools/prompts.py,sha256=V1z4YJLXZuUl_iZ5rY0M5hHc_2tmMEUKr0WocXKGt4E,1430
17
+ vision_agent/tools/tool_utils.py,sha256=XoB-iae8hHrBQgJd3fV6-UjZAkClysobUaOM17IcHuE,4597
18
+ vision_agent/tools/tools.py,sha256=HT8stRTUmhwm2VbpB3QQNXnL1KIxka-BDCkU2tLaFN4,42326
19
+ vision_agent/utils/__init__.py,sha256=CW84HnhqI6XQVuxf2KifkLnSuO7EOhmuL09-gAymAak,219
20
+ vision_agent/utils/exceptions.py,sha256=isVH-SVL4vHj3q5kK4z7cy5_aOapAqHXWkpibfSNbUs,1659
21
+ vision_agent/utils/execute.py,sha256=JPjiXyAHsMSPYFDZ9bmiiX2lgiGroxqDhXhsD8BTv5E,23848
22
+ vision_agent/utils/image_utils.py,sha256=y69wtNla0xHZ1h1x0-vv7nOyKUq69jtjSJBiDCn6EM0,7703
23
+ vision_agent/utils/sim.py,sha256=1HTaiVaBiKeyXIy21IYGXlPw0TipOyw9FPOJDfyLI94,4409
24
+ vision_agent/utils/type_defs.py,sha256=oVFJcicB-s_09lqvn61u0A5ncZsTqZArZledXWbrrg0,1384
25
+ vision_agent/utils/video.py,sha256=rNmU9KEIkZB5-EztZNlUiKYN0mm_55A_2VGUM0QpqLA,8779
26
+ vision_agent-0.2.92.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
27
+ vision_agent-0.2.92.dist-info/METADATA,sha256=HFAMIUcz8BQt6I44NYphv28olQx0mVPBC0q1V4XjRtk,10693
28
+ vision_agent-0.2.92.dist-info/WHEEL,sha256=7Z8_27uaHI_UZAc4Uox4PpBhQ9Y5_modZXWMxtUi4NU,88
29
+ vision_agent-0.2.92.dist-info/RECORD,,
@@ -1,24 +0,0 @@
1
- vision_agent/__init__.py,sha256=EAb4-f9iyuEYkBrX4ag1syM8Syx8118_t0R6_C34M9w,57
2
- vision_agent/agent/__init__.py,sha256=IUwfbPMcT8X_rnXMLmI8gJ4ltsHy_XSs9eLiKURJxeY,81
3
- vision_agent/agent/agent.py,sha256=ZK-5lOtd9-eD9aWcXssJpnOyvZuO7_5hAmnb-6sWVe8,569
4
- vision_agent/agent/vision_agent.py,sha256=y2bZ1vB4_rfvFF-FgHSnVi3tYD9aZ_g85Dd7HZZdVpk,31351
5
- vision_agent/agent/vision_agent_prompts.py,sha256=brBV-SmzyzTG5M9nfV3R5xdYT_BUYOKzxNFmTa2Sp-o,11049
6
- vision_agent/fonts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
- vision_agent/fonts/default_font_ch_en.ttf,sha256=1YM0Z3XqLDjSNbF7ihQFSAIUdjF9m1rtHiNC_6QosTE,1594400
8
- vision_agent/lmm/__init__.py,sha256=j9mQsIXQOYfW6nFd47uTwuBe1ranpEbwW308qLfCWN0,85
9
- vision_agent/lmm/lmm.py,sha256=035uONyp6_jD3PVdNdSg2PMHOG1voqnpsn2IyybUENs,15147
10
- vision_agent/tools/__init__.py,sha256=k69hvcy2FWjDqVA0klzybKeoToOH_bom5NTVSliA0Og,1838
11
- vision_agent/tools/prompts.py,sha256=V1z4YJLXZuUl_iZ5rY0M5hHc_2tmMEUKr0WocXKGt4E,1430
12
- vision_agent/tools/tool_utils.py,sha256=ZnqaflVbLZB0GmgJJoQsZZs8hWbODXEPH1_Mq1s4bnc,3222
13
- vision_agent/tools/tools.py,sha256=TkZqNYX-ocwdaCdXd6c6tysSa_HX2y6Nrgl4JKni4IQ,43661
14
- vision_agent/utils/__init__.py,sha256=CW84HnhqI6XQVuxf2KifkLnSuO7EOhmuL09-gAymAak,219
15
- vision_agent/utils/exceptions.py,sha256=isVH-SVL4vHj3q5kK4z7cy5_aOapAqHXWkpibfSNbUs,1659
16
- vision_agent/utils/execute.py,sha256=DxuAoKmKAovgKe8IPkwg1B34osoz9_Ouvl1mi8aPXgE,23923
17
- vision_agent/utils/image_utils.py,sha256=_cdiS5YrLzqkq_ZgFUO897m5M4_SCIThwUy4lOklfB8,7700
18
- vision_agent/utils/sim.py,sha256=1HTaiVaBiKeyXIy21IYGXlPw0TipOyw9FPOJDfyLI94,4409
19
- vision_agent/utils/type_defs.py,sha256=QeQRRIlklZMWzxROcCn5ELxP89nYdXGydy1rAiSpZZw,1384
20
- vision_agent/utils/video.py,sha256=rNmU9KEIkZB5-EztZNlUiKYN0mm_55A_2VGUM0QpqLA,8779
21
- vision_agent-0.2.90.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
22
- vision_agent-0.2.90.dist-info/METADATA,sha256=IGFEwRmmrA9JLXtDpunUhiPa7s0bU1ccGGBVSEph4Ck,9477
23
- vision_agent-0.2.90.dist-info/WHEEL,sha256=7Z8_27uaHI_UZAc4Uox4PpBhQ9Y5_modZXWMxtUi4NU,88
24
- vision_agent-0.2.90.dist-info/RECORD,,