lionagi 0.1.2__py3-none-any.whl → 0.2.1__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.
Files changed (268) hide show
  1. lionagi/__init__.py +60 -5
  2. lionagi/core/__init__.py +0 -25
  3. lionagi/core/_setting/_setting.py +59 -0
  4. lionagi/core/action/__init__.py +14 -0
  5. lionagi/core/action/function_calling.py +136 -0
  6. lionagi/core/action/manual.py +1 -0
  7. lionagi/core/action/node.py +109 -0
  8. lionagi/core/action/tool.py +114 -0
  9. lionagi/core/action/tool_manager.py +356 -0
  10. lionagi/core/agent/base_agent.py +27 -13
  11. lionagi/core/agent/eval/evaluator.py +1 -0
  12. lionagi/core/agent/eval/vote.py +40 -0
  13. lionagi/core/agent/learn/learner.py +59 -0
  14. lionagi/core/agent/plan/unit_template.py +1 -0
  15. lionagi/core/collections/__init__.py +17 -0
  16. lionagi/core/{generic/data_logger.py → collections/_logger.py} +69 -55
  17. lionagi/core/collections/abc/__init__.py +53 -0
  18. lionagi/core/collections/abc/component.py +615 -0
  19. lionagi/core/collections/abc/concepts.py +297 -0
  20. lionagi/core/collections/abc/exceptions.py +150 -0
  21. lionagi/core/collections/abc/util.py +45 -0
  22. lionagi/core/collections/exchange.py +161 -0
  23. lionagi/core/collections/flow.py +426 -0
  24. lionagi/core/collections/model.py +419 -0
  25. lionagi/core/collections/pile.py +913 -0
  26. lionagi/core/collections/progression.py +236 -0
  27. lionagi/core/collections/util.py +64 -0
  28. lionagi/core/director/direct.py +314 -0
  29. lionagi/core/director/director.py +2 -0
  30. lionagi/core/{execute/branch_executor.py → engine/branch_engine.py} +134 -97
  31. lionagi/core/{execute/instruction_map_executor.py → engine/instruction_map_engine.py} +80 -55
  32. lionagi/{experimental/directive/evaluator → core/engine}/script_engine.py +17 -1
  33. lionagi/core/executor/base_executor.py +90 -0
  34. lionagi/core/{execute/structure_executor.py → executor/graph_executor.py} +62 -66
  35. lionagi/core/{execute → executor}/neo4j_executor.py +70 -67
  36. lionagi/core/generic/__init__.py +3 -33
  37. lionagi/core/generic/edge.py +29 -79
  38. lionagi/core/generic/edge_condition.py +16 -0
  39. lionagi/core/generic/graph.py +236 -0
  40. lionagi/core/generic/hyperedge.py +1 -0
  41. lionagi/core/generic/node.py +156 -221
  42. lionagi/core/generic/tree.py +48 -0
  43. lionagi/core/generic/tree_node.py +79 -0
  44. lionagi/core/mail/__init__.py +12 -0
  45. lionagi/core/mail/mail.py +25 -0
  46. lionagi/core/mail/mail_manager.py +139 -58
  47. lionagi/core/mail/package.py +45 -0
  48. lionagi/core/mail/start_mail.py +36 -0
  49. lionagi/core/message/__init__.py +19 -0
  50. lionagi/core/message/action_request.py +133 -0
  51. lionagi/core/message/action_response.py +135 -0
  52. lionagi/core/message/assistant_response.py +95 -0
  53. lionagi/core/message/instruction.py +234 -0
  54. lionagi/core/message/message.py +101 -0
  55. lionagi/core/message/system.py +86 -0
  56. lionagi/core/message/util.py +283 -0
  57. lionagi/core/report/__init__.py +4 -0
  58. lionagi/core/report/base.py +217 -0
  59. lionagi/core/report/form.py +231 -0
  60. lionagi/core/report/report.py +166 -0
  61. lionagi/core/report/util.py +28 -0
  62. lionagi/core/rule/_default.py +16 -0
  63. lionagi/core/rule/action.py +99 -0
  64. lionagi/core/rule/base.py +238 -0
  65. lionagi/core/rule/boolean.py +56 -0
  66. lionagi/core/rule/choice.py +47 -0
  67. lionagi/core/rule/mapping.py +96 -0
  68. lionagi/core/rule/number.py +71 -0
  69. lionagi/core/rule/rulebook.py +109 -0
  70. lionagi/core/rule/string.py +52 -0
  71. lionagi/core/rule/util.py +35 -0
  72. lionagi/core/session/branch.py +431 -0
  73. lionagi/core/session/directive_mixin.py +287 -0
  74. lionagi/core/session/session.py +229 -903
  75. lionagi/core/structure/__init__.py +1 -0
  76. lionagi/core/structure/chain.py +1 -0
  77. lionagi/core/structure/forest.py +1 -0
  78. lionagi/core/structure/graph.py +1 -0
  79. lionagi/core/structure/tree.py +1 -0
  80. lionagi/core/unit/__init__.py +5 -0
  81. lionagi/core/unit/parallel_unit.py +245 -0
  82. lionagi/core/unit/template/action.py +81 -0
  83. lionagi/core/unit/template/base.py +51 -0
  84. lionagi/core/unit/template/plan.py +84 -0
  85. lionagi/core/unit/template/predict.py +109 -0
  86. lionagi/core/unit/template/score.py +124 -0
  87. lionagi/core/unit/template/select.py +104 -0
  88. lionagi/core/unit/unit.py +362 -0
  89. lionagi/core/unit/unit_form.py +305 -0
  90. lionagi/core/unit/unit_mixin.py +1168 -0
  91. lionagi/core/unit/util.py +71 -0
  92. lionagi/core/validator/validator.py +364 -0
  93. lionagi/core/work/work.py +76 -0
  94. lionagi/core/work/work_function.py +101 -0
  95. lionagi/core/work/work_queue.py +103 -0
  96. lionagi/core/work/worker.py +258 -0
  97. lionagi/core/work/worklog.py +120 -0
  98. lionagi/experimental/compressor/base.py +46 -0
  99. lionagi/experimental/compressor/llm_compressor.py +247 -0
  100. lionagi/experimental/compressor/llm_summarizer.py +61 -0
  101. lionagi/experimental/compressor/util.py +70 -0
  102. lionagi/experimental/directive/__init__.py +19 -0
  103. lionagi/experimental/directive/parser/base_parser.py +69 -2
  104. lionagi/experimental/directive/{template_ → template}/base_template.py +17 -1
  105. lionagi/{libs/ln_tokenizer.py → experimental/directive/tokenizer.py} +16 -0
  106. lionagi/experimental/{directive/evaluator → evaluator}/ast_evaluator.py +16 -0
  107. lionagi/experimental/{directive/evaluator → evaluator}/base_evaluator.py +16 -0
  108. lionagi/experimental/knowledge/base.py +10 -0
  109. lionagi/experimental/memory/__init__.py +0 -0
  110. lionagi/experimental/strategies/__init__.py +0 -0
  111. lionagi/experimental/strategies/base.py +1 -0
  112. lionagi/integrations/bridge/langchain_/documents.py +4 -0
  113. lionagi/integrations/bridge/llamaindex_/index.py +30 -0
  114. lionagi/integrations/bridge/llamaindex_/llama_index_bridge.py +6 -0
  115. lionagi/integrations/chunker/chunk.py +161 -24
  116. lionagi/integrations/config/oai_configs.py +34 -3
  117. lionagi/integrations/config/openrouter_configs.py +14 -2
  118. lionagi/integrations/loader/load.py +122 -21
  119. lionagi/integrations/loader/load_util.py +6 -77
  120. lionagi/integrations/provider/_mapping.py +46 -0
  121. lionagi/integrations/provider/litellm.py +2 -1
  122. lionagi/integrations/provider/mlx_service.py +16 -9
  123. lionagi/integrations/provider/oai.py +91 -4
  124. lionagi/integrations/provider/ollama.py +6 -5
  125. lionagi/integrations/provider/openrouter.py +115 -8
  126. lionagi/integrations/provider/services.py +2 -2
  127. lionagi/integrations/provider/transformers.py +18 -22
  128. lionagi/integrations/storage/__init__.py +3 -3
  129. lionagi/integrations/storage/neo4j.py +52 -60
  130. lionagi/integrations/storage/storage_util.py +44 -46
  131. lionagi/integrations/storage/structure_excel.py +43 -26
  132. lionagi/integrations/storage/to_excel.py +11 -4
  133. lionagi/libs/__init__.py +22 -1
  134. lionagi/libs/ln_api.py +75 -20
  135. lionagi/libs/ln_context.py +37 -0
  136. lionagi/libs/ln_convert.py +21 -9
  137. lionagi/libs/ln_func_call.py +69 -28
  138. lionagi/libs/ln_image.py +107 -0
  139. lionagi/libs/ln_nested.py +26 -11
  140. lionagi/libs/ln_parse.py +82 -23
  141. lionagi/libs/ln_queue.py +16 -0
  142. lionagi/libs/ln_tokenize.py +164 -0
  143. lionagi/libs/ln_validate.py +16 -0
  144. lionagi/libs/special_tokens.py +172 -0
  145. lionagi/libs/sys_util.py +95 -24
  146. lionagi/lions/coder/code_form.py +13 -0
  147. lionagi/lions/coder/coder.py +50 -3
  148. lionagi/lions/coder/util.py +30 -25
  149. lionagi/tests/libs/test_func_call.py +23 -21
  150. lionagi/tests/libs/test_nested.py +36 -21
  151. lionagi/tests/libs/test_parse.py +1 -1
  152. lionagi/tests/test_core/collections/__init__.py +0 -0
  153. lionagi/tests/test_core/collections/test_component.py +206 -0
  154. lionagi/tests/test_core/collections/test_exchange.py +138 -0
  155. lionagi/tests/test_core/collections/test_flow.py +145 -0
  156. lionagi/tests/test_core/collections/test_pile.py +171 -0
  157. lionagi/tests/test_core/collections/test_progression.py +129 -0
  158. lionagi/tests/test_core/generic/test_edge.py +67 -0
  159. lionagi/tests/test_core/generic/test_graph.py +96 -0
  160. lionagi/tests/test_core/generic/test_node.py +106 -0
  161. lionagi/tests/test_core/generic/test_tree_node.py +73 -0
  162. lionagi/tests/test_core/test_branch.py +115 -294
  163. lionagi/tests/test_core/test_form.py +46 -0
  164. lionagi/tests/test_core/test_report.py +105 -0
  165. lionagi/tests/test_core/test_validator.py +111 -0
  166. lionagi/version.py +1 -1
  167. lionagi-0.2.1.dist-info/LICENSE +202 -0
  168. lionagi-0.2.1.dist-info/METADATA +272 -0
  169. lionagi-0.2.1.dist-info/RECORD +240 -0
  170. lionagi/core/branch/base.py +0 -653
  171. lionagi/core/branch/branch.py +0 -474
  172. lionagi/core/branch/flow_mixin.py +0 -96
  173. lionagi/core/branch/util.py +0 -323
  174. lionagi/core/direct/__init__.py +0 -19
  175. lionagi/core/direct/cot.py +0 -123
  176. lionagi/core/direct/plan.py +0 -164
  177. lionagi/core/direct/predict.py +0 -166
  178. lionagi/core/direct/react.py +0 -171
  179. lionagi/core/direct/score.py +0 -279
  180. lionagi/core/direct/select.py +0 -170
  181. lionagi/core/direct/sentiment.py +0 -1
  182. lionagi/core/direct/utils.py +0 -110
  183. lionagi/core/direct/vote.py +0 -64
  184. lionagi/core/execute/base_executor.py +0 -47
  185. lionagi/core/flow/baseflow.py +0 -23
  186. lionagi/core/flow/monoflow/ReAct.py +0 -240
  187. lionagi/core/flow/monoflow/__init__.py +0 -9
  188. lionagi/core/flow/monoflow/chat.py +0 -95
  189. lionagi/core/flow/monoflow/chat_mixin.py +0 -253
  190. lionagi/core/flow/monoflow/followup.py +0 -215
  191. lionagi/core/flow/polyflow/__init__.py +0 -1
  192. lionagi/core/flow/polyflow/chat.py +0 -251
  193. lionagi/core/form/action_form.py +0 -26
  194. lionagi/core/form/field_validator.py +0 -287
  195. lionagi/core/form/form.py +0 -302
  196. lionagi/core/form/mixin.py +0 -214
  197. lionagi/core/form/scored_form.py +0 -13
  198. lionagi/core/generic/action.py +0 -26
  199. lionagi/core/generic/component.py +0 -532
  200. lionagi/core/generic/condition.py +0 -46
  201. lionagi/core/generic/mail.py +0 -90
  202. lionagi/core/generic/mailbox.py +0 -36
  203. lionagi/core/generic/relation.py +0 -70
  204. lionagi/core/generic/signal.py +0 -22
  205. lionagi/core/generic/structure.py +0 -362
  206. lionagi/core/generic/transfer.py +0 -20
  207. lionagi/core/generic/work.py +0 -40
  208. lionagi/core/graph/graph.py +0 -126
  209. lionagi/core/graph/tree.py +0 -190
  210. lionagi/core/mail/schema.py +0 -63
  211. lionagi/core/messages/schema.py +0 -325
  212. lionagi/core/tool/__init__.py +0 -5
  213. lionagi/core/tool/tool.py +0 -28
  214. lionagi/core/tool/tool_manager.py +0 -283
  215. lionagi/experimental/report/form.py +0 -64
  216. lionagi/experimental/report/report.py +0 -138
  217. lionagi/experimental/report/util.py +0 -47
  218. lionagi/experimental/tool/function_calling.py +0 -43
  219. lionagi/experimental/tool/manual.py +0 -66
  220. lionagi/experimental/tool/schema.py +0 -59
  221. lionagi/experimental/tool/tool_manager.py +0 -138
  222. lionagi/experimental/tool/util.py +0 -16
  223. lionagi/experimental/validator/rule.py +0 -139
  224. lionagi/experimental/validator/validator.py +0 -56
  225. lionagi/experimental/work/__init__.py +0 -10
  226. lionagi/experimental/work/async_queue.py +0 -54
  227. lionagi/experimental/work/schema.py +0 -73
  228. lionagi/experimental/work/work_function.py +0 -67
  229. lionagi/experimental/work/worker.py +0 -56
  230. lionagi/experimental/work2/form.py +0 -371
  231. lionagi/experimental/work2/report.py +0 -289
  232. lionagi/experimental/work2/schema.py +0 -30
  233. lionagi/experimental/work2/tests.py +0 -72
  234. lionagi/experimental/work2/work_function.py +0 -89
  235. lionagi/experimental/work2/worker.py +0 -12
  236. lionagi/integrations/bridge/llamaindex_/get_index.py +0 -294
  237. lionagi/tests/test_core/generic/test_component.py +0 -89
  238. lionagi/tests/test_core/test_base_branch.py +0 -426
  239. lionagi/tests/test_core/test_chat_flow.py +0 -63
  240. lionagi/tests/test_core/test_mail_manager.py +0 -75
  241. lionagi/tests/test_core/test_prompts.py +0 -51
  242. lionagi/tests/test_core/test_session.py +0 -254
  243. lionagi/tests/test_core/test_session_base_util.py +0 -313
  244. lionagi/tests/test_core/test_tool_manager.py +0 -95
  245. lionagi-0.1.2.dist-info/LICENSE +0 -9
  246. lionagi-0.1.2.dist-info/METADATA +0 -174
  247. lionagi-0.1.2.dist-info/RECORD +0 -206
  248. /lionagi/core/{branch → _setting}/__init__.py +0 -0
  249. /lionagi/core/{execute → agent/eval}/__init__.py +0 -0
  250. /lionagi/core/{flow → agent/learn}/__init__.py +0 -0
  251. /lionagi/core/{form → agent/plan}/__init__.py +0 -0
  252. /lionagi/core/{branch/executable_branch.py → agent/plan/plan.py} +0 -0
  253. /lionagi/core/{graph → director}/__init__.py +0 -0
  254. /lionagi/core/{messages → engine}/__init__.py +0 -0
  255. /lionagi/{experimental/directive/evaluator → core/engine}/sandbox_.py +0 -0
  256. /lionagi/{experimental/directive/evaluator → core/executor}/__init__.py +0 -0
  257. /lionagi/{experimental/directive/template_ → core/rule}/__init__.py +0 -0
  258. /lionagi/{experimental/report → core/unit/template}/__init__.py +0 -0
  259. /lionagi/{experimental/tool → core/validator}/__init__.py +0 -0
  260. /lionagi/{experimental/validator → core/work}/__init__.py +0 -0
  261. /lionagi/experimental/{work2 → compressor}/__init__.py +0 -0
  262. /lionagi/{core/flow/mono_chat_mixin.py → experimental/directive/template/__init__.py} +0 -0
  263. /lionagi/experimental/directive/{schema.py → template/schema.py} +0 -0
  264. /lionagi/experimental/{work2/util.py → evaluator/__init__.py} +0 -0
  265. /lionagi/experimental/{work2/work.py → knowledge/__init__.py} +0 -0
  266. /lionagi/{tests/libs/test_async.py → experimental/knowledge/graph.py} +0 -0
  267. {lionagi-0.1.2.dist-info → lionagi-0.2.1.dist-info}/WHEEL +0 -0
  268. {lionagi-0.1.2.dist-info → lionagi-0.2.1.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,305 @@
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
+ from enum import Enum
18
+ from lionagi.libs.ln_convert import to_str, to_dict
19
+ from lionagi.core.collections.abc import Field
20
+ from .template.base import BaseUnitForm
21
+
22
+
23
+ class UnitForm(BaseUnitForm):
24
+ """
25
+ Form for managing unit directives and outputs.
26
+
27
+ Attributes:
28
+ actions (dict|None): Actions to take based on the context and instruction.
29
+ action_required (bool|None): Set to True if actions are provided, else False.
30
+ answer (str|None): Answer to the questions asked.
31
+ extension_required (bool|None): Set to True if more steps are needed.
32
+ prediction (str|None): Likely prediction based on context and instruction.
33
+ plan (dict|str|None): Step-by-step plan.
34
+ next_steps (dict|str|None): Ideas on next actions to take.
35
+ score (float|None): Numeric performance score.
36
+ reflection (str|None): Self-reflection on reasoning and performance.
37
+ selection (Enum|str|list|None): A single item from the choices.
38
+ tool_schema (list|dict|None): The list of tools available for use.
39
+ assignment (str): Default assignment task description.
40
+ """
41
+
42
+ actions: dict | None = Field(
43
+ None,
44
+ description=(
45
+ "Actions to take based on the context and instruction. "
46
+ "Format: {action_n: {function: ..., arguments: {param1: ..., "
47
+ "param2: ...}}}. Leave blank if no actions are needed. "
48
+ "Must use provided functions and parameters, DO NOT MAKE UP NAMES!!! "
49
+ "Flag `action_required` as True if filled. When providing parameters, "
50
+ "you must follow the provided type and format. If the parameter is a "
51
+ "number, you should provide a number like 1, 23, or 1.1 if float is "
52
+ "allowed."
53
+ ),
54
+ examples=["{action_1: {function: 'add', arguments: {num1: 1, num2: 2}}}"],
55
+ )
56
+
57
+ action_required: bool | None = Field(
58
+ None,
59
+ description="Set to True if you provide actions, or provide actions if True.",
60
+ examples=[True, False],
61
+ )
62
+
63
+ answer: str | None = Field(
64
+ None,
65
+ description=(
66
+ "Adhere to the prompt and all user instructions. Provide the answer "
67
+ "for the task. if actions are required at this step, set "
68
+ "`action_required` to True and write only `PLEASE_ACTION` to the answer_field."
69
+ "Additionally, if extensions are allowed and needed at this step to provide a"
70
+ " high-quality, accurate answer, set extension_required to True and"
71
+ "you will have another chance to provide the answer after the actions are done.",
72
+ ),
73
+ )
74
+
75
+ extension_required: bool | None = Field(
76
+ None,
77
+ description=(
78
+ "Set to True if more steps are needed to provide an accurate answer. "
79
+ "If True, additional rounds are allowed."
80
+ ),
81
+ examples=[True, False],
82
+ )
83
+
84
+ prediction: None | str = Field(
85
+ None,
86
+ description="Provide the likely prediction based on context and instruction.",
87
+ )
88
+
89
+ plan: dict | str | None = Field(
90
+ None,
91
+ description=(
92
+ "Provide a step-by-step plan. Format: {step_n: {plan: ..., reason: ...}}. "
93
+ "Achieve the final answer at the last step. Set `extend_required` to True "
94
+ "if plan requires more steps."
95
+ ),
96
+ examples=["{step_1: {plan: '...', reason: '...'}}"],
97
+ )
98
+
99
+ next_steps: dict | str | None = Field(
100
+ None,
101
+ description=(
102
+ "Brainstorm ideas on next actions to take. Format: {next_step_n: {plan: "
103
+ "..., reason: ...}}. Next_step is about anticipating future actions, "
104
+ "but it does not have to be in a sequential format. Set `extend_required` "
105
+ "to True if more steps are needed."
106
+ ),
107
+ examples=["{next_step_1: {plan: '...', reason: '...'}}"],
108
+ )
109
+
110
+ score: float | None = Field(
111
+ None,
112
+ description=(
113
+ "A numeric score. Higher is better. If not otherwise instructed, "
114
+ "fill this field with your own performance rating. Try hard and be "
115
+ "self-critical."
116
+ ),
117
+ examples=[0.2, 5, 2.7],
118
+ )
119
+
120
+ reflection: str | None = Field(
121
+ None,
122
+ description=(
123
+ "Reason your own reasoning. Create specific items on how/where/what "
124
+ "you could improve to better achieve the task, or can the problem be "
125
+ "solved in a different and better way. If you can think of a better "
126
+ "solution, please provide it and fill the necessary fields in "
127
+ "`action_required`, `extension_required`, `next_steps` if appropriate."
128
+ ),
129
+ )
130
+
131
+ selection: Enum | str | list | None = Field(
132
+ None, description="a single item from the choices."
133
+ )
134
+
135
+ tool_schema: list | dict | None = Field(
136
+ None, description="The list of tools available for using."
137
+ )
138
+
139
+ assignment: str = Field("task -> answer")
140
+
141
+ is_extension: bool = Field(False)
142
+
143
+ def __init__(
144
+ self,
145
+ instruction=None,
146
+ context=None,
147
+ reason: bool = True,
148
+ predict: bool = False,
149
+ score=True,
150
+ select=None,
151
+ plan=None,
152
+ brainstorm=None,
153
+ reflect=None,
154
+ tool_schema=None,
155
+ allow_action: bool = False,
156
+ allow_extension: bool = False,
157
+ max_extension: int = None,
158
+ confidence=None,
159
+ score_num_digits=None,
160
+ score_range=None,
161
+ select_choices=None,
162
+ plan_num_step=None,
163
+ predict_num_sentences=None,
164
+ **kwargs,
165
+ ):
166
+ """
167
+ Initialize the UnitForm with various parameters and settings.
168
+
169
+ Args:
170
+ instruction (str|None): Additional instruction.
171
+ context (str|None): Additional context.
172
+ reason (bool): Flag to include reasoning.
173
+ predict (bool): Flag to include prediction.
174
+ score (bool): Flag to include score.
175
+ select (Enum|str|list|None): Selection choices.
176
+ plan (dict|str|None): Step-by-step plan.
177
+ brainstorm (bool): Flag to include brainstorming next steps.
178
+ reflect (bool): Flag to include self-reflection.
179
+ tool_schema (list|dict|None): Schema of available tools.
180
+ allow_action (bool): Allow actions to be added.
181
+ allow_extension (bool): Allow extension for more steps.
182
+ max_extension (int|None): Maximum number of extensions allowed.
183
+ confidence (bool|None): Flag to include confidence score.
184
+ score_num_digits (int|None): Number of decimal places for the score.
185
+ score_range (list|None): Range for the score.
186
+ select_choices (list|None): Choices for selection.
187
+ plan_num_step (int|None): Number of steps in the plan.
188
+ predict_num_sentences (int|None): Number of sentences for prediction.
189
+ **kwargs: Additional keyword arguments.
190
+ """
191
+ super().__init__(**kwargs)
192
+
193
+ self.task = (
194
+ f"Follow the prompt and provide the necessary output.\n"
195
+ f"- Additional instruction: {to_str(instruction or 'N/A')}\n"
196
+ f"- Additional context: {to_str(context or 'N/A')}\n"
197
+ )
198
+
199
+ if reason:
200
+ self.append_to_request("reason")
201
+
202
+ if allow_action:
203
+ self.append_to_request("actions, action_required, reason")
204
+ self.task += "- Reason and prepare actions with GIVEN TOOLS ONLY.\n"
205
+
206
+ if allow_extension:
207
+ self.append_to_request("extension_required")
208
+ self.task += (
209
+ f"- Allow auto-extension up to another {max_extension} rounds.\n"
210
+ )
211
+
212
+ if tool_schema:
213
+ self.append_to_input("tool_schema")
214
+ self.tool_schema = tool_schema
215
+
216
+ if brainstorm:
217
+ self.append_to_request("next_steps, extension_required")
218
+ self.task += "- Explore ideas on next actions to take.\n"
219
+
220
+ if plan:
221
+ plan_num_step = plan_num_step or 3
222
+ max_extension = max_extension or plan_num_step
223
+ allow_extension = True
224
+ self.append_to_request("plan, extension_required")
225
+ self.task += (
226
+ f"- Generate a {plan_num_step}-step plan based on the context.\n"
227
+ )
228
+
229
+ if predict:
230
+ self.append_to_request("prediction")
231
+ self.task += (
232
+ f"- Predict the next {predict_num_sentences or 1} sentence(s).\n"
233
+ )
234
+
235
+ if select:
236
+ self.append_to_request("selection")
237
+ self.task += (
238
+ f"- Select 1 item from the provided choices: {select_choices}.\n"
239
+ )
240
+
241
+ if confidence:
242
+ self.append_to_request("confidence_score")
243
+
244
+ if score:
245
+ self.append_to_request("score")
246
+
247
+ score_range = score_range or [0, 10]
248
+ score_num_digits = score_num_digits or 0
249
+
250
+ self.validation_kwargs["score"] = {
251
+ "upper_bound": score_range[1],
252
+ "lower_bound": score_range[0],
253
+ "num_type": int if score_num_digits == 0 else float,
254
+ "precision": score_num_digits if score_num_digits != 0 else None,
255
+ }
256
+
257
+ self.task += (
258
+ f"- Give a numeric score in [{score_range[0]}, {score_range[1]}] "
259
+ f"and precision of {score_num_digits or 0} decimal places.\n"
260
+ )
261
+
262
+ if reflect:
263
+ self.append_to_request("reflection")
264
+
265
+ def display(self):
266
+ """
267
+ Display the current form fields and values in a user-friendly format.
268
+ """
269
+ fields = self.work_fields.copy()
270
+
271
+ if "task" in fields and len(str(fields["task"])) > 2000:
272
+ fields["task"] = fields["task"][:2000] + "..."
273
+
274
+ if "tool_schema" in fields:
275
+ tools = to_dict(fields["tool_schema"])["tools"]
276
+ fields["available_tools"] = [i["function"]["name"] for i in tools]
277
+ fields.pop("tool_schema")
278
+
279
+ if "actions" in fields:
280
+ a = ""
281
+ idx = 0
282
+ for _, v in fields["actions"].items():
283
+ a += (
284
+ f"\n \n{idx+1}. **{v['function']}**"
285
+ f"({', '.join([f'{k}: {v}' for k, v in v['arguments'].items()])}), "
286
+ )
287
+ idx += 1
288
+ fields["actions"] = a[:-2]
289
+
290
+ if "action_response" in fields:
291
+ a = ""
292
+ idx = 0
293
+ for _, v in fields["action_response"].items():
294
+ a += (
295
+ f"\n \n{idx+1}. **{v['function']}**"
296
+ f"({', '.join([f'{k}: {v}' for k, v in v['arguments'].items()])})"
297
+ )
298
+ if len(str(v["output"])) > 30:
299
+ a += f" \n \n {v['output']}, "
300
+ else:
301
+ a += f" = {v['output']}, "
302
+ idx += 1
303
+ fields["action_response"] = a[:-2]
304
+
305
+ super().display(fields=fields)