symbolicai 0.20.2__tar.gz → 0.21.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (265) hide show
  1. {symbolicai-0.20.2 → symbolicai-0.21.0}/.gitignore +2 -0
  2. {symbolicai-0.20.2 → symbolicai-0.21.0}/.symai/symsh.config.json +1 -2
  3. {symbolicai-0.20.2 → symbolicai-0.21.0}/PKG-INFO +1 -1
  4. {symbolicai-0.20.2 → symbolicai-0.21.0}/docs/source/ENGINES/local_engine.md +8 -9
  5. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/__init__.py +1 -1
  6. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/backend/engines/embedding/engine_llama_cpp.py +8 -7
  7. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/backend/engines/neurosymbolic/engine_llama_cpp.py +78 -7
  8. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/functional.py +5 -2
  9. {symbolicai-0.20.2 → symbolicai-0.21.0}/symbolicai.egg-info/PKG-INFO +1 -1
  10. {symbolicai-0.20.2 → symbolicai-0.21.0}/.gitbook.yaml +0 -0
  11. {symbolicai-0.20.2 → symbolicai-0.21.0}/.github/FUNDING.yml +0 -0
  12. {symbolicai-0.20.2 → symbolicai-0.21.0}/CITATION.cff +0 -0
  13. {symbolicai-0.20.2 → symbolicai-0.21.0}/Dockerfile +0 -0
  14. {symbolicai-0.20.2 → symbolicai-0.21.0}/LICENSE +0 -0
  15. {symbolicai-0.20.2 → symbolicai-0.21.0}/MANIFEST.in +0 -0
  16. {symbolicai-0.20.2 → symbolicai-0.21.0}/README.md +0 -0
  17. {symbolicai-0.20.2 → symbolicai-0.21.0}/app.py +0 -0
  18. {symbolicai-0.20.2 → symbolicai-0.21.0}/assets/images/banner.png +0 -0
  19. {symbolicai-0.20.2 → symbolicai-0.21.0}/assets/images/cat.jpg +0 -0
  20. {symbolicai-0.20.2 → symbolicai-0.21.0}/assets/images/cat.png +0 -0
  21. {symbolicai-0.20.2 → symbolicai-0.21.0}/assets/images/contract_flow.png +0 -0
  22. {symbolicai-0.20.2 → symbolicai-0.21.0}/assets/images/img1.png +0 -0
  23. {symbolicai-0.20.2 → symbolicai-0.21.0}/assets/images/img10.png +0 -0
  24. {symbolicai-0.20.2 → symbolicai-0.21.0}/assets/images/img2.png +0 -0
  25. {symbolicai-0.20.2 → symbolicai-0.21.0}/assets/images/img3.png +0 -0
  26. {symbolicai-0.20.2 → symbolicai-0.21.0}/assets/images/img4.png +0 -0
  27. {symbolicai-0.20.2 → symbolicai-0.21.0}/assets/images/img5.png +0 -0
  28. {symbolicai-0.20.2 → symbolicai-0.21.0}/assets/images/img6.png +0 -0
  29. {symbolicai-0.20.2 → symbolicai-0.21.0}/assets/images/img7.png +0 -0
  30. {symbolicai-0.20.2 → symbolicai-0.21.0}/assets/images/img8.png +0 -0
  31. {symbolicai-0.20.2 → symbolicai-0.21.0}/assets/images/img9.png +0 -0
  32. {symbolicai-0.20.2 → symbolicai-0.21.0}/assets/images/preview.gif +0 -0
  33. {symbolicai-0.20.2 → symbolicai-0.21.0}/assets/images/screen1.jpeg +0 -0
  34. {symbolicai-0.20.2 → symbolicai-0.21.0}/assets/images/symai_logo.png +0 -0
  35. {symbolicai-0.20.2 → symbolicai-0.21.0}/assets/images/symsh.png +0 -0
  36. {symbolicai-0.20.2 → symbolicai-0.21.0}/assets/images/vid1.png +0 -0
  37. {symbolicai-0.20.2 → symbolicai-0.21.0}/assets/images/vid2.png +0 -0
  38. {symbolicai-0.20.2 → symbolicai-0.21.0}/assets/images/vid3.png +0 -0
  39. {symbolicai-0.20.2 → symbolicai-0.21.0}/assets/images/vid4.png +0 -0
  40. {symbolicai-0.20.2 → symbolicai-0.21.0}/assets/images/vid5.png +0 -0
  41. {symbolicai-0.20.2 → symbolicai-0.21.0}/assets/images/vid6.png +0 -0
  42. {symbolicai-0.20.2 → symbolicai-0.21.0}/assets/results/news.html +0 -0
  43. {symbolicai-0.20.2 → symbolicai-0.21.0}/assets/results/news.png +0 -0
  44. {symbolicai-0.20.2 → symbolicai-0.21.0}/assets/results/news_prev.png +0 -0
  45. {symbolicai-0.20.2 → symbolicai-0.21.0}/bin/install.ps1 +0 -0
  46. {symbolicai-0.20.2 → symbolicai-0.21.0}/bin/install.sh +0 -0
  47. {symbolicai-0.20.2 → symbolicai-0.21.0}/build.py +0 -0
  48. {symbolicai-0.20.2 → symbolicai-0.21.0}/docker-compose.yml +0 -0
  49. {symbolicai-0.20.2 → symbolicai-0.21.0}/docs/source/ENGINES/clip_engine.md +0 -0
  50. {symbolicai-0.20.2 → symbolicai-0.21.0}/docs/source/ENGINES/custom_engine.md +0 -0
  51. {symbolicai-0.20.2 → symbolicai-0.21.0}/docs/source/ENGINES/drawing_engine.md +0 -0
  52. {symbolicai-0.20.2 → symbolicai-0.21.0}/docs/source/ENGINES/file_engine.md +0 -0
  53. {symbolicai-0.20.2 → symbolicai-0.21.0}/docs/source/ENGINES/indexing_engine.md +0 -0
  54. {symbolicai-0.20.2 → symbolicai-0.21.0}/docs/source/ENGINES/neurosymbolic_engine.md +0 -0
  55. {symbolicai-0.20.2 → symbolicai-0.21.0}/docs/source/ENGINES/ocr_engine.md +0 -0
  56. {symbolicai-0.20.2 → symbolicai-0.21.0}/docs/source/ENGINES/search_engine.md +0 -0
  57. {symbolicai-0.20.2 → symbolicai-0.21.0}/docs/source/ENGINES/speech_to_text_engine.md +0 -0
  58. {symbolicai-0.20.2 → symbolicai-0.21.0}/docs/source/ENGINES/symbolic_engine.md +0 -0
  59. {symbolicai-0.20.2 → symbolicai-0.21.0}/docs/source/ENGINES/webscraping_engine.md +0 -0
  60. {symbolicai-0.20.2 → symbolicai-0.21.0}/docs/source/FEATURES/contracts.md +0 -0
  61. {symbolicai-0.20.2 → symbolicai-0.21.0}/docs/source/FEATURES/error_handling.md +0 -0
  62. {symbolicai-0.20.2 → symbolicai-0.21.0}/docs/source/FEATURES/expressions.md +0 -0
  63. {symbolicai-0.20.2 → symbolicai-0.21.0}/docs/source/FEATURES/import.md +0 -0
  64. {symbolicai-0.20.2 → symbolicai-0.21.0}/docs/source/FEATURES/operations.md +0 -0
  65. {symbolicai-0.20.2 → symbolicai-0.21.0}/docs/source/FEATURES/primitives.md +0 -0
  66. {symbolicai-0.20.2 → symbolicai-0.21.0}/docs/source/INSTALLATION.md +0 -0
  67. {symbolicai-0.20.2 → symbolicai-0.21.0}/docs/source/INTRODUCTION.md +0 -0
  68. {symbolicai-0.20.2 → symbolicai-0.21.0}/docs/source/QUICKSTART.md +0 -0
  69. {symbolicai-0.20.2 → symbolicai-0.21.0}/docs/source/SUMMARY.md +0 -0
  70. {symbolicai-0.20.2 → symbolicai-0.21.0}/docs/source/TOOLS/chatbot.md +0 -0
  71. {symbolicai-0.20.2 → symbolicai-0.21.0}/docs/source/TOOLS/packages.md +0 -0
  72. {symbolicai-0.20.2 → symbolicai-0.21.0}/docs/source/TOOLS/shell.md +0 -0
  73. {symbolicai-0.20.2 → symbolicai-0.21.0}/docs/source/TUTORIALS/chatbot.md +0 -0
  74. {symbolicai-0.20.2 → symbolicai-0.21.0}/docs/source/TUTORIALS/context.md +0 -0
  75. {symbolicai-0.20.2 → symbolicai-0.21.0}/docs/source/TUTORIALS/data_query.md +0 -0
  76. {symbolicai-0.20.2 → symbolicai-0.21.0}/docs/source/TUTORIALS/video_tutorials.md +0 -0
  77. {symbolicai-0.20.2 → symbolicai-0.21.0}/environment.yml +0 -0
  78. {symbolicai-0.20.2 → symbolicai-0.21.0}/examples/contracts.ipynb +0 -0
  79. {symbolicai-0.20.2 → symbolicai-0.21.0}/examples/primitives.ipynb +0 -0
  80. {symbolicai-0.20.2 → symbolicai-0.21.0}/icon_converter.py +0 -0
  81. {symbolicai-0.20.2 → symbolicai-0.21.0}/installer.py +0 -0
  82. {symbolicai-0.20.2 → symbolicai-0.21.0}/legacy/notebooks/Basics.ipynb +0 -0
  83. {symbolicai-0.20.2 → symbolicai-0.21.0}/legacy/notebooks/ChatBot.ipynb +0 -0
  84. {symbolicai-0.20.2 → symbolicai-0.21.0}/legacy/notebooks/Conversation.ipynb +0 -0
  85. {symbolicai-0.20.2 → symbolicai-0.21.0}/legacy/notebooks/Indexer.ipynb +0 -0
  86. {symbolicai-0.20.2 → symbolicai-0.21.0}/legacy/notebooks/News.ipynb +0 -0
  87. {symbolicai-0.20.2 → symbolicai-0.21.0}/legacy/notebooks/Queries.ipynb +0 -0
  88. {symbolicai-0.20.2 → symbolicai-0.21.0}/legacy/notebooks/TTS_Persona.ipynb +0 -0
  89. {symbolicai-0.20.2 → symbolicai-0.21.0}/legacy/notebooks/examples/Lean engine.png +0 -0
  90. {symbolicai-0.20.2 → symbolicai-0.21.0}/legacy/notebooks/examples/a_star.txt +0 -0
  91. {symbolicai-0.20.2 → symbolicai-0.21.0}/legacy/notebooks/examples/abstract.py +0 -0
  92. {symbolicai-0.20.2 → symbolicai-0.21.0}/legacy/notebooks/examples/audio.mp3 +0 -0
  93. {symbolicai-0.20.2 → symbolicai-0.21.0}/legacy/notebooks/examples/dbpedia_samples.jsonl +0 -0
  94. {symbolicai-0.20.2 → symbolicai-0.21.0}/legacy/notebooks/examples/dbpedia_samples_prepared_train.jsonl +0 -0
  95. {symbolicai-0.20.2 → symbolicai-0.21.0}/legacy/notebooks/examples/dbpedia_samples_prepared_valid.jsonl +0 -0
  96. {symbolicai-0.20.2 → symbolicai-0.21.0}/legacy/notebooks/examples/demo.py +0 -0
  97. {symbolicai-0.20.2 → symbolicai-0.21.0}/legacy/notebooks/examples/demo_strategy.py +0 -0
  98. {symbolicai-0.20.2 → symbolicai-0.21.0}/legacy/notebooks/examples/docs.py +0 -0
  99. {symbolicai-0.20.2 → symbolicai-0.21.0}/legacy/notebooks/examples/einsteins_puzzle.txt +0 -0
  100. {symbolicai-0.20.2 → symbolicai-0.21.0}/legacy/notebooks/examples/file.json +0 -0
  101. {symbolicai-0.20.2 → symbolicai-0.21.0}/legacy/notebooks/examples/lean.py +0 -0
  102. {symbolicai-0.20.2 → symbolicai-0.21.0}/legacy/notebooks/examples/news.py +0 -0
  103. {symbolicai-0.20.2 → symbolicai-0.21.0}/legacy/notebooks/examples/paper.pdf +0 -0
  104. {symbolicai-0.20.2 → symbolicai-0.21.0}/legacy/notebooks/examples/paper.py +0 -0
  105. {symbolicai-0.20.2 → symbolicai-0.21.0}/legacy/notebooks/examples/sql.py +0 -0
  106. {symbolicai-0.20.2 → symbolicai-0.21.0}/public/eai.svg +0 -0
  107. {symbolicai-0.20.2 → symbolicai-0.21.0}/pyproject.toml +0 -0
  108. {symbolicai-0.20.2 → symbolicai-0.21.0}/pytest.ini +0 -0
  109. {symbolicai-0.20.2 → symbolicai-0.21.0}/setup.cfg +0 -0
  110. {symbolicai-0.20.2 → symbolicai-0.21.0}/setup.py +0 -0
  111. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/TERMS_OF_SERVICE.md +0 -0
  112. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/backend/__init__.py +0 -0
  113. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/backend/base.py +0 -0
  114. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/backend/driver/webclient.py +0 -0
  115. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/backend/engines/__init__.py +0 -0
  116. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/backend/engines/drawing/engine_bfl.py +0 -0
  117. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/backend/engines/drawing/engine_gpt_image.py +0 -0
  118. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/backend/engines/embedding/engine_openai.py +0 -0
  119. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/backend/engines/embedding/engine_plugin_embeddings.py +0 -0
  120. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/backend/engines/execute/engine_python.py +0 -0
  121. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/backend/engines/files/engine_io.py +0 -0
  122. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/backend/engines/imagecaptioning/engine_blip2.py +0 -0
  123. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/backend/engines/imagecaptioning/engine_llavacpp_client.py +0 -0
  124. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/backend/engines/index/engine_pinecone.py +0 -0
  125. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/backend/engines/index/engine_vectordb.py +0 -0
  126. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/backend/engines/lean/engine_lean4.py +0 -0
  127. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/backend/engines/neurosymbolic/__init__.py +0 -0
  128. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/backend/engines/neurosymbolic/engine_anthropic_claudeX_chat.py +0 -0
  129. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/backend/engines/neurosymbolic/engine_anthropic_claudeX_reasoning.py +0 -0
  130. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/backend/engines/neurosymbolic/engine_deepseekX_reasoning.py +0 -0
  131. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/backend/engines/neurosymbolic/engine_google_geminiX_reasoning.py +0 -0
  132. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/backend/engines/neurosymbolic/engine_groq.py +0 -0
  133. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/backend/engines/neurosymbolic/engine_huggingface.py +0 -0
  134. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/backend/engines/neurosymbolic/engine_openai_gptX_chat.py +0 -0
  135. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/backend/engines/neurosymbolic/engine_openai_gptX_reasoning.py +0 -0
  136. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/backend/engines/ocr/engine_apilayer.py +0 -0
  137. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/backend/engines/output/engine_stdout.py +0 -0
  138. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/backend/engines/search/engine_openai.py +0 -0
  139. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/backend/engines/search/engine_perplexity.py +0 -0
  140. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/backend/engines/search/engine_serpapi.py +0 -0
  141. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/backend/engines/speech_to_text/engine_local_whisper.py +0 -0
  142. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/backend/engines/symbolic/engine_wolframalpha.py +0 -0
  143. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/backend/engines/text_to_speech/engine_openai.py +0 -0
  144. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/backend/engines/text_vision/engine_clip.py +0 -0
  145. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/backend/engines/userinput/engine_console.py +0 -0
  146. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/backend/engines/webscraping/engine_requests.py +0 -0
  147. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/backend/mixin/__init__.py +0 -0
  148. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/backend/mixin/anthropic.py +0 -0
  149. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/backend/mixin/deepseek.py +0 -0
  150. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/backend/mixin/google.py +0 -0
  151. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/backend/mixin/groq.py +0 -0
  152. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/backend/mixin/openai.py +0 -0
  153. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/backend/settings.py +0 -0
  154. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/chat.py +0 -0
  155. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/collect/__init__.py +0 -0
  156. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/collect/dynamic.py +0 -0
  157. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/collect/pipeline.py +0 -0
  158. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/collect/stats.py +0 -0
  159. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/components.py +0 -0
  160. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/constraints.py +0 -0
  161. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/context.py +0 -0
  162. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/core.py +0 -0
  163. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/core_ext.py +0 -0
  164. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/endpoints/__init__py +0 -0
  165. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/endpoints/api.py +0 -0
  166. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/exceptions.py +0 -0
  167. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/__init__.py +0 -0
  168. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/api_builder.py +0 -0
  169. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/arxiv_pdf_parser.py +0 -0
  170. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/bibtex_parser.py +0 -0
  171. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/conversation.py +0 -0
  172. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/document.py +0 -0
  173. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/file_merger.py +0 -0
  174. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/graph.py +0 -0
  175. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/html_style_template.py +0 -0
  176. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/interfaces/__init__.py +0 -0
  177. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/interfaces/blip_2.py +0 -0
  178. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/interfaces/clip.py +0 -0
  179. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/interfaces/console.py +0 -0
  180. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/interfaces/dall_e.py +0 -0
  181. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/interfaces/file.py +0 -0
  182. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/interfaces/flux.py +0 -0
  183. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/interfaces/gpt_image.py +0 -0
  184. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/interfaces/input.py +0 -0
  185. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/interfaces/llava.py +0 -0
  186. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/interfaces/naive_vectordb.py +0 -0
  187. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/interfaces/naive_webscraping.py +0 -0
  188. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/interfaces/ocr.py +0 -0
  189. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/interfaces/openai_search.py +0 -0
  190. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/interfaces/perplexity.py +0 -0
  191. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/interfaces/pinecone.py +0 -0
  192. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/interfaces/python.py +0 -0
  193. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/interfaces/serpapi.py +0 -0
  194. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/interfaces/terminal.py +0 -0
  195. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/interfaces/tts.py +0 -0
  196. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/interfaces/whisper.py +0 -0
  197. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/interfaces/wolframalpha.py +0 -0
  198. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/metrics/__init__.py +0 -0
  199. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/metrics/similarity.py +0 -0
  200. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/os_command.py +0 -0
  201. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/packages/__init__.py +0 -0
  202. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/packages/symdev.py +0 -0
  203. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/packages/sympkg.py +0 -0
  204. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/packages/symrun.py +0 -0
  205. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/personas/__init__.py +0 -0
  206. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/personas/builder.py +0 -0
  207. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/personas/dialogue.py +0 -0
  208. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/personas/persona.py +0 -0
  209. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/personas/research/__init__.py +0 -0
  210. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/personas/research/yann_lecun.py +0 -0
  211. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/personas/sales/__init__.py +0 -0
  212. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/personas/sales/erik_james.py +0 -0
  213. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/personas/student/__init__.py +0 -0
  214. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/personas/student/max_tenner.py +0 -0
  215. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/repo_cloner.py +0 -0
  216. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/seo_query_optimizer.py +0 -0
  217. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/solver.py +0 -0
  218. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/strategies/__init__.py +0 -0
  219. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/strategies/cot.py +0 -0
  220. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/summarizer.py +0 -0
  221. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/taypan_interpreter.py +0 -0
  222. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/extended/vectordb.py +0 -0
  223. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/formatter/__init__.py +0 -0
  224. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/formatter/emoji.pytxt +0 -0
  225. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/formatter/formatter.py +0 -0
  226. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/formatter/regex.py +0 -0
  227. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/imports.py +0 -0
  228. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/interfaces.py +0 -0
  229. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/memory.py +0 -0
  230. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/menu/__init__.py +0 -0
  231. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/menu/screen.py +0 -0
  232. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/misc/__init__.py +0 -0
  233. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/misc/console.py +0 -0
  234. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/misc/loader.py +0 -0
  235. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/models/__init__.py +0 -0
  236. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/models/base.py +0 -0
  237. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/models/errors.py +0 -0
  238. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/ops/__init__.py +0 -0
  239. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/ops/measures.py +0 -0
  240. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/ops/primitives.py +0 -0
  241. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/post_processors.py +0 -0
  242. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/pre_processors.py +0 -0
  243. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/processor.py +0 -0
  244. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/prompts.py +0 -0
  245. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/server/__init__.py +0 -0
  246. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/server/huggingface_server.py +0 -0
  247. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/server/llama_cpp_server.py +0 -0
  248. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/shell.py +0 -0
  249. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/shellsv.py +0 -0
  250. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/strategy.py +0 -0
  251. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/symbol.py +0 -0
  252. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/symsh.md +0 -0
  253. {symbolicai-0.20.2 → symbolicai-0.21.0}/symai/utils.py +0 -0
  254. {symbolicai-0.20.2 → symbolicai-0.21.0}/symbolicai.egg-info/SOURCES.txt +0 -0
  255. {symbolicai-0.20.2 → symbolicai-0.21.0}/symbolicai.egg-info/dependency_links.txt +0 -0
  256. {symbolicai-0.20.2 → symbolicai-0.21.0}/symbolicai.egg-info/entry_points.txt +0 -0
  257. {symbolicai-0.20.2 → symbolicai-0.21.0}/symbolicai.egg-info/requires.txt +0 -0
  258. {symbolicai-0.20.2 → symbolicai-0.21.0}/symbolicai.egg-info/top_level.txt +0 -0
  259. {symbolicai-0.20.2 → symbolicai-0.21.0}/tests/README.md +0 -0
  260. {symbolicai-0.20.2 → symbolicai-0.21.0}/tests/data/audio.mp3 +0 -0
  261. {symbolicai-0.20.2 → symbolicai-0.21.0}/tests/data/pg1727.txt +0 -0
  262. {symbolicai-0.20.2 → symbolicai-0.21.0}/tests/engines/search/openai_engine.py +0 -0
  263. {symbolicai-0.20.2 → symbolicai-0.21.0}/tests/engines/search/perplexity_engine.py +0 -0
  264. {symbolicai-0.20.2 → symbolicai-0.21.0}/trusted_repos.yml +0 -0
  265. {symbolicai-0.20.2 → symbolicai-0.21.0}/uv.lock +0 -0
@@ -164,3 +164,5 @@ symsh
164
164
  .symai
165
165
  zagent-review
166
166
  zagent-research
167
+ .codex/context
168
+ llama.cpp
@@ -12,6 +12,5 @@
12
12
  "file-completion-selected": "bg:#efefef #b3d7ff"
13
13
  },
14
14
  "map-nt-cmd": true,
15
- "show-splash-screen": false,
16
- "plugin_prefix": null
15
+ "show-splash-screen": true
17
16
  }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: symbolicai
3
- Version: 0.20.2
3
+ Version: 0.21.0
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
  License: BSD 3-Clause License
@@ -3,16 +3,13 @@
3
3
 
4
4
  You can use a locally hosted instance for the Neuro-Symbolic Engine. We build on top of:
5
5
  - [llama.cpp](https://github.com/ggerganov/llama.cpp/tree/master) either through:
6
- > ❗️**NOTE**❗️ Latest `llama.cpp` commit on `master` branch that we tested `symai` with is `0f5ccd6fd1a1`. We used the build [setup](https://github.com/ggml-org/llama.cpp/blob/master/docs/build.md).
6
+ > ❗️**NOTE**❗️ Latest `llama.cpp` commit on `master` branch on November 5th, 2025 that we tested `symai` with is `a5c07dcd7b49`. We used the build [setup](https://github.com/ggml-org/llama.cpp/blob/master/docs/build.md).
7
7
  - Direct C++ server from llama.cpp
8
8
  - [llama-cpp-python](https://github.com/abetlen/llama-cpp-python?tab=readme-ov-file)
9
9
  - [huggingface/transformers](https://huggingface.co/docs/transformers/en/index) through a custom FastAPI server.
10
10
 
11
11
  ### llama.cpp backend
12
- For instance, let's suppose you want to set as a Neuro-Symbolic Engine the latest Llama 3 model. First, download the model with the HuggingFace CLI:
13
- ```bash
14
- huggingface-cli download TheBloke/LLaMA-Pro-8B-Instruct-GGUF llama-pro-8b-instruct.Q4_K_M.gguf --local-dir .
15
- ```
12
+ For instance, let's suppose you want to set up the Neuro-Symbolic Engine with the `gpt-oss-120b` model. Download the GGUF shards you need (e.g. the `Q4_1` variant).
16
13
 
17
14
  With `symai`, first set the `NEUROSYMBOLIC_ENGINE_MODEL` to `llamacpp`:
18
15
 
@@ -33,15 +30,17 @@ symserver --env python --model ./llama-pro-8b-instruct.Q4_K_M.gguf --n_gpu_layer
33
30
 
34
31
  2. Using C++ server directly:
35
32
  ```bash
36
- symserver --env cpp --cpp-server-path /path/to/llama.cpp/server -m ./llama-pro-8b-instruct.Q4_K_M.gguf --port 8000 --host localhost
33
+ symserver --env cpp --cpp-server-path /path/to/llama.cpp/llama-server -ngl -1 -m gpt-oss-120b/Q4_1/gpt-oss-120b-Q4_1-00001-of-00002.gguf -fa 'on' -b 8092 -ub 1024 --port 8000 --host localhost -c 0 -n 4096 -t 14 --jinja
37
34
  ```
38
35
 
39
36
  To see all available options, run:
40
37
  ```bash
41
38
  symserver --env python --help # for Python bindings
42
- symserver --env cpp --cpp-server-path /path/to/llama.cpp/server --help # for C++ server
39
+ symserver --env cpp --cpp-server-path /path/to/llama.cpp/llama-server --help # for C++ server
43
40
  ```
44
41
 
42
+ The Neuro-Symbolic Engine now supports tool execution and structured JSON responses out of the box. For concrete examples, review the tests in `tests/engines/neurosymbolic/test_nesy_engine.py::test_tool_usage` and `tests/contract/test_contract.py`.
43
+
45
44
  ### HuggingFace backend
46
45
  Let's suppose we want to use `dolphin-2.9.3-mistral-7B-32k` from HuggingFace. First, download the model with the HuggingFace CLI:
47
46
  ```bash
@@ -109,7 +108,7 @@ symserver --env python --model nomic-embed-text-v1.5.Q8_0.gguf --embedding True
109
108
 
110
109
  C++ server:
111
110
  ```bash
112
- symserver --env cpp --cpp-server-path /path/to/llama.cpp/server -ngl 0 -m nomic-embed-text-v1.5.Q8_0.gguf --embedding -c 8192 -b 8192 --rope-scaling yarn --rope-freq-scale .75 --port 8000 --host localhost
111
+ symserver --env cpp --cpp-server-path /path/to/llama.cpp/llama-server -ngl -1 -m nomic-embed-text-v1.5.Q8_0.gguf --embedding -b 8092 -ub 1024 --port 8000 --host localhost -t 14 --mlock --no-mmap
113
112
  ```
114
113
 
115
114
  The server supports batch processing for embeddings. Here's how to use it with `symai`:
@@ -123,5 +122,5 @@ embedding = Symbol(some_text).embed() # returns a list (1 x dim)
123
122
 
124
123
  # Batch processing
125
124
  some_batch_of_texts = ["Hello, world!"] * 32
126
- embeddings = Symbol(some_batch_of_texts).embed() # returns a list (32 x dim)
125
+ embeddings = Symbol(some_batch_of_texts).embed() # returns a list (32 x 1 x dim)
127
126
  ```
@@ -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.20.2"
36
+ SYMAI_VERSION = "0.21.0"
37
37
  __version__ = SYMAI_VERSION
38
38
  __root_dir__ = config_manager.config_dir
39
39
 
@@ -84,7 +84,7 @@ class LlamaCppEmbeddingEngine(Engine):
84
84
  asyncio.set_event_loop(new_loop)
85
85
  return new_loop
86
86
 
87
- async def _arequest(self, text: str) -> dict:
87
+ async def _arequest(self, text: str, embd_normalize: str) -> dict:
88
88
  """Makes an async HTTP request to the llama.cpp server."""
89
89
  @retry(**self.retry_params)
90
90
  async def _make_request():
@@ -95,7 +95,7 @@ class LlamaCppEmbeddingEngine(Engine):
95
95
  async with aiohttp.ClientSession(timeout=timeout) as session:
96
96
  async with session.post(
97
97
  f"{self.server_endpoint}/v1/embeddings",
98
- json={"input": text}
98
+ json={"content": text, "embd_normalize": embd_normalize}
99
99
  ) as res:
100
100
  if res.status != 200:
101
101
  raise ValueError(f"Request failed with status code: {res.status}")
@@ -108,21 +108,22 @@ class LlamaCppEmbeddingEngine(Engine):
108
108
  kwargs = argument.kwargs
109
109
 
110
110
  inp = prepared_input if isinstance(prepared_input, list) else [prepared_input]
111
+ embd_normalize = kwargs.get('embd_normalize', -1) # -1 = no normalization
112
+
111
113
  new_dim = kwargs.get('new_dim')
114
+ if new_dim:
115
+ raise NotImplementedError("new_dim is not yet supported")
112
116
 
113
117
  nest_asyncio.apply()
114
118
  loop = self._get_event_loop()
115
119
 
116
120
  try:
117
- res = loop.run_until_complete(self._arequest(inp))
121
+ res = loop.run_until_complete(self._arequest(inp, embd_normalize))
118
122
  except Exception as e:
119
123
  raise ValueError(f"Request failed with error: {str(e)}")
120
124
 
121
- if new_dim:
122
- raise NotImplementedError("new_dim is not yet supported")
123
-
124
125
  if res is not None:
125
- output = [r["embedding"] for r in res["data"]]
126
+ output = [r["embedding"] for r in res] # B x 1 x D
126
127
  else:
127
128
  output = None
128
129
  metadata = {'raw_output': res}
@@ -26,8 +26,8 @@ class LlamaCppTokenizer:
26
26
  @staticmethod
27
27
  async def _encode(text: str) -> list[int]:
28
28
  async with aiohttp.ClientSession() as session:
29
- async with session.post(f"{LlamaCppTokenizer._server_endpoint}/extras/tokenize", json={
30
- "input": text,
29
+ async with session.post(f"{LlamaCppTokenizer._server_endpoint}/tokenize", json={
30
+ "content": text,
31
31
  }) as res:
32
32
  if res.status != 200:
33
33
  CustomUserWarning(f"Request failed with status code: {res.status}", raise_with=ValueError)
@@ -46,13 +46,13 @@ class LlamaCppTokenizer:
46
46
  @staticmethod
47
47
  async def _decode(tokens: list[int]) -> str:
48
48
  async with aiohttp.ClientSession() as session:
49
- async with session.post(f"{LlamaCppTokenizer._server_endpoint}/extras/detokenize", json={
49
+ async with session.post(f"{LlamaCppTokenizer._server_endpoint}/detokenize", json={
50
50
  "tokens": tokens,
51
51
  }) as res:
52
52
  if res.status != 200:
53
53
  CustomUserWarning(f"Request failed with status code: {res.status}", raise_with=ValueError)
54
54
  res = await res.json()
55
- return res['text']
55
+ return res['content']
56
56
 
57
57
  @staticmethod
58
58
  def decode(tokens: list[int]) -> str:
@@ -148,7 +148,7 @@ class LlamaCppEngine(Engine):
148
148
  def _prepare_request_payload(self, argument: Argument) -> dict:
149
149
  """Prepares the request payload from the argument."""
150
150
  kwargs = argument.kwargs
151
- return {
151
+ payload = {
152
152
  "messages": argument.prop.prepared_input,
153
153
  "temperature": kwargs.get('temperature', 0.6),
154
154
  "frequency_penalty": kwargs.get('frequency_penalty', 0),
@@ -162,12 +162,28 @@ class LlamaCppEngine(Engine):
162
162
  "repeat_penalty": kwargs.get('repeat_penalty', 1),
163
163
  "logits_bias": kwargs.get('logits_bias'),
164
164
  "logprobs": kwargs.get('logprobs', False),
165
- "functions": kwargs.get('functions'),
166
- "function_call": kwargs.get('function_call'),
167
165
  "grammar": kwargs.get('grammar'),
168
166
  "response_format": kwargs.get('response_format'),
169
167
  }
170
168
 
169
+ model = SYMSERVER_CONFIG.get('-m') or SYMSERVER_CONFIG.get('--model')
170
+ if model:
171
+ payload["model"] = model
172
+
173
+ tools = kwargs.get('tools')
174
+ if tools:
175
+ payload["tools"] = tools
176
+
177
+ tool_choice = kwargs.get('tool_choice')
178
+ if tool_choice is not None:
179
+ payload["tool_choice"] = tool_choice
180
+
181
+ extra_body = kwargs.get('extra_body')
182
+ if isinstance(extra_body, dict):
183
+ payload.update(extra_body)
184
+
185
+ return payload
186
+
171
187
  async def _arequest(self, payload: dict) -> dict:
172
188
  """Makes an async HTTP request to the llama.cpp server."""
173
189
  @retry(**self.retry_params)
@@ -187,6 +203,19 @@ class LlamaCppEngine(Engine):
187
203
 
188
204
  return await _make_request()
189
205
 
206
+ @classmethod
207
+ def _extract_thinking(cls, response):
208
+ """Extract reasoning traces from llama.cpp responses."""
209
+ if not isinstance(response, dict):
210
+ return None
211
+ choices = response.get('choices', [])
212
+ if not isinstance(choices, list) or not choices:
213
+ return None
214
+ for choice in choices:
215
+ if isinstance(choice, dict) and isinstance(choice.get('message'), dict):
216
+ return choice['message'].get('reasoning_content')
217
+ return None
218
+
190
219
  def forward(self, argument):
191
220
  payload = self._prepare_request_payload(argument)
192
221
 
@@ -200,11 +229,53 @@ class LlamaCppEngine(Engine):
200
229
 
201
230
  metadata = {'raw_output': res}
202
231
 
232
+ if payload.get('tools'):
233
+ metadata = self._process_tool_calls(res, metadata)
234
+
235
+ thinking = self._extract_thinking(res)
236
+ if thinking:
237
+ metadata['thinking'] = thinking
238
+
203
239
  output = [r['message']['content'] for r in res['choices']]
204
240
  output = output if isinstance(argument.prop.prepared_input, list) else output[0]
205
241
 
206
242
  return output, metadata
207
243
 
244
+ @staticmethod
245
+ def _process_tool_calls(res, metadata):
246
+ choices = res.get('choices') if isinstance(res, dict) else None
247
+ if not choices:
248
+ return metadata
249
+ hit = False
250
+ for choice in choices:
251
+ if not isinstance(choice, dict):
252
+ continue
253
+ message = choice.get('message') or {}
254
+ tool_calls = message.get('tool_calls') or []
255
+ if not tool_calls:
256
+ continue
257
+ for tool_call in tool_calls:
258
+ if not isinstance(tool_call, dict):
259
+ continue
260
+ function = tool_call.get('function') or {}
261
+ if hit:
262
+ CustomUserWarning("Multiple function calls detected in the response but only the first one will be processed.")
263
+ return metadata
264
+ arguments = function.get('arguments')
265
+ try:
266
+ args_dict = json.loads(arguments) if isinstance(arguments, str) else arguments or {}
267
+ except json.JSONDecodeError:
268
+ args_dict = {}
269
+ metadata['function_call'] = {
270
+ 'name': function.get('name'),
271
+ 'arguments': args_dict or {}
272
+ }
273
+ hit = True
274
+ break
275
+ if hit:
276
+ break
277
+ return metadata
278
+
208
279
  def _prepare_raw_input(self, argument):
209
280
  if not argument.prop.processed_input:
210
281
  CustomUserWarning('Need to provide a prompt instruction to the engine if raw_input is enabled.', raise_with=ValueError)
@@ -171,7 +171,10 @@ def _execute_query_fallback(func, instance, argument, error=None, stack_trace=No
171
171
  This matches the fallback logic used in _process_query by handling errors consistently,
172
172
  providing error context to the fallback function, and maintaining the same return format.
173
173
  """
174
- rsp = func(instance, error=error, stack_trace=stack_trace, *argument.args, **argument.signature_kwargs)
174
+ try:
175
+ rsp = func(instance, error=error, stack_trace=stack_trace, *argument.args, **argument.signature_kwargs)
176
+ except Exception:
177
+ raise error # re-raise the original error
175
178
  if rsp is not None:
176
179
  # fallback was implemented
177
180
  rsp = dict(data=rsp, error=error, stack_trace=stack_trace)
@@ -242,7 +245,7 @@ def _process_query(
242
245
  func: Callable,
243
246
  constraints: List[Callable] = [],
244
247
  default: Optional[object] = None,
245
- limit: int = 1,
248
+ limit: int | None = None,
246
249
  trials: int = 1,
247
250
  pre_processors: Optional[List[PreProcessor]] = None,
248
251
  post_processors: Optional[List[PostProcessor]] = None,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: symbolicai
3
- Version: 0.20.2
3
+ Version: 0.21.0
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
  License: BSD 3-Clause License
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
File without changes
File without changes
File without changes
File without changes
File without changes