abstractcore 2.6.3__tar.gz → 2.6.6__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.6.3 → abstractcore-2.6.6}/PKG-INFO +50 -20
- {abstractcore-2.6.3 → abstractcore-2.6.6}/README.md +28 -15
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/media/utils/image_scaler.py +6 -6
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/providers/__init__.py +4 -0
- abstractcore-2.6.6/abstractcore/providers/openai_compatible_provider.py +829 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/providers/registry.py +37 -1
- abstractcore-2.6.6/abstractcore/providers/vllm_provider.py +823 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/server/app.py +22 -2
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/utils/version.py +1 -1
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/utils/vlm_token_calculator.py +7 -1
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore.egg-info/PKG-INFO +50 -20
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore.egg-info/SOURCES.txt +2 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore.egg-info/requires.txt +25 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/pyproject.toml +36 -2
- {abstractcore-2.6.3 → abstractcore-2.6.6}/LICENSE +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/__init__.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/apps/__init__.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/apps/__main__.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/apps/app_config_utils.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/apps/deepsearch.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/apps/extractor.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/apps/intent.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/apps/judge.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/apps/summarizer.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/architectures/__init__.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/architectures/detection.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/architectures/enums.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/assets/architecture_formats.json +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/assets/model_capabilities.json +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/assets/session_schema.json +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/compression/__init__.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/compression/analytics.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/compression/cache.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/compression/config.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/compression/exceptions.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/compression/glyph_processor.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/compression/optimizer.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/compression/orchestrator.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/compression/pil_text_renderer.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/compression/quality.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/compression/text_formatter.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/compression/vision_compressor.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/config/__init__.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/config/main.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/config/manager.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/config/vision_config.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/core/__init__.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/core/enums.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/core/factory.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/core/interface.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/core/retry.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/core/session.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/core/types.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/download.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/embeddings/__init__.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/embeddings/manager.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/embeddings/models.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/events/__init__.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/exceptions/__init__.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/media/__init__.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/media/auto_handler.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/media/base.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/media/capabilities.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/media/handlers/__init__.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/media/handlers/anthropic_handler.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/media/handlers/local_handler.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/media/handlers/openai_handler.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/media/processors/__init__.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/media/processors/direct_pdf_processor.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/media/processors/glyph_pdf_processor.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/media/processors/image_processor.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/media/processors/office_processor.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/media/processors/pdf_processor.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/media/processors/text_processor.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/media/types.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/media/utils/__init__.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/media/vision_fallback.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/processing/__init__.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/processing/basic_deepsearch.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/processing/basic_extractor.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/processing/basic_intent.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/processing/basic_judge.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/processing/basic_summarizer.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/providers/anthropic_provider.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/providers/base.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/providers/huggingface_provider.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/providers/lmstudio_provider.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/providers/mlx_provider.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/providers/model_capabilities.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/providers/ollama_provider.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/providers/openai_provider.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/providers/streaming.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/server/__init__.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/structured/__init__.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/structured/handler.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/structured/retry.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/tools/__init__.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/tools/common_tools.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/tools/core.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/tools/handler.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/tools/parser.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/tools/registry.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/tools/syntax_rewriter.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/tools/tag_rewriter.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/utils/__init__.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/utils/cli.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/utils/message_preprocessor.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/utils/self_fixes.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/utils/structured_logging.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/utils/token_utils.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore/utils/trace_export.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore.egg-info/dependency_links.txt +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore.egg-info/entry_points.txt +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/abstractcore.egg-info/top_level.txt +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/setup.cfg +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/tests/test_agentic_cli_compatibility.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/tests/test_basic_session.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/tests/test_complete_integration.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/tests/test_comprehensive_events.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/tests/test_core_components.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/tests/test_enhanced_prompt.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/tests/test_environment_variable_tool_call_tags.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/tests/test_factory.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/tests/test_final_accuracy.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/tests/test_final_comprehensive.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/tests/test_final_graceful_errors.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/tests/test_graceful_fallback.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/tests/test_import_debug.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/tests/test_integrated_functionality.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/tests/test_retry_observability.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/tests/test_retry_strategy.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/tests/test_seed_determinism.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/tests/test_seed_temperature_basic.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/tests/test_sensory_prompting.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/tests/test_text_only_model_experience.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/tests/test_unload_memory.py +0 -0
- {abstractcore-2.6.3 → abstractcore-2.6.6}/tests/test_user_scenario_validation.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: abstractcore
|
|
3
|
-
Version: 2.6.
|
|
3
|
+
Version: 2.6.6
|
|
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>
|
|
@@ -47,6 +47,8 @@ Provides-Extra: mlx
|
|
|
47
47
|
Requires-Dist: mlx<1.0.0,>=0.15.0; extra == "mlx"
|
|
48
48
|
Requires-Dist: mlx-lm<1.0.0,>=0.15.0; extra == "mlx"
|
|
49
49
|
Requires-Dist: outlines>=0.1.0; extra == "mlx"
|
|
50
|
+
Provides-Extra: vllm
|
|
51
|
+
Requires-Dist: vllm<1.0.0,>=0.6.0; extra == "vllm"
|
|
50
52
|
Provides-Extra: embeddings
|
|
51
53
|
Requires-Dist: sentence-transformers<6.0.0,>=5.1.0; extra == "embeddings"
|
|
52
54
|
Requires-Dist: numpy<2.0.0,>=1.20.0; extra == "embeddings"
|
|
@@ -62,21 +64,36 @@ Requires-Dist: pymupdf4llm<1.0.0,>=0.0.20; extra == "media"
|
|
|
62
64
|
Requires-Dist: unstructured[office]<1.0.0,>=0.10.0; extra == "media"
|
|
63
65
|
Requires-Dist: pandas<3.0.0,>=1.0.0; extra == "media"
|
|
64
66
|
Provides-Extra: compression
|
|
67
|
+
Requires-Dist: abstractcore[media]; extra == "compression"
|
|
65
68
|
Requires-Dist: pdf2image<2.0.0,>=1.16.0; extra == "compression"
|
|
66
69
|
Provides-Extra: api-providers
|
|
67
70
|
Requires-Dist: abstractcore[anthropic,openai]; extra == "api-providers"
|
|
68
71
|
Provides-Extra: local-providers
|
|
69
72
|
Requires-Dist: abstractcore[lmstudio,mlx,ollama]; extra == "local-providers"
|
|
70
|
-
Provides-Extra: local-providers-
|
|
71
|
-
Requires-Dist: abstractcore[lmstudio,ollama]; extra == "local-providers-
|
|
73
|
+
Provides-Extra: local-providers-apple
|
|
74
|
+
Requires-Dist: abstractcore[lmstudio,mlx,ollama]; extra == "local-providers-apple"
|
|
75
|
+
Provides-Extra: local-providers-gpu
|
|
76
|
+
Requires-Dist: abstractcore[lmstudio,ollama,vllm]; extra == "local-providers-gpu"
|
|
77
|
+
Provides-Extra: gpu-providers
|
|
78
|
+
Requires-Dist: abstractcore[huggingface,vllm]; extra == "gpu-providers"
|
|
72
79
|
Provides-Extra: heavy-providers
|
|
73
80
|
Requires-Dist: abstractcore[huggingface]; extra == "heavy-providers"
|
|
74
81
|
Provides-Extra: all-providers
|
|
75
|
-
Requires-Dist: abstractcore[anthropic,embeddings,huggingface,lmstudio,mlx,ollama,openai]; extra == "all-providers"
|
|
82
|
+
Requires-Dist: abstractcore[anthropic,embeddings,huggingface,lmstudio,mlx,ollama,openai,vllm]; extra == "all-providers"
|
|
83
|
+
Provides-Extra: all-providers-apple
|
|
84
|
+
Requires-Dist: abstractcore[anthropic,embeddings,huggingface,lmstudio,mlx,ollama,openai]; extra == "all-providers-apple"
|
|
85
|
+
Provides-Extra: all-providers-gpu
|
|
86
|
+
Requires-Dist: abstractcore[anthropic,embeddings,huggingface,lmstudio,ollama,openai,vllm]; extra == "all-providers-gpu"
|
|
76
87
|
Provides-Extra: all-providers-non-mlx
|
|
77
88
|
Requires-Dist: abstractcore[anthropic,embeddings,huggingface,lmstudio,ollama,openai]; extra == "all-providers-non-mlx"
|
|
89
|
+
Provides-Extra: local-providers-non-mlx
|
|
90
|
+
Requires-Dist: abstractcore[lmstudio,ollama]; extra == "local-providers-non-mlx"
|
|
78
91
|
Provides-Extra: all
|
|
79
|
-
Requires-Dist: abstractcore[anthropic,compression,dev,docs,embeddings,huggingface,lmstudio,media,mlx,ollama,openai,processing,server,test,tools]; extra == "all"
|
|
92
|
+
Requires-Dist: abstractcore[anthropic,compression,dev,docs,embeddings,huggingface,lmstudio,media,mlx,ollama,openai,processing,server,test,tools,vllm]; extra == "all"
|
|
93
|
+
Provides-Extra: all-apple
|
|
94
|
+
Requires-Dist: abstractcore[anthropic,compression,dev,docs,embeddings,huggingface,lmstudio,media,mlx,ollama,openai,processing,server,test,tools]; extra == "all-apple"
|
|
95
|
+
Provides-Extra: all-gpu
|
|
96
|
+
Requires-Dist: abstractcore[anthropic,compression,dev,docs,embeddings,huggingface,lmstudio,media,ollama,openai,processing,server,test,tools,vllm]; extra == "all-gpu"
|
|
80
97
|
Provides-Extra: all-non-mlx
|
|
81
98
|
Requires-Dist: abstractcore[anthropic,compression,dev,docs,embeddings,huggingface,lmstudio,media,ollama,openai,processing,server,test,tools]; extra == "all-non-mlx"
|
|
82
99
|
Provides-Extra: lightweight
|
|
@@ -480,8 +497,9 @@ if response.metadata and response.metadata.get('compression_used'):
|
|
|
480
497
|
## Key Features
|
|
481
498
|
|
|
482
499
|
- **Offline-First Design**: Built primarily for open source LLMs with full offline capability. Download once, run forever without internet access
|
|
483
|
-
- **Provider Agnostic**: Seamlessly switch between OpenAI, Anthropic, Ollama, LMStudio, MLX, HuggingFace
|
|
484
|
-
- **Async/Await Support** ⭐ NEW in v2.6.0: Native async support for concurrent requests with `asyncio.gather()` - works with all
|
|
500
|
+
- **Provider Agnostic**: Seamlessly switch between OpenAI, Anthropic, Ollama, LMStudio, MLX, HuggingFace, vLLM, and any OpenAI-compatible endpoint
|
|
501
|
+
- **Async/Await Support** ⭐ NEW in v2.6.0: Native async support for concurrent requests with `asyncio.gather()` - works with all providers
|
|
502
|
+
- **Dynamic Endpoint Configuration** ⭐ NEW in v2.6.5: Pass `base_url` in POST requests to connect to custom OpenAI-compatible endpoints without environment variables
|
|
485
503
|
- **Interaction Tracing**: Complete LLM observability with programmatic access to prompts, responses, tokens, timing, and trace correlation for debugging, trust, and compliance
|
|
486
504
|
- **Glyph Visual-Text Compression**: Revolutionary compression system that renders text as optimized images for 3-4x token compression and faster inference
|
|
487
505
|
- **Centralized Configuration**: Global defaults and app-specific preferences at `~/.abstractcore/config/abstractcore.json`
|
|
@@ -498,14 +516,16 @@ if response.metadata and response.metadata.get('compression_used'):
|
|
|
498
516
|
|
|
499
517
|
## Supported Providers
|
|
500
518
|
|
|
501
|
-
| Provider | Status | SEED Support | Setup |
|
|
502
|
-
|
|
503
|
-
| **OpenAI** | Full | Native | [Get API key](docs/prerequisites.md#openai-setup) |
|
|
504
|
-
| **Anthropic** | Full | Warning* | [Get API key](docs/prerequisites.md#anthropic-setup) |
|
|
505
|
-
| **Ollama** | Full | Native | [Install guide](docs/prerequisites.md#ollama-setup) |
|
|
506
|
-
| **LMStudio** | Full | Native | [Install guide](docs/prerequisites.md#lmstudio-setup) |
|
|
507
|
-
| **MLX** | Full | Native | [Setup guide](docs/prerequisites.md#mlx-setup) |
|
|
508
|
-
| **HuggingFace** | Full | Native | [Setup guide](docs/prerequisites.md#huggingface-setup) |
|
|
519
|
+
| Provider | Status | SEED Support | Hardware | Setup |
|
|
520
|
+
|----------|--------|-------------|----------|-------|
|
|
521
|
+
| **OpenAI** | Full | Native | Any | [Get API key](docs/prerequisites.md#openai-setup) |
|
|
522
|
+
| **Anthropic** | Full | Warning* | Any | [Get API key](docs/prerequisites.md#anthropic-setup) |
|
|
523
|
+
| **Ollama** | Full | Native | Any | [Install guide](docs/prerequisites.md#ollama-setup) |
|
|
524
|
+
| **LMStudio** | Full | Native | Any | [Install guide](docs/prerequisites.md#lmstudio-setup) |
|
|
525
|
+
| **MLX** | Full | Native | **Apple Silicon only** | [Setup guide](docs/prerequisites.md#mlx-setup) |
|
|
526
|
+
| **HuggingFace** | Full | Native | Any | [Setup guide](docs/prerequisites.md#huggingface-setup) |
|
|
527
|
+
| **vLLM** | Full | Native | **NVIDIA CUDA only** | [Setup guide](docs/prerequisites.md#vllm-setup) |
|
|
528
|
+
| **OpenAI-Compatible** ⭐ NEW | Full | Native | Any | Works with llama.cpp, text-generation-webui, LocalAI, etc. |
|
|
509
529
|
|
|
510
530
|
*Anthropic doesn't support seed parameters but issues a warning when provided. Use `temperature=0.0` for more consistent outputs.
|
|
511
531
|
|
|
@@ -1024,7 +1044,8 @@ pip install abstractcore[anthropic]
|
|
|
1024
1044
|
pip install abstractcore[ollama]
|
|
1025
1045
|
pip install abstractcore[lmstudio]
|
|
1026
1046
|
pip install abstractcore[huggingface]
|
|
1027
|
-
pip install abstractcore[mlx]
|
|
1047
|
+
pip install abstractcore[mlx] # macOS/Apple Silicon only
|
|
1048
|
+
pip install abstractcore[vllm] # NVIDIA CUDA only (Linux)
|
|
1028
1049
|
|
|
1029
1050
|
# With server support
|
|
1030
1051
|
pip install abstractcore[server]
|
|
@@ -1032,20 +1053,29 @@ pip install abstractcore[server]
|
|
|
1032
1053
|
# With embeddings
|
|
1033
1054
|
pip install abstractcore[embeddings]
|
|
1034
1055
|
|
|
1035
|
-
#
|
|
1056
|
+
# With compression (Glyph visual-text compression)
|
|
1057
|
+
pip install abstractcore[compression]
|
|
1058
|
+
|
|
1059
|
+
# Everything (recommended for Apple Silicon)
|
|
1036
1060
|
pip install abstractcore[all]
|
|
1037
1061
|
|
|
1038
|
-
# Cross-platform (all except MLX - for Linux/Windows)
|
|
1062
|
+
# Cross-platform (all except MLX/vLLM - for Linux/Windows/Intel Mac)
|
|
1039
1063
|
pip install abstractcore[all-non-mlx]
|
|
1040
1064
|
|
|
1041
1065
|
# Provider groups
|
|
1042
|
-
pip install abstractcore[all-providers] # All providers (includes MLX)
|
|
1043
|
-
pip install abstractcore[all-providers-non-mlx] # All providers except MLX
|
|
1066
|
+
pip install abstractcore[all-providers] # All providers (includes MLX, excludes vLLM)
|
|
1067
|
+
pip install abstractcore[all-providers-non-mlx] # All providers except MLX (excludes vLLM)
|
|
1044
1068
|
pip install abstractcore[local-providers] # Ollama, LMStudio, MLX
|
|
1045
1069
|
pip install abstractcore[local-providers-non-mlx] # Ollama, LMStudio only
|
|
1046
1070
|
pip install abstractcore[api-providers] # OpenAI, Anthropic
|
|
1071
|
+
pip install abstractcore[gpu-providers] # vLLM (NVIDIA CUDA only)
|
|
1047
1072
|
```
|
|
1048
1073
|
|
|
1074
|
+
**Hardware-Specific Notes:**
|
|
1075
|
+
- **MLX**: Requires Apple Silicon (M1/M2/M3/M4). Will not work on Intel Macs or other platforms.
|
|
1076
|
+
- **vLLM**: Requires NVIDIA GPUs with CUDA support. Will not work on Apple Silicon, AMD GPUs, or Intel integrated graphics.
|
|
1077
|
+
- **All other providers** (OpenAI, Anthropic, Ollama, LMStudio, HuggingFace): Work on any hardware.
|
|
1078
|
+
|
|
1049
1079
|
**Media processing extras:**
|
|
1050
1080
|
```bash
|
|
1051
1081
|
# For PDF processing
|
|
@@ -368,8 +368,9 @@ if response.metadata and response.metadata.get('compression_used'):
|
|
|
368
368
|
## Key Features
|
|
369
369
|
|
|
370
370
|
- **Offline-First Design**: Built primarily for open source LLMs with full offline capability. Download once, run forever without internet access
|
|
371
|
-
- **Provider Agnostic**: Seamlessly switch between OpenAI, Anthropic, Ollama, LMStudio, MLX, HuggingFace
|
|
372
|
-
- **Async/Await Support** ⭐ NEW in v2.6.0: Native async support for concurrent requests with `asyncio.gather()` - works with all
|
|
371
|
+
- **Provider Agnostic**: Seamlessly switch between OpenAI, Anthropic, Ollama, LMStudio, MLX, HuggingFace, vLLM, and any OpenAI-compatible endpoint
|
|
372
|
+
- **Async/Await Support** ⭐ NEW in v2.6.0: Native async support for concurrent requests with `asyncio.gather()` - works with all providers
|
|
373
|
+
- **Dynamic Endpoint Configuration** ⭐ NEW in v2.6.5: Pass `base_url` in POST requests to connect to custom OpenAI-compatible endpoints without environment variables
|
|
373
374
|
- **Interaction Tracing**: Complete LLM observability with programmatic access to prompts, responses, tokens, timing, and trace correlation for debugging, trust, and compliance
|
|
374
375
|
- **Glyph Visual-Text Compression**: Revolutionary compression system that renders text as optimized images for 3-4x token compression and faster inference
|
|
375
376
|
- **Centralized Configuration**: Global defaults and app-specific preferences at `~/.abstractcore/config/abstractcore.json`
|
|
@@ -386,14 +387,16 @@ if response.metadata and response.metadata.get('compression_used'):
|
|
|
386
387
|
|
|
387
388
|
## Supported Providers
|
|
388
389
|
|
|
389
|
-
| Provider | Status | SEED Support | Setup |
|
|
390
|
-
|
|
391
|
-
| **OpenAI** | Full | Native | [Get API key](docs/prerequisites.md#openai-setup) |
|
|
392
|
-
| **Anthropic** | Full | Warning* | [Get API key](docs/prerequisites.md#anthropic-setup) |
|
|
393
|
-
| **Ollama** | Full | Native | [Install guide](docs/prerequisites.md#ollama-setup) |
|
|
394
|
-
| **LMStudio** | Full | Native | [Install guide](docs/prerequisites.md#lmstudio-setup) |
|
|
395
|
-
| **MLX** | Full | Native | [Setup guide](docs/prerequisites.md#mlx-setup) |
|
|
396
|
-
| **HuggingFace** | Full | Native | [Setup guide](docs/prerequisites.md#huggingface-setup) |
|
|
390
|
+
| Provider | Status | SEED Support | Hardware | Setup |
|
|
391
|
+
|----------|--------|-------------|----------|-------|
|
|
392
|
+
| **OpenAI** | Full | Native | Any | [Get API key](docs/prerequisites.md#openai-setup) |
|
|
393
|
+
| **Anthropic** | Full | Warning* | Any | [Get API key](docs/prerequisites.md#anthropic-setup) |
|
|
394
|
+
| **Ollama** | Full | Native | Any | [Install guide](docs/prerequisites.md#ollama-setup) |
|
|
395
|
+
| **LMStudio** | Full | Native | Any | [Install guide](docs/prerequisites.md#lmstudio-setup) |
|
|
396
|
+
| **MLX** | Full | Native | **Apple Silicon only** | [Setup guide](docs/prerequisites.md#mlx-setup) |
|
|
397
|
+
| **HuggingFace** | Full | Native | Any | [Setup guide](docs/prerequisites.md#huggingface-setup) |
|
|
398
|
+
| **vLLM** | Full | Native | **NVIDIA CUDA only** | [Setup guide](docs/prerequisites.md#vllm-setup) |
|
|
399
|
+
| **OpenAI-Compatible** ⭐ NEW | Full | Native | Any | Works with llama.cpp, text-generation-webui, LocalAI, etc. |
|
|
397
400
|
|
|
398
401
|
*Anthropic doesn't support seed parameters but issues a warning when provided. Use `temperature=0.0` for more consistent outputs.
|
|
399
402
|
|
|
@@ -912,7 +915,8 @@ pip install abstractcore[anthropic]
|
|
|
912
915
|
pip install abstractcore[ollama]
|
|
913
916
|
pip install abstractcore[lmstudio]
|
|
914
917
|
pip install abstractcore[huggingface]
|
|
915
|
-
pip install abstractcore[mlx]
|
|
918
|
+
pip install abstractcore[mlx] # macOS/Apple Silicon only
|
|
919
|
+
pip install abstractcore[vllm] # NVIDIA CUDA only (Linux)
|
|
916
920
|
|
|
917
921
|
# With server support
|
|
918
922
|
pip install abstractcore[server]
|
|
@@ -920,20 +924,29 @@ pip install abstractcore[server]
|
|
|
920
924
|
# With embeddings
|
|
921
925
|
pip install abstractcore[embeddings]
|
|
922
926
|
|
|
923
|
-
#
|
|
927
|
+
# With compression (Glyph visual-text compression)
|
|
928
|
+
pip install abstractcore[compression]
|
|
929
|
+
|
|
930
|
+
# Everything (recommended for Apple Silicon)
|
|
924
931
|
pip install abstractcore[all]
|
|
925
932
|
|
|
926
|
-
# Cross-platform (all except MLX - for Linux/Windows)
|
|
933
|
+
# Cross-platform (all except MLX/vLLM - for Linux/Windows/Intel Mac)
|
|
927
934
|
pip install abstractcore[all-non-mlx]
|
|
928
935
|
|
|
929
936
|
# Provider groups
|
|
930
|
-
pip install abstractcore[all-providers] # All providers (includes MLX)
|
|
931
|
-
pip install abstractcore[all-providers-non-mlx] # All providers except MLX
|
|
937
|
+
pip install abstractcore[all-providers] # All providers (includes MLX, excludes vLLM)
|
|
938
|
+
pip install abstractcore[all-providers-non-mlx] # All providers except MLX (excludes vLLM)
|
|
932
939
|
pip install abstractcore[local-providers] # Ollama, LMStudio, MLX
|
|
933
940
|
pip install abstractcore[local-providers-non-mlx] # Ollama, LMStudio only
|
|
934
941
|
pip install abstractcore[api-providers] # OpenAI, Anthropic
|
|
942
|
+
pip install abstractcore[gpu-providers] # vLLM (NVIDIA CUDA only)
|
|
935
943
|
```
|
|
936
944
|
|
|
945
|
+
**Hardware-Specific Notes:**
|
|
946
|
+
- **MLX**: Requires Apple Silicon (M1/M2/M3/M4). Will not work on Intel Macs or other platforms.
|
|
947
|
+
- **vLLM**: Requires NVIDIA GPUs with CUDA support. Will not work on Apple Silicon, AMD GPUs, or Intel integrated graphics.
|
|
948
|
+
- **All other providers** (OpenAI, Anthropic, Ollama, LMStudio, HuggingFace): Work on any hardware.
|
|
949
|
+
|
|
937
950
|
**Media processing extras:**
|
|
938
951
|
```bash
|
|
939
952
|
# For PDF processing
|
|
@@ -3,6 +3,8 @@ Image scaling utility for AbstractCore media handling.
|
|
|
3
3
|
|
|
4
4
|
Provides intelligent image scaling based on model-specific requirements
|
|
5
5
|
and capabilities for vision models.
|
|
6
|
+
|
|
7
|
+
Requires: PIL (Pillow) - install with `pip install Pillow`
|
|
6
8
|
"""
|
|
7
9
|
|
|
8
10
|
from typing import Tuple, Optional, Union, Dict, Any
|
|
@@ -11,9 +13,10 @@ from pathlib import Path
|
|
|
11
13
|
|
|
12
14
|
try:
|
|
13
15
|
from PIL import Image, ImageOps
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
16
|
+
except ImportError as e:
|
|
17
|
+
raise ImportError(
|
|
18
|
+
"PIL (Pillow) is required for image scaling. Install with: pip install Pillow"
|
|
19
|
+
) from e
|
|
17
20
|
|
|
18
21
|
from ..base import MediaProcessingError
|
|
19
22
|
from ...utils.structured_logging import get_logger
|
|
@@ -38,9 +41,6 @@ class ModelOptimizedScaler:
|
|
|
38
41
|
def __init__(self):
|
|
39
42
|
self.logger = get_logger(__name__)
|
|
40
43
|
|
|
41
|
-
if not PIL_AVAILABLE:
|
|
42
|
-
raise MediaProcessingError("PIL (Pillow) is required for image scaling")
|
|
43
|
-
|
|
44
44
|
def get_optimal_resolution(self, model_name: str, original_size: Tuple[int, int],
|
|
45
45
|
model_capabilities: Optional[Dict[str, Any]] = None) -> Tuple[int, int]:
|
|
46
46
|
"""
|
|
@@ -7,6 +7,8 @@ from .ollama_provider import OllamaProvider
|
|
|
7
7
|
from .lmstudio_provider import LMStudioProvider
|
|
8
8
|
from .huggingface_provider import HuggingFaceProvider
|
|
9
9
|
from .mlx_provider import MLXProvider
|
|
10
|
+
from .vllm_provider import VLLMProvider
|
|
11
|
+
from .openai_compatible_provider import OpenAICompatibleProvider
|
|
10
12
|
|
|
11
13
|
# Provider registry for centralized provider discovery and management
|
|
12
14
|
from .registry import (
|
|
@@ -41,6 +43,8 @@ __all__ = [
|
|
|
41
43
|
'LMStudioProvider',
|
|
42
44
|
'HuggingFaceProvider',
|
|
43
45
|
'MLXProvider',
|
|
46
|
+
'VLLMProvider',
|
|
47
|
+
'OpenAICompatibleProvider',
|
|
44
48
|
|
|
45
49
|
# Provider registry
|
|
46
50
|
'ProviderRegistry',
|