symbolicai 0.21.0__py3-none-any.whl → 1.0.0__py3-none-any.whl

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 (123) hide show
  1. symai/__init__.py +96 -64
  2. symai/backend/base.py +93 -80
  3. symai/backend/engines/drawing/engine_bfl.py +12 -11
  4. symai/backend/engines/drawing/engine_gpt_image.py +108 -87
  5. symai/backend/engines/embedding/engine_llama_cpp.py +20 -24
  6. symai/backend/engines/embedding/engine_openai.py +3 -5
  7. symai/backend/engines/execute/engine_python.py +6 -5
  8. symai/backend/engines/files/engine_io.py +74 -67
  9. symai/backend/engines/imagecaptioning/engine_blip2.py +3 -3
  10. symai/backend/engines/imagecaptioning/engine_llavacpp_client.py +54 -38
  11. symai/backend/engines/index/engine_pinecone.py +23 -24
  12. symai/backend/engines/index/engine_vectordb.py +16 -14
  13. symai/backend/engines/lean/engine_lean4.py +38 -34
  14. symai/backend/engines/neurosymbolic/__init__.py +41 -13
  15. symai/backend/engines/neurosymbolic/engine_anthropic_claudeX_chat.py +262 -182
  16. symai/backend/engines/neurosymbolic/engine_anthropic_claudeX_reasoning.py +263 -191
  17. symai/backend/engines/neurosymbolic/engine_deepseekX_reasoning.py +53 -49
  18. symai/backend/engines/neurosymbolic/engine_google_geminiX_reasoning.py +212 -211
  19. symai/backend/engines/neurosymbolic/engine_groq.py +87 -63
  20. symai/backend/engines/neurosymbolic/engine_huggingface.py +21 -24
  21. symai/backend/engines/neurosymbolic/engine_llama_cpp.py +44 -46
  22. symai/backend/engines/neurosymbolic/engine_openai_gptX_chat.py +256 -229
  23. symai/backend/engines/neurosymbolic/engine_openai_gptX_reasoning.py +270 -150
  24. symai/backend/engines/ocr/engine_apilayer.py +6 -8
  25. symai/backend/engines/output/engine_stdout.py +1 -4
  26. symai/backend/engines/search/engine_openai.py +7 -7
  27. symai/backend/engines/search/engine_perplexity.py +5 -5
  28. symai/backend/engines/search/engine_serpapi.py +12 -14
  29. symai/backend/engines/speech_to_text/engine_local_whisper.py +20 -27
  30. symai/backend/engines/symbolic/engine_wolframalpha.py +3 -3
  31. symai/backend/engines/text_to_speech/engine_openai.py +5 -7
  32. symai/backend/engines/text_vision/engine_clip.py +7 -11
  33. symai/backend/engines/userinput/engine_console.py +3 -3
  34. symai/backend/engines/webscraping/engine_requests.py +81 -48
  35. symai/backend/mixin/__init__.py +13 -0
  36. symai/backend/mixin/anthropic.py +4 -2
  37. symai/backend/mixin/deepseek.py +2 -0
  38. symai/backend/mixin/google.py +2 -0
  39. symai/backend/mixin/openai.py +11 -3
  40. symai/backend/settings.py +83 -16
  41. symai/chat.py +101 -78
  42. symai/collect/__init__.py +7 -1
  43. symai/collect/dynamic.py +77 -69
  44. symai/collect/pipeline.py +35 -27
  45. symai/collect/stats.py +75 -63
  46. symai/components.py +198 -169
  47. symai/constraints.py +15 -12
  48. symai/core.py +698 -359
  49. symai/core_ext.py +32 -34
  50. symai/endpoints/api.py +80 -73
  51. symai/extended/.DS_Store +0 -0
  52. symai/extended/__init__.py +46 -12
  53. symai/extended/api_builder.py +11 -8
  54. symai/extended/arxiv_pdf_parser.py +13 -12
  55. symai/extended/bibtex_parser.py +2 -3
  56. symai/extended/conversation.py +101 -90
  57. symai/extended/document.py +17 -10
  58. symai/extended/file_merger.py +18 -13
  59. symai/extended/graph.py +18 -13
  60. symai/extended/html_style_template.py +2 -4
  61. symai/extended/interfaces/blip_2.py +1 -2
  62. symai/extended/interfaces/clip.py +1 -2
  63. symai/extended/interfaces/console.py +7 -1
  64. symai/extended/interfaces/dall_e.py +1 -1
  65. symai/extended/interfaces/flux.py +1 -1
  66. symai/extended/interfaces/gpt_image.py +1 -1
  67. symai/extended/interfaces/input.py +1 -1
  68. symai/extended/interfaces/llava.py +0 -1
  69. symai/extended/interfaces/naive_vectordb.py +7 -8
  70. symai/extended/interfaces/naive_webscraping.py +1 -1
  71. symai/extended/interfaces/ocr.py +1 -1
  72. symai/extended/interfaces/pinecone.py +6 -5
  73. symai/extended/interfaces/serpapi.py +1 -1
  74. symai/extended/interfaces/terminal.py +2 -3
  75. symai/extended/interfaces/tts.py +1 -1
  76. symai/extended/interfaces/whisper.py +1 -1
  77. symai/extended/interfaces/wolframalpha.py +1 -1
  78. symai/extended/metrics/__init__.py +11 -1
  79. symai/extended/metrics/similarity.py +11 -13
  80. symai/extended/os_command.py +17 -16
  81. symai/extended/packages/__init__.py +29 -3
  82. symai/extended/packages/symdev.py +19 -16
  83. symai/extended/packages/sympkg.py +12 -9
  84. symai/extended/packages/symrun.py +21 -19
  85. symai/extended/repo_cloner.py +11 -10
  86. symai/extended/seo_query_optimizer.py +1 -2
  87. symai/extended/solver.py +20 -23
  88. symai/extended/summarizer.py +4 -3
  89. symai/extended/taypan_interpreter.py +10 -12
  90. symai/extended/vectordb.py +99 -82
  91. symai/formatter/__init__.py +9 -1
  92. symai/formatter/formatter.py +12 -16
  93. symai/formatter/regex.py +62 -63
  94. symai/functional.py +173 -122
  95. symai/imports.py +136 -127
  96. symai/interfaces.py +56 -27
  97. symai/memory.py +14 -13
  98. symai/misc/console.py +49 -39
  99. symai/misc/loader.py +5 -3
  100. symai/models/__init__.py +17 -1
  101. symai/models/base.py +269 -181
  102. symai/models/errors.py +0 -1
  103. symai/ops/__init__.py +32 -22
  104. symai/ops/measures.py +11 -15
  105. symai/ops/primitives.py +348 -228
  106. symai/post_processors.py +32 -28
  107. symai/pre_processors.py +39 -41
  108. symai/processor.py +6 -4
  109. symai/prompts.py +59 -45
  110. symai/server/huggingface_server.py +23 -20
  111. symai/server/llama_cpp_server.py +7 -5
  112. symai/shell.py +3 -4
  113. symai/shellsv.py +499 -375
  114. symai/strategy.py +517 -287
  115. symai/symbol.py +111 -116
  116. symai/utils.py +42 -36
  117. {symbolicai-0.21.0.dist-info → symbolicai-1.0.0.dist-info}/METADATA +4 -2
  118. symbolicai-1.0.0.dist-info/RECORD +163 -0
  119. symbolicai-0.21.0.dist-info/RECORD +0 -162
  120. {symbolicai-0.21.0.dist-info → symbolicai-1.0.0.dist-info}/WHEEL +0 -0
  121. {symbolicai-0.21.0.dist-info → symbolicai-1.0.0.dist-info}/entry_points.txt +0 -0
  122. {symbolicai-0.21.0.dist-info → symbolicai-1.0.0.dist-info}/licenses/LICENSE +0 -0
  123. {symbolicai-0.21.0.dist-info → symbolicai-1.0.0.dist-info}/top_level.txt +0 -0
symai/misc/console.py CHANGED
@@ -1,24 +1,24 @@
1
- import re
2
- import pygments
3
1
  import logging
2
+ import re
4
3
 
5
4
  #@TODO: refactor to use rich instead of prompt_toolkit
6
5
  from html import escape as escape_html
7
- from pygments.lexers.python import PythonLexer
8
- from pygments.lexers.javascript import JavascriptLexer
6
+ from typing import ClassVar
7
+
8
+ import pygments
9
+ from prompt_toolkit import HTML, print_formatted_text
10
+ from prompt_toolkit.formatted_text import PygmentsTokens
9
11
  from pygments.lexers.c_cpp import CppLexer
12
+ from pygments.lexers.javascript import JavascriptLexer
13
+ from pygments.lexers.python import PythonLexer
10
14
  from pygments.lexers.shell import BashLexer
11
- from prompt_toolkit import print_formatted_text
12
- from prompt_toolkit import HTML
13
- from prompt_toolkit.formatted_text import PygmentsTokens
14
-
15
15
 
16
16
  logger = logging.getLogger(__name__)
17
- print = print_formatted_text
17
+ print = print_formatted_text # noqa
18
18
 
19
19
 
20
- class ConsoleStyle(object):
21
- style_types = {
20
+ class ConsoleStyle:
21
+ style_types: ClassVar[dict[str, str]] = {
22
22
  'alert': 'orange',
23
23
  'error': 'ansired',
24
24
  'warn': 'ansiyellow',
@@ -55,32 +55,42 @@ class ConsoleStyle(object):
55
55
  style = self.style_types.get(self.style_type, self.style_types['default'])
56
56
 
57
57
  if style == self.style_types['code']:
58
- # Split the message using ``` as delimiter
59
- segments = re.split(r'(```)', message)
60
- is_code = False
61
- for segment in segments:
62
- if segment == '```':
63
- is_code = not is_code
64
- continue
65
- if is_code:
66
- # Determine lexer
67
- if 'python' in segment.lower():
68
- lexer = PythonLexer()
69
- elif 'javascript' in segment.lower() or 'typescript' in segment.lower():
70
- lexer = JavascriptLexer()
71
- elif 'c++' in segment.lower():
72
- lexer = CppLexer()
73
- else:
74
- lexer = BashLexer()
75
- # Print highlighted code
76
- tokens = list(pygments.lex("```" + segment + "```", lexer))
77
- print(PygmentsTokens(tokens), end='')
78
- else:
79
- # Print the segment normally
80
- print(segment, end='\n')
81
- elif style == self.style_types['default']:
58
+ self._print_code_message(message)
59
+ return
60
+ if style == self.style_types['default']:
82
61
  print(message)
83
- elif style == self.style_types['custom']:
84
- print(HTML(f'<style fg="{self.color}">{content_for_html}</style>'))
85
- else:
86
- print(HTML(f'<style fg="{style}">{content_for_html}</style>'))
62
+ return
63
+ if style == self.style_types['custom']:
64
+ self._print_html(self.color, content_for_html)
65
+ return
66
+ self._print_html(style, content_for_html)
67
+
68
+ def _print_code_message(self, message: str) -> None:
69
+ segments = re.split(r'(```)', message)
70
+ is_code_segment = False
71
+ for segment in segments:
72
+ if segment == '```':
73
+ is_code_segment = not is_code_segment
74
+ continue
75
+ if is_code_segment:
76
+ self._print_code_segment(segment)
77
+ continue
78
+ print(segment, end='\n')
79
+
80
+ def _print_code_segment(self, segment: str) -> None:
81
+ lexer = self._select_lexer(segment)
82
+ tokens = list(pygments.lex("```" + segment + "```", lexer))
83
+ print(PygmentsTokens(tokens), end='')
84
+
85
+ def _select_lexer(self, segment: str):
86
+ lowered_segment = segment.lower()
87
+ if 'python' in lowered_segment:
88
+ return PythonLexer()
89
+ if 'javascript' in lowered_segment or 'typescript' in lowered_segment:
90
+ return JavascriptLexer()
91
+ if 'c++' in lowered_segment:
92
+ return CppLexer()
93
+ return BashLexer()
94
+
95
+ def _print_html(self, color: str, content: str) -> None:
96
+ print(HTML(f'<style fg="{color}">{content}</style>'))
symai/misc/loader.py CHANGED
@@ -1,12 +1,14 @@
1
1
  import sys
2
2
  from itertools import cycle
3
3
  from shutil import get_terminal_size
4
- from threading import Thread, Event
4
+ from threading import Event, Thread
5
5
  from time import sleep
6
+
6
7
  from prompt_toolkit import print_formatted_text
8
+
7
9
  from .console import ConsoleStyle
8
10
 
9
- print = print_formatted_text
11
+ print = print_formatted_text # noqa
10
12
 
11
13
  class Loader:
12
14
  def __init__(self, desc="Loading...", end="\n", timeout=0.1):
@@ -56,4 +58,4 @@ class Loader:
56
58
  self.stop()
57
59
 
58
60
  def print(self, message):
59
- print(message, style='ansigray')
61
+ print(message, style="ansigray")
symai/models/__init__.py CHANGED
@@ -1,2 +1,18 @@
1
- from .base import Const, LengthConstraint, LLMDataModel, CustomConstraint, build_dynamic_llm_datamodel
1
+ from .base import (
2
+ Const,
3
+ CustomConstraint,
4
+ LengthConstraint,
5
+ LLMDataModel,
6
+ build_dynamic_llm_datamodel,
7
+ )
2
8
  from .errors import ExceptionWithUsage, TypeValidationError
9
+
10
+ __all__ = [
11
+ "Const",
12
+ "CustomConstraint",
13
+ "ExceptionWithUsage",
14
+ "LLMDataModel",
15
+ "LengthConstraint",
16
+ "TypeValidationError",
17
+ "build_dynamic_llm_datamodel",
18
+ ]