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.
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 +74 -0
  94. lionagi/core/work/work_function.py +92 -0
  95. lionagi/core/work/work_queue.py +81 -0
  96. lionagi/core/work/worker.py +195 -0
  97. lionagi/core/work/worklog.py +124 -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.0.dist-info/LICENSE +202 -0
  168. lionagi-0.2.0.dist-info/METADATA +272 -0
  169. lionagi-0.2.0.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.0.dist-info}/WHEEL +0 -0
  268. {lionagi-0.1.2.dist-info → lionagi-0.2.0.dist-info}/top_level.txt +0 -0
@@ -1,166 +0,0 @@
1
- """
2
- This module contains the PredictTemplate class for predicting the next sentence(s) based on a given sentence.
3
-
4
- The PredictTemplate class is a subclass of ScoredTemplate and provides functionality for predicting the next sentence(s)
5
- using a language model. It includes fields for the input sentence, number of sentences to predict, predicted answer,
6
- confidence score, and reason for the prediction.
7
- """
8
-
9
- from lionagi.libs import func_call
10
- from lionagi.integrations.bridge.pydantic_.pydantic_bridge import Field
11
-
12
- from lionagi.core.form.scored_form import ScoredForm
13
- from lionagi.core.branch.branch import Branch
14
-
15
-
16
- class PredictTemplate(ScoredForm):
17
- """
18
- A class for predicting the next sentence(s) based on a given sentence.
19
-
20
- Attributes:
21
- template_name (str): The name of the predict template (default: "default_predict_template").
22
- sentence (str | list | dict): The given sentence(s) to predict.
23
- num_sentences (int): The number of sentences to predict.
24
- answer (str | list): The predicted sentence(s).
25
- signature (str): The signature indicating the input and output fields (default: "sentence -> answer").
26
-
27
- Methods:
28
- __init__(self, sentence=None, num_sentences=None, confidence_score=False, reason=False, **kwargs):
29
- Initializes a new instance of the PredictTemplate class.
30
-
31
- async predict(sentence=None, num_sentences=1, confidence_score=False, reason=False, retries=2,
32
- delay=0.5, backoff_factor=2, default_value=None, timeout=None, branch_name=None,
33
- system=None, messages=None, service=None, sender=None, llmconfig=None, tools=None,
34
- datalogger=None, persist_path=None, tool_manager=None, **kwargs) -> PredictTemplate:
35
- Predicts the next sentence(s) based on the given sentence using a language model.
36
- """
37
-
38
- template_name: str = "default_predict"
39
- sentence: str | list | dict = Field(
40
- default_factory=str, description="the given sentence(s) to predict"
41
- )
42
- num_sentences: int = Field(
43
- default_factory=int, description="the number of sentences to predict"
44
- )
45
- answer: str | list = Field(
46
- default_factory=str, description="the predicted sentence(s) or desired output"
47
- )
48
- signature: str = "sentence -> answer"
49
-
50
- def __init__(
51
- self,
52
- sentence=None,
53
- instruction=None,
54
- num_sentences=1,
55
- confidence_score=False,
56
- reason=False,
57
- **kwargs,
58
- ):
59
- """
60
- Initializes a new instance of the PredictTemplate class.
61
-
62
- Args:
63
- sentence (Optional[str | list | dict]): The given sentence(s) to predict.
64
- num_sentences (Optional[int]): The number of sentences to predict.
65
- confidence_score (bool): Whether to include the confidence score in the output (default: False).
66
- reason (bool): Whether to include the reason for the prediction in the output (default: False).
67
- **kwargs: Additional keyword arguments.
68
- """
69
- super().__init__(**kwargs)
70
-
71
- self.sentence = sentence or ""
72
- self.num_sentences = num_sentences
73
- self.task = f"follow instruction to predict the next {self.num_sentences} sentence(s). Instruction: {instruction}."
74
-
75
- if reason:
76
- self.output_fields.append("reason")
77
-
78
- if confidence_score:
79
- self.output_fields.append("confidence_score")
80
-
81
-
82
- async def predict(
83
- sentence=None,
84
- num_sentences=1,
85
- confidence_score=False,
86
- instruction=None,
87
- branch=None,
88
- reason=False,
89
- retries=2,
90
- delay=0.5,
91
- backoff_factor=2,
92
- default_value=None,
93
- timeout=None,
94
- branch_name=None,
95
- system=None,
96
- messages=None,
97
- service=None,
98
- sender=None,
99
- llmconfig=None,
100
- tools=None,
101
- datalogger=None,
102
- persist_path=None,
103
- tool_manager=None,
104
- **kwargs,
105
- ) -> "PredictTemplate":
106
- """
107
- Predicts the next sentence(s) based on the given sentence using a language model.
108
-
109
- Args:
110
- sentence (Optional[str | list | dict]): The given sentence(s) to predict.
111
- num_sentences (int): The number of sentences to predict (default: 1).
112
- confidence_score (bool): Whether to include the confidence score in the output (default: False).
113
- reason (bool): Whether to include the reason for the prediction in the output (default: False).
114
- retries (int): The number of retries for the API call (default: 2).
115
- delay (float): The initial delay between retries in seconds (default: 0.5).
116
- backoff_factor (float): The backoff factor for exponential delay between retries (default: 2).
117
- default_value (Optional[Any]): The default value to return if the API call fails (default: None).
118
- timeout (Optional[float]): The timeout for the API call in seconds (default: None).
119
- branch_name (Optional[str]): The name of the branch to use for prediction.
120
- system (Optional[Any]): The system configuration for the branch.
121
- messages (Optional[Any]): The messages to initialize the branch with.
122
- service (Optional[Any]): The service to use for prediction.
123
- sender (Optional[str]): The sender of the prediction request.
124
- llmconfig (Optional[Any]): The configuration for the language model.
125
- tools (Optional[Any]): The tools to use for prediction.
126
- datalogger (Optional[Any]): The data logger for the branch.
127
- persist_path (Optional[str]): The path to persist the branch data.
128
- tool_manager (Optional[Any]): The tool manager for the branch.
129
- **kwargs: Additional keyword arguments for the API call.
130
-
131
- Returns:
132
- PredictTemplate: The predict template with the predicted sentence(s).
133
- """
134
- branch = branch or Branch(
135
- name=branch_name,
136
- system=system,
137
- messages=messages,
138
- service=service,
139
- sender=sender,
140
- llmconfig=llmconfig,
141
- tools=tools,
142
- datalogger=datalogger,
143
- persist_path=persist_path,
144
- tool_manager=tool_manager,
145
- )
146
-
147
- predict_template = PredictTemplate(
148
- instruction=instruction,
149
- sentence=sentence,
150
- num_sentences=num_sentences,
151
- confidence_score=confidence_score,
152
- reason=reason,
153
- )
154
-
155
- await func_call.rcall(
156
- branch.chat,
157
- form=predict_template,
158
- retries=retries,
159
- delay=delay,
160
- backoff_factor=backoff_factor,
161
- default=default_value,
162
- timeout=timeout,
163
- **kwargs,
164
- )
165
-
166
- return predict_template
@@ -1,171 +0,0 @@
1
- from lionagi.libs import func_call, AsyncUtil
2
-
3
- from lionagi.integrations.bridge.pydantic_.pydantic_bridge import Field
4
- from lionagi.core.form.action_form import ActionForm
5
- from lionagi.core.branch.branch import Branch
6
- from lionagi.core.direct.utils import _process_tools
7
-
8
-
9
- class ReactTemplate(ActionForm):
10
- template_name: str = "default_react"
11
- sentence: str | list | dict | None = Field(
12
- default_factory=str,
13
- description="the given sentence(s) to reason and take actions on",
14
- )
15
-
16
- def __init__(
17
- self,
18
- sentence=None,
19
- instruction=None,
20
- confidence_score=False,
21
- **kwargs,
22
- ):
23
- super().__init__(**kwargs)
24
-
25
- self.sentence = sentence
26
- self.task = f"Think step by step. Perform reasoning and prepare actions with given tools only.Instruction: {instruction}. Absolutely DO NOT MAKE UP FUNCTIONS !!!"
27
-
28
- if confidence_score:
29
- self.output_fields.append("confidence_score")
30
-
31
-
32
- async def _react(
33
- sentence=None,
34
- *,
35
- instruction=None,
36
- branch=None,
37
- confidence_score=False,
38
- retries=2,
39
- delay=0.5,
40
- backoff_factor=2,
41
- default_value=None,
42
- timeout=None,
43
- branch_name=None,
44
- system=None,
45
- messages=None,
46
- service=None,
47
- sender=None,
48
- llmconfig=None,
49
- tools=None,
50
- datalogger=None,
51
- persist_path=None,
52
- tool_manager=None,
53
- return_branch=False,
54
- **kwargs,
55
- ):
56
-
57
- if "temperature" not in kwargs:
58
- kwargs["temperature"] = 0.1
59
-
60
- instruction = instruction or ""
61
-
62
- if branch and tools:
63
- _process_tools(tools, branch)
64
-
65
- branch = branch or Branch(
66
- name=branch_name,
67
- system=system,
68
- messages=messages,
69
- service=service,
70
- sender=sender,
71
- llmconfig=llmconfig,
72
- tools=tools,
73
- datalogger=datalogger,
74
- persist_path=persist_path,
75
- tool_manager=tool_manager,
76
- )
77
-
78
- _template = ReactTemplate(
79
- sentence=sentence,
80
- instruction=instruction,
81
- confidence_score=confidence_score,
82
- )
83
-
84
- await func_call.rcall(
85
- branch.chat,
86
- form=_template,
87
- retries=retries,
88
- delay=delay,
89
- backoff_factor=backoff_factor,
90
- default=default_value,
91
- timeout=timeout,
92
- **kwargs,
93
- )
94
-
95
- if _template.action_needed:
96
- actions = _template.actions
97
- tasks = [branch.tool_manager.invoke(i.values()) for i in actions]
98
- results = await AsyncUtil.execute_tasks(*tasks)
99
-
100
- a = []
101
- for idx, item in enumerate(actions):
102
- res = {
103
- "function": item["function"],
104
- "arguments": item["arguments"],
105
- "output": results[idx],
106
- }
107
- branch.add_message(response=res)
108
- a.append(res)
109
-
110
- _template.__setattr__("action_response", a)
111
-
112
- return (_template, branch) if return_branch else _template
113
-
114
-
115
- async def react(
116
- sentence=None,
117
- *,
118
- instruction=None,
119
- num_instances=1,
120
- branch=None,
121
- confidence_score=False,
122
- retries=2,
123
- delay=0.5,
124
- backoff_factor=2,
125
- default_value=None,
126
- timeout=None,
127
- branch_name=None,
128
- system=None,
129
- messages=None,
130
- service=None,
131
- sender=None,
132
- llmconfig=None,
133
- tools=None,
134
- datalogger=None,
135
- persist_path=None,
136
- tool_manager=None,
137
- return_branch=False,
138
- **kwargs,
139
- ):
140
-
141
- async def _inner(i=0):
142
- return await _react(
143
- sentence=sentence,
144
- instruction=instruction,
145
- num_instances=num_instances,
146
- branch=branch,
147
- confidence_score=confidence_score,
148
- retries=retries,
149
- delay=delay,
150
- backoff_factor=backoff_factor,
151
- default_value=default_value,
152
- timeout=timeout,
153
- branch_name=branch_name,
154
- system=system,
155
- messages=messages,
156
- service=service,
157
- sender=sender,
158
- llmconfig=llmconfig,
159
- tools=tools,
160
- datalogger=datalogger,
161
- persist_path=persist_path,
162
- tool_manager=tool_manager,
163
- return_branch=return_branch,
164
- **kwargs,
165
- )
166
-
167
- if num_instances == 1:
168
- return await _inner()
169
-
170
- elif num_instances > 1:
171
- return await func_call.alcall(range(num_instances), _inner)
@@ -1,279 +0,0 @@
1
- """
2
- This module contains the ScoreTemplate class and related functions for scoring a given context using a language model.
3
-
4
- The ScoreTemplate class is a subclass of ScoredTemplate and provides functionality for scoring a given context
5
- based on specified instructions, score range, and other parameters. It includes fields for the input sentence,
6
- score range, inclusive flag, number of digits, confidence score, and reason for the score.
7
-
8
- The module also includes functions for scoring a single instance or multiple instances of the context using the
9
- ScoreTemplate class and a language model.
10
- """
11
-
12
- from pydantic import Field
13
- import numpy as np
14
- from lionagi.libs import func_call, convert
15
- from lionagi.core.form.scored_form import ScoredForm
16
- from lionagi.core.branch.branch import Branch
17
-
18
-
19
- class ScoreTemplate(ScoredForm):
20
- """
21
- A class for scoring a given context using a language model.
22
-
23
- Attributes:
24
- template_name (str): The name of the score template (default: "default_score").
25
- sentence (str | list | dict): The given context to score.
26
- answer (float): The numeric score for the context.
27
- signature (str): The signature indicating the input and output fields (default: "sentence -> answer").
28
-
29
- Methods:
30
- __init__(self, sentence=None, instruction=None, score_range=(1, 10), inclusive=True, num_digit=0,
31
- confidence_score=False, reason=False, **kwargs):
32
- Initializes a new instance of the ScoreTemplate class.
33
- """
34
-
35
- template_name: str = "default_score"
36
- sentence: str | list | dict = Field(
37
- default_factory=str, description="the given context to score"
38
- )
39
- answer: float = Field(default_factory=float, description=f"a numeric score")
40
- signature: str = "sentence -> answer"
41
-
42
- def __init__(
43
- self,
44
- sentence=None,
45
- instruction=None,
46
- score_range=(1, 10),
47
- inclusive=True,
48
- num_digit=0,
49
- confidence_score=False,
50
- reason=False,
51
- **kwargs,
52
- ):
53
- super().__init__(**kwargs)
54
-
55
- self.sentence = sentence
56
-
57
- return_precision = ""
58
- if num_digit == 0:
59
- return_precision = "integer"
60
- else:
61
- return_precision = f"num:{convert.to_str(num_digit)}f"
62
-
63
- self.task = f"""
64
- score context according to the following constraints
65
- 1. objective, {convert.to_str(instruction)}
66
- 2. score range, {convert.to_str(score_range)}
67
- 3. include_endpoints, {"yes" if inclusive else "no"}
68
- 4. format the score in {return_precision}
69
- """
70
-
71
- if reason:
72
- self.output_fields.append("reason")
73
-
74
- if confidence_score:
75
- self.output_fields.append("confidence_score")
76
-
77
- self.out_validation_kwargs["answer"] = {
78
- "upper_bound": score_range[1],
79
- "lower_bound": score_range[0],
80
- "num_type": int if num_digit == 0 else float,
81
- "precision": num_digit if num_digit != 0 else None,
82
- }
83
-
84
-
85
- async def _score(
86
- sentence,
87
- instruction=None,
88
- score_range=(1, 10),
89
- inclusive=True,
90
- num_digit=0,
91
- confidence_score=False,
92
- reason=False,
93
- retries=2,
94
- delay=0.5,
95
- backoff_factor=2,
96
- default_value=None,
97
- timeout=None,
98
- branch_name=None,
99
- system=None,
100
- messages=None,
101
- service=None,
102
- sender=None,
103
- llmconfig=None,
104
- tools=None,
105
- datalogger=None,
106
- persist_path=None,
107
- tool_manager=None,
108
- **kwargs,
109
- ):
110
- """
111
- Scores a given context using a language model.
112
-
113
- Args:
114
- sentence (str | list | dict): The given context to score.
115
- instruction (Optional[str]): The instruction for scoring the context.
116
- score_range (tuple): The range of valid scores (default: (1, 10)).
117
- inclusive (bool): Whether to include the endpoints of the score range (default: True).
118
- num_digit (int): The number of digits after the decimal point for the score (default: 0).
119
- confidence_score (bool): Whether to include the confidence score in the output (default: False).
120
- reason (bool): Whether to include the reason for the score in the output (default: False).
121
- retries (int): The number of retries for the API call (default: 2).
122
- delay (float): The initial delay between retries in seconds (default: 0.5).
123
- backoff_factor (float): The backoff factor for exponential delay between retries (default: 2).
124
- default_value (Optional[Any]): The default value to return if the API call fails (default: None).
125
- timeout (Optional[float]): The timeout for the API call in seconds (default: None).
126
- branch_name (Optional[str]): The name of the branch to use for scoring.
127
- system (Optional[Any]): The system configuration for the branch.
128
- messages (Optional[Any]): The messages to initialize the branch with.
129
- service (Optional[Any]): The service to use for scoring.
130
- sender (Optional[str]): The sender of the scoring request.
131
- llmconfig (Optional[Any]): The configuration for the language model.
132
- tools (Optional[Any]): The tools to use for scoring.
133
- datalogger (Optional[Any]): The data logger for the branch.
134
- persist_path (Optional[str]): The path to persist the branch data.
135
- tool_manager (Optional[Any]): The tool manager for the branch.
136
- **kwargs: Additional keyword arguments for the API call.
137
-
138
- Returns:
139
- ScoreTemplate: The score template with the scored context.
140
- """
141
-
142
- if "temperature" not in kwargs:
143
- kwargs["temperature"] = 0.1
144
-
145
- instruction = instruction or ""
146
-
147
- branch = Branch(
148
- name=branch_name,
149
- system=system,
150
- messages=messages,
151
- service=service,
152
- sender=sender,
153
- llmconfig=llmconfig,
154
- tools=tools,
155
- datalogger=datalogger,
156
- persist_path=persist_path,
157
- tool_manager=tool_manager,
158
- )
159
-
160
- _template = ScoreTemplate(
161
- sentence=sentence,
162
- instruction=instruction,
163
- score_range=score_range,
164
- inclusive=inclusive,
165
- num_digit=num_digit,
166
- confidence_score=confidence_score,
167
- reason=reason,
168
- )
169
-
170
- await func_call.rcall(
171
- branch.chat,
172
- form=_template,
173
- retries=retries,
174
- delay=delay,
175
- backoff_factor=backoff_factor,
176
- default=default_value,
177
- timeout=timeout,
178
- **kwargs,
179
- )
180
-
181
- return _template
182
-
183
-
184
- async def score(
185
- sentence,
186
- *,
187
- num_instances=1,
188
- instruction=None,
189
- score_range=(1, 10),
190
- inclusive=True,
191
- num_digit=0,
192
- confidence_score=False,
193
- reason=False,
194
- retries=2,
195
- delay=0.5,
196
- backoff_factor=2,
197
- default_value=None,
198
- timeout=None,
199
- branch_name=None,
200
- system=None,
201
- messages=None,
202
- service=None,
203
- sender=None,
204
- llmconfig=None,
205
- tools=None,
206
- datalogger=None,
207
- persist_path=None,
208
- tool_manager=None,
209
- return_template=True,
210
- **kwargs,
211
- ) -> ScoreTemplate | float:
212
- """
213
- Scores a given context using a language model, with the option to score multiple instances.
214
-
215
- Args:
216
- sentence (str | list | dict): The given context to score.
217
- num_instances (int): The number of instances to score (default: 1).
218
- instruction (Optional[str]): The instruction for scoring the context.
219
- score_range (tuple): The range of valid scores (default: (1, 10)).
220
- inclusive (bool): Whether to include the endpoints of the score range (default: True).
221
- num_digit (int): The number of digits after the decimal point for the score (default: 0).
222
- confidence_score (bool): Whether to include the confidence score in the output (default: False).
223
- reason (bool): Whether to include the reason for the score in the output (default: False).
224
- retries (int): The number of retries for the API call (default: 2).
225
- delay (float): The initial delay between retries in seconds (default: 0.5).
226
- backoff_factor (float): The backoff factor for exponential delay between retries (default: 2).
227
- default_value (Optional[Any]): The default value to return if the API call fails (default: None).
228
- timeout (Optional[float]): The timeout for the API call in seconds (default: None).
229
- branch_name (Optional[str]): The name of the branch to use for scoring.
230
- system (Optional[Any]): The system configuration for the branch.
231
- messages (Optional[Any]): The messages to initialize the branch with.
232
- service (Optional[Any]): The service to use for scoring.
233
- sender (Optional[str]): The sender of the scoring request.
234
- llmconfig (Optional[Any]): The configuration for the language model.
235
- tools (Optional[Any]): The tools to use for scoring.
236
- datalogger (Optional[Any]): The data logger for the branch.
237
- persist_path (Optional[str]): The path to persist the branch data.
238
- tool_manager (Optional[Any]): The tool manager for the branch.
239
- return_template (bool): Whether to return the score template or only the score (default: True).
240
- **kwargs: Additional keyword arguments for the API call.
241
-
242
- Returns:
243
- ScoreTemplate | float: The score template with the scored context or the average score if `return_template` is False.
244
- """
245
-
246
- async def _inner(i=0):
247
- return await _score(
248
- sentence=sentence,
249
- instruction=instruction,
250
- score_range=score_range,
251
- inclusive=inclusive,
252
- num_digit=num_digit,
253
- confidence_score=confidence_score,
254
- reason=reason,
255
- retries=retries,
256
- delay=delay,
257
- backoff_factor=backoff_factor,
258
- default_value=default_value,
259
- timeout=timeout,
260
- branch_name=branch_name,
261
- system=system,
262
- messages=messages,
263
- service=service,
264
- sender=sender,
265
- llmconfig=llmconfig,
266
- tools=tools,
267
- datalogger=datalogger,
268
- persist_path=persist_path,
269
- tool_manager=tool_manager,
270
- **kwargs,
271
- )
272
-
273
- if num_instances == 1:
274
- _out = await _inner()
275
- return _out if return_template else _out.answer
276
-
277
- elif num_instances > 1:
278
- _outs = await func_call.alcall(range(num_instances), _inner)
279
- return _outs if return_template else np.mean([i.answer for i in _outs])