goose-py 0.9.13__py3-none-any.whl → 0.9.14__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.
goose/_internal/types/agent.py
CHANGED
@@ -1,19 +1,8 @@
|
|
1
1
|
import base64
|
2
2
|
from enum import StrEnum
|
3
|
-
from typing import
|
3
|
+
from typing import Literal, NotRequired, TypedDict
|
4
4
|
|
5
|
-
from pydantic import BaseModel
|
6
|
-
from pydantic_core import CoreSchema, core_schema
|
7
|
-
|
8
|
-
|
9
|
-
class Base64MediaContent(str):
|
10
|
-
@classmethod
|
11
|
-
def __get_pydantic_core_schema__(cls, source_type: Any, handler: GetCoreSchemaHandler) -> CoreSchema:
|
12
|
-
return core_schema.no_info_after_validator_function(cls, handler(str))
|
13
|
-
|
14
|
-
@classmethod
|
15
|
-
def from_bytes(cls, content: bytes, /) -> "Base64MediaContent":
|
16
|
-
return cls(base64.b64encode(content).decode())
|
5
|
+
from pydantic import BaseModel
|
17
6
|
|
18
7
|
|
19
8
|
class AIModel(StrEnum):
|
@@ -30,7 +19,10 @@ class AIModel(StrEnum):
|
|
30
19
|
GEMINI_FLASH_2_0 = "gemini/gemini-2.0-flash"
|
31
20
|
|
32
21
|
|
33
|
-
class
|
22
|
+
class ContentType(StrEnum):
|
23
|
+
# text
|
24
|
+
TEXT = "text/plain"
|
25
|
+
|
34
26
|
# images
|
35
27
|
JPEG = "image/jpeg"
|
36
28
|
PNG = "image/png"
|
@@ -64,33 +56,30 @@ class LLMMessage(TypedDict):
|
|
64
56
|
cache_control: NotRequired[CacheControl]
|
65
57
|
|
66
58
|
|
67
|
-
class
|
68
|
-
|
69
|
-
|
70
|
-
def render(self) -> LLMTextMessagePart:
|
71
|
-
return {"type": "text", "text": self.text}
|
72
|
-
|
59
|
+
class MessagePart(BaseModel):
|
60
|
+
content: str
|
61
|
+
content_type: ContentType = ContentType.TEXT
|
73
62
|
|
74
|
-
|
75
|
-
content_type:
|
76
|
-
|
63
|
+
@classmethod
|
64
|
+
def from_media(cls, *, content: bytes, content_type: ContentType) -> "MessagePart":
|
65
|
+
return cls(content=base64.b64encode(content).decode(), content_type=content_type)
|
77
66
|
|
78
|
-
def render(self) -> LLMMediaMessagePart:
|
79
|
-
|
80
|
-
"type": "
|
81
|
-
|
82
|
-
|
67
|
+
def render(self) -> LLMTextMessagePart | LLMMediaMessagePart:
|
68
|
+
if self.content_type == ContentType.TEXT:
|
69
|
+
return {"type": "text", "text": self.content}
|
70
|
+
else:
|
71
|
+
return {"type": "image_url", "image_url": f"data:{self.content_type};base64,{self.content}"}
|
83
72
|
|
84
73
|
|
85
74
|
class UserMessage(BaseModel):
|
86
|
-
parts: list[
|
75
|
+
parts: list[MessagePart]
|
87
76
|
|
88
77
|
def render(self) -> LLMMessage:
|
89
78
|
content: LLMMessage = {
|
90
79
|
"role": "user",
|
91
80
|
"content": [part.render() for part in self.parts],
|
92
81
|
}
|
93
|
-
if any(
|
82
|
+
if any(part.content_type != ContentType.TEXT for part in self.parts):
|
94
83
|
content["cache_control"] = {"type": "ephemeral"}
|
95
84
|
return content
|
96
85
|
|
@@ -103,7 +92,7 @@ class AssistantMessage(BaseModel):
|
|
103
92
|
|
104
93
|
|
105
94
|
class SystemMessage(BaseModel):
|
106
|
-
parts: list[
|
95
|
+
parts: list[MessagePart]
|
107
96
|
|
108
97
|
def render(self) -> LLMMessage:
|
109
98
|
return {
|
goose/agent.py
CHANGED
@@ -2,14 +2,12 @@ from ._internal.agent import AgentResponse, IAgentLogger
|
|
2
2
|
from ._internal.types.agent import (
|
3
3
|
AIModel,
|
4
4
|
AssistantMessage,
|
5
|
-
|
5
|
+
ContentType,
|
6
6
|
LLMMediaMessagePart,
|
7
7
|
LLMMessage,
|
8
8
|
LLMTextMessagePart,
|
9
|
-
|
9
|
+
MessagePart,
|
10
10
|
SystemMessage,
|
11
|
-
TextMessagePart,
|
12
|
-
UserMediaContentType,
|
13
11
|
UserMessage,
|
14
12
|
)
|
15
13
|
|
@@ -18,13 +16,11 @@ __all__ = [
|
|
18
16
|
"AIModel",
|
19
17
|
"IAgentLogger",
|
20
18
|
"AssistantMessage",
|
21
|
-
"Base64MediaContent",
|
22
19
|
"LLMMediaMessagePart",
|
23
20
|
"LLMMessage",
|
24
21
|
"LLMTextMessagePart",
|
25
|
-
"MediaMessagePart",
|
26
22
|
"SystemMessage",
|
27
|
-
"
|
28
|
-
"
|
23
|
+
"MessagePart",
|
24
|
+
"ContentType",
|
29
25
|
"UserMessage",
|
30
26
|
]
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: goose-py
|
3
|
-
Version: 0.9.
|
3
|
+
Version: 0.9.14
|
4
4
|
Summary: A tool for AI workflows based on human-computer collaboration and structured output.
|
5
5
|
Author-email: Nash Taylor <nash@chelle.ai>, Joshua Cook <joshua@chelle.ai>, Michael Sankur <michael@chelle.ai>
|
6
6
|
Requires-Python: >=3.12
|
@@ -1,5 +1,5 @@
|
|
1
1
|
goose/__init__.py,sha256=wjGDgWzKcD6S8loVr0n-rLCpRwg-ZKAixcUaw1wobMc,243
|
2
|
-
goose/agent.py,sha256=
|
2
|
+
goose/agent.py,sha256=u6daAnn4fPgP4Jk9cHANyCEku3RmUqKLdqtyGSr8ljI,510
|
3
3
|
goose/errors.py,sha256=-0OyZQJWYTRw5YgnCB2_uorVaUsL6Z0QYQO2FqzCiyg,32
|
4
4
|
goose/flow.py,sha256=YsZLBa5I1W27_P6LYGWbtFX8ZYx9vJG3KtENYChHm5E,111
|
5
5
|
goose/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -13,7 +13,7 @@ goose/_internal/state.py,sha256=pI-C37Ybazo7EJPbZklxbiCYFy3u4I031NKBr8Jm_CI,6534
|
|
13
13
|
goose/_internal/store.py,sha256=tWmKfa1-yq1jU6lT3l6kSOmVt2m3H7I1xLMTrxnUDI8,889
|
14
14
|
goose/_internal/task.py,sha256=qjpX_wIQ2jKreMjrRy1SVedsuVzLXuOLgcyPstrgWfE,6176
|
15
15
|
goose/_internal/types/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
16
|
-
goose/_internal/types/agent.py,sha256=
|
17
|
-
goose_py-0.9.
|
18
|
-
goose_py-0.9.
|
19
|
-
goose_py-0.9.
|
16
|
+
goose/_internal/types/agent.py,sha256=g0KD-aPWZlUGBx72AwQd3LeniFxHATeflZ7191QjFZA,2696
|
17
|
+
goose_py-0.9.14.dist-info/METADATA,sha256=RGbV0Gcz9vC3n6TwurUc4BTT8y7NJ2d5p6OJZMKOJI8,442
|
18
|
+
goose_py-0.9.14.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
19
|
+
goose_py-0.9.14.dist-info/RECORD,,
|
File without changes
|