vision-agent 0.2.83__py3-none-any.whl → 0.2.84__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/lmm/__init__.py +1 -1
- vision_agent/lmm/lmm.py +91 -0
- {vision_agent-0.2.83.dist-info → vision_agent-0.2.84.dist-info}/METADATA +2 -1
- {vision_agent-0.2.83.dist-info → vision_agent-0.2.84.dist-info}/RECORD +6 -6
- {vision_agent-0.2.83.dist-info → vision_agent-0.2.84.dist-info}/LICENSE +0 -0
- {vision_agent-0.2.83.dist-info → vision_agent-0.2.84.dist-info}/WHEEL +0 -0
vision_agent/lmm/__init__.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
from .lmm import LMM, AzureOpenAILMM, Message, OllamaLMM, OpenAILMM
|
1
|
+
from .lmm import LMM, AzureOpenAILMM, ClaudeSonnetLMM, Message, OllamaLMM, OpenAILMM
|
vision_agent/lmm/lmm.py
CHANGED
@@ -7,7 +7,9 @@ from abc import ABC, abstractmethod
|
|
7
7
|
from pathlib import Path
|
8
8
|
from typing import Any, Callable, Dict, List, Optional, Union, cast
|
9
9
|
|
10
|
+
import anthropic
|
10
11
|
import requests
|
12
|
+
from anthropic.types import ImageBlockParam, MessageParam, TextBlockParam
|
11
13
|
from openai import AzureOpenAI, OpenAI
|
12
14
|
from PIL import Image
|
13
15
|
|
@@ -375,3 +377,92 @@ class OllamaLMM(LMM):
|
|
375
377
|
|
376
378
|
response = response.json()
|
377
379
|
return response["response"] # type: ignore
|
380
|
+
|
381
|
+
|
382
|
+
class ClaudeSonnetLMM(LMM):
|
383
|
+
r"""An LMM class for Anthropic's Claude Sonnet model."""
|
384
|
+
|
385
|
+
def __init__(
|
386
|
+
self,
|
387
|
+
api_key: Optional[str] = None,
|
388
|
+
model_name: str = "claude-3-sonnet-20240229",
|
389
|
+
max_tokens: int = 4096,
|
390
|
+
temperature: float = 0.7,
|
391
|
+
**kwargs: Any,
|
392
|
+
):
|
393
|
+
self.client = anthropic.Anthropic(api_key=api_key)
|
394
|
+
self.model_name = model_name
|
395
|
+
self.max_tokens = max_tokens
|
396
|
+
self.temperature = temperature
|
397
|
+
self.kwargs = kwargs
|
398
|
+
|
399
|
+
def __call__(
|
400
|
+
self,
|
401
|
+
input: Union[str, List[Dict[str, Any]]],
|
402
|
+
) -> str:
|
403
|
+
if isinstance(input, str):
|
404
|
+
return self.generate(input)
|
405
|
+
return self.chat(input)
|
406
|
+
|
407
|
+
def chat(
|
408
|
+
self,
|
409
|
+
chat: List[Dict[str, Any]],
|
410
|
+
) -> str:
|
411
|
+
messages: List[MessageParam] = []
|
412
|
+
for msg in chat:
|
413
|
+
content: List[Union[TextBlockParam, ImageBlockParam]] = [
|
414
|
+
TextBlockParam(type="text", text=msg["content"])
|
415
|
+
]
|
416
|
+
if "media" in msg:
|
417
|
+
for media_path in msg["media"]:
|
418
|
+
encoded_media = encode_media(media_path)
|
419
|
+
content.append(
|
420
|
+
ImageBlockParam(
|
421
|
+
type="image",
|
422
|
+
source={
|
423
|
+
"type": "base64",
|
424
|
+
"media_type": "image/png",
|
425
|
+
"data": encoded_media,
|
426
|
+
},
|
427
|
+
)
|
428
|
+
)
|
429
|
+
messages.append({"role": msg["role"], "content": content})
|
430
|
+
|
431
|
+
response = self.client.messages.create(
|
432
|
+
model=self.model_name,
|
433
|
+
max_tokens=self.max_tokens,
|
434
|
+
temperature=self.temperature,
|
435
|
+
messages=messages,
|
436
|
+
**self.kwargs,
|
437
|
+
)
|
438
|
+
return cast(str, response.content[0].text)
|
439
|
+
|
440
|
+
def generate(
|
441
|
+
self,
|
442
|
+
prompt: str,
|
443
|
+
media: Optional[List[Union[str, Path]]] = None,
|
444
|
+
) -> str:
|
445
|
+
content: List[Union[TextBlockParam, ImageBlockParam]] = [
|
446
|
+
TextBlockParam(type="text", text=prompt)
|
447
|
+
]
|
448
|
+
if media:
|
449
|
+
for m in media:
|
450
|
+
encoded_media = encode_media(m)
|
451
|
+
content.append(
|
452
|
+
ImageBlockParam(
|
453
|
+
type="image",
|
454
|
+
source={
|
455
|
+
"type": "base64",
|
456
|
+
"media_type": "image/png",
|
457
|
+
"data": encoded_media,
|
458
|
+
},
|
459
|
+
)
|
460
|
+
)
|
461
|
+
response = self.client.messages.create(
|
462
|
+
model=self.model_name,
|
463
|
+
max_tokens=self.max_tokens,
|
464
|
+
temperature=self.temperature,
|
465
|
+
messages=[{"role": "user", "content": content}],
|
466
|
+
**self.kwargs,
|
467
|
+
)
|
468
|
+
return cast(str, response.content[0].text)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: vision-agent
|
3
|
-
Version: 0.2.
|
3
|
+
Version: 0.2.84
|
4
4
|
Summary: Toolset for Vision Agent
|
5
5
|
Author: Landing AI
|
6
6
|
Author-email: dev@landing.ai
|
@@ -9,6 +9,7 @@ Classifier: Programming Language :: Python :: 3
|
|
9
9
|
Classifier: Programming Language :: Python :: 3.9
|
10
10
|
Classifier: Programming Language :: Python :: 3.10
|
11
11
|
Classifier: Programming Language :: Python :: 3.11
|
12
|
+
Requires-Dist: anthropic (>=0.31.0,<0.32.0)
|
12
13
|
Requires-Dist: e2b (>=0.17.1,<0.18.0)
|
13
14
|
Requires-Dist: e2b-code-interpreter (==0.0.11a2)
|
14
15
|
Requires-Dist: ipykernel (>=6.29.4,<7.0.0)
|
@@ -5,8 +5,8 @@ vision_agent/agent/vision_agent.py,sha256=fLCkqYJzk9SNtu8TzKBk0TLZrXDMTCqgI3FI-z
|
|
5
5
|
vision_agent/agent/vision_agent_prompts.py,sha256=brBV-SmzyzTG5M9nfV3R5xdYT_BUYOKzxNFmTa2Sp-o,11049
|
6
6
|
vision_agent/fonts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
7
7
|
vision_agent/fonts/default_font_ch_en.ttf,sha256=1YM0Z3XqLDjSNbF7ihQFSAIUdjF9m1rtHiNC_6QosTE,1594400
|
8
|
-
vision_agent/lmm/__init__.py,sha256=
|
9
|
-
vision_agent/lmm/lmm.py,sha256=
|
8
|
+
vision_agent/lmm/__init__.py,sha256=j9mQsIXQOYfW6nFd47uTwuBe1ranpEbwW308qLfCWN0,85
|
9
|
+
vision_agent/lmm/lmm.py,sha256=035uONyp6_jD3PVdNdSg2PMHOG1voqnpsn2IyybUENs,15147
|
10
10
|
vision_agent/tools/__init__.py,sha256=k69hvcy2FWjDqVA0klzybKeoToOH_bom5NTVSliA0Og,1838
|
11
11
|
vision_agent/tools/prompts.py,sha256=V1z4YJLXZuUl_iZ5rY0M5hHc_2tmMEUKr0WocXKGt4E,1430
|
12
12
|
vision_agent/tools/tool_utils.py,sha256=6z0jrvUnesJEFqDHZoAvbXPic8rzh0KfILL07tu0uRo,2205
|
@@ -18,7 +18,7 @@ vision_agent/utils/image_utils.py,sha256=_cdiS5YrLzqkq_ZgFUO897m5M4_SCIThwUy4lOk
|
|
18
18
|
vision_agent/utils/sim.py,sha256=1HTaiVaBiKeyXIy21IYGXlPw0TipOyw9FPOJDfyLI94,4409
|
19
19
|
vision_agent/utils/type_defs.py,sha256=QeQRRIlklZMWzxROcCn5ELxP89nYdXGydy1rAiSpZZw,1384
|
20
20
|
vision_agent/utils/video.py,sha256=rNmU9KEIkZB5-EztZNlUiKYN0mm_55A_2VGUM0QpqLA,8779
|
21
|
-
vision_agent-0.2.
|
22
|
-
vision_agent-0.2.
|
23
|
-
vision_agent-0.2.
|
24
|
-
vision_agent-0.2.
|
21
|
+
vision_agent-0.2.84.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
22
|
+
vision_agent-0.2.84.dist-info/METADATA,sha256=mZM17x03oCnI8tp4g7psZzonwNlS0fqN0f78dWbob-o,9477
|
23
|
+
vision_agent-0.2.84.dist-info/WHEEL,sha256=7Z8_27uaHI_UZAc4Uox4PpBhQ9Y5_modZXWMxtUi4NU,88
|
24
|
+
vision_agent-0.2.84.dist-info/RECORD,,
|
File without changes
|
File without changes
|