lionagi 0.14.8__py3-none-any.whl → 0.14.10__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/_errors.py +120 -11
- lionagi/_types.py +0 -6
- lionagi/config.py +3 -1
- lionagi/fields/reason.py +1 -1
- lionagi/libs/concurrency/throttle.py +79 -0
- lionagi/libs/parse.py +2 -1
- lionagi/libs/unstructured/__init__.py +0 -0
- lionagi/libs/unstructured/pdf_to_image.py +45 -0
- lionagi/libs/unstructured/read_image_to_base64.py +33 -0
- lionagi/libs/validate/to_num.py +378 -0
- lionagi/libs/validate/xml_parser.py +203 -0
- lionagi/models/operable_model.py +8 -3
- lionagi/operations/flow.py +0 -1
- lionagi/protocols/generic/event.py +2 -0
- lionagi/protocols/generic/log.py +26 -10
- lionagi/protocols/operatives/step.py +1 -1
- lionagi/protocols/types.py +9 -1
- lionagi/service/__init__.py +22 -1
- lionagi/service/connections/api_calling.py +57 -2
- lionagi/service/connections/endpoint_config.py +1 -1
- lionagi/service/connections/header_factory.py +4 -2
- lionagi/service/connections/match_endpoint.py +10 -10
- lionagi/service/connections/providers/anthropic_.py +5 -2
- lionagi/service/connections/providers/claude_code_.py +13 -17
- lionagi/service/connections/providers/claude_code_cli.py +51 -16
- lionagi/service/connections/providers/exa_.py +5 -3
- lionagi/service/connections/providers/oai_.py +116 -81
- lionagi/service/connections/providers/ollama_.py +38 -18
- lionagi/service/connections/providers/perplexity_.py +36 -14
- lionagi/service/connections/providers/types.py +30 -0
- lionagi/service/hooks/__init__.py +25 -0
- lionagi/service/hooks/_types.py +52 -0
- lionagi/service/hooks/_utils.py +85 -0
- lionagi/service/hooks/hook_event.py +67 -0
- lionagi/service/hooks/hook_registry.py +221 -0
- lionagi/service/imodel.py +120 -34
- lionagi/service/third_party/claude_code.py +715 -0
- lionagi/service/third_party/openai_model_names.py +198 -0
- lionagi/service/third_party/pplx_models.py +16 -8
- lionagi/service/types.py +21 -0
- lionagi/session/branch.py +1 -4
- lionagi/tools/base.py +1 -3
- lionagi/tools/file/reader.py +1 -1
- lionagi/tools/memory/tools.py +2 -2
- lionagi/utils.py +12 -775
- lionagi/version.py +1 -1
- {lionagi-0.14.8.dist-info → lionagi-0.14.10.dist-info}/METADATA +6 -2
- {lionagi-0.14.8.dist-info → lionagi-0.14.10.dist-info}/RECORD +50 -40
- lionagi/service/connections/providers/_claude_code/__init__.py +0 -3
- lionagi/service/connections/providers/_claude_code/models.py +0 -244
- lionagi/service/connections/providers/_claude_code/stream_cli.py +0 -359
- lionagi/service/third_party/openai_models.py +0 -18241
- {lionagi-0.14.8.dist-info → lionagi-0.14.10.dist-info}/WHEEL +0 -0
- {lionagi-0.14.8.dist-info → lionagi-0.14.10.dist-info}/licenses/LICENSE +0 -0
lionagi/version.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
__version__ = "0.14.
|
1
|
+
__version__ = "0.14.10"
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: lionagi
|
3
|
-
Version: 0.14.
|
3
|
+
Version: 0.14.10
|
4
4
|
Summary: An Intelligence Operating System.
|
5
5
|
Author-email: HaiyangLi <quantocean.li@gmail.com>, Liangbingyan Luo <llby_luo@outlook.com>
|
6
6
|
License: Apache License
|
@@ -264,6 +264,10 @@ Provides-Extra: sqlite
|
|
264
264
|
Requires-Dist: aiosqlite>=0.21.0; extra == 'sqlite'
|
265
265
|
Provides-Extra: tools
|
266
266
|
Requires-Dist: docling>=2.15.0; extra == 'tools'
|
267
|
+
Provides-Extra: unstructured
|
268
|
+
Requires-Dist: opencv-python>=4.2.0.34; extra == 'unstructured'
|
269
|
+
Provides-Extra: xml
|
270
|
+
Requires-Dist: xmltodict>=0.12.0; extra == 'xml'
|
267
271
|
Description-Content-Type: text/markdown
|
268
272
|
|
269
273
|

|
@@ -272,7 +276,7 @@ Description-Content-Type: text/markdown
|
|
272
276
|
|
273
277
|
[Documentation](https://lion-agi.github.io/lionagi/) |
|
274
278
|
[Discord](https://discord.gg/JDj9ENhUE8) |
|
275
|
-
[PyPI](https://pypi.org/project/lionagi/)
|
279
|
+
[PyPI](https://pypi.org/project/lionagi/)
|
276
280
|
|
277
281
|
# LION - Language InterOperable Network
|
278
282
|
|
@@ -1,12 +1,12 @@
|
|
1
1
|
lionagi/__init__.py,sha256=x_DLjvYZp15u2L3pjIKrUDvvdDBzf7VmrhYVzbsACjU,725
|
2
2
|
lionagi/_class_registry.py,sha256=pfUO1DjFZIqr3OwnNMkFqL_fiEBrrf8-swkGmP_KDLE,3112
|
3
|
-
lionagi/_errors.py,sha256=
|
4
|
-
lionagi/_types.py,sha256=
|
5
|
-
lionagi/config.py,sha256=
|
3
|
+
lionagi/_errors.py,sha256=ia_VWhPSyr5FIJLSdPpl04SrNOLI2skN40VC8ePmzeQ,3748
|
4
|
+
lionagi/_types.py,sha256=j8XwSGeGrYwfmSJ8o-80bsfoalLWJgQH41ZkVevc4wk,75
|
5
|
+
lionagi/config.py,sha256=W3JOC_TFad8hFkpTG8yv0-GNupa7x3wX4NAUfWpB59U,3763
|
6
6
|
lionagi/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
7
7
|
lionagi/settings.py,sha256=HDuKCEJCpc4HudKodBnhoQUGuTGhRHdlIFhbtf3VBtY,1633
|
8
|
-
lionagi/utils.py,sha256=
|
9
|
-
lionagi/version.py,sha256=
|
8
|
+
lionagi/utils.py,sha256=cUJntQ5FspE0JecFAZtrGJZqmSLDT65ymD-3hbj-xoE,51013
|
9
|
+
lionagi/version.py,sha256=_bH9Cv7iwwqj9tsROJuuYU5lQLLsLNBzcIQgDLI_itM,24
|
10
10
|
lionagi/adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
11
11
|
lionagi/adapters/async_postgres_adapter.py,sha256=Kf2YCzwRqKpEHY3GQCXEiMl201CCIkDvXcvddwZNkkE,12723
|
12
12
|
lionagi/adapters/postgres_model_adapter.py,sha256=e_wfJNyihbpLCXuAs_W9tbLoMXAXbAXtkQDaHfqWz3o,4555
|
@@ -16,10 +16,10 @@ lionagi/fields/base.py,sha256=mvgqxLonCROszMjnG8QWt00l-MvIr_mnGvCtaH-SQ_k,3814
|
|
16
16
|
lionagi/fields/code.py,sha256=TFym51obzaSfCmeRoHZJyBtjfDI4tvl9F-1sjFc9rMw,7713
|
17
17
|
lionagi/fields/file.py,sha256=DhQ_HE0RvTNzkvBGQHRgbMYSokDkzE8GEu814i6jw5Q,7297
|
18
18
|
lionagi/fields/instruct.py,sha256=2koYdY7XyJh5lrd7tD_BA9bqCbmpsdTDaASEv_dX4i8,4334
|
19
|
-
lionagi/fields/reason.py,sha256=
|
19
|
+
lionagi/fields/reason.py,sha256=6IjgJWv-dhsGmg5O1sq2J5syBibYfRBy3--7q7_ZpMY,1452
|
20
20
|
lionagi/fields/research.py,sha256=eEPKocx8eQy2E9FExRWVIo6MK_xvmwBAoRZciBY3RG0,1421
|
21
21
|
lionagi/libs/__init__.py,sha256=5y5joOZzfFWERl75auAcNcKC3lImVJ5ZZGvvHZUFCJM,112
|
22
|
-
lionagi/libs/parse.py,sha256=
|
22
|
+
lionagi/libs/parse.py,sha256=6tDijmB7yzHLHbLtDnc8Bsn7NgIDWta4JKjdwodTF9E,1051
|
23
23
|
lionagi/libs/concurrency/__init__.py,sha256=huQR4vk3l7mGyoYiGtsjF06xP_5fo9vgKqgB9Naq6PE,1185
|
24
24
|
lionagi/libs/concurrency/cancel.py,sha256=TYLxQ1D7mqhs8J4qJ_yTqP0j01zBe-Qed8-YnJlgKi0,4018
|
25
25
|
lionagi/libs/concurrency/errors.py,sha256=FhLgXGFSbKZYPNfXjdnkV-0ShPF_S34RBLyTO_Pk5C8,938
|
@@ -27,6 +27,7 @@ lionagi/libs/concurrency/patterns.py,sha256=dlC7nhIYE-D5VySNAPsd6PYYlORRAqNX50oK
|
|
27
27
|
lionagi/libs/concurrency/primitives.py,sha256=fgml37nggaEGuvAJHQY6-rpSuAuei56YVSjTlIieM2o,8996
|
28
28
|
lionagi/libs/concurrency/resource_tracker.py,sha256=52Rq7yMWK7DlebBW90imSjYeEAp8Gp9nL0dG2PD8Ivs,5464
|
29
29
|
lionagi/libs/concurrency/task.py,sha256=nVts_yPylkZVSk3l3I4MkUdC7rhoN2qQeFfrsvekVgE,3146
|
30
|
+
lionagi/libs/concurrency/throttle.py,sha256=VQjlY3o9t9qhFSrsaZ-GES99l_Rnt_Jwatrh2bp3asg,2171
|
30
31
|
lionagi/libs/file/__init__.py,sha256=5y5joOZzfFWERl75auAcNcKC3lImVJ5ZZGvvHZUFCJM,112
|
31
32
|
lionagi/libs/file/chunk.py,sha256=XeVMwM33JF0X1W6udz_nhlb3DCevA_EK6A50Hn_e5SY,9300
|
32
33
|
lionagi/libs/file/concat.py,sha256=YSauXVBL3WWx5Mvpn208Cj7q9TLt_aq-0M9J1fm-ins,3864
|
@@ -82,22 +83,27 @@ lionagi/libs/token_transform/synthlang_/resources/mapping/lion_emoji_mapping.tom
|
|
82
83
|
lionagi/libs/token_transform/synthlang_/resources/mapping/python_math_mapping.toml,sha256=Q0MqTf9t5rWuKHLsKu9WS8NSBSb9FsGAAaG5EYQiGCA,964
|
83
84
|
lionagi/libs/token_transform/synthlang_/resources/mapping/rust_chinese_mapping.toml,sha256=o-7KACVDQYkpAGSFgsMCeIy_S93CilUP9w1ZKM0w62A,1217
|
84
85
|
lionagi/libs/token_transform/synthlang_/resources/utility/base_synthlang_system_prompt.toml,sha256=8xhY14WdDRF6GIToqzRPM7EjM6-uO6-hQ9Muei1A2Iw,3458
|
86
|
+
lionagi/libs/unstructured/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
87
|
+
lionagi/libs/unstructured/pdf_to_image.py,sha256=BjuiOcg1hv5ty6j90TygVLfyveHlq3eLaSJTBgrAz4U,1392
|
88
|
+
lionagi/libs/unstructured/read_image_to_base64.py,sha256=EJXWBJxCTa9vHBIFPRqQj0jeFXyDv1cs2oPBrWt-waQ,897
|
85
89
|
lionagi/libs/validate/__init__.py,sha256=5y5joOZzfFWERl75auAcNcKC3lImVJ5ZZGvvHZUFCJM,112
|
86
90
|
lionagi/libs/validate/common_field_validators.py,sha256=1BHznXnJYcLQrHqvHKUnP6aqCptuQ0qN7KJRCExcJBU,4778
|
87
91
|
lionagi/libs/validate/fuzzy_match_keys.py,sha256=M4EfpeWKE1eACLxeC4K-VDmHZXMRHeGUkDFbfny80AM,6255
|
88
92
|
lionagi/libs/validate/fuzzy_validate_mapping.py,sha256=MZpRop3whCQQtgYwJgg66nbN0KxNuKXqulaAgA0Y1_g,4935
|
89
93
|
lionagi/libs/validate/string_similarity.py,sha256=ymuqTKd95_h8ywD9VTzf24gIPyMz1Mm6Lve350yJ_NY,8718
|
94
|
+
lionagi/libs/validate/to_num.py,sha256=ZRHDjpTCykPfDIZZa4rZKNaR_8ZHbPDFlw9rc02DrII,11610
|
90
95
|
lionagi/libs/validate/validate_boolean.py,sha256=bjiX_WZ3Bg8XcqoWLzE1G9BpO0AisrlZUxrpye_mlGk,3614
|
96
|
+
lionagi/libs/validate/xml_parser.py,sha256=PHBYAre4hhthPpDP9Yrp3UYSWdANPx60F1qhxe0m4uw,7004
|
91
97
|
lionagi/models/__init__.py,sha256=R7DEGWuhH-izP7eN6SOw24-I4Mr2IVPXF4gNysmF2zQ,457
|
92
98
|
lionagi/models/field_model.py,sha256=pRFUYs72BRB6jo4NkgeqslCp0xwqzvh00ibh8uaMAws,23674
|
93
99
|
lionagi/models/hashable_model.py,sha256=fpBv4_BcD5F5Laxa_uQ13EPMnVUBP-J0IMxzV9-35Cc,868
|
94
100
|
lionagi/models/model_params.py,sha256=zVU-PHp3skjK5ZVjpsPs1k_VJiS8X0hgct0xs6Z6W_Y,10955
|
95
101
|
lionagi/models/note.py,sha256=okWJL4mGqt0bUVxHRyqsfJr7tEh6wwgYhF1CegxudIA,12202
|
96
|
-
lionagi/models/operable_model.py,sha256=
|
102
|
+
lionagi/models/operable_model.py,sha256=Zm_Hxdauqyh0za3_TJLCZ3g6nR4F45Rrnc0ZM3d54Gs,20111
|
97
103
|
lionagi/models/schema_model.py,sha256=ghRIM8aBNaToAknwNlhQKpuKXcwzyCw5pDE31bVKxs0,667
|
98
104
|
lionagi/operations/__init__.py,sha256=L22n8rRls9oVdzHoDlznHFGiKJMNw3ZhbwVQbm1Fn6M,584
|
99
105
|
lionagi/operations/builder.py,sha256=_fIW5OqPTTond1VUapMMtEwsWmIuTAKy34K24uuK6EQ,22790
|
100
|
-
lionagi/operations/flow.py,sha256=
|
106
|
+
lionagi/operations/flow.py,sha256=MC1g4vyhrFPUCUsL4_SZZBPrp0q5SMgk72ECrTowk2Q,17567
|
101
107
|
lionagi/operations/manager.py,sha256=7KD6NMWqYJHCPI2LumDRwGinF8WYKFjrr3bsNUi9xzI,564
|
102
108
|
lionagi/operations/node.py,sha256=X_uHT_zmDKllfTjuhOHslC55j3Bv3NxVZO3bsimcedE,3100
|
103
109
|
lionagi/operations/types.py,sha256=fM8HphnbBifMzhoKKvdl3JxGCBHlEGPJEYkLWj9b7vE,704
|
@@ -132,7 +138,7 @@ lionagi/operations/translate/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NM
|
|
132
138
|
lionagi/operations/translate/translate.py,sha256=6eBVoQRarGEJ8Tfcl6Z__PLHQTTIbM5MaPVYNeKHRIs,1397
|
133
139
|
lionagi/protocols/__init__.py,sha256=5y5joOZzfFWERl75auAcNcKC3lImVJ5ZZGvvHZUFCJM,112
|
134
140
|
lionagi/protocols/_concepts.py,sha256=ZBN5OYpLMWLrl9uZqSg9GD4uwf60V4VHcxRnBTRWIRc,1555
|
135
|
-
lionagi/protocols/types.py,sha256=
|
141
|
+
lionagi/protocols/types.py,sha256=COmDrDzdStRDFt314iLLCvTWQvuB-elXplXlWI1OcKM,2533
|
136
142
|
lionagi/protocols/action/__init__.py,sha256=5y5joOZzfFWERl75auAcNcKC3lImVJ5ZZGvvHZUFCJM,112
|
137
143
|
lionagi/protocols/action/function_calling.py,sha256=rfuzIowjJpyqO5Ynfs5fGnxsDIU5aKinTj1NI6bGlEU,5106
|
138
144
|
lionagi/protocols/action/manager.py,sha256=XmdQIaVgSpmFBFW9kbW_rdwdQmlBteP4VRanxh_f918,8549
|
@@ -144,8 +150,8 @@ lionagi/protocols/forms/form.py,sha256=B4903km_Ljz-OxYkb1ZT_cpHZSaAYYJpZMsffWloo
|
|
144
150
|
lionagi/protocols/forms/report.py,sha256=SvJJjOSCTfVuqK7AKaY8ldQIGJeSK2zoyPWUV41ge2c,1609
|
145
151
|
lionagi/protocols/generic/__init__.py,sha256=5y5joOZzfFWERl75auAcNcKC3lImVJ5ZZGvvHZUFCJM,112
|
146
152
|
lionagi/protocols/generic/element.py,sha256=Eaij2YpTWsGk28Tqjazmjmc_tOnalH7_iGFZrL6QJb4,14420
|
147
|
-
lionagi/protocols/generic/event.py,sha256=
|
148
|
-
lionagi/protocols/generic/log.py,sha256=
|
153
|
+
lionagi/protocols/generic/event.py,sha256=lA-NkpK87Rj7usi22cNqEZee8aRjPwaWKy_aXxdLQ54,5252
|
154
|
+
lionagi/protocols/generic/log.py,sha256=Y06zAQewkNlaIWjut_c6c45KY_LJfLHwzUaDGLULaas,8212
|
149
155
|
lionagi/protocols/generic/pile.py,sha256=k5fzq0qRPYiP-3NnB-ai499y6bbOqkCR4N4QPvD45ZU,30418
|
150
156
|
lionagi/protocols/generic/processor.py,sha256=c_a7HB9WAaCY-HoI19YyStef8WOXcDj9UeiQb5bz_TM,11759
|
151
157
|
lionagi/protocols/generic/progression.py,sha256=qlITq1qzV119iR5qR__fBAzV489S7d4t20E8uDRicEw,15189
|
@@ -177,48 +183,52 @@ lionagi/protocols/messages/templates/system_message.jinja2,sha256=JRKJ0aFpYfaXSF
|
|
177
183
|
lionagi/protocols/messages/templates/tool_schemas.jinja2,sha256=ozIaSDCRjIAhLyA8VM6S-YqS0w2NcctALSwx4LjDwII,126
|
178
184
|
lionagi/protocols/operatives/__init__.py,sha256=5y5joOZzfFWERl75auAcNcKC3lImVJ5ZZGvvHZUFCJM,112
|
179
185
|
lionagi/protocols/operatives/operative.py,sha256=l417XukoI_ZRyVqjHy8q1BtTKBvlFxf3Fuhrxt057SI,13350
|
180
|
-
lionagi/protocols/operatives/step.py,sha256=
|
181
|
-
lionagi/service/__init__.py,sha256=
|
182
|
-
lionagi/service/imodel.py,sha256=
|
186
|
+
lionagi/protocols/operatives/step.py,sha256=3l1Ui9gD0LSrhikTMSejEmn22M1FY8DPD5TpxVwq04w,9841
|
187
|
+
lionagi/service/__init__.py,sha256=C_TPk1roVYz6uVLK1JVxrK3tPtYqN6W0D7FzI-s6CWY,556
|
188
|
+
lionagi/service/imodel.py,sha256=ya406sf42-KRrKN4TJJLtI6wsKeM5hAhWr7Hubg7W0E,16371
|
183
189
|
lionagi/service/manager.py,sha256=tN3p0kM7pg_CEs6wXK62_B_h49Q3nrU-9qniFhw2ABE,1164
|
184
190
|
lionagi/service/rate_limited_processor.py,sha256=JhkuzJMHUCdndkRbAUf9wUQI9zOw-dutRy_nHf8EE5I,6101
|
185
191
|
lionagi/service/resilience.py,sha256=uYJYZQ9M-tje8ME3vJmYabXwKHF1c3Ij4-WrdCwogcs,18742
|
186
192
|
lionagi/service/token_calculator.py,sha256=piTidArzUkIMCtOLC_HBLoZNYZcENQywgeKM31bxezM,6457
|
187
|
-
lionagi/service/types.py,sha256=
|
193
|
+
lionagi/service/types.py,sha256=9zX08BhdmPE9FE1YTyvsy14hdDGRYzyyVBmoBURzQvI,1096
|
188
194
|
lionagi/service/connections/__init__.py,sha256=yHQZ7OJpCftd6CStYR8inbxjJydYdmv9kCvbUBhJ2zU,362
|
189
|
-
lionagi/service/connections/api_calling.py,sha256=
|
195
|
+
lionagi/service/connections/api_calling.py,sha256=FX9PbpZr3TypgJYfh3G7-gOpaYHLP54GLidvJbbTvAg,9955
|
190
196
|
lionagi/service/connections/endpoint.py,sha256=yNIjq9wETMnytynGbq3qY_dkyaMlaHrcfiZjS-tnmLg,14756
|
191
|
-
lionagi/service/connections/endpoint_config.py,sha256=
|
192
|
-
lionagi/service/connections/header_factory.py,sha256=
|
193
|
-
lionagi/service/connections/match_endpoint.py,sha256=
|
197
|
+
lionagi/service/connections/endpoint_config.py,sha256=6sA06uCzriT6p0kFxhDCFH8N6V6MVp8ytlOw5ctBhDI,5169
|
198
|
+
lionagi/service/connections/header_factory.py,sha256=IYeTQQk7r8FXcdhmW7orCxHjNO-Nb1EOXhgNK7CAp-I,1821
|
199
|
+
lionagi/service/connections/match_endpoint.py,sha256=kHAs6FmWJWjIn4CO7FwZVi8w1lYcvu2vGSf9ww2sCG4,2470
|
194
200
|
lionagi/service/connections/providers/__init__.py,sha256=3lzOakDoBWmMaNnT2g-YwktPKa_Wme4lnPRSmOQfayY,105
|
195
|
-
lionagi/service/connections/providers/anthropic_.py,sha256=
|
196
|
-
lionagi/service/connections/providers/claude_code_.py,sha256=
|
197
|
-
lionagi/service/connections/providers/claude_code_cli.py,sha256=
|
198
|
-
lionagi/service/connections/providers/exa_.py,sha256=
|
199
|
-
lionagi/service/connections/providers/oai_.py,sha256=
|
200
|
-
lionagi/service/connections/providers/ollama_.py,sha256=
|
201
|
-
lionagi/service/connections/providers/perplexity_.py,sha256=
|
202
|
-
lionagi/service/connections/providers/
|
203
|
-
lionagi/service/
|
204
|
-
lionagi/service/
|
201
|
+
lionagi/service/connections/providers/anthropic_.py,sha256=vok8mIyFiuV3K83tOjdYfruA6cv1h_57ML6RtpuW-bU,3157
|
202
|
+
lionagi/service/connections/providers/claude_code_.py,sha256=QjyxuyHyL_9tEHxH7zJx21tLd4VRF69i4Xcwo34f0qE,10413
|
203
|
+
lionagi/service/connections/providers/claude_code_cli.py,sha256=kqEOnCUOOh2O_3NGi6W7r-gdLsbW-Jcp11tm30VEv4Q,4455
|
204
|
+
lionagi/service/connections/providers/exa_.py,sha256=kuWD7yyYRqIa4ChSn0TsxFA5V5LwvFUD-w8TZ6mx4rk,1048
|
205
|
+
lionagi/service/connections/providers/oai_.py,sha256=3x5d6Ei1hKu8Mix0N2V2K21O9dd-2jtAELHhHXj5iHk,6071
|
206
|
+
lionagi/service/connections/providers/ollama_.py,sha256=oqYLWn81KrWoQgId4e4GD_bgrDjQLPOmhqlc5uBuFGk,4569
|
207
|
+
lionagi/service/connections/providers/perplexity_.py,sha256=1GMmxAXsKGsB-xlqxO6hW-QdqoqkU2705NLyejetFSw,1646
|
208
|
+
lionagi/service/connections/providers/types.py,sha256=nxRDBEqCVG4Nw_gfL5NYmeRUEJGAjKNZ-jlL48xYqv0,878
|
209
|
+
lionagi/service/hooks/__init__.py,sha256=Ayllxjd1fR_6NByZlE2zslQ7I0Od-s6-OVe0mzZIeu4,569
|
210
|
+
lionagi/service/hooks/_types.py,sha256=cmgUkthWHY8LLc-JWN8z-1yh5MCM3mRRyci0Hppk8QI,1176
|
211
|
+
lionagi/service/hooks/_utils.py,sha256=51dqdRrln2aJCkCz8g4L6Ik_v9atdFHPzjm9ASu6OvA,2560
|
212
|
+
lionagi/service/hooks/hook_event.py,sha256=ApRCsqB0jk4IWsmm2GZ-QoIzgPXcdyxQcfRZim0h7sU,2420
|
213
|
+
lionagi/service/hooks/hook_registry.py,sha256=JNpbn_Vl4oACVt0inYxunLlRftVUpjD-8NueQs98lcU,7872
|
205
214
|
lionagi/service/third_party/README.md,sha256=qFjWnI8rmLivIyr6Tc-hRZh-rQwntROp76af4MBNJJc,2214
|
206
215
|
lionagi/service/third_party/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
207
216
|
lionagi/service/third_party/anthropic_models.py,sha256=oqSPSlcayYG-fS5BLiLeTtkrpaxgkPhEK_YgneumrOo,4004
|
217
|
+
lionagi/service/third_party/claude_code.py,sha256=ZUNH3pHDqsKyaCRrr-IyU_Ad-SfeyfrLMS-Ht--Wdd8,24765
|
208
218
|
lionagi/service/third_party/exa_models.py,sha256=G_hnekcy-DillPLzMoDQ8ZisVAL8Mp7iMAK4xqAT_3w,5470
|
209
|
-
lionagi/service/third_party/
|
210
|
-
lionagi/service/third_party/pplx_models.py,sha256
|
219
|
+
lionagi/service/third_party/openai_model_names.py,sha256=C44tnqexgc4ZU2-3I_sn5d688hf3WWx-25xBd50bvas,5121
|
220
|
+
lionagi/service/third_party/pplx_models.py,sha256=-EhyJgOWR6rzSv3zczUtk80X6c19p18Dg9KC6l8BFRQ,6473
|
211
221
|
lionagi/session/__init__.py,sha256=kDypY6L3kGPnatAw7YNQAykgg-9MlIBnlhHExaXvt-c,202
|
212
|
-
lionagi/session/branch.py,sha256=
|
222
|
+
lionagi/session/branch.py,sha256=bDEXCScz7TKLVUoNVWQYMUs3Qqyaql0gS2N2ccxFPrk,67851
|
213
223
|
lionagi/session/prompts.py,sha256=GPr0jibyAAqS3awDzGC8SoCL6aWJLLCCbXY0JUuxOC0,3170
|
214
224
|
lionagi/session/session.py,sha256=Gc31wPLFdBOMRs3zEs11KVShvDtLUAqqhbhMoySptqo,11379
|
215
225
|
lionagi/tools/__init__.py,sha256=5y5joOZzfFWERl75auAcNcKC3lImVJ5ZZGvvHZUFCJM,112
|
216
|
-
lionagi/tools/base.py,sha256=
|
226
|
+
lionagi/tools/base.py,sha256=hEGnE4MD0CM4UqnF0xsDRKB0aM-pyrTFHl8utHhyJLU,1897
|
217
227
|
lionagi/tools/types.py,sha256=XtJLY0m-Yi_ZLWhm0KycayvqMCZd--HxfQ0x9vFUYDE,230
|
218
228
|
lionagi/tools/file/__init__.py,sha256=5y5joOZzfFWERl75auAcNcKC3lImVJ5ZZGvvHZUFCJM,112
|
219
|
-
lionagi/tools/file/reader.py,sha256=
|
220
|
-
lionagi/tools/memory/tools.py,sha256=
|
221
|
-
lionagi-0.14.
|
222
|
-
lionagi-0.14.
|
223
|
-
lionagi-0.14.
|
224
|
-
lionagi-0.14.
|
229
|
+
lionagi/tools/file/reader.py,sha256=jnSHVSQ66AHZXQrgRuGmlbwKT5JHYoo-1zv1hKgTEfc,9544
|
230
|
+
lionagi/tools/memory/tools.py,sha256=earYkKxSOz_iXkqVZYTEDfE3dwZYIWPXZrqQ1DYGz4I,15941
|
231
|
+
lionagi-0.14.10.dist-info/METADATA,sha256=dSmotUPRf80FXZ2fDMp16hEGp0Y5rovlXfCs8Cysk9s,22955
|
232
|
+
lionagi-0.14.10.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
233
|
+
lionagi-0.14.10.dist-info/licenses/LICENSE,sha256=VXFWsdoN5AAknBCgFqQNgPWYx7OPp-PFEP961zGdOjc,11288
|
234
|
+
lionagi-0.14.10.dist-info/RECORD,,
|
@@ -1,244 +0,0 @@
|
|
1
|
-
# Copyright (c) 2025, HaiyangLi <quantocean.li at gmail dot com>
|
2
|
-
#
|
3
|
-
# SPDX-License-Identifier: Apache-2.0
|
4
|
-
|
5
|
-
from __future__ import annotations
|
6
|
-
|
7
|
-
import json
|
8
|
-
from pathlib import Path
|
9
|
-
from typing import Any, Literal
|
10
|
-
|
11
|
-
from pydantic import BaseModel, Field, field_validator, model_validator
|
12
|
-
|
13
|
-
from lionagi.utils import is_import_installed
|
14
|
-
|
15
|
-
HAS_CLAUDE_CODE_SDK = is_import_installed("claude_code_sdk")
|
16
|
-
|
17
|
-
# --------------------------------------------------------------------------- constants
|
18
|
-
ClaudePermission = Literal[
|
19
|
-
"default",
|
20
|
-
"acceptEdits",
|
21
|
-
"bypassPermissions",
|
22
|
-
"dangerously-skip-permissions",
|
23
|
-
]
|
24
|
-
|
25
|
-
CLAUDE_CODE_OPTION_PARAMS = {
|
26
|
-
"allowed_tools",
|
27
|
-
"max_thinking_tokens",
|
28
|
-
"mcp_tools",
|
29
|
-
"mcp_servers",
|
30
|
-
"permission_mode",
|
31
|
-
"continue_conversation",
|
32
|
-
"resume",
|
33
|
-
"max_turns",
|
34
|
-
"disallowed_tools",
|
35
|
-
"model",
|
36
|
-
"permission_prompt_tool_name",
|
37
|
-
"cwd",
|
38
|
-
"system_prompt",
|
39
|
-
"append_system_prompt",
|
40
|
-
}
|
41
|
-
|
42
|
-
|
43
|
-
# --------------------------------------------------------------------------- request model
|
44
|
-
class ClaudeCodeRequest(BaseModel):
|
45
|
-
# -- conversational bits -------------------------------------------------
|
46
|
-
prompt: str = Field(description="The prompt for Claude Code")
|
47
|
-
system_prompt: str | None = None
|
48
|
-
append_system_prompt: str | None = None
|
49
|
-
max_turns: int | None = None
|
50
|
-
continue_conversation: bool = False
|
51
|
-
resume: str | None = None
|
52
|
-
|
53
|
-
# -- repo / workspace ----------------------------------------------------
|
54
|
-
repo: Path = Field(default_factory=Path.cwd, exclude=True)
|
55
|
-
ws: str | None = None # sub-directory under repo
|
56
|
-
add_dir: str | None = None # extra read-only mount
|
57
|
-
allowed_tools: list[str] | None = None
|
58
|
-
|
59
|
-
# -- runtime & safety ----------------------------------------------------
|
60
|
-
model: Literal["sonnet", "opus"] | str | None = "sonnet"
|
61
|
-
max_thinking_tokens: int | None = None
|
62
|
-
mcp_tools: list[str] = Field(default_factory=list)
|
63
|
-
mcp_servers: dict[str, Any] = Field(default_factory=dict)
|
64
|
-
mcp_config: str | Path | None = Field(None, exclude=True)
|
65
|
-
permission_mode: ClaudePermission | None = None
|
66
|
-
permission_prompt_tool_name: str | None = None
|
67
|
-
disallowed_tools: list[str] = Field(default_factory=list)
|
68
|
-
|
69
|
-
# -- internal use --------------------------------------------------------
|
70
|
-
auto_finish: bool = Field(
|
71
|
-
default=False,
|
72
|
-
description="Automatically finish the conversation after the first response",
|
73
|
-
)
|
74
|
-
verbose_output: bool = Field(default=False)
|
75
|
-
cli_display_theme: Literal["light", "dark"] = "dark"
|
76
|
-
|
77
|
-
# ------------------------ validators & helpers --------------------------
|
78
|
-
@field_validator("permission_mode", mode="before")
|
79
|
-
def _norm_perm(cls, v):
|
80
|
-
if v in {
|
81
|
-
"dangerously-skip-permissions",
|
82
|
-
"--dangerously-skip-permissions",
|
83
|
-
}:
|
84
|
-
return "bypassPermissions"
|
85
|
-
return v
|
86
|
-
|
87
|
-
# Workspace path derived from repo + ws
|
88
|
-
def cwd(self) -> Path:
|
89
|
-
if not self.ws:
|
90
|
-
return self.repo
|
91
|
-
|
92
|
-
# Convert to Path object for proper validation
|
93
|
-
ws_path = Path(self.ws)
|
94
|
-
|
95
|
-
# Check for absolute paths or directory traversal attempts
|
96
|
-
if ws_path.is_absolute():
|
97
|
-
raise ValueError(
|
98
|
-
f"Workspace path must be relative, got absolute: {self.ws}"
|
99
|
-
)
|
100
|
-
|
101
|
-
if ".." in ws_path.parts:
|
102
|
-
raise ValueError(
|
103
|
-
f"Directory traversal detected in workspace path: {self.ws}"
|
104
|
-
)
|
105
|
-
|
106
|
-
# Resolve paths to handle symlinks and normalize
|
107
|
-
repo_resolved = self.repo.resolve()
|
108
|
-
result = (self.repo / ws_path).resolve()
|
109
|
-
|
110
|
-
# Ensure the resolved path is within the repository bounds
|
111
|
-
try:
|
112
|
-
result.relative_to(repo_resolved)
|
113
|
-
except ValueError:
|
114
|
-
raise ValueError(
|
115
|
-
f"Workspace path escapes repository bounds. "
|
116
|
-
f"Repository: {repo_resolved}, Workspace: {result}"
|
117
|
-
)
|
118
|
-
|
119
|
-
return result
|
120
|
-
|
121
|
-
@model_validator(mode="after")
|
122
|
-
def _check_perm_workspace(self):
|
123
|
-
if self.permission_mode == "bypassPermissions":
|
124
|
-
# Use secure path validation with resolved paths
|
125
|
-
repo_resolved = self.repo.resolve()
|
126
|
-
cwd_resolved = self.cwd().resolve()
|
127
|
-
|
128
|
-
# Check if cwd is within repo bounds using proper path methods
|
129
|
-
try:
|
130
|
-
cwd_resolved.relative_to(repo_resolved)
|
131
|
-
except ValueError:
|
132
|
-
raise ValueError(
|
133
|
-
f"With bypassPermissions, workspace must be within repository bounds. "
|
134
|
-
f"Repository: {repo_resolved}, Workspace: {cwd_resolved}"
|
135
|
-
)
|
136
|
-
return self
|
137
|
-
|
138
|
-
# ------------------------ CLI helpers -----------------------------------
|
139
|
-
def as_cmd_args(self) -> list[str]:
|
140
|
-
"""Build argument list for the *Node* `claude` CLI."""
|
141
|
-
args: list[str] = ["-p", self.prompt, "--output-format", "stream-json"]
|
142
|
-
if self.allowed_tools:
|
143
|
-
args.append("--allowedTools")
|
144
|
-
for tool in self.allowed_tools:
|
145
|
-
args.append(f'"{tool}"')
|
146
|
-
|
147
|
-
if self.disallowed_tools:
|
148
|
-
args.append("--disallowedTools")
|
149
|
-
for tool in self.disallowed_tools:
|
150
|
-
args.append(f'"{tool}"')
|
151
|
-
|
152
|
-
if self.resume:
|
153
|
-
args += ["--resume", self.resume]
|
154
|
-
elif self.continue_conversation:
|
155
|
-
args.append("--continue")
|
156
|
-
|
157
|
-
if self.max_turns:
|
158
|
-
# +1 because CLI counts *pairs*
|
159
|
-
args += ["--max-turns", str(self.max_turns + 1)]
|
160
|
-
|
161
|
-
if self.permission_mode == "bypassPermissions":
|
162
|
-
args += ["--dangerously-skip-permissions"]
|
163
|
-
|
164
|
-
if self.add_dir:
|
165
|
-
args += ["--add-dir", self.add_dir]
|
166
|
-
|
167
|
-
if self.permission_prompt_tool_name:
|
168
|
-
args += [
|
169
|
-
"--permission-prompt-tool",
|
170
|
-
self.permission_prompt_tool_name,
|
171
|
-
]
|
172
|
-
|
173
|
-
if self.mcp_config:
|
174
|
-
args += ["--mcp-config", str(self.mcp_config)]
|
175
|
-
|
176
|
-
args += ["--model", self.model or "sonnet", "--verbose"]
|
177
|
-
return args
|
178
|
-
|
179
|
-
# ------------------------ SDK helpers -----------------------------------
|
180
|
-
def as_claude_options(self):
|
181
|
-
from claude_code_sdk import ClaudeCodeOptions
|
182
|
-
|
183
|
-
data = {
|
184
|
-
k: v
|
185
|
-
for k, v in self.model_dump(exclude_none=True).items()
|
186
|
-
if k in CLAUDE_CODE_OPTION_PARAMS
|
187
|
-
}
|
188
|
-
return ClaudeCodeOptions(**data)
|
189
|
-
|
190
|
-
# ------------------------ convenience constructor -----------------------
|
191
|
-
@classmethod
|
192
|
-
def create(
|
193
|
-
cls,
|
194
|
-
messages: list[dict[str, Any]],
|
195
|
-
resume: str | None = None,
|
196
|
-
continue_conversation: bool | None = None,
|
197
|
-
**kwargs,
|
198
|
-
):
|
199
|
-
if not messages:
|
200
|
-
raise ValueError("messages may not be empty")
|
201
|
-
|
202
|
-
prompt = ""
|
203
|
-
|
204
|
-
# 1. if resume or continue_conversation, use the last message
|
205
|
-
if resume or continue_conversation:
|
206
|
-
continue_conversation = True
|
207
|
-
prompt = messages[-1]["content"]
|
208
|
-
if isinstance(prompt, (dict, list)):
|
209
|
-
prompt = json.dumps(prompt)
|
210
|
-
|
211
|
-
# 2. else, use entire messages except system message
|
212
|
-
else:
|
213
|
-
prompts = []
|
214
|
-
continue_conversation = False
|
215
|
-
for message in messages:
|
216
|
-
if message["role"] != "system":
|
217
|
-
content = message["content"]
|
218
|
-
prompts.append(
|
219
|
-
json.dumps(content)
|
220
|
-
if isinstance(content, (dict, list))
|
221
|
-
else content
|
222
|
-
)
|
223
|
-
|
224
|
-
prompt = "\n".join(prompts)
|
225
|
-
|
226
|
-
# 3. assemble the request data
|
227
|
-
data: dict[str, Any] = dict(
|
228
|
-
prompt=prompt,
|
229
|
-
resume=resume,
|
230
|
-
continue_conversation=bool(continue_conversation),
|
231
|
-
)
|
232
|
-
|
233
|
-
# 4. extract system prompt if available
|
234
|
-
if (messages[0]["role"] == "system") and (
|
235
|
-
resume or continue_conversation
|
236
|
-
):
|
237
|
-
data["system_prompt"] = messages[0]["content"]
|
238
|
-
if kwargs.get("append_system_prompt"):
|
239
|
-
data["append_system_prompt"] = str(
|
240
|
-
kwargs.get("append_system_prompt")
|
241
|
-
)
|
242
|
-
|
243
|
-
data.update(kwargs)
|
244
|
-
return cls.model_validate(data, strict=False)
|