lionagi 0.12.0__tar.gz → 0.12.1__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 (287) hide show
  1. lionagi-0.12.1/.coveragerc +13 -0
  2. lionagi-0.12.1/.github/workflows/ci.yml +35 -0
  3. {lionagi-0.12.0 → lionagi-0.12.1}/.github/workflows/docs.yml +3 -0
  4. {lionagi-0.12.0 → lionagi-0.12.1}/.github/workflows/release.yml +2 -6
  5. {lionagi-0.12.0 → lionagi-0.12.1}/PKG-INFO +1 -1
  6. lionagi-0.12.1/lionagi/service/providers/exa_/models.py +3 -0
  7. lionagi-0.12.1/lionagi/service/providers/perplexity_/models.py +5 -0
  8. lionagi-0.12.1/lionagi/version.py +1 -0
  9. {lionagi-0.12.0 → lionagi-0.12.1}/pyproject.toml +3 -1
  10. {lionagi-0.12.0 → lionagi-0.12.1}/uv.lock +81 -1
  11. lionagi-0.12.0/.github/workflows/ci.yml +0 -68
  12. lionagi-0.12.0/lionagi/service/providers/exa_/models.py +0 -160
  13. lionagi-0.12.0/lionagi/service/providers/perplexity_/models.py +0 -144
  14. lionagi-0.12.0/lionagi/version.py +0 -1
  15. {lionagi-0.12.0 → lionagi-0.12.1}/.env.example +0 -0
  16. {lionagi-0.12.0 → lionagi-0.12.1}/.github/dependabot.yml +0 -0
  17. {lionagi-0.12.0 → lionagi-0.12.1}/.github/workflows/codeql.yml +0 -0
  18. {lionagi-0.12.0 → lionagi-0.12.1}/.gitignore +0 -0
  19. {lionagi-0.12.0 → lionagi-0.12.1}/.pre-commit-config.yaml +0 -0
  20. {lionagi-0.12.0 → lionagi-0.12.1}/CODE_OF_CONDUCT.md +0 -0
  21. {lionagi-0.12.0 → lionagi-0.12.1}/CONTRIBUTING.md +0 -0
  22. {lionagi-0.12.0 → lionagi-0.12.1}/LICENSE +0 -0
  23. {lionagi-0.12.0 → lionagi-0.12.1}/README.md +0 -0
  24. {lionagi-0.12.0 → lionagi-0.12.1}/cookbooks/ch01_get_started.md +0 -0
  25. {lionagi-0.12.0 → lionagi-0.12.1}/cookbooks/ch02_concepts.md +0 -0
  26. {lionagi-0.12.0 → lionagi-0.12.1}/dev_tools/count_code_base_lines.py +0 -0
  27. {lionagi-0.12.0 → lionagi-0.12.1}/docs/Makefile +0 -0
  28. {lionagi-0.12.0 → lionagi-0.12.1}/docs/_static/custom.css +0 -0
  29. {lionagi-0.12.0 → lionagi-0.12.1}/docs/_templates/layout.html +0 -0
  30. {lionagi-0.12.0 → lionagi-0.12.1}/docs/conf.py +0 -0
  31. {lionagi-0.12.0 → lionagi-0.12.1}/docs/index.rst +0 -0
  32. {lionagi-0.12.0 → lionagi-0.12.1}/docs/modules/action.rst +0 -0
  33. {lionagi-0.12.0 → lionagi-0.12.1}/docs/modules/adapter.rst +0 -0
  34. {lionagi-0.12.0 → lionagi-0.12.1}/docs/modules/branch.rst +0 -0
  35. {lionagi-0.12.0 → lionagi-0.12.1}/docs/modules/branch_operations.rst +0 -0
  36. {lionagi-0.12.0 → lionagi-0.12.1}/docs/modules/concepts.rst +0 -0
  37. {lionagi-0.12.0 → lionagi-0.12.1}/docs/modules/element_id.rst +0 -0
  38. {lionagi-0.12.0 → lionagi-0.12.1}/docs/modules/event.rst +0 -0
  39. {lionagi-0.12.0 → lionagi-0.12.1}/docs/modules/form.rst +0 -0
  40. {lionagi-0.12.0 → lionagi-0.12.1}/docs/modules/graph.rst +0 -0
  41. {lionagi-0.12.0 → lionagi-0.12.1}/docs/modules/index.rst +0 -0
  42. {lionagi-0.12.0 → lionagi-0.12.1}/docs/modules/instruct.rst +0 -0
  43. {lionagi-0.12.0 → lionagi-0.12.1}/docs/modules/lib_file.rst +0 -0
  44. {lionagi-0.12.0 → lionagi-0.12.1}/docs/modules/lib_nested.rst +0 -0
  45. {lionagi-0.12.0 → lionagi-0.12.1}/docs/modules/lib_package.rst +0 -0
  46. {lionagi-0.12.0 → lionagi-0.12.1}/docs/modules/lib_schema.rst +0 -0
  47. {lionagi-0.12.0 → lionagi-0.12.1}/docs/modules/lib_validate.rst +0 -0
  48. {lionagi-0.12.0 → lionagi-0.12.1}/docs/modules/log.rst +0 -0
  49. {lionagi-0.12.0 → lionagi-0.12.1}/docs/modules/mail.rst +0 -0
  50. {lionagi-0.12.0 → lionagi-0.12.1}/docs/modules/message.rst +0 -0
  51. {lionagi-0.12.0 → lionagi-0.12.1}/docs/modules/models.rst +0 -0
  52. {lionagi-0.12.0 → lionagi-0.12.1}/docs/modules/operative_step.rst +0 -0
  53. {lionagi-0.12.0 → lionagi-0.12.1}/docs/modules/pile.rst +0 -0
  54. {lionagi-0.12.0 → lionagi-0.12.1}/docs/modules/processor.rst +0 -0
  55. {lionagi-0.12.0 → lionagi-0.12.1}/docs/modules/progression.rst +0 -0
  56. {lionagi-0.12.0 → lionagi-0.12.1}/docs/modules/service.rst +0 -0
  57. {lionagi-0.12.0 → lionagi-0.12.1}/docs/modules/session.rst +0 -0
  58. {lionagi-0.12.0 → lionagi-0.12.1}/docs/modules/utils.rst +0 -0
  59. {lionagi-0.12.0 → lionagi-0.12.1}/docs/tutorials/get_started.rst +0 -0
  60. {lionagi-0.12.0 → lionagi-0.12.1}/docs/tutorials/get_started_pt2.rst +0 -0
  61. {lionagi-0.12.0 → lionagi-0.12.1}/docs/tutorials/get_started_pt3.rst +0 -0
  62. {lionagi-0.12.0 → lionagi-0.12.1}/docs/tutorials/index.rst +0 -0
  63. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/__init__.py +0 -0
  64. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/_class_registry.py +0 -0
  65. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/_errors.py +0 -0
  66. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/_types.py +0 -0
  67. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/adapters/__init__.py +0 -0
  68. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/adapters/adapter.py +0 -0
  69. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/adapters/json_adapter.py +0 -0
  70. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/adapters/pandas_/__init__.py +0 -0
  71. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/adapters/pandas_/csv_adapter.py +0 -0
  72. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/adapters/pandas_/excel_adapter.py +0 -0
  73. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/adapters/pandas_/pd_dataframe_adapter.py +0 -0
  74. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/adapters/pandas_/pd_series_adapter.py +0 -0
  75. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/adapters/toml_adapter.py +0 -0
  76. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/adapters/types.py +0 -0
  77. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/fields/__init__.py +0 -0
  78. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/fields/action.py +0 -0
  79. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/fields/base.py +0 -0
  80. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/fields/code.py +0 -0
  81. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/fields/file.py +0 -0
  82. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/fields/instruct.py +0 -0
  83. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/fields/reason.py +0 -0
  84. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/fields/research.py +0 -0
  85. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/__init__.py +0 -0
  86. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/file/__init__.py +0 -0
  87. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/file/chunk.py +0 -0
  88. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/file/concat.py +0 -0
  89. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/file/concat_files.py +0 -0
  90. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/file/create_path.py +0 -0
  91. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/file/file_ops.py +0 -0
  92. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/file/file_util.py +0 -0
  93. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/file/params.py +0 -0
  94. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/file/process.py +0 -0
  95. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/file/save.py +0 -0
  96. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/nested/__init__.py +0 -0
  97. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/nested/flatten.py +0 -0
  98. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/nested/nfilter.py +0 -0
  99. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/nested/nget.py +0 -0
  100. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/nested/ninsert.py +0 -0
  101. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/nested/nmerge.py +0 -0
  102. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/nested/npop.py +0 -0
  103. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/nested/nset.py +0 -0
  104. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/nested/unflatten.py +0 -0
  105. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/nested/utils.py +0 -0
  106. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/package/__init__.py +0 -0
  107. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/package/imports.py +0 -0
  108. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/package/management.py +0 -0
  109. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/package/params.py +0 -0
  110. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/package/system.py +0 -0
  111. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/parse/__init__.py +0 -0
  112. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/parse/fuzzy_parse_json.py +0 -0
  113. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/parse/to_dict.py +0 -0
  114. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/parse/to_json.py +0 -0
  115. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/parse/to_num.py +0 -0
  116. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/parse/to_xml.py +0 -0
  117. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/parse/xml_parser.py +0 -0
  118. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/schema/__init__.py +0 -0
  119. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/schema/as_readable.py +0 -0
  120. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/schema/breakdown_pydantic_annotation.py +0 -0
  121. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/schema/extract_code_block.py +0 -0
  122. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/schema/extract_docstring.py +0 -0
  123. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/schema/function_to_schema.py +0 -0
  124. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/schema/json_schema.py +0 -0
  125. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/token_transform/__init__.py +0 -0
  126. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/token_transform/base.py +0 -0
  127. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/token_transform/llmlingua.py +0 -0
  128. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/token_transform/perplexity.py +0 -0
  129. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/token_transform/symbolic_compress_context.py +0 -0
  130. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/token_transform/synthlang.py +0 -0
  131. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/token_transform/synthlang_/base.py +0 -0
  132. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/token_transform/synthlang_/resources/frameworks/abstract_algebra.toml +0 -0
  133. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/token_transform/synthlang_/resources/frameworks/category_theory.toml +0 -0
  134. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/token_transform/synthlang_/resources/frameworks/complex_analysis.toml +0 -0
  135. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/token_transform/synthlang_/resources/frameworks/framework_options.json +0 -0
  136. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/token_transform/synthlang_/resources/frameworks/group_theory.toml +0 -0
  137. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/token_transform/synthlang_/resources/frameworks/math_logic.toml +0 -0
  138. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/token_transform/synthlang_/resources/frameworks/reflective_patterns.toml +0 -0
  139. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/token_transform/synthlang_/resources/frameworks/set_theory.toml +0 -0
  140. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/token_transform/synthlang_/resources/frameworks/topology_fundamentals.toml +0 -0
  141. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/token_transform/synthlang_/resources/mapping/lion_emoji_mapping.toml +0 -0
  142. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/token_transform/synthlang_/resources/mapping/python_math_mapping.toml +0 -0
  143. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/token_transform/synthlang_/resources/mapping/rust_chinese_mapping.toml +0 -0
  144. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/token_transform/synthlang_/resources/utility/base_synthlang_system_prompt.toml +0 -0
  145. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/token_transform/synthlang_/translate_to_synthlang.py +0 -0
  146. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/token_transform/types.py +0 -0
  147. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/validate/__init__.py +0 -0
  148. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/validate/common_field_validators.py +0 -0
  149. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/validate/fuzzy_match_keys.py +0 -0
  150. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/validate/fuzzy_validate_mapping.py +0 -0
  151. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/validate/string_similarity.py +0 -0
  152. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/libs/validate/validate_boolean.py +0 -0
  153. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/models/__init__.py +0 -0
  154. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/models/field_model.py +0 -0
  155. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/models/hashable_model.py +0 -0
  156. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/models/model_params.py +0 -0
  157. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/models/note.py +0 -0
  158. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/models/operable_model.py +0 -0
  159. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/models/schema_model.py +0 -0
  160. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/operations/ReAct/ReAct.py +0 -0
  161. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/operations/ReAct/__init__.py +0 -0
  162. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/operations/ReAct/utils.py +0 -0
  163. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/operations/__init__.py +0 -0
  164. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/operations/_act/__init__.py +0 -0
  165. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/operations/_act/act.py +0 -0
  166. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/operations/brainstorm/__init__.py +0 -0
  167. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/operations/brainstorm/brainstorm.py +0 -0
  168. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/operations/brainstorm/prompt.py +0 -0
  169. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/operations/chat/__init__.py +0 -0
  170. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/operations/chat/chat.py +0 -0
  171. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/operations/communicate/__init__.py +0 -0
  172. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/operations/communicate/communicate.py +0 -0
  173. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/operations/instruct/__init__.py +0 -0
  174. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/operations/instruct/instruct.py +0 -0
  175. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/operations/interpret/__init__.py +0 -0
  176. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/operations/interpret/interpret.py +0 -0
  177. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/operations/manager.py +0 -0
  178. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/operations/operate/__init__.py +0 -0
  179. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/operations/operate/operate.py +0 -0
  180. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/operations/parse/__init__.py +0 -0
  181. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/operations/parse/parse.py +0 -0
  182. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/operations/plan/__init__.py +0 -0
  183. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/operations/plan/plan.py +0 -0
  184. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/operations/plan/prompt.py +0 -0
  185. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/operations/select/__init__.py +0 -0
  186. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/operations/select/select.py +0 -0
  187. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/operations/select/utils.py +0 -0
  188. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/operations/translate/__init__.py +0 -0
  189. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/operations/translate/translate.py +0 -0
  190. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/operations/types.py +0 -0
  191. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/operations/utils.py +0 -0
  192. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/protocols/__init__.py +0 -0
  193. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/protocols/_concepts.py +0 -0
  194. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/protocols/action/__init__.py +0 -0
  195. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/protocols/action/function_calling.py +0 -0
  196. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/protocols/action/manager.py +0 -0
  197. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/protocols/action/tool.py +0 -0
  198. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/protocols/forms/__init__.py +0 -0
  199. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/protocols/forms/base.py +0 -0
  200. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/protocols/forms/flow.py +0 -0
  201. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/protocols/forms/form.py +0 -0
  202. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/protocols/forms/report.py +0 -0
  203. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/protocols/generic/__init__.py +0 -0
  204. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/protocols/generic/element.py +0 -0
  205. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/protocols/generic/event.py +0 -0
  206. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/protocols/generic/log.py +0 -0
  207. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/protocols/generic/pile.py +0 -0
  208. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/protocols/generic/processor.py +0 -0
  209. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/protocols/generic/progression.py +0 -0
  210. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/protocols/graph/__init__.py +0 -0
  211. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/protocols/graph/edge.py +0 -0
  212. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/protocols/graph/graph.py +0 -0
  213. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/protocols/graph/node.py +0 -0
  214. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/protocols/mail/__init__.py +0 -0
  215. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/protocols/mail/exchange.py +0 -0
  216. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/protocols/mail/mail.py +0 -0
  217. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/protocols/mail/mailbox.py +0 -0
  218. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/protocols/mail/manager.py +0 -0
  219. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/protocols/mail/package.py +0 -0
  220. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/protocols/messages/__init__.py +0 -0
  221. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/protocols/messages/action_request.py +0 -0
  222. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/protocols/messages/action_response.py +0 -0
  223. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/protocols/messages/assistant_response.py +0 -0
  224. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/protocols/messages/base.py +0 -0
  225. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/protocols/messages/instruction.py +0 -0
  226. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/protocols/messages/manager.py +0 -0
  227. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/protocols/messages/message.py +0 -0
  228. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/protocols/messages/system.py +0 -0
  229. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/protocols/messages/templates/README.md +0 -0
  230. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/protocols/messages/templates/action_request.jinja2 +0 -0
  231. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/protocols/messages/templates/action_response.jinja2 +0 -0
  232. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/protocols/messages/templates/assistant_response.jinja2 +0 -0
  233. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/protocols/messages/templates/instruction_message.jinja2 +0 -0
  234. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/protocols/messages/templates/system_message.jinja2 +0 -0
  235. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/protocols/messages/templates/tool_schemas.jinja2 +0 -0
  236. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/protocols/operatives/__init__.py +0 -0
  237. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/protocols/operatives/operative.py +0 -0
  238. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/protocols/operatives/step.py +0 -0
  239. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/protocols/types.py +0 -0
  240. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/service/__init__.py +0 -0
  241. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/service/endpoints/__init__.py +0 -0
  242. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/service/endpoints/base.py +0 -0
  243. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/service/endpoints/chat_completion.py +0 -0
  244. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/service/endpoints/match_endpoint.py +0 -0
  245. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/service/endpoints/rate_limited_processor.py +0 -0
  246. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/service/endpoints/token_calculator.py +0 -0
  247. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/service/imodel.py +0 -0
  248. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/service/manager.py +0 -0
  249. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/service/providers/__init__.py +0 -0
  250. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/service/providers/anthropic_/__init__.py +0 -0
  251. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/service/providers/anthropic_/messages.py +0 -0
  252. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/service/providers/exa_/__init__.py +0 -0
  253. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/service/providers/exa_/search.py +0 -0
  254. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/service/providers/exa_/types.py +0 -0
  255. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/service/providers/groq_/__init__.py +0 -0
  256. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/service/providers/groq_/chat_completions.py +0 -0
  257. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/service/providers/ollama_/__init__.py +0 -0
  258. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/service/providers/ollama_/chat_completions.py +0 -0
  259. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/service/providers/openai_/__init__.py +0 -0
  260. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/service/providers/openai_/chat_completions.py +0 -0
  261. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/service/providers/openai_/spec.py +0 -0
  262. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/service/providers/openrouter_/__init__.py +0 -0
  263. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/service/providers/openrouter_/chat_completions.py +0 -0
  264. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/service/providers/perplexity_/__init__.py +0 -0
  265. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/service/providers/perplexity_/chat_completions.py +0 -0
  266. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/service/providers/types.py +0 -0
  267. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/service/types.py +0 -0
  268. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/session/__init__.py +0 -0
  269. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/session/branch.py +0 -0
  270. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/session/prompts.py +0 -0
  271. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/session/session.py +0 -0
  272. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/settings.py +0 -0
  273. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/tools/__init__.py +0 -0
  274. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/tools/base.py +0 -0
  275. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/tools/file/__init__.py +0 -0
  276. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/tools/file/reader.py +0 -0
  277. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/tools/types.py +0 -0
  278. {lionagi-0.12.0 → lionagi-0.12.1}/lionagi/utils.py +0 -0
  279. {lionagi-0.12.0 → lionagi-0.12.1}/prompts/doc_style.md +0 -0
  280. {lionagi-0.12.0 → lionagi-0.12.1}/reports/ips/IP-601.md +0 -0
  281. {lionagi-0.12.0 → lionagi-0.12.1}/reports/ips/IP-602.md +0 -0
  282. {lionagi-0.12.0 → lionagi-0.12.1}/reports/ips/IP-603.md +0 -0
  283. {lionagi-0.12.0 → lionagi-0.12.1}/reports/ips/IP-604.md +0 -0
  284. {lionagi-0.12.0 → lionagi-0.12.1}/reports/tis/TI-601.md +0 -0
  285. {lionagi-0.12.0 → lionagi-0.12.1}/reports/tis/TI-602.md +0 -0
  286. {lionagi-0.12.0 → lionagi-0.12.1}/reports/tis/TI-603.md +0 -0
  287. {lionagi-0.12.0 → lionagi-0.12.1}/reports/tis/TI-604.md +0 -0
@@ -0,0 +1,13 @@
1
+ [run]
2
+ source = lionagi
3
+ omit =
4
+ tests/*
5
+
6
+ [report]
7
+ exclude_lines =
8
+ pragma: no cover
9
+ def __repr__
10
+ raise NotImplementedError
11
+ if __name__ == .__main__.:
12
+ pass
13
+ raise ImportError
@@ -0,0 +1,35 @@
1
+ name: ci
2
+ on: [pull_request]
3
+ permissions:
4
+ contents: read
5
+ jobs:
6
+ test:
7
+ runs-on: ubuntu-latest
8
+ services:
9
+ docker:
10
+ image: docker:dind
11
+ options: --privileged
12
+ strategy:
13
+ matrix:
14
+ py: ["3.10", "3.11", "3.12", "3.13"]
15
+ steps:
16
+ - uses: actions/checkout@v4
17
+ - uses: actions/setup-python@v5
18
+ with:
19
+ python-version: "${{ matrix.py }}"
20
+ - run: pip install uv
21
+ - name: Create and activate virtual environment
22
+ run: |
23
+ uv venv .venv
24
+ echo "VIRTUAL_ENV=$GITHUB_WORKSPACE/.venv" >> $GITHUB_ENV
25
+ echo "$GITHUB_WORKSPACE/.venv/bin" >> $GITHUB_PATH
26
+ - name: Install dependencies
27
+ run: |
28
+ uv sync --extra all
29
+ - name: Run tests
30
+ run: uv run pytest -q --cov=lionagi --cov-report=xml
31
+ # - name: Upload coverage to Codecov
32
+ # uses: codecov/codecov-action@v3
33
+ # with:
34
+ # token: ${{ secrets.CODECOV_TOKEN }}
35
+ # fail_ci_if_error: true
@@ -4,6 +4,9 @@ on:
4
4
  push:
5
5
  branches: ["main"]
6
6
 
7
+ permissions:
8
+ contents: write
9
+
7
10
  jobs:
8
11
  build-deploy:
9
12
  runs-on: ubuntu-latest
@@ -27,13 +27,9 @@ jobs:
27
27
 
28
28
  - name: Install dependencies
29
29
  run: |
30
- uv venv
31
- uv build
32
-
30
+ uv sync --extra all
33
31
  - name: Run tests
34
- run: |
35
- source .venv/bin/activate
36
- uv run pytest --asyncio-mode=auto --maxfail=1 --disable-warnings tests/
32
+ run: uv run pytest -q --cov=lionagi --cov-report=xml
37
33
 
38
34
  deploy:
39
35
  needs: test
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lionagi
3
- Version: 0.12.0
3
+ Version: 0.12.1
4
4
  Summary: An Intelligence Operating System.
5
5
  Author-email: HaiyangLi <quantocean.li@gmail.com>
6
6
  License: Apache License
@@ -0,0 +1,3 @@
1
+ from khive.providers.exa_ import ExaSearchRequest
2
+
3
+ __all__ = ("ExaSearchRequest",)
@@ -0,0 +1,5 @@
1
+ from khive.providers.perplexity_ import (
2
+ PerplexityChatRequest as PerplexityChatCompletionRequest,
3
+ )
4
+
5
+ __all__ = ("PerplexityChatCompletionRequest",)
@@ -0,0 +1 @@
1
+ __version__ = "0.12.1"
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "lionagi"
3
- version = "0.12.0"
3
+ version = "0.12.1"
4
4
  description = "An Intelligence Operating System."
5
5
  authors = [
6
6
  { name = "HaiyangLi", email = "quantocean.li@gmail.com" },
@@ -42,6 +42,7 @@ dev = [
42
42
  "ipython>=8.36.0",
43
43
  "ipykernel>=6.29.5",
44
44
  "ipywidgets>=8.1.7",
45
+ "pytest-cov>=6.1.1",
45
46
  ]
46
47
 
47
48
  [project.optional-dependencies]
@@ -83,6 +84,7 @@ markers = [
83
84
  "performance: marks tests as performance",
84
85
  "slow: marks tests as slow",
85
86
  ]
87
+ addopts = "-ra --cov=lionagi --cov-report=term-missing"
86
88
 
87
89
  [build-system]
88
90
  requires = ["hatchling"]
@@ -460,6 +460,71 @@ wheels = [
460
460
  { url = "https://files.pythonhosted.org/packages/e6/75/49e5bfe642f71f272236b5b2d2691cf915a7283cc0ceda56357b61daa538/comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3", size = 7180, upload-time = "2024-03-12T16:53:39.226Z" },
461
461
  ]
462
462
 
463
+ [[package]]
464
+ name = "coverage"
465
+ version = "7.8.0"
466
+ source = { registry = "https://pypi.org/simple" }
467
+ sdist = { url = "https://files.pythonhosted.org/packages/19/4f/2251e65033ed2ce1e68f00f91a0294e0f80c80ae8c3ebbe2f12828c4cd53/coverage-7.8.0.tar.gz", hash = "sha256:7a3d62b3b03b4b6fd41a085f3574874cf946cb4604d2b4d3e8dca8cd570ca501", size = 811872, upload-time = "2025-03-30T20:36:45.376Z" }
468
+ wheels = [
469
+ { url = "https://files.pythonhosted.org/packages/78/01/1c5e6ee4ebaaa5e079db933a9a45f61172048c7efa06648445821a201084/coverage-7.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2931f66991175369859b5fd58529cd4b73582461877ecfd859b6549869287ffe", size = 211379, upload-time = "2025-03-30T20:34:53.904Z" },
470
+ { url = "https://files.pythonhosted.org/packages/e9/16/a463389f5ff916963471f7c13585e5f38c6814607306b3cb4d6b4cf13384/coverage-7.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:52a523153c568d2c0ef8826f6cc23031dc86cffb8c6aeab92c4ff776e7951b28", size = 211814, upload-time = "2025-03-30T20:34:56.959Z" },
471
+ { url = "https://files.pythonhosted.org/packages/b8/b1/77062b0393f54d79064dfb72d2da402657d7c569cfbc724d56ac0f9c67ed/coverage-7.8.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c8a5c139aae4c35cbd7cadca1df02ea8cf28a911534fc1b0456acb0b14234f3", size = 240937, upload-time = "2025-03-30T20:34:58.751Z" },
472
+ { url = "https://files.pythonhosted.org/packages/d7/54/c7b00a23150083c124e908c352db03bcd33375494a4beb0c6d79b35448b9/coverage-7.8.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5a26c0c795c3e0b63ec7da6efded5f0bc856d7c0b24b2ac84b4d1d7bc578d676", size = 238849, upload-time = "2025-03-30T20:35:00.521Z" },
473
+ { url = "https://files.pythonhosted.org/packages/f7/ec/a6b7cfebd34e7b49f844788fda94713035372b5200c23088e3bbafb30970/coverage-7.8.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:821f7bcbaa84318287115d54becb1915eece6918136c6f91045bb84e2f88739d", size = 239986, upload-time = "2025-03-30T20:35:02.307Z" },
474
+ { url = "https://files.pythonhosted.org/packages/21/8c/c965ecef8af54e6d9b11bfbba85d4f6a319399f5f724798498387f3209eb/coverage-7.8.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a321c61477ff8ee705b8a5fed370b5710c56b3a52d17b983d9215861e37b642a", size = 239896, upload-time = "2025-03-30T20:35:04.141Z" },
475
+ { url = "https://files.pythonhosted.org/packages/40/83/070550273fb4c480efa8381735969cb403fa8fd1626d74865bfaf9e4d903/coverage-7.8.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:ed2144b8a78f9d94d9515963ed273d620e07846acd5d4b0a642d4849e8d91a0c", size = 238613, upload-time = "2025-03-30T20:35:05.889Z" },
476
+ { url = "https://files.pythonhosted.org/packages/07/76/fbb2540495b01d996d38e9f8897b861afed356be01160ab4e25471f4fed1/coverage-7.8.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:042e7841a26498fff7a37d6fda770d17519982f5b7d8bf5278d140b67b61095f", size = 238909, upload-time = "2025-03-30T20:35:07.76Z" },
477
+ { url = "https://files.pythonhosted.org/packages/a3/7e/76d604db640b7d4a86e5dd730b73e96e12a8185f22b5d0799025121f4dcb/coverage-7.8.0-cp310-cp310-win32.whl", hash = "sha256:f9983d01d7705b2d1f7a95e10bbe4091fabc03a46881a256c2787637b087003f", size = 213948, upload-time = "2025-03-30T20:35:09.144Z" },
478
+ { url = "https://files.pythonhosted.org/packages/5c/a7/f8ce4aafb4a12ab475b56c76a71a40f427740cf496c14e943ade72e25023/coverage-7.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:5a570cd9bd20b85d1a0d7b009aaf6c110b52b5755c17be6962f8ccd65d1dbd23", size = 214844, upload-time = "2025-03-30T20:35:10.734Z" },
479
+ { url = "https://files.pythonhosted.org/packages/2b/77/074d201adb8383addae5784cb8e2dac60bb62bfdf28b2b10f3a3af2fda47/coverage-7.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e7ac22a0bb2c7c49f441f7a6d46c9c80d96e56f5a8bc6972529ed43c8b694e27", size = 211493, upload-time = "2025-03-30T20:35:12.286Z" },
480
+ { url = "https://files.pythonhosted.org/packages/a9/89/7a8efe585750fe59b48d09f871f0e0c028a7b10722b2172dfe021fa2fdd4/coverage-7.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bf13d564d310c156d1c8e53877baf2993fb3073b2fc9f69790ca6a732eb4bfea", size = 211921, upload-time = "2025-03-30T20:35:14.18Z" },
481
+ { url = "https://files.pythonhosted.org/packages/e9/ef/96a90c31d08a3f40c49dbe897df4f1fd51fb6583821a1a1c5ee30cc8f680/coverage-7.8.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5761c70c017c1b0d21b0815a920ffb94a670c8d5d409d9b38857874c21f70d7", size = 244556, upload-time = "2025-03-30T20:35:15.616Z" },
482
+ { url = "https://files.pythonhosted.org/packages/89/97/dcd5c2ce72cee9d7b0ee8c89162c24972fb987a111b92d1a3d1d19100c61/coverage-7.8.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5ff52d790c7e1628241ffbcaeb33e07d14b007b6eb00a19320c7b8a7024c040", size = 242245, upload-time = "2025-03-30T20:35:18.648Z" },
483
+ { url = "https://files.pythonhosted.org/packages/b2/7b/b63cbb44096141ed435843bbb251558c8e05cc835c8da31ca6ffb26d44c0/coverage-7.8.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d39fc4817fd67b3915256af5dda75fd4ee10621a3d484524487e33416c6f3543", size = 244032, upload-time = "2025-03-30T20:35:20.131Z" },
484
+ { url = "https://files.pythonhosted.org/packages/97/e3/7fa8c2c00a1ef530c2a42fa5df25a6971391f92739d83d67a4ee6dcf7a02/coverage-7.8.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b44674870709017e4b4036e3d0d6c17f06a0e6d4436422e0ad29b882c40697d2", size = 243679, upload-time = "2025-03-30T20:35:21.636Z" },
485
+ { url = "https://files.pythonhosted.org/packages/4f/b3/e0a59d8df9150c8a0c0841d55d6568f0a9195692136c44f3d21f1842c8f6/coverage-7.8.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8f99eb72bf27cbb167b636eb1726f590c00e1ad375002230607a844d9e9a2318", size = 241852, upload-time = "2025-03-30T20:35:23.525Z" },
486
+ { url = "https://files.pythonhosted.org/packages/9b/82/db347ccd57bcef150c173df2ade97976a8367a3be7160e303e43dd0c795f/coverage-7.8.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b571bf5341ba8c6bc02e0baeaf3b061ab993bf372d982ae509807e7f112554e9", size = 242389, upload-time = "2025-03-30T20:35:25.09Z" },
487
+ { url = "https://files.pythonhosted.org/packages/21/f6/3f7d7879ceb03923195d9ff294456241ed05815281f5254bc16ef71d6a20/coverage-7.8.0-cp311-cp311-win32.whl", hash = "sha256:e75a2ad7b647fd8046d58c3132d7eaf31b12d8a53c0e4b21fa9c4d23d6ee6d3c", size = 213997, upload-time = "2025-03-30T20:35:26.914Z" },
488
+ { url = "https://files.pythonhosted.org/packages/28/87/021189643e18ecf045dbe1e2071b2747901f229df302de01c998eeadf146/coverage-7.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:3043ba1c88b2139126fc72cb48574b90e2e0546d4c78b5299317f61b7f718b78", size = 214911, upload-time = "2025-03-30T20:35:28.498Z" },
489
+ { url = "https://files.pythonhosted.org/packages/aa/12/4792669473297f7973518bec373a955e267deb4339286f882439b8535b39/coverage-7.8.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:bbb5cc845a0292e0c520656d19d7ce40e18d0e19b22cb3e0409135a575bf79fc", size = 211684, upload-time = "2025-03-30T20:35:29.959Z" },
490
+ { url = "https://files.pythonhosted.org/packages/be/e1/2a4ec273894000ebedd789e8f2fc3813fcaf486074f87fd1c5b2cb1c0a2b/coverage-7.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4dfd9a93db9e78666d178d4f08a5408aa3f2474ad4d0e0378ed5f2ef71640cb6", size = 211935, upload-time = "2025-03-30T20:35:31.912Z" },
491
+ { url = "https://files.pythonhosted.org/packages/f8/3a/7b14f6e4372786709a361729164125f6b7caf4024ce02e596c4a69bccb89/coverage-7.8.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f017a61399f13aa6d1039f75cd467be388d157cd81f1a119b9d9a68ba6f2830d", size = 245994, upload-time = "2025-03-30T20:35:33.455Z" },
492
+ { url = "https://files.pythonhosted.org/packages/54/80/039cc7f1f81dcbd01ea796d36d3797e60c106077e31fd1f526b85337d6a1/coverage-7.8.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0915742f4c82208ebf47a2b154a5334155ed9ef9fe6190674b8a46c2fb89cb05", size = 242885, upload-time = "2025-03-30T20:35:35.354Z" },
493
+ { url = "https://files.pythonhosted.org/packages/10/e0/dc8355f992b6cc2f9dcd5ef6242b62a3f73264893bc09fbb08bfcab18eb4/coverage-7.8.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a40fcf208e021eb14b0fac6bdb045c0e0cab53105f93ba0d03fd934c956143a", size = 245142, upload-time = "2025-03-30T20:35:37.121Z" },
494
+ { url = "https://files.pythonhosted.org/packages/43/1b/33e313b22cf50f652becb94c6e7dae25d8f02e52e44db37a82de9ac357e8/coverage-7.8.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a1f406a8e0995d654b2ad87c62caf6befa767885301f3b8f6f73e6f3c31ec3a6", size = 244906, upload-time = "2025-03-30T20:35:39.07Z" },
495
+ { url = "https://files.pythonhosted.org/packages/05/08/c0a8048e942e7f918764ccc99503e2bccffba1c42568693ce6955860365e/coverage-7.8.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:77af0f6447a582fdc7de5e06fa3757a3ef87769fbb0fdbdeba78c23049140a47", size = 243124, upload-time = "2025-03-30T20:35:40.598Z" },
496
+ { url = "https://files.pythonhosted.org/packages/5b/62/ea625b30623083c2aad645c9a6288ad9fc83d570f9adb913a2abdba562dd/coverage-7.8.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f2d32f95922927186c6dbc8bc60df0d186b6edb828d299ab10898ef3f40052fe", size = 244317, upload-time = "2025-03-30T20:35:42.204Z" },
497
+ { url = "https://files.pythonhosted.org/packages/62/cb/3871f13ee1130a6c8f020e2f71d9ed269e1e2124aa3374d2180ee451cee9/coverage-7.8.0-cp312-cp312-win32.whl", hash = "sha256:769773614e676f9d8e8a0980dd7740f09a6ea386d0f383db6821df07d0f08545", size = 214170, upload-time = "2025-03-30T20:35:44.216Z" },
498
+ { url = "https://files.pythonhosted.org/packages/88/26/69fe1193ab0bfa1eb7a7c0149a066123611baba029ebb448500abd8143f9/coverage-7.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:e5d2b9be5b0693cf21eb4ce0ec8d211efb43966f6657807f6859aab3814f946b", size = 214969, upload-time = "2025-03-30T20:35:45.797Z" },
499
+ { url = "https://files.pythonhosted.org/packages/f3/21/87e9b97b568e223f3438d93072479c2f36cc9b3f6b9f7094b9d50232acc0/coverage-7.8.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5ac46d0c2dd5820ce93943a501ac5f6548ea81594777ca585bf002aa8854cacd", size = 211708, upload-time = "2025-03-30T20:35:47.417Z" },
500
+ { url = "https://files.pythonhosted.org/packages/75/be/882d08b28a0d19c9c4c2e8a1c6ebe1f79c9c839eb46d4fca3bd3b34562b9/coverage-7.8.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:771eb7587a0563ca5bb6f622b9ed7f9d07bd08900f7589b4febff05f469bea00", size = 211981, upload-time = "2025-03-30T20:35:49.002Z" },
501
+ { url = "https://files.pythonhosted.org/packages/7a/1d/ce99612ebd58082fbe3f8c66f6d8d5694976c76a0d474503fa70633ec77f/coverage-7.8.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42421e04069fb2cbcbca5a696c4050b84a43b05392679d4068acbe65449b5c64", size = 245495, upload-time = "2025-03-30T20:35:51.073Z" },
502
+ { url = "https://files.pythonhosted.org/packages/dc/8d/6115abe97df98db6b2bd76aae395fcc941d039a7acd25f741312ced9a78f/coverage-7.8.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:554fec1199d93ab30adaa751db68acec2b41c5602ac944bb19187cb9a41a8067", size = 242538, upload-time = "2025-03-30T20:35:52.941Z" },
503
+ { url = "https://files.pythonhosted.org/packages/cb/74/2f8cc196643b15bc096d60e073691dadb3dca48418f08bc78dd6e899383e/coverage-7.8.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5aaeb00761f985007b38cf463b1d160a14a22c34eb3f6a39d9ad6fc27cb73008", size = 244561, upload-time = "2025-03-30T20:35:54.658Z" },
504
+ { url = "https://files.pythonhosted.org/packages/22/70/c10c77cd77970ac965734fe3419f2c98665f6e982744a9bfb0e749d298f4/coverage-7.8.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:581a40c7b94921fffd6457ffe532259813fc68eb2bdda60fa8cc343414ce3733", size = 244633, upload-time = "2025-03-30T20:35:56.221Z" },
505
+ { url = "https://files.pythonhosted.org/packages/38/5a/4f7569d946a07c952688debee18c2bb9ab24f88027e3d71fd25dbc2f9dca/coverage-7.8.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:f319bae0321bc838e205bf9e5bc28f0a3165f30c203b610f17ab5552cff90323", size = 242712, upload-time = "2025-03-30T20:35:57.801Z" },
506
+ { url = "https://files.pythonhosted.org/packages/bb/a1/03a43b33f50475a632a91ea8c127f7e35e53786dbe6781c25f19fd5a65f8/coverage-7.8.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:04bfec25a8ef1c5f41f5e7e5c842f6b615599ca8ba8391ec33a9290d9d2db3a3", size = 244000, upload-time = "2025-03-30T20:35:59.378Z" },
507
+ { url = "https://files.pythonhosted.org/packages/6a/89/ab6c43b1788a3128e4d1b7b54214548dcad75a621f9d277b14d16a80d8a1/coverage-7.8.0-cp313-cp313-win32.whl", hash = "sha256:dd19608788b50eed889e13a5d71d832edc34fc9dfce606f66e8f9f917eef910d", size = 214195, upload-time = "2025-03-30T20:36:01.005Z" },
508
+ { url = "https://files.pythonhosted.org/packages/12/12/6bf5f9a8b063d116bac536a7fb594fc35cb04981654cccb4bbfea5dcdfa0/coverage-7.8.0-cp313-cp313-win_amd64.whl", hash = "sha256:a9abbccd778d98e9c7e85038e35e91e67f5b520776781d9a1e2ee9d400869487", size = 214998, upload-time = "2025-03-30T20:36:03.006Z" },
509
+ { url = "https://files.pythonhosted.org/packages/2a/e6/1e9df74ef7a1c983a9c7443dac8aac37a46f1939ae3499424622e72a6f78/coverage-7.8.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:18c5ae6d061ad5b3e7eef4363fb27a0576012a7447af48be6c75b88494c6cf25", size = 212541, upload-time = "2025-03-30T20:36:04.638Z" },
510
+ { url = "https://files.pythonhosted.org/packages/04/51/c32174edb7ee49744e2e81c4b1414ac9df3dacfcb5b5f273b7f285ad43f6/coverage-7.8.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:95aa6ae391a22bbbce1b77ddac846c98c5473de0372ba5c463480043a07bff42", size = 212767, upload-time = "2025-03-30T20:36:06.503Z" },
511
+ { url = "https://files.pythonhosted.org/packages/e9/8f/f454cbdb5212f13f29d4a7983db69169f1937e869a5142bce983ded52162/coverage-7.8.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e013b07ba1c748dacc2a80e69a46286ff145935f260eb8c72df7185bf048f502", size = 256997, upload-time = "2025-03-30T20:36:08.137Z" },
512
+ { url = "https://files.pythonhosted.org/packages/e6/74/2bf9e78b321216d6ee90a81e5c22f912fc428442c830c4077b4a071db66f/coverage-7.8.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d766a4f0e5aa1ba056ec3496243150698dc0481902e2b8559314368717be82b1", size = 252708, upload-time = "2025-03-30T20:36:09.781Z" },
513
+ { url = "https://files.pythonhosted.org/packages/92/4d/50d7eb1e9a6062bee6e2f92e78b0998848a972e9afad349b6cdde6fa9e32/coverage-7.8.0-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad80e6b4a0c3cb6f10f29ae4c60e991f424e6b14219d46f1e7d442b938ee68a4", size = 255046, upload-time = "2025-03-30T20:36:11.409Z" },
514
+ { url = "https://files.pythonhosted.org/packages/40/9e/71fb4e7402a07c4198ab44fc564d09d7d0ffca46a9fb7b0a7b929e7641bd/coverage-7.8.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b87eb6fc9e1bb8f98892a2458781348fa37e6925f35bb6ceb9d4afd54ba36c73", size = 256139, upload-time = "2025-03-30T20:36:13.86Z" },
515
+ { url = "https://files.pythonhosted.org/packages/49/1a/78d37f7a42b5beff027e807c2843185961fdae7fe23aad5a4837c93f9d25/coverage-7.8.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:d1ba00ae33be84066cfbe7361d4e04dec78445b2b88bdb734d0d1cbab916025a", size = 254307, upload-time = "2025-03-30T20:36:16.074Z" },
516
+ { url = "https://files.pythonhosted.org/packages/58/e9/8fb8e0ff6bef5e170ee19d59ca694f9001b2ec085dc99b4f65c128bb3f9a/coverage-7.8.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f3c38e4e5ccbdc9198aecc766cedbb134b2d89bf64533973678dfcf07effd883", size = 255116, upload-time = "2025-03-30T20:36:18.033Z" },
517
+ { url = "https://files.pythonhosted.org/packages/56/b0/d968ecdbe6fe0a863de7169bbe9e8a476868959f3af24981f6a10d2b6924/coverage-7.8.0-cp313-cp313t-win32.whl", hash = "sha256:379fe315e206b14e21db5240f89dc0774bdd3e25c3c58c2c733c99eca96f1ada", size = 214909, upload-time = "2025-03-30T20:36:19.644Z" },
518
+ { url = "https://files.pythonhosted.org/packages/87/e9/d6b7ef9fecf42dfb418d93544af47c940aa83056c49e6021a564aafbc91f/coverage-7.8.0-cp313-cp313t-win_amd64.whl", hash = "sha256:2e4b6b87bb0c846a9315e3ab4be2d52fac905100565f4b92f02c445c8799e257", size = 216068, upload-time = "2025-03-30T20:36:21.282Z" },
519
+ { url = "https://files.pythonhosted.org/packages/c4/f1/1da77bb4c920aa30e82fa9b6ea065da3467977c2e5e032e38e66f1c57ffd/coverage-7.8.0-pp39.pp310.pp311-none-any.whl", hash = "sha256:b8194fb8e50d556d5849753de991d390c5a1edeeba50f68e3a9253fbd8bf8ccd", size = 203443, upload-time = "2025-03-30T20:36:41.959Z" },
520
+ { url = "https://files.pythonhosted.org/packages/59/f1/4da7717f0063a222db253e7121bd6a56f6fb1ba439dcc36659088793347c/coverage-7.8.0-py3-none-any.whl", hash = "sha256:dbf364b4c5e7bae9250528167dfe40219b62e2d573c854d74be213e1e52069f7", size = 203435, upload-time = "2025-03-30T20:36:43.61Z" },
521
+ ]
522
+
523
+ [package.optional-dependencies]
524
+ toml = [
525
+ { name = "tomli", marker = "python_full_version <= '3.11'" },
526
+ ]
527
+
463
528
  [[package]]
464
529
  name = "debugpy"
465
530
  version = "1.8.14"
@@ -1313,7 +1378,7 @@ wheels = [
1313
1378
 
1314
1379
  [[package]]
1315
1380
  name = "lionagi"
1316
- version = "0.12.0"
1381
+ version = "0.12.1"
1317
1382
  source = { editable = "." }
1318
1383
  dependencies = [
1319
1384
  { name = "jinja2" },
@@ -1349,6 +1414,7 @@ dev = [
1349
1414
  { name = "pre-commit" },
1350
1415
  { name = "pytest" },
1351
1416
  { name = "pytest-asyncio" },
1417
+ { name = "pytest-cov" },
1352
1418
  { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" },
1353
1419
  { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" },
1354
1420
  { name = "sphinx-autobuild" },
@@ -1379,6 +1445,7 @@ dev = [
1379
1445
  { name = "pre-commit", specifier = ">=4.0.1" },
1380
1446
  { name = "pytest", specifier = ">=8.3.4" },
1381
1447
  { name = "pytest-asyncio", specifier = ">=0.25.0" },
1448
+ { name = "pytest-cov", specifier = ">=6.1.1" },
1382
1449
  { name = "sphinx", specifier = ">=8.1.3" },
1383
1450
  { name = "sphinx-autobuild", specifier = ">=2024.10.3" },
1384
1451
  ]
@@ -2717,6 +2784,19 @@ wheels = [
2717
2784
  { url = "https://files.pythonhosted.org/packages/20/7f/338843f449ace853647ace35870874f69a764d251872ed1b4de9f234822c/pytest_asyncio-0.26.0-py3-none-any.whl", hash = "sha256:7b51ed894f4fbea1340262bdae5135797ebbe21d8638978e35d31c6d19f72fb0", size = 19694, upload-time = "2025-03-25T06:22:27.807Z" },
2718
2785
  ]
2719
2786
 
2787
+ [[package]]
2788
+ name = "pytest-cov"
2789
+ version = "6.1.1"
2790
+ source = { registry = "https://pypi.org/simple" }
2791
+ dependencies = [
2792
+ { name = "coverage", extra = ["toml"] },
2793
+ { name = "pytest" },
2794
+ ]
2795
+ sdist = { url = "https://files.pythonhosted.org/packages/25/69/5f1e57f6c5a39f81411b550027bf72842c4567ff5fd572bed1edc9e4b5d9/pytest_cov-6.1.1.tar.gz", hash = "sha256:46935f7aaefba760e716c2ebfbe1c216240b9592966e7da99ea8292d4d3e2a0a", size = 66857, upload-time = "2025-04-05T14:07:51.592Z" }
2796
+ wheels = [
2797
+ { url = "https://files.pythonhosted.org/packages/28/d0/def53b4a790cfb21483016430ed828f64830dd981ebe1089971cd10cab25/pytest_cov-6.1.1-py3-none-any.whl", hash = "sha256:bddf29ed2d0ab6f4df17b4c55b0a657287db8684af9c42ea546b21b1041b3dde", size = 23841, upload-time = "2025-04-05T14:07:49.641Z" },
2798
+ ]
2799
+
2720
2800
  [[package]]
2721
2801
  name = "python-bidi"
2722
2802
  version = "0.6.6"
@@ -1,68 +0,0 @@
1
- name: Continuous Integration
2
-
3
- on:
4
- push:
5
- branches: [main, develop]
6
- pull_request:
7
- branches: [main, develop]
8
-
9
- jobs:
10
- test:
11
- runs-on: ubuntu-latest
12
- strategy:
13
- matrix:
14
- python-version: ["3.10", "3.11", "3.12", "3.13"]
15
- steps:
16
- - uses: actions/checkout@v4
17
- - name: Set up Python ${{ matrix.python-version }}
18
- uses: actions/setup-python@v5
19
- with:
20
- python-version: ${{ matrix.python-version }}
21
-
22
- - name: Install uv
23
- run: |
24
- curl -LsSf https://astral.sh/uv/install.sh | sh
25
- echo "$HOME/.cargo/bin" >> $GITHUB_PATH
26
-
27
- - name: Load cached dependencies
28
- id: cached-uv-dependencies
29
- uses: actions/cache@v4
30
- with:
31
- path: .venv
32
- key: venv-${{ runner.os }}-${{ matrix.python-version }}-${{ hashFiles('pyproject.toml') }}
33
-
34
- - name: Install dependencies
35
- if: steps.cached-uv-dependencies.outputs.cache-hit != 'true'
36
- run: |
37
- uv venv
38
- uv build
39
-
40
- - name: Run tests
41
- run: |
42
- source .venv/bin/activate
43
- uv run pytest --asyncio-mode=auto --maxfail=1 --disable-warnings tests/
44
-
45
- - name: Check code style and compatibility
46
- run: |
47
- source .venv/bin/activate
48
- uv run black --check .
49
- uv run isort --check-only .
50
-
51
- publish:
52
- needs: test
53
- runs-on: ubuntu-latest
54
- if: github.event_name == 'push' && github.ref == 'refs/heads/main'
55
- steps:
56
- - uses: actions/checkout@v4
57
- - name: Set up Python
58
- uses: actions/setup-python@v5
59
- with:
60
- python-version: "3.12"
61
-
62
- - name: Install uv
63
- run: |
64
- curl -LsSf https://astral.sh/uv/install.sh | sh
65
- echo "$HOME/.cargo/bin" >> $GITHUB_PATH
66
-
67
- - name: Build package
68
- run: uv build
@@ -1,160 +0,0 @@
1
- from enum import Enum
2
-
3
- from pydantic import BaseModel, Field
4
-
5
-
6
- class CategoryEnum(str, Enum):
7
- company = "company"
8
- research_paper = "research paper"
9
- news = "news"
10
- pdf = "pdf"
11
- github = "github"
12
- tweet = "tweet"
13
- personal_site = "personal site"
14
- linkedin_profile = "linkedin profile"
15
- financial_report = "financial report"
16
-
17
-
18
- class LivecrawlEnum(str, Enum):
19
- never = "never"
20
- fallback = "fallback"
21
- always = "always"
22
-
23
-
24
- class SearchTypeEnum(str, Enum):
25
- keyword = "keyword"
26
- neural = "neural"
27
- auto = "auto"
28
-
29
-
30
- class ContentsText(BaseModel):
31
- includeHtmlTags: bool | None = Field(
32
- default=False,
33
- description="Whether to include HTML tags in the text. Set to True if you want to retain HTML structure for the LLM to interpret.",
34
- )
35
- maxCharacters: int | None = Field(
36
- default=None,
37
- description="The maximum number of characters to return from the webpage text.",
38
- )
39
-
40
-
41
- class ContentsHighlights(BaseModel):
42
- highlightsPerUrl: int | None = Field(
43
- default=1,
44
- description="The number of highlight snippets you want per page.",
45
- )
46
- numSentences: int | None = Field(
47
- default=5,
48
- description="Number of sentences to return in each highlight snippet.",
49
- )
50
- query: None | str = Field(
51
- default=None,
52
- description="A specific query used to generate the highlight snippets.",
53
- )
54
-
55
-
56
- class ContentsSummary(BaseModel):
57
- query: None | str = Field(
58
- default=None,
59
- description="A specific query used to generate a summary of the webpage.",
60
- )
61
-
62
-
63
- class ContentsExtras(BaseModel):
64
- links: int | None = Field(
65
- default=None, description="Number of links to return from each page."
66
- )
67
- imageLinks: int | None = Field(
68
- default=None, description="Number of images to return for each result."
69
- )
70
-
71
-
72
- class Contents(BaseModel):
73
- text: None | ContentsText = Field(
74
- default=None,
75
- description="Return full or partial text for each page, with optional HTML structure or size limit.",
76
- )
77
- highlights: None | ContentsHighlights = Field(
78
- default=None, description="Return snippet highlights for each page."
79
- )
80
- summary: None | ContentsSummary = Field(
81
- default=None, description="Return a short summary of each page."
82
- )
83
- livecrawl: None | LivecrawlEnum = Field(
84
- default=LivecrawlEnum.never,
85
- description="Livecrawling setting for each page. Options: never, fallback, always.",
86
- )
87
- livecrawlTimeout: int | None = Field(
88
- default=10000,
89
- description="Timeout in milliseconds for livecrawling. Default 10000.",
90
- )
91
- subpages: int | None = Field(
92
- default=None,
93
- description="Number of subpages to crawl within each URL.",
94
- )
95
- subpageTarget: None | str | list[str] = Field(
96
- default=None,
97
- description="A target subpage or multiple subpages (list) to crawl, e.g. 'cited papers'.",
98
- )
99
- extras: None | ContentsExtras = Field(
100
- default=None,
101
- description="Additional extras like links or images to return for each page.",
102
- )
103
-
104
-
105
- class ExaSearchRequest(BaseModel):
106
- query: str = Field(
107
- ...,
108
- description="The main query string describing what you're looking for.",
109
- )
110
- category: None | CategoryEnum = Field(
111
- default=None,
112
- description="A data category to focus on, such as 'company', 'research paper', 'news', etc.",
113
- )
114
- type: None | SearchTypeEnum = Field(
115
- default=None,
116
- description="The type of search to run. Can be 'auto', 'keyword', or 'neural'.",
117
- )
118
- useAutoprompt: None | bool = Field(
119
- default=False,
120
- description="If True, Exa auto-optimizes your query for best results (neural or auto search only).",
121
- )
122
- numResults: int | None = Field(
123
- default=10, description="Number of results to return. Default is 10."
124
- )
125
- includeDomains: None | list[str] = Field(
126
- default=None,
127
- description="List of domains you want to include exclusively.",
128
- )
129
- excludeDomains: None | list[str] = Field(
130
- default=None,
131
- description="List of domains you do NOT want to see in the results.",
132
- )
133
- startCrawlDate: None | str = Field(
134
- default=None,
135
- description="Include results crawled after this ISO date (e.g., '2023-01-01T00:00:00.000Z').",
136
- )
137
- endCrawlDate: None | str = Field(
138
- default=None,
139
- description="Include results crawled before this ISO date.",
140
- )
141
- startPublishedDate: None | str = Field(
142
- default=None,
143
- description="Only return results published after this ISO date.",
144
- )
145
- endPublishedDate: None | str = Field(
146
- default=None,
147
- description="Only return results published before this ISO date.",
148
- )
149
- includeText: None | list[str] = Field(
150
- default=None,
151
- description="Strings that must appear in the webpage text. Only a single string up to 5 words is currently supported.",
152
- )
153
- excludeText: None | list[str] = Field(
154
- default=None,
155
- description="Strings that must NOT appear in the webpage text. Only a single string up to 5 words is currently supported.",
156
- )
157
- contents: None | Contents = Field(
158
- default=None,
159
- description="Dict defining the different ways you want to retrieve webpage contents, including text, highlights, or summaries.",
160
- )
@@ -1,144 +0,0 @@
1
- from enum import Enum
2
- from typing import Any
3
-
4
- from pydantic import BaseModel, Field, model_validator
5
-
6
-
7
- class PerplexityRole(str, Enum):
8
- """Roles allowed in Perplexity's messages."""
9
-
10
- system = "system"
11
- user = "user"
12
- assistant = "assistant"
13
-
14
-
15
- class PerplexityMessage(BaseModel):
16
- """
17
- A single message in the conversation.
18
- `role` can be 'system', 'user', or 'assistant'.
19
- `content` is the text for that conversation turn.
20
- """
21
-
22
- role: PerplexityRole = Field(
23
- ...,
24
- description="The role of the speaker. Must be system, user, or assistant.",
25
- )
26
- content: str = Field(..., description="The text content of this message.")
27
-
28
-
29
- class PerplexityChatCompletionRequest(BaseModel):
30
- """
31
- Represents the request body for Perplexity's Chat Completions endpoint.
32
- Endpoint: POST https://api.perplexity.ai/chat/completions
33
- """
34
-
35
- model: str = Field(
36
- "sonar",
37
- description="The model name, e.g. 'sonar', (the only model available at the time when this request model was updated, check doc for latest info).",
38
- )
39
- messages: list[PerplexityMessage] = Field(
40
- ..., description="A list of messages forming the conversation so far."
41
- )
42
-
43
- # Optional parameters
44
- frequency_penalty: float | None = Field(
45
- default=None,
46
- gt=0,
47
- description=(
48
- "Multiplicative penalty > 0. Values > 1.0 penalize repeated tokens more strongly. "
49
- "Value=1.0 means no penalty. Incompatible with presence_penalty."
50
- ),
51
- )
52
- presence_penalty: float | None = Field(
53
- default=None,
54
- ge=-2.0,
55
- le=2.0,
56
- description=(
57
- "Penalizes tokens that have appeared so far (range -2 to 2). "
58
- "Positive values encourage talking about new topics. Incompatible with frequency_penalty."
59
- ),
60
- )
61
- max_tokens: int | None = Field(
62
- default=None,
63
- description=(
64
- "Maximum number of completion tokens. If omitted, model generates tokens until it "
65
- "hits stop or context limit."
66
- ),
67
- )
68
- return_images: bool | None = Field(
69
- default=None,
70
- description="If True, attempt to return images (closed beta feature).",
71
- )
72
- return_related_questions: bool | None = Field(
73
- default=None,
74
- description="If True, attempt to return related questions (closed beta feature).",
75
- )
76
- search_domain_filter: list[Any] | None = Field(
77
- default=None,
78
- description=(
79
- "List of domains to limit or exclude in the online search. Example: ['example.com', '-twitter.com']. "
80
- "Supports up to 3 entries. (Closed beta feature.)"
81
- ),
82
- )
83
- search_recency_filter: str | None = Field(
84
- default=None,
85
- description=(
86
- "Returns search results within a specified time interval: 'month', 'week', 'day', or 'hour'."
87
- ),
88
- )
89
- stream: bool | None = Field(
90
- default=None,
91
- description=(
92
- "If True, response is returned incrementally via Server-Sent Events (SSE)."
93
- ),
94
- )
95
- temperature: float | None = Field(
96
- default=None,
97
- ge=0.0,
98
- lt=2.0,
99
- description=(
100
- "Controls randomness of sampling, range [0, 2). Higher => more random. "
101
- "Defaults to 0.2."
102
- ),
103
- )
104
- top_k: int | None = Field(
105
- default=None,
106
- ge=0,
107
- le=2048,
108
- description=(
109
- "Top-K filtering. 0 disables top-k filtering. If set, only the top K tokens are considered. "
110
- "We recommend altering either top_k or top_p, but not both."
111
- ),
112
- )
113
- top_p: float | None = Field(
114
- default=None,
115
- ge=0.0,
116
- le=1.0,
117
- description=(
118
- "Nucleus sampling threshold. We recommend altering either top_k or top_p, but not both."
119
- ),
120
- )
121
-
122
- @model_validator(mode="before")
123
- def validate_penalties(cls, values):
124
- """
125
- Disallow using both frequency_penalty != 1.0 and presence_penalty != 0.0 at once,
126
- since the docs say they're incompatible.
127
- """
128
- freq_pen = values.get("frequency_penalty", 1.0)
129
- pres_pen = values.get("presence_penalty", 0.0)
130
-
131
- # The doc states frequency_penalty is incompatible with presence_penalty.
132
- # We'll enforce that if presence_penalty != 0, frequency_penalty must be 1.0
133
- # or vice versa. Adjust logic as needed.
134
- if pres_pen != 0.0 and freq_pen != 1.0:
135
- raise ValueError(
136
- "presence_penalty is incompatible with frequency_penalty. "
137
- "Please use only one: either presence_penalty=0 with freq_pen !=1, "
138
- "or presence_penalty!=0 with freq_pen=1."
139
- )
140
- return values
141
-
142
- def to_dict(self) -> dict:
143
- """Return a dict suitable for JSON serialization and sending to Perplexity API."""
144
- return self.model_dump(exclude_none=True)
@@ -1 +0,0 @@
1
- __version__ = "0.12.0"
File without changes
File without changes
File without changes
File without changes