abstractcore 2.26.3__tar.gz → 2.30.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.26.3 → abstractcore-2.30.0}/PKG-INFO +53 -20
- {abstractcore-2.26.3 → abstractcore-2.30.0}/README.md +39 -6
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/architectures/detection.py +18 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/architectures/thinking_controls.py +50 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/assets/architecture_formats.json +45 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/assets/model_capabilities.json +138 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/assets/model_downloads_catalog.json +65 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/capabilities/registry.py +105 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/comms/email/__init__.py +6 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/comms/email/client.py +506 -21
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/comms/email/context.py +19 -1
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/comms/email/errors.py +7 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/comms/email/models.py +47 -1
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/comms/email/search.py +43 -2
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/comms/email/store.py +45 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/config/email_cli.py +2 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/config/route_engines.py +4 -4
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/providers/base.py +209 -17
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/providers/huggingface_provider.py +309 -22
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/providers/lmstudio_provider.py +114 -82
- abstractcore-2.30.0/abstractcore/providers/mlx_hy_v3.py +440 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/providers/mlx_provider.py +91 -4
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/providers/openai_compatible_provider.py +45 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/providers/openai_provider.py +3 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/providers/openrouter_provider.py +77 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/providers/streaming.py +71 -7
- abstractcore-2.30.0/abstractcore/providers/vllm_provider.py +288 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/server/audio_endpoints.py +257 -4
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/testing/mailserver.py +149 -4
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/tools/parser.py +93 -20
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/utils/version.py +1 -1
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore.egg-info/PKG-INFO +53 -20
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore.egg-info/SOURCES.txt +1 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore.egg-info/requires.txt +13 -13
- {abstractcore-2.26.3 → abstractcore-2.30.0}/pyproject.toml +13 -13
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_generate_contract.py +24 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_install_settings.py +2 -2
- abstractcore-2.26.3/abstractcore/providers/vllm_provider.py +0 -196
- {abstractcore-2.26.3 → abstractcore-2.30.0}/LICENSE +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/__init__.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/apps/__init__.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/apps/__main__.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/apps/app_config_utils.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/apps/deepsearch.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/apps/extractor.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/apps/intent.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/apps/judge.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/apps/summarizer.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/architectures/__init__.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/architectures/enums.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/architectures/response_postprocessing.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/assets/OCRA.ttf +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/assets/OCRB.ttf +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/assets/OCRBL.ttf +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/assets/README.md +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/assets/abstractframework_identity.json +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/assets/bloc-schema.jsonld +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/assets/model_capabilities.schema.json +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/assets/model_downloads_catalog.schema.json +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/assets/semantic_models.md +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/assets/session_schema.json +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/capabilities/__init__.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/capabilities/errors.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/capabilities/host.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/capabilities/music_selectors.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/capabilities/scene3d_selectors.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/capabilities/types.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/capabilities/vision_catalog.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/comms/__init__.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/comms/email/bodystructure.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/comms/email/discovery.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/comms/email/imap_codec.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/comms/email/legacy.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/comms/email/limits.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/comms/email/oauth.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/comms/email/policy.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/comms/email/vault.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/compression/__init__.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/compression/analytics.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/compression/cache.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/compression/config.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/compression/exceptions.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/compression/glyph_processor.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/compression/optimizer.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/compression/orchestrator.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/compression/pil_text_renderer.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/compression/quality.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/compression/text_formatter.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/compression/vision_compressor.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/config/__init__.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/config/capability_defaults.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/config/engines.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/config/host_jobs.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/config/main.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/config/manager.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/config/model_catalog.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/config/model_materializer.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/config/model_verify.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/config/models_engines_cli.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/config/provider_profiles.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/config/recommendations.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/config/vision_config.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/console/__init__.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/console/theme_sync.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/console/themes.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/console/web.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/core/__init__.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/core/bloc_kv.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/core/bloc_metadata.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/core/cached_session.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/core/degeneration.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/core/endpoint_damping.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/core/enums.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/core/factory.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/core/file_blocs.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/core/file_boxes.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/core/generate_contract.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/core/interface.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/core/multimodal_generation.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/core/output_specs.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/core/retry.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/core/session.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/core/types.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/download.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/embeddings/__init__.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/embeddings/manager.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/embeddings/models.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/endpoint/__init__.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/endpoint/app.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/events/__init__.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/exceptions/__init__.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/mcp/__init__.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/mcp/client.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/mcp/factory.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/mcp/naming.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/mcp/stdio_client.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/mcp/tool_source.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/media/__init__.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/media/auto_handler.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/media/base.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/media/capabilities.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/media/delivery.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/media/enrichment.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/media/handlers/__init__.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/media/handlers/anthropic_handler.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/media/handlers/local_handler.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/media/handlers/openai_handler.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/media/openai_parts.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/media/pdf_routing.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/media/processors/__init__.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/media/processors/audio_processor.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/media/processors/direct_pdf_processor.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/media/processors/glyph_pdf_processor.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/media/processors/image_processor.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/media/processors/office_processor.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/media/processors/pdf_processor.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/media/processors/text_processor.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/media/processors/video_processor.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/media/types.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/media/utils/__init__.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/media/utils/image_scaler.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/media/utils/video_frames.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/media/vision_fallback.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/processing/__init__.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/processing/basic_deepsearch.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/processing/basic_extractor.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/processing/basic_intent.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/processing/basic_judge.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/processing/basic_summarizer.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/providers/__init__.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/providers/_http.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/providers/anthropic_provider.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/providers/capability_host.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/providers/endpoint_context.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/providers/generation_cancel.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/providers/generation_progress.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/providers/hf_residency.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/providers/mlx_model_rules.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/providers/mlx_native_cache.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/providers/mlx_native_session.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/providers/mlx_prefill_observer.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/providers/mlx_qwen4.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/providers/mlx_residency.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/providers/mlx_runtime.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/providers/mlx_vision_addon.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/providers/model_capabilities.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/providers/model_config_fingerprint.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/providers/ollama_provider.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/providers/portkey_provider.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/providers/process_residency.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/providers/registry.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/providers/speculation.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/providers/tokenizer_fingerprint.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/providers/weights_fingerprint.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/py.typed +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/server/__init__.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/server/__main__.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/server/app.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/server/auth_policy.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/server/camera_endpoints.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/server/capability_generation.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/server/console_routes.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/server/credentials.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/server/email_routes.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/server/first_run.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/server/host_routes.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/server/scene3d_endpoints.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/server/session_routes.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/server/vision_endpoints.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/structured/__init__.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/structured/handler.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/structured/json_schema.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/structured/retry.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/structured/schema_compat.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/testing/__init__.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/tools/__init__.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/tools/abstractignore.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/tools/arg_canonicalizer.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/tools/arg_coercion.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/tools/browser_tools.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/tools/code_analysis.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/tools/common_tools.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/tools/comms_tools.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/tools/core.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/tools/email_digests.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/tools/fetch_url_ssrf.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/tools/handler.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/tools/inventory.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/tools/process_tree.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/tools/registry.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/tools/risk_facts.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/tools/sandbox.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/tools/shell_session.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/tools/shell_tools.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/tools/syntax_rewriter.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/tools/tag_rewriter.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/tools/telegram_tdlib.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/tools/telegram_tools.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/tools/wire_naming.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/utils/__init__.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/utils/async_stream.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/utils/cli.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/utils/context_calibration.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/utils/context_estimate.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/utils/data_registry.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/utils/display.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/utils/file_filters.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/utils/host_profile.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/utils/hostinfo.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/utils/identity.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/utils/install_settings.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/utils/jsonish.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/utils/memory.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/utils/message_preprocessor.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/utils/model_cache.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/utils/model_fit.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/utils/residency.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/utils/self_fixes.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/utils/stdio.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/utils/structured_logging.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/utils/token_utils.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/utils/trace_export.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/utils/truncation.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/utils/vlm_token_calculator.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/utils/windows_dll.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/utils/workspace_paths.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore.egg-info/dependency_links.txt +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore.egg-info/entry_points.txt +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore.egg-info/top_level.txt +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/setup.cfg +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_abstractendpoint_singleton_provider.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_agentic_cli_compatibility.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_basic_session.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_bloc_kv.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_bloc_kv_cache_dtype.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_bloc_kv_endpoint.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_bloc_kv_engine_fingerprint.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_bloc_kv_model_config_fingerprint.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_bloc_kv_tokenizer_fingerprint.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_bloc_kv_weights_fingerprint.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_bloc_metadata_json_extract.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_cached_session_kv_mode.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_cached_session_kv_thinking_prefix.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_capabilities_registry.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_capabilities_registry_preferred_backends_from_config.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_complete_integration.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_comprehensive_events.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_console_about.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_console_email_tab.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_console_web.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_core_components.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_display_rule.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_email_digests.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_embedding_model_token_warnings.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_enhanced_prompt.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_environment_variable_tool_call_tags.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_factory.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_file_bloc_store_unit.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_file_boxes_cached_session.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_final_accuracy.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_final_comprehensive.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_final_graceful_errors.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_generate_response_reasoning_property_unit.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_generate_with_outputs.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_graceful_fallback.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_import_debug.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_import_safety.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_incremental_thinking_tag_stripper.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_install_hints_no_bare_packages.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_integrated_functionality.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_llms_sources.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_mcp_handshake.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_mcp_integration.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_mcp_stdio_client.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_multimodal_generate_output.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_openai_prompt_cache_key_passthrough.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_output_specs.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_packaging_assets.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_packaging_extras.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_prompt_cache_api.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_prompt_cache_bloc_composition.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_prompt_cache_bloc_e2e_gate.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_prompt_cache_control_plane.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_prompt_cache_prepare_modules_thinking_http.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_retry_observability.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_retry_strategy.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_seed_determinism.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_seed_temperature_basic.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_sensory_prompting.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_server_prompt_cache_control_plane_proxy.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_server_prompt_cache_key_passthrough.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_session_reasoning_persistence_unit.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_sound_effect_seconds_route.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_structured_output_truncation_retry.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_text_only_model_experience.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_unload_memory.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_user_scenario_validation.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.0}/tests/test_voice_host_credentials.py +0 -0
- {abstractcore-2.26.3 → abstractcore-2.30.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.30.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>
|
|
@@ -49,10 +49,10 @@ Requires-Dist: uvicorn[standard]<1.0.0,>=0.23.0
|
|
|
49
49
|
Requires-Dist: python-multipart<1.0.0,>=0.0.6
|
|
50
50
|
Requires-Dist: sse-starlette<2.0.0,>=1.6.0
|
|
51
51
|
Requires-Dist: cryptography>=41.0.0
|
|
52
|
-
Requires-Dist: abstractvoice>=0.
|
|
53
|
-
Requires-Dist: abstractvision>=0.3.
|
|
54
|
-
Requires-Dist: abstractmusic>=0.1.
|
|
55
|
-
Requires-Dist: abstract3d>=0.
|
|
52
|
+
Requires-Dist: abstractvoice>=0.18.2
|
|
53
|
+
Requires-Dist: abstractvision>=0.3.34
|
|
54
|
+
Requires-Dist: abstractmusic>=0.1.17; python_version >= "3.10"
|
|
55
|
+
Requires-Dist: abstract3d>=0.3.2; python_version >= "3.10"
|
|
56
56
|
Provides-Extra: apple
|
|
57
57
|
Requires-Dist: mlx<1.0.0,>=0.32.2; extra == "apple"
|
|
58
58
|
Requires-Dist: mlx-lm<1.0.0,>=0.31.3; extra == "apple"
|
|
@@ -68,10 +68,10 @@ Requires-Dist: accelerate>=1.0.0; extra == "apple"
|
|
|
68
68
|
Requires-Dist: sentence-transformers<6.0.0,>=5.1.0; extra == "apple"
|
|
69
69
|
Requires-Dist: numpy<3.0.0,>=2.1.0; extra == "apple"
|
|
70
70
|
Requires-Dist: Pillow<13.0.0,>=12.1.1; extra == "apple"
|
|
71
|
-
Requires-Dist: abstractvoice[all-apple]>=0.
|
|
71
|
+
Requires-Dist: abstractvoice[all-apple]>=0.18.2; extra == "apple"
|
|
72
72
|
Requires-Dist: omnivoice>=0.1.5; extra == "apple"
|
|
73
|
-
Requires-Dist: abstractvision[all-apple]>=0.3.
|
|
74
|
-
Requires-Dist: abstractmusic[all-apple]>=0.1.
|
|
73
|
+
Requires-Dist: abstractvision[all-apple]>=0.3.34; extra == "apple"
|
|
74
|
+
Requires-Dist: abstractmusic[all-apple]>=0.1.17; extra == "apple"
|
|
75
75
|
Requires-Dist: playwright<2.0.0,>=1.49.0; extra == "apple"
|
|
76
76
|
Provides-Extra: gpu
|
|
77
77
|
Requires-Dist: vllm<1.0.0,>=0.6.0; sys_platform == "linux" and extra == "gpu"
|
|
@@ -85,10 +85,10 @@ Requires-Dist: llama-cpp-python<1.0.0,>=0.3.23; sys_platform != "win32" and extr
|
|
|
85
85
|
Requires-Dist: sentence-transformers<6.0.0,>=5.1.0; extra == "gpu"
|
|
86
86
|
Requires-Dist: numpy<3.0.0,>=1.20.0; python_version < "3.13" and extra == "gpu"
|
|
87
87
|
Requires-Dist: numpy<3.0.0,>=2.1.0; python_version >= "3.13" and extra == "gpu"
|
|
88
|
-
Requires-Dist: abstractvoice[all-gpu]>=0.
|
|
88
|
+
Requires-Dist: abstractvoice[all-gpu]>=0.18.2; extra == "gpu"
|
|
89
89
|
Requires-Dist: omnivoice>=0.1.5; extra == "gpu"
|
|
90
|
-
Requires-Dist: abstractvision[all-gpu]>=0.3.
|
|
91
|
-
Requires-Dist: abstractmusic[all-gpu]>=0.1.
|
|
90
|
+
Requires-Dist: abstractvision[all-gpu]>=0.3.34; extra == "gpu"
|
|
91
|
+
Requires-Dist: abstractmusic[all-gpu]>=0.1.17; extra == "gpu"
|
|
92
92
|
Requires-Dist: playwright<2.0.0,>=1.49.0; extra == "gpu"
|
|
93
93
|
Provides-Extra: remote
|
|
94
94
|
Provides-Extra: openai
|
|
@@ -133,11 +133,11 @@ Requires-Dist: sentence-transformers<6.0.0,>=5.1.0; extra == "embeddings"
|
|
|
133
133
|
Requires-Dist: numpy<3.0.0,>=1.20.0; python_version < "3.13" and extra == "embeddings"
|
|
134
134
|
Requires-Dist: numpy<3.0.0,>=2.1.0; python_version >= "3.13" and extra == "embeddings"
|
|
135
135
|
Provides-Extra: vision-diffusers
|
|
136
|
-
Requires-Dist: abstractvision[huggingface]>=0.3.
|
|
136
|
+
Requires-Dist: abstractvision[huggingface]>=0.3.34; extra == "vision-diffusers"
|
|
137
137
|
Provides-Extra: vision-sdcpp
|
|
138
|
-
Requires-Dist: abstractvision[sdcpp]>=0.3.
|
|
138
|
+
Requires-Dist: abstractvision[sdcpp]>=0.3.34; extra == "vision-sdcpp"
|
|
139
139
|
Provides-Extra: vision-local
|
|
140
|
-
Requires-Dist: abstractvision[local]>=0.3.
|
|
140
|
+
Requires-Dist: abstractvision[local]>=0.3.34; extra == "vision-local"
|
|
141
141
|
Provides-Extra: browser
|
|
142
142
|
Requires-Dist: playwright<2.0.0,>=1.49.0; extra == "browser"
|
|
143
143
|
Provides-Extra: pdf-pymupdf-commercial
|
|
@@ -248,6 +248,20 @@ For AI assistants and doc-indexing tools, this repository also publishes
|
|
|
248
248
|
[`llms.txt`](llms.txt) and [`llms-full.txt`](llms-full.txt). MCP clients such as
|
|
249
249
|
Context7 can query the public documentation directly as well.
|
|
250
250
|
|
|
251
|
+
## For AI agents
|
|
252
|
+
|
|
253
|
+
Register and use the [`abstractcore` agent skill](https://github.com/lpalbou/AbstractCore/tree/main/skills/abstractcore)
|
|
254
|
+
to write integrations and operate the Python API, CLI and HTTP server. Start by reading
|
|
255
|
+
[`skills/abstractcore/SKILL.md`](https://raw.githubusercontent.com/lpalbou/AbstractCore/main/skills/abstractcore/SKILL.md);
|
|
256
|
+
keep its `references/` folder alongside it when copying the skill into your agent's skill directory.
|
|
257
|
+
In a source checkout, tell another agent: **Read `skills/abstractcore/SKILL.md` and use its
|
|
258
|
+
references for this task.**
|
|
259
|
+
|
|
260
|
+
The skill covers provider and artifact selection, token/time/cost limits, host-controlled
|
|
261
|
+
tools, sessions, typed output, media and diagnostics. The canonical
|
|
262
|
+
[integration and operations guide](docs/agent-usage.md) contains the same supported workflows;
|
|
263
|
+
source contributors should also read [Contributing](CONTRIBUTING.md).
|
|
264
|
+
|
|
251
265
|
## Why AbstractCore
|
|
252
266
|
|
|
253
267
|
Many libraries can call an LLM. AbstractCore is for the messy middle of real
|
|
@@ -455,7 +469,7 @@ You can also persist settings (including API keys) via the config CLI:
|
|
|
455
469
|
- Embeddings and semantic search → [Embeddings](docs/embeddings.md)
|
|
456
470
|
- Observability: global event bus + interaction traces → [Architecture](docs/architecture.md), [API Reference (Events)](docs/api-reference.md#eventtype), [Interaction Tracing](docs/interaction-tracing.md)
|
|
457
471
|
- MCP (Model Context Protocol): discover tools from MCP servers (HTTP/stdio) → [MCP](docs/mcp.md)
|
|
458
|
-
- Email: one IMAP/SMTP account (password or OAuth2; servers found from the address), encrypted credentials, recipient policy, send limits,
|
|
472
|
+
- Email: one IMAP/SMTP account (password or OAuth2; servers found from the address), encrypted credentials, recipient policy, send limits, Read only or Read and write access, and email tools → [Email](docs/email.md)
|
|
459
473
|
- OpenAI-compatible server: one `/v1` gateway for chat + optional `/v1/images/*` and `/v1/audio/*` endpoints → [Server](docs/server.md)
|
|
460
474
|
|
|
461
475
|
## Tool calling (passthrough by default)
|
|
@@ -512,7 +526,7 @@ Notes:
|
|
|
512
526
|
- **Images**: use a vision-capable model, or configure **vision fallback** for text-only models (`abstractcore --config`; `abstractcore --set-vision-provider PROVIDER MODEL`).
|
|
513
527
|
- **Video**: `video_policy="auto"` (default) uses native video when supported, otherwise samples frames (requires `ffmpeg`/`ffprobe`) and routes them through image/vision handling (so you still need a vision-capable model or vision fallback configured).
|
|
514
528
|
- **Audio**: use an audio-capable model, or set `audio_policy="auto"`/`"speech_to_text"` for speech-to-text through AbstractVoice (part of the light install).
|
|
515
|
-
`abstractvoice`
|
|
529
|
+
`abstractvoice` installs its base plugin path on Python 3.9 without OmniVoice, torch, or torchaudio. Local voice engines and clone backends are part of explicit local aggregate profiles.
|
|
516
530
|
|
|
517
531
|
Configure defaults (optional):
|
|
518
532
|
|
|
@@ -645,11 +659,30 @@ stt_models = llm.voice.list_stt_models()
|
|
|
645
659
|
music_models = llm.capabilities.list_models("music", task="text_to_music")
|
|
646
660
|
```
|
|
647
661
|
|
|
662
|
+
Voices are navigable by engine and by language, and you can create your own:
|
|
663
|
+
|
|
664
|
+
```python
|
|
665
|
+
french = llm.voice.list_voices(language="fr") # native French voices first
|
|
666
|
+
piper = llm.voice.list_voices(provider="piper") # one engine's voices
|
|
667
|
+
languages = llm.voice.list_languages(kind="tts") # languages per engine, no model loaded
|
|
668
|
+
# Each record: voice_id (pass as voice=), name, kind (profile|clone), provider, model, languages, language
|
|
669
|
+
|
|
670
|
+
mira = llm.voice.design_voice("A calm, warm female voice in her thirties.", name="Mira")
|
|
671
|
+
wav = llm.voice.tts("Good morning.", voice=mira["voice_id"], one_shot=True)
|
|
672
|
+
llm.voice.rename_cloned_voice(mira["voice_id"], "Mira (narrator)")
|
|
673
|
+
llm.voice.delete_cloned_voice(mira["voice_id"])
|
|
674
|
+
```
|
|
675
|
+
|
|
676
|
+
`one_shot=True` synthesizes the whole text as one generation, so the take keeps one
|
|
677
|
+
voice from start to end (Qwen3-TTS voices, up to 1000 characters).
|
|
678
|
+
|
|
648
679
|
The HTTP server exposes equivalent discovery at
|
|
649
|
-
`/v1/vision/providers/`, `/v1/vision/models`, `/v1/audio/voices
|
|
650
|
-
`/v1/audio/speech/models`, `/v1/audio/transcriptions/models`,
|
|
651
|
-
`/v1/voice/clone/providers`, plus `/v1/audio/music/providers`
|
|
652
|
-
`/v1/audio/music/models`.
|
|
680
|
+
`/v1/vision/providers/`, `/v1/vision/models`, `/v1/audio/voices` (with `language`),
|
|
681
|
+
`/v1/audio/languages`, `/v1/audio/speech/models`, `/v1/audio/transcriptions/models`,
|
|
682
|
+
`/v1/voice/clone/providers` and `/v1/voice/clones`, plus `/v1/audio/music/providers`
|
|
683
|
+
and `/v1/audio/music/models`. Voices are created and managed with
|
|
684
|
+
`POST /v1/voice/clone`, `POST /v1/voice/design` and
|
|
685
|
+
`GET|PATCH|DELETE /v1/voice/clones/{voice_id}`; see [Server](docs/server.md).
|
|
653
686
|
Generated media HTTP routes include `/v1/images/generations`,
|
|
654
687
|
`/v1/images/edits`, `/v1/videos/generations`, `/v1/videos/edits`, and
|
|
655
688
|
async polling routes under `/v1/vision/jobs/images/*` and
|
|
@@ -64,6 +64,20 @@ For AI assistants and doc-indexing tools, this repository also publishes
|
|
|
64
64
|
[`llms.txt`](llms.txt) and [`llms-full.txt`](llms-full.txt). MCP clients such as
|
|
65
65
|
Context7 can query the public documentation directly as well.
|
|
66
66
|
|
|
67
|
+
## For AI agents
|
|
68
|
+
|
|
69
|
+
Register and use the [`abstractcore` agent skill](https://github.com/lpalbou/AbstractCore/tree/main/skills/abstractcore)
|
|
70
|
+
to write integrations and operate the Python API, CLI and HTTP server. Start by reading
|
|
71
|
+
[`skills/abstractcore/SKILL.md`](https://raw.githubusercontent.com/lpalbou/AbstractCore/main/skills/abstractcore/SKILL.md);
|
|
72
|
+
keep its `references/` folder alongside it when copying the skill into your agent's skill directory.
|
|
73
|
+
In a source checkout, tell another agent: **Read `skills/abstractcore/SKILL.md` and use its
|
|
74
|
+
references for this task.**
|
|
75
|
+
|
|
76
|
+
The skill covers provider and artifact selection, token/time/cost limits, host-controlled
|
|
77
|
+
tools, sessions, typed output, media and diagnostics. The canonical
|
|
78
|
+
[integration and operations guide](docs/agent-usage.md) contains the same supported workflows;
|
|
79
|
+
source contributors should also read [Contributing](CONTRIBUTING.md).
|
|
80
|
+
|
|
67
81
|
## Why AbstractCore
|
|
68
82
|
|
|
69
83
|
Many libraries can call an LLM. AbstractCore is for the messy middle of real
|
|
@@ -271,7 +285,7 @@ You can also persist settings (including API keys) via the config CLI:
|
|
|
271
285
|
- Embeddings and semantic search → [Embeddings](docs/embeddings.md)
|
|
272
286
|
- Observability: global event bus + interaction traces → [Architecture](docs/architecture.md), [API Reference (Events)](docs/api-reference.md#eventtype), [Interaction Tracing](docs/interaction-tracing.md)
|
|
273
287
|
- MCP (Model Context Protocol): discover tools from MCP servers (HTTP/stdio) → [MCP](docs/mcp.md)
|
|
274
|
-
- Email: one IMAP/SMTP account (password or OAuth2; servers found from the address), encrypted credentials, recipient policy, send limits,
|
|
288
|
+
- Email: one IMAP/SMTP account (password or OAuth2; servers found from the address), encrypted credentials, recipient policy, send limits, Read only or Read and write access, and email tools → [Email](docs/email.md)
|
|
275
289
|
- OpenAI-compatible server: one `/v1` gateway for chat + optional `/v1/images/*` and `/v1/audio/*` endpoints → [Server](docs/server.md)
|
|
276
290
|
|
|
277
291
|
## Tool calling (passthrough by default)
|
|
@@ -328,7 +342,7 @@ Notes:
|
|
|
328
342
|
- **Images**: use a vision-capable model, or configure **vision fallback** for text-only models (`abstractcore --config`; `abstractcore --set-vision-provider PROVIDER MODEL`).
|
|
329
343
|
- **Video**: `video_policy="auto"` (default) uses native video when supported, otherwise samples frames (requires `ffmpeg`/`ffprobe`) and routes them through image/vision handling (so you still need a vision-capable model or vision fallback configured).
|
|
330
344
|
- **Audio**: use an audio-capable model, or set `audio_policy="auto"`/`"speech_to_text"` for speech-to-text through AbstractVoice (part of the light install).
|
|
331
|
-
`abstractvoice`
|
|
345
|
+
`abstractvoice` installs its base plugin path on Python 3.9 without OmniVoice, torch, or torchaudio. Local voice engines and clone backends are part of explicit local aggregate profiles.
|
|
332
346
|
|
|
333
347
|
Configure defaults (optional):
|
|
334
348
|
|
|
@@ -461,11 +475,30 @@ stt_models = llm.voice.list_stt_models()
|
|
|
461
475
|
music_models = llm.capabilities.list_models("music", task="text_to_music")
|
|
462
476
|
```
|
|
463
477
|
|
|
478
|
+
Voices are navigable by engine and by language, and you can create your own:
|
|
479
|
+
|
|
480
|
+
```python
|
|
481
|
+
french = llm.voice.list_voices(language="fr") # native French voices first
|
|
482
|
+
piper = llm.voice.list_voices(provider="piper") # one engine's voices
|
|
483
|
+
languages = llm.voice.list_languages(kind="tts") # languages per engine, no model loaded
|
|
484
|
+
# Each record: voice_id (pass as voice=), name, kind (profile|clone), provider, model, languages, language
|
|
485
|
+
|
|
486
|
+
mira = llm.voice.design_voice("A calm, warm female voice in her thirties.", name="Mira")
|
|
487
|
+
wav = llm.voice.tts("Good morning.", voice=mira["voice_id"], one_shot=True)
|
|
488
|
+
llm.voice.rename_cloned_voice(mira["voice_id"], "Mira (narrator)")
|
|
489
|
+
llm.voice.delete_cloned_voice(mira["voice_id"])
|
|
490
|
+
```
|
|
491
|
+
|
|
492
|
+
`one_shot=True` synthesizes the whole text as one generation, so the take keeps one
|
|
493
|
+
voice from start to end (Qwen3-TTS voices, up to 1000 characters).
|
|
494
|
+
|
|
464
495
|
The HTTP server exposes equivalent discovery at
|
|
465
|
-
`/v1/vision/providers/`, `/v1/vision/models`, `/v1/audio/voices
|
|
466
|
-
`/v1/audio/speech/models`, `/v1/audio/transcriptions/models`,
|
|
467
|
-
`/v1/voice/clone/providers`, plus `/v1/audio/music/providers`
|
|
468
|
-
`/v1/audio/music/models`.
|
|
496
|
+
`/v1/vision/providers/`, `/v1/vision/models`, `/v1/audio/voices` (with `language`),
|
|
497
|
+
`/v1/audio/languages`, `/v1/audio/speech/models`, `/v1/audio/transcriptions/models`,
|
|
498
|
+
`/v1/voice/clone/providers` and `/v1/voice/clones`, plus `/v1/audio/music/providers`
|
|
499
|
+
and `/v1/audio/music/models`. Voices are created and managed with
|
|
500
|
+
`POST /v1/voice/clone`, `POST /v1/voice/design` and
|
|
501
|
+
`GET|PATCH|DELETE /v1/voice/clones/{voice_id}`; see [Server](docs/server.md).
|
|
469
502
|
Generated media HTTP routes include `/v1/images/generations`,
|
|
470
503
|
`/v1/images/edits`, `/v1/videos/generations`, `/v1/videos/edits`, and
|
|
471
504
|
async polling routes under `/v1/vision/jobs/images/*` and
|
|
@@ -280,6 +280,9 @@ def _partial_match_is_prefix_aligned(name_lower: str, key_lower: str) -> bool:
|
|
|
280
280
|
return longer[len(shorter)] in _MODEL_NAME_BOUNDARY_CHARS
|
|
281
281
|
|
|
282
282
|
|
|
283
|
+
_HF_CACHE_SNAPSHOT_RE = re.compile(r"models--([^/]+?)--([^/]+)/snapshots/[^/]+(?:/(?:.*/)?([^/]+))?/?$")
|
|
284
|
+
|
|
285
|
+
|
|
283
286
|
def resolve_model_alias(model_name: str, models: Dict[str, Any]) -> str:
|
|
284
287
|
"""
|
|
285
288
|
Resolve a model name to its canonical name by checking aliases.
|
|
@@ -310,6 +313,21 @@ def resolve_model_alias(model_name: str, models: Dict[str, Any]) -> str:
|
|
|
310
313
|
if model_name in models:
|
|
311
314
|
_resolved_aliases_cache[model_name] = model_name
|
|
312
315
|
return model_name
|
|
316
|
+
|
|
317
|
+
# A Hugging Face cache snapshot PATH (`.../models--org--name/snapshots/<rev>[/file]`)
|
|
318
|
+
# names its repo only in the `models--` segment; the tail is a revision hash (or a
|
|
319
|
+
# file). Resolve it as the repo id (then the file name), so a request made through
|
|
320
|
+
# the local path gets the same registry entry as one made through the repo id.
|
|
321
|
+
snapshot = _HF_CACHE_SNAPSHOT_RE.search(str(model_name or "").replace("\\", "/"))
|
|
322
|
+
if snapshot:
|
|
323
|
+
repo_id = f"{snapshot.group(1)}/{snapshot.group(2)}"
|
|
324
|
+
for candidate in (repo_id, snapshot.group(3)):
|
|
325
|
+
if not candidate:
|
|
326
|
+
continue
|
|
327
|
+
resolved = resolve_model_alias(candidate, models)
|
|
328
|
+
if resolved in models:
|
|
329
|
+
_resolved_aliases_cache[model_name] = resolved
|
|
330
|
+
return resolved
|
|
313
331
|
direct_lower_match = canonical_lower_map.get(str(model_name or "").strip().lower())
|
|
314
332
|
if direct_lower_match is not None:
|
|
315
333
|
_resolved_aliases_cache[model_name] = direct_lower_match
|
|
@@ -17,6 +17,7 @@ text. The typed object form makes the surface kind explicit:
|
|
|
17
17
|
"low_effort_template_kwarg": "low_effort",
|
|
18
18
|
"request_param": "reasoning_effort",
|
|
19
19
|
"effort_template_kwarg": "reasoning_effort",
|
|
20
|
+
"effort_disable_value": "no_think",
|
|
20
21
|
"effort_system_lines": {"xhigh": "…", "medium": "", "low": "…"}
|
|
21
22
|
}
|
|
22
23
|
```
|
|
@@ -41,6 +42,13 @@ Semantics:
|
|
|
41
42
|
- ``effort_template_kwarg``: string chat-template variable selecting a reasoning-effort
|
|
42
43
|
level (Qwen3.8 ``reasoning_effort``), sent via ``chat_template_kwargs`` by providers whose
|
|
43
44
|
backend renders the template.
|
|
45
|
+
- ``effort_disable_value``: the value of ``effort_template_kwarg`` that turns reasoning OFF,
|
|
46
|
+
for templates whose ONE effort variable is also the on/off switch and that have no
|
|
47
|
+
boolean ``template_kwarg`` (HY V3 / Hy-Memory: ``reasoning_effort`` in
|
|
48
|
+
``high | low | no_think``). Providers that render the template send this value for
|
|
49
|
+
``thinking="off"`` and, for a bare ``thinking="on"``, the model's preferred declared
|
|
50
|
+
``reasoning_levels`` entry (``medium``, then ``high``, then ``low``) — never a boolean
|
|
51
|
+
``enable_thinking`` the template would silently ignore. Not a level name.
|
|
44
52
|
- ``effort_system_lines``: level -> exact instruction sentence the model's own chat template
|
|
45
53
|
prepends to the system block for that effort level. Lets locally-serializing providers
|
|
46
54
|
(MLX) reproduce the template's effort control byte-for-byte. An EMPTY string value means
|
|
@@ -62,6 +70,7 @@ _SURFACE_KEYS = (
|
|
|
62
70
|
"low_effort_template_kwarg",
|
|
63
71
|
"request_param",
|
|
64
72
|
"effort_template_kwarg",
|
|
73
|
+
"effort_disable_value",
|
|
65
74
|
)
|
|
66
75
|
|
|
67
76
|
_MAPPING_SURFACE_KEYS = ("effort_system_lines",)
|
|
@@ -78,11 +87,21 @@ class ThinkingControlSurfaces:
|
|
|
78
87
|
low_effort_template_kwarg: Optional[str] = None
|
|
79
88
|
request_param: Optional[str] = None
|
|
80
89
|
effort_template_kwarg: Optional[str] = None
|
|
90
|
+
effort_disable_value: Optional[str] = None
|
|
81
91
|
effort_system_lines: Optional[Mapping[str, str]] = None
|
|
82
92
|
|
|
83
93
|
def any_declared(self) -> bool:
|
|
84
94
|
return any(getattr(self, f.name) is not None for f in fields(self))
|
|
85
95
|
|
|
96
|
+
def effort_is_switch(self) -> bool:
|
|
97
|
+
"""True when the effort template variable is ALSO the on/off switch.
|
|
98
|
+
|
|
99
|
+
Declared by ``effort_disable_value`` together with ``effort_template_kwarg`` and
|
|
100
|
+
no boolean ``template_kwarg``: thinking off/on are both expressed as values of
|
|
101
|
+
the one effort variable (HY V3 ``reasoning_effort=no_think`` / ``low`` / ``high``).
|
|
102
|
+
"""
|
|
103
|
+
return bool(self.effort_template_kwarg and self.effort_disable_value and not self.template_kwarg)
|
|
104
|
+
|
|
86
105
|
|
|
87
106
|
def _coerce_surface_value(value: Any) -> Optional[str]:
|
|
88
107
|
if not isinstance(value, str):
|
|
@@ -168,7 +187,38 @@ def resolve_thinking_control_surfaces(
|
|
|
168
187
|
return ThinkingControlSurfaces(**merged)
|
|
169
188
|
|
|
170
189
|
|
|
190
|
+
_EFFORT_ON_PREFERENCE = ("medium", "high", "low")
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
def effort_switch_value(
|
|
194
|
+
surfaces: ThinkingControlSurfaces,
|
|
195
|
+
*,
|
|
196
|
+
enabled: Optional[bool],
|
|
197
|
+
level: Optional[str],
|
|
198
|
+
declared_levels: Optional[list] = None,
|
|
199
|
+
) -> Optional[str]:
|
|
200
|
+
"""Value for an effort-switch template variable (see ``effort_is_switch``).
|
|
201
|
+
|
|
202
|
+
- ``enabled is False`` -> ``effort_disable_value``;
|
|
203
|
+
- an explicit ``level`` -> that level when declared (or when no levels are declared);
|
|
204
|
+
- a bare on -> the first of medium/high/low present in ``declared_levels``.
|
|
205
|
+
Returns None when the surface is not an effort switch or no honest value exists
|
|
206
|
+
(callers must then decline the claim, never guess).
|
|
207
|
+
"""
|
|
208
|
+
if not surfaces.effort_is_switch():
|
|
209
|
+
return None
|
|
210
|
+
declared = [str(x).strip().lower() for x in (declared_levels or []) if isinstance(x, str) and x.strip()]
|
|
211
|
+
if enabled is False:
|
|
212
|
+
return surfaces.effort_disable_value
|
|
213
|
+
if isinstance(level, str) and level:
|
|
214
|
+
return level if (not declared or level in declared) else None
|
|
215
|
+
if enabled is True:
|
|
216
|
+
return next((x for x in _EFFORT_ON_PREFERENCE if x in declared), None)
|
|
217
|
+
return None
|
|
218
|
+
|
|
219
|
+
|
|
171
220
|
__all__ = [
|
|
172
221
|
"ThinkingControlSurfaces",
|
|
222
|
+
"effort_switch_value",
|
|
173
223
|
"resolve_thinking_control_surfaces",
|
|
174
224
|
]
|
|
@@ -1248,6 +1248,51 @@
|
|
|
1248
1248
|
"tencent/hy3"
|
|
1249
1249
|
]
|
|
1250
1250
|
},
|
|
1251
|
+
"hy_v3": {
|
|
1252
|
+
"description": "Tencent HY V3 compact MoE (HYV3ForCausalLM; model_type 'hy_v3', GGUF general.architecture 'hy_v3'): Tencent Hy-Memory-30B-A3B long-term-memory writer (~30B total / ~3B active, 128 routed + 1 shared experts; October 2026). BOS then bare system text, <|hy_User|>/<|hy_Assistant|> role tokens, plain <think> tags, ONE reasoning_effort template variable (high|low|no_think; unset or unknown = no_think, so thinking is OFF by default) and <tool_calls><tool_call>name<tool_sep><arg_key>/<arg_value> tool blocks. Distinct from the 295B Hy3 (hunyuan3), which uses ':opensource'-suffixed tokens",
|
|
1253
|
+
"message_format": "special_tokens",
|
|
1254
|
+
"system_prefix": "<|hy_begin▁of▁sentence|>",
|
|
1255
|
+
"system_suffix": "",
|
|
1256
|
+
"user_prefix": "<|hy_User|>",
|
|
1257
|
+
"user_suffix": "",
|
|
1258
|
+
"assistant_prefix": "<|hy_Assistant|>",
|
|
1259
|
+
"assistant_suffix": "<eos:6124c78e>",
|
|
1260
|
+
"output_wrappers": {
|
|
1261
|
+
"end": "<eos:6124c78e>"
|
|
1262
|
+
},
|
|
1263
|
+
"tool_format": "glm_xml",
|
|
1264
|
+
"tool_prefix": "<tool_calls>",
|
|
1265
|
+
"tool_calling_format": "<tool_calls>\n<tool_call>function_name<tool_sep>\n<arg_key>key</arg_key>\n<arg_value>value</arg_value>\n</tool_call>\n</tool_calls>",
|
|
1266
|
+
"default_tool_support": "native",
|
|
1267
|
+
"thinking_tags": [
|
|
1268
|
+
"<think>",
|
|
1269
|
+
"</think>"
|
|
1270
|
+
],
|
|
1271
|
+
"thinking_output_field": "reasoning_content",
|
|
1272
|
+
"thinking_control": {
|
|
1273
|
+
"effort_template_kwarg": "reasoning_effort",
|
|
1274
|
+
"effort_disable_value": "no_think",
|
|
1275
|
+
"request_param": "reasoning_effort"
|
|
1276
|
+
},
|
|
1277
|
+
"reasoning_support": true,
|
|
1278
|
+
"reasoning_levels": [
|
|
1279
|
+
"low",
|
|
1280
|
+
"high"
|
|
1281
|
+
],
|
|
1282
|
+
"inference_parameters": {
|
|
1283
|
+
"temperature": 0.7,
|
|
1284
|
+
"top_p": 1.0,
|
|
1285
|
+
"repeat_penalty": 1.0
|
|
1286
|
+
},
|
|
1287
|
+
"patterns": [
|
|
1288
|
+
"tencent/hy-memory",
|
|
1289
|
+
"/hy-memory",
|
|
1290
|
+
"hy-memory-30b",
|
|
1291
|
+
"hy-memory-step",
|
|
1292
|
+
"hy3a3b",
|
|
1293
|
+
"hy3a3b-memrl1009-step250"
|
|
1294
|
+
]
|
|
1295
|
+
},
|
|
1251
1296
|
"longcat": {
|
|
1252
1297
|
"description": "Meituan LongCat 2.0 large-scale MoE with LongCat Sparse Attention (July 2026; dedicated <longcat_*> role/thinking/tool special tokens — serve via OpenAI-compatible stacks)",
|
|
1253
1298
|
"message_format": "openai_chat",
|
|
@@ -1086,6 +1086,44 @@
|
|
|
1086
1086
|
]
|
|
1087
1087
|
}
|
|
1088
1088
|
},
|
|
1089
|
+
"claude-haiku-5-5": {
|
|
1090
|
+
"max_output_tokens": 128000,
|
|
1091
|
+
"tool_support": "native",
|
|
1092
|
+
"structured_output": "native",
|
|
1093
|
+
"parallel_tools": true,
|
|
1094
|
+
"max_tools": -1,
|
|
1095
|
+
"vision_support": true,
|
|
1096
|
+
"audio_support": false,
|
|
1097
|
+
"thinking_support": true,
|
|
1098
|
+
"thinking_budget": true,
|
|
1099
|
+
"thinking_control_mode": "adaptive",
|
|
1100
|
+
"max_effort_supported": true,
|
|
1101
|
+
"reasoning_levels": [
|
|
1102
|
+
"low",
|
|
1103
|
+
"medium",
|
|
1104
|
+
"high",
|
|
1105
|
+
"xhigh"
|
|
1106
|
+
],
|
|
1107
|
+
"notes": "Anthropic Haiku tier, 5th generation (released 2026-10-07), for high-volume, latency-sensitive work (classification, routing, extraction, subagents). Official docs: text and image input, text output, 1M context, 128K max output (300K on the Message Batches API with the output-300k-2026-03-24 beta header), adaptive thinking on by default, effort parameter with all five levels low|medium|high|xhigh|max (default medium; max is not in the unified thinking vocabulary, see max_effort_supported). thinking:{type:disabled} is accepted at effort high or below and returns 400 at xhigh/max. Omit temperature, top_p and top_k. Newer tokenizer (about 30% more tokens than Haiku 4.5 for the same text); 512-token prompt-cache minimum. Observed via OpenAI-compatible proxy 2026-10-25: /v1/chat/completions rejects reasoning_effort 'none' and accepts low|medium|high|xhigh|max.",
|
|
1108
|
+
"source": "Anthropic docs: platform.claude.com/docs/en/models/haiku-5-5/overview, /docs/en/about-claude/models/overview and /docs/en/build-with-claude/effort (accessed 2026-10-25); reasoning_effort acceptance observed via OpenAI-compatible proxy 2026-10-25",
|
|
1109
|
+
"canonical_name": "claude-haiku-5-5",
|
|
1110
|
+
"aliases": [
|
|
1111
|
+
"anthropic/claude-haiku-5-5"
|
|
1112
|
+
],
|
|
1113
|
+
"max_tokens": 1000000,
|
|
1114
|
+
"video_support": false,
|
|
1115
|
+
"video_input_mode": "frames",
|
|
1116
|
+
"capability_routes": {
|
|
1117
|
+
"input": [
|
|
1118
|
+
"text",
|
|
1119
|
+
"image",
|
|
1120
|
+
"video"
|
|
1121
|
+
],
|
|
1122
|
+
"output": [
|
|
1123
|
+
"text"
|
|
1124
|
+
]
|
|
1125
|
+
}
|
|
1126
|
+
},
|
|
1089
1127
|
"cogito:3b": {
|
|
1090
1128
|
"max_output_tokens": 4096,
|
|
1091
1129
|
"tool_support": "native",
|
|
@@ -5643,6 +5681,41 @@
|
|
|
5643
5681
|
]
|
|
5644
5682
|
}
|
|
5645
5683
|
},
|
|
5684
|
+
"gpt-6-luna": {
|
|
5685
|
+
"max_output_tokens": 128000,
|
|
5686
|
+
"tool_support": "native",
|
|
5687
|
+
"structured_output": "native",
|
|
5688
|
+
"parallel_tools": true,
|
|
5689
|
+
"max_tools": -1,
|
|
5690
|
+
"vision_support": true,
|
|
5691
|
+
"audio_support": false,
|
|
5692
|
+
"thinking_support": true,
|
|
5693
|
+
"token_param_name": "max_completion_tokens",
|
|
5694
|
+
"reasoning_levels": [
|
|
5695
|
+
"none",
|
|
5696
|
+
"low",
|
|
5697
|
+
"medium",
|
|
5698
|
+
"high",
|
|
5699
|
+
"xhigh"
|
|
5700
|
+
],
|
|
5701
|
+
"max_effort_supported": true,
|
|
5702
|
+
"notes": "GPT-6 family efficient model for focused, high-volume tasks (successor of gpt-5.6-luna). Official model page: 1,050,000-token context window, 922,000 max input, 128,000 max output; reasoning token support; reasoning.effort none|low|medium|high|xhigh|max, default medium (max is not in the unified thinking vocabulary, see max_effort_supported); knowledge cutoff 2026-05-18; text+image input, text output; streaming, structured outputs, function calling, prompt caching; Chat Completions, Responses and Batch endpoints. The page notes Chat Completions supports function calling only with reasoning_effort none and recommends the Responses API for tools. max_tokens records the published 1,050,000 window: the 400,000-token Codex-backend session ceiling wire-verified for gpt-5.6-sol is NOT verified for GPT-6. Observed via OpenAI-compatible proxy 2026-10-25: accepts reasoning_effort none|low|medium|high and rejects 'minimal'.",
|
|
5703
|
+
"source": "OpenAI model page developers.openai.com/api/docs/models/gpt-6-luna (accessed 2026-10-25); reasoning_effort acceptance observed via OpenAI-compatible proxy 2026-10-25",
|
|
5704
|
+
"canonical_name": "gpt-6-luna",
|
|
5705
|
+
"aliases": [],
|
|
5706
|
+
"max_tokens": 1050000,
|
|
5707
|
+
"video_support": false,
|
|
5708
|
+
"video_input_mode": "frames",
|
|
5709
|
+
"capability_routes": {
|
|
5710
|
+
"input": [
|
|
5711
|
+
"text",
|
|
5712
|
+
"image"
|
|
5713
|
+
],
|
|
5714
|
+
"output": [
|
|
5715
|
+
"text"
|
|
5716
|
+
]
|
|
5717
|
+
}
|
|
5718
|
+
},
|
|
5646
5719
|
"text-embedding-ada-002": {
|
|
5647
5720
|
"max_output_tokens": 0,
|
|
5648
5721
|
"tool_support": "none",
|
|
@@ -9549,6 +9622,71 @@
|
|
|
9549
9622
|
]
|
|
9550
9623
|
}
|
|
9551
9624
|
},
|
|
9625
|
+
"hy-memory-30b-a3b": {
|
|
9626
|
+
"max_output_tokens": 16384,
|
|
9627
|
+
"tool_support": "native",
|
|
9628
|
+
"structured_output": "prompted",
|
|
9629
|
+
"parallel_tools": true,
|
|
9630
|
+
"vision_support": false,
|
|
9631
|
+
"audio_support": false,
|
|
9632
|
+
"video_support": false,
|
|
9633
|
+
"thinking_support": true,
|
|
9634
|
+
"thinking_tags": [
|
|
9635
|
+
"<think>",
|
|
9636
|
+
"</think>"
|
|
9637
|
+
],
|
|
9638
|
+
"thinking_output_field": "reasoning_content",
|
|
9639
|
+
"thinking_control": {
|
|
9640
|
+
"effort_template_kwarg": "reasoning_effort",
|
|
9641
|
+
"effort_disable_value": "no_think",
|
|
9642
|
+
"request_param": "reasoning_effort"
|
|
9643
|
+
},
|
|
9644
|
+
"reasoning_levels": [
|
|
9645
|
+
"low",
|
|
9646
|
+
"high"
|
|
9647
|
+
],
|
|
9648
|
+
"architecture": "hy_v3",
|
|
9649
|
+
"total_parameters": "30B",
|
|
9650
|
+
"active_parameters": "3B",
|
|
9651
|
+
"experts": 128,
|
|
9652
|
+
"shared_experts": 1,
|
|
9653
|
+
"experts_activated": 8,
|
|
9654
|
+
"license": "Apache-2.0",
|
|
9655
|
+
"release_date": "2026-10-15",
|
|
9656
|
+
"notes": "Specialty seems to be a long-term memory writer: Tencent Hunyuan trained it to execute the WRITE path inside external memory frameworks (drop-in writer LLM for Mem0, MemOS and Hy-Memory; transfers to EverMemOS) — deciding what to retain, how precisely to represent it and how new evidence updates the memory bank. HYV3ForCausalLM (model_type 'hy_v3'): 48 layers, hidden 2048, GQA 32 heads / 4 KV heads (head_dim 128, QK-norm), layer 0 dense (intermediate 6912), layers 1-47 MoE with 128 routed experts (8 activated) + 1 shared expert, sigmoid router with selection-only expert bias, route_norm and router_scaling_factor 2.826; no MTP layers; 120,832-token vocab; default RoPE (theta 11,158,840); config max_position_embeddings 262,144. CHECKPOINT QUIRK: routed and shared expert tensors are 768 wide (config 'expert_hidden_dim': 768) while config 'moe_intermediate_size' says 1536, which is what transformers' hy_v3 (5.8) reads — loaders must size experts from expert_hidden_dim. Chat template: BOS then bare system text, <|hy_User|>/<|hy_Assistant|>, eos <eos:6124c78e>; ONE 'reasoning_effort' template variable (high | low | no_think; unset or unknown renders no_think, so thinking is OFF by default; no_think pre-closes an empty <think></think> after the assistant token, low/high open <think>). Tool calls: <tool_calls><tool_call>name<tool_sep><arg_key>k</arg_key><arg_value>v</arg_value></tool_call></tool_calls> (non-string values JSON-encoded); tool results in <tool_responses><tool_response>. Card quickstart: vLLM (tested v0.31.0), chat_template_kwargs {\"reasoning_effort\": \"no_think\"}, temperature 0.0 and max_tokens 512 for memory extraction; the GGUF card's llama-server defaults are --temp 0.7 --top-k 0 --top-p 1.0 --repeat-penalty 1.0 --jinja with reasoning_effort no_think (inference_parameters mirror temp/top_p; top_k 0 = disabled is left to the backend). No output cap is published: max_output_tokens 16,384 leaves room for a reasoning_effort=high trace plus the memory payload while bounding runaway local generations — raise per deployment. Artifacts: tencent BF16 safetensors (51 shards, 60.1 GB), tencent FP8 (F8_E4M3, vLLM/SGLang only — no Apple-silicon path), tencent GGUF (Q4_K_M-imat 18.2 GB, Q6_K-imat 24.7 GB, Q8_0 32 GB; llama.cpp arch hy_v3), and mlx-community 4-bit / 8-bit MLX conversions that bundle the model class (hy_v3.py via config 'model_file') because mlx-lm ships no hy_v3 module. Paper arXiv 2610.22196; code github.com/Tencent-Hunyuan/Hy-Memory.",
|
|
9657
|
+
"source": "Hugging Face model cards, config.json, tokenizer.json, chat_template.jinja and safetensors index (tencent/Hy-Memory-30B-A3B @64a460a9, tencent/Hy-Memory-30B-A3B-FP8, tencent/Hy-Memory-30B-A3B-GGUF; HF API createdAt 2026-10-15), accessed 2026-10-21",
|
|
9658
|
+
"canonical_name": "hy-memory-30b-a3b",
|
|
9659
|
+
"aliases": [
|
|
9660
|
+
"tencent/Hy-Memory-30B-A3B",
|
|
9661
|
+
"tencent/Hy-Memory-30B-A3B-FP8",
|
|
9662
|
+
"tencent/Hy-Memory-30B-A3B-GGUF",
|
|
9663
|
+
"mlx-community/Hy-Memory-30B-A3B-4bit",
|
|
9664
|
+
"mlx-community/Hy-Memory-30B-A3B-8bit",
|
|
9665
|
+
"hy3a3b-memrl1009-step250-Q4_K_M-imat.gguf",
|
|
9666
|
+
"hy3a3b-memrl1009-step250-Q6_K-imat.gguf",
|
|
9667
|
+
"Hy-Memory-Step250-Q8_0.gguf",
|
|
9668
|
+
"hy3a3b-memrl1009-step250",
|
|
9669
|
+
"hy-memory-step250",
|
|
9670
|
+
"hy-memory-30b-a3b-fp8",
|
|
9671
|
+
"hy-memory-30b-a3b-gguf"
|
|
9672
|
+
],
|
|
9673
|
+
"max_tokens": 262144,
|
|
9674
|
+
"inference_parameters": {
|
|
9675
|
+
"temperature": 0.7,
|
|
9676
|
+
"top_p": 1.0,
|
|
9677
|
+
"repeat_penalty": 1.0
|
|
9678
|
+
},
|
|
9679
|
+
"max_tools": -1,
|
|
9680
|
+
"video_input_mode": "none",
|
|
9681
|
+
"capability_routes": {
|
|
9682
|
+
"input": [
|
|
9683
|
+
"text"
|
|
9684
|
+
],
|
|
9685
|
+
"output": [
|
|
9686
|
+
"text"
|
|
9687
|
+
]
|
|
9688
|
+
}
|
|
9689
|
+
},
|
|
9552
9690
|
"minimax-m3": {
|
|
9553
9691
|
"max_output_tokens": 8192,
|
|
9554
9692
|
"tool_support": "native",
|
{abstractcore-2.26.3 → abstractcore-2.30.0}/abstractcore/assets/model_downloads_catalog.json
RENAMED
|
@@ -3162,6 +3162,71 @@
|
|
|
3162
3162
|
}
|
|
3163
3163
|
]
|
|
3164
3164
|
},
|
|
3165
|
+
{
|
|
3166
|
+
"id": "hy-memory-30b-a3b",
|
|
3167
|
+
"family": "hy-memory",
|
|
3168
|
+
"display_name": "Hy-Memory 30B-A3B",
|
|
3169
|
+
"vendor": "Tencent",
|
|
3170
|
+
"params_total": 30064725888,
|
|
3171
|
+
"params_active": 3000000000,
|
|
3172
|
+
"license": "apache-2.0",
|
|
3173
|
+
"capabilities_key": "hy-memory-30b-a3b",
|
|
3174
|
+
"tags": [
|
|
3175
|
+
"chat",
|
|
3176
|
+
"thinking",
|
|
3177
|
+
"tools",
|
|
3178
|
+
"moe"
|
|
3179
|
+
],
|
|
3180
|
+
"starter": false,
|
|
3181
|
+
"kv_geometry": {
|
|
3182
|
+
"n_layers": 48,
|
|
3183
|
+
"n_kv_heads": 4,
|
|
3184
|
+
"head_dim": 128,
|
|
3185
|
+
"source": "config.json of tencent/Hy-Memory-30B-A3B@64a460a94d54: 48 full-attention layers, GQA 32 query / 4 KV heads"
|
|
3186
|
+
},
|
|
3187
|
+
"artifacts": [
|
|
3188
|
+
{
|
|
3189
|
+
"provider": "mlx",
|
|
3190
|
+
"artifact": "mlx-community/Hy-Memory-30B-A3B-4bit",
|
|
3191
|
+
"quant": "4bit",
|
|
3192
|
+
"download_bytes": 16929648349,
|
|
3193
|
+
"size_source": "catalog",
|
|
3194
|
+
"verified": true,
|
|
3195
|
+
"upstream": {
|
|
3196
|
+
"method": "hf_api",
|
|
3197
|
+
"checked": "2026-10-21",
|
|
3198
|
+
"revision": "65eb23e40d0d61fab54c887f432718491cd51858"
|
|
3199
|
+
}
|
|
3200
|
+
},
|
|
3201
|
+
{
|
|
3202
|
+
"provider": "mlx",
|
|
3203
|
+
"artifact": "mlx-community/Hy-Memory-30B-A3B-8bit",
|
|
3204
|
+
"quant": "8bit",
|
|
3205
|
+
"download_bytes": 31955742589,
|
|
3206
|
+
"size_source": "catalog",
|
|
3207
|
+
"verified": true,
|
|
3208
|
+
"upstream": {
|
|
3209
|
+
"method": "hf_api",
|
|
3210
|
+
"checked": "2026-10-21",
|
|
3211
|
+
"revision": "fe36f0ba3190ae05283429fe69e29b13eedec98f"
|
|
3212
|
+
}
|
|
3213
|
+
},
|
|
3214
|
+
{
|
|
3215
|
+
"provider": "huggingface",
|
|
3216
|
+
"artifact": "tencent/Hy-Memory-30B-A3B-GGUF:Q4_K_M",
|
|
3217
|
+
"quant": "q4_k_m",
|
|
3218
|
+
"download_bytes": 18236702464,
|
|
3219
|
+
"size_source": "catalog",
|
|
3220
|
+
"verified": true,
|
|
3221
|
+
"upstream": {
|
|
3222
|
+
"method": "hf_api",
|
|
3223
|
+
"checked": "2026-10-21",
|
|
3224
|
+
"revision": "7778309f5109ec6e86820c687e638b9589b541a9"
|
|
3225
|
+
}
|
|
3226
|
+
}
|
|
3227
|
+
],
|
|
3228
|
+
"notes": "Long-term memory writer (the write path of Mem0, MemOS and Hy-Memory). Thinking is off by default (reasoning_effort no_think). The MLX repos bundle the hy_v3 model class (config model_file) because mlx-lm ships none; AbstractCore uses its own copy."
|
|
3229
|
+
},
|
|
3165
3230
|
{
|
|
3166
3231
|
"id": "nomic-embed-text-v1.5",
|
|
3167
3232
|
"family": "nomic-embed",
|