goose-py 0.3.0__py3-none-any.whl → 0.3.2__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/agent.py
CHANGED
@@ -2,7 +2,7 @@ import base64
|
|
2
2
|
import logging
|
3
3
|
from datetime import datetime
|
4
4
|
from enum import StrEnum
|
5
|
-
from typing import Any,
|
5
|
+
from typing import Any, ClassVar, Literal, NotRequired, Protocol, TypedDict
|
6
6
|
|
7
7
|
from litellm import acompletion
|
8
8
|
from pydantic import BaseModel, computed_field
|
@@ -112,7 +112,7 @@ class AgentResponse[R: BaseModel](BaseModel):
|
|
112
112
|
}
|
113
113
|
|
114
114
|
response: R
|
115
|
-
|
115
|
+
run_id: str
|
116
116
|
flow_name: str
|
117
117
|
task_name: str
|
118
118
|
model: GeminiModel
|
@@ -144,16 +144,20 @@ class AgentResponse[R: BaseModel](BaseModel):
|
|
144
144
|
return self.input_cost + self.output_cost
|
145
145
|
|
146
146
|
|
147
|
+
class IAgentLogger(Protocol):
|
148
|
+
async def __call__(self, *, response: AgentResponse[Any]) -> None: ...
|
149
|
+
|
150
|
+
|
147
151
|
class Agent:
|
148
152
|
def __init__(
|
149
153
|
self,
|
150
154
|
*,
|
151
155
|
flow_name: str,
|
152
|
-
|
153
|
-
logger:
|
156
|
+
run_id: str,
|
157
|
+
logger: IAgentLogger | None = None,
|
154
158
|
) -> None:
|
155
159
|
self.flow_name = flow_name
|
156
|
-
self.
|
160
|
+
self.run_id = run_id
|
157
161
|
self.logger = logger
|
158
162
|
|
159
163
|
async def __call__[R: BaseModel](
|
@@ -189,7 +193,7 @@ class Agent:
|
|
189
193
|
end_time = datetime.now()
|
190
194
|
agent_response = AgentResponse(
|
191
195
|
response=parsed_response,
|
192
|
-
|
196
|
+
run_id=self.run_id,
|
193
197
|
flow_name=self.flow_name,
|
194
198
|
task_name=task_name,
|
195
199
|
model=model,
|
@@ -202,7 +206,7 @@ class Agent:
|
|
202
206
|
)
|
203
207
|
|
204
208
|
if self.logger is not None:
|
205
|
-
await self.logger(agent_response)
|
209
|
+
await self.logger(response=agent_response)
|
206
210
|
else:
|
207
211
|
logging.info(agent_response.model_dump())
|
208
212
|
|
goose/flow.py
CHANGED
@@ -14,7 +14,14 @@ from typing import (
|
|
14
14
|
|
15
15
|
from pydantic import BaseModel, ConfigDict, field_validator
|
16
16
|
|
17
|
-
from goose.agent import
|
17
|
+
from goose.agent import (
|
18
|
+
Agent,
|
19
|
+
AssistantMessage,
|
20
|
+
IAgentLogger,
|
21
|
+
LLMMessage,
|
22
|
+
SystemMessage,
|
23
|
+
UserMessage,
|
24
|
+
)
|
18
25
|
from goose.errors import Honk
|
19
26
|
|
20
27
|
SerializedFlowRun = NewType("SerializedFlowRun", str)
|
@@ -122,12 +129,17 @@ class FlowRun:
|
|
122
129
|
def __init__(self) -> None:
|
123
130
|
self._node_states: dict[tuple[str, int], str] = {}
|
124
131
|
self._last_requested_indices: dict[str, int] = {}
|
125
|
-
self.
|
132
|
+
self._flow_name = ""
|
133
|
+
self._id = ""
|
126
134
|
self._agent: Agent | None = None
|
127
135
|
|
128
136
|
@property
|
129
|
-
def
|
130
|
-
return self.
|
137
|
+
def flow_name(self) -> str:
|
138
|
+
return self._flow_name
|
139
|
+
|
140
|
+
@property
|
141
|
+
def id(self) -> str:
|
142
|
+
return self._id
|
131
143
|
|
132
144
|
@property
|
133
145
|
def agent(self) -> Agent:
|
@@ -169,14 +181,24 @@ class FlowRun:
|
|
169
181
|
last_input_hash=0,
|
170
182
|
)
|
171
183
|
|
172
|
-
def start(
|
184
|
+
def start(
|
185
|
+
self,
|
186
|
+
*,
|
187
|
+
flow_name: str,
|
188
|
+
run_id: str,
|
189
|
+
agent_logger: IAgentLogger | None = None,
|
190
|
+
) -> None:
|
173
191
|
self._last_requested_indices = {}
|
174
|
-
self.
|
175
|
-
self.
|
192
|
+
self._flow_name = flow_name
|
193
|
+
self._id = run_id
|
194
|
+
self._agent = Agent(
|
195
|
+
flow_name=self.flow_name, run_id=self.id, logger=agent_logger
|
196
|
+
)
|
176
197
|
|
177
198
|
def end(self) -> None:
|
178
199
|
self._last_requested_indices = {}
|
179
|
-
self.
|
200
|
+
self._flow_name = ""
|
201
|
+
self._id = ""
|
180
202
|
self._agent = None
|
181
203
|
|
182
204
|
def dump(self) -> SerializedFlowRun:
|
@@ -209,10 +231,16 @@ _current_flow_run: ContextVar[FlowRun | None] = ContextVar(
|
|
209
231
|
|
210
232
|
class Flow[**P]:
|
211
233
|
def __init__(
|
212
|
-
self,
|
234
|
+
self,
|
235
|
+
fn: Callable[P, Awaitable[None]],
|
236
|
+
/,
|
237
|
+
*,
|
238
|
+
name: str | None = None,
|
239
|
+
agent_logger: IAgentLogger | None = None,
|
213
240
|
) -> None:
|
214
241
|
self._fn = fn
|
215
242
|
self._name = name
|
243
|
+
self._agent_logger = agent_logger
|
216
244
|
|
217
245
|
@property
|
218
246
|
def name(self) -> str:
|
@@ -226,14 +254,18 @@ class Flow[**P]:
|
|
226
254
|
return run
|
227
255
|
|
228
256
|
@contextmanager
|
229
|
-
def start_run(
|
230
|
-
|
257
|
+
def start_run(
|
258
|
+
self, *, run_id: str, preload: FlowRun | None = None
|
259
|
+
) -> Iterator[FlowRun]:
|
260
|
+
if preload is None:
|
231
261
|
run = FlowRun()
|
262
|
+
else:
|
263
|
+
run = preload
|
232
264
|
|
233
265
|
old_run = _current_flow_run.get()
|
234
266
|
_current_flow_run.set(run)
|
235
267
|
|
236
|
-
run.start(name=
|
268
|
+
run.start(flow_name=self.name, run_id=run_id, agent_logger=self._agent_logger)
|
237
269
|
yield run
|
238
270
|
run.end()
|
239
271
|
|
@@ -354,16 +386,20 @@ def task[**P, R: Result](
|
|
354
386
|
def flow[**P](fn: Callable[P, Awaitable[None]], /) -> Flow[P]: ...
|
355
387
|
@overload
|
356
388
|
def flow[**P](
|
357
|
-
*, name: str | None = None
|
389
|
+
*, name: str | None = None, agent_logger: IAgentLogger | None = None
|
358
390
|
) -> Callable[[Callable[P, Awaitable[None]]], Flow[P]]: ...
|
359
391
|
def flow[**P](
|
360
|
-
fn: Callable[P, Awaitable[None]] | None = None,
|
392
|
+
fn: Callable[P, Awaitable[None]] | None = None,
|
393
|
+
/,
|
394
|
+
*,
|
395
|
+
name: str | None = None,
|
396
|
+
agent_logger: IAgentLogger | None = None,
|
361
397
|
) -> Flow[P] | Callable[[Callable[P, Awaitable[None]]], Flow[P]]:
|
362
398
|
if fn is None:
|
363
399
|
|
364
400
|
def decorator(fn: Callable[P, Awaitable[None]]) -> Flow[P]:
|
365
|
-
return Flow(fn, name=name)
|
401
|
+
return Flow(fn, name=name, agent_logger=agent_logger)
|
366
402
|
|
367
403
|
return decorator
|
368
404
|
|
369
|
-
return Flow(fn, name=name)
|
405
|
+
return Flow(fn, name=name, agent_logger=agent_logger)
|
@@ -0,0 +1,8 @@
|
|
1
|
+
goose/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
2
|
+
goose/agent.py,sha256=7QMlyCGezyRmNzG6FAjhHZcI00VFKJP-991ZpUEQRyg,5720
|
3
|
+
goose/errors.py,sha256=-0OyZQJWYTRw5YgnCB2_uorVaUsL6Z0QYQO2FqzCiyg,32
|
4
|
+
goose/flow.py,sha256=EHVnHLSMobzPto7Ydviv6sE2vKvmJfC0BLSpOa7GyAQ,12223
|
5
|
+
goose/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
6
|
+
goose_py-0.3.2.dist-info/METADATA,sha256=JPBa5_zh5AAGZDmGxAvnI9fKQQu7pM88ppYDXfDs9No,1106
|
7
|
+
goose_py-0.3.2.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
8
|
+
goose_py-0.3.2.dist-info/RECORD,,
|
goose_py-0.3.0.dist-info/RECORD
DELETED
@@ -1,8 +0,0 @@
|
|
1
|
-
goose/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
2
|
-
goose/agent.py,sha256=j8r9p7PqIdXCX_Vl8pUTrF2SshJXUDitgJlCV_C6hdw,5662
|
3
|
-
goose/errors.py,sha256=-0OyZQJWYTRw5YgnCB2_uorVaUsL6Z0QYQO2FqzCiyg,32
|
4
|
-
goose/flow.py,sha256=5a9lIHTyW5hLeMdt1AfIxe5z-VlTti_3OJ1o4f_nuoo,11458
|
5
|
-
goose/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
6
|
-
goose_py-0.3.0.dist-info/METADATA,sha256=dMNVLzZZ7KyEUacFGWqLeNJuv0ni5-GS_FP9ifaF4bM,1106
|
7
|
-
goose_py-0.3.0.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
8
|
-
goose_py-0.3.0.dist-info/RECORD,,
|
File without changes
|