symbolicai 1.6.0__py3-none-any.whl → 1.7.1__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.
- symai/__init__.py +1 -1
- symai/backend/engines/neurosymbolic/engine_anthropic_claudeX_chat.py +1 -0
- symai/backend/engines/neurosymbolic/engine_anthropic_claudeX_reasoning.py +79 -4
- symai/backend/engines/neurosymbolic/engine_cerebras.py +1 -0
- symai/backend/mixin/anthropic.py +41 -16
- symai/strategy.py +44 -4
- {symbolicai-1.6.0.dist-info → symbolicai-1.7.1.dist-info}/METADATA +2 -2
- {symbolicai-1.6.0.dist-info → symbolicai-1.7.1.dist-info}/RECORD +12 -12
- {symbolicai-1.6.0.dist-info → symbolicai-1.7.1.dist-info}/WHEEL +0 -0
- {symbolicai-1.6.0.dist-info → symbolicai-1.7.1.dist-info}/entry_points.txt +0 -0
- {symbolicai-1.6.0.dist-info → symbolicai-1.7.1.dist-info}/licenses/LICENSE +0 -0
- {symbolicai-1.6.0.dist-info → symbolicai-1.7.1.dist-info}/top_level.txt +0 -0
symai/__init__.py
CHANGED
|
@@ -64,6 +64,7 @@ class ClaudeXChatEngine(Engine, AnthropicMixin):
|
|
|
64
64
|
and "4-0" not in self.config.get("NEUROSYMBOLIC_ENGINE_MODEL")
|
|
65
65
|
and "4-1" not in self.config.get("NEUROSYMBOLIC_ENGINE_MODEL")
|
|
66
66
|
and "4-5" not in self.config.get("NEUROSYMBOLIC_ENGINE_MODEL")
|
|
67
|
+
and "4-6" not in self.config.get("NEUROSYMBOLIC_ENGINE_MODEL")
|
|
67
68
|
)
|
|
68
69
|
):
|
|
69
70
|
return "neurosymbolic"
|
|
@@ -66,6 +66,7 @@ class ClaudeXReasoningEngine(Engine, AnthropicMixin):
|
|
|
66
66
|
or "4-0" in self.config.get("NEUROSYMBOLIC_ENGINE_MODEL")
|
|
67
67
|
or "4-1" in self.config.get("NEUROSYMBOLIC_ENGINE_MODEL")
|
|
68
68
|
or "4-5" in self.config.get("NEUROSYMBOLIC_ENGINE_MODEL")
|
|
69
|
+
or "4-6" in self.config.get("NEUROSYMBOLIC_ENGINE_MODEL")
|
|
69
70
|
)
|
|
70
71
|
):
|
|
71
72
|
return "neurosymbolic"
|
|
@@ -348,15 +349,81 @@ class ClaudeXReasoningEngine(Engine, AnthropicMixin):
|
|
|
348
349
|
|
|
349
350
|
return {"role": "user", "content": user_text}
|
|
350
351
|
|
|
352
|
+
def _build_output_config(self, response_format):
|
|
353
|
+
if response_format is None:
|
|
354
|
+
return NOT_GIVEN
|
|
355
|
+
|
|
356
|
+
if response_format["type"] == "json_schema":
|
|
357
|
+
schema = response_format.get("schema")
|
|
358
|
+
if schema is None and response_format.get("json_schema") is not None:
|
|
359
|
+
schema = response_format["json_schema"].get("schema", response_format["json_schema"])
|
|
360
|
+
if schema is None:
|
|
361
|
+
return NOT_GIVEN
|
|
362
|
+
return {"format": {"type": "json_schema", "schema": schema}}
|
|
363
|
+
|
|
364
|
+
if response_format["type"] == "json_object":
|
|
365
|
+
schema = response_format.get("schema")
|
|
366
|
+
if schema is None:
|
|
367
|
+
return NOT_GIVEN
|
|
368
|
+
return {"format": {"type": "json_schema", "schema": schema}}
|
|
369
|
+
|
|
370
|
+
return NOT_GIVEN
|
|
371
|
+
|
|
372
|
+
def _build_thinking_config(self, thinking_arg, model):
|
|
373
|
+
if not thinking_arg or not isinstance(thinking_arg, dict):
|
|
374
|
+
return NOT_GIVEN, None
|
|
375
|
+
|
|
376
|
+
thinking_type = thinking_arg.get("type")
|
|
377
|
+
if thinking_type == "disabled":
|
|
378
|
+
return {"type": "disabled"}, None
|
|
379
|
+
|
|
380
|
+
if thinking_type == "adaptive":
|
|
381
|
+
if self.supports_adaptive_thinking(model):
|
|
382
|
+
return {"type": "adaptive"}, thinking_arg.get("effort")
|
|
383
|
+
UserMessage(
|
|
384
|
+
"Adaptive thinking is only supported for claude-opus-4-6; "
|
|
385
|
+
"falling back to manual thinking."
|
|
386
|
+
)
|
|
387
|
+
return {"type": "enabled", "budget_tokens": thinking_arg.get("budget_tokens", 1024)}, None
|
|
388
|
+
|
|
389
|
+
if thinking_type == "enabled" or "budget_tokens" in thinking_arg:
|
|
390
|
+
return {"type": "enabled", "budget_tokens": thinking_arg.get("budget_tokens", 1024)}, None
|
|
391
|
+
|
|
392
|
+
return NOT_GIVEN, None
|
|
393
|
+
|
|
394
|
+
def _merge_output_config_effort(self, output_config, adaptive_effort):
|
|
395
|
+
if adaptive_effort is None:
|
|
396
|
+
return output_config
|
|
397
|
+
if output_config == NOT_GIVEN:
|
|
398
|
+
return {"effort": adaptive_effort}
|
|
399
|
+
return {**output_config, "effort": adaptive_effort}
|
|
400
|
+
|
|
351
401
|
def _prepare_request_payload(self, argument):
|
|
352
402
|
kwargs = argument.kwargs
|
|
353
403
|
model = kwargs.get("model", self.model)
|
|
404
|
+
long_context_1m = bool(kwargs.get("long_context_1m", False))
|
|
405
|
+
use_long_context_1m = long_context_1m and self.supports_long_context_1m(model)
|
|
406
|
+
effective_context_tokens = self.api_max_context_tokens(model=model)
|
|
407
|
+
if effective_context_tokens is None:
|
|
408
|
+
effective_context_tokens = 200_000
|
|
409
|
+
if use_long_context_1m:
|
|
410
|
+
effective_context_tokens = self.api_max_context_tokens(
|
|
411
|
+
long_context_1m=True, model=model
|
|
412
|
+
)
|
|
413
|
+
if long_context_1m and not use_long_context_1m:
|
|
414
|
+
UserMessage(
|
|
415
|
+
"long_context_1m is only supported for claude-opus-4-6 and claude-sonnet-4-5; "
|
|
416
|
+
f"falling back to {effective_context_tokens} token context."
|
|
417
|
+
)
|
|
418
|
+
|
|
419
|
+
extra_headers = None
|
|
420
|
+
if use_long_context_1m:
|
|
421
|
+
extra_headers = {"anthropic-beta": self.long_context_beta_header()}
|
|
422
|
+
|
|
354
423
|
stop = kwargs.get("stop", NOT_GIVEN)
|
|
355
424
|
temperature = kwargs.get("temperature", 1)
|
|
356
425
|
thinking_arg = kwargs.get("thinking", NOT_GIVEN)
|
|
357
|
-
thinking =
|
|
358
|
-
if thinking_arg and isinstance(thinking_arg, dict):
|
|
359
|
-
thinking = {"type": "enabled", "budget_tokens": thinking_arg.get("budget_tokens", 1024)}
|
|
426
|
+
thinking, adaptive_effort = self._build_thinking_config(thinking_arg, model)
|
|
360
427
|
top_p = kwargs.get(
|
|
361
428
|
"top_p", NOT_GIVEN if temperature is not None else 1
|
|
362
429
|
) # @NOTE:'You should either alter temperature or top_p, but not both.'
|
|
@@ -368,6 +435,9 @@ class ClaudeXReasoningEngine(Engine, AnthropicMixin):
|
|
|
368
435
|
tool_choice = kwargs.get("tool_choice", NOT_GIVEN)
|
|
369
436
|
metadata_anthropic = kwargs.get("metadata", NOT_GIVEN)
|
|
370
437
|
max_tokens = kwargs.get("max_tokens", self.max_response_tokens)
|
|
438
|
+
response_format = kwargs.get("response_format", argument.prop.response_format)
|
|
439
|
+
output_config = self._build_output_config(response_format)
|
|
440
|
+
output_config = self._merge_output_config_effort(output_config, adaptive_effort)
|
|
371
441
|
|
|
372
442
|
if stop != NOT_GIVEN and not isinstance(stop, list):
|
|
373
443
|
stop = [stop]
|
|
@@ -377,7 +447,7 @@ class ClaudeXReasoningEngine(Engine, AnthropicMixin):
|
|
|
377
447
|
if stop != NOT_GIVEN:
|
|
378
448
|
stop = [r"{s}" for s in stop]
|
|
379
449
|
|
|
380
|
-
|
|
450
|
+
payload = {
|
|
381
451
|
"model": model,
|
|
382
452
|
"max_tokens": max_tokens,
|
|
383
453
|
"stop_sequences": stop,
|
|
@@ -389,7 +459,12 @@ class ClaudeXReasoningEngine(Engine, AnthropicMixin):
|
|
|
389
459
|
"metadata": metadata_anthropic,
|
|
390
460
|
"tools": tools,
|
|
391
461
|
"tool_choice": tool_choice,
|
|
462
|
+
"output_config": output_config,
|
|
392
463
|
}
|
|
464
|
+
if extra_headers is not None:
|
|
465
|
+
payload["extra_headers"] = extra_headers
|
|
466
|
+
|
|
467
|
+
return payload
|
|
393
468
|
|
|
394
469
|
def _collect_response(self, res):
|
|
395
470
|
if isinstance(res, list):
|
|
@@ -16,6 +16,7 @@ logging.getLogger("requests").setLevel(logging.ERROR)
|
|
|
16
16
|
logging.getLogger("urllib").setLevel(logging.ERROR)
|
|
17
17
|
logging.getLogger("httpx").setLevel(logging.ERROR)
|
|
18
18
|
logging.getLogger("httpcore").setLevel(logging.ERROR)
|
|
19
|
+
logging.getLogger("hpack").setLevel(logging.ERROR)
|
|
19
20
|
|
|
20
21
|
|
|
21
22
|
_NON_VERBOSE_OUTPUT = (
|
symai/backend/mixin/anthropic.py
CHANGED
|
@@ -10,6 +10,7 @@ SUPPORTED_CHAT_MODELS = [
|
|
|
10
10
|
"claude-3-haiku-20240307",
|
|
11
11
|
]
|
|
12
12
|
SUPPORTED_REASONING_MODELS = [
|
|
13
|
+
"claude-opus-4-6",
|
|
13
14
|
"claude-opus-4-5",
|
|
14
15
|
"claude-opus-4-1",
|
|
15
16
|
"claude-opus-4-0",
|
|
@@ -19,29 +20,53 @@ SUPPORTED_REASONING_MODELS = [
|
|
|
19
20
|
"claude-sonnet-4-5",
|
|
20
21
|
]
|
|
21
22
|
|
|
23
|
+
LONG_CONTEXT_1M_TOKENS = 1_000_000
|
|
24
|
+
LONG_CONTEXT_1M_BETA_HEADER = "context-1m-2025-08-07"
|
|
25
|
+
LONG_CONTEXT_1M_MODELS = {
|
|
26
|
+
"claude-opus-4-6",
|
|
27
|
+
"claude-sonnet-4-5",
|
|
28
|
+
}
|
|
29
|
+
ADAPTIVE_THINKING_MODELS = {"claude-opus-4-6"}
|
|
30
|
+
|
|
22
31
|
|
|
23
32
|
class AnthropicMixin:
|
|
24
|
-
def
|
|
33
|
+
def supports_adaptive_thinking(self, model: str) -> bool:
|
|
34
|
+
return model in ADAPTIVE_THINKING_MODELS
|
|
35
|
+
|
|
36
|
+
def supports_long_context_1m(self, model: str) -> bool:
|
|
37
|
+
return model in LONG_CONTEXT_1M_MODELS
|
|
38
|
+
|
|
39
|
+
def long_context_beta_header(self) -> str:
|
|
40
|
+
return LONG_CONTEXT_1M_BETA_HEADER
|
|
41
|
+
|
|
42
|
+
def api_max_context_tokens(self, long_context_1m: bool = False, model: str | None = None):
|
|
43
|
+
selected_model = self.model if model is None else model
|
|
44
|
+
if long_context_1m and self.supports_long_context_1m(selected_model):
|
|
45
|
+
return LONG_CONTEXT_1M_TOKENS
|
|
25
46
|
if (
|
|
26
|
-
|
|
27
|
-
or
|
|
28
|
-
or
|
|
29
|
-
or
|
|
30
|
-
or
|
|
31
|
-
or
|
|
32
|
-
or
|
|
33
|
-
or
|
|
34
|
-
or
|
|
35
|
-
or
|
|
36
|
-
or
|
|
37
|
-
or
|
|
38
|
-
or
|
|
39
|
-
or
|
|
47
|
+
selected_model == "claude-opus-4-6"
|
|
48
|
+
or selected_model == "claude-opus-4-5"
|
|
49
|
+
or selected_model == "claude-opus-4-1"
|
|
50
|
+
or selected_model == "claude-opus-4-0"
|
|
51
|
+
or selected_model == "claude-sonnet-4-0"
|
|
52
|
+
or selected_model == "claude-3-7-sonnet-latest"
|
|
53
|
+
or selected_model == "claude-haiku-4-5"
|
|
54
|
+
or selected_model == "claude-sonnet-4-5"
|
|
55
|
+
or selected_model == "claude-3-5-sonnet-latest"
|
|
56
|
+
or selected_model == "claude-3-5-sonnet-20241022"
|
|
57
|
+
or selected_model == "claude-3-5-sonnet-20240620"
|
|
58
|
+
or selected_model == "claude-3-opus-latest"
|
|
59
|
+
or selected_model == "claude-3-opus-20240229"
|
|
60
|
+
or selected_model == "claude-3-sonnet-20240229"
|
|
61
|
+
or selected_model == "claude-3-haiku-20240307"
|
|
40
62
|
):
|
|
41
63
|
return 200_000
|
|
42
64
|
return None
|
|
43
65
|
|
|
44
66
|
def api_max_response_tokens(self):
|
|
67
|
+
if self.model == "claude-opus-4-6":
|
|
68
|
+
return 128_000
|
|
69
|
+
|
|
45
70
|
if (
|
|
46
71
|
self.model == "claude-opus-4-5"
|
|
47
72
|
or self.model == "claude-sonnet-4-0"
|
|
@@ -61,7 +86,7 @@ class AnthropicMixin:
|
|
|
61
86
|
if (
|
|
62
87
|
self.model == "claude-3-5-sonnet-20240620"
|
|
63
88
|
or self.model == "claude-3-opus-latest"
|
|
64
|
-
or self.model == "
|
|
89
|
+
or self.model == "claude-3-opus-20240229"
|
|
65
90
|
or self.model == "claude-3-sonnet-20240229"
|
|
66
91
|
or self.model == "claude-3-haiku-20240307"
|
|
67
92
|
):
|
symai/strategy.py
CHANGED
|
@@ -3,9 +3,11 @@ import logging
|
|
|
3
3
|
import time
|
|
4
4
|
from collections import defaultdict
|
|
5
5
|
from collections.abc import Callable
|
|
6
|
+
from contextlib import nullcontext
|
|
6
7
|
from typing import Any, ClassVar
|
|
7
8
|
|
|
8
9
|
import numpy as np
|
|
10
|
+
from anthropic import transform_schema
|
|
9
11
|
from beartype import beartype
|
|
10
12
|
from loguru import logger
|
|
11
13
|
from pydantic import BaseModel, ValidationError
|
|
@@ -14,7 +16,9 @@ from rich.markup import escape
|
|
|
14
16
|
from rich.panel import Panel
|
|
15
17
|
from rich.table import Table
|
|
16
18
|
|
|
19
|
+
from .backend.settings import SYMAI_CONFIG
|
|
17
20
|
from .components import Function
|
|
21
|
+
from .context import CURRENT_ENGINE_VAR
|
|
18
22
|
from .models import LLMDataModel, TypeValidationError, build_dynamic_llm_datamodel
|
|
19
23
|
from .symbol import Expression
|
|
20
24
|
from .utils import UserMessage
|
|
@@ -182,6 +186,7 @@ class TypeValidationFunction(ValidationFunction):
|
|
|
182
186
|
self.output_data_model = None
|
|
183
187
|
self.accumulate_errors = accumulate_errors
|
|
184
188
|
self.verbose = verbose
|
|
189
|
+
self.dynamic_engine = self.retry_params.get("dynamic_engine")
|
|
185
190
|
|
|
186
191
|
def register_expected_data_model(
|
|
187
192
|
self, data_model: LLMDataModel, attach_to: str, override: bool = False
|
|
@@ -361,7 +366,8 @@ Important guidelines:
|
|
|
361
366
|
if self.verbose:
|
|
362
367
|
self.display_panel(self.remedy_function.dynamic_context, title="New Context")
|
|
363
368
|
|
|
364
|
-
|
|
369
|
+
with (self.dynamic_engine if self.dynamic_engine is not None else nullcontext()):
|
|
370
|
+
json_str = self.remedy_function(seed=remedy_seeds[attempt_index], **kwargs).value
|
|
365
371
|
logger.info("Applied remedy function with updated context!")
|
|
366
372
|
return json_str
|
|
367
373
|
|
|
@@ -418,17 +424,51 @@ Important guidelines:
|
|
|
418
424
|
violations=errors,
|
|
419
425
|
)
|
|
420
426
|
|
|
427
|
+
def _build_response_format(self, kwargs: dict) -> dict:
|
|
428
|
+
response_format = kwargs.get("response_format")
|
|
429
|
+
if response_format is None:
|
|
430
|
+
response_format = {"type": "json_object"}
|
|
431
|
+
# Resolve the effective model from the most specific runtime source first.
|
|
432
|
+
# This keeps contracts working when engines are swapped dynamically and no static
|
|
433
|
+
# model is registered in config.
|
|
434
|
+
selected_model = kwargs.get("model")
|
|
435
|
+
if selected_model is None:
|
|
436
|
+
active_engine = CURRENT_ENGINE_VAR.get()
|
|
437
|
+
if active_engine is not None:
|
|
438
|
+
selected_model = getattr(active_engine, "model", None)
|
|
439
|
+
if selected_model is None:
|
|
440
|
+
selected_model = SYMAI_CONFIG.get("NEUROSYMBOLIC_ENGINE_MODEL", "")
|
|
441
|
+
|
|
442
|
+
if "claude-opus" not in selected_model:
|
|
443
|
+
return response_format
|
|
444
|
+
|
|
445
|
+
if response_format.get("type") != "json_object":
|
|
446
|
+
return response_format
|
|
447
|
+
|
|
448
|
+
# At the contract layer, `json_object` stays the generic trigger for structured output.
|
|
449
|
+
# Opus requires a concrete JSON Schema payload, so we derive it from the output model.
|
|
450
|
+
return {"type": "json_schema", "schema": transform_schema(self.output_data_model)}
|
|
451
|
+
|
|
421
452
|
def forward(
|
|
422
453
|
self, prompt: str, f_semantic_conditions: list[Callable] | None = None, *args, **kwargs
|
|
423
454
|
):
|
|
424
455
|
self._ensure_output_model()
|
|
425
456
|
validation_context = kwargs.pop("validation_context", {})
|
|
426
|
-
kwargs["response_format"] =
|
|
457
|
+
kwargs["response_format"] = self._build_response_format(kwargs)
|
|
427
458
|
logger.info("Initializing validation…")
|
|
428
459
|
self._display_verbose_panels(prompt)
|
|
429
460
|
|
|
430
461
|
context = self.zero_shot_prompt(prompt=prompt)
|
|
431
|
-
|
|
462
|
+
|
|
463
|
+
# Zero-shot attempt; fall back to dynamic engine on failure
|
|
464
|
+
try:
|
|
465
|
+
json_str = super().forward(context, *args, **kwargs).value
|
|
466
|
+
except Exception:
|
|
467
|
+
if self.dynamic_engine is None:
|
|
468
|
+
raise
|
|
469
|
+
logger.info("Zero-shot failed; retrying with dynamic engine…")
|
|
470
|
+
with self.dynamic_engine:
|
|
471
|
+
json_str = super().forward(context, *args, **kwargs).value
|
|
432
472
|
|
|
433
473
|
remedy_seeds = self.prepare_seeds(self.retry_params["tries"] + 1, **kwargs)
|
|
434
474
|
logger.info(f"Prepared {len(remedy_seeds)} remedy seeds for validation attempts…")
|
|
@@ -468,7 +508,7 @@ class contract:
|
|
|
468
508
|
post_remedy: bool = False,
|
|
469
509
|
accumulate_errors: bool = False,
|
|
470
510
|
verbose: bool = False,
|
|
471
|
-
remedy_retry_params: dict[str,
|
|
511
|
+
remedy_retry_params: dict[str, Any] = _default_remedy_retry_params,
|
|
472
512
|
):
|
|
473
513
|
"""
|
|
474
514
|
A contract class decorator inspired by DbC principles. It ensures that the function's input and output
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: symbolicai
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.7.1
|
|
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
|
|
@@ -52,7 +52,7 @@ Requires-Dist: tqdm>=4.66.3
|
|
|
52
52
|
Requires-Dist: python-box>=7.1.1
|
|
53
53
|
Requires-Dist: pandas>=2.2.2
|
|
54
54
|
Requires-Dist: scikit-learn>=1.5.0
|
|
55
|
-
Requires-Dist: torch
|
|
55
|
+
Requires-Dist: torch<2.10.0
|
|
56
56
|
Requires-Dist: torchaudio>=2.2.2
|
|
57
57
|
Requires-Dist: torchvision>=0.17.2
|
|
58
58
|
Requires-Dist: PyYAML>=6.0.1
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
symai/TERMS_OF_SERVICE.md,sha256=HN42UXVI_wAVDHjMShzy_k7xAsbjXaATNeMKcIte_eg,91409
|
|
2
|
-
symai/__init__.py,sha256=
|
|
2
|
+
symai/__init__.py,sha256=dqtdpuxerRJnEAvdbiZOoLyIpWe-yiVDWB4V6HXYJIU,15612
|
|
3
3
|
symai/chat.py,sha256=DCEbmZ96wv-eitAVt6-oF6PT3JM3cT59Iy3r2Hucd_M,14100
|
|
4
4
|
symai/components.py,sha256=SsGl8Cs-AQcPZjFyTv4IB3ATz8evRiVwTBH7k2umVSo,75391
|
|
5
5
|
symai/constraints.py,sha256=ljjB9p0qK4DrDl_u5G_Y-Y6WAH5ZHANIqLLxRtwcORs,1980
|
|
@@ -17,7 +17,7 @@ symai/processor.py,sha256=FsR7rIjm6NlestgX3dVOLtvQJcGNpJaogtPyi3I1PR4,1648
|
|
|
17
17
|
symai/prompts.py,sha256=cF3FauHfl0ZiBW-6DEE50wx_elNN7PBTbbmlVCr7nzQ,93743
|
|
18
18
|
symai/shell.py,sha256=iEQ-dGGPSm7ZDaaC3I7RwnzgA8X9yHBzPD0TouBk3AU,6487
|
|
19
19
|
symai/shellsv.py,sha256=rdKwBRqTT0k81LgMi0qshD4z8ucYL5iDCN4MOCgvEa8,39581
|
|
20
|
-
symai/strategy.py,sha256=
|
|
20
|
+
symai/strategy.py,sha256=8-BlvTQ-o1XlVbHiu5LE7wtYRyqwAJPv3qgN6UHnuN0,46932
|
|
21
21
|
symai/symbol.py,sha256=s5CYwP5SGcRUzZ7TlakZFpKBX_Q0mwPQKRbv4pC3sxM,40443
|
|
22
22
|
symai/symsh.md,sha256=QwY_-fX0Ge7Aazul0xde2DuF2FZLw_elxrkXR3kuKDQ,1245
|
|
23
23
|
symai/utils.py,sha256=m4iQzxclkPAUSDderTO_OK2fKznJ69pLfbBcTYq4p70,10824
|
|
@@ -39,9 +39,9 @@ symai/backend/engines/index/engine_qdrant.py,sha256=U9p0kzYvHE4DjFgxnvnG_8xfEoP_
|
|
|
39
39
|
symai/backend/engines/index/engine_vectordb.py,sha256=xXU8QaC2BX9O4dDjDCVYgWO4PxQMpmNlhtal6UVtV0o,8541
|
|
40
40
|
symai/backend/engines/lean/engine_lean4.py,sha256=ln5nbQn5szq8nRulbREPLCPQ5bwjM_A5XAGMkfzPdT8,10102
|
|
41
41
|
symai/backend/engines/neurosymbolic/__init__.py,sha256=zEjkuxtzBQdxx-b1aXzooCatA43Rrlo9jAyZZfRYNzM,2608
|
|
42
|
-
symai/backend/engines/neurosymbolic/engine_anthropic_claudeX_chat.py,sha256=
|
|
43
|
-
symai/backend/engines/neurosymbolic/engine_anthropic_claudeX_reasoning.py,sha256=
|
|
44
|
-
symai/backend/engines/neurosymbolic/engine_cerebras.py,sha256=
|
|
42
|
+
symai/backend/engines/neurosymbolic/engine_anthropic_claudeX_chat.py,sha256=Y5AOCmJgL51QgrVbezSd0pe8GgMYNCuWWDIDES1_eaM,21133
|
|
43
|
+
symai/backend/engines/neurosymbolic/engine_anthropic_claudeX_reasoning.py,sha256=6jG0G9hUKDcT03_eIbwWrrlAGHWS3Qgadmfb_vLTg9E,24613
|
|
44
|
+
symai/backend/engines/neurosymbolic/engine_cerebras.py,sha256=zFnKKd_9iEL2S-4hKFMG4vPAK-fkSOkaUMJlZ5EvoF4,13387
|
|
45
45
|
symai/backend/engines/neurosymbolic/engine_deepseekX_reasoning.py,sha256=_k0hy5dUxkbNP9vgF4R780A6THtjfcCJ_xUnkPvPRNw,9299
|
|
46
46
|
symai/backend/engines/neurosymbolic/engine_google_geminiX_reasoning.py,sha256=pvsUNtWYwvFXt8EEy5ed0V4xE4EE0IZ4f7Uw5jV3OF0,28333
|
|
47
47
|
symai/backend/engines/neurosymbolic/engine_groq.py,sha256=pliezi4X1LP-XdnJirjlI2nCXC8S2pex8fZalNlkKWw,13122
|
|
@@ -66,7 +66,7 @@ symai/backend/engines/text_to_speech/engine_openai.py,sha256=AtY0mDvIM_yZQ6AgYNX
|
|
|
66
66
|
symai/backend/engines/text_vision/engine_clip.py,sha256=hU9vsHtKPpQYEoESyjuGXOzMhUNhvspYMCNkCAqn2x8,3648
|
|
67
67
|
symai/backend/engines/userinput/engine_console.py,sha256=fDO6PRQI3NYZ_nHVXDFIsS9cFDRv3aTOfv8h5a360jc,743
|
|
68
68
|
symai/backend/mixin/__init__.py,sha256=LMeNSxy0Uwn3CSSImgGcRal7JpZqIxP9I1lw0C4sLJ0,1539
|
|
69
|
-
symai/backend/mixin/anthropic.py,sha256=
|
|
69
|
+
symai/backend/mixin/anthropic.py,sha256=78b9uFM2yosauHD-HAvIEhXtsD596ZuF6s2PQkMYsOI,3372
|
|
70
70
|
symai/backend/mixin/cerebras.py,sha256=MEc9vQ6G4KWWrt0NFjdt2y0rojhtBidwa_n4M8Z5EKI,215
|
|
71
71
|
symai/backend/mixin/deepseek.py,sha256=7TnyqXQb2t6r6-hzOClPzxfO2d7TShYC989Lmn_YTzM,414
|
|
72
72
|
symai/backend/mixin/google.py,sha256=N1xxrrTcQkcKJtdPbRorev6dfJ1F65I5XavrGR06GN4,494
|
|
@@ -143,9 +143,9 @@ symai/server/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
|
143
143
|
symai/server/huggingface_server.py,sha256=wSAVqFiKQsCu5UB2YYVpxJBhJ7GgQBBfePxNi265yP8,9039
|
|
144
144
|
symai/server/llama_cpp_server.py,sha256=-WPTNB2cbnwtnpES4AtPM__MCasDKl83jr94JGS9tmI,2144
|
|
145
145
|
symai/server/qdrant_server.py,sha256=l4r4rz29c7cO1dapXO0LQ4sHW4WF44keuz7j8v5azMc,9854
|
|
146
|
-
symbolicai-1.
|
|
147
|
-
symbolicai-1.
|
|
148
|
-
symbolicai-1.
|
|
149
|
-
symbolicai-1.
|
|
150
|
-
symbolicai-1.
|
|
151
|
-
symbolicai-1.
|
|
146
|
+
symbolicai-1.7.1.dist-info/licenses/LICENSE,sha256=9vRFudlJ1ghVfra5lcCUIYQCqnZSYcBLjLHbGRsrQCs,1505
|
|
147
|
+
symbolicai-1.7.1.dist-info/METADATA,sha256=PmkaRcYWBMfhFKQcP3xe2Zg2Hsaqbr2zd7lJPxiTp_E,22946
|
|
148
|
+
symbolicai-1.7.1.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
149
|
+
symbolicai-1.7.1.dist-info/entry_points.txt,sha256=JV5sdydIfUZdDF6QBEQHiZHod6XNPjCjpWQrXh7gTAw,261
|
|
150
|
+
symbolicai-1.7.1.dist-info/top_level.txt,sha256=bOoIDfpDIvCQtQgXcwVKJvxAKwsxpxo2IL4z92rNJjw,6
|
|
151
|
+
symbolicai-1.7.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|