symbolicai 0.17.5__tar.gz → 0.17.6__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 (264) hide show
  1. {symbolicai-0.17.5 → symbolicai-0.17.6}/PKG-INFO +1 -1
  2. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/__init__.py +1 -1
  3. symbolicai-0.17.6/symai/backend/engines/search/engine_openai.py +238 -0
  4. {symbolicai-0.17.5 → symbolicai-0.17.6}/symbolicai.egg-info/PKG-INFO +1 -1
  5. symbolicai-0.17.5/symai/backend/engines/search/engine_openai.py +0 -154
  6. {symbolicai-0.17.5 → symbolicai-0.17.6}/.gitbook.yaml +0 -0
  7. {symbolicai-0.17.5 → symbolicai-0.17.6}/.github/FUNDING.yml +0 -0
  8. {symbolicai-0.17.5 → symbolicai-0.17.6}/.gitignore +0 -0
  9. {symbolicai-0.17.5 → symbolicai-0.17.6}/.symai/symsh.config.json +0 -0
  10. {symbolicai-0.17.5 → symbolicai-0.17.6}/CITATION.cff +0 -0
  11. {symbolicai-0.17.5 → symbolicai-0.17.6}/Dockerfile +0 -0
  12. {symbolicai-0.17.5 → symbolicai-0.17.6}/MANIFEST.in +0 -0
  13. {symbolicai-0.17.5 → symbolicai-0.17.6}/README.md +0 -0
  14. {symbolicai-0.17.5 → symbolicai-0.17.6}/app.py +0 -0
  15. {symbolicai-0.17.5 → symbolicai-0.17.6}/assets/images/banner.png +0 -0
  16. {symbolicai-0.17.5 → symbolicai-0.17.6}/assets/images/cat.jpg +0 -0
  17. {symbolicai-0.17.5 → symbolicai-0.17.6}/assets/images/cat.png +0 -0
  18. {symbolicai-0.17.5 → symbolicai-0.17.6}/assets/images/contract_flow.png +0 -0
  19. {symbolicai-0.17.5 → symbolicai-0.17.6}/assets/images/img1.png +0 -0
  20. {symbolicai-0.17.5 → symbolicai-0.17.6}/assets/images/img10.png +0 -0
  21. {symbolicai-0.17.5 → symbolicai-0.17.6}/assets/images/img2.png +0 -0
  22. {symbolicai-0.17.5 → symbolicai-0.17.6}/assets/images/img3.png +0 -0
  23. {symbolicai-0.17.5 → symbolicai-0.17.6}/assets/images/img4.png +0 -0
  24. {symbolicai-0.17.5 → symbolicai-0.17.6}/assets/images/img5.png +0 -0
  25. {symbolicai-0.17.5 → symbolicai-0.17.6}/assets/images/img6.png +0 -0
  26. {symbolicai-0.17.5 → symbolicai-0.17.6}/assets/images/img7.png +0 -0
  27. {symbolicai-0.17.5 → symbolicai-0.17.6}/assets/images/img8.png +0 -0
  28. {symbolicai-0.17.5 → symbolicai-0.17.6}/assets/images/img9.png +0 -0
  29. {symbolicai-0.17.5 → symbolicai-0.17.6}/assets/images/preview.gif +0 -0
  30. {symbolicai-0.17.5 → symbolicai-0.17.6}/assets/images/screen1.jpeg +0 -0
  31. {symbolicai-0.17.5 → symbolicai-0.17.6}/assets/images/symai_logo.png +0 -0
  32. {symbolicai-0.17.5 → symbolicai-0.17.6}/assets/images/symsh.png +0 -0
  33. {symbolicai-0.17.5 → symbolicai-0.17.6}/assets/images/vid1.png +0 -0
  34. {symbolicai-0.17.5 → symbolicai-0.17.6}/assets/images/vid2.png +0 -0
  35. {symbolicai-0.17.5 → symbolicai-0.17.6}/assets/images/vid3.png +0 -0
  36. {symbolicai-0.17.5 → symbolicai-0.17.6}/assets/images/vid4.png +0 -0
  37. {symbolicai-0.17.5 → symbolicai-0.17.6}/assets/images/vid5.png +0 -0
  38. {symbolicai-0.17.5 → symbolicai-0.17.6}/assets/images/vid6.png +0 -0
  39. {symbolicai-0.17.5 → symbolicai-0.17.6}/assets/results/news.html +0 -0
  40. {symbolicai-0.17.5 → symbolicai-0.17.6}/assets/results/news.png +0 -0
  41. {symbolicai-0.17.5 → symbolicai-0.17.6}/assets/results/news_prev.png +0 -0
  42. {symbolicai-0.17.5 → symbolicai-0.17.6}/bin/install.ps1 +0 -0
  43. {symbolicai-0.17.5 → symbolicai-0.17.6}/bin/install.sh +0 -0
  44. {symbolicai-0.17.5 → symbolicai-0.17.6}/build.py +0 -0
  45. {symbolicai-0.17.5 → symbolicai-0.17.6}/docker-compose.yml +0 -0
  46. {symbolicai-0.17.5 → symbolicai-0.17.6}/docs/source/ENGINES/clip_engine.md +0 -0
  47. {symbolicai-0.17.5 → symbolicai-0.17.6}/docs/source/ENGINES/custom_engine.md +0 -0
  48. {symbolicai-0.17.5 → symbolicai-0.17.6}/docs/source/ENGINES/drawing_engine.md +0 -0
  49. {symbolicai-0.17.5 → symbolicai-0.17.6}/docs/source/ENGINES/file_engine.md +0 -0
  50. {symbolicai-0.17.5 → symbolicai-0.17.6}/docs/source/ENGINES/indexing_engine.md +0 -0
  51. {symbolicai-0.17.5 → symbolicai-0.17.6}/docs/source/ENGINES/local_engine.md +0 -0
  52. {symbolicai-0.17.5 → symbolicai-0.17.6}/docs/source/ENGINES/neurosymbolic_engine.md +0 -0
  53. {symbolicai-0.17.5 → symbolicai-0.17.6}/docs/source/ENGINES/ocr_engine.md +0 -0
  54. {symbolicai-0.17.5 → symbolicai-0.17.6}/docs/source/ENGINES/search_engine.md +0 -0
  55. {symbolicai-0.17.5 → symbolicai-0.17.6}/docs/source/ENGINES/speech_to_text_engine.md +0 -0
  56. {symbolicai-0.17.5 → symbolicai-0.17.6}/docs/source/ENGINES/symbolic_engine.md +0 -0
  57. {symbolicai-0.17.5 → symbolicai-0.17.6}/docs/source/ENGINES/webscraping_engine.md +0 -0
  58. {symbolicai-0.17.5 → symbolicai-0.17.6}/docs/source/FEATURES/contracts.md +0 -0
  59. {symbolicai-0.17.5 → symbolicai-0.17.6}/docs/source/FEATURES/error_handling.md +0 -0
  60. {symbolicai-0.17.5 → symbolicai-0.17.6}/docs/source/FEATURES/expressions.md +0 -0
  61. {symbolicai-0.17.5 → symbolicai-0.17.6}/docs/source/FEATURES/import.md +0 -0
  62. {symbolicai-0.17.5 → symbolicai-0.17.6}/docs/source/FEATURES/operations.md +0 -0
  63. {symbolicai-0.17.5 → symbolicai-0.17.6}/docs/source/FEATURES/primitives.md +0 -0
  64. {symbolicai-0.17.5 → symbolicai-0.17.6}/docs/source/INSTALLATION.md +0 -0
  65. {symbolicai-0.17.5 → symbolicai-0.17.6}/docs/source/INTRODUCTION.md +0 -0
  66. {symbolicai-0.17.5 → symbolicai-0.17.6}/docs/source/LICENSE +0 -0
  67. {symbolicai-0.17.5 → symbolicai-0.17.6}/docs/source/QUICKSTART.md +0 -0
  68. {symbolicai-0.17.5 → symbolicai-0.17.6}/docs/source/SUMMARY.md +0 -0
  69. {symbolicai-0.17.5 → symbolicai-0.17.6}/docs/source/TOOLS/chatbot.md +0 -0
  70. {symbolicai-0.17.5 → symbolicai-0.17.6}/docs/source/TOOLS/packages.md +0 -0
  71. {symbolicai-0.17.5 → symbolicai-0.17.6}/docs/source/TOOLS/shell.md +0 -0
  72. {symbolicai-0.17.5 → symbolicai-0.17.6}/docs/source/TUTORIALS/chatbot.md +0 -0
  73. {symbolicai-0.17.5 → symbolicai-0.17.6}/docs/source/TUTORIALS/context.md +0 -0
  74. {symbolicai-0.17.5 → symbolicai-0.17.6}/docs/source/TUTORIALS/data_query.md +0 -0
  75. {symbolicai-0.17.5 → symbolicai-0.17.6}/docs/source/TUTORIALS/video_tutorials.md +0 -0
  76. {symbolicai-0.17.5 → symbolicai-0.17.6}/environment.yml +0 -0
  77. {symbolicai-0.17.5 → symbolicai-0.17.6}/examples/contracts.ipynb +0 -0
  78. {symbolicai-0.17.5 → symbolicai-0.17.6}/examples/primitives.ipynb +0 -0
  79. {symbolicai-0.17.5 → symbolicai-0.17.6}/icon_converter.py +0 -0
  80. {symbolicai-0.17.5 → symbolicai-0.17.6}/installer.py +0 -0
  81. {symbolicai-0.17.5 → symbolicai-0.17.6}/legacy/notebooks/Basics.ipynb +0 -0
  82. {symbolicai-0.17.5 → symbolicai-0.17.6}/legacy/notebooks/ChatBot.ipynb +0 -0
  83. {symbolicai-0.17.5 → symbolicai-0.17.6}/legacy/notebooks/Conversation.ipynb +0 -0
  84. {symbolicai-0.17.5 → symbolicai-0.17.6}/legacy/notebooks/Indexer.ipynb +0 -0
  85. {symbolicai-0.17.5 → symbolicai-0.17.6}/legacy/notebooks/News.ipynb +0 -0
  86. {symbolicai-0.17.5 → symbolicai-0.17.6}/legacy/notebooks/Queries.ipynb +0 -0
  87. {symbolicai-0.17.5 → symbolicai-0.17.6}/legacy/notebooks/TTS_Persona.ipynb +0 -0
  88. {symbolicai-0.17.5 → symbolicai-0.17.6}/legacy/notebooks/examples/Lean engine.png +0 -0
  89. {symbolicai-0.17.5 → symbolicai-0.17.6}/legacy/notebooks/examples/a_star.txt +0 -0
  90. {symbolicai-0.17.5 → symbolicai-0.17.6}/legacy/notebooks/examples/abstract.py +0 -0
  91. {symbolicai-0.17.5 → symbolicai-0.17.6}/legacy/notebooks/examples/audio.mp3 +0 -0
  92. {symbolicai-0.17.5 → symbolicai-0.17.6}/legacy/notebooks/examples/dbpedia_samples.jsonl +0 -0
  93. {symbolicai-0.17.5 → symbolicai-0.17.6}/legacy/notebooks/examples/dbpedia_samples_prepared_train.jsonl +0 -0
  94. {symbolicai-0.17.5 → symbolicai-0.17.6}/legacy/notebooks/examples/dbpedia_samples_prepared_valid.jsonl +0 -0
  95. {symbolicai-0.17.5 → symbolicai-0.17.6}/legacy/notebooks/examples/demo.py +0 -0
  96. {symbolicai-0.17.5 → symbolicai-0.17.6}/legacy/notebooks/examples/demo_strategy.py +0 -0
  97. {symbolicai-0.17.5 → symbolicai-0.17.6}/legacy/notebooks/examples/docs.py +0 -0
  98. {symbolicai-0.17.5 → symbolicai-0.17.6}/legacy/notebooks/examples/einsteins_puzzle.txt +0 -0
  99. {symbolicai-0.17.5 → symbolicai-0.17.6}/legacy/notebooks/examples/file.json +0 -0
  100. {symbolicai-0.17.5 → symbolicai-0.17.6}/legacy/notebooks/examples/lean.py +0 -0
  101. {symbolicai-0.17.5 → symbolicai-0.17.6}/legacy/notebooks/examples/news.py +0 -0
  102. {symbolicai-0.17.5 → symbolicai-0.17.6}/legacy/notebooks/examples/paper.pdf +0 -0
  103. {symbolicai-0.17.5 → symbolicai-0.17.6}/legacy/notebooks/examples/paper.py +0 -0
  104. {symbolicai-0.17.5 → symbolicai-0.17.6}/legacy/notebooks/examples/sql.py +0 -0
  105. {symbolicai-0.17.5 → symbolicai-0.17.6}/public/eai.svg +0 -0
  106. {symbolicai-0.17.5 → symbolicai-0.17.6}/pyproject.toml +0 -0
  107. {symbolicai-0.17.5 → symbolicai-0.17.6}/pytest.ini +0 -0
  108. {symbolicai-0.17.5 → symbolicai-0.17.6}/setup.cfg +0 -0
  109. {symbolicai-0.17.5 → symbolicai-0.17.6}/setup.py +0 -0
  110. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/TERMS_OF_SERVICE.md +0 -0
  111. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/backend/__init__.py +0 -0
  112. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/backend/base.py +0 -0
  113. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/backend/driver/webclient.py +0 -0
  114. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/backend/engines/__init__.py +0 -0
  115. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/backend/engines/drawing/engine_bfl.py +0 -0
  116. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/backend/engines/drawing/engine_gpt_image.py +0 -0
  117. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/backend/engines/embedding/engine_llama_cpp.py +0 -0
  118. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/backend/engines/embedding/engine_openai.py +0 -0
  119. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/backend/engines/embedding/engine_plugin_embeddings.py +0 -0
  120. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/backend/engines/execute/engine_python.py +0 -0
  121. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/backend/engines/files/engine_io.py +0 -0
  122. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/backend/engines/imagecaptioning/engine_blip2.py +0 -0
  123. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/backend/engines/imagecaptioning/engine_llavacpp_client.py +0 -0
  124. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/backend/engines/index/engine_pinecone.py +0 -0
  125. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/backend/engines/index/engine_vectordb.py +0 -0
  126. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/backend/engines/lean/engine_lean4.py +0 -0
  127. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/backend/engines/neurosymbolic/__init__.py +0 -0
  128. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/backend/engines/neurosymbolic/engine_anthropic_claudeX_chat.py +0 -0
  129. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/backend/engines/neurosymbolic/engine_anthropic_claudeX_reasoning.py +0 -0
  130. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/backend/engines/neurosymbolic/engine_deepseekX_reasoning.py +0 -0
  131. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/backend/engines/neurosymbolic/engine_google_geminiX_reasoning.py +0 -0
  132. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/backend/engines/neurosymbolic/engine_groq.py +0 -0
  133. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/backend/engines/neurosymbolic/engine_huggingface.py +0 -0
  134. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/backend/engines/neurosymbolic/engine_llama_cpp.py +0 -0
  135. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/backend/engines/neurosymbolic/engine_openai_gptX_chat.py +0 -0
  136. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/backend/engines/neurosymbolic/engine_openai_gptX_reasoning.py +0 -0
  137. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/backend/engines/ocr/engine_apilayer.py +0 -0
  138. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/backend/engines/output/engine_stdout.py +0 -0
  139. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/backend/engines/search/engine_perplexity.py +0 -0
  140. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/backend/engines/search/engine_serpapi.py +0 -0
  141. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/backend/engines/speech_to_text/engine_local_whisper.py +0 -0
  142. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/backend/engines/symbolic/engine_wolframalpha.py +0 -0
  143. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/backend/engines/text_to_speech/engine_openai.py +0 -0
  144. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/backend/engines/text_vision/engine_clip.py +0 -0
  145. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/backend/engines/userinput/engine_console.py +0 -0
  146. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/backend/engines/webscraping/engine_requests.py +0 -0
  147. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/backend/mixin/__init__.py +0 -0
  148. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/backend/mixin/anthropic.py +0 -0
  149. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/backend/mixin/deepseek.py +0 -0
  150. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/backend/mixin/google.py +0 -0
  151. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/backend/mixin/openai.py +0 -0
  152. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/backend/settings.py +0 -0
  153. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/chat.py +0 -0
  154. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/collect/__init__.py +0 -0
  155. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/collect/dynamic.py +0 -0
  156. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/collect/pipeline.py +0 -0
  157. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/collect/stats.py +0 -0
  158. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/components.py +0 -0
  159. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/constraints.py +0 -0
  160. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/core.py +0 -0
  161. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/core_ext.py +0 -0
  162. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/endpoints/__init__py +0 -0
  163. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/endpoints/api.py +0 -0
  164. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/exceptions.py +0 -0
  165. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/__init__.py +0 -0
  166. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/api_builder.py +0 -0
  167. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/arxiv_pdf_parser.py +0 -0
  168. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/bibtex_parser.py +0 -0
  169. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/conversation.py +0 -0
  170. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/document.py +0 -0
  171. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/file_merger.py +0 -0
  172. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/graph.py +0 -0
  173. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/html_style_template.py +0 -0
  174. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/interfaces/__init__.py +0 -0
  175. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/interfaces/blip_2.py +0 -0
  176. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/interfaces/clip.py +0 -0
  177. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/interfaces/console.py +0 -0
  178. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/interfaces/dall_e.py +0 -0
  179. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/interfaces/file.py +0 -0
  180. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/interfaces/flux.py +0 -0
  181. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/interfaces/gpt_image.py +0 -0
  182. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/interfaces/input.py +0 -0
  183. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/interfaces/llava.py +0 -0
  184. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/interfaces/naive_vectordb.py +0 -0
  185. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/interfaces/naive_webscraping.py +0 -0
  186. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/interfaces/ocr.py +0 -0
  187. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/interfaces/openai_search.py +0 -0
  188. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/interfaces/perplexity.py +0 -0
  189. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/interfaces/pinecone.py +0 -0
  190. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/interfaces/python.py +0 -0
  191. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/interfaces/serpapi.py +0 -0
  192. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/interfaces/terminal.py +0 -0
  193. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/interfaces/tts.py +0 -0
  194. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/interfaces/whisper.py +0 -0
  195. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/interfaces/wolframalpha.py +0 -0
  196. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/metrics/__init__.py +0 -0
  197. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/metrics/similarity.py +0 -0
  198. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/os_command.py +0 -0
  199. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/packages/__init__.py +0 -0
  200. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/packages/symdev.py +0 -0
  201. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/packages/sympkg.py +0 -0
  202. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/packages/symrun.py +0 -0
  203. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/personas/__init__.py +0 -0
  204. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/personas/builder.py +0 -0
  205. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/personas/dialogue.py +0 -0
  206. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/personas/persona.py +0 -0
  207. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/personas/research/__init__.py +0 -0
  208. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/personas/research/yann_lecun.py +0 -0
  209. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/personas/sales/__init__.py +0 -0
  210. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/personas/sales/erik_james.py +0 -0
  211. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/personas/student/__init__.py +0 -0
  212. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/personas/student/max_tenner.py +0 -0
  213. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/repo_cloner.py +0 -0
  214. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/seo_query_optimizer.py +0 -0
  215. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/solver.py +0 -0
  216. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/strategies/__init__.py +0 -0
  217. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/strategies/cot.py +0 -0
  218. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/summarizer.py +0 -0
  219. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/taypan_interpreter.py +0 -0
  220. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/extended/vectordb.py +0 -0
  221. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/formatter/__init__.py +0 -0
  222. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/formatter/emoji.pytxt +0 -0
  223. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/formatter/formatter.py +0 -0
  224. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/formatter/regex.py +0 -0
  225. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/functional.py +0 -0
  226. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/imports.py +0 -0
  227. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/interfaces.py +0 -0
  228. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/memory.py +0 -0
  229. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/menu/__init__.py +0 -0
  230. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/menu/screen.py +0 -0
  231. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/misc/__init__.py +0 -0
  232. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/misc/console.py +0 -0
  233. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/misc/loader.py +0 -0
  234. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/models/__init__.py +0 -0
  235. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/models/base.py +0 -0
  236. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/models/errors.py +0 -0
  237. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/ops/__init__.py +0 -0
  238. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/ops/measures.py +0 -0
  239. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/ops/primitives.py +0 -0
  240. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/post_processors.py +0 -0
  241. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/pre_processors.py +0 -0
  242. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/processor.py +0 -0
  243. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/prompts.py +0 -0
  244. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/server/__init__.py +0 -0
  245. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/server/huggingface_server.py +0 -0
  246. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/server/llama_cpp_server.py +0 -0
  247. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/shell.py +0 -0
  248. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/shellsv.py +0 -0
  249. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/strategy.py +0 -0
  250. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/symbol.py +0 -0
  251. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/symsh.md +0 -0
  252. {symbolicai-0.17.5 → symbolicai-0.17.6}/symai/utils.py +0 -0
  253. {symbolicai-0.17.5 → symbolicai-0.17.6}/symbolicai.egg-info/SOURCES.txt +0 -0
  254. {symbolicai-0.17.5 → symbolicai-0.17.6}/symbolicai.egg-info/dependency_links.txt +0 -0
  255. {symbolicai-0.17.5 → symbolicai-0.17.6}/symbolicai.egg-info/entry_points.txt +0 -0
  256. {symbolicai-0.17.5 → symbolicai-0.17.6}/symbolicai.egg-info/requires.txt +0 -0
  257. {symbolicai-0.17.5 → symbolicai-0.17.6}/symbolicai.egg-info/top_level.txt +0 -0
  258. {symbolicai-0.17.5 → symbolicai-0.17.6}/tests/README.md +0 -0
  259. {symbolicai-0.17.5 → symbolicai-0.17.6}/tests/data/audio.mp3 +0 -0
  260. {symbolicai-0.17.5 → symbolicai-0.17.6}/tests/data/pg1727.txt +0 -0
  261. {symbolicai-0.17.5 → symbolicai-0.17.6}/tests/engines/search/openai_engine.py +0 -0
  262. {symbolicai-0.17.5 → symbolicai-0.17.6}/tests/engines/search/perplexity_engine.py +0 -0
  263. {symbolicai-0.17.5 → symbolicai-0.17.6}/trusted_repos.yml +0 -0
  264. {symbolicai-0.17.5 → symbolicai-0.17.6}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: symbolicai
3
- Version: 0.17.5
3
+ Version: 0.17.6
4
4
  Summary: A Neurosymbolic Perspective on Large Language Models
5
5
  Author-email: Marius-Constantin Dinu <marius@extensity.ai>, Leoveanu-Condrei Claudiu <leo@extensity.ai>
6
6
  Project-URL: Homepage, https://extensity.ai
@@ -33,7 +33,7 @@ os.environ['TOKENIZERS_PARALLELISM'] = "false"
33
33
  # Create singleton instance
34
34
  config_manager = settings.SymAIConfig()
35
35
 
36
- SYMAI_VERSION = "0.17.5"
36
+ SYMAI_VERSION = "0.17.6"
37
37
  __version__ = SYMAI_VERSION
38
38
  __root_dir__ = config_manager.config_dir
39
39
 
@@ -0,0 +1,238 @@
1
+ import hashlib
2
+ import json
3
+ import logging
4
+ import re
5
+ from copy import deepcopy
6
+ from dataclasses import dataclass
7
+ from urllib.parse import parse_qsl, urlencode, urlsplit, urlunsplit
8
+
9
+ from openai import OpenAI
10
+
11
+ from ....symbol import Result
12
+ from ....utils import CustomUserWarning
13
+ from ...base import Engine
14
+ from ...mixin import OPENAI_CHAT_MODELS, OPENAI_REASONING_MODELS
15
+ from ...settings import SYMAI_CONFIG
16
+
17
+ logging.getLogger("requests").setLevel(logging.ERROR)
18
+ logging.getLogger("urllib3").setLevel(logging.ERROR)
19
+ logging.getLogger("httpx").setLevel(logging.ERROR)
20
+ logging.getLogger("httpcore").setLevel(logging.ERROR)
21
+
22
+
23
+ TRACKING_KEYS = {
24
+ "utm_source" # so far I've only seen this one
25
+ }
26
+
27
+ @dataclass
28
+ class Citation:
29
+ id: str
30
+ title: str
31
+ url: str
32
+ start: int
33
+ end: int
34
+
35
+ def __hash__(self):
36
+ return hash((self.url, ))
37
+
38
+
39
+ class SearchResult(Result):
40
+ def __init__(self, value, **kwargs) -> None:
41
+ super().__init__(value, **kwargs)
42
+ if value.get('error'):
43
+ CustomUserWarning(value['error'], raise_with=ValueError)
44
+ try:
45
+ text, annotations = self._extract_text_and_annotations(value)
46
+ if text is None:
47
+ self._value = None
48
+ self._citations = []
49
+ return
50
+ replaced_text, ordered = self._replace_links_with_citations(text, annotations, id_mode="sequential")
51
+ self._value = replaced_text
52
+ self._citations = [
53
+ Citation(id=cid, title=title, url=url, start=0, end=0)
54
+ for cid, title, url in ordered
55
+ ]
56
+
57
+ except Exception as e:
58
+ self._value = None
59
+ CustomUserWarning(f"Failed to parse response: {e}", raise_with=ValueError)
60
+
61
+ def _extract_text(self, value) -> str | None:
62
+ text = None
63
+ for output in value.get('output', []):
64
+ if output.get('type') == 'message' and output.get('content'):
65
+ content0 = output['content'][0]
66
+ if 'text' in content0 and content0['text']:
67
+ text = content0['text']
68
+ return text
69
+
70
+ def _extract_text_and_annotations(self, value):
71
+ text = None
72
+ annotations = []
73
+ for output in value.get('output', []):
74
+ if output.get('type') != 'message' or not output.get('content'):
75
+ continue
76
+ for content in output.get('content', []) or []:
77
+ if 'text' in content and content['text']:
78
+ text = content['text']
79
+ anns = content.get('annotations', []) or []
80
+ for ann in anns:
81
+ if ann.get('type') == 'url_citation':
82
+ annotations.append(ann)
83
+ return text, annotations
84
+
85
+ def _normalize_url(self, u: str) -> str:
86
+ parts = urlsplit(u)
87
+ scheme = parts.scheme.lower()
88
+ netloc = parts.netloc.lower()
89
+ path = parts.path.rstrip('/') or '/'
90
+ q = []
91
+ for k, v in parse_qsl(parts.query, keep_blank_values=True):
92
+ kl = k.lower()
93
+ if kl in TRACKING_KEYS or kl.startswith('utm_'):
94
+ continue
95
+ q.append((k, v))
96
+ query = urlencode(q, doseq=True)
97
+ fragment = ''
98
+ return urlunsplit((scheme, netloc, path, query, fragment))
99
+
100
+ def _make_title_map(self, annotations):
101
+ m = {}
102
+ for a in annotations or []:
103
+ url = a.get('url')
104
+ if not url:
105
+ continue
106
+ nu = self._normalize_url(url)
107
+ title = (a.get('title') or '').strip()
108
+ if nu not in m and title:
109
+ m[nu] = title
110
+ return m
111
+
112
+ def _hostname(self, u: str) -> str:
113
+ return urlsplit(u).netloc
114
+
115
+ def _short_hash_id(self, nu: str, length=6) -> str:
116
+ return hashlib.sha1(nu.encode('utf-8')).hexdigest()[:length]
117
+
118
+ def _replace_links_with_citations(self, text: str, annotations, id_mode: str = 'sequential'):
119
+ title_map = self._make_title_map(annotations)
120
+ id_map = {}
121
+ ordered = [] # list of ("[n]", title, normalized_url)
122
+ next_id = 1
123
+
124
+ pattern = re.compile(r"\[([^\]]*?)\]\((https?://[^\s)]+)\)")
125
+
126
+ def _get_id(nu: str) -> str:
127
+ nonlocal next_id
128
+ if id_mode == 'hash':
129
+ return self._short_hash_id(nu)
130
+ if nu not in id_map:
131
+ id_map[nu] = str(next_id)
132
+ t = title_map.get(nu) or self._hostname(nu)
133
+ ordered.append((f"[{id_map[nu]}]", t, nu))
134
+ next_id += 1
135
+ return id_map[nu]
136
+
137
+ def _repl(m):
138
+ link_text, url = m.group(1), m.group(2)
139
+ nu = self._normalize_url(url)
140
+ cid = _get_id(nu)
141
+ title = title_map.get(nu)
142
+ if not title:
143
+ lt = (link_text or '').strip()
144
+ title = lt if (' ' in lt) else self._hostname(nu)
145
+ return f"[{cid}] ({title})"
146
+
147
+ replaced = pattern.sub(_repl, text)
148
+ return replaced, ordered
149
+
150
+ def __str__(self) -> str:
151
+ try:
152
+ return json.dumps(self.raw, indent=2)
153
+ except TypeError:
154
+ return str(self.raw)
155
+
156
+ def _repr_html_(self) -> str:
157
+ try:
158
+ return f"<pre>{json.dumps(self.raw, indent=2)}</pre>"
159
+ except Exception as e:
160
+ return f"<pre>{str(self.raw)}</pre>"
161
+
162
+ def get_citations(self) -> list[Citation]:
163
+ return self._citations
164
+
165
+
166
+ class GPTXSearchEngine(Engine):
167
+ def __init__(self, api_key: str | None = None, model: str | None = None):
168
+ super().__init__()
169
+ self.config = deepcopy(SYMAI_CONFIG)
170
+ if api_key is not None and model is not None:
171
+ self.config['SEARCH_ENGINE_API_KEY'] = api_key
172
+ self.config['SEARCH_ENGINE_MODEL'] = model
173
+ self.api_key = self.config.get('SEARCH_ENGINE_API_KEY')
174
+ self.model = self.config.get('SEARCH_ENGINE_MODEL', 'gpt-4.1') # Default to gpt-4.1 as per docs
175
+ self.name = self.__class__.__name__
176
+ try:
177
+ self.client = OpenAI(api_key=self.api_key)
178
+ except Exception as e:
179
+ CustomUserWarning(f"Failed to initialize OpenAI client: {e}", raise_with=ValueError)
180
+
181
+ def id(self) -> str:
182
+ if self.config.get('SEARCH_ENGINE_API_KEY') and \
183
+ self.config.get('SEARCH_ENGINE_MODEL') in OPENAI_CHAT_MODELS + OPENAI_REASONING_MODELS:
184
+ return 'search'
185
+ return super().id() # default to unregistered
186
+
187
+ def command(self, *args, **kwargs):
188
+ super().command(*args, **kwargs)
189
+ if 'SEARCH_ENGINE_API_KEY' in kwargs:
190
+ self.api_key = kwargs['SEARCH_ENGINE_API_KEY']
191
+ if 'SEARCH_ENGINE_MODEL' in kwargs:
192
+ self.model = kwargs['SEARCH_ENGINE_MODEL']
193
+
194
+ def forward(self, argument):
195
+ messages = argument.prop.prepared_input
196
+ kwargs = argument.kwargs
197
+
198
+ tool_definition = {"type": "web_search_preview"}
199
+ user_location = kwargs.get('user_location')
200
+ if user_location:
201
+ tool_definition['user_location'] = user_location
202
+ search_context_size = kwargs.get('search_context_size')
203
+ if search_context_size:
204
+ tool_definition['search_context_size'] = search_context_size
205
+
206
+ self.model = kwargs.get('model', self.model) # Important for MetadataTracker to work correctly
207
+ payload = {
208
+ "model": self.model,
209
+ "input": messages,
210
+ "tools": [tool_definition],
211
+ "tool_choice": {"type": "web_search_preview"} if self.model not in OPENAI_REASONING_MODELS else "auto" # force the use of web search tool for non-reasoning models
212
+ }
213
+
214
+ try:
215
+ res = self.client.responses.create(**payload)
216
+ res = SearchResult(res.dict())
217
+ except Exception as e:
218
+ CustomUserWarning(f"Failed to make request: {e}", raise_with=ValueError)
219
+
220
+ metadata = {"raw_output": res.raw}
221
+ output = [res]
222
+
223
+ return output, metadata
224
+
225
+ def prepare(self, argument):
226
+ system_message = "You are a helpful AI assistant. Be precise and informative." if argument.kwargs.get('system_message') is None else argument.kwargs.get('system_message')
227
+
228
+ res = [
229
+ {
230
+ "role": "system",
231
+ "content": system_message
232
+ },
233
+ {
234
+ "role": "user",
235
+ "content": f"{argument.prop.query}"
236
+ }
237
+ ]
238
+ argument.prop.prepared_input = res
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: symbolicai
3
- Version: 0.17.5
3
+ Version: 0.17.6
4
4
  Summary: A Neurosymbolic Perspective on Large Language Models
5
5
  Author-email: Marius-Constantin Dinu <marius@extensity.ai>, Leoveanu-Condrei Claudiu <leo@extensity.ai>
6
6
  Project-URL: Homepage, https://extensity.ai
@@ -1,154 +0,0 @@
1
- import json
2
- import logging
3
- import requests
4
- from copy import deepcopy
5
- from dataclasses import dataclass
6
-
7
- from ....symbol import Result
8
- from ....utils import CustomUserWarning
9
- from ...base import Engine
10
- from ...settings import SYMAI_CONFIG
11
- from ...mixin import OPENAI_CHAT_MODELS, OPENAI_REASONING_MODELS
12
-
13
- logging.getLogger("requests").setLevel(logging.ERROR)
14
- logging.getLogger("urllib3").setLevel(logging.ERROR)
15
- logging.getLogger("httpx").setLevel(logging.ERROR)
16
- logging.getLogger("httpcore").setLevel(logging.ERROR)
17
-
18
-
19
- @dataclass
20
- class Citation:
21
- id: str
22
- title: str
23
- url: str
24
- start: int
25
- end: int
26
-
27
- def __hash__(self):
28
- return hash((self.url, ))
29
-
30
-
31
- class SearchResult(Result):
32
- def __init__(self, value, **kwargs) -> None:
33
- super().__init__(value, **kwargs)
34
- if value.get('error'):
35
- CustomUserWarning(value['error'], raise_with=ValueError)
36
- try:
37
- for output in value.get('output', []):
38
- if output.get('type') == 'message' and output.get('content'):
39
- annotations = output['content'][0].get('annotations', [])
40
- citations = []
41
- for n, annotation in enumerate(annotations):
42
- if annotation.get('type') == 'url_citation':
43
- citation = Citation(
44
- id=f'[{n + 1}]',
45
- start=annotation.get('start_index'),
46
- end=annotation.get('end_index'),
47
- title=annotation.get('title', ''),
48
- url=annotation.get('url', ''),
49
- )
50
- if citation not in citations:
51
- citations.append(citation)
52
- self._value = output['content'][0]['text']
53
- delta = 0
54
- for citation in citations:
55
- self._value = self._value[:citation.start - delta] + citation.id + self._value[citation.end - delta:]
56
- delta += (citation.end - citation.start) - len(citation.id)
57
- self._citations = citations
58
-
59
- except Exception as e:
60
- self._value = None
61
- CustomUserWarning(f"Failed to parse response: {e}", raise_with=ValueError)
62
-
63
- def __str__(self) -> str:
64
- try:
65
- return json.dumps(self.raw, indent=2)
66
- except TypeError:
67
- return str(self.raw)
68
-
69
- def _repr_html_(self) -> str:
70
- try:
71
- return f"<pre>{json.dumps(self.raw, indent=2)}</pre>"
72
- except Exception as e:
73
- return f"<pre>{str(self.raw)}</pre>"
74
-
75
- def get_citations(self) -> list[Citation]:
76
- return self._citations
77
-
78
-
79
- class GPTXSearchEngine(Engine):
80
- def __init__(self, api_key: str | None = None, model: str | None = None):
81
- super().__init__()
82
- self.config = deepcopy(SYMAI_CONFIG)
83
- if api_key is not None and model is not None:
84
- self.config['SEARCH_ENGINE_API_KEY'] = api_key
85
- self.config['SEARCH_ENGINE_MODEL'] = model
86
- self.api_key = self.config.get('SEARCH_ENGINE_API_KEY')
87
- self.model = self.config.get('SEARCH_ENGINE_MODEL', 'gpt-4.1') # Default to gpt-4.1 as per docs
88
- self.name = self.__class__.__name__
89
-
90
- def id(self) -> str:
91
- if self.config.get('SEARCH_ENGINE_API_KEY') and \
92
- self.config.get('SEARCH_ENGINE_MODEL') in OPENAI_CHAT_MODELS + OPENAI_REASONING_MODELS:
93
- return 'search'
94
- return super().id() # default to unregistered
95
-
96
- def command(self, *args, **kwargs):
97
- super().command(*args, **kwargs)
98
- if 'SEARCH_ENGINE_API_KEY' in kwargs:
99
- self.api_key = kwargs['SEARCH_ENGINE_API_KEY']
100
- if 'SEARCH_ENGINE_MODEL' in kwargs:
101
- self.model = kwargs['SEARCH_ENGINE_MODEL']
102
-
103
- def forward(self, argument):
104
- messages = argument.prop.prepared_input
105
- kwargs = argument.kwargs
106
-
107
- tool_definition = {"type": "web_search_preview"}
108
- user_location = kwargs.get('user_location')
109
- if user_location:
110
- tool_definition['user_location'] = user_location
111
- search_context_size = kwargs.get('search_context_size')
112
- if search_context_size:
113
- tool_definition['search_context_size'] = search_context_size
114
-
115
- self.model = kwargs.get('model', self.model) # Important for MetadataTracker to work correctly
116
- payload = {
117
- "model": self.model,
118
- "input": messages,
119
- "tools": [tool_definition],
120
- "tool_choice": {"type": "web_search_preview"} # force the use of web search tool
121
- }
122
-
123
- headers = {
124
- "Authorization": f"Bearer {self.api_key}",
125
- "Content-Type": "application/json",
126
- "OpenAI-Beta": "assistants=v1" # Required for some beta features, might be useful
127
- }
128
- api_url = "https://api.openai.com/v1/responses"
129
-
130
- try:
131
- res = requests.post(api_url, json=payload, headers=headers)
132
- res = SearchResult(res.json())
133
- except Exception as e:
134
- CustomUserWarning(f"Failed to make request: {e}", raise_with=ValueError)
135
-
136
- metadata = {"raw_output": res.raw}
137
- output = [res]
138
-
139
- return output, metadata
140
-
141
- def prepare(self, argument):
142
- system_message = "You are a helpful AI assistant. Be precise and informative." if argument.kwargs.get('system_message') is None else argument.kwargs.get('system_message')
143
-
144
- res = [
145
- {
146
- "role": "system",
147
- "content": system_message
148
- },
149
- {
150
- "role": "user",
151
- "content": f"{argument.prop.query}"
152
- }
153
- ]
154
- argument.prop.prepared_input = res
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes