abstractcore 2.11.2__py3-none-any.whl → 2.11.4__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.
@@ -510,10 +510,15 @@ Examples:
510
510
  print("❌ Error: --parallel-searches must be between 1 and 20")
511
511
  sys.exit(1)
512
512
 
513
- # Configure logging level
514
- if args.verbose:
515
- import logging
516
- logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
513
+ # Configure logging level (default: ERROR-only).
514
+ import logging
515
+
516
+ log_level = logging.ERROR
517
+ if args.debug:
518
+ log_level = logging.DEBUG
519
+ elif args.verbose:
520
+ log_level = logging.INFO
521
+ logging.basicConfig(level=log_level, format="%(asctime)s - %(levelname)s - %(message)s")
517
522
 
518
523
  try:
519
524
  # Initialize LLM
@@ -441,6 +441,107 @@
441
441
  "video_support": false,
442
442
  "video_input_mode": "frames"
443
443
  },
444
+ "cogito:3b": {
445
+ "max_output_tokens": 4096,
446
+ "tool_support": "native",
447
+ "structured_output": "native",
448
+ "parallel_tools": false,
449
+ "vision_support": false,
450
+ "audio_support": false,
451
+ "notes": "Cogito v1 preview (Llama-based) 3B; 128k context; tool calling capable. Max output tokens not specified in model card (conservative 2048 default).",
452
+ "source": "DeepCogito HF model card + Ollama library",
453
+ "canonical_name": "cogito:3b",
454
+ "aliases": [
455
+ "cogito",
456
+ "cogito:3b-v1-preview-llama-q8_0",
457
+ "cogito-v1-preview-llama-3B",
458
+ "deepcogito/cogito-v1-preview-llama-3B"
459
+ ],
460
+ "max_tokens": 128000,
461
+ "video_support": false,
462
+ "max_tools": -1,
463
+ "video_input_mode": "none"
464
+ },
465
+ "cogito:8b": {
466
+ "max_output_tokens": 4096,
467
+ "tool_support": "native",
468
+ "structured_output": "native",
469
+ "parallel_tools": false,
470
+ "vision_support": false,
471
+ "audio_support": false,
472
+ "notes": "Cogito v1 preview (Llama-based) 8B; 128k context; hybrid reasoning model with standard and extended thinking modes; optimized for coding, STEM, instruction following, and tool calling.",
473
+ "source": "DeepCogito HF model card + Ollama library",
474
+ "canonical_name": "cogito:8b",
475
+ "aliases": [
476
+ "cogito:8b-v1-preview-llama",
477
+ "cogito-v1-preview-llama-8B",
478
+ "deepcogito/cogito-v1-preview-llama-8B"
479
+ ],
480
+ "max_tokens": 128000,
481
+ "video_support": false,
482
+ "max_tools": -1,
483
+ "video_input_mode": "none"
484
+ },
485
+ "cogito:14b": {
486
+ "max_output_tokens": 4096,
487
+ "tool_support": "native",
488
+ "structured_output": "native",
489
+ "parallel_tools": false,
490
+ "vision_support": false,
491
+ "audio_support": false,
492
+ "notes": "Cogito v1 preview (Qwen2-based) 14B; 128k context; hybrid reasoning model with standard and extended thinking modes; optimized for coding, STEM, instruction following, and tool calling.",
493
+ "source": "DeepCogito HF model card + Ollama library",
494
+ "canonical_name": "cogito:14b",
495
+ "aliases": [
496
+ "cogito:14b-v1-preview-qwen",
497
+ "cogito-v1-preview-qwen-14B",
498
+ "deepcogito/cogito-v1-preview-qwen-14B"
499
+ ],
500
+ "max_tokens": 128000,
501
+ "video_support": false,
502
+ "max_tools": -1,
503
+ "video_input_mode": "none"
504
+ },
505
+ "cogito:32b": {
506
+ "max_output_tokens": 4096,
507
+ "tool_support": "native",
508
+ "structured_output": "native",
509
+ "parallel_tools": false,
510
+ "vision_support": false,
511
+ "audio_support": false,
512
+ "notes": "Cogito v1 preview (Qwen-based) 32B; 128k context; hybrid reasoning model with standard and extended thinking modes; optimized for coding, STEM, instruction following, and tool calling.",
513
+ "source": "DeepCogito HF model card + Ollama library",
514
+ "canonical_name": "cogito:32b",
515
+ "aliases": [
516
+ "cogito:32b-v1-preview-qwen",
517
+ "cogito-v1-preview-qwen-32B",
518
+ "deepcogito/cogito-v1-preview-qwen-32B"
519
+ ],
520
+ "max_tokens": 128000,
521
+ "video_support": false,
522
+ "max_tools": -1,
523
+ "video_input_mode": "none"
524
+ },
525
+ "cogito:70b": {
526
+ "max_output_tokens": 4096,
527
+ "tool_support": "native",
528
+ "structured_output": "native",
529
+ "parallel_tools": false,
530
+ "vision_support": false,
531
+ "audio_support": false,
532
+ "notes": "Cogito v1 preview (Llama 3.1-based) 70B; 128k context; hybrid reasoning model with standard and extended thinking modes; optimized for coding, STEM, instruction following, and tool calling.",
533
+ "source": "DeepCogito HF model card + Ollama library",
534
+ "canonical_name": "cogito:70b",
535
+ "aliases": [
536
+ "cogito:70b-v1-preview-llama",
537
+ "cogito-v1-preview-llama-70B",
538
+ "deepcogito/cogito-v1-preview-llama-70B"
539
+ ],
540
+ "max_tokens": 128000,
541
+ "video_support": false,
542
+ "max_tools": -1,
543
+ "video_input_mode": "none"
544
+ },
444
545
  "llama-3.2-1b": {
445
546
  "max_output_tokens": 2048,
446
547
  "tool_support": "native",
@@ -531,6 +531,26 @@ def interactive_configure():
531
531
  config_manager.set_api_key(provider, key)
532
532
  print(f"✅ Set {provider} API key")
533
533
 
534
+ # Ask about console log verbosity
535
+ print("\n4. Console Logging Verbosity")
536
+ print("Choose console verbosity level:")
537
+ print(" none | error | warning | info | debug")
538
+ level = input("Console log level [info]: ").strip().lower()
539
+ if not level:
540
+ level = "info"
541
+ level_map = {
542
+ "none": "NONE",
543
+ "error": "ERROR",
544
+ "warning": "WARNING",
545
+ "info": "INFO",
546
+ "debug": "DEBUG",
547
+ }
548
+ if level in level_map:
549
+ config_manager.set_console_log_level(level_map[level])
550
+ print(f"✅ Set console log level to: {level_map[level]}")
551
+ else:
552
+ print("⚠️ Invalid level; keeping existing console log level.")
553
+
534
554
  print("\n✅ Configuration complete! Run 'abstractcore --status' to see current settings.")
535
555
 
536
556
  def handle_commands(args) -> bool:
@@ -851,5 +871,5 @@ DOCUMENTATION: docs/centralized-config.md
851
871
 
852
872
 
853
873
  if __name__ == "__main__":
854
- logging.basicConfig(level=logging.INFO)
874
+ logging.basicConfig(level=logging.ERROR)
855
875
  sys.exit(main())
@@ -157,7 +157,7 @@ class CacheConfig:
157
157
  @dataclass
158
158
  class LoggingConfig:
159
159
  """Logging configuration settings."""
160
- console_level: str = "WARNING"
160
+ console_level: str = "ERROR"
161
161
  file_level: str = "DEBUG"
162
162
  file_logging_enabled: bool = False
163
163
  log_base_dir: Optional[str] = None
@@ -451,7 +451,7 @@ def main(argv: Optional[List[str]] = None) -> None:
451
451
  app = create_app(provider_name=cfg.provider, model=cfg.model)
452
452
  import uvicorn
453
453
 
454
- uvicorn.run(app, host=cfg.host, port=cfg.port)
454
+ uvicorn.run(app, host=cfg.host, port=cfg.port, log_level="error")
455
455
 
456
456
 
457
457
  if __name__ == "__main__": # pragma: no cover
@@ -19,21 +19,23 @@ class LMStudioProvider(OpenAICompatibleProvider):
19
19
  API_KEY_ENV_VAR = None
20
20
  DEFAULT_BASE_URL = "http://localhost:1234/v1"
21
21
 
22
+ _TIMEOUT_UNSET = object()
23
+
22
24
  def __init__(
23
25
  self,
24
26
  model: str = "local-model",
25
27
  base_url: Optional[str] = None,
26
- timeout: Optional[float] = None,
28
+ timeout: Any = _TIMEOUT_UNSET,
27
29
  **kwargs: Any,
28
30
  ):
29
- # ADR-0027: Local LM Studio calls should default to no client-side timeout.
31
+ # ADR-0027: avoid silent low timeouts; timeouts must be explicit and attributable.
30
32
  #
31
- # We intentionally treat "timeout omitted" as "unlimited" for this provider, rather
32
- # than inheriting the global `abstractcore` default timeout (which may be tuned for
33
- # remote providers). Operators can still override via:
34
- # - explicit `timeout=...` when constructing the provider, or
35
- # - runtime provider config (ConfigurationManager.configure_provider('lmstudio', timeout=...)).
36
- if "timeout" in kwargs:
37
- timeout = kwargs.pop("timeout")
38
-
39
- super().__init__(model=model, base_url=base_url, timeout=timeout, **kwargs)
33
+ # Semantics:
34
+ # - If the caller explicitly provides `timeout` (including `None`), we forward it.
35
+ # - If the caller omits `timeout`, BaseProvider will use AbstractCore config
36
+ # `timeouts.default_timeout` (see `~/.abstractcore/config/abstractcore.json`).
37
+ super_kwargs = dict(kwargs)
38
+ if timeout is not self._TIMEOUT_UNSET:
39
+ super_kwargs["timeout"] = timeout
40
+
41
+ super().__init__(model=model, base_url=base_url, **super_kwargs)
@@ -62,25 +62,27 @@ from ..tools.syntax_rewriter import (
62
62
  # Configuration
63
63
  # ============================================================================
64
64
 
65
- # Initialize with default logging configuration (can be overridden later)
65
+ # Initialize with default logging configuration (can be overridden later).
66
+ #
67
+ # IMPORTANT: default console verbosity is controlled by AbstractCore's centralized logging defaults
68
+ # (and env overrides like ABSTRACTCORE_CONSOLE_LOG_LEVEL). The server must not force INFO-level
69
+ # console logs on startup.
66
70
  debug_mode = os.getenv("ABSTRACTCORE_DEBUG", "false").lower() == "true"
67
71
 
68
- # Initial logging setup (will be reconfigured if --debug is used)
69
- # Check environment variable for debug mode
70
- initial_console_level = logging.DEBUG if debug_mode else logging.INFO
71
- configure_logging(
72
- console_level=initial_console_level,
73
- file_level=logging.DEBUG,
74
- log_dir="logs",
75
- verbatim_enabled=True,
76
- console_json=False,
77
- file_json=True
78
- )
72
+ if debug_mode:
73
+ configure_logging(
74
+ console_level=logging.DEBUG,
75
+ file_level=logging.DEBUG,
76
+ log_dir="logs",
77
+ verbatim_enabled=True,
78
+ console_json=False,
79
+ file_json=True,
80
+ )
79
81
 
80
82
  # Get initial logger
81
83
  logger = get_logger("server")
82
84
 
83
- # Log initial startup with debug mode status
85
+ # Log initial startup with debug mode status (may be suppressed by console level).
84
86
  logger.info("🚀 AbstractCore Server Initializing", version=__version__, debug_mode=debug_mode)
85
87
 
86
88
  def reconfigure_for_debug():
@@ -2855,7 +2857,7 @@ def convert_to_openai_response(
2855
2857
  def run_server(host: str = "0.0.0.0", port: int = 8000):
2856
2858
  """Run the server"""
2857
2859
  import uvicorn
2858
- uvicorn.run(app, host=host, port=port)
2860
+ uvicorn.run(app, host=host, port=port, log_level="error")
2859
2861
 
2860
2862
  # ============================================================================
2861
2863
  # Server Runner Function
@@ -2924,7 +2926,7 @@ Debug Mode:
2924
2926
  "app": app,
2925
2927
  "host": args.host,
2926
2928
  "port": args.port,
2927
- "log_level": "debug" if debug_mode else "info"
2929
+ "log_level": "debug" if debug_mode else "error",
2928
2930
  }
2929
2931
 
2930
2932
  # In debug mode, enable more detailed uvicorn logging
@@ -57,7 +57,7 @@ def _get_config_defaults():
57
57
  "NONE": logging.CRITICAL + 10 # Higher than CRITICAL to effectively disable logging
58
58
  }
59
59
 
60
- console_level = level_map.get(logging_config.console_level, logging.WARNING)
60
+ console_level = level_map.get(logging_config.console_level, logging.ERROR)
61
61
  file_level = level_map.get(logging_config.file_level, logging.DEBUG)
62
62
 
63
63
  # Use log_base_dir if file logging enabled
@@ -66,6 +66,27 @@ def _get_config_defaults():
66
66
  # Expand user home directory
67
67
  log_dir = str(Path(logging_config.log_base_dir).expanduser())
68
68
 
69
+ # Environment overrides (optional)
70
+ env_console = os.getenv("ABSTRACTCORE_CONSOLE_LOG_LEVEL")
71
+ if isinstance(env_console, str) and env_console.strip():
72
+ env_level = env_console.strip().upper()
73
+ if env_level == "NONE":
74
+ console_level = None
75
+ else:
76
+ console_level = level_map.get(env_level, console_level)
77
+
78
+ env_file = os.getenv("ABSTRACTCORE_FILE_LOG_LEVEL")
79
+ if isinstance(env_file, str) and env_file.strip():
80
+ env_level = env_file.strip().upper()
81
+ if env_level == "NONE":
82
+ file_level = None
83
+ else:
84
+ file_level = level_map.get(env_level, file_level)
85
+
86
+ env_log_dir = os.getenv("ABSTRACTCORE_LOG_BASE_DIR")
87
+ if isinstance(env_log_dir, str) and env_log_dir.strip():
88
+ log_dir = str(Path(env_log_dir.strip()).expanduser())
89
+
69
90
  return {
70
91
  'console_level': console_level,
71
92
  'file_level': file_level,
@@ -77,7 +98,7 @@ def _get_config_defaults():
77
98
  except Exception:
78
99
  # Fallback to hardcoded defaults if config unavailable
79
100
  return {
80
- 'console_level': logging.WARNING,
101
+ 'console_level': logging.ERROR,
81
102
  'file_level': logging.DEBUG,
82
103
  'log_dir': None,
83
104
  'verbatim_enabled': True,
@@ -89,7 +110,7 @@ def _get_config_defaults():
89
110
  LOG_LEVEL_COLORS = {
90
111
  'DEBUG': Fore.CYAN + Style.DIM, # Cyan, dimmed (less prominent)
91
112
  'INFO': Fore.GREEN, # Green (informational, good)
92
- 'WARNING': Fore.YELLOW + Style.BRIGHT, # Bright yellow (attention)
113
+ 'WARNING': "\033[38;5;214m" + Style.BRIGHT, # Orange (attention)
93
114
  'ERROR': Fore.RED, # Red (error)
94
115
  'CRITICAL': Fore.RED + Style.BRIGHT # Bright red (critical)
95
116
  }
@@ -215,7 +236,7 @@ class LogConfig:
215
236
  root_logger.handlers.clear()
216
237
 
217
238
  # Console handler
218
- if self.console_level is not None:
239
+ if self.console_level is not None and self.console_level < (logging.CRITICAL + 10):
219
240
  console_handler = logging.StreamHandler(sys.stdout)
220
241
  console_handler.setLevel(self.console_level)
221
242
 
@@ -260,8 +281,8 @@ class LogConfig:
260
281
  if effective_levels:
261
282
  root_logger.setLevel(min(effective_levels))
262
283
  else:
263
- # No handlers enabled, set to WARNING as a safe default
264
- root_logger.setLevel(logging.WARNING)
284
+ # No handlers enabled, set to ERROR as a safe default
285
+ root_logger.setLevel(logging.ERROR)
265
286
 
266
287
 
267
288
  # Global config instance
@@ -493,7 +514,7 @@ def get_logger(name: str) -> StructuredLogger:
493
514
 
494
515
 
495
516
  def configure_logging(
496
- console_level: Optional[int] = logging.WARNING,
517
+ console_level: Optional[int] = logging.ERROR,
497
518
  file_level: Optional[int] = logging.DEBUG,
498
519
  log_dir: Optional[str] = None,
499
520
  verbatim_enabled: bool = True,
@@ -577,4 +598,4 @@ def suppress_stdout_stderr():
577
598
  yield
578
599
  finally:
579
600
  sys.stdout = old_stdout
580
- sys.stderr = old_stderr
601
+ sys.stderr = old_stderr
@@ -10,4 +10,4 @@ including when the package is installed from PyPI where pyproject.toml is not av
10
10
  """
11
11
 
12
12
  # Package version - update this when releasing new versions
13
- __version__ = "2.11.2"
13
+ __version__ = "2.11.4"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: abstractcore
3
- Version: 2.11.2
3
+ Version: 2.11.4
4
4
  Summary: Unified interface to all LLM providers with essential infrastructure for tool calling, streaming, and model management
5
5
  Author-email: Laurent-Philippe Albou <contact@abstractcore.ai>
6
6
  Maintainer-email: Laurent-Philippe Albou <contact@abstractcore.ai>
@@ -3,7 +3,7 @@ abstractcore/download.py,sha256=f75PqPibwVw_XQpIjgBh-f-ZK9D82wXUBMczIkd0N7o,8686
3
3
  abstractcore/apps/__init__.py,sha256=sgNOv3lYyOWNBC-w6GnRN6aILGCbdkQtNcuQdJz5ghE,31
4
4
  abstractcore/apps/__main__.py,sha256=fV9cGU99K4lGRsPNOLkh8qrDjH3JtMEWNlBiZrvI5Kk,1974
5
5
  abstractcore/apps/app_config_utils.py,sha256=5GIvXnD996LFIV3-BpfkqII6UqYlStm7ZCgmqDEN8dc,890
6
- abstractcore/apps/deepsearch.py,sha256=UlmuBS9T4yNsz0V_iY08GNNDTstsI5OJNNV6c8CU6AE,23191
6
+ abstractcore/apps/deepsearch.py,sha256=DMK1MuVcCEuS0UBsWaDS3LtKa1UDKqupz-ENHg5EPeg,23322
7
7
  abstractcore/apps/extractor.py,sha256=QMxSqEYERQOvs1ShAblF-6ufKiDbKOzWBqeCNhQgqdQ,20116
8
8
  abstractcore/apps/intent.py,sha256=6pgd9bUFidqa0I-lEnHXRcJGgUcAFpn8_b1do98wGz4,23722
9
9
  abstractcore/apps/judge.py,sha256=iHnicOo2XAvep1E1acmntYNGXSzZ4gDWPEQm-6mESMc,24880
@@ -13,7 +13,7 @@ abstractcore/architectures/detection.py,sha256=iqS2cHleo-yKlqsVx2QqE806oRYhuntJb
13
13
  abstractcore/architectures/enums.py,sha256=9vIv2vDBEKhxwzwH9iaSAyf-iVj3p8y9loMeN_mYTJ8,3821
14
14
  abstractcore/architectures/response_postprocessing.py,sha256=FUv_caMzZ8n7mHMfwTPorvfQNuTNpeU9xu7dEzPvnPM,10990
15
15
  abstractcore/assets/architecture_formats.json,sha256=CZaF15Y6HEos2wzIdHB0vMX_HSsVtmx4zgJjkqtqDas,22814
16
- abstractcore/assets/model_capabilities.json,sha256=la3u9iuc8K5v7nc9SYtIr4jSkSiZw0rJI4bQmr84jw4,116634
16
+ abstractcore/assets/model_capabilities.json,sha256=1wIWz2uW75BIrNV3xnA004yarfUKSPEdyzaI204DQr0,120569
17
17
  abstractcore/assets/session_schema.json,sha256=hMCVrq3KSyVExrMGzuykf7bU-z6WyIVuEGU8du9_zUY,10570
18
18
  abstractcore/compression/__init__.py,sha256=v4NR_Rwn0-HV9wj3IYFKMHFrlB8zzKR1bzz5nLSBkAI,945
19
19
  abstractcore/compression/analytics.py,sha256=3orxJkjjMQE_6mID8_8C0sRQ4Gr2Pw7kQ-Iy0p7pIgM,16042
@@ -28,8 +28,8 @@ abstractcore/compression/quality.py,sha256=bq7YI_5ywHfPnWSu1MmBRnV5Nxz8KBJGFvnfQ
28
28
  abstractcore/compression/text_formatter.py,sha256=5RE6JrLkHvYoDQlsYJSoqfbwAa3caMr2i_DXog6ovZs,27328
29
29
  abstractcore/compression/vision_compressor.py,sha256=5Ox3w_ee7fgPRDOpSQcooEGtuBKpQoAmWjwpLE2hoNU,12773
30
30
  abstractcore/config/__init__.py,sha256=JQ4feacJV_brzf6qNnNPo5VbmXhdjIxH088jYLTp1ik,919
31
- abstractcore/config/main.py,sha256=BGjMUgHvHlkPp6K6EgyZwVKJqZxRCVgxF6UAvqjV3lI,36307
32
- abstractcore/config/manager.py,sha256=D4y3dqwdnSMiT7QBxYqNgL_y6f8PbjjIkftX5PMDgKc,32869
31
+ abstractcore/config/main.py,sha256=VW9PuKBnwd2FyhGG1_Hj0W-LqwYibYwhZrwPmYaIXYA,36991
32
+ abstractcore/config/manager.py,sha256=TTzwbgPoidaKlWxNtFwd2pT94XD7_PEpA9Yk0bGB-ZA,32867
33
33
  abstractcore/config/vision_config.py,sha256=JhoOUdHv1UtQNRje_f9D56wJYnZ6pQKLaL5WswxA9ZI,17919
34
34
  abstractcore/core/__init__.py,sha256=2h-86U4QkCQ4gzZ4iRusSTMlkODiUS6tKjZHiEXz6rM,684
35
35
  abstractcore/core/enums.py,sha256=BhkVnHC-X1_377JDmqd-2mnem9GdBLqixWlYzlP_FJU,695
@@ -42,7 +42,7 @@ abstractcore/embeddings/__init__.py,sha256=hR3xZyqcRm4c2pq1dIa5lxj_-Bk70Zad802JQ
42
42
  abstractcore/embeddings/manager.py,sha256=cd3mt4f8AU6wfdiqS_9j4qTjO9f9yElL3JHilm80iN8,52856
43
43
  abstractcore/embeddings/models.py,sha256=bsPAzL6gv57AVii8O15PT0kxfwRkOml3f3njJN4UDi4,4874
44
44
  abstractcore/endpoint/__init__.py,sha256=mCkW0iE5TgXjnCCOCVR_jVlhIugzcwubNXyZa7VJkcM,68
45
- abstractcore/endpoint/app.py,sha256=7je56YtfAa4BvURt84HcaikqtFjFt4TZddZwTv4K_iE,18228
45
+ abstractcore/endpoint/app.py,sha256=j_GN-8DoT4KwSKnHtICNDPwGc-iWL7AZafHjZVRafUw,18247
46
46
  abstractcore/events/__init__.py,sha256=9JLYgarpsMxJwTFPvuKF6YdqkNYI5cjNpHItw9dc3Uo,15886
47
47
  abstractcore/exceptions/__init__.py,sha256=mR2i8GvsWrD_dJDAHs8Kw2rTSEMfBxwT1e_RfdQlE_A,4750
48
48
  abstractcore/mcp/__init__.py,sha256=8OVtnoa-5m2qzOenXZyKfJBOq3XrzlpVjEZn_-7xReY,1020
@@ -84,7 +84,7 @@ abstractcore/providers/__init__.py,sha256=K5RKyTeDeANW-tArVgSS6ROj66DQuJeSYQNTbI
84
84
  abstractcore/providers/anthropic_provider.py,sha256=ViADZzD9lmOh6FfsqHmU6wBtnSWZ11YcByOtYTdoaL8,40671
85
85
  abstractcore/providers/base.py,sha256=Rgwi9ea9hKkKWQDrY0ep-1bL3TzxXqctkaGKxmzN5ys,161327
86
86
  abstractcore/providers/huggingface_provider.py,sha256=u4Zo_fhwCeSMosJ_8Tt7Zd3jc-1bjzcpJx9Gfj-7D0A,104010
87
- abstractcore/providers/lmstudio_provider.py,sha256=DOtYB-2UxpiN4wWUagZCptmR1S96LOhqDKgBfmSqNsM,1504
87
+ abstractcore/providers/lmstudio_provider.py,sha256=FGUW4rh0f0DEudQGvJmiRWtOyYncvsYtlgaqFKyuR2k,1447
88
88
  abstractcore/providers/mlx_provider.py,sha256=LhkmyeoruGYx2yOQYgaCgFirBGCWWb2GXG5yJHSiRlU,35500
89
89
  abstractcore/providers/model_capabilities.py,sha256=qACY1lU-txpP1UPPWpThKVG0tL7-0LVfKCMLCYRPXv8,12238
90
90
  abstractcore/providers/ollama_provider.py,sha256=guOxN_llLpWsu2BFoc-UuIKgBoQRTUtMtq3yoIebOAs,38857
@@ -95,7 +95,7 @@ abstractcore/providers/registry.py,sha256=BdGqCId5tJ-rUu-HnjWMejTGijJfvXv57jSDo0
95
95
  abstractcore/providers/streaming.py,sha256=QbLXAd8gIyBiILBB7Zce5YD6LhEROWEfZa7aUt_jYOM,43442
96
96
  abstractcore/providers/vllm_provider.py,sha256=5iUs7xd0Hhh_vV5rV8tkhy5x-vhkwIujIx0Ss62Vd9g,6099
97
97
  abstractcore/server/__init__.py,sha256=1DSAz_YhQtnKv7sNi5TMQV8GFujctDOabgvAdilQE0o,249
98
- abstractcore/server/app.py,sha256=U8eMLT0T0arzfaVoBdlhRnNMdo6VsIqZvdt_nJ2mDJw,118937
98
+ abstractcore/server/app.py,sha256=lDPrtrBKHFgKd44n_3wl8fTxxEpDPOA5IOdvdueXVr8,119082
99
99
  abstractcore/server/audio_endpoints.py,sha256=s59-bn3dXGlZ8KGnVCSKsJTDC3SnkwjRFL__StIbLoY,4858
100
100
  abstractcore/server/vision_endpoints.py,sha256=JELZ6ol0l244opon856WEcftsGMeR96ndID8HnZ98Eg,49490
101
101
  abstractcore/structured/__init__.py,sha256=VXRQHGcm-iaYnLOBPin2kyhvhhQA0kaGt_pcNDGsE_8,339
@@ -119,15 +119,15 @@ abstractcore/utils/cli.py,sha256=yWTexV6atxC7SiXcqSnCIo-wE2CXuvYYbqExiFYLWRY,116
119
119
  abstractcore/utils/jsonish.py,sha256=Tzg06yURj-SEyRscpexh6dClnBx6ece3mjs15eao0ts,2965
120
120
  abstractcore/utils/message_preprocessor.py,sha256=GdHkm6tmrgjm3PwHRSCjIsq1XLkbhy_vDEKEUE7OiKY,6028
121
121
  abstractcore/utils/self_fixes.py,sha256=1VYxPq-q7_DtNl39NbrzUmyHpkhb9Q2SdnXUj4c0DBc,5907
122
- abstractcore/utils/structured_logging.py,sha256=Vm-HviSa42G9DJCWmaEv4a0QG3NMsADD3ictLOs4En0,19952
122
+ abstractcore/utils/structured_logging.py,sha256=7Wa3h-nwa_yMZ6OvzC8Zmu3A2vktFvNA0i9WgqjBFEo,20894
123
123
  abstractcore/utils/token_utils.py,sha256=GyOpH-StlW7yjavmAAM2h9bqmI87ka0Z0Wmiytm-zWs,21275
124
124
  abstractcore/utils/trace_export.py,sha256=MD1DHDWltpewy62cYzz_OSPAA6edZbZq7_pZbvxz_H8,9279
125
125
  abstractcore/utils/truncation.py,sha256=WBozRfIhuTD2Vwcl1kWWdZkQFSzf8aVNvmcXnhZUBDU,924
126
- abstractcore/utils/version.py,sha256=DiSJwvs0Jvy0o9XaopGzu2Yumr2rabMn0IFXTXXjLdY,498
126
+ abstractcore/utils/version.py,sha256=h4IMgsSemA5eXhprssA9EiKII1UR6ws15lQxSrcgoi0,498
127
127
  abstractcore/utils/vlm_token_calculator.py,sha256=pdLsmNG0EejSsgwhkjbtyG8m9tQUcI0o2JXJA5H57qc,28345
128
- abstractcore-2.11.2.dist-info/licenses/LICENSE,sha256=PI2v_4HMvd6050uDD_4AY_8PzBnu2asa3RKbdDjowTA,1078
129
- abstractcore-2.11.2.dist-info/METADATA,sha256=7rcmeYVixKyCRq4Uq8jY_pTC7xTeruG2qtI7c2AYzwE,28509
130
- abstractcore-2.11.2.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
131
- abstractcore-2.11.2.dist-info/entry_points.txt,sha256=TBj4p14_I25LfnbU0oeFTGsQh538pVbp7EXoUNT1onI,713
132
- abstractcore-2.11.2.dist-info/top_level.txt,sha256=DiNHBI35SIawW3N9Z-z0y6cQYNbXd32pvBkW0RLfScs,13
133
- abstractcore-2.11.2.dist-info/RECORD,,
128
+ abstractcore-2.11.4.dist-info/licenses/LICENSE,sha256=PI2v_4HMvd6050uDD_4AY_8PzBnu2asa3RKbdDjowTA,1078
129
+ abstractcore-2.11.4.dist-info/METADATA,sha256=hI6Rlfl9NhE1hzQ4u9Ls6FoBTvJTnrmzuBQqPVrRn9o,28509
130
+ abstractcore-2.11.4.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
131
+ abstractcore-2.11.4.dist-info/entry_points.txt,sha256=TBj4p14_I25LfnbU0oeFTGsQh538pVbp7EXoUNT1onI,713
132
+ abstractcore-2.11.4.dist-info/top_level.txt,sha256=DiNHBI35SIawW3N9Z-z0y6cQYNbXd32pvBkW0RLfScs,13
133
+ abstractcore-2.11.4.dist-info/RECORD,,