lionagi 0.12.8__tar.gz → 0.13.0__tar.gz

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 (262) hide show
  1. {lionagi-0.12.8 → lionagi-0.13.0}/PKG-INFO +3 -3
  2. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/schema/load_pydantic_model_from_schema.py +0 -9
  3. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/service/connections/endpoint_config.py +7 -3
  4. lionagi-0.13.0/lionagi/service/connections/providers/claude_code_.py +311 -0
  5. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/service/imodel.py +9 -4
  6. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/service/third_party/anthropic_models.py +1 -1
  7. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/service/token_calculator.py +1 -1
  8. lionagi-0.13.0/lionagi/version.py +1 -0
  9. {lionagi-0.12.8 → lionagi-0.13.0}/pyproject.toml +2 -2
  10. {lionagi-0.12.8 → lionagi-0.13.0}/uv.lock +5 -5
  11. lionagi-0.12.8/lionagi/service/connections/providers/claude_code_.py +0 -206
  12. lionagi-0.12.8/lionagi/version.py +0 -1
  13. {lionagi-0.12.8 → lionagi-0.13.0}/.coveragerc +0 -0
  14. {lionagi-0.12.8 → lionagi-0.13.0}/.env.example +0 -0
  15. {lionagi-0.12.8 → lionagi-0.13.0}/.github/FUNDING.yml +0 -0
  16. {lionagi-0.12.8 → lionagi-0.13.0}/.github/dependabot.yml +0 -0
  17. {lionagi-0.12.8 → lionagi-0.13.0}/.github/workflows/ci.yml +0 -0
  18. {lionagi-0.12.8 → lionagi-0.13.0}/.github/workflows/codeql.yml +0 -0
  19. {lionagi-0.12.8 → lionagi-0.13.0}/.github/workflows/docs.yml +0 -0
  20. {lionagi-0.12.8 → lionagi-0.13.0}/.github/workflows/release.yml +0 -0
  21. {lionagi-0.12.8 → lionagi-0.13.0}/.gitignore +0 -0
  22. {lionagi-0.12.8 → lionagi-0.13.0}/.pre-commit-config.yaml +0 -0
  23. {lionagi-0.12.8 → lionagi-0.13.0}/.python-version +0 -0
  24. {lionagi-0.12.8 → lionagi-0.13.0}/CODE_OF_CONDUCT.md +0 -0
  25. {lionagi-0.12.8 → lionagi-0.13.0}/CONTRIBUTING.md +0 -0
  26. {lionagi-0.12.8 → lionagi-0.13.0}/LICENSE +0 -0
  27. {lionagi-0.12.8 → lionagi-0.13.0}/README.md +0 -0
  28. {lionagi-0.12.8 → lionagi-0.13.0}/cookbooks/ch01_get_started.md +0 -0
  29. {lionagi-0.12.8 → lionagi-0.13.0}/cookbooks/ch02_concepts.md +0 -0
  30. {lionagi-0.12.8 → lionagi-0.13.0}/docs/Makefile +0 -0
  31. {lionagi-0.12.8 → lionagi-0.13.0}/docs/_static/custom.css +0 -0
  32. {lionagi-0.12.8 → lionagi-0.13.0}/docs/_templates/layout.html +0 -0
  33. {lionagi-0.12.8 → lionagi-0.13.0}/docs/conf.py +0 -0
  34. {lionagi-0.12.8 → lionagi-0.13.0}/docs/index.rst +0 -0
  35. {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/action.rst +0 -0
  36. {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/adapter.rst +0 -0
  37. {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/branch.rst +0 -0
  38. {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/branch_operations.rst +0 -0
  39. {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/concepts.rst +0 -0
  40. {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/element_id.rst +0 -0
  41. {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/event.rst +0 -0
  42. {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/form.rst +0 -0
  43. {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/graph.rst +0 -0
  44. {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/index.rst +0 -0
  45. {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/instruct.rst +0 -0
  46. {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/lib_file.rst +0 -0
  47. {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/lib_nested.rst +0 -0
  48. {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/lib_package.rst +0 -0
  49. {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/lib_schema.rst +0 -0
  50. {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/lib_validate.rst +0 -0
  51. {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/log.rst +0 -0
  52. {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/mail.rst +0 -0
  53. {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/message.rst +0 -0
  54. {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/models.rst +0 -0
  55. {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/operative_step.rst +0 -0
  56. {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/pile.rst +0 -0
  57. {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/processor.rst +0 -0
  58. {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/progression.rst +0 -0
  59. {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/service.rst +0 -0
  60. {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/session.rst +0 -0
  61. {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/utils.rst +0 -0
  62. {lionagi-0.12.8 → lionagi-0.13.0}/docs/tutorials/get_started.rst +0 -0
  63. {lionagi-0.12.8 → lionagi-0.13.0}/docs/tutorials/get_started_pt2.rst +0 -0
  64. {lionagi-0.12.8 → lionagi-0.13.0}/docs/tutorials/get_started_pt3.rst +0 -0
  65. {lionagi-0.12.8 → lionagi-0.13.0}/docs/tutorials/index.rst +0 -0
  66. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/__init__.py +0 -0
  67. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/_class_registry.py +0 -0
  68. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/_errors.py +0 -0
  69. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/_types.py +0 -0
  70. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/config.py +0 -0
  71. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/fields/__init__.py +0 -0
  72. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/fields/action.py +0 -0
  73. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/fields/base.py +0 -0
  74. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/fields/code.py +0 -0
  75. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/fields/file.py +0 -0
  76. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/fields/instruct.py +0 -0
  77. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/fields/reason.py +0 -0
  78. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/fields/research.py +0 -0
  79. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/__init__.py +0 -0
  80. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/file/__init__.py +0 -0
  81. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/file/chunk.py +0 -0
  82. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/file/concat.py +0 -0
  83. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/file/concat_files.py +0 -0
  84. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/file/file_ops.py +0 -0
  85. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/file/params.py +0 -0
  86. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/file/process.py +0 -0
  87. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/file/save.py +0 -0
  88. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/nested/__init__.py +0 -0
  89. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/nested/flatten.py +0 -0
  90. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/nested/nfilter.py +0 -0
  91. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/nested/nget.py +0 -0
  92. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/nested/ninsert.py +0 -0
  93. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/nested/nmerge.py +0 -0
  94. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/nested/npop.py +0 -0
  95. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/nested/nset.py +0 -0
  96. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/nested/unflatten.py +0 -0
  97. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/nested/utils.py +0 -0
  98. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/package/__init__.py +0 -0
  99. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/package/imports.py +0 -0
  100. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/package/management.py +0 -0
  101. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/package/params.py +0 -0
  102. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/package/system.py +0 -0
  103. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/parse.py +0 -0
  104. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/schema/__init__.py +0 -0
  105. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/schema/as_readable.py +0 -0
  106. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/schema/extract_code_block.py +0 -0
  107. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/schema/extract_docstring.py +0 -0
  108. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/schema/function_to_schema.py +0 -0
  109. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/schema/json_schema.py +0 -0
  110. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/token_transform/__init__.py +0 -0
  111. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/token_transform/base.py +0 -0
  112. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/token_transform/llmlingua.py +0 -0
  113. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/token_transform/perplexity.py +0 -0
  114. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/token_transform/symbolic_compress_context.py +0 -0
  115. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/token_transform/synthlang.py +0 -0
  116. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/token_transform/synthlang_/base.py +0 -0
  117. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/token_transform/synthlang_/resources/frameworks/abstract_algebra.toml +0 -0
  118. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/token_transform/synthlang_/resources/frameworks/category_theory.toml +0 -0
  119. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/token_transform/synthlang_/resources/frameworks/complex_analysis.toml +0 -0
  120. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/token_transform/synthlang_/resources/frameworks/framework_options.json +0 -0
  121. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/token_transform/synthlang_/resources/frameworks/group_theory.toml +0 -0
  122. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/token_transform/synthlang_/resources/frameworks/math_logic.toml +0 -0
  123. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/token_transform/synthlang_/resources/frameworks/reflective_patterns.toml +0 -0
  124. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/token_transform/synthlang_/resources/frameworks/set_theory.toml +0 -0
  125. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/token_transform/synthlang_/resources/frameworks/topology_fundamentals.toml +0 -0
  126. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/token_transform/synthlang_/resources/mapping/lion_emoji_mapping.toml +0 -0
  127. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/token_transform/synthlang_/resources/mapping/python_math_mapping.toml +0 -0
  128. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/token_transform/synthlang_/resources/mapping/rust_chinese_mapping.toml +0 -0
  129. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/token_transform/synthlang_/resources/utility/base_synthlang_system_prompt.toml +0 -0
  130. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/token_transform/synthlang_/translate_to_synthlang.py +0 -0
  131. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/token_transform/types.py +0 -0
  132. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/validate/__init__.py +0 -0
  133. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/validate/common_field_validators.py +0 -0
  134. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/validate/fuzzy_match_keys.py +0 -0
  135. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/validate/fuzzy_validate_mapping.py +0 -0
  136. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/validate/string_similarity.py +0 -0
  137. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/validate/validate_boolean.py +0 -0
  138. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/models/__init__.py +0 -0
  139. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/models/field_model.py +0 -0
  140. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/models/hashable_model.py +0 -0
  141. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/models/model_params.py +0 -0
  142. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/models/note.py +0 -0
  143. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/models/operable_model.py +0 -0
  144. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/models/schema_model.py +0 -0
  145. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/ReAct/ReAct.py +0 -0
  146. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/ReAct/__init__.py +0 -0
  147. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/ReAct/utils.py +0 -0
  148. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/__init__.py +0 -0
  149. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/_act/__init__.py +0 -0
  150. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/_act/act.py +0 -0
  151. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/brainstorm/__init__.py +0 -0
  152. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/brainstorm/brainstorm.py +0 -0
  153. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/brainstorm/prompt.py +0 -0
  154. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/chat/__init__.py +0 -0
  155. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/chat/chat.py +0 -0
  156. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/communicate/__init__.py +0 -0
  157. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/communicate/communicate.py +0 -0
  158. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/instruct/__init__.py +0 -0
  159. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/instruct/instruct.py +0 -0
  160. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/interpret/__init__.py +0 -0
  161. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/interpret/interpret.py +0 -0
  162. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/manager.py +0 -0
  163. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/operate/__init__.py +0 -0
  164. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/operate/operate.py +0 -0
  165. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/parse/__init__.py +0 -0
  166. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/parse/parse.py +0 -0
  167. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/plan/__init__.py +0 -0
  168. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/plan/plan.py +0 -0
  169. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/plan/prompt.py +0 -0
  170. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/select/__init__.py +0 -0
  171. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/select/select.py +0 -0
  172. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/select/utils.py +0 -0
  173. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/translate/__init__.py +0 -0
  174. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/translate/translate.py +0 -0
  175. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/types.py +0 -0
  176. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/utils.py +0 -0
  177. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/__init__.py +0 -0
  178. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/_concepts.py +0 -0
  179. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/action/__init__.py +0 -0
  180. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/action/function_calling.py +0 -0
  181. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/action/manager.py +0 -0
  182. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/action/tool.py +0 -0
  183. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/forms/__init__.py +0 -0
  184. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/forms/base.py +0 -0
  185. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/forms/flow.py +0 -0
  186. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/forms/form.py +0 -0
  187. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/forms/report.py +0 -0
  188. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/generic/__init__.py +0 -0
  189. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/generic/element.py +0 -0
  190. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/generic/event.py +0 -0
  191. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/generic/log.py +0 -0
  192. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/generic/pile.py +0 -0
  193. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/generic/processor.py +0 -0
  194. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/generic/progression.py +0 -0
  195. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/graph/__init__.py +0 -0
  196. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/graph/edge.py +0 -0
  197. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/graph/graph.py +0 -0
  198. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/graph/node.py +0 -0
  199. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/mail/__init__.py +0 -0
  200. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/mail/exchange.py +0 -0
  201. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/mail/mail.py +0 -0
  202. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/mail/mailbox.py +0 -0
  203. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/mail/manager.py +0 -0
  204. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/mail/package.py +0 -0
  205. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/messages/__init__.py +0 -0
  206. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/messages/action_request.py +0 -0
  207. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/messages/action_response.py +0 -0
  208. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/messages/assistant_response.py +0 -0
  209. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/messages/base.py +0 -0
  210. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/messages/instruction.py +0 -0
  211. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/messages/manager.py +0 -0
  212. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/messages/message.py +0 -0
  213. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/messages/system.py +0 -0
  214. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/messages/templates/README.md +0 -0
  215. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/messages/templates/action_request.jinja2 +0 -0
  216. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/messages/templates/action_response.jinja2 +0 -0
  217. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/messages/templates/assistant_response.jinja2 +0 -0
  218. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/messages/templates/instruction_message.jinja2 +0 -0
  219. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/messages/templates/system_message.jinja2 +0 -0
  220. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/messages/templates/tool_schemas.jinja2 +0 -0
  221. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/operatives/__init__.py +0 -0
  222. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/operatives/operative.py +0 -0
  223. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/operatives/step.py +0 -0
  224. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/types.py +0 -0
  225. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/py.typed +0 -0
  226. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/service/__init__.py +0 -0
  227. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/service/connections/__init__.py +0 -0
  228. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/service/connections/api_calling.py +0 -0
  229. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/service/connections/endpoint.py +0 -0
  230. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/service/connections/header_factory.py +0 -0
  231. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/service/connections/match_endpoint.py +0 -0
  232. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/service/connections/providers/__init__.py +0 -0
  233. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/service/connections/providers/anthropic_.py +0 -0
  234. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/service/connections/providers/exa_.py +0 -0
  235. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/service/connections/providers/oai_.py +0 -0
  236. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/service/connections/providers/ollama_.py +0 -0
  237. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/service/connections/providers/perplexity_.py +0 -0
  238. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/service/manager.py +0 -0
  239. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/service/rate_limited_processor.py +0 -0
  240. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/service/resilience.py +0 -0
  241. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/service/third_party/README.md +0 -0
  242. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/service/third_party/__init__.py +0 -0
  243. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/service/third_party/exa_models.py +0 -0
  244. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/service/third_party/openai_models.py +0 -0
  245. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/service/third_party/pplx_models.py +0 -0
  246. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/service/types.py +0 -0
  247. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/session/__init__.py +0 -0
  248. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/session/branch.py +0 -0
  249. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/session/prompts.py +0 -0
  250. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/session/session.py +0 -0
  251. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/settings.py +0 -0
  252. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/tools/__init__.py +0 -0
  253. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/tools/base.py +0 -0
  254. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/tools/file/__init__.py +0 -0
  255. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/tools/file/reader.py +0 -0
  256. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/tools/memory/tools.py +0 -0
  257. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/tools/types.py +0 -0
  258. {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/utils.py +0 -0
  259. {lionagi-0.12.8 → lionagi-0.13.0}/main.py +0 -0
  260. {lionagi-0.12.8 → lionagi-0.13.0}/scripts/README.md +0 -0
  261. {lionagi-0.12.8 → lionagi-0.13.0}/scripts/concat.py +0 -0
  262. {lionagi-0.12.8 → lionagi-0.13.0}/scripts/config.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lionagi
3
- Version: 0.12.8
3
+ Version: 0.13.0
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
@@ -230,11 +230,11 @@ Requires-Dist: python-dotenv>=1.1.0
230
230
  Requires-Dist: tiktoken>=0.8.0
231
231
  Requires-Dist: toml>=0.9.0
232
232
  Provides-Extra: all
233
- Requires-Dist: claude-code-sdk>=0.0.10; extra == 'all'
233
+ Requires-Dist: claude-code-sdk>=0.0.14; extra == 'all'
234
234
  Requires-Dist: docling>=2.15.1; extra == 'all'
235
235
  Requires-Dist: ollama>=0.5.0; extra == 'all'
236
236
  Provides-Extra: claude-code
237
- Requires-Dist: claude-code-sdk>=0.0.10; extra == 'claude-code'
237
+ Requires-Dist: claude-code-sdk>=0.0.14; extra == 'claude-code'
238
238
  Provides-Extra: docs
239
239
  Requires-Dist: furo>=2024.8.6; extra == 'docs'
240
240
  Requires-Dist: sphinx-autobuild>=2024.10.3; extra == 'docs'
@@ -151,9 +151,6 @@ def load_pydantic_model_from_schema(
151
151
  base_class="pydantic.BaseModel",
152
152
  )
153
153
  except Exception as e:
154
- # Optional: Print generated code on failure for debugging
155
- # if output_file.exists():
156
- # print(f"--- Generated Code (Error) ---\n{output_file.read_text()}\n--------------------------")
157
154
  error_msg = "Failed to generate model code"
158
155
  raise RuntimeError(error_msg) from e
159
156
 
@@ -175,15 +172,9 @@ def load_pydantic_model_from_schema(
175
172
  # --- 3. Import the Generated Module Dynamically ---
176
173
  try:
177
174
  spec, generated_module = get_modules()
178
- # Important: Make pydantic available within the executed module's globals
179
- # if it's not explicitly imported by the generated code for some reason.
180
- # Usually, datamodel-code-generator handles imports well.
181
- # generated_module.__dict__['BaseModel'] = BaseModel
182
175
  spec.loader.exec_module(generated_module)
183
176
 
184
177
  except Exception as e:
185
- # Optional: Print generated code on failure for debugging
186
- # print(f"--- Generated Code (Import Error) ---\n{output_file.read_text()}\n--------------------------")
187
178
  error_msg = f"Failed to load generated module ({output_file})"
188
179
  raise RuntimeError(error_msg) from e
189
180
 
@@ -53,7 +53,6 @@ class EndpointConfig(BaseModel):
53
53
 
54
54
  @model_validator(mode="after")
55
55
  def _validate_api_key(self):
56
-
57
56
  if self.api_key is not None:
58
57
  if isinstance(self.api_key, SecretStr):
59
58
  self._api_key = self.api_key.get_secret_value()
@@ -61,6 +60,9 @@ class EndpointConfig(BaseModel):
61
60
  # Skip settings lookup for ollama special case
62
61
  if self.provider == "ollama" and self.api_key == "ollama_key":
63
62
  self._api_key = "ollama_key"
63
+ if self.provider == "claude_code":
64
+ self._api_key = "dummy"
65
+
64
66
  else:
65
67
  from lionagi.config import settings
66
68
 
@@ -89,9 +91,11 @@ class EndpointConfig(BaseModel):
89
91
  if isinstance(v, BaseModel):
90
92
  return v.__class__
91
93
  if isinstance(v, dict | str):
92
- from lionagi.libs.schema import SchemaUtil
94
+ from lionagi.libs.schema.load_pydantic_model_from_schema import (
95
+ load_pydantic_model_from_schema,
96
+ )
93
97
 
94
- return SchemaUtil.load_pydantic_model_from_schema(v)
98
+ return load_pydantic_model_from_schema(v)
95
99
  except Exception as e:
96
100
  raise ValueError("Invalid request options") from e
97
101
  raise ValueError(
@@ -0,0 +1,311 @@
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 claude_code_sdk import ClaudeCodeOptions
12
+ from claude_code_sdk import query as sdk_query
13
+ from pydantic import BaseModel, Field, field_validator, model_validator
14
+
15
+ from lionagi.service.connections.endpoint import Endpoint
16
+ from lionagi.service.connections.endpoint_config import EndpointConfig
17
+ from lionagi.utils import to_dict
18
+
19
+ # --------------------------------------------------------------------------- constants
20
+ ClaudePermission = Literal[
21
+ "default",
22
+ "acceptEdits",
23
+ "bypassPermissions",
24
+ "dangerously-skip-permissions",
25
+ ]
26
+
27
+ CLAUDE_CODE_OPTION_PARAMS = {
28
+ "allowed_tools",
29
+ "max_thinking_tokens",
30
+ "mcp_tools",
31
+ "mcp_servers",
32
+ "permission_mode",
33
+ "continue_conversation",
34
+ "resume",
35
+ "max_turns",
36
+ "disallowed_tools",
37
+ "model",
38
+ "permission_prompt_tool_name",
39
+ "cwd",
40
+ "system_prompt",
41
+ "append_system_prompt",
42
+ }
43
+
44
+
45
+ # --------------------------------------------------------------------------- request model
46
+ class ClaudeCodeRequest(BaseModel):
47
+ # -- conversational bits -------------------------------------------------
48
+ prompt: str = Field(description="The prompt for Claude Code")
49
+ system_prompt: str | None = None
50
+ append_system_prompt: str | None = None
51
+ max_turns: int | None = None
52
+ continue_conversation: bool = False
53
+ resume: str | None = None
54
+
55
+ # -- repo / workspace ----------------------------------------------------
56
+ repo: Path = Field(default_factory=Path.cwd, exclude=True)
57
+ ws: str | None = None # sub-directory under repo
58
+ add_dir: str | None = None # extra read-only mount
59
+ allowed_tools: list[str] | None = None
60
+
61
+ # -- runtime & safety ----------------------------------------------------
62
+ model: Literal["sonnet", "opus"] | str | None = "sonnet"
63
+ max_thinking_tokens: int | None = None
64
+ mcp_tools: list[str] = Field(default_factory=list)
65
+ mcp_servers: dict[str, Any] = Field(default_factory=dict)
66
+ permission_mode: ClaudePermission | None = None
67
+ permission_prompt_tool_name: str | None = None
68
+ disallowed_tools: list[str] = Field(default_factory=list)
69
+
70
+ # ------------------------ validators & helpers --------------------------
71
+ @field_validator("permission_mode", mode="before")
72
+ def _norm_perm(cls, v):
73
+ if v in {
74
+ "dangerously-skip-permissions",
75
+ "--dangerously-skip-permissions",
76
+ }:
77
+ return "bypassPermissions"
78
+ return v
79
+
80
+ # Workspace path derived from repo + ws
81
+ def cwd(self) -> Path:
82
+ if not self.ws:
83
+ return self.repo
84
+
85
+ # Convert to Path object for proper validation
86
+ ws_path = Path(self.ws)
87
+
88
+ # Check for absolute paths or directory traversal attempts
89
+ if ws_path.is_absolute():
90
+ raise ValueError(
91
+ f"Workspace path must be relative, got absolute: {self.ws}"
92
+ )
93
+
94
+ if ".." in ws_path.parts:
95
+ raise ValueError(
96
+ f"Directory traversal detected in workspace path: {self.ws}"
97
+ )
98
+
99
+ # Resolve paths to handle symlinks and normalize
100
+ repo_resolved = self.repo.resolve()
101
+ result = (self.repo / ws_path).resolve()
102
+
103
+ # Ensure the resolved path is within the repository bounds
104
+ try:
105
+ result.relative_to(repo_resolved)
106
+ except ValueError:
107
+ raise ValueError(
108
+ f"Workspace path escapes repository bounds. "
109
+ f"Repository: {repo_resolved}, Workspace: {result}"
110
+ )
111
+
112
+ return result
113
+
114
+ @model_validator(mode="after")
115
+ def _check_perm_workspace(self):
116
+ if self.permission_mode == "bypassPermissions":
117
+ # Use secure path validation with resolved paths
118
+ repo_resolved = self.repo.resolve()
119
+ cwd_resolved = self.cwd().resolve()
120
+
121
+ # Check if cwd is within repo bounds using proper path methods
122
+ try:
123
+ cwd_resolved.relative_to(repo_resolved)
124
+ except ValueError:
125
+ raise ValueError(
126
+ f"With bypassPermissions, workspace must be within repository bounds. "
127
+ f"Repository: {repo_resolved}, Workspace: {cwd_resolved}"
128
+ )
129
+ return self
130
+
131
+ # ------------------------ CLI helpers -----------------------------------
132
+ def as_cmd_args(self) -> list[str]:
133
+ """Build argument list for the *Node* `claude` CLI."""
134
+ full_prompt = f"Human User: {self.prompt}\n\nAssistant:"
135
+ args: list[str] = ["-p", full_prompt, "--output-format", "stream-json"]
136
+ if self.allowed_tools:
137
+ args.append("--allowedTools")
138
+ for tool in self.allowed_tools:
139
+ args.append(f'"{tool}"')
140
+
141
+ if self.disallowed_tools:
142
+ args.append("--disallowedTools")
143
+ for tool in self.disallowed_tools:
144
+ args.append(f'"{tool}"')
145
+
146
+ if self.resume:
147
+ args += ["--resume", self.resume]
148
+ elif self.continue_conversation:
149
+ args.append("--continue")
150
+
151
+ if self.max_turns:
152
+ # +1 because CLI counts *pairs*
153
+ args += ["--max-turns", str(self.max_turns + 1)]
154
+
155
+ if self.permission_mode == "bypassPermissions":
156
+ args += ["--dangerously-skip-permissions"]
157
+
158
+ if self.add_dir:
159
+ args += ["--add-dir", self.add_dir]
160
+
161
+ args += ["--model", self.model or "sonnet", "--verbose"]
162
+ return args
163
+
164
+ # ------------------------ SDK helpers -----------------------------------
165
+ def as_claude_options(self) -> ClaudeCodeOptions:
166
+ data = {
167
+ k: v
168
+ for k, v in self.model_dump(exclude_none=True).items()
169
+ if k in CLAUDE_CODE_OPTION_PARAMS
170
+ }
171
+ return ClaudeCodeOptions(**data)
172
+
173
+ # ------------------------ convenience constructor -----------------------
174
+ @classmethod
175
+ def create(
176
+ cls,
177
+ messages: list[dict[str, Any]],
178
+ resume: str | None = None,
179
+ continue_conversation: bool | None = None,
180
+ **kwargs,
181
+ ):
182
+ if not messages:
183
+ raise ValueError("messages may not be empty")
184
+
185
+ prompt = messages[-1]["content"]
186
+ if isinstance(prompt, (dict, list)):
187
+ prompt = json.dumps(prompt)
188
+
189
+ if resume and continue_conversation is None:
190
+ continue_conversation = True
191
+
192
+ data: dict[str, Any] = dict(
193
+ prompt=prompt,
194
+ resume=resume,
195
+ continue_conversation=bool(continue_conversation),
196
+ )
197
+
198
+ if (messages[0]["role"] == "system") and (
199
+ resume or continue_conversation
200
+ ):
201
+ data["system_prompt"] = messages[0]["content"]
202
+
203
+ # Merge optional system prompts
204
+ if kwargs.get("system_prompt"):
205
+ data["append_system_prompt"] = kwargs.pop("system_prompt")
206
+
207
+ data.update(kwargs)
208
+ return cls.model_validate(data, strict=False)
209
+
210
+
211
+ # --------------------------------------------------------------------------- SDK endpoint
212
+ ENDPOINT_CONFIG = EndpointConfig(
213
+ name="claude_code",
214
+ provider="claude_code",
215
+ base_url="internal",
216
+ endpoint="query",
217
+ api_key="dummy",
218
+ request_options=ClaudeCodeRequest,
219
+ timeout=3000,
220
+ )
221
+
222
+
223
+ class ClaudeCodeEndpoint(Endpoint):
224
+ """Direct Python-SDK (non-CLI) endpoint - unchanged except for bug-fixes."""
225
+
226
+ def __init__(self, config: EndpointConfig = ENDPOINT_CONFIG, **kwargs):
227
+ super().__init__(config=config, **kwargs)
228
+
229
+ def create_payload(self, request: dict | BaseModel, **kwargs):
230
+ req_dict = {**self.config.kwargs, **to_dict(request), **kwargs}
231
+ messages = req_dict.pop("messages")
232
+ req_obj = ClaudeCodeRequest.create(messages=messages, **req_dict)
233
+ return {"request": req_obj}, {}
234
+
235
+ def _stream_claude_code(self, request: ClaudeCodeRequest):
236
+ return sdk_query(
237
+ prompt=request.prompt, options=request.as_claude_options()
238
+ )
239
+
240
+ async def stream(self, request: dict | BaseModel, **kwargs):
241
+ payload = self.create_payload(request, **kwargs)["request"]
242
+ async for chunk in self._stream_claude_code(payload):
243
+ yield chunk
244
+
245
+ def _parse_claude_code_response(self, responses: list) -> dict:
246
+ """Parse Claude Code responses into a clean chat completions-like format.
247
+
248
+ Claude Code returns a list of messages:
249
+ - SystemMessage: initialization info
250
+ - AssistantMessage(s): actual assistant responses with content blocks
251
+ - UserMessage(s): for tool use interactions
252
+ - ResultMessage: final result with metadata
253
+
254
+ When Claude Code uses tools, the ResultMessage.result may be None.
255
+ In that case, we need to look at the tool results in UserMessages.
256
+ """
257
+ results = {
258
+ "session_id": None,
259
+ "model": "claude-code",
260
+ "result": "",
261
+ "tool_results": [],
262
+ "is_error": False,
263
+ "num_turns": None,
264
+ "total_cost_usd": None,
265
+ "usage": {
266
+ "prompt_tokens": 0,
267
+ "completion_tokens": 0,
268
+ "total_tokens": 0,
269
+ },
270
+ }
271
+
272
+ from claude_code_sdk import types
273
+
274
+ for response in responses:
275
+ if isinstance(response, types.SystemMessage):
276
+ results["session_id"] = response.data.get("session_id")
277
+ results["model"] = response.data.get("model", "claude-code")
278
+ if isinstance(response, types.AssistantMessage):
279
+ for block in response.content:
280
+ if isinstance(block, types.TextBlock):
281
+ results["result"] += block.text.strip() + "\n"
282
+ if isinstance(block, types.ToolResultBlock):
283
+ results["tool_results"].append(
284
+ {
285
+ "tool_use_id": block.tool_use_id,
286
+ "content": block.content,
287
+ "is_error": block.is_error,
288
+ }
289
+ )
290
+ if isinstance(response, types.ResultMessage):
291
+ results["result"] += response.result.strip() or ""
292
+ results["usage"] = response.usage
293
+ results["is_error"] = response.is_error
294
+ results["total_cost_usd"] = response.total_cost_usd
295
+ results["num_turns"] = response.num_turns
296
+ results["duration_ms"] = response.duration_ms
297
+ results["duration_api_ms"] = response.duration_api_ms
298
+
299
+ return results
300
+
301
+ async def _call(
302
+ self,
303
+ payload: dict,
304
+ headers: dict,
305
+ **kwargs,
306
+ ):
307
+ responses = []
308
+ async for chunk in self._stream_claude_code(**payload):
309
+ responses.append(chunk)
310
+
311
+ return self._parse_claude_code_response(responses)
@@ -46,6 +46,7 @@ class iModel:
46
46
  limit_tokens: int = None,
47
47
  concurrency_limit: int | None = None,
48
48
  streaming_process_func: Callable = None,
49
+ provider_metadata: dict | None = None,
49
50
  **kwargs,
50
51
  ) -> None:
51
52
  """Initializes the iModel instance.
@@ -79,6 +80,8 @@ class iModel:
79
80
  concurrency_limit (int | None, optional):
80
81
  Maximum number of streaming concurrent requests allowed.
81
82
  only applies to streaming requests.
83
+ provider_metadata (dict | None, optional):
84
+ Provider-specific metadata, such as session IDs for
82
85
  **kwargs:
83
86
  Additional keyword arguments, such as `model`, or any other
84
87
  provider-specific fields.
@@ -121,7 +124,7 @@ class iModel:
121
124
  self.streaming_process_func = streaming_process_func
122
125
 
123
126
  # Provider-specific metadata storage (e.g., session_id for Claude Code)
124
- self._provider_metadata = {}
127
+ self.provider_metadata = provider_metadata or {}
125
128
 
126
129
  def create_api_calling(
127
130
  self, include_token_usage_to_model: bool = False, **kwargs
@@ -142,9 +145,9 @@ class iModel:
142
145
  self.endpoint.config.provider == "claude_code"
143
146
  and "resume" not in kwargs
144
147
  and "session_id" not in kwargs
145
- and self._provider_metadata.get("session_id")
148
+ and self.provider_metadata.get("session_id")
146
149
  ):
147
- kwargs["resume"] = self._provider_metadata["session_id"]
150
+ kwargs["resume"] = self.provider_metadata["session_id"]
148
151
 
149
152
  # The new Endpoint.create_payload returns (payload, headers)
150
153
  payload, headers = self.endpoint.create_payload(request=kwargs)
@@ -280,7 +283,7 @@ class iModel:
280
283
  ):
281
284
  response = completed_call.response
282
285
  if isinstance(response, dict) and "session_id" in response:
283
- self._provider_metadata["session_id"] = response[
286
+ self.provider_metadata["session_id"] = response[
284
287
  "session_id"
285
288
  ]
286
289
 
@@ -322,6 +325,7 @@ class iModel:
322
325
  return {
323
326
  "endpoint": self.endpoint.to_dict(),
324
327
  "processor_config": self.executor.config,
328
+ "provider_metadata": self.provider_metadata,
325
329
  }
326
330
 
327
331
  @classmethod
@@ -338,5 +342,6 @@ class iModel:
338
342
 
339
343
  return cls(
340
344
  endpoint=e1,
345
+ provider_metadata=data.get("provider_metadata"),
341
346
  **data.get("processor_config", {}),
342
347
  )
@@ -6,7 +6,7 @@
6
6
 
7
7
  from __future__ import annotations
8
8
 
9
- from typing import Literal, Optional, Union
9
+ from typing import Literal, Union
10
10
 
11
11
  from pydantic import BaseModel, Field, field_validator
12
12
 
@@ -121,7 +121,7 @@ class TokenCalculator:
121
121
  return num_tokens # buffer for chat
122
122
 
123
123
  @staticmethod
124
- def calcualte_embed_token(inputs: list[str], /, **kwargs) -> int:
124
+ def calculate_embed_token(inputs: list[str], /, **kwargs) -> int:
125
125
  try:
126
126
  if not "inputs" in kwargs:
127
127
  raise ValueError("Missing 'inputs' field in payload")
@@ -0,0 +1 @@
1
+ __version__ = "0.13.0"
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "lionagi"
3
- version = "0.12.8"
3
+ version = "0.13.0"
4
4
  description = "An Intelligence Operating System."
5
5
  authors = [
6
6
  { name = "HaiyangLi", email = "quantocean.li@gmail.com" },
@@ -78,7 +78,7 @@ ollama = [
78
78
  ]
79
79
 
80
80
  claude-code = [
81
- "claude-code-sdk>=0.0.10"
81
+ "claude-code-sdk>=0.0.14"
82
82
  ]
83
83
 
84
84
  all = [
@@ -411,15 +411,15 @@ wheels = [
411
411
 
412
412
  [[package]]
413
413
  name = "claude-code-sdk"
414
- version = "0.0.10"
414
+ version = "0.0.14"
415
415
  source = { registry = "https://pypi.org/simple" }
416
416
  dependencies = [
417
417
  { name = "anyio" },
418
418
  { name = "typing-extensions", marker = "python_full_version < '3.11'" },
419
419
  ]
420
- sdist = { url = "https://files.pythonhosted.org/packages/38/f5/6c69e0f26cc4dc0f473dcad3fa0138c17d620f6fd5e8019edc47a958579f/claude_code_sdk-0.0.10.tar.gz", hash = "sha256:9fb5d40089845b21de07b0f9dc6e48482c6b819ed5a7cc35dfdcd674b9592213", size = 11538, upload-time = "2025-06-12T07:30:48.054Z" }
420
+ sdist = { url = "https://files.pythonhosted.org/packages/1b/50/489bd1cf9f448d9e06aa6af4a14db8e22ec5f7dbdb5fcc48821b1d8d1680/claude_code_sdk-0.0.14.tar.gz", hash = "sha256:a1c9384b6934c2b8351d7a35c0b7dcfd5fb657017fb456eb98bcf5e0b4f8eccd", size = 13403, upload-time = "2025-07-01T06:07:28.147Z" }
421
421
  wheels = [
422
- { url = "https://files.pythonhosted.org/packages/b3/05/c719217354c8a783689cf94faecc222d725732a4cd3d285a9ee160c8449e/claude_code_sdk-0.0.10-py3-none-any.whl", hash = "sha256:cf4153b1723ff0d7c6a1c281540651c059d6c53b02654cc1ab9e9a85b7092a94", size = 10344, upload-time = "2025-06-12T07:30:46.643Z" },
422
+ { url = "https://files.pythonhosted.org/packages/db/a4/6eb606ccb0988054ca52b9453045b2c2f1bc6fd9c915e0f6cd1f73d6ce2c/claude_code_sdk-0.0.14-py3-none-any.whl", hash = "sha256:83a23a260954bb84e78cf2dc42aaaa0eee778ca392e56f1661276f31ba64992c", size = 10589, upload-time = "2025-07-01T06:07:27.029Z" },
423
423
  ]
424
424
 
425
425
  [[package]]
@@ -1179,7 +1179,7 @@ wheels = [
1179
1179
 
1180
1180
  [[package]]
1181
1181
  name = "lionagi"
1182
- version = "0.12.8"
1182
+ version = "0.13.0"
1183
1183
  source = { editable = "." }
1184
1184
  dependencies = [
1185
1185
  { name = "aiocache" },
@@ -1243,7 +1243,7 @@ requires-dist = [
1243
1243
  { name = "aiohttp", specifier = ">=3.12.0" },
1244
1244
  { name = "backoff", specifier = ">=2.2.1" },
1245
1245
  { name = "black", extras = ["jupyter"], marker = "extra == 'lint'", specifier = ">=24.10.0" },
1246
- { name = "claude-code-sdk", marker = "extra == 'claude-code'", specifier = ">=0.0.10" },
1246
+ { name = "claude-code-sdk", marker = "extra == 'claude-code'", specifier = ">=0.0.14" },
1247
1247
  { name = "docling", marker = "extra == 'reader'", specifier = ">=2.15.1" },
1248
1248
  { name = "furo", marker = "extra == 'docs'", specifier = ">=2024.8.6" },
1249
1249
  { name = "isort", marker = "extra == 'lint'", specifier = ">=5.13.2" },