lionagi 0.0.312__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 +61 -3
  2. lionagi/core/__init__.py +0 -14
  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/__init__.py +0 -3
  11. lionagi/core/agent/base_agent.py +45 -36
  12. lionagi/core/agent/eval/evaluator.py +1 -0
  13. lionagi/core/agent/eval/vote.py +40 -0
  14. lionagi/core/agent/learn/learner.py +59 -0
  15. lionagi/core/agent/plan/unit_template.py +1 -0
  16. lionagi/core/collections/__init__.py +17 -0
  17. lionagi/core/collections/_logger.py +319 -0
  18. lionagi/core/collections/abc/__init__.py +53 -0
  19. lionagi/core/collections/abc/component.py +615 -0
  20. lionagi/core/collections/abc/concepts.py +297 -0
  21. lionagi/core/collections/abc/exceptions.py +150 -0
  22. lionagi/core/collections/abc/util.py +45 -0
  23. lionagi/core/collections/exchange.py +161 -0
  24. lionagi/core/collections/flow.py +426 -0
  25. lionagi/core/collections/model.py +419 -0
  26. lionagi/core/collections/pile.py +913 -0
  27. lionagi/core/collections/progression.py +236 -0
  28. lionagi/core/collections/util.py +64 -0
  29. lionagi/core/director/direct.py +314 -0
  30. lionagi/core/director/director.py +2 -0
  31. lionagi/core/engine/branch_engine.py +333 -0
  32. lionagi/core/engine/instruction_map_engine.py +204 -0
  33. lionagi/core/engine/sandbox_.py +14 -0
  34. lionagi/core/engine/script_engine.py +99 -0
  35. lionagi/core/executor/base_executor.py +90 -0
  36. lionagi/core/executor/graph_executor.py +330 -0
  37. lionagi/core/executor/neo4j_executor.py +384 -0
  38. lionagi/core/generic/__init__.py +7 -0
  39. lionagi/core/generic/edge.py +112 -0
  40. lionagi/core/generic/edge_condition.py +16 -0
  41. lionagi/core/generic/graph.py +236 -0
  42. lionagi/core/generic/hyperedge.py +1 -0
  43. lionagi/core/generic/node.py +220 -0
  44. lionagi/core/generic/tree.py +48 -0
  45. lionagi/core/generic/tree_node.py +79 -0
  46. lionagi/core/mail/__init__.py +7 -3
  47. lionagi/core/mail/mail.py +25 -0
  48. lionagi/core/mail/mail_manager.py +142 -58
  49. lionagi/core/mail/package.py +45 -0
  50. lionagi/core/mail/start_mail.py +36 -0
  51. lionagi/core/message/__init__.py +19 -0
  52. lionagi/core/message/action_request.py +133 -0
  53. lionagi/core/message/action_response.py +135 -0
  54. lionagi/core/message/assistant_response.py +95 -0
  55. lionagi/core/message/instruction.py +234 -0
  56. lionagi/core/message/message.py +101 -0
  57. lionagi/core/message/system.py +86 -0
  58. lionagi/core/message/util.py +283 -0
  59. lionagi/core/report/__init__.py +4 -0
  60. lionagi/core/report/base.py +217 -0
  61. lionagi/core/report/form.py +231 -0
  62. lionagi/core/report/report.py +166 -0
  63. lionagi/core/report/util.py +28 -0
  64. lionagi/core/rule/__init__.py +0 -0
  65. lionagi/core/rule/_default.py +16 -0
  66. lionagi/core/rule/action.py +99 -0
  67. lionagi/core/rule/base.py +238 -0
  68. lionagi/core/rule/boolean.py +56 -0
  69. lionagi/core/rule/choice.py +47 -0
  70. lionagi/core/rule/mapping.py +96 -0
  71. lionagi/core/rule/number.py +71 -0
  72. lionagi/core/rule/rulebook.py +109 -0
  73. lionagi/core/rule/string.py +52 -0
  74. lionagi/core/rule/util.py +35 -0
  75. lionagi/core/session/__init__.py +0 -3
  76. lionagi/core/session/branch.py +431 -0
  77. lionagi/core/session/directive_mixin.py +287 -0
  78. lionagi/core/session/session.py +230 -902
  79. lionagi/core/structure/__init__.py +1 -0
  80. lionagi/core/structure/chain.py +1 -0
  81. lionagi/core/structure/forest.py +1 -0
  82. lionagi/core/structure/graph.py +1 -0
  83. lionagi/core/structure/tree.py +1 -0
  84. lionagi/core/unit/__init__.py +5 -0
  85. lionagi/core/unit/parallel_unit.py +245 -0
  86. lionagi/core/unit/template/__init__.py +0 -0
  87. lionagi/core/unit/template/action.py +81 -0
  88. lionagi/core/unit/template/base.py +51 -0
  89. lionagi/core/unit/template/plan.py +84 -0
  90. lionagi/core/unit/template/predict.py +109 -0
  91. lionagi/core/unit/template/score.py +124 -0
  92. lionagi/core/unit/template/select.py +104 -0
  93. lionagi/core/unit/unit.py +362 -0
  94. lionagi/core/unit/unit_form.py +305 -0
  95. lionagi/core/unit/unit_mixin.py +1168 -0
  96. lionagi/core/unit/util.py +71 -0
  97. lionagi/core/validator/__init__.py +0 -0
  98. lionagi/core/validator/validator.py +364 -0
  99. lionagi/core/work/__init__.py +0 -0
  100. lionagi/core/work/work.py +76 -0
  101. lionagi/core/work/work_function.py +101 -0
  102. lionagi/core/work/work_queue.py +103 -0
  103. lionagi/core/work/worker.py +258 -0
  104. lionagi/core/work/worklog.py +120 -0
  105. lionagi/experimental/__init__.py +0 -0
  106. lionagi/experimental/compressor/__init__.py +0 -0
  107. lionagi/experimental/compressor/base.py +46 -0
  108. lionagi/experimental/compressor/llm_compressor.py +247 -0
  109. lionagi/experimental/compressor/llm_summarizer.py +61 -0
  110. lionagi/experimental/compressor/util.py +70 -0
  111. lionagi/experimental/directive/__init__.py +19 -0
  112. lionagi/experimental/directive/parser/__init__.py +0 -0
  113. lionagi/experimental/directive/parser/base_parser.py +282 -0
  114. lionagi/experimental/directive/template/__init__.py +0 -0
  115. lionagi/experimental/directive/template/base_template.py +79 -0
  116. lionagi/experimental/directive/template/schema.py +36 -0
  117. lionagi/experimental/directive/tokenizer.py +73 -0
  118. lionagi/experimental/evaluator/__init__.py +0 -0
  119. lionagi/experimental/evaluator/ast_evaluator.py +131 -0
  120. lionagi/experimental/evaluator/base_evaluator.py +218 -0
  121. lionagi/experimental/knowledge/__init__.py +0 -0
  122. lionagi/experimental/knowledge/base.py +10 -0
  123. lionagi/experimental/knowledge/graph.py +0 -0
  124. lionagi/experimental/memory/__init__.py +0 -0
  125. lionagi/experimental/strategies/__init__.py +0 -0
  126. lionagi/experimental/strategies/base.py +1 -0
  127. lionagi/integrations/bridge/autogen_/__init__.py +0 -0
  128. lionagi/integrations/bridge/autogen_/autogen_.py +124 -0
  129. lionagi/integrations/bridge/langchain_/documents.py +4 -0
  130. lionagi/integrations/bridge/llamaindex_/index.py +30 -0
  131. lionagi/integrations/bridge/llamaindex_/llama_index_bridge.py +6 -0
  132. lionagi/integrations/bridge/llamaindex_/llama_pack.py +227 -0
  133. lionagi/integrations/bridge/llamaindex_/node_parser.py +6 -9
  134. lionagi/integrations/bridge/pydantic_/pydantic_bridge.py +1 -0
  135. lionagi/integrations/bridge/transformers_/__init__.py +0 -0
  136. lionagi/integrations/bridge/transformers_/install_.py +36 -0
  137. lionagi/integrations/chunker/__init__.py +0 -0
  138. lionagi/integrations/chunker/chunk.py +312 -0
  139. lionagi/integrations/config/oai_configs.py +38 -7
  140. lionagi/integrations/config/ollama_configs.py +1 -1
  141. lionagi/integrations/config/openrouter_configs.py +14 -2
  142. lionagi/integrations/loader/__init__.py +0 -0
  143. lionagi/integrations/loader/load.py +253 -0
  144. lionagi/integrations/loader/load_util.py +195 -0
  145. lionagi/integrations/provider/_mapping.py +46 -0
  146. lionagi/integrations/provider/litellm.py +2 -1
  147. lionagi/integrations/provider/mlx_service.py +16 -9
  148. lionagi/integrations/provider/oai.py +91 -4
  149. lionagi/integrations/provider/ollama.py +7 -6
  150. lionagi/integrations/provider/openrouter.py +115 -8
  151. lionagi/integrations/provider/services.py +2 -2
  152. lionagi/integrations/provider/transformers.py +18 -22
  153. lionagi/integrations/storage/__init__.py +3 -0
  154. lionagi/integrations/storage/neo4j.py +665 -0
  155. lionagi/integrations/storage/storage_util.py +287 -0
  156. lionagi/integrations/storage/structure_excel.py +285 -0
  157. lionagi/integrations/storage/to_csv.py +63 -0
  158. lionagi/integrations/storage/to_excel.py +83 -0
  159. lionagi/libs/__init__.py +26 -1
  160. lionagi/libs/ln_api.py +78 -23
  161. lionagi/libs/ln_context.py +37 -0
  162. lionagi/libs/ln_convert.py +21 -9
  163. lionagi/libs/ln_func_call.py +69 -28
  164. lionagi/libs/ln_image.py +107 -0
  165. lionagi/libs/ln_knowledge_graph.py +405 -0
  166. lionagi/libs/ln_nested.py +26 -11
  167. lionagi/libs/ln_parse.py +110 -14
  168. lionagi/libs/ln_queue.py +117 -0
  169. lionagi/libs/ln_tokenize.py +164 -0
  170. lionagi/{core/prompt/field_validator.py → libs/ln_validate.py} +79 -14
  171. lionagi/libs/special_tokens.py +172 -0
  172. lionagi/libs/sys_util.py +107 -2
  173. lionagi/lions/__init__.py +0 -0
  174. lionagi/lions/coder/__init__.py +0 -0
  175. lionagi/lions/coder/add_feature.py +20 -0
  176. lionagi/lions/coder/base_prompts.py +22 -0
  177. lionagi/lions/coder/code_form.py +13 -0
  178. lionagi/lions/coder/coder.py +168 -0
  179. lionagi/lions/coder/util.py +96 -0
  180. lionagi/lions/researcher/__init__.py +0 -0
  181. lionagi/lions/researcher/data_source/__init__.py +0 -0
  182. lionagi/lions/researcher/data_source/finhub_.py +191 -0
  183. lionagi/lions/researcher/data_source/google_.py +199 -0
  184. lionagi/lions/researcher/data_source/wiki_.py +96 -0
  185. lionagi/lions/researcher/data_source/yfinance_.py +21 -0
  186. lionagi/tests/integrations/__init__.py +0 -0
  187. lionagi/tests/libs/__init__.py +0 -0
  188. lionagi/tests/libs/test_field_validators.py +353 -0
  189. lionagi/tests/{test_libs → libs}/test_func_call.py +23 -21
  190. lionagi/tests/{test_libs → libs}/test_nested.py +36 -21
  191. lionagi/tests/{test_libs → libs}/test_parse.py +1 -1
  192. lionagi/tests/libs/test_queue.py +67 -0
  193. lionagi/tests/test_core/collections/__init__.py +0 -0
  194. lionagi/tests/test_core/collections/test_component.py +206 -0
  195. lionagi/tests/test_core/collections/test_exchange.py +138 -0
  196. lionagi/tests/test_core/collections/test_flow.py +145 -0
  197. lionagi/tests/test_core/collections/test_pile.py +171 -0
  198. lionagi/tests/test_core/collections/test_progression.py +129 -0
  199. lionagi/tests/test_core/generic/__init__.py +0 -0
  200. lionagi/tests/test_core/generic/test_edge.py +67 -0
  201. lionagi/tests/test_core/generic/test_graph.py +96 -0
  202. lionagi/tests/test_core/generic/test_node.py +106 -0
  203. lionagi/tests/test_core/generic/test_tree_node.py +73 -0
  204. lionagi/tests/test_core/test_branch.py +115 -292
  205. lionagi/tests/test_core/test_form.py +46 -0
  206. lionagi/tests/test_core/test_report.py +105 -0
  207. lionagi/tests/test_core/test_validator.py +111 -0
  208. lionagi/version.py +1 -1
  209. {lionagi-0.0.312.dist-info → lionagi-0.2.1.dist-info}/LICENSE +12 -11
  210. {lionagi-0.0.312.dist-info → lionagi-0.2.1.dist-info}/METADATA +19 -118
  211. lionagi-0.2.1.dist-info/RECORD +240 -0
  212. lionagi/core/branch/__init__.py +0 -4
  213. lionagi/core/branch/base_branch.py +0 -654
  214. lionagi/core/branch/branch.py +0 -471
  215. lionagi/core/branch/branch_flow_mixin.py +0 -96
  216. lionagi/core/branch/executable_branch.py +0 -347
  217. lionagi/core/branch/util.py +0 -323
  218. lionagi/core/direct/__init__.py +0 -6
  219. lionagi/core/direct/predict.py +0 -161
  220. lionagi/core/direct/score.py +0 -278
  221. lionagi/core/direct/select.py +0 -169
  222. lionagi/core/direct/utils.py +0 -87
  223. lionagi/core/direct/vote.py +0 -64
  224. lionagi/core/flow/base/baseflow.py +0 -23
  225. lionagi/core/flow/monoflow/ReAct.py +0 -238
  226. lionagi/core/flow/monoflow/__init__.py +0 -9
  227. lionagi/core/flow/monoflow/chat.py +0 -95
  228. lionagi/core/flow/monoflow/chat_mixin.py +0 -263
  229. lionagi/core/flow/monoflow/followup.py +0 -214
  230. lionagi/core/flow/polyflow/__init__.py +0 -1
  231. lionagi/core/flow/polyflow/chat.py +0 -248
  232. lionagi/core/mail/schema.py +0 -56
  233. lionagi/core/messages/__init__.py +0 -3
  234. lionagi/core/messages/schema.py +0 -533
  235. lionagi/core/prompt/prompt_template.py +0 -316
  236. lionagi/core/schema/__init__.py +0 -22
  237. lionagi/core/schema/action_node.py +0 -29
  238. lionagi/core/schema/base_mixin.py +0 -296
  239. lionagi/core/schema/base_node.py +0 -199
  240. lionagi/core/schema/condition.py +0 -24
  241. lionagi/core/schema/data_logger.py +0 -354
  242. lionagi/core/schema/data_node.py +0 -93
  243. lionagi/core/schema/prompt_template.py +0 -67
  244. lionagi/core/schema/structure.py +0 -910
  245. lionagi/core/tool/__init__.py +0 -3
  246. lionagi/core/tool/tool_manager.py +0 -280
  247. lionagi/integrations/bridge/pydantic_/base_model.py +0 -7
  248. lionagi/tests/test_core/test_base_branch.py +0 -427
  249. lionagi/tests/test_core/test_chat_flow.py +0 -63
  250. lionagi/tests/test_core/test_mail_manager.py +0 -75
  251. lionagi/tests/test_core/test_prompts.py +0 -51
  252. lionagi/tests/test_core/test_session.py +0 -254
  253. lionagi/tests/test_core/test_session_base_util.py +0 -312
  254. lionagi/tests/test_core/test_tool_manager.py +0 -95
  255. lionagi-0.0.312.dist-info/RECORD +0 -111
  256. /lionagi/core/{branch/base → _setting}/__init__.py +0 -0
  257. /lionagi/core/{flow → agent/eval}/__init__.py +0 -0
  258. /lionagi/core/{flow/base → agent/learn}/__init__.py +0 -0
  259. /lionagi/core/{prompt → agent/plan}/__init__.py +0 -0
  260. /lionagi/core/{tool/manual.py → agent/plan/plan.py} +0 -0
  261. /lionagi/{tests/test_integrations → core/director}/__init__.py +0 -0
  262. /lionagi/{tests/test_libs → core/engine}/__init__.py +0 -0
  263. /lionagi/{tests/test_libs/test_async.py → core/executor/__init__.py} +0 -0
  264. /lionagi/tests/{test_libs → libs}/test_api.py +0 -0
  265. /lionagi/tests/{test_libs → libs}/test_convert.py +0 -0
  266. /lionagi/tests/{test_libs → libs}/test_sys_util.py +0 -0
  267. {lionagi-0.0.312.dist-info → lionagi-0.2.1.dist-info}/WHEEL +0 -0
  268. {lionagi-0.0.312.dist-info → lionagi-0.2.1.dist-info}/top_level.txt +0 -0
@@ -1,3 +0,0 @@
1
- from .tool_manager import ToolManager, func_to_tool
2
-
3
- __all__ = ["ToolManager", "func_to_tool"]
@@ -1,280 +0,0 @@
1
- from typing import Tuple, Any, TypeVar, Callable
2
-
3
- import asyncio
4
-
5
- from lionagi.libs import func_call, convert, ParseUtil
6
- from lionagi.core.schema import Tool, TOOL_TYPE
7
-
8
- T = TypeVar("T", bound=Tool)
9
-
10
-
11
- class ToolManager:
12
- """
13
- A manager class for handling the registration and invocation of tools that are subclasses of Tool.
14
-
15
- This class maintains a registry of tool instances, allowing for dynamic invocation based on
16
- tool name and provided arguments. It supports both synchronous and asynchronous tool function
17
- calls.
18
-
19
- Attributes:
20
- registry (dict[str, Tool]): A dictionary to hold registered tools, keyed by their names.
21
- """
22
-
23
- registry: dict = {}
24
-
25
- def name_existed(self, name: str) -> bool:
26
- """
27
- Checks if a tool name already exists in the registry.
28
-
29
- Args:
30
- name (str): The name of the tool to check.
31
-
32
- Returns:
33
- bool: True if the name exists, False otherwise.
34
- """
35
- return name in self.registry
36
-
37
- @property
38
- def has_tools(self):
39
- return self.registry != {}
40
-
41
- def _register_tool(self, tool: Tool) -> None:
42
- """
43
- Registers a tool in the registry. Raises a TypeError if the object is not an instance of Tool.
44
-
45
- Args:
46
- tool (Tool): The tool instance to register.
47
-
48
- Raises:
49
- TypeError: If the provided object is not an instance of Tool.
50
- """
51
- if not isinstance(tool, Tool):
52
- raise TypeError("Please register a Tool object.")
53
- name = tool.schema_["function"]["name"]
54
- self.registry.update({name: tool})
55
-
56
- async def invoke(self, func_calls: Tuple[str, dict[str, Any]]) -> Any:
57
- """
58
- Invokes a registered tool's function with the given arguments. Supports both coroutine and regular functions.
59
-
60
- Args:
61
- func_call (Tuple[str, Dict[str, Any]]): A tuple containing the function name and a dictionary of keyword arguments.
62
-
63
- Returns:
64
- Any: The result of the function call.
65
-
66
- Raises:
67
- ValueError: If the function name is not registered or if there's an error during function invocation.
68
- """
69
- name, kwargs = func_calls
70
- if not self.name_existed(name):
71
- raise ValueError(f"Function {name} is not registered.")
72
- tool = self.registry[name]
73
- func = tool.func
74
- parser = tool.parser
75
- try:
76
- if func_call.is_coroutine_func(func):
77
- tasks = [func_call.call_handler(func, **kwargs)]
78
- out = await asyncio.gather(*tasks)
79
- return parser(out[0]) if parser else out[0]
80
- else:
81
- out = func(**kwargs)
82
- return parser(out) if parser else out
83
- except Exception as e:
84
- raise ValueError(
85
- f"Error when invoking function {name} with arguments {kwargs} with error message {e}"
86
- ) from e
87
-
88
- @staticmethod
89
- def get_function_call(response: dict) -> Tuple[str, dict]:
90
- """
91
- Extracts a function call and arguments from a response dictionary.
92
-
93
- Args:
94
- response (dict): The response dictionary containing the function call information.
95
-
96
- Returns:
97
- Tuple[str, dict]: A tuple containing the function name and a dictionary of arguments.
98
-
99
- Raises:
100
- ValueError: If the response does not contain valid function call information.
101
- """
102
- try:
103
- func = response["action"][7:]
104
- args = convert.to_dict(response["arguments"])
105
- return func, args
106
- except Exception:
107
- try:
108
- func = response["recipient_name"].split(".")[-1]
109
- args = response["parameters"]
110
- return func, args
111
- except:
112
- raise ValueError("response is not a valid function call")
113
-
114
- def register_tools(self, tools: list[Tool]) -> None:
115
- """
116
- Registers multiple tools in the registry.
117
-
118
- Args:
119
- tools (list[Tool]): A list of tool instances to register.
120
- """
121
- func_call.lcall(tools, self._register_tool)
122
-
123
- def to_tool_schema_list(self) -> list[dict[str, Any]]:
124
- """
125
- Generates a list of schemas for all registered tools.
126
-
127
- Returns:
128
- list[dict[str, Any]]: A list of tool schemas.
129
-
130
- """
131
- return [tool.schema_ for tool in self.registry.values()]
132
-
133
- def parse_tool(self, tools: TOOL_TYPE, **kwargs) -> dict:
134
- """
135
- Parses tool information and generates a dictionary for tool invocation.
136
-
137
- Args:
138
- tools: Tool information which can be a single Tool instance, a list of Tool instances, a tool name, or a list of tool names.
139
- **kwargs: Additional keyword arguments.
140
-
141
- Returns:
142
- dict: A dictionary containing tool schema information and any additional keyword arguments.
143
-
144
- Raises:
145
- ValueError: If a tool name is provided that is not registered.
146
- """
147
-
148
- def tool_check(tool):
149
- if isinstance(tool, dict):
150
- return tool
151
- elif isinstance(tool, Tool):
152
- return tool.schema_
153
- elif isinstance(tool, str):
154
- if self.name_existed(tool):
155
- tool = self.registry[tool]
156
- return tool.schema_
157
- else:
158
- raise ValueError(f"Function {tool} is not registered.")
159
-
160
- if isinstance(tools, bool):
161
- tool_kwarg = {"tools": self.to_tool_schema_list()}
162
- kwargs = tool_kwarg | kwargs
163
-
164
- else:
165
- if not isinstance(tools, list):
166
- tools = [tools]
167
- tool_kwarg = {"tools": func_call.lcall(tools, tool_check)}
168
- kwargs = tool_kwarg | kwargs
169
-
170
- return kwargs
171
-
172
-
173
- def func_to_tool(
174
- func_: Callable | list[Callable], parser=None, docstring_style="google"
175
- ):
176
- """
177
- Transforms a given function into a Tool object, equipped with a schema derived
178
- from its docstring. This process involves parsing the function's docstring based
179
- on a specified style ('google' or 'reST') to extract relevant metadata and
180
- parameters, which are then used to construct a comprehensive schema for the Tool.
181
- This schema facilitates the integration of the function with systems or
182
- frameworks that rely on structured metadata for automation, documentation, or
183
- interface generation purposes.
184
-
185
- The function to be transformed can be any Callable that adheres to the
186
- specified docstring conventions. The resulting Tool object encapsulates the
187
- original function, allowing it to be utilized within environments that require
188
- objects with structured metadata.
189
-
190
- Args:
191
- func_ (Callable): The function to be transformed into a Tool object. This
192
- function should have a docstring that follows the
193
- specified docstring style for accurate schema generation.
194
- parser (Optional[Any]): An optional parser object associated with the Tool.
195
- This parameter is currently not utilized in the
196
- transformation process but is included for future
197
- compatibility and extension purposes.
198
- docstring_style (str): The format of the docstring to be parsed, indicating
199
- the convention used in the function's docstring.
200
- Supports 'google' for Google-style docstrings and
201
- 'reST' for reStructuredText-style docstrings. The
202
- chosen style affects how the docstring is parsed and
203
- how the schema is generated.
204
-
205
- Returns:
206
- Tool: An object representing the original function wrapped as a Tool, along
207
- with its generated schema. This Tool object can be used in systems that
208
- require detailed metadata about functions, facilitating tasks such as
209
- automatic documentation generation, user interface creation, or
210
- integration with other software tools.
211
-
212
- Examples:
213
- >>> def example_function_google(param1: int, param2: str) -> bool:
214
- ... '''
215
- ... An example function using Google style docstrings.
216
- ...
217
- ... Args:
218
- ... param1 (int): The first parameter, demonstrating an integer input_.
219
- ... param2 (str): The second parameter, demonstrating a string input_.
220
- ...
221
- ... Returns:
222
- ... bool: A boolean value, illustrating the return type.
223
- ... '''
224
- ... return True
225
- ...
226
- >>> tool_google = func_to_tool(example_function_google, docstring_style='google')
227
- >>> print(isinstance(tool_google, Tool))
228
- True
229
-
230
- >>> def example_function_reST(param1: int, param2: str) -> bool:
231
- ... '''
232
- ... An example function using reStructuredText (reST) style docstrings.
233
- ...
234
- ... :param param1: The first parameter, demonstrating an integer input_.
235
- ... :type param1: int
236
- ... :param param2: The second parameter, demonstrating a string input_.
237
- ... :type param2: str
238
- ... :returns: A boolean value, illustrating the return type.
239
- ... :rtype: bool
240
- ... '''
241
- ... return True
242
- ...
243
- >>> tool_reST = func_to_tool(example_function_reST, docstring_style='reST')
244
- >>> print(isinstance(tool_reST, Tool))
245
- True
246
-
247
- Note:
248
- The transformation process relies heavily on the accuracy and completeness of
249
- the function's docstring. Functions with incomplete or incorrectly formatted
250
- docstrings may result in incomplete or inaccurate Tool schemas.
251
- """
252
-
253
- fs = []
254
- funcs = convert.to_list(func_, flatten=True, dropna=True)
255
- parsers = convert.to_list(parser, flatten=True, dropna=True)
256
-
257
- if parser:
258
- if len(funcs) != len(parsers) != 1:
259
- raise ValueError(
260
- "Length of parser must match length of func. Except if you only pass one"
261
- )
262
-
263
- for idx in range(len(funcs)):
264
- f_ = lambda _f: Tool(
265
- func=_f,
266
- schema_=ParseUtil._func_to_schema(_f, style=docstring_style),
267
- parser=parsers[idx] if len(parsers) > 1 else parsers[0],
268
- )
269
-
270
- fs.append(f_)
271
-
272
- else:
273
- fs = func_call.lcall(
274
- funcs,
275
- lambda _f: Tool(
276
- func=_f, schema_=ParseUtil._func_to_schema(_f, style=docstring_style)
277
- ),
278
- )
279
-
280
- return fs
@@ -1,7 +0,0 @@
1
- from pydantic import BaseModel, Field, ValidationError, AliasChoices, field_serializer
2
-
3
- ln_BaseModel = BaseModel
4
- ln_Field = Field
5
- ln_field_serializer = field_serializer
6
- ln_AliasChoices = AliasChoices
7
- ln_ValidationError = ValidationError