goose-py 0.4.1__py3-none-any.whl → 0.5.0__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/flow.py CHANGED
@@ -18,14 +18,15 @@ from pydantic import BaseModel
18
18
  from goose.agent import (
19
19
  Agent,
20
20
  AssistantMessage,
21
+ GeminiModel,
21
22
  IAgentLogger,
22
23
  LLMMessage,
23
24
  SystemMessage,
24
25
  UserMessage,
25
26
  )
26
27
  from goose.errors import Honk
28
+ from goose.result import Result, TextResult
27
29
  from goose.store import IFlowRunStore, InMemoryFlowRunStore
28
- from goose.result import Result
29
30
 
30
31
  SerializedFlowRun = NewType("SerializedFlowRun", str)
31
32
 
@@ -65,7 +66,9 @@ class Conversation[R: Result](BaseModel):
65
66
  class IAdapter[ResultT: Result](Protocol):
66
67
  __code__: CodeType
67
68
 
68
- async def __call__(self, *, conversation: Conversation[ResultT]) -> ResultT: ...
69
+ async def __call__(
70
+ self, *, conversation: Conversation[ResultT], agent: Agent
71
+ ) -> ResultT: ...
69
72
 
70
73
 
71
74
  class NodeState[ResultT: Result](BaseModel):
@@ -307,10 +310,12 @@ class Task[**P, R: Result]:
307
310
  /,
308
311
  *,
309
312
  retries: int = 0,
313
+ adapter_model: GeminiModel = GeminiModel.FLASH,
310
314
  ) -> None:
311
315
  self._generator = generator
312
- self._adapter: IAdapter[R] | None = None
313
316
  self._retries = retries
317
+ self._adapter_model = adapter_model
318
+ self._adapter_model = adapter_model
314
319
 
315
320
  @property
316
321
  def result_type(self) -> type[R]:
@@ -323,10 +328,6 @@ class Task[**P, R: Result]:
323
328
  def name(self) -> str:
324
329
  return self._generator.__name__
325
330
 
326
- def adapter(self, adapter: IAdapter[R]) -> Self:
327
- self._adapter = adapter
328
- return self
329
-
330
331
  async def generate(
331
332
  self, state: NodeState[R], *args: P.args, **kwargs: P.kwargs
332
333
  ) -> R:
@@ -347,14 +348,14 @@ class Task[**P, R: Result]:
347
348
  ) -> R:
348
349
  flow_run = self.__get_current_flow_run()
349
350
  node_state = flow_run.get(task=self, index=index)
350
- if self._adapter is None:
351
- raise Honk("No adapter provided for Task")
352
351
 
353
352
  if context is not None:
354
353
  node_state.set_context(context=context)
355
354
  node_state.add_user_message(message=user_message)
356
355
 
357
- result = await self._adapter(conversation=node_state.conversation)
356
+ result = await self.__adapt(
357
+ conversation=node_state.conversation, agent=flow_run.agent
358
+ )
358
359
  node_state.add_result(result=result)
359
360
  flow_run.add_node_state(node_state)
360
361
 
@@ -367,15 +368,34 @@ class Task[**P, R: Result]:
367
368
  flow_run.add_node_state(node_state)
368
369
  return result
369
370
 
371
+ async def __adapt(self, *, conversation: Conversation[R], agent: Agent) -> R:
372
+ messages: list[UserMessage | AssistantMessage] = []
373
+ for message_index in range(len(conversation.user_messages)):
374
+ user_message = conversation.user_messages[message_index]
375
+ result = conversation.result_messages[message_index]
376
+
377
+ if isinstance(result, TextResult):
378
+ assistant_text = result.text
379
+ else:
380
+ assistant_text = result.model_dump_json()
381
+ assistant_message = AssistantMessage(text=assistant_text)
382
+ messages.append(assistant_message)
383
+ messages.append(user_message)
384
+
385
+ return await agent(
386
+ messages=messages,
387
+ model=self._adapter_model,
388
+ task_name=f"adapt--{self.name}",
389
+ system=conversation.context,
390
+ response_model=self.result_type,
391
+ )
392
+
370
393
  def __hash_task_call(self, *args: P.args, **kwargs: P.kwargs) -> int:
371
394
  try:
372
395
  to_hash = str(
373
396
  tuple(args)
374
397
  + tuple(kwargs.values())
375
- + (
376
- self._generator.__code__,
377
- self._adapter.__code__ if self._adapter is not None else None,
378
- )
398
+ + (self._generator.__code__, self._adapter_model)
379
399
  )
380
400
  return hash(to_hash)
381
401
  except TypeError:
@@ -392,22 +412,23 @@ class Task[**P, R: Result]:
392
412
  def task[**P, R: Result](generator: Callable[P, Awaitable[R]], /) -> Task[P, R]: ...
393
413
  @overload
394
414
  def task[**P, R: Result](
395
- *, retries: int = 0
415
+ *, retries: int = 0, adapter_model: GeminiModel = GeminiModel.FLASH
396
416
  ) -> Callable[[Callable[P, Awaitable[R]]], Task[P, R]]: ...
397
417
  def task[**P, R: Result](
398
418
  generator: Callable[P, Awaitable[R]] | None = None,
399
419
  /,
400
420
  *,
401
421
  retries: int = 0,
422
+ adapter_model: GeminiModel = GeminiModel.FLASH,
402
423
  ) -> Task[P, R] | Callable[[Callable[P, Awaitable[R]]], Task[P, R]]:
403
424
  if generator is None:
404
425
 
405
426
  def decorator(fn: Callable[P, Awaitable[R]]) -> Task[P, R]:
406
- return Task(fn, retries=retries)
427
+ return Task(fn, retries=retries, adapter_model=adapter_model)
407
428
 
408
429
  return decorator
409
430
 
410
- return Task(generator, retries=retries)
431
+ return Task(generator, retries=retries, adapter_model=adapter_model)
411
432
 
412
433
 
413
434
  @overload
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: goose-py
3
- Version: 0.4.1
3
+ Version: 0.5.0
4
4
  Summary: A tool for AI workflows based on human-computer collaboration and structured output.
5
5
  Home-page: https://github.com/chelle-ai/goose
6
6
  Keywords: ai,yaml,configuration,llm
@@ -1,10 +1,10 @@
1
1
  goose/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
2
  goose/agent.py,sha256=S9nDhK7v4Rsk-ANuq5tIZfZ7TOmCdMEVid2VuK1EWCw,8106
3
3
  goose/errors.py,sha256=-0OyZQJWYTRw5YgnCB2_uorVaUsL6Z0QYQO2FqzCiyg,32
4
- goose/flow.py,sha256=ZoMk3TlTLG1KM9ZxxR6lAuzDxzPZgUeWAi5mm4Ch7L4,13428
4
+ goose/flow.py,sha256=9_Oz9enLNAeRIMyatj26yRb1zvPNTQ6Pqk6DcigNbjc,14399
5
5
  goose/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
6
  goose/result.py,sha256=-eZJn-2sPo7rHZ38Sz6IAHXqiJ-Ss39esEoFGimJEBI,155
7
7
  goose/store.py,sha256=4p2BBVAEUS1_Z0iBk5Qk_fPxRQeph64DRzXOFmjIT38,844
8
- goose_py-0.4.1.dist-info/METADATA,sha256=AB7TA_rXnj1M_gQ8Y_PnX7mhbdvJl7nlAAWf_S651fk,1106
9
- goose_py-0.4.1.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
10
- goose_py-0.4.1.dist-info/RECORD,,
8
+ goose_py-0.5.0.dist-info/METADATA,sha256=1tnHzL7cLUdxEolkUaFrvAYMk2jldyo5HVxTaUC6OKk,1106
9
+ goose_py-0.5.0.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
10
+ goose_py-0.5.0.dist-info/RECORD,,