lionagi 0.1.2__py3-none-any.whl → 0.2.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.
- lionagi/__init__.py +60 -5
- lionagi/core/__init__.py +0 -25
- lionagi/core/_setting/_setting.py +59 -0
- lionagi/core/action/__init__.py +14 -0
- lionagi/core/action/function_calling.py +136 -0
- lionagi/core/action/manual.py +1 -0
- lionagi/core/action/node.py +109 -0
- lionagi/core/action/tool.py +114 -0
- lionagi/core/action/tool_manager.py +356 -0
- lionagi/core/agent/base_agent.py +27 -13
- lionagi/core/agent/eval/evaluator.py +1 -0
- lionagi/core/agent/eval/vote.py +40 -0
- lionagi/core/agent/learn/learner.py +59 -0
- lionagi/core/agent/plan/unit_template.py +1 -0
- lionagi/core/collections/__init__.py +17 -0
- lionagi/core/{generic/data_logger.py → collections/_logger.py} +69 -55
- lionagi/core/collections/abc/__init__.py +53 -0
- lionagi/core/collections/abc/component.py +615 -0
- lionagi/core/collections/abc/concepts.py +297 -0
- lionagi/core/collections/abc/exceptions.py +150 -0
- lionagi/core/collections/abc/util.py +45 -0
- lionagi/core/collections/exchange.py +161 -0
- lionagi/core/collections/flow.py +426 -0
- lionagi/core/collections/model.py +419 -0
- lionagi/core/collections/pile.py +913 -0
- lionagi/core/collections/progression.py +236 -0
- lionagi/core/collections/util.py +64 -0
- lionagi/core/director/direct.py +314 -0
- lionagi/core/director/director.py +2 -0
- lionagi/core/{execute/branch_executor.py → engine/branch_engine.py} +134 -97
- lionagi/core/{execute/instruction_map_executor.py → engine/instruction_map_engine.py} +80 -55
- lionagi/{experimental/directive/evaluator → core/engine}/script_engine.py +17 -1
- lionagi/core/executor/base_executor.py +90 -0
- lionagi/core/{execute/structure_executor.py → executor/graph_executor.py} +62 -66
- lionagi/core/{execute → executor}/neo4j_executor.py +70 -67
- lionagi/core/generic/__init__.py +3 -33
- lionagi/core/generic/edge.py +29 -79
- lionagi/core/generic/edge_condition.py +16 -0
- lionagi/core/generic/graph.py +236 -0
- lionagi/core/generic/hyperedge.py +1 -0
- lionagi/core/generic/node.py +156 -221
- lionagi/core/generic/tree.py +48 -0
- lionagi/core/generic/tree_node.py +79 -0
- lionagi/core/mail/__init__.py +12 -0
- lionagi/core/mail/mail.py +25 -0
- lionagi/core/mail/mail_manager.py +139 -58
- lionagi/core/mail/package.py +45 -0
- lionagi/core/mail/start_mail.py +36 -0
- lionagi/core/message/__init__.py +19 -0
- lionagi/core/message/action_request.py +133 -0
- lionagi/core/message/action_response.py +135 -0
- lionagi/core/message/assistant_response.py +95 -0
- lionagi/core/message/instruction.py +234 -0
- lionagi/core/message/message.py +101 -0
- lionagi/core/message/system.py +86 -0
- lionagi/core/message/util.py +283 -0
- lionagi/core/report/__init__.py +4 -0
- lionagi/core/report/base.py +217 -0
- lionagi/core/report/form.py +231 -0
- lionagi/core/report/report.py +166 -0
- lionagi/core/report/util.py +28 -0
- lionagi/core/rule/_default.py +16 -0
- lionagi/core/rule/action.py +99 -0
- lionagi/core/rule/base.py +238 -0
- lionagi/core/rule/boolean.py +56 -0
- lionagi/core/rule/choice.py +47 -0
- lionagi/core/rule/mapping.py +96 -0
- lionagi/core/rule/number.py +71 -0
- lionagi/core/rule/rulebook.py +109 -0
- lionagi/core/rule/string.py +52 -0
- lionagi/core/rule/util.py +35 -0
- lionagi/core/session/branch.py +431 -0
- lionagi/core/session/directive_mixin.py +287 -0
- lionagi/core/session/session.py +229 -903
- lionagi/core/structure/__init__.py +1 -0
- lionagi/core/structure/chain.py +1 -0
- lionagi/core/structure/forest.py +1 -0
- lionagi/core/structure/graph.py +1 -0
- lionagi/core/structure/tree.py +1 -0
- lionagi/core/unit/__init__.py +5 -0
- lionagi/core/unit/parallel_unit.py +245 -0
- lionagi/core/unit/template/action.py +81 -0
- lionagi/core/unit/template/base.py +51 -0
- lionagi/core/unit/template/plan.py +84 -0
- lionagi/core/unit/template/predict.py +109 -0
- lionagi/core/unit/template/score.py +124 -0
- lionagi/core/unit/template/select.py +104 -0
- lionagi/core/unit/unit.py +362 -0
- lionagi/core/unit/unit_form.py +305 -0
- lionagi/core/unit/unit_mixin.py +1168 -0
- lionagi/core/unit/util.py +71 -0
- lionagi/core/validator/validator.py +364 -0
- lionagi/core/work/work.py +74 -0
- lionagi/core/work/work_function.py +92 -0
- lionagi/core/work/work_queue.py +81 -0
- lionagi/core/work/worker.py +195 -0
- lionagi/core/work/worklog.py +124 -0
- lionagi/experimental/compressor/base.py +46 -0
- lionagi/experimental/compressor/llm_compressor.py +247 -0
- lionagi/experimental/compressor/llm_summarizer.py +61 -0
- lionagi/experimental/compressor/util.py +70 -0
- lionagi/experimental/directive/__init__.py +19 -0
- lionagi/experimental/directive/parser/base_parser.py +69 -2
- lionagi/experimental/directive/{template_ → template}/base_template.py +17 -1
- lionagi/{libs/ln_tokenizer.py → experimental/directive/tokenizer.py} +16 -0
- lionagi/experimental/{directive/evaluator → evaluator}/ast_evaluator.py +16 -0
- lionagi/experimental/{directive/evaluator → evaluator}/base_evaluator.py +16 -0
- lionagi/experimental/knowledge/base.py +10 -0
- lionagi/experimental/memory/__init__.py +0 -0
- lionagi/experimental/strategies/__init__.py +0 -0
- lionagi/experimental/strategies/base.py +1 -0
- lionagi/integrations/bridge/langchain_/documents.py +4 -0
- lionagi/integrations/bridge/llamaindex_/index.py +30 -0
- lionagi/integrations/bridge/llamaindex_/llama_index_bridge.py +6 -0
- lionagi/integrations/chunker/chunk.py +161 -24
- lionagi/integrations/config/oai_configs.py +34 -3
- lionagi/integrations/config/openrouter_configs.py +14 -2
- lionagi/integrations/loader/load.py +122 -21
- lionagi/integrations/loader/load_util.py +6 -77
- lionagi/integrations/provider/_mapping.py +46 -0
- lionagi/integrations/provider/litellm.py +2 -1
- lionagi/integrations/provider/mlx_service.py +16 -9
- lionagi/integrations/provider/oai.py +91 -4
- lionagi/integrations/provider/ollama.py +6 -5
- lionagi/integrations/provider/openrouter.py +115 -8
- lionagi/integrations/provider/services.py +2 -2
- lionagi/integrations/provider/transformers.py +18 -22
- lionagi/integrations/storage/__init__.py +3 -3
- lionagi/integrations/storage/neo4j.py +52 -60
- lionagi/integrations/storage/storage_util.py +44 -46
- lionagi/integrations/storage/structure_excel.py +43 -26
- lionagi/integrations/storage/to_excel.py +11 -4
- lionagi/libs/__init__.py +22 -1
- lionagi/libs/ln_api.py +75 -20
- lionagi/libs/ln_context.py +37 -0
- lionagi/libs/ln_convert.py +21 -9
- lionagi/libs/ln_func_call.py +69 -28
- lionagi/libs/ln_image.py +107 -0
- lionagi/libs/ln_nested.py +26 -11
- lionagi/libs/ln_parse.py +82 -23
- lionagi/libs/ln_queue.py +16 -0
- lionagi/libs/ln_tokenize.py +164 -0
- lionagi/libs/ln_validate.py +16 -0
- lionagi/libs/special_tokens.py +172 -0
- lionagi/libs/sys_util.py +95 -24
- lionagi/lions/coder/code_form.py +13 -0
- lionagi/lions/coder/coder.py +50 -3
- lionagi/lions/coder/util.py +30 -25
- lionagi/tests/libs/test_func_call.py +23 -21
- lionagi/tests/libs/test_nested.py +36 -21
- lionagi/tests/libs/test_parse.py +1 -1
- lionagi/tests/test_core/collections/__init__.py +0 -0
- lionagi/tests/test_core/collections/test_component.py +206 -0
- lionagi/tests/test_core/collections/test_exchange.py +138 -0
- lionagi/tests/test_core/collections/test_flow.py +145 -0
- lionagi/tests/test_core/collections/test_pile.py +171 -0
- lionagi/tests/test_core/collections/test_progression.py +129 -0
- lionagi/tests/test_core/generic/test_edge.py +67 -0
- lionagi/tests/test_core/generic/test_graph.py +96 -0
- lionagi/tests/test_core/generic/test_node.py +106 -0
- lionagi/tests/test_core/generic/test_tree_node.py +73 -0
- lionagi/tests/test_core/test_branch.py +115 -294
- lionagi/tests/test_core/test_form.py +46 -0
- lionagi/tests/test_core/test_report.py +105 -0
- lionagi/tests/test_core/test_validator.py +111 -0
- lionagi/version.py +1 -1
- lionagi-0.2.0.dist-info/LICENSE +202 -0
- lionagi-0.2.0.dist-info/METADATA +272 -0
- lionagi-0.2.0.dist-info/RECORD +240 -0
- lionagi/core/branch/base.py +0 -653
- lionagi/core/branch/branch.py +0 -474
- lionagi/core/branch/flow_mixin.py +0 -96
- lionagi/core/branch/util.py +0 -323
- lionagi/core/direct/__init__.py +0 -19
- lionagi/core/direct/cot.py +0 -123
- lionagi/core/direct/plan.py +0 -164
- lionagi/core/direct/predict.py +0 -166
- lionagi/core/direct/react.py +0 -171
- lionagi/core/direct/score.py +0 -279
- lionagi/core/direct/select.py +0 -170
- lionagi/core/direct/sentiment.py +0 -1
- lionagi/core/direct/utils.py +0 -110
- lionagi/core/direct/vote.py +0 -64
- lionagi/core/execute/base_executor.py +0 -47
- lionagi/core/flow/baseflow.py +0 -23
- lionagi/core/flow/monoflow/ReAct.py +0 -240
- lionagi/core/flow/monoflow/__init__.py +0 -9
- lionagi/core/flow/monoflow/chat.py +0 -95
- lionagi/core/flow/monoflow/chat_mixin.py +0 -253
- lionagi/core/flow/monoflow/followup.py +0 -215
- lionagi/core/flow/polyflow/__init__.py +0 -1
- lionagi/core/flow/polyflow/chat.py +0 -251
- lionagi/core/form/action_form.py +0 -26
- lionagi/core/form/field_validator.py +0 -287
- lionagi/core/form/form.py +0 -302
- lionagi/core/form/mixin.py +0 -214
- lionagi/core/form/scored_form.py +0 -13
- lionagi/core/generic/action.py +0 -26
- lionagi/core/generic/component.py +0 -532
- lionagi/core/generic/condition.py +0 -46
- lionagi/core/generic/mail.py +0 -90
- lionagi/core/generic/mailbox.py +0 -36
- lionagi/core/generic/relation.py +0 -70
- lionagi/core/generic/signal.py +0 -22
- lionagi/core/generic/structure.py +0 -362
- lionagi/core/generic/transfer.py +0 -20
- lionagi/core/generic/work.py +0 -40
- lionagi/core/graph/graph.py +0 -126
- lionagi/core/graph/tree.py +0 -190
- lionagi/core/mail/schema.py +0 -63
- lionagi/core/messages/schema.py +0 -325
- lionagi/core/tool/__init__.py +0 -5
- lionagi/core/tool/tool.py +0 -28
- lionagi/core/tool/tool_manager.py +0 -283
- lionagi/experimental/report/form.py +0 -64
- lionagi/experimental/report/report.py +0 -138
- lionagi/experimental/report/util.py +0 -47
- lionagi/experimental/tool/function_calling.py +0 -43
- lionagi/experimental/tool/manual.py +0 -66
- lionagi/experimental/tool/schema.py +0 -59
- lionagi/experimental/tool/tool_manager.py +0 -138
- lionagi/experimental/tool/util.py +0 -16
- lionagi/experimental/validator/rule.py +0 -139
- lionagi/experimental/validator/validator.py +0 -56
- lionagi/experimental/work/__init__.py +0 -10
- lionagi/experimental/work/async_queue.py +0 -54
- lionagi/experimental/work/schema.py +0 -73
- lionagi/experimental/work/work_function.py +0 -67
- lionagi/experimental/work/worker.py +0 -56
- lionagi/experimental/work2/form.py +0 -371
- lionagi/experimental/work2/report.py +0 -289
- lionagi/experimental/work2/schema.py +0 -30
- lionagi/experimental/work2/tests.py +0 -72
- lionagi/experimental/work2/work_function.py +0 -89
- lionagi/experimental/work2/worker.py +0 -12
- lionagi/integrations/bridge/llamaindex_/get_index.py +0 -294
- lionagi/tests/test_core/generic/test_component.py +0 -89
- lionagi/tests/test_core/test_base_branch.py +0 -426
- lionagi/tests/test_core/test_chat_flow.py +0 -63
- lionagi/tests/test_core/test_mail_manager.py +0 -75
- lionagi/tests/test_core/test_prompts.py +0 -51
- lionagi/tests/test_core/test_session.py +0 -254
- lionagi/tests/test_core/test_session_base_util.py +0 -313
- lionagi/tests/test_core/test_tool_manager.py +0 -95
- lionagi-0.1.2.dist-info/LICENSE +0 -9
- lionagi-0.1.2.dist-info/METADATA +0 -174
- lionagi-0.1.2.dist-info/RECORD +0 -206
- /lionagi/core/{branch → _setting}/__init__.py +0 -0
- /lionagi/core/{execute → agent/eval}/__init__.py +0 -0
- /lionagi/core/{flow → agent/learn}/__init__.py +0 -0
- /lionagi/core/{form → agent/plan}/__init__.py +0 -0
- /lionagi/core/{branch/executable_branch.py → agent/plan/plan.py} +0 -0
- /lionagi/core/{graph → director}/__init__.py +0 -0
- /lionagi/core/{messages → engine}/__init__.py +0 -0
- /lionagi/{experimental/directive/evaluator → core/engine}/sandbox_.py +0 -0
- /lionagi/{experimental/directive/evaluator → core/executor}/__init__.py +0 -0
- /lionagi/{experimental/directive/template_ → core/rule}/__init__.py +0 -0
- /lionagi/{experimental/report → core/unit/template}/__init__.py +0 -0
- /lionagi/{experimental/tool → core/validator}/__init__.py +0 -0
- /lionagi/{experimental/validator → core/work}/__init__.py +0 -0
- /lionagi/experimental/{work2 → compressor}/__init__.py +0 -0
- /lionagi/{core/flow/mono_chat_mixin.py → experimental/directive/template/__init__.py} +0 -0
- /lionagi/experimental/directive/{schema.py → template/schema.py} +0 -0
- /lionagi/experimental/{work2/util.py → evaluator/__init__.py} +0 -0
- /lionagi/experimental/{work2/work.py → knowledge/__init__.py} +0 -0
- /lionagi/{tests/libs/test_async.py → experimental/knowledge/graph.py} +0 -0
- {lionagi-0.1.2.dist-info → lionagi-0.2.0.dist-info}/WHEEL +0 -0
- {lionagi-0.1.2.dist-info → lionagi-0.2.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,287 @@
|
|
1
|
+
"""
|
2
|
+
Copyright 2024 HaiyangLi
|
3
|
+
|
4
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
you may not use this file except in compliance with the License.
|
6
|
+
You may obtain a copy of the License at
|
7
|
+
|
8
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
|
10
|
+
Unless required by applicable law or agreed to in writing, software
|
11
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
See the License for the specific language governing permissions and
|
14
|
+
limitations under the License.
|
15
|
+
"""
|
16
|
+
|
17
|
+
# lionagi/core/session/directive_mixin.py
|
18
|
+
|
19
|
+
from lionagi.core.unit import Unit
|
20
|
+
from ..message.action_response import ActionResponse
|
21
|
+
|
22
|
+
|
23
|
+
class DirectiveMixin:
|
24
|
+
"""
|
25
|
+
Mixin class for handling chat interactions within the directive framework.
|
26
|
+
"""
|
27
|
+
|
28
|
+
async def chat(
|
29
|
+
self,
|
30
|
+
instruction, # additional instruction
|
31
|
+
context=None, # context to perform the instruction on
|
32
|
+
system=None, # optionally swap system message
|
33
|
+
sender=None, # sender of the instruction, default "user"
|
34
|
+
recipient=None, # recipient of the instruction, default "branch.ln_id"
|
35
|
+
requested_fields=None, # fields to request from the context, default None
|
36
|
+
form=None, # form to create instruction from, default None,
|
37
|
+
tools=False, # the tools to use, use True to consider all tools, no tools by default
|
38
|
+
invoke_tool=True, # whether to invoke the tool when function calling, default True
|
39
|
+
return_form=True, # whether to return the form if a form is passed in, otherwise return a dict/str
|
40
|
+
strict=False, # whether to strictly enforce the rule validation, default False
|
41
|
+
rulebook=None, # the rulebook to use for validation, default None, use default rulebook
|
42
|
+
imodel=None, # the optinally swappable iModel for the commands, otherwise self.branch.imodel
|
43
|
+
clear_messages=False,
|
44
|
+
use_annotation=True, # whether to use annotation as rule qualifier, default True, (need rulebook if False)
|
45
|
+
retries: int = 3,
|
46
|
+
delay: float = 0,
|
47
|
+
backoff_factor: float = 1,
|
48
|
+
default=None,
|
49
|
+
timeout: float = None,
|
50
|
+
timing: bool = False,
|
51
|
+
return_branch=False,
|
52
|
+
images=None,
|
53
|
+
image_path=None,
|
54
|
+
**kwargs,
|
55
|
+
):
|
56
|
+
"""
|
57
|
+
Asynchronously handles a chat interaction within the directive framework.
|
58
|
+
|
59
|
+
This method processes an instruction with the given context and optional
|
60
|
+
parameters, interacting with tools, models, and validation rules as needed.
|
61
|
+
It manages retries, timeouts, concurrency, and can optionally clear
|
62
|
+
previous messages, swap system messages, and control the use of
|
63
|
+
annotations and rulebooks.
|
64
|
+
|
65
|
+
Args:
|
66
|
+
instruction (str, optional): Additional instruction to process.
|
67
|
+
context (Any, optional): Context to perform the instruction on.
|
68
|
+
system (str, optional): Optionally swap the system message.
|
69
|
+
sender (str, optional): Sender of the instruction, default is "user".
|
70
|
+
recipient (str, optional): Recipient of the instruction, default is
|
71
|
+
"branch.ln_id".
|
72
|
+
requested_fields (dict[str, str], optional): Fields to request from
|
73
|
+
the context.
|
74
|
+
form (Any, optional): Form to create instruction from, default is None.
|
75
|
+
tools (bool, optional): Tools to use, use True to consider all tools,
|
76
|
+
no tools by default.
|
77
|
+
invoke_tool (bool, optional): Whether to invoke the tool when function
|
78
|
+
calling, default is True.
|
79
|
+
return_form (bool, optional): Whether to return the form if a form is
|
80
|
+
passed in, otherwise return a dict/str.
|
81
|
+
strict (bool, optional): Whether to strictly enforce rule validation,
|
82
|
+
default is False.
|
83
|
+
rulebook (Any, optional): The rulebook to use for validation, default
|
84
|
+
is None (uses default rulebook).
|
85
|
+
imodel (iModel, optional): Optionally swappable iModel for the
|
86
|
+
commands, otherwise self.branch.imodel.
|
87
|
+
clear_messages (bool, optional): Whether to clear previous messages,
|
88
|
+
default is False.
|
89
|
+
use_annotation (bool, optional): Whether to use annotation as rule
|
90
|
+
qualifier, default is True (needs rulebook if False).
|
91
|
+
retries (int, optional): Number of retries if failed, default is 3.
|
92
|
+
delay (float, optional): Number of seconds to delay before retrying,
|
93
|
+
default is 0.
|
94
|
+
backoff_factor (float, optional): Exponential backoff factor, default
|
95
|
+
is 1 (no backoff).
|
96
|
+
default (Any, optional): Default value to return if all retries failed.
|
97
|
+
timeout (float, optional): Timeout for the rcall, default is None
|
98
|
+
(no timeout).
|
99
|
+
timing (bool, optional): If True, will return a tuple (output,
|
100
|
+
duration), default is False.
|
101
|
+
return_branch (bool, optional): Whether to return the branch after
|
102
|
+
processing, default is False.
|
103
|
+
**kwargs: Additional keyword arguments for further customization.
|
104
|
+
|
105
|
+
Returns:
|
106
|
+
Any: The result of the chat processing, format determined by the
|
107
|
+
`return_form` parameter.
|
108
|
+
|
109
|
+
Raises:
|
110
|
+
ValueError: If an invalid combination of parameters is provided.
|
111
|
+
|
112
|
+
Examples:
|
113
|
+
>>> result = await self.chat(instruction="Hello", context={"data": "example"})
|
114
|
+
>>> print(result)
|
115
|
+
"""
|
116
|
+
|
117
|
+
directive = Unit(self, imodel=imodel, rulebook=rulebook)
|
118
|
+
if system:
|
119
|
+
self.add_message(system=system)
|
120
|
+
|
121
|
+
if not images and image_path:
|
122
|
+
from lionagi.libs import ImageUtil
|
123
|
+
|
124
|
+
images = ImageUtil.read_image_to_base64(image_path)
|
125
|
+
|
126
|
+
return await directive.chat(
|
127
|
+
instruction=instruction,
|
128
|
+
context=context,
|
129
|
+
sender=sender,
|
130
|
+
recipient=recipient,
|
131
|
+
requested_fields=requested_fields,
|
132
|
+
form=form,
|
133
|
+
tools=tools,
|
134
|
+
invoke_tool=invoke_tool,
|
135
|
+
return_form=return_form,
|
136
|
+
strict=strict,
|
137
|
+
use_annotation=use_annotation,
|
138
|
+
retries=retries,
|
139
|
+
delay=delay,
|
140
|
+
backoff_factor=backoff_factor,
|
141
|
+
default=default,
|
142
|
+
timeout=timeout,
|
143
|
+
timing=timing,
|
144
|
+
clear_messages=clear_messages,
|
145
|
+
return_branch=return_branch,
|
146
|
+
images=images,
|
147
|
+
**kwargs,
|
148
|
+
)
|
149
|
+
|
150
|
+
async def direct(
|
151
|
+
self,
|
152
|
+
*,
|
153
|
+
instruction=None,
|
154
|
+
context=None,
|
155
|
+
form=None,
|
156
|
+
tools=None,
|
157
|
+
reason: bool = False,
|
158
|
+
predict: bool = False,
|
159
|
+
score=None,
|
160
|
+
select=None,
|
161
|
+
plan=None,
|
162
|
+
allow_action: bool = False,
|
163
|
+
allow_extension: bool = False,
|
164
|
+
max_extension: int = None,
|
165
|
+
confidence=None,
|
166
|
+
score_num_digits=None,
|
167
|
+
score_range=None,
|
168
|
+
select_choices=None,
|
169
|
+
plan_num_step=None,
|
170
|
+
predict_num_sentences=None,
|
171
|
+
imodel=None,
|
172
|
+
system=None,
|
173
|
+
rulebook=None,
|
174
|
+
directive=None,
|
175
|
+
images=None,
|
176
|
+
image_path=None,
|
177
|
+
verbose=False,
|
178
|
+
**kwargs,
|
179
|
+
):
|
180
|
+
"""
|
181
|
+
Asynchronously directs the operation based on the provided parameters.
|
182
|
+
|
183
|
+
Args:
|
184
|
+
instruction (str, optional): Instruction message.
|
185
|
+
context (Any, optional): Context to perform the instruction on.
|
186
|
+
form (Form, optional): Form data.
|
187
|
+
tools (Any, optional): Tools to use.
|
188
|
+
reason (bool, optional): Flag indicating if reason should be included.
|
189
|
+
predict (bool, optional): Flag indicating if prediction should be included.
|
190
|
+
score (Any, optional): Score parameters.
|
191
|
+
select (Any, optional): Select parameters.
|
192
|
+
plan (Any, optional): Plan parameters.
|
193
|
+
allow_action (bool, optional): Flag indicating if action should be allowed.
|
194
|
+
allow_extension (bool, optional): Flag indicating if extension should be allowed.
|
195
|
+
max_extension (int, optional): Maximum extension value.
|
196
|
+
confidence (Any, optional): Confidence parameters.
|
197
|
+
score_num_digits (int, optional): Number of digits for score.
|
198
|
+
score_range (tuple, optional): Range for score.
|
199
|
+
select_choices (list, optional): Choices for selection.
|
200
|
+
plan_num_step (int, optional): Number of steps for plan.
|
201
|
+
predict_num_sentences (int, optional): Number of sentences for prediction.
|
202
|
+
imodel (iModel, optional): Optionally swappable iModel for the commands.
|
203
|
+
system (str, optional): Optionally swap the system message.
|
204
|
+
rulebook (Any, optional): The rulebook to use for validation.
|
205
|
+
directive (str, optional): Directive for the operation.
|
206
|
+
**kwargs: Additional keyword arguments.
|
207
|
+
|
208
|
+
Returns:
|
209
|
+
Any: The processed response.
|
210
|
+
|
211
|
+
Examples:
|
212
|
+
>>> result = await self.direct(instruction="Process data", context={"data": "example"})
|
213
|
+
>>> print(result)
|
214
|
+
"""
|
215
|
+
if system:
|
216
|
+
self.add_message(system=system)
|
217
|
+
|
218
|
+
if not images and image_path:
|
219
|
+
from lionagi.libs import ImageUtil
|
220
|
+
|
221
|
+
images = ImageUtil.read_image_to_base64(image_path)
|
222
|
+
|
223
|
+
_directive = Unit(self, imodel=imodel, rulebook=rulebook, verbose=verbose)
|
224
|
+
|
225
|
+
idx = len(self.progress)
|
226
|
+
if directive and isinstance(directive, str):
|
227
|
+
form = await _directive.direct(
|
228
|
+
directive=directive,
|
229
|
+
instruction=instruction,
|
230
|
+
context=context,
|
231
|
+
tools=tools,
|
232
|
+
reason=reason,
|
233
|
+
confidence=confidence,
|
234
|
+
images=images,
|
235
|
+
**kwargs,
|
236
|
+
)
|
237
|
+
|
238
|
+
action_responses = [
|
239
|
+
i for i in self.messages[idx:] if isinstance(i, ActionResponse)
|
240
|
+
]
|
241
|
+
if len(action_responses) > 0:
|
242
|
+
_dict = {
|
243
|
+
f"action_{idx}": i.content["action_response"]
|
244
|
+
for idx, i in enumerate(action_responses)
|
245
|
+
}
|
246
|
+
if not hasattr(form, "action_response"):
|
247
|
+
form.append_to_request("action_response", {})
|
248
|
+
form.action_response.update(_dict)
|
249
|
+
|
250
|
+
return form
|
251
|
+
|
252
|
+
form = await _directive.direct(
|
253
|
+
instruction=instruction,
|
254
|
+
context=context,
|
255
|
+
form=form,
|
256
|
+
tools=tools,
|
257
|
+
reason=reason,
|
258
|
+
predict=predict,
|
259
|
+
score=score,
|
260
|
+
select=select,
|
261
|
+
plan=plan,
|
262
|
+
allow_action=allow_action,
|
263
|
+
allow_extension=allow_extension,
|
264
|
+
max_extension=max_extension,
|
265
|
+
confidence=confidence,
|
266
|
+
score_num_digits=score_num_digits,
|
267
|
+
score_range=score_range,
|
268
|
+
select_choices=select_choices,
|
269
|
+
plan_num_step=plan_num_step,
|
270
|
+
predict_num_sentences=predict_num_sentences,
|
271
|
+
images=images,
|
272
|
+
**kwargs,
|
273
|
+
)
|
274
|
+
|
275
|
+
action_responses = [
|
276
|
+
i for i in self.messages[idx:] if isinstance(i, ActionResponse)
|
277
|
+
]
|
278
|
+
if len(action_responses) > 0:
|
279
|
+
_dict = {
|
280
|
+
f"action_{idx}": i.content["action_response"]
|
281
|
+
for idx, i in enumerate(action_responses)
|
282
|
+
}
|
283
|
+
if not hasattr(form, "action_response"):
|
284
|
+
form.append_to_request("action_response", {})
|
285
|
+
form.action_response.update(_dict)
|
286
|
+
|
287
|
+
return form
|