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.
- {abstractcore-2.34.0 → abstractcore-2.35.0}/PKG-INFO +26 -10
- {abstractcore-2.34.0 → abstractcore-2.35.0}/README.md +25 -9
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/architectures/detection.py +47 -3
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/assets/architecture_formats.json +56 -12
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/assets/model_capabilities.json +6709 -3984
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/capabilities/registry.py +17 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/capabilities/types.py +6 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/config/__init__.py +2 -1
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/config/main.py +1 -41
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/config/manager.py +59 -111
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/config/provider_profiles.py +19 -4
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/console/theme_sync.py +1 -1
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/console/themes.py +2 -2
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/core/bloc_kv.py +2 -2
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/core/retry.py +25 -1
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/exceptions/__init__.py +73 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/mcp/client.py +46 -15
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/base.py +122 -20
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/process_residency.py +10 -2
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/speculation.py +29 -3
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/server/app.py +37 -1
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/server/audio_endpoints.py +9 -1
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/tools/common_tools.py +27 -15
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/tools/comms_tools.py +114 -10
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/tools/core.py +101 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/tools/parser.py +37 -4
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/tools/shell_tools.py +18 -2
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/tools/telegram_tools.py +22 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/version.py +1 -1
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore.egg-info/PKG-INFO +26 -10
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore.egg-info/SOURCES.txt +1 -0
- abstractcore-2.35.0/tests/test_install_scripts.py +250 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_mcp_handshake.py +89 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/LICENSE +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/__init__.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/apps/__init__.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/apps/__main__.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/apps/app_config_utils.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/apps/deepsearch.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/apps/extractor.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/apps/intent.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/apps/judge.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/apps/summarizer.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/architectures/__init__.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/architectures/enums.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/architectures/response_postprocessing.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/architectures/thinking_controls.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/assets/OCRA.ttf +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/assets/OCRB.ttf +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/assets/OCRBL.ttf +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/assets/README.md +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/assets/abstractframework_identity.json +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/assets/adapter_metadata.schema.json +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/assets/bloc-schema.jsonld +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/assets/llamacpp_known_architectures.json +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/assets/model_capabilities.schema.json +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/assets/model_downloads_catalog.json +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/assets/model_downloads_catalog.schema.json +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/assets/semantic_models.md +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/assets/session_schema.json +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/capabilities/__init__.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/capabilities/errors.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/capabilities/host.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/capabilities/music_selectors.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/capabilities/scene3d_selectors.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/capabilities/vision_catalog.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/comms/__init__.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/comms/email/__init__.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/comms/email/bodystructure.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/comms/email/client.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/comms/email/context.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/comms/email/discovery.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/comms/email/errors.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/comms/email/imap_codec.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/comms/email/legacy.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/comms/email/limits.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/comms/email/models.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/comms/email/oauth.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/comms/email/policy.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/comms/email/search.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/comms/email/store.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/comms/email/vault.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/compression/__init__.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/compression/analytics.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/compression/cache.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/compression/config.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/compression/exceptions.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/compression/glyph_processor.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/compression/optimizer.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/compression/orchestrator.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/compression/pil_text_renderer.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/compression/quality.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/compression/text_formatter.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/compression/vision_compressor.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/config/capability_defaults.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/config/email_cli.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/config/engines.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/config/host_jobs.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/config/model_catalog.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/config/model_contexts.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/config/model_materializer.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/config/model_verify.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/config/models_engines_cli.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/config/recommendations.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/config/route_engines.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/config/vision_config.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/console/__init__.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/console/web.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/core/__init__.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/core/bloc_metadata.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/core/cached_session.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/core/degeneration.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/core/endpoint_damping.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/core/enums.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/core/factory.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/core/file_blocs.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/core/file_boxes.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/core/generate_contract.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/core/interface.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/core/multimodal_generation.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/core/output_specs.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/core/session.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/core/types.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/decision/__init__.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/decision/backends/__init__.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/decision/backends/base.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/decision/backends/gguf.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/decision/backends/hf.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/decision/backends/logits.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/decision/backends/mlx.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/decision/convert.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/decision/encoding.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/decision/engines/__init__.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/decision/engines/base.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/decision/engines/labels.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/decision/engines/laya.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/decision/engines/remote.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/decision/gguf_compat.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/decision/head.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/decision/kinds.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/decision/loader.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/decision/pool.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/decision/render.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/decision/runtime.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/decision/tokenizers.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/decision/types.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/download.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/embeddings/__init__.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/embeddings/manager.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/embeddings/models.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/endpoint/__init__.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/endpoint/app.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/events/__init__.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/mcp/__init__.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/mcp/factory.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/mcp/naming.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/mcp/stdio_client.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/mcp/tool_source.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/__init__.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/auto_handler.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/base.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/capabilities.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/delivery.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/enrichment.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/handlers/__init__.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/handlers/anthropic_handler.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/handlers/local_handler.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/handlers/openai_handler.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/openai_parts.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/pdf_routing.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/processors/__init__.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/processors/audio_processor.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/processors/direct_pdf_processor.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/processors/glyph_pdf_processor.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/processors/image_processor.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/processors/office_processor.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/processors/pdf_processor.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/processors/text_processor.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/processors/video_processor.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/types.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/utils/__init__.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/utils/image_scaler.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/utils/video_frames.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/media/vision_fallback.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/processing/__init__.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/processing/basic_deepsearch.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/processing/basic_extractor.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/processing/basic_intent.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/processing/basic_judge.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/processing/basic_summarizer.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/__init__.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/_http.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/anthropic_provider.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/capability_host.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/endpoint_context.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/generation_cancel.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/generation_progress.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/gguf_shared.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/gguf_slots.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/hf_residency.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/huggingface_provider.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/lmstudio_provider.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/mlx_hy_v3.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/mlx_model_rules.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/mlx_native_cache.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/mlx_native_session.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/mlx_prefill_observer.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/mlx_provider.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/mlx_qwen4.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/mlx_residency.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/mlx_runtime.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/mlx_vision_addon.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/model_capabilities.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/model_config_fingerprint.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/ollama_provider.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/openai_compatible_provider.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/openai_provider.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/openrouter_provider.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/portkey_provider.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/registry.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/streaming.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/tokenizer_fingerprint.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/typesafe_provider.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/vllm_provider.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/providers/weights_fingerprint.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/py.typed +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/server/__init__.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/server/__main__.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/server/auth_policy.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/server/camera_endpoints.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/server/capability_generation.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/server/console_routes.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/server/credentials.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/server/email_routes.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/server/first_run.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/server/host_routes.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/server/managed.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/server/scene3d_endpoints.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/server/session_routes.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/server/vision_endpoints.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/structured/__init__.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/structured/handler.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/structured/json_schema.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/structured/retry.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/structured/schema_compat.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/testing/__init__.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/testing/mailserver.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/tools/__init__.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/tools/abstractignore.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/tools/arg_canonicalizer.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/tools/arg_coercion.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/tools/browser_tools.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/tools/code_analysis.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/tools/email_digests.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/tools/fetch_url_ssrf.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/tools/handler.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/tools/inventory.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/tools/process_tree.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/tools/registry.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/tools/risk_facts.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/tools/sandbox.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/tools/shell_session.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/tools/syntax_rewriter.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/tools/tag_rewriter.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/tools/telegram_tdlib.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/tools/wire_naming.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/__init__.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/async_stream.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/cli.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/context_calibration.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/context_estimate.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/data_registry.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/display.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/file_filters.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/host_profile.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/hostinfo.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/identity.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/install_settings.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/jsonish.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/kv_geometry.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/memory.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/message_preprocessor.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/model_cache.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/model_fit.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/residency.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/self_fixes.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/stdio.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/structured_logging.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/token_utils.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/trace_export.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/truncation.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/vlm_token_calculator.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/windows_dll.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore/utils/workspace_paths.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore.egg-info/dependency_links.txt +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore.egg-info/entry_points.txt +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore.egg-info/requires.txt +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/abstractcore.egg-info/top_level.txt +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/pyproject.toml +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/setup.cfg +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_abstractendpoint_singleton_provider.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_agentic_cli_compatibility.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_basic_session.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_bloc_kv.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_bloc_kv_cache_dtype.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_bloc_kv_endpoint.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_bloc_kv_engine_fingerprint.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_bloc_kv_model_config_fingerprint.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_bloc_kv_tokenizer_fingerprint.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_bloc_kv_weights_fingerprint.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_bloc_metadata_json_extract.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_cached_session_kv_mode.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_cached_session_kv_thinking_prefix.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_capabilities_registry.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_capabilities_registry_preferred_backends_from_config.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_changelog_fragments.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_complete_integration.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_comprehensive_events.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_console_about.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_console_email_tab.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_console_web.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_core_components.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_display_rule.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_email_digests.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_embedding_model_shared_unit.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_embedding_model_token_warnings.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_enhanced_prompt.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_environment_variable_tool_call_tags.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_factory.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_file_bloc_store_unit.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_file_boxes_cached_session.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_final_accuracy.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_final_comprehensive.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_final_graceful_errors.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_generate_contract.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_generate_response_reasoning_property_unit.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_generate_with_outputs.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_graceful_fallback.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_import_debug.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_import_safety.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_incremental_thinking_tag_stripper.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_install_hints_no_bare_packages.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_install_settings.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_integrated_functionality.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_llms_sources.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_mcp_integration.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_mcp_stdio_client.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_model_not_downloaded_error_unit.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_multimodal_generate_output.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_openai_prompt_cache_key_passthrough.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_output_specs.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_packaging_assets.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_packaging_extras.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_packaging_packages_listed.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_prompt_cache_api.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_prompt_cache_bloc_composition.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_prompt_cache_bloc_e2e_gate.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_prompt_cache_control_plane.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_prompt_cache_prepare_modules_thinking_http.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_retry_observability.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_retry_strategy.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_seed_determinism.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_seed_temperature_basic.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_sensory_prompting.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_server_prompt_cache_control_plane_proxy.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_server_prompt_cache_key_passthrough.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_session_reasoning_persistence_unit.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_sound_effect_seconds_route.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_sse_starlette_pin_unit.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_structured_output_truncation_retry.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_text_only_model_experience.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_timing_helper.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_unload_memory.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_user_scenario_validation.py +0 -0
- {abstractcore-2.34.0 → abstractcore-2.35.0}/tests/test_voice_host_credentials.py +0 -0
- {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.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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": {
|