grasp_agents 0.5.5__py3-none-any.whl → 0.5.8__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.
- grasp_agents/__init__.py +5 -1
- grasp_agents/cloud_llm.py +11 -5
- grasp_agents/llm.py +151 -2
- grasp_agents/llm_agent.py +18 -7
- grasp_agents/llm_policy_executor.py +9 -3
- grasp_agents/packet_pool.py +22 -37
- grasp_agents/printer.py +75 -74
- grasp_agents/{processor.py → processors/base_processor.py} +89 -287
- grasp_agents/processors/parallel_processor.py +246 -0
- grasp_agents/processors/processor.py +161 -0
- grasp_agents/runner.py +46 -24
- grasp_agents/typing/completion_chunk.py +302 -3
- grasp_agents/typing/events.py +259 -49
- grasp_agents/workflow/looped_workflow.py +35 -27
- grasp_agents/workflow/sequential_workflow.py +14 -3
- grasp_agents/workflow/workflow_processor.py +21 -15
- {grasp_agents-0.5.5.dist-info → grasp_agents-0.5.8.dist-info}/METADATA +1 -1
- {grasp_agents-0.5.5.dist-info → grasp_agents-0.5.8.dist-info}/RECORD +20 -18
- {grasp_agents-0.5.5.dist-info → grasp_agents-0.5.8.dist-info}/WHEEL +0 -0
- {grasp_agents-0.5.5.dist-info → grasp_agents-0.5.8.dist-info}/licenses/LICENSE.md +0 -0
@@ -5,7 +5,7 @@ from typing import Any, Generic, Protocol, TypeVar, cast, final
|
|
5
5
|
|
6
6
|
from ..errors import WorkflowConstructionError
|
7
7
|
from ..packet_pool import Packet
|
8
|
-
from ..
|
8
|
+
from ..processors.base_processor import BaseProcessor
|
9
9
|
from ..run_context import CtxT, RunContext
|
10
10
|
from ..typing.events import Event, ProcPacketOutputEvent, WorkflowResultEvent
|
11
11
|
from ..typing.io import InT, OutT, ProcName
|
@@ -16,7 +16,7 @@ logger = getLogger(__name__)
|
|
16
16
|
_OutT_contra = TypeVar("_OutT_contra", contravariant=True)
|
17
17
|
|
18
18
|
|
19
|
-
class
|
19
|
+
class WorkflowLoopTerminator(Protocol[_OutT_contra, CtxT]):
|
20
20
|
def __call__(
|
21
21
|
self,
|
22
22
|
out_packet: Packet[_OutT_contra],
|
@@ -29,8 +29,8 @@ class LoopedWorkflow(WorkflowProcessor[InT, OutT, CtxT], Generic[InT, OutT, CtxT
|
|
29
29
|
def __init__(
|
30
30
|
self,
|
31
31
|
name: ProcName,
|
32
|
-
subprocs: Sequence[
|
33
|
-
exit_proc:
|
32
|
+
subprocs: Sequence[BaseProcessor[Any, Any, Any, CtxT]],
|
33
|
+
exit_proc: BaseProcessor[Any, OutT, Any, CtxT],
|
34
34
|
recipients: list[ProcName] | None = None,
|
35
35
|
max_retries: int = 0,
|
36
36
|
max_iterations: int = 10,
|
@@ -60,28 +60,30 @@ class LoopedWorkflow(WorkflowProcessor[InT, OutT, CtxT], Generic[InT, OutT, CtxT
|
|
60
60
|
|
61
61
|
self._max_iterations = max_iterations
|
62
62
|
|
63
|
-
self.
|
63
|
+
self.workflow_loop_terminator: WorkflowLoopTerminator[OutT, CtxT] | None
|
64
|
+
if not hasattr(type(self), "workflow_loop_terminator"):
|
65
|
+
self.workflow_loop_terminator = None
|
64
66
|
|
65
67
|
@property
|
66
68
|
def max_iterations(self) -> int:
|
67
69
|
return self._max_iterations
|
68
70
|
|
69
|
-
def
|
70
|
-
self, func:
|
71
|
-
) ->
|
72
|
-
self.
|
71
|
+
def add_workflow_loop_terminator(
|
72
|
+
self, func: WorkflowLoopTerminator[OutT, CtxT]
|
73
|
+
) -> WorkflowLoopTerminator[OutT, CtxT]:
|
74
|
+
self.workflow_loop_terminator = func
|
73
75
|
|
74
76
|
return func
|
75
77
|
|
76
|
-
def
|
78
|
+
def _terminate_workflow_loop(
|
77
79
|
self,
|
78
80
|
out_packet: Packet[OutT],
|
79
81
|
*,
|
80
82
|
ctx: RunContext[CtxT] | None = None,
|
81
83
|
**kwargs: Any,
|
82
84
|
) -> bool:
|
83
|
-
if self.
|
84
|
-
return self.
|
85
|
+
if self.workflow_loop_terminator:
|
86
|
+
return self.workflow_loop_terminator(out_packet, ctx=ctx, **kwargs)
|
85
87
|
|
86
88
|
return False
|
87
89
|
|
@@ -96,14 +98,15 @@ class LoopedWorkflow(WorkflowProcessor[InT, OutT, CtxT], Generic[InT, OutT, CtxT
|
|
96
98
|
forgetful: bool = False,
|
97
99
|
ctx: RunContext[CtxT] | None = None,
|
98
100
|
) -> Packet[OutT]:
|
99
|
-
call_id = self._generate_call_id(call_id)
|
100
|
-
|
101
101
|
packet = in_packet
|
102
|
-
num_iterations = 0
|
103
102
|
exit_packet: Packet[OutT] | None = None
|
104
103
|
|
105
|
-
|
104
|
+
for num_iterations in range(1, self._max_iterations + 1):
|
105
|
+
call_id = self._generate_call_id(call_id)
|
106
|
+
|
106
107
|
for subproc in self.subprocs:
|
108
|
+
logger.info(f"\n[Running subprocessor {subproc.name}]\n")
|
109
|
+
|
107
110
|
packet = await subproc.run(
|
108
111
|
chat_inputs=chat_inputs,
|
109
112
|
in_packet=packet,
|
@@ -113,12 +116,13 @@ class LoopedWorkflow(WorkflowProcessor[InT, OutT, CtxT], Generic[InT, OutT, CtxT
|
|
113
116
|
ctx=ctx,
|
114
117
|
)
|
115
118
|
|
119
|
+
logger.info(f"\n[Finished running subprocessor {subproc.name}]\n")
|
120
|
+
|
116
121
|
if subproc is self._end_proc:
|
117
|
-
num_iterations += 1
|
118
122
|
exit_packet = cast("Packet[OutT]", packet)
|
119
|
-
if self.
|
123
|
+
if self._terminate_workflow_loop(exit_packet, ctx=ctx):
|
120
124
|
return exit_packet
|
121
|
-
if num_iterations
|
125
|
+
if num_iterations == self._max_iterations:
|
122
126
|
logger.info(
|
123
127
|
f"Max iterations reached ({self._max_iterations}). "
|
124
128
|
"Exiting loop."
|
@@ -128,8 +132,10 @@ class LoopedWorkflow(WorkflowProcessor[InT, OutT, CtxT], Generic[InT, OutT, CtxT
|
|
128
132
|
chat_inputs = None
|
129
133
|
in_args = None
|
130
134
|
|
135
|
+
raise RuntimeError("Looped workflow did not exit after max iterations.")
|
136
|
+
|
131
137
|
@final
|
132
|
-
async def run_stream(
|
138
|
+
async def run_stream(
|
133
139
|
self,
|
134
140
|
chat_inputs: Any | None = None,
|
135
141
|
*,
|
@@ -139,14 +145,15 @@ class LoopedWorkflow(WorkflowProcessor[InT, OutT, CtxT], Generic[InT, OutT, CtxT
|
|
139
145
|
forgetful: bool = False,
|
140
146
|
ctx: RunContext[CtxT] | None = None,
|
141
147
|
) -> AsyncIterator[Event[Any]]:
|
142
|
-
call_id = self._generate_call_id(call_id)
|
143
|
-
|
144
148
|
packet = in_packet
|
145
|
-
num_iterations = 0
|
146
149
|
exit_packet: Packet[OutT] | None = None
|
147
150
|
|
148
|
-
|
151
|
+
for num_iterations in range(1, self._max_iterations + 1):
|
152
|
+
call_id = self._generate_call_id(call_id)
|
153
|
+
|
149
154
|
for subproc in self.subprocs:
|
155
|
+
logger.info(f"\n[Running subprocessor {subproc.name}]\n")
|
156
|
+
|
150
157
|
async for event in subproc.run_stream(
|
151
158
|
chat_inputs=chat_inputs,
|
152
159
|
in_packet=packet,
|
@@ -159,15 +166,16 @@ class LoopedWorkflow(WorkflowProcessor[InT, OutT, CtxT], Generic[InT, OutT, CtxT
|
|
159
166
|
packet = event.data
|
160
167
|
yield event
|
161
168
|
|
169
|
+
logger.info(f"\n[Finished running subprocessor {subproc.name}]\n")
|
170
|
+
|
162
171
|
if subproc is self._end_proc:
|
163
|
-
num_iterations += 1
|
164
172
|
exit_packet = cast("Packet[OutT]", packet)
|
165
|
-
if self.
|
173
|
+
if self._terminate_workflow_loop(exit_packet, ctx=ctx):
|
166
174
|
yield WorkflowResultEvent(
|
167
175
|
data=exit_packet, proc_name=self.name, call_id=call_id
|
168
176
|
)
|
169
177
|
return
|
170
|
-
if num_iterations
|
178
|
+
if num_iterations == self._max_iterations:
|
171
179
|
logger.info(
|
172
180
|
f"Max iterations reached ({self._max_iterations}). "
|
173
181
|
"Exiting loop."
|
@@ -1,21 +1,24 @@
|
|
1
|
+
import logging
|
1
2
|
from collections.abc import AsyncIterator, Sequence
|
2
3
|
from itertools import pairwise
|
3
4
|
from typing import Any, Generic, cast, final
|
4
5
|
|
5
6
|
from ..errors import WorkflowConstructionError
|
6
7
|
from ..packet_pool import Packet
|
7
|
-
from ..
|
8
|
+
from ..processors.base_processor import BaseProcessor
|
8
9
|
from ..run_context import CtxT, RunContext
|
9
10
|
from ..typing.events import Event, ProcPacketOutputEvent, WorkflowResultEvent
|
10
11
|
from ..typing.io import InT, OutT, ProcName
|
11
12
|
from .workflow_processor import WorkflowProcessor
|
12
13
|
|
14
|
+
logger = logging.getLogger(__name__)
|
15
|
+
|
13
16
|
|
14
17
|
class SequentialWorkflow(WorkflowProcessor[InT, OutT, CtxT], Generic[InT, OutT, CtxT]):
|
15
18
|
def __init__(
|
16
19
|
self,
|
17
20
|
name: ProcName,
|
18
|
-
subprocs: Sequence[
|
21
|
+
subprocs: Sequence[BaseProcessor[Any, Any, Any, CtxT]],
|
19
22
|
recipients: list[ProcName] | None = None,
|
20
23
|
max_retries: int = 0,
|
21
24
|
) -> None:
|
@@ -51,6 +54,8 @@ class SequentialWorkflow(WorkflowProcessor[InT, OutT, CtxT], Generic[InT, OutT,
|
|
51
54
|
|
52
55
|
packet = in_packet
|
53
56
|
for subproc in self.subprocs:
|
57
|
+
logger.info(f"\n[Running subprocessor {subproc.name}]\n")
|
58
|
+
|
54
59
|
packet = await subproc.run(
|
55
60
|
chat_inputs=chat_inputs,
|
56
61
|
in_packet=packet,
|
@@ -62,10 +67,12 @@ class SequentialWorkflow(WorkflowProcessor[InT, OutT, CtxT], Generic[InT, OutT,
|
|
62
67
|
chat_inputs = None
|
63
68
|
in_args = None
|
64
69
|
|
70
|
+
logger.info(f"\n[Finished running subprocessor {subproc.name}]\n")
|
71
|
+
|
65
72
|
return cast("Packet[OutT]", packet)
|
66
73
|
|
67
74
|
@final
|
68
|
-
async def run_stream(
|
75
|
+
async def run_stream(
|
69
76
|
self,
|
70
77
|
chat_inputs: Any | None = None,
|
71
78
|
*,
|
@@ -79,6 +86,8 @@ class SequentialWorkflow(WorkflowProcessor[InT, OutT, CtxT], Generic[InT, OutT,
|
|
79
86
|
|
80
87
|
packet = in_packet
|
81
88
|
for subproc in self.subprocs:
|
89
|
+
logger.info(f"\n[Running subprocessor {subproc.name}]\n")
|
90
|
+
|
82
91
|
async for event in subproc.run_stream(
|
83
92
|
chat_inputs=chat_inputs,
|
84
93
|
in_packet=packet,
|
@@ -94,6 +103,8 @@ class SequentialWorkflow(WorkflowProcessor[InT, OutT, CtxT], Generic[InT, OutT,
|
|
94
103
|
chat_inputs = None
|
95
104
|
in_args = None
|
96
105
|
|
106
|
+
logger.info(f"\n[Finished running subprocessor {subproc.name}]\n")
|
107
|
+
|
97
108
|
yield WorkflowResultEvent(
|
98
109
|
data=cast("Packet[OutT]", packet), proc_name=self.name, call_id=call_id
|
99
110
|
)
|
@@ -4,23 +4,23 @@ from typing import Any, Generic
|
|
4
4
|
|
5
5
|
from ..errors import WorkflowConstructionError
|
6
6
|
from ..packet import Packet
|
7
|
-
from ..
|
7
|
+
from ..processors.base_processor import BaseProcessor, RecipientSelector
|
8
8
|
from ..run_context import CtxT, RunContext
|
9
|
-
from ..typing.events import Event
|
9
|
+
from ..typing.events import DummyEvent, Event
|
10
10
|
from ..typing.io import InT, OutT, ProcName
|
11
11
|
|
12
12
|
|
13
13
|
class WorkflowProcessor(
|
14
|
-
|
14
|
+
BaseProcessor[InT, OutT, Any, CtxT],
|
15
15
|
ABC,
|
16
16
|
Generic[InT, OutT, CtxT],
|
17
17
|
):
|
18
18
|
def __init__(
|
19
19
|
self,
|
20
20
|
name: ProcName,
|
21
|
-
subprocs: Sequence[
|
22
|
-
start_proc:
|
23
|
-
end_proc:
|
21
|
+
subprocs: Sequence[BaseProcessor[Any, Any, Any, CtxT]],
|
22
|
+
start_proc: BaseProcessor[InT, Any, Any, CtxT],
|
23
|
+
end_proc: BaseProcessor[Any, OutT, Any, CtxT],
|
24
24
|
recipients: list[ProcName] | None = None,
|
25
25
|
max_retries: int = 0,
|
26
26
|
) -> None:
|
@@ -44,10 +44,7 @@ class WorkflowProcessor(
|
|
44
44
|
self._start_proc = start_proc
|
45
45
|
self._end_proc = end_proc
|
46
46
|
|
47
|
-
self.recipients =
|
48
|
-
if recipients is not None:
|
49
|
-
self.recipients = recipients
|
50
|
-
|
47
|
+
self.recipients = recipients
|
51
48
|
if hasattr(type(self), "recipient_selector"):
|
52
49
|
self._end_proc.recipient_selector = self.recipient_selector
|
53
50
|
|
@@ -60,19 +57,28 @@ class WorkflowProcessor(
|
|
60
57
|
return func
|
61
58
|
|
62
59
|
@property
|
63
|
-
def
|
60
|
+
def recipients(self) -> list[ProcName] | None:
|
61
|
+
return self._end_proc.recipients
|
62
|
+
|
63
|
+
@recipients.setter
|
64
|
+
def recipients(self, value: list[ProcName] | None) -> None:
|
65
|
+
if hasattr(self, "_end_proc"):
|
66
|
+
self._end_proc.recipients = value
|
67
|
+
|
68
|
+
@property
|
69
|
+
def subprocs(self) -> Sequence[BaseProcessor[Any, Any, Any, CtxT]]:
|
64
70
|
return self._subprocs
|
65
71
|
|
66
72
|
@property
|
67
|
-
def start_proc(self) ->
|
73
|
+
def start_proc(self) -> BaseProcessor[InT, Any, Any, CtxT]:
|
68
74
|
return self._start_proc
|
69
75
|
|
70
76
|
@property
|
71
|
-
def end_proc(self) ->
|
77
|
+
def end_proc(self) -> BaseProcessor[Any, OutT, Any, CtxT]:
|
72
78
|
return self._end_proc
|
73
79
|
|
74
80
|
def _generate_subproc_call_id(
|
75
|
-
self, call_id: str | None, subproc:
|
81
|
+
self, call_id: str | None, subproc: BaseProcessor[Any, Any, Any, CtxT]
|
76
82
|
) -> str | None:
|
77
83
|
return f"{self._generate_call_id(call_id)}/{subproc.name}"
|
78
84
|
|
@@ -100,4 +106,4 @@ class WorkflowProcessor(
|
|
100
106
|
forgetful: bool = False,
|
101
107
|
call_id: str | None = None,
|
102
108
|
) -> AsyncIterator[Event[Any]]:
|
103
|
-
|
109
|
+
yield DummyEvent()
|
@@ -1,22 +1,21 @@
|
|
1
|
-
grasp_agents/__init__.py,sha256=
|
2
|
-
grasp_agents/cloud_llm.py,sha256=
|
1
|
+
grasp_agents/__init__.py,sha256=Z3a_j2Etiap9H6lvE8-PQP_OIGMUcHNPeJAJO12B8kY,1031
|
2
|
+
grasp_agents/cloud_llm.py,sha256=gM43G4-dR-vugeKuhGty8iEuZUbloImbz2XyWO0IMjg,13254
|
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=
|
9
|
-
grasp_agents/llm_agent.py,sha256=
|
8
|
+
grasp_agents/llm.py,sha256=w3vVIYUfhr_t45sZa0Nl373Htm05r9NUS02SvCKXbVA,12151
|
9
|
+
grasp_agents/llm_agent.py,sha256=hX3T2Y5qiTt5CrsahNo5t08HFCyBWEiurzYnFykJN9Y,13513
|
10
10
|
grasp_agents/llm_agent_memory.py,sha256=gQwH3g4Ib3ciW2jrBiW13ttwax_pcPobH5RhXRmbc0E,1842
|
11
|
-
grasp_agents/llm_policy_executor.py,sha256=
|
11
|
+
grasp_agents/llm_policy_executor.py,sha256=bP-O1itfaG-dr2PC9_zLCNMI862cPRqW7vsj9tRCz-I,17062
|
12
12
|
grasp_agents/memory.py,sha256=keHuNEZNSxHT9FKpMohHOCNi7UAz_oRIc91IQEuzaWE,1162
|
13
13
|
grasp_agents/packet.py,sha256=EmE-W4ZSMVZoqClECGFe7OGqrT4FSJ8IVGICrdjtdEY,1462
|
14
|
-
grasp_agents/packet_pool.py,sha256=
|
15
|
-
grasp_agents/printer.py,sha256=
|
16
|
-
grasp_agents/processor.py,sha256=eCte5jvFsGxzlgjEnIcakuvTB5bNWRq-29cAYWNZBXY,17149
|
14
|
+
grasp_agents/packet_pool.py,sha256=AF7ZMYY1U6ppNLEn6o0R8QXyWmcLQGcju7_TYQpAudg,4443
|
15
|
+
grasp_agents/printer.py,sha256=wVNCaR9mbFKyzYdT8YpYD1JQqRqHdLtdfiZrwYxaM6Y,11132
|
17
16
|
grasp_agents/prompt_builder.py,sha256=UuQNnvjrhzd3_NVnvHlCs-NRNRMo4jsMePgZeIxmzSY,5894
|
18
17
|
grasp_agents/run_context.py,sha256=ikakNK1khm0UBEIPETB508BL0IlOKbOUPuq0FZ-iQHQ,942
|
19
|
-
grasp_agents/runner.py,sha256=
|
18
|
+
grasp_agents/runner.py,sha256=Gc4xQ9EQWbIHPaoe4KQsFkHhSnJK3xNPIGxHsYLI3aY,5147
|
20
19
|
grasp_agents/usage_tracker.py,sha256=ZQfVUUpG0C89hyPWT_JgXnjQOxoYmumcQ9t-aCfcMo8,3561
|
21
20
|
grasp_agents/utils.py,sha256=qKmGBwrQHw1-BgqRLuGTPKGs3J_zbrpk3nxnP1iZBiQ,6152
|
22
21
|
grasp_agents/litellm/__init__.py,sha256=wD8RZBYokFDfbS9Cs7nO_zKb3w7RIVwEGj7g2D5CJH0,4510
|
@@ -33,24 +32,27 @@ grasp_agents/openai/converters.py,sha256=CXHF2GehEHLEzjL45HywZ_1qaB3N29-lbac5oBD
|
|
33
32
|
grasp_agents/openai/message_converters.py,sha256=fhSN81uK51EGbLyM2-f0MvPX_UBrMy7SF3JQPo-dkXg,4686
|
34
33
|
grasp_agents/openai/openai_llm.py,sha256=uJbbCytqpv8OCncKdzpiUdkVh3mJWgo95Y9Xetk_Ptg,10556
|
35
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
|
36
38
|
grasp_agents/rate_limiting/__init__.py,sha256=KRgtF_E7R3YfA2cpYcFcZ7wycV0pWVJ0xRQC7YhiIEQ,158
|
37
39
|
grasp_agents/rate_limiting/rate_limiter_chunked.py,sha256=BPgkUXvhmZhTpZs2T6uujNFuxH_kYHiISuf6_-eNhUc,5544
|
38
40
|
grasp_agents/rate_limiting/types.py,sha256=PbnNhEAcYedQdIpPJWud8HUVcxa_xZS2RDZu4c5jr40,1003
|
39
41
|
grasp_agents/rate_limiting/utils.py,sha256=oEDWDNHYMUdxOOG49PlAJochkZq8nnVBCo6JxPc1iSo,2007
|
40
42
|
grasp_agents/typing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
41
43
|
grasp_agents/typing/completion.py,sha256=PHJ01m7WI2KYQL8w7W2ti6hMsKEZnzYGaxbNcBCc_IE,2782
|
42
|
-
grasp_agents/typing/completion_chunk.py,sha256=
|
44
|
+
grasp_agents/typing/completion_chunk.py,sha256=eiOcpyMrH4Ws2XnY3_jj2_g396MqA3zV3lHygHfXt4o,17883
|
43
45
|
grasp_agents/typing/content.py,sha256=XFmLpNWkGhkw5JujO6UsYwhzTHkU67PfhzaXH2waLcQ,3659
|
44
46
|
grasp_agents/typing/converters.py,sha256=kHlocHQS8QnduZOzNPbj3aRD8JpvJd53oudYqWdOxKE,2978
|
45
|
-
grasp_agents/typing/events.py,sha256=
|
47
|
+
grasp_agents/typing/events.py,sha256=vFq6qRGofY8NuxOG9ZIN2_CnhAqsAodYLD4b4KtAq2U,12620
|
46
48
|
grasp_agents/typing/io.py,sha256=MGEoUjAwKH1AHYglFkKNpHiielw-NFf13Epg3B4Q7Iw,139
|
47
49
|
grasp_agents/typing/message.py,sha256=o7bN84AgrC5Fm3Wx20gqL9ArAMcEtYvnHnXbb04ngCs,3224
|
48
50
|
grasp_agents/typing/tool.py,sha256=4N-k_GvHVPAFyVyEq7z_LYKkA24iQlGoVYiWCzGTgT4,1786
|
49
51
|
grasp_agents/workflow/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
50
|
-
grasp_agents/workflow/looped_workflow.py,sha256=
|
51
|
-
grasp_agents/workflow/sequential_workflow.py,sha256=
|
52
|
-
grasp_agents/workflow/workflow_processor.py,sha256=
|
53
|
-
grasp_agents-0.5.
|
54
|
-
grasp_agents-0.5.
|
55
|
-
grasp_agents-0.5.
|
56
|
-
grasp_agents-0.5.
|
52
|
+
grasp_agents/workflow/looped_workflow.py,sha256=WHp9O3Za2sBVfY_BLOdvPvtY20XsjZQaWSO2-oAFvOY,6806
|
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,,
|
File without changes
|
File without changes
|