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.
Files changed (54) hide show
  1. lionagi/_errors.py +120 -11
  2. lionagi/_types.py +0 -6
  3. lionagi/config.py +3 -1
  4. lionagi/fields/reason.py +1 -1
  5. lionagi/libs/concurrency/throttle.py +79 -0
  6. lionagi/libs/parse.py +2 -1
  7. lionagi/libs/unstructured/__init__.py +0 -0
  8. lionagi/libs/unstructured/pdf_to_image.py +45 -0
  9. lionagi/libs/unstructured/read_image_to_base64.py +33 -0
  10. lionagi/libs/validate/to_num.py +378 -0
  11. lionagi/libs/validate/xml_parser.py +203 -0
  12. lionagi/models/operable_model.py +8 -3
  13. lionagi/operations/flow.py +0 -1
  14. lionagi/protocols/generic/event.py +2 -0
  15. lionagi/protocols/generic/log.py +26 -10
  16. lionagi/protocols/operatives/step.py +1 -1
  17. lionagi/protocols/types.py +9 -1
  18. lionagi/service/__init__.py +22 -1
  19. lionagi/service/connections/api_calling.py +57 -2
  20. lionagi/service/connections/endpoint_config.py +1 -1
  21. lionagi/service/connections/header_factory.py +4 -2
  22. lionagi/service/connections/match_endpoint.py +10 -10
  23. lionagi/service/connections/providers/anthropic_.py +5 -2
  24. lionagi/service/connections/providers/claude_code_.py +13 -17
  25. lionagi/service/connections/providers/claude_code_cli.py +51 -16
  26. lionagi/service/connections/providers/exa_.py +5 -3
  27. lionagi/service/connections/providers/oai_.py +116 -81
  28. lionagi/service/connections/providers/ollama_.py +38 -18
  29. lionagi/service/connections/providers/perplexity_.py +36 -14
  30. lionagi/service/connections/providers/types.py +30 -0
  31. lionagi/service/hooks/__init__.py +25 -0
  32. lionagi/service/hooks/_types.py +52 -0
  33. lionagi/service/hooks/_utils.py +85 -0
  34. lionagi/service/hooks/hook_event.py +67 -0
  35. lionagi/service/hooks/hook_registry.py +221 -0
  36. lionagi/service/imodel.py +120 -34
  37. lionagi/service/third_party/claude_code.py +715 -0
  38. lionagi/service/third_party/openai_model_names.py +198 -0
  39. lionagi/service/third_party/pplx_models.py +16 -8
  40. lionagi/service/types.py +21 -0
  41. lionagi/session/branch.py +1 -4
  42. lionagi/tools/base.py +1 -3
  43. lionagi/tools/file/reader.py +1 -1
  44. lionagi/tools/memory/tools.py +2 -2
  45. lionagi/utils.py +12 -775
  46. lionagi/version.py +1 -1
  47. {lionagi-0.14.8.dist-info → lionagi-0.14.10.dist-info}/METADATA +6 -2
  48. {lionagi-0.14.8.dist-info → lionagi-0.14.10.dist-info}/RECORD +50 -40
  49. lionagi/service/connections/providers/_claude_code/__init__.py +0 -3
  50. lionagi/service/connections/providers/_claude_code/models.py +0 -244
  51. lionagi/service/connections/providers/_claude_code/stream_cli.py +0 -359
  52. lionagi/service/third_party/openai_models.py +0 -18241
  53. {lionagi-0.14.8.dist-info → lionagi-0.14.10.dist-info}/WHEEL +0 -0
  54. {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.8"
1
+ __version__ = "0.14.10"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lionagi
3
- Version: 0.14.8
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
  ![PyPI - Version](https://img.shields.io/pypi/v/lionagi?labelColor=233476aa&color=231fc935)
@@ -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=S02keQTY2IMkTvpLe00v7P7b8QNJ0PrZ1KWmQWCEQAA,500
4
- lionagi/_types.py,sha256=9cKKDMl0l5DLGhHzDAtnlKT2XqLv1IeynmhFYBno2_k,185
5
- lionagi/config.py,sha256=Dxs5FA9UCv1YX5H54qOJcPsDrIF9wFokWEPZ212eH-k,3715
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=n2aUMSnLLgy7HWFlfzDV1OqMDbatLNX0QYc7jIjXwQA,75023
9
- lionagi/version.py,sha256=FrbFRQ_ImRf8C9xWDXvZmcPev0r6romK0PIGZ4NmgIg,23
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=eTGI9jDaaZJInUjCR9lEpYvw2_1UUF-xzCVCFP3-JRI,1437
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=JRS3bql0InHJqATnAatl-hQv4N--XXw4P77JHhTFnrc,1011
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=fXbcpBjO-SoaeF8fn-F1_KIcYw9_L73VIUM1BDg5hj4,19905
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=0HFLJCYRo6YKXNVCLeZT9oVuEyRhMxsOXs0grYl3ySU,17568
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=qhAGExKJFa0uL1TfdJk-gNx3Z6b5zWu17s5HyYnI7Ps,2436
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=InjBd2K9aSYxgai1c20d4jaJOkEx5VGFfb7iZbiMiNA,5200
148
- lionagi/protocols/generic/log.py,sha256=vepclOaY3fdR1QgFDj9usOffsx9T-9PbgwXjTvm6twQ,7441
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=PHKehsJESx0I2PnWQG8lHgX7mPp3jX1eiLAQ22FUV3w,9835
181
- lionagi/service/__init__.py,sha256=DMGXIqPsmut9H5GT0ZeSzQIzYzzPwI-2gLXydpbwiV8,21
182
- lionagi/service/imodel.py,sha256=jE1Y3JzGwJZesHQtRSadVTAHA2TGdBAwfmzQoOA5Meg,12651
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=zZQL9tTTuqAPbUTi2U4wl5tKBNWl51qbPKwDVGhTeqs,546
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=XetCrjMhOHNKGGv-NzHhBhVS7XjKPalrS_iExzU-4S4,8005
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=7u5HDWe-4nttG2cDXtx_OxPzAI4DAA0bPtjJ6BA4gk8,5162
192
- lionagi/service/connections/header_factory.py,sha256=22sG4ian3MiNklF6SdQqkEYgtWKOZik_yDE0Lna6BiE,1754
193
- lionagi/service/connections/match_endpoint.py,sha256=K3I4vU6GH6utlEArlyDFUmNdnp94CEPxqKrehAx29J4,2410
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=SUPnw2UqjY5wuHXLHas6snMTzhQ-UuixvPYbkVnXn34,3083
196
- lionagi/service/connections/providers/claude_code_.py,sha256=YX1Ue7bF4Fi4NpkSgKx1uZ6XzF-x0I0Vks0PmMGk4lk,10683
197
- lionagi/service/connections/providers/claude_code_cli.py,sha256=7zW8pyxpaG9fsP4UUfGevGoekv4gdAKZED06qFjr7gY,3353
198
- lionagi/service/connections/providers/exa_.py,sha256=GGWaD9jd5gKM257OfUaIBBKIqR1NrNcBE67p_7JbK7g,938
199
- lionagi/service/connections/providers/oai_.py,sha256=FmQMEmOY7H7dZd4og-_cdd1Unzy4lkIzMsTtEsm-yVE,4782
200
- lionagi/service/connections/providers/ollama_.py,sha256=jdx6dGeChwVk5TFfFRbpnrpKzj8YQZw6D5iWJ6zYmfk,4096
201
- lionagi/service/connections/providers/perplexity_.py,sha256=9MH9YmMy9Jg7JDMJHQxxMYHyjJ4NP0OlN7sCuhla85I,917
202
- lionagi/service/connections/providers/_claude_code/__init__.py,sha256=3lzOakDoBWmMaNnT2g-YwktPKa_Wme4lnPRSmOQfayY,105
203
- lionagi/service/connections/providers/_claude_code/models.py,sha256=Iyx8YPv56n_GZN8e3mcZ6e7sYllhlVxX2Mp4zWd0BzM,8320
204
- lionagi/service/connections/providers/_claude_code/stream_cli.py,sha256=0brD9mWRXPIiRSmha5n77JudW5tmhLNZmsjGgUWM060,12388
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/openai_models.py,sha256=sF-fQ726CnaDBgLY_r2NdPqc3GicPKhZjh5F8IfjBO0,501904
210
- lionagi/service/third_party/pplx_models.py,sha256=Nkm1ftESBa_NwP9ITBUNqLmAZ3Jh92aL732g_i6T8LQ,5947
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=5hM-YSp45KNYyXhiEk8LRta84ZJdwzaJaPXJORMbRms,67979
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=cld32pyjaTUdyiqZ8hNyJjWKAhcJ8RQNhgImI7R8b-E,1940
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=0TdnfVGVCKuM58MmGM-NyVjhU9BFoitkNYEepdc0z_Y,9529
220
- lionagi/tools/memory/tools.py,sha256=zTGBenVsF8Wuh303kWntmQSGlAFKonHNdh5ePuQ26KE,15948
221
- lionagi-0.14.8.dist-info/METADATA,sha256=_XF7GKTpMRcN_jpow1LJhSTdESVCqcN4el14Sc5-Lxc,22794
222
- lionagi-0.14.8.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
223
- lionagi-0.14.8.dist-info/licenses/LICENSE,sha256=VXFWsdoN5AAknBCgFqQNgPWYx7OPp-PFEP961zGdOjc,11288
224
- lionagi-0.14.8.dist-info/RECORD,,
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,3 +0,0 @@
1
- # Copyright (c) 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
3
- # SPDX-License-Identifier: Apache-2.0
@@ -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)