abstractcore 2.34.0__tar.gz → 2.35.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 (376) hide show
  1. {abstractcore-2.34.0 → abstractcore-2.35.0}/PKG-INFO +26 -10
  2. {abstractcore-2.34.0 → abstractcore-2.35.0}/README.md +25 -9
  3. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/architectures/detection.py +47 -3
  4. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/assets/architecture_formats.json +56 -12
  5. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/assets/model_capabilities.json +6709 -3984
  6. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/capabilities/registry.py +17 -0
  7. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/capabilities/types.py +6 -0
  8. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/config/__init__.py +2 -1
  9. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/config/main.py +1 -41
  10. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/config/manager.py +59 -111
  11. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/config/provider_profiles.py +19 -4
  12. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/console/theme_sync.py +1 -1
  13. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/console/themes.py +2 -2
  14. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/core/bloc_kv.py +2 -2
  15. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/core/retry.py +25 -1
  16. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/exceptions/__init__.py +73 -0
  17. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/mcp/client.py +46 -15
  18. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/base.py +122 -20
  19. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/process_residency.py +10 -2
  20. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/speculation.py +29 -3
  21. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/server/app.py +37 -1
  22. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/server/audio_endpoints.py +9 -1
  23. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/tools/common_tools.py +27 -15
  24. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/tools/comms_tools.py +114 -10
  25. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/tools/core.py +101 -0
  26. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/tools/parser.py +37 -4
  27. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/tools/shell_tools.py +18 -2
  28. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/tools/telegram_tools.py +22 -0
  29. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/version.py +1 -1
  30. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore.egg-info/PKG-INFO +26 -10
  31. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore.egg-info/SOURCES.txt +1 -0
  32. abstractcore-2.35.0/tests/test_install_scripts.py +250 -0
  33. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_mcp_handshake.py +89 -0
  34. {abstractcore-2.34.0 → abstractcore-2.35.0}/LICENSE +0 -0
  35. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/__init__.py +0 -0
  36. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/apps/__init__.py +0 -0
  37. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/apps/__main__.py +0 -0
  38. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/apps/app_config_utils.py +0 -0
  39. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/apps/deepsearch.py +0 -0
  40. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/apps/extractor.py +0 -0
  41. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/apps/intent.py +0 -0
  42. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/apps/judge.py +0 -0
  43. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/apps/summarizer.py +0 -0
  44. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/architectures/__init__.py +0 -0
  45. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/architectures/enums.py +0 -0
  46. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/architectures/response_postprocessing.py +0 -0
  47. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/architectures/thinking_controls.py +0 -0
  48. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/assets/OCRA.ttf +0 -0
  49. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/assets/OCRB.ttf +0 -0
  50. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/assets/OCRBL.ttf +0 -0
  51. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/assets/README.md +0 -0
  52. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/assets/abstractframework_identity.json +0 -0
  53. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/assets/adapter_metadata.schema.json +0 -0
  54. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/assets/bloc-schema.jsonld +0 -0
  55. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/assets/llamacpp_known_architectures.json +0 -0
  56. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/assets/model_capabilities.schema.json +0 -0
  57. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/assets/model_downloads_catalog.json +0 -0
  58. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/assets/model_downloads_catalog.schema.json +0 -0
  59. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/assets/semantic_models.md +0 -0
  60. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/assets/session_schema.json +0 -0
  61. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/capabilities/__init__.py +0 -0
  62. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/capabilities/errors.py +0 -0
  63. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/capabilities/host.py +0 -0
  64. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/capabilities/music_selectors.py +0 -0
  65. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/capabilities/scene3d_selectors.py +0 -0
  66. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/capabilities/vision_catalog.py +0 -0
  67. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/comms/__init__.py +0 -0
  68. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/comms/email/__init__.py +0 -0
  69. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/comms/email/bodystructure.py +0 -0
  70. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/comms/email/client.py +0 -0
  71. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/comms/email/context.py +0 -0
  72. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/comms/email/discovery.py +0 -0
  73. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/comms/email/errors.py +0 -0
  74. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/comms/email/imap_codec.py +0 -0
  75. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/comms/email/legacy.py +0 -0
  76. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/comms/email/limits.py +0 -0
  77. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/comms/email/models.py +0 -0
  78. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/comms/email/oauth.py +0 -0
  79. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/comms/email/policy.py +0 -0
  80. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/comms/email/search.py +0 -0
  81. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/comms/email/store.py +0 -0
  82. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/comms/email/vault.py +0 -0
  83. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/compression/__init__.py +0 -0
  84. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/compression/analytics.py +0 -0
  85. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/compression/cache.py +0 -0
  86. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/compression/config.py +0 -0
  87. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/compression/exceptions.py +0 -0
  88. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/compression/glyph_processor.py +0 -0
  89. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/compression/optimizer.py +0 -0
  90. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/compression/orchestrator.py +0 -0
  91. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/compression/pil_text_renderer.py +0 -0
  92. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/compression/quality.py +0 -0
  93. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/compression/text_formatter.py +0 -0
  94. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/compression/vision_compressor.py +0 -0
  95. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/config/capability_defaults.py +0 -0
  96. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/config/email_cli.py +0 -0
  97. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/config/engines.py +0 -0
  98. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/config/host_jobs.py +0 -0
  99. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/config/model_catalog.py +0 -0
  100. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/config/model_contexts.py +0 -0
  101. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/config/model_materializer.py +0 -0
  102. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/config/model_verify.py +0 -0
  103. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/config/models_engines_cli.py +0 -0
  104. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/config/recommendations.py +0 -0
  105. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/config/route_engines.py +0 -0
  106. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/config/vision_config.py +0 -0
  107. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/console/__init__.py +0 -0
  108. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/console/web.py +0 -0
  109. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/core/__init__.py +0 -0
  110. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/core/bloc_metadata.py +0 -0
  111. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/core/cached_session.py +0 -0
  112. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/core/degeneration.py +0 -0
  113. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/core/endpoint_damping.py +0 -0
  114. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/core/enums.py +0 -0
  115. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/core/factory.py +0 -0
  116. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/core/file_blocs.py +0 -0
  117. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/core/file_boxes.py +0 -0
  118. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/core/generate_contract.py +0 -0
  119. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/core/interface.py +0 -0
  120. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/core/multimodal_generation.py +0 -0
  121. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/core/output_specs.py +0 -0
  122. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/core/session.py +0 -0
  123. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/core/types.py +0 -0
  124. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/decision/__init__.py +0 -0
  125. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/decision/backends/__init__.py +0 -0
  126. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/decision/backends/base.py +0 -0
  127. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/decision/backends/gguf.py +0 -0
  128. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/decision/backends/hf.py +0 -0
  129. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/decision/backends/logits.py +0 -0
  130. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/decision/backends/mlx.py +0 -0
  131. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/decision/convert.py +0 -0
  132. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/decision/encoding.py +0 -0
  133. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/decision/engines/__init__.py +0 -0
  134. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/decision/engines/base.py +0 -0
  135. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/decision/engines/labels.py +0 -0
  136. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/decision/engines/laya.py +0 -0
  137. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/decision/engines/remote.py +0 -0
  138. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/decision/gguf_compat.py +0 -0
  139. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/decision/head.py +0 -0
  140. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/decision/kinds.py +0 -0
  141. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/decision/loader.py +0 -0
  142. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/decision/pool.py +0 -0
  143. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/decision/render.py +0 -0
  144. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/decision/runtime.py +0 -0
  145. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/decision/tokenizers.py +0 -0
  146. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/decision/types.py +0 -0
  147. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/download.py +0 -0
  148. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/embeddings/__init__.py +0 -0
  149. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/embeddings/manager.py +0 -0
  150. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/embeddings/models.py +0 -0
  151. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/endpoint/__init__.py +0 -0
  152. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/endpoint/app.py +0 -0
  153. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/events/__init__.py +0 -0
  154. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/mcp/__init__.py +0 -0
  155. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/mcp/factory.py +0 -0
  156. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/mcp/naming.py +0 -0
  157. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/mcp/stdio_client.py +0 -0
  158. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/mcp/tool_source.py +0 -0
  159. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/__init__.py +0 -0
  160. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/auto_handler.py +0 -0
  161. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/base.py +0 -0
  162. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/capabilities.py +0 -0
  163. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/delivery.py +0 -0
  164. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/enrichment.py +0 -0
  165. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/handlers/__init__.py +0 -0
  166. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/handlers/anthropic_handler.py +0 -0
  167. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/handlers/local_handler.py +0 -0
  168. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/handlers/openai_handler.py +0 -0
  169. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/openai_parts.py +0 -0
  170. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/pdf_routing.py +0 -0
  171. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/processors/__init__.py +0 -0
  172. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/processors/audio_processor.py +0 -0
  173. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/processors/direct_pdf_processor.py +0 -0
  174. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/processors/glyph_pdf_processor.py +0 -0
  175. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/processors/image_processor.py +0 -0
  176. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/processors/office_processor.py +0 -0
  177. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/processors/pdf_processor.py +0 -0
  178. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/processors/text_processor.py +0 -0
  179. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/processors/video_processor.py +0 -0
  180. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/types.py +0 -0
  181. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/utils/__init__.py +0 -0
  182. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/utils/image_scaler.py +0 -0
  183. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/utils/video_frames.py +0 -0
  184. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/vision_fallback.py +0 -0
  185. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/processing/__init__.py +0 -0
  186. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/processing/basic_deepsearch.py +0 -0
  187. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/processing/basic_extractor.py +0 -0
  188. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/processing/basic_intent.py +0 -0
  189. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/processing/basic_judge.py +0 -0
  190. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/processing/basic_summarizer.py +0 -0
  191. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/__init__.py +0 -0
  192. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/_http.py +0 -0
  193. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/anthropic_provider.py +0 -0
  194. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/capability_host.py +0 -0
  195. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/endpoint_context.py +0 -0
  196. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/generation_cancel.py +0 -0
  197. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/generation_progress.py +0 -0
  198. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/gguf_shared.py +0 -0
  199. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/gguf_slots.py +0 -0
  200. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/hf_residency.py +0 -0
  201. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/huggingface_provider.py +0 -0
  202. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/lmstudio_provider.py +0 -0
  203. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/mlx_hy_v3.py +0 -0
  204. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/mlx_model_rules.py +0 -0
  205. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/mlx_native_cache.py +0 -0
  206. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/mlx_native_session.py +0 -0
  207. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/mlx_prefill_observer.py +0 -0
  208. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/mlx_provider.py +0 -0
  209. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/mlx_qwen4.py +0 -0
  210. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/mlx_residency.py +0 -0
  211. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/mlx_runtime.py +0 -0
  212. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/mlx_vision_addon.py +0 -0
  213. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/model_capabilities.py +0 -0
  214. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/model_config_fingerprint.py +0 -0
  215. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/ollama_provider.py +0 -0
  216. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/openai_compatible_provider.py +0 -0
  217. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/openai_provider.py +0 -0
  218. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/openrouter_provider.py +0 -0
  219. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/portkey_provider.py +0 -0
  220. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/registry.py +0 -0
  221. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/streaming.py +0 -0
  222. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/tokenizer_fingerprint.py +0 -0
  223. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/typesafe_provider.py +0 -0
  224. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/vllm_provider.py +0 -0
  225. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/weights_fingerprint.py +0 -0
  226. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/py.typed +0 -0
  227. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/server/__init__.py +0 -0
  228. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/server/__main__.py +0 -0
  229. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/server/auth_policy.py +0 -0
  230. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/server/camera_endpoints.py +0 -0
  231. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/server/capability_generation.py +0 -0
  232. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/server/console_routes.py +0 -0
  233. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/server/credentials.py +0 -0
  234. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/server/email_routes.py +0 -0
  235. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/server/first_run.py +0 -0
  236. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/server/host_routes.py +0 -0
  237. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/server/managed.py +0 -0
  238. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/server/scene3d_endpoints.py +0 -0
  239. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/server/session_routes.py +0 -0
  240. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/server/vision_endpoints.py +0 -0
  241. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/structured/__init__.py +0 -0
  242. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/structured/handler.py +0 -0
  243. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/structured/json_schema.py +0 -0
  244. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/structured/retry.py +0 -0
  245. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/structured/schema_compat.py +0 -0
  246. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/testing/__init__.py +0 -0
  247. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/testing/mailserver.py +0 -0
  248. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/tools/__init__.py +0 -0
  249. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/tools/abstractignore.py +0 -0
  250. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/tools/arg_canonicalizer.py +0 -0
  251. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/tools/arg_coercion.py +0 -0
  252. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/tools/browser_tools.py +0 -0
  253. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/tools/code_analysis.py +0 -0
  254. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/tools/email_digests.py +0 -0
  255. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/tools/fetch_url_ssrf.py +0 -0
  256. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/tools/handler.py +0 -0
  257. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/tools/inventory.py +0 -0
  258. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/tools/process_tree.py +0 -0
  259. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/tools/registry.py +0 -0
  260. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/tools/risk_facts.py +0 -0
  261. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/tools/sandbox.py +0 -0
  262. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/tools/shell_session.py +0 -0
  263. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/tools/syntax_rewriter.py +0 -0
  264. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/tools/tag_rewriter.py +0 -0
  265. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/tools/telegram_tdlib.py +0 -0
  266. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/tools/wire_naming.py +0 -0
  267. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/__init__.py +0 -0
  268. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/async_stream.py +0 -0
  269. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/cli.py +0 -0
  270. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/context_calibration.py +0 -0
  271. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/context_estimate.py +0 -0
  272. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/data_registry.py +0 -0
  273. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/display.py +0 -0
  274. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/file_filters.py +0 -0
  275. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/host_profile.py +0 -0
  276. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/hostinfo.py +0 -0
  277. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/identity.py +0 -0
  278. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/install_settings.py +0 -0
  279. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/jsonish.py +0 -0
  280. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/kv_geometry.py +0 -0
  281. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/memory.py +0 -0
  282. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/message_preprocessor.py +0 -0
  283. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/model_cache.py +0 -0
  284. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/model_fit.py +0 -0
  285. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/residency.py +0 -0
  286. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/self_fixes.py +0 -0
  287. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/stdio.py +0 -0
  288. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/structured_logging.py +0 -0
  289. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/token_utils.py +0 -0
  290. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/trace_export.py +0 -0
  291. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/truncation.py +0 -0
  292. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/vlm_token_calculator.py +0 -0
  293. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/windows_dll.py +0 -0
  294. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/workspace_paths.py +0 -0
  295. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore.egg-info/dependency_links.txt +0 -0
  296. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore.egg-info/entry_points.txt +0 -0
  297. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore.egg-info/requires.txt +0 -0
  298. {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore.egg-info/top_level.txt +0 -0
  299. {abstractcore-2.34.0 → abstractcore-2.35.0}/pyproject.toml +0 -0
  300. {abstractcore-2.34.0 → abstractcore-2.35.0}/setup.cfg +0 -0
  301. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_abstractendpoint_singleton_provider.py +0 -0
  302. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_agentic_cli_compatibility.py +0 -0
  303. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_basic_session.py +0 -0
  304. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_bloc_kv.py +0 -0
  305. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_bloc_kv_cache_dtype.py +0 -0
  306. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_bloc_kv_endpoint.py +0 -0
  307. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_bloc_kv_engine_fingerprint.py +0 -0
  308. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_bloc_kv_model_config_fingerprint.py +0 -0
  309. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_bloc_kv_tokenizer_fingerprint.py +0 -0
  310. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_bloc_kv_weights_fingerprint.py +0 -0
  311. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_bloc_metadata_json_extract.py +0 -0
  312. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_cached_session_kv_mode.py +0 -0
  313. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_cached_session_kv_thinking_prefix.py +0 -0
  314. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_capabilities_registry.py +0 -0
  315. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_capabilities_registry_preferred_backends_from_config.py +0 -0
  316. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_changelog_fragments.py +0 -0
  317. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_complete_integration.py +0 -0
  318. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_comprehensive_events.py +0 -0
  319. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_console_about.py +0 -0
  320. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_console_email_tab.py +0 -0
  321. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_console_web.py +0 -0
  322. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_core_components.py +0 -0
  323. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_display_rule.py +0 -0
  324. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_email_digests.py +0 -0
  325. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_embedding_model_shared_unit.py +0 -0
  326. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_embedding_model_token_warnings.py +0 -0
  327. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_enhanced_prompt.py +0 -0
  328. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_environment_variable_tool_call_tags.py +0 -0
  329. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_factory.py +0 -0
  330. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_file_bloc_store_unit.py +0 -0
  331. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_file_boxes_cached_session.py +0 -0
  332. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_final_accuracy.py +0 -0
  333. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_final_comprehensive.py +0 -0
  334. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_final_graceful_errors.py +0 -0
  335. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_generate_contract.py +0 -0
  336. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_generate_response_reasoning_property_unit.py +0 -0
  337. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_generate_with_outputs.py +0 -0
  338. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_graceful_fallback.py +0 -0
  339. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_import_debug.py +0 -0
  340. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_import_safety.py +0 -0
  341. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_incremental_thinking_tag_stripper.py +0 -0
  342. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_install_hints_no_bare_packages.py +0 -0
  343. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_install_settings.py +0 -0
  344. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_integrated_functionality.py +0 -0
  345. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_llms_sources.py +0 -0
  346. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_mcp_integration.py +0 -0
  347. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_mcp_stdio_client.py +0 -0
  348. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_model_not_downloaded_error_unit.py +0 -0
  349. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_multimodal_generate_output.py +0 -0
  350. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_openai_prompt_cache_key_passthrough.py +0 -0
  351. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_output_specs.py +0 -0
  352. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_packaging_assets.py +0 -0
  353. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_packaging_extras.py +0 -0
  354. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_packaging_packages_listed.py +0 -0
  355. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_prompt_cache_api.py +0 -0
  356. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_prompt_cache_bloc_composition.py +0 -0
  357. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_prompt_cache_bloc_e2e_gate.py +0 -0
  358. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_prompt_cache_control_plane.py +0 -0
  359. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_prompt_cache_prepare_modules_thinking_http.py +0 -0
  360. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_retry_observability.py +0 -0
  361. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_retry_strategy.py +0 -0
  362. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_seed_determinism.py +0 -0
  363. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_seed_temperature_basic.py +0 -0
  364. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_sensory_prompting.py +0 -0
  365. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_server_prompt_cache_control_plane_proxy.py +0 -0
  366. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_server_prompt_cache_key_passthrough.py +0 -0
  367. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_session_reasoning_persistence_unit.py +0 -0
  368. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_sound_effect_seconds_route.py +0 -0
  369. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_sse_starlette_pin_unit.py +0 -0
  370. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_structured_output_truncation_retry.py +0 -0
  371. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_text_only_model_experience.py +0 -0
  372. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_timing_helper.py +0 -0
  373. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_unload_memory.py +0 -0
  374. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_user_scenario_validation.py +0 -0
  375. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_voice_host_credentials.py +0 -0
  376. {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_windows_host_fixes.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: abstractcore
3
- Version: 2.34.0
3
+ Version: 2.35.0
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>
@@ -196,20 +196,14 @@ Dynamic: license-file
196
196
  Unified LLM Interface
197
197
  > Write once, run everywhere
198
198
 
199
+ What's new in 2.35.0: the model capability registry covers the current vendor lineups (GPT-6 and GPT-6.1, Claude 5.5 and Fable 5.1, Grok 4.3 to 4.7, Qwen 3.8, DeepSeek V4.1 Flash, GLM 5.3, MiniMax M3.1 Flash, Kimi K3 and K3.1 Pro, LFM3, Spark X2.5/X2.6, Nemotron 3.5, Bonsai 2 and more), so an image, video or voice route can name them; and a GGUF or MLX re-packaging of a registered model (`unsloth/...-GGUF:Q4_K_M`, `mlx-community/...-4bit`, bartowski's `Org_Model-GGUF`) resolves to that model's entry instead of the text-only default. Transcriptions report `language` and `detected_language`. See the [changelog](CHANGELOG.md#2350---2026-11-07).
200
+
199
201
  What's new in 2.34.0: a local model that no call has used for 60 minutes is unloaded from memory and loads
200
202
  again on its next call; a model kept loaded (Keep loaded) never is, and no running call is interrupted
201
203
  (`process_residency.set_idle_unload(seconds)`, `0` turns it off). A provider key you send to the server's discovery
202
204
  routes now reaches only the provider you name, never every provider those routes check. The web console's themes
203
205
  match ui-kit 0.9.14. See the [changelog](CHANGELOG.md#2340---2026-11-03).
204
206
 
205
- What's new in 2.33.0: GGUF prompt-cache snapshots drop an unused 0.5 GB copy each, stay under a byte budget
206
- (`gguf_prompt_cache_max_gb`), and are never evicted under a prefill that is reading them; a model that is not
207
- downloaded raises `ModelNotDownloadedError` naming it; an OpenAI-compatible key check refuses a wrong key even where
208
- the model list is public (OVH); hosted decision models (`typesafe`, `systemone`) are connection families, listed and
209
- routed as decision models, and a local decision model answers its own decisions; a provider profile this version
210
- cannot read is kept and reported instead of resetting the whole config. See the
211
- [changelog](CHANGELOG.md#2330---2026-11-03).
212
-
213
207
  AbstractCore is an offline-capable, open-source-first LLM infrastructure layer
214
208
  for Python applications. It gives you one `create_llm(...)` API across local
215
209
  runtimes, self-hosted servers, cloud APIs, and OpenAI-compatible gateways.
@@ -329,7 +323,29 @@ graph LR
329
323
 
330
324
  ## Install
331
325
 
332
- AbstractCore has three install settings:
326
+ **Install in one line** (no admin rights, no Python needed):
327
+
328
+ - **macOS / Linux:**
329
+
330
+ ```bash
331
+ curl -LsSf https://abstractframework.ai/core/install.sh | sh
332
+ ```
333
+
334
+ - **Windows 10 / 11** (PowerShell):
335
+
336
+ ```powershell
337
+ powershell -ExecutionPolicy ByPass -c "irm https://abstractframework.ai/core/install.ps1 | iex"
338
+ ```
339
+
340
+ The script detects the machine (Apple Silicon with macOS 14+: `abstractcore[apple]`; an NVIDIA or
341
+ ROCm card: `abstractcore[gpu]`; anything else: the light install) and installs AbstractCore alone
342
+ with uv and Python 3.12, giving you the `abstractcore`, `abstractcore-chat` and
343
+ `abstractcore-endpoint` commands and the apps; run it again to upgrade. It never starts a compiler,
344
+ so echo cancellation and stable-diffusion.cpp are left out (Diffusers / MLX-Gen cover image
345
+ generation; with a C compiler you can add them yourself). Options and details:
346
+ [One-line install](docs/installation.md#one-line-install).
347
+
348
+ **With pip**, in your own Python environment, AbstractCore has three install settings:
333
349
 
334
350
  ```bash
335
351
  # Light: every remote provider (OpenAI, Anthropic, OpenRouter, Portkey, any OpenAI-compatible
@@ -9,20 +9,14 @@
9
9
  Unified LLM Interface
10
10
  > Write once, run everywhere
11
11
 
12
+ What's new in 2.35.0: the model capability registry covers the current vendor lineups (GPT-6 and GPT-6.1, Claude 5.5 and Fable 5.1, Grok 4.3 to 4.7, Qwen 3.8, DeepSeek V4.1 Flash, GLM 5.3, MiniMax M3.1 Flash, Kimi K3 and K3.1 Pro, LFM3, Spark X2.5/X2.6, Nemotron 3.5, Bonsai 2 and more), so an image, video or voice route can name them; and a GGUF or MLX re-packaging of a registered model (`unsloth/...-GGUF:Q4_K_M`, `mlx-community/...-4bit`, bartowski's `Org_Model-GGUF`) resolves to that model's entry instead of the text-only default. Transcriptions report `language` and `detected_language`. See the [changelog](CHANGELOG.md#2350---2026-11-07).
13
+
12
14
  What's new in 2.34.0: a local model that no call has used for 60 minutes is unloaded from memory and loads
13
15
  again on its next call; a model kept loaded (Keep loaded) never is, and no running call is interrupted
14
16
  (`process_residency.set_idle_unload(seconds)`, `0` turns it off). A provider key you send to the server's discovery
15
17
  routes now reaches only the provider you name, never every provider those routes check. The web console's themes
16
18
  match ui-kit 0.9.14. See the [changelog](CHANGELOG.md#2340---2026-11-03).
17
19
 
18
- What's new in 2.33.0: GGUF prompt-cache snapshots drop an unused 0.5 GB copy each, stay under a byte budget
19
- (`gguf_prompt_cache_max_gb`), and are never evicted under a prefill that is reading them; a model that is not
20
- downloaded raises `ModelNotDownloadedError` naming it; an OpenAI-compatible key check refuses a wrong key even where
21
- the model list is public (OVH); hosted decision models (`typesafe`, `systemone`) are connection families, listed and
22
- routed as decision models, and a local decision model answers its own decisions; a provider profile this version
23
- cannot read is kept and reported instead of resetting the whole config. See the
24
- [changelog](CHANGELOG.md#2330---2026-11-03).
25
-
26
20
  AbstractCore is an offline-capable, open-source-first LLM infrastructure layer
27
21
  for Python applications. It gives you one `create_llm(...)` API across local
28
22
  runtimes, self-hosted servers, cloud APIs, and OpenAI-compatible gateways.
@@ -142,7 +136,29 @@ graph LR
142
136
 
143
137
  ## Install
144
138
 
145
- AbstractCore has three install settings:
139
+ **Install in one line** (no admin rights, no Python needed):
140
+
141
+ - **macOS / Linux:**
142
+
143
+ ```bash
144
+ curl -LsSf https://abstractframework.ai/core/install.sh | sh
145
+ ```
146
+
147
+ - **Windows 10 / 11** (PowerShell):
148
+
149
+ ```powershell
150
+ powershell -ExecutionPolicy ByPass -c "irm https://abstractframework.ai/core/install.ps1 | iex"
151
+ ```
152
+
153
+ The script detects the machine (Apple Silicon with macOS 14+: `abstractcore[apple]`; an NVIDIA or
154
+ ROCm card: `abstractcore[gpu]`; anything else: the light install) and installs AbstractCore alone
155
+ with uv and Python 3.12, giving you the `abstractcore`, `abstractcore-chat` and
156
+ `abstractcore-endpoint` commands and the apps; run it again to upgrade. It never starts a compiler,
157
+ so echo cancellation and stable-diffusion.cpp are left out (Diffusers / MLX-Gen cover image
158
+ generation; with a C compiler you can add them yourself). Options and details:
159
+ [One-line install](docs/installation.md#one-line-install).
160
+
161
+ **With pip**, in your own Python environment, AbstractCore has three install settings:
146
162
 
147
163
  ```bash
148
164
  # Light: every remote provider (OpenAI, Anthropic, OpenRouter, Portkey, any OpenAI-compatible
@@ -54,10 +54,26 @@ _VARIANT_TOKEN_RE = re.compile(
54
54
  r"(?i)^(?:"
55
55
  r"gguf|mlx|awq|gptq|bnb|quant|quantized|"
56
56
  r"(?:nv|mx)?fp\d+|bf\d+|f(?:16|32|64)|int\d+|uint\d+|nf4|"
57
- r"[1-9]bit|(?:i|t)?q[1-8](?:_[a-z0-9]+)*"
57
+ r"[1-9]bit|(?:i|t)?q[1-8](?:_[a-z0-9]+)*|"
58
+ # MLX quantizer markers: mlx-community "OptiQ" (always followed by "-Nbit") and the
59
+ # "oQ4e"/"oQ2e" mixed-affine tags used by Jundot and mlx-community conversions.
60
+ r"optiq|oq[1-8]e?|"
61
+ # mradermacher imatrix markers ("-i1-GGUF", "-imatrix").
62
+ r"i1|imatrix|"
63
+ # Google QAT / compressed-tensors packagings ("-it-qat-q4_0-gguf", "-it-qat-w4a16-ct",
64
+ # "-it-qat-q4_0-unquantized", "-it-qat-mobile-transformers").
65
+ r"qat|unquantized|ct|mobile|transformers|w\d+a\d+(?:c\d+)?"
58
66
  r")$"
59
67
  )
68
+ # A quant tag after a colon: Ollama / LM Studio / `hf.co/org/repo:TAG` ids such as
69
+ # "unsloth/Qwen3.8-27B-GGUF:Q4_K_M", "...-GGUF:UD-Q4_K_XL" or "...:latest". Stripped before
70
+ # the trailing-token walk so the repo name is normalized like any other variant.
71
+ _COLON_QUANT_TAG_RE = re.compile(r"(?i):(?:ud-)?(?:(?:i|t)?q[1-8](?:_[a-z0-9]+)*|(?:nv|mx)?fp\d+|bf\d+|f(?:16|32)|[1-9]bit|latest)$")
72
+ # bartowski / mradermacher style "Org_Model-GGUF": the upstream org folded into the repo
73
+ # name with an underscore. Only a plain org-looking head is split off.
74
+ _UNDERSCORED_ORG_PREFIX_RE = re.compile(r"^([A-Za-z][A-Za-z0-9.-]{1,40})_(?=[A-Za-z0-9])")
60
75
  _TRAILING_VARIANT_SEGMENT_RE = re.compile(r"(?i)([-_.@])([a-z0-9_]+)$")
76
+ _MAX_TRAILING_VARIANT_TOKENS = 6
61
77
  _FORMAT_VARIANT_TOKENS = {
62
78
  "gguf",
63
79
  "safetensors",
@@ -102,6 +118,10 @@ def _variant_normalizations(name: str) -> List[str]:
102
118
  _add(s)
103
119
 
104
120
  working = s
121
+ tag_match = _COLON_QUANT_TAG_RE.search(working)
122
+ if tag_match:
123
+ working = working[:tag_match.start()]
124
+ _add(working)
105
125
  trailing_tokens_reversed: List[tuple[str, str]] = []
106
126
 
107
127
  extension_match = _VARIANT_EXTENSION_RE.search(working)
@@ -119,6 +139,10 @@ def _variant_normalizations(name: str) -> List[str]:
119
139
  ud_quant = token.lower() == "ud" and any(re.match(r"(?i)^(?:i|t)?q[1-8]", t) for _, t in trailing_tokens_reversed)
120
140
  if not _is_variant_token(token) and not ud_quant:
121
141
  break
142
+ if len(trailing_tokens_reversed) >= _MAX_TRAILING_VARIANT_TOKENS:
143
+ # The subset walk below is 2^n; real repo names carry at most four or
144
+ # five tags, and an adversarial name must not stall capability lookup.
145
+ break
122
146
  trailing_tokens_reversed.append((match.group(1), token))
123
147
  working = working[:match.start()].rstrip(".-_@")
124
148
 
@@ -396,12 +420,28 @@ def resolve_model_alias(model_name: str, models: Dict[str, Any]) -> str:
396
420
  continue
397
421
  for normalized in _variant_normalizations(s):
398
422
  out.append(normalized)
399
- out.extend(_colon_variants(normalized))
423
+ for colon_variant in _colon_variants(normalized):
424
+ out.extend(_variant_normalizations(colon_variant))
400
425
  t = _tail(normalized)
401
426
  if t:
402
427
  for tail_normalized in _variant_normalizations(t):
403
428
  out.append(tail_normalized)
404
- out.extend(_colon_variants(tail_normalized))
429
+ for colon_variant in _colon_variants(tail_normalized):
430
+ out.extend(_variant_normalizations(colon_variant))
431
+ # "Org_Model" repo names (bartowski, mradermacher) also resolve as "Org/Model" and
432
+ # as the bare model name. Alias matching is a set intersection, so these compete
433
+ # with the other candidates on equal terms; only the canonical-key fallback walks
434
+ # the list in order.
435
+ for s in list(out):
436
+ if "/" in s or "_" not in s:
437
+ continue
438
+ m = _UNDERSCORED_ORG_PREFIX_RE.match(s)
439
+ if not m:
440
+ continue
441
+ rest = s[m.end():]
442
+ if rest:
443
+ out.append(f"{m.group(1)}/{rest}")
444
+ out.append(rest)
405
445
  # Deduplicate while preserving order
406
446
  uniq: List[str] = []
407
447
  seen: set[str] = set()
@@ -451,6 +491,10 @@ def resolve_model_alias(model_name: str, models: Dict[str, Any]) -> str:
451
491
  if not isinstance(aliases, list) or not aliases:
452
492
  continue
453
493
  alias_set = {str(a).strip().lower() for a in aliases if isinstance(a, str) and str(a).strip()}
494
+ # A declared "org/Model" alias also answers to the bare "Model" tail, so a
495
+ # re-packaged repo ("unsloth/Model-GGUF", "mlx-community/Model-4bit") that
496
+ # strips to the tail still finds it. Only aliases with exactly one "/" qualify.
497
+ alias_set |= {a.split("/", 1)[1] for a in alias_set if a.count("/") == 1 and a.split("/", 1)[1]}
454
498
  if alias_set and cand_set and alias_set.intersection(cand_set):
455
499
  alias_matches.append(canonical_name)
456
500
 
@@ -285,7 +285,13 @@
285
285
  "qwen3-32b",
286
286
  "qwen3:",
287
287
  "qwen3-4b-thinking",
288
- "qwen3-4b-instruct"
288
+ "qwen3-4b-instruct",
289
+ "bonsai-8b",
290
+ "bonsai-4b",
291
+ "bonsai-1.7b",
292
+ "ternary-bonsai-8b",
293
+ "ternary-bonsai-4b",
294
+ "ternary-bonsai-1.7b"
289
295
  ]
290
296
  },
291
297
  "qwen3_5": {
@@ -449,7 +455,6 @@
449
455
  },
450
456
  "patterns": [
451
457
  "qwen3.8-flash-next",
452
- "qwen3.8-flash",
453
458
  "flash-next",
454
459
  "qwen4exp",
455
460
  "qwen4-exp",
@@ -750,7 +755,8 @@
750
755
  "gemma4",
751
756
  "gemma4_unified",
752
757
  "gemma4-unified",
753
- "google/gemma-4"
758
+ "google/gemma-4",
759
+ "nemotron-3.5-bolt-e4b"
754
760
  ]
755
761
  },
756
762
  "gemma2": {
@@ -951,7 +957,13 @@
951
957
  "kimi-k2.6",
952
958
  "moonshotai/kimi-k2.6",
953
959
  "kimi-k2",
954
- "kimi_k25"
960
+ "kimi_k25",
961
+ "kimi-k3",
962
+ "moonshotai/kimi-k3",
963
+ "kimi_k3",
964
+ "kimi_k31",
965
+ "kimi-k2.7",
966
+ "kimi-k2.5"
955
967
  ]
956
968
  },
957
969
  "deepseek": {
@@ -1011,7 +1023,10 @@
1011
1023
  "minimax/minimax-m2.5",
1012
1024
  "minimax-m2",
1013
1025
  "minimaxai/minimax-m2",
1014
- "minimax/minimax-m2"
1026
+ "minimax/minimax-m2",
1027
+ "minimax-m2.7",
1028
+ "minimaxai/minimax-m2.7",
1029
+ "minimax/minimax-m2.7"
1015
1030
  ]
1016
1031
  },
1017
1032
  "lfm2": {
@@ -1085,7 +1100,12 @@
1085
1100
  "claude-opus-4-8",
1086
1101
  "claude-sonnet-5",
1087
1102
  "claude-fable-5",
1088
- "claude-mythos-5"
1103
+ "claude-mythos-5",
1104
+ "claude-haiku-5-5",
1105
+ "claude-fable-5-1",
1106
+ "claude-mythos-5-1",
1107
+ "claude-opus-5-5",
1108
+ "claude-sonnet-5-5"
1089
1109
  ]
1090
1110
  },
1091
1111
  "gpt": {
@@ -1099,7 +1119,14 @@
1099
1119
  "gpt-5.6",
1100
1120
  "gpt-5.6-sol",
1101
1121
  "gpt-5.6-terra",
1102
- "gpt-5.6-luna"
1122
+ "gpt-5.6-luna",
1123
+ "gpt-6",
1124
+ "gpt-6-astra",
1125
+ "gpt-6-sol",
1126
+ "gpt-6-luna",
1127
+ "gpt-6.1",
1128
+ "gpt-6.1-sol",
1129
+ "gpt-6.1-terra"
1103
1130
  ]
1104
1131
  },
1105
1132
  "gpt_oss": {
@@ -1151,7 +1178,12 @@
1151
1178
  "nemotron-cascade-2",
1152
1179
  "nemotron-labs",
1153
1180
  "nvidia/nemotron",
1154
- "nvidia-nemotron"
1181
+ "nvidia-nemotron",
1182
+ "nemotron-3-ultra",
1183
+ "nemotron-3.5-lightning",
1184
+ "nemotron-3.5-bolt-74b",
1185
+ "nemotron-3.5-super-vl",
1186
+ "nemotron-3.5-transcribe"
1155
1187
  ]
1156
1188
  },
1157
1189
  "qwen3_5_agentic": {
@@ -1207,7 +1239,10 @@
1207
1239
  "zai-org/glm-5.1",
1208
1240
  "zai-org/glm-5.2",
1209
1241
  "z-ai/glm-5.1",
1210
- "z-ai/glm-5.2"
1242
+ "z-ai/glm-5.2",
1243
+ "glm-5.3",
1244
+ "zai-org/glm-5.3",
1245
+ "z-ai/glm-5.3"
1211
1246
  ]
1212
1247
  },
1213
1248
  "minimax_m3": {
@@ -1227,7 +1262,10 @@
1227
1262
  "patterns": [
1228
1263
  "minimax-m3",
1229
1264
  "minimaxai/minimax-m3",
1230
- "minimax/minimax-m3"
1265
+ "minimax/minimax-m3",
1266
+ "minimax-m3.1",
1267
+ "minimaxai/minimax-m3.1-flash",
1268
+ "minimax/minimax-m3.1-flash"
1231
1269
  ]
1232
1270
  },
1233
1271
  "hunyuan3": {
@@ -1418,7 +1456,7 @@
1418
1456
  ]
1419
1457
  },
1420
1458
  "bonsai": {
1421
- "description": "Prism Bonsai-27B low-bit Qwen3.6 derivative; parent chat template, separate model identity.",
1459
+ "description": "Prism Bonsai low-bit Qwen3.5/3.6/3.8 derivatives (Bonsai-27B, Ternary-Bonsai-27B, Bonsai 2); parent chat template, separate model identities. The Qwen3-derived Bonsai-8B/4B/1.7B and Ternary-Bonsai-8B/4B/1.7B use the qwen3 block.",
1422
1460
  "message_format": "im_start_end",
1423
1461
  "system_prefix": "<|im_start|>system\n",
1424
1462
  "system_suffix": "<|im_end|>\n",
@@ -1447,7 +1485,13 @@
1447
1485
  "top_k": 20
1448
1486
  },
1449
1487
  "patterns": [
1450
- "bonsai-27b"
1488
+ "bonsai-27b",
1489
+ "bonsai-2-",
1490
+ "ternary-bonsai-2-",
1491
+ "ternary-bonsai-27b",
1492
+ "prism-ml/bonsai-27b",
1493
+ "prism-ml/ternary-bonsai-27b",
1494
+ "prism-ml/ternary-bonsai-2-"
1451
1495
  ]
1452
1496
  },
1453
1497
  "spark2_5": {