symbolicai 1.2.1__tar.gz → 1.3.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 (259) hide show
  1. {symbolicai-1.2.1 → symbolicai-1.3.0}/.gitignore +1 -0
  2. symbolicai-1.3.0/AGENTS.md +76 -0
  3. {symbolicai-1.2.1 → symbolicai-1.3.0}/PKG-INFO +1 -1
  4. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/__init__.py +1 -1
  5. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/backend/engines/search/engine_parallel.py +92 -53
  6. {symbolicai-1.2.1 → symbolicai-1.3.0}/symbolicai.egg-info/PKG-INFO +1 -1
  7. {symbolicai-1.2.1 → symbolicai-1.3.0}/symbolicai.egg-info/SOURCES.txt +1 -0
  8. {symbolicai-1.2.1 → symbolicai-1.3.0}/.gitbook.yaml +0 -0
  9. {symbolicai-1.2.1 → symbolicai-1.3.0}/.github/FUNDING.yml +0 -0
  10. {symbolicai-1.2.1 → symbolicai-1.3.0}/.symai/symsh.config.json +0 -0
  11. {symbolicai-1.2.1 → symbolicai-1.3.0}/CITATION.cff +0 -0
  12. {symbolicai-1.2.1 → symbolicai-1.3.0}/Dockerfile +0 -0
  13. {symbolicai-1.2.1 → symbolicai-1.3.0}/LICENSE +0 -0
  14. {symbolicai-1.2.1 → symbolicai-1.3.0}/MANIFEST.in +0 -0
  15. {symbolicai-1.2.1 → symbolicai-1.3.0}/README.md +0 -0
  16. {symbolicai-1.2.1 → symbolicai-1.3.0}/app.py +0 -0
  17. {symbolicai-1.2.1 → symbolicai-1.3.0}/assets/images/banner.png +0 -0
  18. {symbolicai-1.2.1 → symbolicai-1.3.0}/assets/images/cat.jpg +0 -0
  19. {symbolicai-1.2.1 → symbolicai-1.3.0}/assets/images/cat.png +0 -0
  20. {symbolicai-1.2.1 → symbolicai-1.3.0}/assets/images/contract_flow.png +0 -0
  21. {symbolicai-1.2.1 → symbolicai-1.3.0}/assets/images/img1.png +0 -0
  22. {symbolicai-1.2.1 → symbolicai-1.3.0}/assets/images/img10.png +0 -0
  23. {symbolicai-1.2.1 → symbolicai-1.3.0}/assets/images/img2.png +0 -0
  24. {symbolicai-1.2.1 → symbolicai-1.3.0}/assets/images/img3.png +0 -0
  25. {symbolicai-1.2.1 → symbolicai-1.3.0}/assets/images/img4.png +0 -0
  26. {symbolicai-1.2.1 → symbolicai-1.3.0}/assets/images/img5.png +0 -0
  27. {symbolicai-1.2.1 → symbolicai-1.3.0}/assets/images/img6.png +0 -0
  28. {symbolicai-1.2.1 → symbolicai-1.3.0}/assets/images/img7.png +0 -0
  29. {symbolicai-1.2.1 → symbolicai-1.3.0}/assets/images/img8.png +0 -0
  30. {symbolicai-1.2.1 → symbolicai-1.3.0}/assets/images/img9.png +0 -0
  31. {symbolicai-1.2.1 → symbolicai-1.3.0}/assets/images/preview.gif +0 -0
  32. {symbolicai-1.2.1 → symbolicai-1.3.0}/assets/images/screen1.jpeg +0 -0
  33. {symbolicai-1.2.1 → symbolicai-1.3.0}/assets/images/symai_logo.png +0 -0
  34. {symbolicai-1.2.1 → symbolicai-1.3.0}/assets/images/symsh.png +0 -0
  35. {symbolicai-1.2.1 → symbolicai-1.3.0}/assets/images/vid1.png +0 -0
  36. {symbolicai-1.2.1 → symbolicai-1.3.0}/assets/images/vid2.png +0 -0
  37. {symbolicai-1.2.1 → symbolicai-1.3.0}/assets/images/vid3.png +0 -0
  38. {symbolicai-1.2.1 → symbolicai-1.3.0}/assets/images/vid4.png +0 -0
  39. {symbolicai-1.2.1 → symbolicai-1.3.0}/assets/images/vid5.png +0 -0
  40. {symbolicai-1.2.1 → symbolicai-1.3.0}/assets/images/vid6.png +0 -0
  41. {symbolicai-1.2.1 → symbolicai-1.3.0}/assets/results/news.html +0 -0
  42. {symbolicai-1.2.1 → symbolicai-1.3.0}/assets/results/news.png +0 -0
  43. {symbolicai-1.2.1 → symbolicai-1.3.0}/assets/results/news_prev.png +0 -0
  44. {symbolicai-1.2.1 → symbolicai-1.3.0}/bin/install.ps1 +0 -0
  45. {symbolicai-1.2.1 → symbolicai-1.3.0}/bin/install.sh +0 -0
  46. {symbolicai-1.2.1 → symbolicai-1.3.0}/build.py +0 -0
  47. {symbolicai-1.2.1 → symbolicai-1.3.0}/docker-compose.yml +0 -0
  48. {symbolicai-1.2.1 → symbolicai-1.3.0}/docs/source/ENGINES/clip_engine.md +0 -0
  49. {symbolicai-1.2.1 → symbolicai-1.3.0}/docs/source/ENGINES/custom_engine.md +0 -0
  50. {symbolicai-1.2.1 → symbolicai-1.3.0}/docs/source/ENGINES/drawing_engine.md +0 -0
  51. {symbolicai-1.2.1 → symbolicai-1.3.0}/docs/source/ENGINES/file_engine.md +0 -0
  52. {symbolicai-1.2.1 → symbolicai-1.3.0}/docs/source/ENGINES/indexing_engine.md +0 -0
  53. {symbolicai-1.2.1 → symbolicai-1.3.0}/docs/source/ENGINES/local_engine.md +0 -0
  54. {symbolicai-1.2.1 → symbolicai-1.3.0}/docs/source/ENGINES/neurosymbolic_engine.md +0 -0
  55. {symbolicai-1.2.1 → symbolicai-1.3.0}/docs/source/ENGINES/ocr_engine.md +0 -0
  56. {symbolicai-1.2.1 → symbolicai-1.3.0}/docs/source/ENGINES/scrape_engine.md +0 -0
  57. {symbolicai-1.2.1 → symbolicai-1.3.0}/docs/source/ENGINES/search_engine.md +0 -0
  58. {symbolicai-1.2.1 → symbolicai-1.3.0}/docs/source/ENGINES/speech_to_text_engine.md +0 -0
  59. {symbolicai-1.2.1 → symbolicai-1.3.0}/docs/source/ENGINES/symbolic_engine.md +0 -0
  60. {symbolicai-1.2.1 → symbolicai-1.3.0}/docs/source/FEATURES/contracts.md +0 -0
  61. {symbolicai-1.2.1 → symbolicai-1.3.0}/docs/source/FEATURES/error_handling.md +0 -0
  62. {symbolicai-1.2.1 → symbolicai-1.3.0}/docs/source/FEATURES/expressions.md +0 -0
  63. {symbolicai-1.2.1 → symbolicai-1.3.0}/docs/source/FEATURES/import.md +0 -0
  64. {symbolicai-1.2.1 → symbolicai-1.3.0}/docs/source/FEATURES/operations.md +0 -0
  65. {symbolicai-1.2.1 → symbolicai-1.3.0}/docs/source/FEATURES/primitives.md +0 -0
  66. {symbolicai-1.2.1 → symbolicai-1.3.0}/docs/source/INSTALLATION.md +0 -0
  67. {symbolicai-1.2.1 → symbolicai-1.3.0}/docs/source/INTRODUCTION.md +0 -0
  68. {symbolicai-1.2.1 → symbolicai-1.3.0}/docs/source/QUICKSTART.md +0 -0
  69. {symbolicai-1.2.1 → symbolicai-1.3.0}/docs/source/SUMMARY.md +0 -0
  70. {symbolicai-1.2.1 → symbolicai-1.3.0}/docs/source/TOOLS/chatbot.md +0 -0
  71. {symbolicai-1.2.1 → symbolicai-1.3.0}/docs/source/TOOLS/packages.md +0 -0
  72. {symbolicai-1.2.1 → symbolicai-1.3.0}/docs/source/TOOLS/shell.md +0 -0
  73. {symbolicai-1.2.1 → symbolicai-1.3.0}/docs/source/TUTORIALS/chatbot.md +0 -0
  74. {symbolicai-1.2.1 → symbolicai-1.3.0}/docs/source/TUTORIALS/context.md +0 -0
  75. {symbolicai-1.2.1 → symbolicai-1.3.0}/docs/source/TUTORIALS/data_query.md +0 -0
  76. {symbolicai-1.2.1 → symbolicai-1.3.0}/docs/source/TUTORIALS/video_tutorials.md +0 -0
  77. {symbolicai-1.2.1 → symbolicai-1.3.0}/environment.yml +0 -0
  78. {symbolicai-1.2.1 → symbolicai-1.3.0}/examples/contracts.ipynb +0 -0
  79. {symbolicai-1.2.1 → symbolicai-1.3.0}/examples/primitives.ipynb +0 -0
  80. {symbolicai-1.2.1 → symbolicai-1.3.0}/icon_converter.py +0 -0
  81. {symbolicai-1.2.1 → symbolicai-1.3.0}/installer.py +0 -0
  82. {symbolicai-1.2.1 → symbolicai-1.3.0}/legacy/notebooks/Basics.ipynb +0 -0
  83. {symbolicai-1.2.1 → symbolicai-1.3.0}/legacy/notebooks/ChatBot.ipynb +0 -0
  84. {symbolicai-1.2.1 → symbolicai-1.3.0}/legacy/notebooks/Conversation.ipynb +0 -0
  85. {symbolicai-1.2.1 → symbolicai-1.3.0}/legacy/notebooks/Indexer.ipynb +0 -0
  86. {symbolicai-1.2.1 → symbolicai-1.3.0}/legacy/notebooks/News.ipynb +0 -0
  87. {symbolicai-1.2.1 → symbolicai-1.3.0}/legacy/notebooks/Queries.ipynb +0 -0
  88. {symbolicai-1.2.1 → symbolicai-1.3.0}/legacy/notebooks/TTS_Persona.ipynb +0 -0
  89. {symbolicai-1.2.1 → symbolicai-1.3.0}/legacy/notebooks/examples/Lean engine.png +0 -0
  90. {symbolicai-1.2.1 → symbolicai-1.3.0}/legacy/notebooks/examples/a_star.txt +0 -0
  91. {symbolicai-1.2.1 → symbolicai-1.3.0}/legacy/notebooks/examples/abstract.py +0 -0
  92. {symbolicai-1.2.1 → symbolicai-1.3.0}/legacy/notebooks/examples/audio.mp3 +0 -0
  93. {symbolicai-1.2.1 → symbolicai-1.3.0}/legacy/notebooks/examples/dbpedia_samples.jsonl +0 -0
  94. {symbolicai-1.2.1 → symbolicai-1.3.0}/legacy/notebooks/examples/dbpedia_samples_prepared_train.jsonl +0 -0
  95. {symbolicai-1.2.1 → symbolicai-1.3.0}/legacy/notebooks/examples/dbpedia_samples_prepared_valid.jsonl +0 -0
  96. {symbolicai-1.2.1 → symbolicai-1.3.0}/legacy/notebooks/examples/demo.py +0 -0
  97. {symbolicai-1.2.1 → symbolicai-1.3.0}/legacy/notebooks/examples/demo_strategy.py +0 -0
  98. {symbolicai-1.2.1 → symbolicai-1.3.0}/legacy/notebooks/examples/docs.py +0 -0
  99. {symbolicai-1.2.1 → symbolicai-1.3.0}/legacy/notebooks/examples/einsteins_puzzle.txt +0 -0
  100. {symbolicai-1.2.1 → symbolicai-1.3.0}/legacy/notebooks/examples/file.json +0 -0
  101. {symbolicai-1.2.1 → symbolicai-1.3.0}/legacy/notebooks/examples/lean.py +0 -0
  102. {symbolicai-1.2.1 → symbolicai-1.3.0}/legacy/notebooks/examples/news.py +0 -0
  103. {symbolicai-1.2.1 → symbolicai-1.3.0}/legacy/notebooks/examples/paper.pdf +0 -0
  104. {symbolicai-1.2.1 → symbolicai-1.3.0}/legacy/notebooks/examples/paper.py +0 -0
  105. {symbolicai-1.2.1 → symbolicai-1.3.0}/legacy/notebooks/examples/sql.py +0 -0
  106. {symbolicai-1.2.1 → symbolicai-1.3.0}/public/eai.svg +0 -0
  107. {symbolicai-1.2.1 → symbolicai-1.3.0}/pyproject.toml +0 -0
  108. {symbolicai-1.2.1 → symbolicai-1.3.0}/pytest.ini +0 -0
  109. {symbolicai-1.2.1 → symbolicai-1.3.0}/ruff.toml +0 -0
  110. {symbolicai-1.2.1 → symbolicai-1.3.0}/setup.cfg +0 -0
  111. {symbolicai-1.2.1 → symbolicai-1.3.0}/setup.py +0 -0
  112. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/TERMS_OF_SERVICE.md +0 -0
  113. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/backend/__init__.py +0 -0
  114. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/backend/base.py +0 -0
  115. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/backend/engines/__init__.py +0 -0
  116. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/backend/engines/drawing/engine_bfl.py +0 -0
  117. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/backend/engines/drawing/engine_gpt_image.py +0 -0
  118. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/backend/engines/embedding/engine_llama_cpp.py +0 -0
  119. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/backend/engines/embedding/engine_openai.py +0 -0
  120. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/backend/engines/execute/engine_python.py +0 -0
  121. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/backend/engines/files/engine_io.py +0 -0
  122. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/backend/engines/imagecaptioning/engine_blip2.py +0 -0
  123. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/backend/engines/imagecaptioning/engine_llavacpp_client.py +0 -0
  124. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/backend/engines/index/engine_pinecone.py +0 -0
  125. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/backend/engines/index/engine_qdrant.py +0 -0
  126. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/backend/engines/index/engine_vectordb.py +0 -0
  127. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/backend/engines/lean/engine_lean4.py +0 -0
  128. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/backend/engines/neurosymbolic/__init__.py +0 -0
  129. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/backend/engines/neurosymbolic/engine_anthropic_claudeX_chat.py +0 -0
  130. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/backend/engines/neurosymbolic/engine_anthropic_claudeX_reasoning.py +0 -0
  131. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/backend/engines/neurosymbolic/engine_cerebras.py +0 -0
  132. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/backend/engines/neurosymbolic/engine_deepseekX_reasoning.py +0 -0
  133. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/backend/engines/neurosymbolic/engine_google_geminiX_reasoning.py +0 -0
  134. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/backend/engines/neurosymbolic/engine_groq.py +0 -0
  135. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/backend/engines/neurosymbolic/engine_huggingface.py +0 -0
  136. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/backend/engines/neurosymbolic/engine_llama_cpp.py +0 -0
  137. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/backend/engines/neurosymbolic/engine_openai_gptX_chat.py +0 -0
  138. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/backend/engines/neurosymbolic/engine_openai_gptX_reasoning.py +0 -0
  139. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/backend/engines/neurosymbolic/engine_openai_responses.py +0 -0
  140. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/backend/engines/ocr/engine_apilayer.py +0 -0
  141. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/backend/engines/output/engine_stdout.py +0 -0
  142. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/backend/engines/scrape/engine_requests.py +0 -0
  143. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/backend/engines/search/engine_openai.py +0 -0
  144. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/backend/engines/search/engine_perplexity.py +0 -0
  145. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/backend/engines/search/engine_serpapi.py +0 -0
  146. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/backend/engines/speech_to_text/engine_local_whisper.py +0 -0
  147. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/backend/engines/symbolic/engine_wolframalpha.py +0 -0
  148. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/backend/engines/text_to_speech/engine_openai.py +0 -0
  149. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/backend/engines/text_vision/engine_clip.py +0 -0
  150. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/backend/engines/userinput/engine_console.py +0 -0
  151. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/backend/mixin/__init__.py +0 -0
  152. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/backend/mixin/anthropic.py +0 -0
  153. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/backend/mixin/cerebras.py +0 -0
  154. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/backend/mixin/deepseek.py +0 -0
  155. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/backend/mixin/google.py +0 -0
  156. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/backend/mixin/groq.py +0 -0
  157. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/backend/mixin/openai.py +0 -0
  158. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/backend/settings.py +0 -0
  159. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/chat.py +0 -0
  160. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/collect/__init__.py +0 -0
  161. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/collect/dynamic.py +0 -0
  162. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/collect/pipeline.py +0 -0
  163. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/collect/stats.py +0 -0
  164. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/components.py +0 -0
  165. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/constraints.py +0 -0
  166. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/context.py +0 -0
  167. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/core.py +0 -0
  168. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/core_ext.py +0 -0
  169. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/endpoints/__init__py +0 -0
  170. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/endpoints/api.py +0 -0
  171. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/exceptions.py +0 -0
  172. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/extended/.DS_Store +0 -0
  173. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/extended/__init__.py +0 -0
  174. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/extended/api_builder.py +0 -0
  175. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/extended/arxiv_pdf_parser.py +0 -0
  176. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/extended/bibtex_parser.py +0 -0
  177. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/extended/conversation.py +0 -0
  178. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/extended/document.py +0 -0
  179. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/extended/file_merger.py +0 -0
  180. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/extended/graph.py +0 -0
  181. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/extended/html_style_template.py +0 -0
  182. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/extended/interfaces/__init__.py +0 -0
  183. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/extended/interfaces/blip_2.py +0 -0
  184. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/extended/interfaces/clip.py +0 -0
  185. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/extended/interfaces/console.py +0 -0
  186. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/extended/interfaces/dall_e.py +0 -0
  187. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/extended/interfaces/file.py +0 -0
  188. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/extended/interfaces/flux.py +0 -0
  189. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/extended/interfaces/gpt_image.py +0 -0
  190. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/extended/interfaces/input.py +0 -0
  191. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/extended/interfaces/llava.py +0 -0
  192. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/extended/interfaces/naive_scrape.py +0 -0
  193. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/extended/interfaces/naive_vectordb.py +0 -0
  194. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/extended/interfaces/ocr.py +0 -0
  195. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/extended/interfaces/openai_search.py +0 -0
  196. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/extended/interfaces/parallel.py +0 -0
  197. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/extended/interfaces/perplexity.py +0 -0
  198. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/extended/interfaces/pinecone.py +0 -0
  199. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/extended/interfaces/python.py +0 -0
  200. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/extended/interfaces/serpapi.py +0 -0
  201. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/extended/interfaces/terminal.py +0 -0
  202. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/extended/interfaces/tts.py +0 -0
  203. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/extended/interfaces/whisper.py +0 -0
  204. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/extended/interfaces/wolframalpha.py +0 -0
  205. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/extended/metrics/__init__.py +0 -0
  206. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/extended/metrics/similarity.py +0 -0
  207. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/extended/os_command.py +0 -0
  208. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/extended/packages/__init__.py +0 -0
  209. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/extended/packages/symdev.py +0 -0
  210. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/extended/packages/sympkg.py +0 -0
  211. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/extended/packages/symrun.py +0 -0
  212. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/extended/repo_cloner.py +0 -0
  213. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/extended/seo_query_optimizer.py +0 -0
  214. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/extended/solver.py +0 -0
  215. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/extended/summarizer.py +0 -0
  216. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/extended/taypan_interpreter.py +0 -0
  217. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/extended/vectordb.py +0 -0
  218. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/formatter/__init__.py +0 -0
  219. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/formatter/emoji.pytxt +0 -0
  220. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/formatter/formatter.py +0 -0
  221. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/formatter/regex.py +0 -0
  222. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/functional.py +0 -0
  223. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/imports.py +0 -0
  224. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/interfaces.py +0 -0
  225. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/memory.py +0 -0
  226. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/menu/__init__.py +0 -0
  227. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/menu/screen.py +0 -0
  228. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/misc/__init__.py +0 -0
  229. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/misc/console.py +0 -0
  230. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/misc/loader.py +0 -0
  231. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/models/__init__.py +0 -0
  232. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/models/base.py +0 -0
  233. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/models/errors.py +0 -0
  234. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/ops/__init__.py +0 -0
  235. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/ops/measures.py +0 -0
  236. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/ops/primitives.py +0 -0
  237. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/post_processors.py +0 -0
  238. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/pre_processors.py +0 -0
  239. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/processor.py +0 -0
  240. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/prompts.py +0 -0
  241. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/server/__init__.py +0 -0
  242. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/server/huggingface_server.py +0 -0
  243. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/server/llama_cpp_server.py +0 -0
  244. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/server/qdrant_server.py +0 -0
  245. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/shell.py +0 -0
  246. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/shellsv.py +0 -0
  247. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/strategy.py +0 -0
  248. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/symbol.py +0 -0
  249. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/symsh.md +0 -0
  250. {symbolicai-1.2.1 → symbolicai-1.3.0}/symai/utils.py +0 -0
  251. {symbolicai-1.2.1 → symbolicai-1.3.0}/symbolicai.egg-info/dependency_links.txt +0 -0
  252. {symbolicai-1.2.1 → symbolicai-1.3.0}/symbolicai.egg-info/entry_points.txt +0 -0
  253. {symbolicai-1.2.1 → symbolicai-1.3.0}/symbolicai.egg-info/requires.txt +0 -0
  254. {symbolicai-1.2.1 → symbolicai-1.3.0}/symbolicai.egg-info/top_level.txt +0 -0
  255. {symbolicai-1.2.1 → symbolicai-1.3.0}/tests/README.md +0 -0
  256. {symbolicai-1.2.1 → symbolicai-1.3.0}/tests/data/audio.mp3 +0 -0
  257. {symbolicai-1.2.1 → symbolicai-1.3.0}/tests/data/pg1727.txt +0 -0
  258. {symbolicai-1.2.1 → symbolicai-1.3.0}/trusted_repos.yml +0 -0
  259. {symbolicai-1.2.1 → symbolicai-1.3.0}/uv.lock +0 -0
@@ -162,3 +162,4 @@ symsh
162
162
  .bash_history
163
163
  .conversation_state
164
164
  .symai
165
+ .codex
@@ -0,0 +1,76 @@
1
+ # Repository Guidelines
2
+
3
+ Guidance for coding agents and contributors.
4
+
5
+ ## Architecture Overview
6
+ SymbolicAI is a neuro-symbolic Python framework. `Symbol`/`Expression` route work to pluggable engines (LLMs, search,
7
+ scrape, vector DBs) configured via `symai.config.json`.
8
+
9
+ ### Key Components
10
+ - `symai/symbol.py` — `Symbol` primitive (syntactic vs semantic view).
11
+ - `symai/strategy.py` — contract system (`@contract`) and validation/retry flow.
12
+ - `symai/backend/engines/` — provider implementations (`neurosymbolic/`, `search/`, `scrape/`, `index/`, …).
13
+ - `symai/extended/interfaces/` — higher-level interfaces that select/compose engines.
14
+ - `symai/endpoints/`, `symai/server/` — FastAPI endpoints and optional local servers.
15
+
16
+ ## Project Structure
17
+ - `symai/` — library source (import path `symai`).
18
+ - `tests/` — pytest suite.
19
+ - `docs/` — documentation sources; `examples/` — runnable examples.
20
+ - `assets/`, `public/` — static files; `scripts/` — dev utilities (not public API).
21
+
22
+ ## Setup, Lint, and Tests
23
+ Environment (Python 3.10+), using `uv`:
24
+
25
+ ```bash
26
+ uv sync --python 3.10
27
+ source .venv/bin/activate
28
+ ```
29
+
30
+ Extras / locked installs:
31
+
32
+ ```bash
33
+ uv sync --frozen
34
+ uv sync --extra scrape # or: --extra all
35
+ ```
36
+
37
+ Lint/format (Ruff; `ruff.toml`):
38
+
39
+ ```bash
40
+ ruff check symai --config ruff.toml
41
+ ruff format symai
42
+ ```
43
+
44
+ Tests:
45
+
46
+ ```bash
47
+ pytest
48
+ pytest -m mandatory
49
+ pytest -q --tb=no tests/test_imports.py
50
+ ```
51
+
52
+ CLI entrypoints (after install): `symchat`, `symsh`, `symconfig`, `symserver`.
53
+
54
+ ## Configuration & Secrets
55
+ - Config precedence: `./symai.config.json`, `{venv}/.symai/symai.config.json`, then `~/.symai/symai.config.json`.
56
+ - Common keys: `NEUROSYMBOLIC_ENGINE_MODEL`, `NEUROSYMBOLIC_ENGINE_API_KEY`, `SYMAI_WARNINGS=0`, `SUPPORT_COMMUNITY`.
57
+ - Inspect active config with `symconfig`.
58
+ - Never commit API keys, tokens, or generated artifacts (`dist/`, caches, logs).
59
+
60
+ ## Style Notes
61
+ - 4-space indentation, 100-char lines, double quotes (`ruff.toml`).
62
+ - Prefer clear names (`snake_case` functions/modules, `CapWords` classes, `UPPER_SNAKE_CASE` constants).
63
+
64
+ ## Agent Workflow Rules (Project-Specific)
65
+ - Ask for clarification instead of guessing on ambiguous behavior or invariants.
66
+ - Treat type hints as contracts; do not add runtime type checks except at trust boundaries (CLI/env, JSON/network, disk).
67
+ - Prefer minimal diffs; edit existing code over adding new files unless necessary.
68
+ - Do not add/modify `tests/` or run tests unless explicitly requested; if requested, run the narrowest relevant `pytest` command.
69
+ - When you change Python files: run `ruff check <changed_files> --output-format concise --config ruff.toml` and fix issues.
70
+ - Keep search local-first (`rg`); follow imports instead of repo-wide “random scanning”.
71
+ - If adding a regex, include a short comment explaining what it matches.
72
+ - Update `TODO.md` when tasks are completed, added, or re-scoped.
73
+
74
+ ## Commit & PR Notes
75
+ - Commit messages commonly use `(<type>) <summary>`: `(feat)`, `(fix)`, `(chore)`, `(feature)`.
76
+ - PRs: describe intent + user impact, link issues, note config/env var changes, and include validation commands + results.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: symbolicai
3
- Version: 1.2.1
3
+ Version: 1.3.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
@@ -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 = "1.2.1"
36
+ SYMAI_VERSION = "1.3.0"
37
37
  __version__ = SYMAI_VERSION
38
38
  __root_dir__ = config_manager.config_dir
39
39
 
@@ -74,7 +74,8 @@ class SearchResult(Result):
74
74
  self._citations: list[Citation] = []
75
75
  try:
76
76
  results = self._coerce_results(value)
77
- text, citations = self._build_text_and_citations(results)
77
+ task_meta = self._extract_task_metadata(value)
78
+ text, citations = self._build_text_and_citations(results, task_meta=task_meta)
78
79
  self._value = text
79
80
  self._citations = citations
80
81
  except Exception as e:
@@ -87,13 +88,26 @@ class SearchResult(Result):
87
88
  results = raw.get("results", []) if isinstance(raw, dict) else getattr(raw, "results", None)
88
89
  if not results:
89
90
  return []
90
- coerced: list[dict[str, Any]] = []
91
+ coerced = []
91
92
  for item in results:
92
93
  if item is None:
93
94
  continue
94
95
  coerced.append(_item_to_mapping(item))
95
96
  return coerced
96
97
 
98
+ def _extract_task_metadata(self, raw: Any) -> dict[str, Any] | None:
99
+ if not isinstance(raw, dict):
100
+ return None
101
+ task_output = raw.get("task_output")
102
+ if task_output is None:
103
+ return None
104
+ output_value = task_output.get("output") if isinstance(task_output, dict) else None
105
+ return {
106
+ "reasoning": raw.get("task_reasoning"),
107
+ "answer": output_value,
108
+ "confidence": raw.get("task_confidence"),
109
+ }
110
+
97
111
  def _normalize_url(self, url: str) -> str:
98
112
  parts = urlsplit(url)
99
113
  scheme = parts.scheme.lower() if parts.scheme else "https"
@@ -139,11 +153,40 @@ class SearchResult(Result):
139
153
  cleaned = re.sub(r"\n{3,}", "\n\n", cleaned)
140
154
  return cleaned.strip()
141
155
 
142
- def _build_text_and_citations(self, results: list[dict[str, Any]]):
143
- pieces: list[str] = []
144
- citations: list[Citation] = []
156
+ def _build_text_and_citations(
157
+ self, results: list[dict[str, Any]], *, task_meta: dict[str, Any] | None = None
158
+ ):
159
+ pieces = []
160
+ citations = []
145
161
  cursor = 0
146
- seen_urls: set[str] = set()
162
+
163
+ if task_meta:
164
+ reasoning = task_meta.get("reasoning")
165
+ answer = task_meta.get("answer")
166
+ confidence = task_meta.get("confidence")
167
+
168
+ if reasoning:
169
+ block = f"<reasoning>\n{reasoning}\n</reasoning>"
170
+ pieces.append(block)
171
+ cursor += len(block)
172
+
173
+ if answer:
174
+ if pieces:
175
+ pieces.append("\n\n")
176
+ cursor += 2
177
+ block = f"<answer>\n{answer}\n</answer>"
178
+ pieces.append(block)
179
+ cursor += len(block)
180
+
181
+ if confidence:
182
+ if pieces:
183
+ pieces.append("\n\n")
184
+ cursor += 2
185
+ block = f"<answer_confidence>\n{confidence}\n</answer_confidence>"
186
+ pieces.append(block)
187
+ cursor += len(block)
188
+
189
+ seen_urls = set()
147
190
  cid = 1
148
191
  separator = "\n\n---\n\n"
149
192
 
@@ -158,13 +201,8 @@ class SearchResult(Result):
158
201
 
159
202
  title = str(item.get("title") or "") or urlsplit(normalized_url).netloc
160
203
  excerpts = item.get("excerpts") or []
161
- excerpt_parts: list[str] = []
162
- for ex in excerpts:
163
- if not isinstance(ex, str):
164
- continue
165
- sanitized = self._sanitize_excerpt(ex)
166
- if sanitized:
167
- excerpt_parts.append(sanitized)
204
+ excerpt_parts = [self._sanitize_excerpt(ex) for ex in excerpts]
205
+ excerpt_parts = [p for p in excerpt_parts if p]
168
206
  if not excerpt_parts:
169
207
  continue
170
208
 
@@ -255,16 +293,14 @@ class ExtractResult(Result):
255
293
  super().__init__(value, **kwargs)
256
294
  try:
257
295
  results = self._coerce_results(value)
258
- content_parts: list[str] = []
296
+ content_parts = []
259
297
  for r in results:
260
- excerpts = r.get("excerpts") or []
261
298
  full = r.get("full_content")
262
- if isinstance(full, str):
299
+ if full is not None:
263
300
  content_parts.append(full)
264
- elif full is not None:
265
- content_parts.append(str(full))
266
- elif excerpts:
267
- content_parts.extend([s for s in excerpts if isinstance(s, str)])
301
+ else:
302
+ excerpts = r.get("excerpts") or []
303
+ content_parts.extend(excerpts)
268
304
  self._value = "\n\n".join(content_parts)
269
305
  except Exception as e:
270
306
  self._value = None
@@ -276,7 +312,7 @@ class ExtractResult(Result):
276
312
  results = raw.get("results", []) if isinstance(raw, dict) else getattr(raw, "results", None)
277
313
  if not results:
278
314
  return []
279
- coerced: list[dict[str, Any]] = []
315
+ coerced = []
280
316
  for item in results:
281
317
  if item is None:
282
318
  continue
@@ -344,8 +380,8 @@ class ParallelEngine(Engine):
344
380
  def _normalize_include_domains(self, domains: list[str] | None) -> list[str]:
345
381
  if not isinstance(domains, list):
346
382
  return []
347
- seen: set[str] = set()
348
- out: list[str] = []
383
+ seen = set()
384
+ out = []
349
385
  for d in domains:
350
386
  netloc = self._extract_netloc(d)
351
387
  if not netloc or netloc in seen:
@@ -361,8 +397,8 @@ class ParallelEngine(Engine):
361
397
  def _normalize_exclude_domains(self, domains: list[str] | None) -> list[str]:
362
398
  if not isinstance(domains, list):
363
399
  return []
364
- seen: set[str] = set()
365
- out: list[str] = []
400
+ seen = set()
401
+ out = []
366
402
  for d in domains:
367
403
  netloc = self._extract_netloc(d)
368
404
  if not netloc or netloc in seen:
@@ -382,7 +418,7 @@ class ParallelEngine(Engine):
382
418
  text = value.strip()
383
419
  return [text] if text else []
384
420
  if isinstance(value, list):
385
- cleaned: list[str] = []
421
+ cleaned = []
386
422
  for item in value:
387
423
  if item is None:
388
424
  continue
@@ -429,7 +465,7 @@ class ParallelEngine(Engine):
429
465
  excerpts = {"max_chars_per_result": max_chars_per_result}
430
466
  include = self._normalize_include_domains(kwargs.get("allowed_domains"))
431
467
  exclude = self._normalize_exclude_domains(kwargs.get("excluded_domains"))
432
- source_policy: dict[str, Any] | None = None
468
+ source_policy = None
433
469
  if include or exclude:
434
470
  source_policy = {}
435
471
  if include:
@@ -457,7 +493,7 @@ class ParallelEngine(Engine):
457
493
 
458
494
  include = self._normalize_include_domains(kwargs.get("allowed_domains"))
459
495
  exclude = self._normalize_exclude_domains(kwargs.get("excluded_domains"))
460
- source_policy: dict[str, Any] | None = None
496
+ source_policy = None
461
497
  if include or exclude:
462
498
  source_policy = {}
463
499
  if include:
@@ -542,7 +578,7 @@ class ParallelEngine(Engine):
542
578
  source_policy: dict[str, Any] | None,
543
579
  task_spec: Any,
544
580
  ):
545
- task_kwargs: dict[str, Any] = {
581
+ task_kwargs = {
546
582
  "input": task_input,
547
583
  "processor": processor,
548
584
  }
@@ -559,7 +595,7 @@ class ParallelEngine(Engine):
559
595
  UserMessage(f"Failed to create Parallel task: {e}", raise_with=ValueError)
560
596
 
561
597
  def _fetch_task_result(self, run_id: str, *, timeout: Any, api_timeout: int | None):
562
- result_kwargs: dict[str, Any] = {}
598
+ result_kwargs = {}
563
599
  if api_timeout is not None:
564
600
  result_kwargs["api_timeout"] = api_timeout
565
601
  if timeout is not None:
@@ -570,36 +606,40 @@ class ParallelEngine(Engine):
570
606
  UserMessage(f"Failed to fetch Parallel task result: {e}", raise_with=ValueError)
571
607
 
572
608
  def _task_result_to_search_payload(self, task_result: Any) -> dict[str, Any]:
573
- payload: dict[str, Any] = {"results": []}
574
- output = getattr(task_result, "output", None)
609
+ payload = {"results": []}
610
+ output = task_result.output
575
611
  if output is None:
576
612
  return payload
577
613
 
578
- basis_items = getattr(output, "basis", None) or []
614
+ basis_items = output.basis or []
579
615
  for idx, basis in enumerate(basis_items):
580
616
  payload["results"].extend(self._basis_to_results(basis, basis_index=idx))
581
617
 
582
618
  if not payload["results"]:
583
619
  payload["results"].append(self._task_fallback_result(output, basis_items))
584
620
 
585
- payload["task_output"] = getattr(output, "content", None)
586
- payload["task_output_type"] = getattr(output, "type", None)
621
+ payload["task_output"] = output.content
622
+ payload["task_output_type"] = output.type
623
+
624
+ if basis_items:
625
+ first_basis = basis_items[0]
626
+ payload["task_reasoning"] = first_basis.reasoning
627
+ payload["task_confidence"] = first_basis.confidence
628
+
587
629
  return payload
588
630
 
589
631
  def _basis_to_results(self, basis: Any, *, basis_index: int) -> list[dict[str, Any]]:
590
- raw_reasoning = getattr(basis, "reasoning", "") or ""
591
- reasoning = raw_reasoning if isinstance(raw_reasoning, str) else str(raw_reasoning)
592
- raw_field = getattr(basis, "field", "") or ""
593
- field_title = raw_field if isinstance(raw_field, str) else str(raw_field)
632
+ reasoning = basis.reasoning or ""
633
+ field_title = basis.field or ""
594
634
  if not field_title.strip():
595
635
  field_title = "Parallel Task Output"
596
- citations = getattr(basis, "citations", None) or []
636
+ citations = basis.citations or []
597
637
  if not citations:
598
638
  if not reasoning:
599
639
  return []
600
640
  citations = [None]
601
641
 
602
- results: list[dict[str, Any]] = []
642
+ results = []
603
643
  # Convert field titles to lowercase slugs by swapping non-alphanumerics for hyphens.
604
644
  slug = re.sub(r"[^a-z0-9]+", "-", field_title.lower()).strip("-") or "field"
605
645
  basis_url = f"parallel://task-output/{basis_index:04d}-{slug}"
@@ -609,10 +649,9 @@ class ParallelEngine(Engine):
609
649
  title = field_title
610
650
  excerpts = [reasoning]
611
651
  else:
612
- url = str(getattr(citation, "url", "") or "")
613
- title = str(getattr(citation, "title", "") or field_title)
614
- raw_excerpts = getattr(citation, "excerpts", None) or []
615
- excerpts = [snippet for snippet in raw_excerpts if isinstance(snippet, str)]
652
+ url = str(citation.url or "")
653
+ title = str(citation.title or field_title)
654
+ excerpts = citation.excerpts or []
616
655
  if not excerpts and reasoning:
617
656
  excerpts = [reasoning]
618
657
  results.append(
@@ -625,7 +664,7 @@ class ParallelEngine(Engine):
625
664
  return results
626
665
 
627
666
  def _task_fallback_result(self, output: Any, basis_items: list[Any]) -> dict[str, Any]:
628
- content = getattr(output, "content", None)
667
+ content = output.content
629
668
  if isinstance(content, str):
630
669
  snippet = content
631
670
  elif isinstance(content, (dict, list)):
@@ -633,9 +672,9 @@ class ParallelEngine(Engine):
633
672
  else:
634
673
  snippet = str(content or "")
635
674
  if not snippet:
636
- extra_reasoning: list[str] = []
675
+ extra_reasoning = []
637
676
  for basis in basis_items:
638
- raw_value = getattr(basis, "reasoning", "") or ""
677
+ raw_value = basis.reasoning or ""
639
678
  if isinstance(raw_value, str):
640
679
  extra_reasoning.append(raw_value)
641
680
  else:
@@ -665,13 +704,13 @@ class ParallelEngine(Engine):
665
704
  def forward(self, argument):
666
705
  kwargs = argument.kwargs
667
706
  # Route based on presence of URL vs Query
668
- url = getattr(argument.prop, "url", None) or kwargs.get("url")
707
+ url = argument.prop.url or kwargs.get("url")
669
708
  if url:
670
709
  return self._extract(str(url), kwargs)
671
710
 
672
- raw_query = getattr(argument.prop, "prepared_input", None)
711
+ raw_query = argument.prop.prepared_input
673
712
  if raw_query is None:
674
- raw_query = getattr(argument.prop, "query", None)
713
+ raw_query = argument.prop.query
675
714
  search_queries = self._coerce_search_queries(raw_query)
676
715
  if not search_queries:
677
716
  UserMessage(
@@ -685,11 +724,11 @@ class ParallelEngine(Engine):
685
724
 
686
725
  def prepare(self, argument):
687
726
  # For scraping: store URL directly. For search: pass through query string.
688
- url = argument.kwargs.get("url") or getattr(argument.prop, "url", None)
727
+ url = argument.kwargs.get("url") or argument.prop.url
689
728
  if url:
690
729
  argument.prop.prepared_input = str(url)
691
730
  return
692
- query = getattr(argument.prop, "query", None)
731
+ query = argument.prop.query
693
732
  if isinstance(query, list):
694
733
  argument.prop.prepared_input = self._coerce_search_queries(query)
695
734
  return
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: symbolicai
3
- Version: 1.2.1
3
+ Version: 1.3.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
@@ -1,5 +1,6 @@
1
1
  .gitbook.yaml
2
2
  .gitignore
3
+ AGENTS.md
3
4
  CITATION.cff
4
5
  Dockerfile
5
6
  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