grasp_agents 0.5.8__py3-none-any.whl → 0.5.10__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.
@@ -1,5 +1,5 @@
1
1
  import logging
2
- from collections.abc import AsyncIterator
2
+ from collections.abc import AsyncIterator, Sequence
3
3
  from typing import Any, ClassVar, Generic, cast
4
4
 
5
5
  from ..memory import MemT
@@ -25,7 +25,7 @@ class Processor(BaseProcessor[InT, OutT, MemT, CtxT], Generic[InT, OutT, MemT, C
25
25
  in_args: list[InT] | None = None,
26
26
  memory: MemT,
27
27
  call_id: str,
28
- ctx: RunContext[CtxT] | None = None,
28
+ ctx: RunContext[CtxT],
29
29
  ) -> list[OutT]:
30
30
  return cast("list[OutT]", in_args)
31
31
 
@@ -36,7 +36,7 @@ class Processor(BaseProcessor[InT, OutT, MemT, CtxT], Generic[InT, OutT, MemT, C
36
36
  in_args: list[InT] | None = None,
37
37
  memory: MemT,
38
38
  call_id: str,
39
- ctx: RunContext[CtxT] | None = None,
39
+ ctx: RunContext[CtxT],
40
40
  ) -> AsyncIterator[Event[Any]]:
41
41
  outputs = await self._process(
42
42
  chat_inputs=chat_inputs,
@@ -58,7 +58,7 @@ class Processor(BaseProcessor[InT, OutT, MemT, CtxT], Generic[InT, OutT, MemT, C
58
58
  in_args: InT | list[InT] | None = None,
59
59
  forgetful: bool = False,
60
60
  call_id: str | None = None,
61
- ctx: RunContext[CtxT] | None = None,
61
+ ctx: RunContext[CtxT],
62
62
  ) -> tuple[list[InT] | None, MemT, str]:
63
63
  call_id = self._generate_call_id(call_id)
64
64
 
@@ -74,10 +74,10 @@ class Processor(BaseProcessor[InT, OutT, MemT, CtxT], Generic[InT, OutT, MemT, C
74
74
  return val_in_args, memory, call_id
75
75
 
76
76
  def _postprocess(
77
- self, outputs: list[OutT], call_id: str, ctx: RunContext[CtxT] | None = None
77
+ self, outputs: list[OutT], call_id: str, ctx: RunContext[CtxT]
78
78
  ) -> Packet[OutT]:
79
79
  payloads: list[OutT] = []
80
- routing: dict[int, list[ProcName] | None] = {}
80
+ routing: dict[int, Sequence[ProcName] | None] = {}
81
81
  for idx, output in enumerate(outputs):
82
82
  val_output = self._validate_output(output, call_id=call_id)
83
83
  recipients = self._select_recipients(output=val_output, ctx=ctx)
@@ -105,6 +105,8 @@ class Processor(BaseProcessor[InT, OutT, MemT, CtxT], Generic[InT, OutT, MemT, C
105
105
  call_id: str | None = None,
106
106
  ctx: RunContext[CtxT] | None = None,
107
107
  ) -> Packet[OutT]:
108
+ ctx = RunContext[CtxT](state=None) if ctx is None else ctx # type: ignore
109
+
108
110
  val_in_args, memory, call_id = self._preprocess(
109
111
  chat_inputs=chat_inputs,
110
112
  in_packet=in_packet,
@@ -134,6 +136,8 @@ class Processor(BaseProcessor[InT, OutT, MemT, CtxT], Generic[InT, OutT, MemT, C
134
136
  call_id: str | None = None,
135
137
  ctx: RunContext[CtxT] | None = None,
136
138
  ) -> AsyncIterator[Event[Any]]:
139
+ ctx = RunContext[CtxT](state=None) if ctx is None else ctx # type: ignore
140
+
137
141
  val_in_args, memory, call_id = self._preprocess(
138
142
  chat_inputs=chat_inputs,
139
143
  in_packet=in_packet,
@@ -1,6 +1,6 @@
1
1
  import json
2
2
  from collections.abc import Sequence
3
- from typing import ClassVar, Generic, Protocol, TypeAlias, TypeVar, final
3
+ from typing import ClassVar, Generic, Protocol, TypeAlias, TypeVar, cast, final
4
4
 
5
5
  from pydantic import BaseModel, TypeAdapter
6
6
 
@@ -15,13 +15,11 @@ _InT_contra = TypeVar("_InT_contra", contravariant=True)
15
15
 
16
16
 
17
17
  class SystemPromptBuilder(Protocol[CtxT]):
18
- def __call__(self, ctx: RunContext[CtxT] | None) -> str | None: ...
18
+ def __call__(self, ctx: RunContext[CtxT]) -> str | None: ...
19
19
 
20
20
 
21
21
  class InputContentBuilder(Protocol[_InT_contra, CtxT]):
22
- def __call__(
23
- self, in_args: _InT_contra | None, *, ctx: RunContext[CtxT] | None
24
- ) -> Content: ...
22
+ def __call__(self, in_args: _InT_contra, ctx: RunContext[CtxT]) -> Content: ...
25
23
 
26
24
 
27
25
  PromptArgumentType: TypeAlias = str | bool | int | ImageData
@@ -45,7 +43,7 @@ class PromptBuilder(AutoInstanceAttributesMixin, Generic[InT, CtxT]):
45
43
  self._in_args_type_adapter: TypeAdapter[InT] = TypeAdapter(self._in_type)
46
44
 
47
45
  @final
48
- def build_system_prompt(self, ctx: RunContext[CtxT] | None = None) -> str | None:
46
+ def build_system_prompt(self, ctx: RunContext[CtxT]) -> str | None:
49
47
  if self.system_prompt_builder:
50
48
  return self.system_prompt_builder(ctx=ctx)
51
49
 
@@ -73,23 +71,19 @@ class PromptBuilder(AutoInstanceAttributesMixin, Generic[InT, CtxT]):
73
71
 
74
72
  @final
75
73
  def _build_input_content(
76
- self,
77
- in_args: InT | None = None,
78
- ctx: RunContext[CtxT] | None = None,
74
+ self, in_args: InT | None, ctx: RunContext[CtxT]
79
75
  ) -> Content:
80
- val_in_args = in_args
81
- if in_args is not None:
82
- val_in_args = self._validate_input_args(in_args=in_args)
83
-
84
- if self.input_content_builder:
85
- return self.input_content_builder(in_args=val_in_args, ctx=ctx)
86
-
87
- if val_in_args is None:
76
+ if in_args is None and self._in_type is not type(None):
88
77
  raise InputPromptBuilderError(
89
78
  proc_name=self._agent_name,
90
- message="Input arguments are not provided, "
91
- f"but input content is required [agent_name={self._agent_name}]",
79
+ message="Either chat inputs or input arguments must be provided "
80
+ f"when input type is not None [agent_name={self._agent_name}]",
92
81
  )
82
+ in_args = cast("InT", in_args)
83
+
84
+ val_in_args = self._validate_input_args(in_args)
85
+ if self.input_content_builder:
86
+ return self.input_content_builder(in_args=val_in_args, ctx=ctx)
93
87
 
94
88
  if issubclass(self._in_type, BaseModel) and isinstance(val_in_args, BaseModel):
95
89
  val_in_args_map = self._format_pydantic_prompt_args(val_in_args)
@@ -106,17 +100,17 @@ class PromptBuilder(AutoInstanceAttributesMixin, Generic[InT, CtxT]):
106
100
  def build_input_message(
107
101
  self,
108
102
  chat_inputs: LLMPrompt | Sequence[str | ImageData] | None = None,
103
+ *,
109
104
  in_args: InT | None = None,
110
- ctx: RunContext[CtxT] | None = None,
105
+ ctx: RunContext[CtxT],
111
106
  ) -> UserMessage | None:
112
- if chat_inputs is not None and in_args is not None:
113
- raise InputPromptBuilderError(
114
- proc_name=self._agent_name,
115
- message="Cannot use both chat inputs and input arguments "
116
- f"at the same time [agent_name={self._agent_name}]",
117
- )
118
-
119
- if chat_inputs:
107
+ if chat_inputs is not None:
108
+ if in_args is not None:
109
+ raise InputPromptBuilderError(
110
+ proc_name=self._agent_name,
111
+ message="Cannot use both chat inputs and input arguments "
112
+ f"at the same time [agent_name={self._agent_name}]",
113
+ )
120
114
  if isinstance(chat_inputs, LLMPrompt):
121
115
  return UserMessage.from_text(chat_inputs, name=self._agent_name)
122
116
  return UserMessage.from_content_parts(chat_inputs, name=self._agent_name)
@@ -13,7 +13,7 @@ CtxT = TypeVar("CtxT")
13
13
 
14
14
 
15
15
  class RunContext(BaseModel, Generic[CtxT]):
16
- state: CtxT | None = None
16
+ state: CtxT = None # type: ignore
17
17
 
18
18
  completions: dict[ProcName, list[Completion]] = Field(
19
19
  default_factory=lambda: defaultdict(list)
grasp_agents/runner.py CHANGED
@@ -33,7 +33,7 @@ class Runner(Generic[OutT, CtxT]):
33
33
 
34
34
  self._entry_proc = entry_proc
35
35
  self._procs = procs
36
- self._ctx = ctx or RunContext[CtxT]()
36
+ self._ctx = ctx or RunContext[CtxT](state=None) # type: ignore
37
37
 
38
38
  @property
39
39
  def ctx(self) -> RunContext[CtxT]:
@@ -69,7 +69,9 @@ class Converters(ABC):
69
69
 
70
70
  @staticmethod
71
71
  @abstractmethod
72
- def to_tool(tool: BaseTool[BaseModel, Any, Any], **kwargs: Any) -> Any:
72
+ def to_tool(
73
+ tool: BaseTool[BaseModel, Any, Any], strict: bool | None = None, **kwargs: Any
74
+ ) -> Any:
73
75
  pass
74
76
 
75
77
  @staticmethod
@@ -48,8 +48,6 @@ class BaseTool(
48
48
  name: str
49
49
  description: str
50
50
 
51
- strict: bool | None = None
52
-
53
51
  _in_type: type[_InT] = PrivateAttr()
54
52
  _out_type: type[_OutT_co] = PrivateAttr()
55
53
 
@@ -62,14 +60,24 @@ class BaseTool(
62
60
  return self._out_type
63
61
 
64
62
  @abstractmethod
65
- async def run(self, inp: _InT, ctx: RunContext[CtxT] | None = None) -> _OutT_co:
63
+ async def run(
64
+ self,
65
+ inp: _InT,
66
+ *,
67
+ call_id: str | None = None,
68
+ ctx: RunContext[CtxT] | None = None,
69
+ ) -> _OutT_co:
66
70
  pass
67
71
 
68
72
  async def __call__(
69
- self, ctx: RunContext[CtxT] | None = None, **kwargs: Any
73
+ self,
74
+ *,
75
+ call_id: str | None = None,
76
+ ctx: RunContext[CtxT] | None = None,
77
+ **kwargs: Any,
70
78
  ) -> _OutT_co:
71
79
  input_args = TypeAdapter(self._in_type).validate_python(kwargs)
72
- output = await self.run(input_args, ctx=ctx)
80
+ output = await self.run(input_args, call_id=call_id, ctx=ctx)
73
81
 
74
82
  return TypeAdapter(self._out_type).validate_python(output)
75
83
 
@@ -21,7 +21,7 @@ class WorkflowProcessor(
21
21
  subprocs: Sequence[BaseProcessor[Any, Any, Any, CtxT]],
22
22
  start_proc: BaseProcessor[InT, Any, Any, CtxT],
23
23
  end_proc: BaseProcessor[Any, OutT, Any, CtxT],
24
- recipients: list[ProcName] | None = None,
24
+ recipients: Sequence[ProcName] | None = None,
25
25
  max_retries: int = 0,
26
26
  ) -> None:
27
27
  super().__init__(name=name, recipients=recipients, max_retries=max_retries)
@@ -57,11 +57,11 @@ class WorkflowProcessor(
57
57
  return func
58
58
 
59
59
  @property
60
- def recipients(self) -> list[ProcName] | None:
60
+ def recipients(self) -> Sequence[ProcName] | None:
61
61
  return self._end_proc.recipients
62
62
 
63
63
  @recipients.setter
64
- def recipients(self, value: list[ProcName] | None) -> None:
64
+ def recipients(self, value: Sequence[ProcName] | None) -> None:
65
65
  if hasattr(self, "_end_proc"):
66
66
  self._end_proc.recipients = value
67
67
 
@@ -96,7 +96,7 @@ class WorkflowProcessor(
96
96
  pass
97
97
 
98
98
  @abstractmethod
99
- async def run_stream( # type: ignore[override]
99
+ async def run_stream(
100
100
  self,
101
101
  chat_inputs: Any | None = None,
102
102
  *,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: grasp_agents
3
- Version: 0.5.8
3
+ Version: 0.5.10
4
4
  Summary: Grasp Agents Library
5
5
  License-File: LICENSE.md
6
6
  Requires-Python: <4,>=3.11.4
@@ -37,31 +37,30 @@ Description-Content-Type: text/markdown
37
37
 
38
38
  ## Features
39
39
 
40
- - Clean formulation of agents as generic entities over:
41
- - I/O schemas
42
- - Memory
43
- - Shared context
40
+ - Clean formulation of agents as generic entities over I/O schemas and shared context.
44
41
  - Transparent implementation of common agentic patterns:
45
- - Single-agent loops with an optional "ReAct mode" to enforce reasoning between the tool calls
42
+ - Single-agent loops
46
43
  - Workflows (static communication topology), including loops
47
44
  - Agents-as-tools for task delegation
48
45
  - Freeform A2A communication via the in-process actor model
49
- - Parallel processing with flexible retries and rate limiting
50
- - Simple logging and usage/cost tracking
46
+ - Built-in parallel processing with flexible retries and rate limiting.
47
+ - Support for all popular API providers via LiteLLM.
48
+ - Granular event streaming with separate events for standard outputs, thinking, and tool calls.
49
+ - Callbacks via decorators or subclassing for straightforward customisation of agentic loops and context management.
51
50
 
52
51
  ## Project Structure
53
52
 
54
- - `processor.py`, `comm_processor.py`, `llm_agent.py`: Core processor and agent class implementations.
55
- - `packet.py`, `packet_pool.py`: Communication management.
53
+ - `processors/`, `llm_agent.py`: Core processor and agent class implementations.
54
+ - `packet.py`, `packet_pool.py`, `runner.py`: Communication management.
56
55
  - `llm_policy_executor.py`: LLM actions and tool call loops.
57
56
  - `prompt_builder.py`: Tools for constructing prompts.
58
57
  - `workflow/`: Modules for defining and managing static agent workflows.
59
58
  - `llm.py`, `cloud_llm.py`: LLM integration and base LLM functionalities.
60
59
  - `openai/`: Modules specific to OpenAI API integration.
61
- - `memory.py`, `llm_agent_memory.py`: Memory management.
60
+ - `litellm/`: Modules specific to LiteLLM integration.
61
+ - `memory.py`, `llm_agent_memory.py`: Basic agent memory management.
62
62
  - `run_context.py`: Shared context management for agent runs.
63
63
  - `usage_tracker.py`: Tracking of API usage and costs.
64
- - `costs_dict.yaml`: Dictionary for cost tracking (update if needed).
65
64
  - `rate_limiting/`: Basic rate limiting tools.
66
65
 
67
66
  ## Quickstart & Installation Variants (UV Package manager)
@@ -190,7 +189,7 @@ teacher = LLMAgent[None, Problem, None](
190
189
  )
191
190
 
192
191
  async def main():
193
- ctx = RunContext[None](print_messages=True)
192
+ ctx = RunContext[None](log_messages=True)
194
193
  out = await teacher.run("start", ctx=ctx)
195
194
  print(out.payloads[0])
196
195
  print(ctx.usage_tracker.total_usage)
@@ -1,40 +1,40 @@
1
1
  grasp_agents/__init__.py,sha256=Z3a_j2Etiap9H6lvE8-PQP_OIGMUcHNPeJAJO12B8kY,1031
2
- grasp_agents/cloud_llm.py,sha256=gM43G4-dR-vugeKuhGty8iEuZUbloImbz2XyWO0IMjg,13254
2
+ grasp_agents/cloud_llm.py,sha256=_5iQAYL7w49-5oLgx0eycFJRoGSwh38tuFRWMkCxc0Q,13183
3
3
  grasp_agents/costs_dict.yaml,sha256=2MFNWtkv5W5WSCcv1Cj13B1iQLVv5Ot9pS_KW2Gu2DA,2510
4
4
  grasp_agents/errors.py,sha256=K-22TCM1Klhsej47Rg5eTqnGiGPaXgKOpdOZZ7cPipw,4633
5
5
  grasp_agents/generics_utils.py,sha256=5Pw3I9dlnKC2VGqYKC4ZZUO3Z_vTNT-NPFovNfPkl6I,6542
6
6
  grasp_agents/grasp_logging.py,sha256=H1GYhXdQvVkmauFDZ-KDwvVmPQHZUUm9sRqX_ObK2xI,1111
7
7
  grasp_agents/http_client.py,sha256=Es8NXGDkp4Nem7g24-jW0KFGA9Hp_o2Cv3cOvjup-iU,859
8
- grasp_agents/llm.py,sha256=w3vVIYUfhr_t45sZa0Nl373Htm05r9NUS02SvCKXbVA,12151
9
- grasp_agents/llm_agent.py,sha256=hX3T2Y5qiTt5CrsahNo5t08HFCyBWEiurzYnFykJN9Y,13513
10
- grasp_agents/llm_agent_memory.py,sha256=gQwH3g4Ib3ciW2jrBiW13ttwax_pcPobH5RhXRmbc0E,1842
11
- grasp_agents/llm_policy_executor.py,sha256=bP-O1itfaG-dr2PC9_zLCNMI862cPRqW7vsj9tRCz-I,17062
8
+ grasp_agents/llm.py,sha256=IeV2QpR4AldVP3THzSETEnsaDx3DYz5HM6dkikSpy4o,10684
9
+ grasp_agents/llm_agent.py,sha256=bkd_MvhQOJsH8CXJO-r2fexH5272bCkNWm8OOOSEf1I,13546
10
+ grasp_agents/llm_agent_memory.py,sha256=uxyJ1jq0oUgxIh7ysRcorGy1Q1WHosLBvWqjvLT2AUg,1834
11
+ grasp_agents/llm_policy_executor.py,sha256=JOAnIHZX-_oX1TcgCqRvIFQ6OuPQ4TypSvAxtT4ZGeg,17916
12
12
  grasp_agents/memory.py,sha256=keHuNEZNSxHT9FKpMohHOCNi7UAz_oRIc91IQEuzaWE,1162
13
13
  grasp_agents/packet.py,sha256=EmE-W4ZSMVZoqClECGFe7OGqrT4FSJ8IVGICrdjtdEY,1462
14
14
  grasp_agents/packet_pool.py,sha256=AF7ZMYY1U6ppNLEn6o0R8QXyWmcLQGcju7_TYQpAudg,4443
15
15
  grasp_agents/printer.py,sha256=wVNCaR9mbFKyzYdT8YpYD1JQqRqHdLtdfiZrwYxaM6Y,11132
16
- grasp_agents/prompt_builder.py,sha256=UuQNnvjrhzd3_NVnvHlCs-NRNRMo4jsMePgZeIxmzSY,5894
17
- grasp_agents/run_context.py,sha256=ikakNK1khm0UBEIPETB508BL0IlOKbOUPuq0FZ-iQHQ,942
18
- grasp_agents/runner.py,sha256=Gc4xQ9EQWbIHPaoe4KQsFkHhSnJK3xNPIGxHsYLI3aY,5147
16
+ grasp_agents/prompt_builder.py,sha256=m8EZBFUOjK63ym9z-ix0R1R8V9hocB0mCNB6EKyeVmk,5829
17
+ grasp_agents/run_context.py,sha256=7qVs0T5rLvINmtlXqOoyy2Hu9xPzuFDbcVR6R93NF-0,951
18
+ grasp_agents/runner.py,sha256=JL2wSKahbPYVd56NRB09cwco43sjhZPI4XYFCZyOXOA,5173
19
19
  grasp_agents/usage_tracker.py,sha256=ZQfVUUpG0C89hyPWT_JgXnjQOxoYmumcQ9t-aCfcMo8,3561
20
20
  grasp_agents/utils.py,sha256=qKmGBwrQHw1-BgqRLuGTPKGs3J_zbrpk3nxnP1iZBiQ,6152
21
21
  grasp_agents/litellm/__init__.py,sha256=wD8RZBYokFDfbS9Cs7nO_zKb3w7RIVwEGj7g2D5CJH0,4510
22
22
  grasp_agents/litellm/completion_chunk_converters.py,sha256=J5PPxzoTBqkvKQnCoBxQxJo7Q8Xfl9cbv2GRZox8Cjo,2689
23
23
  grasp_agents/litellm/completion_converters.py,sha256=JQ7XvQwwc-biFqVMcRO61SL5VGs_SkUvAhUz1QD7EmU,2516
24
- grasp_agents/litellm/converters.py,sha256=3u648xjrphr9zPp12PO8fU13G4nI6_e9714Xcvh6SHc,4721
25
- grasp_agents/litellm/lite_llm.py,sha256=tJngUfZb2t59Rv9glQPCGNILlLKvy_6wNrQQFS8OZrY,8096
24
+ grasp_agents/litellm/converters.py,sha256=XjePHii578sXP26Fyhnv0XfwJ3cNTp5PraggTsvcBXo,4778
25
+ grasp_agents/litellm/lite_llm.py,sha256=2XsPB-BbM-Y2xNxsKmO0JOJOD_UYj6ndGMjfLkGPAK4,8279
26
26
  grasp_agents/litellm/message_converters.py,sha256=PsGLIJEcAeEoluHIh-utEufJ_9WeMYzXkwnR-8jyULQ,2037
27
27
  grasp_agents/openai/__init__.py,sha256=xaRnblUskiLvypIhMe4NRp9dxCG-gNR7dPiugUbPbhE,4717
28
28
  grasp_agents/openai/completion_chunk_converters.py,sha256=3MnMskdlp7ycsggc1ok1XpCHaP4Us2rLYaxImPLw1eI,2573
29
29
  grasp_agents/openai/completion_converters.py,sha256=UlDeQSl0AEFUS-QI5e8rrjfmXZojSYksJGnrXA7DmIk,2528
30
30
  grasp_agents/openai/content_converters.py,sha256=sMsZhoatuL_8t0IdVaGWIVZLB4nyi1ajD61GewQmeY4,2503
31
- grasp_agents/openai/converters.py,sha256=CXHF2GehEHLEzjL45HywZ_1qaB3N29-lbac5oBDnLGA,4634
31
+ grasp_agents/openai/converters.py,sha256=RKOfMbIJmfFQ7ot0RGR6wrdMbR6_L7PB0UZwxwgM88g,4691
32
32
  grasp_agents/openai/message_converters.py,sha256=fhSN81uK51EGbLyM2-f0MvPX_UBrMy7SF3JQPo-dkXg,4686
33
- grasp_agents/openai/openai_llm.py,sha256=uJbbCytqpv8OCncKdzpiUdkVh3mJWgo95Y9Xetk_Ptg,10556
34
- grasp_agents/openai/tool_converters.py,sha256=IotZvpe3xMQcBfcjUTfAsn4LtZljj3zkU9bfpcoiqPw,1177
35
- grasp_agents/processors/base_processor.py,sha256=j2_QY6HUjckdxfsf7yAF0xRDp_V-DNDb7hIRMRKUyWw,10685
36
- grasp_agents/processors/parallel_processor.py,sha256=4NH2gfGgUheZWQGKn3NEMp0uQ0kOeJRZ3Ja0a7qmqpg,7863
37
- grasp_agents/processors/processor.py,sha256=v7Bf6CGVsjb43XuOtTMuev9UedMy_lBTGifzzCZwh4Q,5157
33
+ grasp_agents/openai/openai_llm.py,sha256=mC73ImgRLd56DLzCbvFvtMyf7wjL6Hhelc7e-UNP2Q0,9715
34
+ grasp_agents/openai/tool_converters.py,sha256=rNH5t2Wir9nuy8Ei0jaxNuzDaXGqTLmLz3VyrnJhyn0,1196
35
+ grasp_agents/processors/base_processor.py,sha256=rQncbE6Cih3PoaGEkYQtTYz2PImP__tOaDb7TYLIoJY,10835
36
+ grasp_agents/processors/parallel_processor.py,sha256=lpJSSmyUzGGDedqPdQ2ygBXwNK8MiEi7VZo-TCzJFeE,7945
37
+ grasp_agents/processors/processor.py,sha256=DbitqHMQJCMCMTCvSQZQuamjEEC6e7RlN_L-Z4gA8vA,5283
38
38
  grasp_agents/rate_limiting/__init__.py,sha256=KRgtF_E7R3YfA2cpYcFcZ7wycV0pWVJ0xRQC7YhiIEQ,158
39
39
  grasp_agents/rate_limiting/rate_limiter_chunked.py,sha256=BPgkUXvhmZhTpZs2T6uujNFuxH_kYHiISuf6_-eNhUc,5544
40
40
  grasp_agents/rate_limiting/types.py,sha256=PbnNhEAcYedQdIpPJWud8HUVcxa_xZS2RDZu4c5jr40,1003
@@ -43,16 +43,16 @@ grasp_agents/typing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSu
43
43
  grasp_agents/typing/completion.py,sha256=PHJ01m7WI2KYQL8w7W2ti6hMsKEZnzYGaxbNcBCc_IE,2782
44
44
  grasp_agents/typing/completion_chunk.py,sha256=eiOcpyMrH4Ws2XnY3_jj2_g396MqA3zV3lHygHfXt4o,17883
45
45
  grasp_agents/typing/content.py,sha256=XFmLpNWkGhkw5JujO6UsYwhzTHkU67PfhzaXH2waLcQ,3659
46
- grasp_agents/typing/converters.py,sha256=kHlocHQS8QnduZOzNPbj3aRD8JpvJd53oudYqWdOxKE,2978
46
+ grasp_agents/typing/converters.py,sha256=VrsqjuC_1IMj9rTOAMPBJ1N0hHY3Z9fx0zySo4Z-xLQ,3020
47
47
  grasp_agents/typing/events.py,sha256=vFq6qRGofY8NuxOG9ZIN2_CnhAqsAodYLD4b4KtAq2U,12620
48
48
  grasp_agents/typing/io.py,sha256=MGEoUjAwKH1AHYglFkKNpHiielw-NFf13Epg3B4Q7Iw,139
49
49
  grasp_agents/typing/message.py,sha256=o7bN84AgrC5Fm3Wx20gqL9ArAMcEtYvnHnXbb04ngCs,3224
50
- grasp_agents/typing/tool.py,sha256=4N-k_GvHVPAFyVyEq7z_LYKkA24iQlGoVYiWCzGTgT4,1786
50
+ grasp_agents/typing/tool.py,sha256=ivUq7FIYq1St3GNzbl_1VDbnKOZkTjQB5dYAgj6GPX0,1913
51
51
  grasp_agents/workflow/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
52
52
  grasp_agents/workflow/looped_workflow.py,sha256=WHp9O3Za2sBVfY_BLOdvPvtY20XsjZQaWSO2-oAFvOY,6806
53
53
  grasp_agents/workflow/sequential_workflow.py,sha256=e3BIWzy_2novmEWNwIteyMbrzvl1-evHrTBE3r3SpU8,3648
54
- grasp_agents/workflow/workflow_processor.py,sha256=yrxqAGfznmdkbP5zScKKJguxATfU4ObmA6BDR7YCBNU,3549
55
- grasp_agents-0.5.8.dist-info/METADATA,sha256=0LFzAa3UIg87-9jv2oCAbh-bPSnt0fELxIDWHmgbJzg,6865
56
- grasp_agents-0.5.8.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
57
- grasp_agents-0.5.8.dist-info/licenses/LICENSE.md,sha256=-nNNdWqGB8gJ2O-peFQ2Irshv5tW5pHKyTcYkwvH7CE,1201
58
- grasp_agents-0.5.8.dist-info/RECORD,,
54
+ grasp_agents/workflow/workflow_processor.py,sha256=DwHz70UOTp9dkbtzH9KE5LkGcT1RdHV7Hdiby0Bu9tw,3535
55
+ grasp_agents-0.5.10.dist-info/METADATA,sha256=tprOY_Kg0RWdYp5PLA2iQuVcWq5BOLga4uPoJB4UdLI,6998
56
+ grasp_agents-0.5.10.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
57
+ grasp_agents-0.5.10.dist-info/licenses/LICENSE.md,sha256=-nNNdWqGB8gJ2O-peFQ2Irshv5tW5pHKyTcYkwvH7CE,1201
58
+ grasp_agents-0.5.10.dist-info/RECORD,,