abstractcore 2.6.3__tar.gz → 2.6.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. {abstractcore-2.6.3 → abstractcore-2.6.5}/PKG-INFO +44 -24
  2. {abstractcore-2.6.3 → abstractcore-2.6.5}/README.md +25 -15
  3. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/providers/__init__.py +4 -0
  4. abstractcore-2.6.5/abstractcore/providers/openai_compatible_provider.py +829 -0
  5. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/providers/registry.py +37 -1
  6. abstractcore-2.6.5/abstractcore/providers/vllm_provider.py +823 -0
  7. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/server/app.py +22 -2
  8. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/utils/version.py +1 -1
  9. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore.egg-info/PKG-INFO +44 -24
  10. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore.egg-info/SOURCES.txt +2 -0
  11. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore.egg-info/requires.txt +21 -6
  12. {abstractcore-2.6.3 → abstractcore-2.6.5}/pyproject.toml +27 -6
  13. {abstractcore-2.6.3 → abstractcore-2.6.5}/LICENSE +0 -0
  14. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/__init__.py +0 -0
  15. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/apps/__init__.py +0 -0
  16. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/apps/__main__.py +0 -0
  17. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/apps/app_config_utils.py +0 -0
  18. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/apps/deepsearch.py +0 -0
  19. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/apps/extractor.py +0 -0
  20. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/apps/intent.py +0 -0
  21. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/apps/judge.py +0 -0
  22. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/apps/summarizer.py +0 -0
  23. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/architectures/__init__.py +0 -0
  24. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/architectures/detection.py +0 -0
  25. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/architectures/enums.py +0 -0
  26. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/assets/architecture_formats.json +0 -0
  27. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/assets/model_capabilities.json +0 -0
  28. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/assets/session_schema.json +0 -0
  29. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/compression/__init__.py +0 -0
  30. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/compression/analytics.py +0 -0
  31. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/compression/cache.py +0 -0
  32. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/compression/config.py +0 -0
  33. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/compression/exceptions.py +0 -0
  34. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/compression/glyph_processor.py +0 -0
  35. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/compression/optimizer.py +0 -0
  36. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/compression/orchestrator.py +0 -0
  37. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/compression/pil_text_renderer.py +0 -0
  38. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/compression/quality.py +0 -0
  39. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/compression/text_formatter.py +0 -0
  40. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/compression/vision_compressor.py +0 -0
  41. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/config/__init__.py +0 -0
  42. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/config/main.py +0 -0
  43. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/config/manager.py +0 -0
  44. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/config/vision_config.py +0 -0
  45. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/core/__init__.py +0 -0
  46. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/core/enums.py +0 -0
  47. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/core/factory.py +0 -0
  48. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/core/interface.py +0 -0
  49. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/core/retry.py +0 -0
  50. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/core/session.py +0 -0
  51. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/core/types.py +0 -0
  52. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/download.py +0 -0
  53. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/embeddings/__init__.py +0 -0
  54. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/embeddings/manager.py +0 -0
  55. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/embeddings/models.py +0 -0
  56. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/events/__init__.py +0 -0
  57. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/exceptions/__init__.py +0 -0
  58. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/media/__init__.py +0 -0
  59. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/media/auto_handler.py +0 -0
  60. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/media/base.py +0 -0
  61. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/media/capabilities.py +0 -0
  62. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/media/handlers/__init__.py +0 -0
  63. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/media/handlers/anthropic_handler.py +0 -0
  64. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/media/handlers/local_handler.py +0 -0
  65. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/media/handlers/openai_handler.py +0 -0
  66. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/media/processors/__init__.py +0 -0
  67. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/media/processors/direct_pdf_processor.py +0 -0
  68. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/media/processors/glyph_pdf_processor.py +0 -0
  69. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/media/processors/image_processor.py +0 -0
  70. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/media/processors/office_processor.py +0 -0
  71. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/media/processors/pdf_processor.py +0 -0
  72. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/media/processors/text_processor.py +0 -0
  73. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/media/types.py +0 -0
  74. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/media/utils/__init__.py +0 -0
  75. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/media/utils/image_scaler.py +0 -0
  76. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/media/vision_fallback.py +0 -0
  77. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/processing/__init__.py +0 -0
  78. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/processing/basic_deepsearch.py +0 -0
  79. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/processing/basic_extractor.py +0 -0
  80. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/processing/basic_intent.py +0 -0
  81. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/processing/basic_judge.py +0 -0
  82. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/processing/basic_summarizer.py +0 -0
  83. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/providers/anthropic_provider.py +0 -0
  84. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/providers/base.py +0 -0
  85. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/providers/huggingface_provider.py +0 -0
  86. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/providers/lmstudio_provider.py +0 -0
  87. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/providers/mlx_provider.py +0 -0
  88. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/providers/model_capabilities.py +0 -0
  89. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/providers/ollama_provider.py +0 -0
  90. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/providers/openai_provider.py +0 -0
  91. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/providers/streaming.py +0 -0
  92. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/server/__init__.py +0 -0
  93. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/structured/__init__.py +0 -0
  94. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/structured/handler.py +0 -0
  95. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/structured/retry.py +0 -0
  96. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/tools/__init__.py +0 -0
  97. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/tools/common_tools.py +0 -0
  98. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/tools/core.py +0 -0
  99. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/tools/handler.py +0 -0
  100. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/tools/parser.py +0 -0
  101. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/tools/registry.py +0 -0
  102. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/tools/syntax_rewriter.py +0 -0
  103. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/tools/tag_rewriter.py +0 -0
  104. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/utils/__init__.py +0 -0
  105. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/utils/cli.py +0 -0
  106. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/utils/message_preprocessor.py +0 -0
  107. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/utils/self_fixes.py +0 -0
  108. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/utils/structured_logging.py +0 -0
  109. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/utils/token_utils.py +0 -0
  110. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/utils/trace_export.py +0 -0
  111. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore/utils/vlm_token_calculator.py +0 -0
  112. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore.egg-info/dependency_links.txt +0 -0
  113. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore.egg-info/entry_points.txt +0 -0
  114. {abstractcore-2.6.3 → abstractcore-2.6.5}/abstractcore.egg-info/top_level.txt +0 -0
  115. {abstractcore-2.6.3 → abstractcore-2.6.5}/setup.cfg +0 -0
  116. {abstractcore-2.6.3 → abstractcore-2.6.5}/tests/test_agentic_cli_compatibility.py +0 -0
  117. {abstractcore-2.6.3 → abstractcore-2.6.5}/tests/test_basic_session.py +0 -0
  118. {abstractcore-2.6.3 → abstractcore-2.6.5}/tests/test_complete_integration.py +0 -0
  119. {abstractcore-2.6.3 → abstractcore-2.6.5}/tests/test_comprehensive_events.py +0 -0
  120. {abstractcore-2.6.3 → abstractcore-2.6.5}/tests/test_core_components.py +0 -0
  121. {abstractcore-2.6.3 → abstractcore-2.6.5}/tests/test_enhanced_prompt.py +0 -0
  122. {abstractcore-2.6.3 → abstractcore-2.6.5}/tests/test_environment_variable_tool_call_tags.py +0 -0
  123. {abstractcore-2.6.3 → abstractcore-2.6.5}/tests/test_factory.py +0 -0
  124. {abstractcore-2.6.3 → abstractcore-2.6.5}/tests/test_final_accuracy.py +0 -0
  125. {abstractcore-2.6.3 → abstractcore-2.6.5}/tests/test_final_comprehensive.py +0 -0
  126. {abstractcore-2.6.3 → abstractcore-2.6.5}/tests/test_final_graceful_errors.py +0 -0
  127. {abstractcore-2.6.3 → abstractcore-2.6.5}/tests/test_graceful_fallback.py +0 -0
  128. {abstractcore-2.6.3 → abstractcore-2.6.5}/tests/test_import_debug.py +0 -0
  129. {abstractcore-2.6.3 → abstractcore-2.6.5}/tests/test_integrated_functionality.py +0 -0
  130. {abstractcore-2.6.3 → abstractcore-2.6.5}/tests/test_retry_observability.py +0 -0
  131. {abstractcore-2.6.3 → abstractcore-2.6.5}/tests/test_retry_strategy.py +0 -0
  132. {abstractcore-2.6.3 → abstractcore-2.6.5}/tests/test_seed_determinism.py +0 -0
  133. {abstractcore-2.6.3 → abstractcore-2.6.5}/tests/test_seed_temperature_basic.py +0 -0
  134. {abstractcore-2.6.3 → abstractcore-2.6.5}/tests/test_sensory_prompting.py +0 -0
  135. {abstractcore-2.6.3 → abstractcore-2.6.5}/tests/test_text_only_model_experience.py +0 -0
  136. {abstractcore-2.6.3 → abstractcore-2.6.5}/tests/test_unload_memory.py +0 -0
  137. {abstractcore-2.6.3 → abstractcore-2.6.5}/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
3
+ Version: 2.6.5
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"
@@ -67,18 +69,26 @@ Provides-Extra: api-providers
67
69
  Requires-Dist: abstractcore[anthropic,openai]; extra == "api-providers"
68
70
  Provides-Extra: local-providers
69
71
  Requires-Dist: abstractcore[lmstudio,mlx,ollama]; extra == "local-providers"
70
- Provides-Extra: local-providers-non-mlx
71
- Requires-Dist: abstractcore[lmstudio,ollama]; extra == "local-providers-non-mlx"
72
+ Provides-Extra: local-providers-apple
73
+ Requires-Dist: abstractcore[lmstudio,mlx,ollama]; extra == "local-providers-apple"
74
+ Provides-Extra: local-providers-gpu
75
+ Requires-Dist: abstractcore[lmstudio,ollama,vllm]; extra == "local-providers-gpu"
76
+ Provides-Extra: gpu-providers
77
+ Requires-Dist: abstractcore[huggingface,vllm]; extra == "gpu-providers"
72
78
  Provides-Extra: heavy-providers
73
79
  Requires-Dist: abstractcore[huggingface]; extra == "heavy-providers"
74
80
  Provides-Extra: all-providers
75
- Requires-Dist: abstractcore[anthropic,embeddings,huggingface,lmstudio,mlx,ollama,openai]; extra == "all-providers"
76
- Provides-Extra: all-providers-non-mlx
77
- Requires-Dist: abstractcore[anthropic,embeddings,huggingface,lmstudio,ollama,openai]; extra == "all-providers-non-mlx"
81
+ Requires-Dist: abstractcore[anthropic,embeddings,huggingface,lmstudio,mlx,ollama,openai,vllm]; extra == "all-providers"
82
+ Provides-Extra: all-providers-apple
83
+ Requires-Dist: abstractcore[anthropic,embeddings,huggingface,lmstudio,mlx,ollama,openai]; extra == "all-providers-apple"
84
+ Provides-Extra: all-providers-gpu
85
+ Requires-Dist: abstractcore[anthropic,embeddings,huggingface,lmstudio,ollama,openai,vllm]; extra == "all-providers-gpu"
78
86
  Provides-Extra: all
79
- Requires-Dist: abstractcore[anthropic,compression,dev,docs,embeddings,huggingface,lmstudio,media,mlx,ollama,openai,processing,server,test,tools]; extra == "all"
80
- Provides-Extra: all-non-mlx
81
- Requires-Dist: abstractcore[anthropic,compression,dev,docs,embeddings,huggingface,lmstudio,media,ollama,openai,processing,server,test,tools]; extra == "all-non-mlx"
87
+ Requires-Dist: abstractcore[anthropic,compression,dev,docs,embeddings,huggingface,lmstudio,media,mlx,ollama,openai,processing,server,test,tools,vllm]; extra == "all"
88
+ Provides-Extra: all-apple
89
+ Requires-Dist: abstractcore[anthropic,compression,dev,docs,embeddings,huggingface,lmstudio,media,mlx,ollama,openai,processing,server,test,tools]; extra == "all-apple"
90
+ Provides-Extra: all-gpu
91
+ Requires-Dist: abstractcore[anthropic,compression,dev,docs,embeddings,huggingface,lmstudio,media,ollama,openai,processing,server,test,tools,vllm]; extra == "all-gpu"
82
92
  Provides-Extra: lightweight
83
93
  Requires-Dist: abstractcore[anthropic,compression,embeddings,lmstudio,media,ollama,openai,processing,server,tools]; extra == "lightweight"
84
94
  Provides-Extra: dev
@@ -480,8 +490,9 @@ if response.metadata and response.metadata.get('compression_used'):
480
490
  ## Key Features
481
491
 
482
492
  - **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 6 providers
493
+ - **Provider Agnostic**: Seamlessly switch between OpenAI, Anthropic, Ollama, LMStudio, MLX, HuggingFace, vLLM, and any OpenAI-compatible endpoint
494
+ - **Async/Await Support** ⭐ NEW in v2.6.0: Native async support for concurrent requests with `asyncio.gather()` - works with all providers
495
+ - **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
496
  - **Interaction Tracing**: Complete LLM observability with programmatic access to prompts, responses, tokens, timing, and trace correlation for debugging, trust, and compliance
486
497
  - **Glyph Visual-Text Compression**: Revolutionary compression system that renders text as optimized images for 3-4x token compression and faster inference
487
498
  - **Centralized Configuration**: Global defaults and app-specific preferences at `~/.abstractcore/config/abstractcore.json`
@@ -498,14 +509,16 @@ if response.metadata and response.metadata.get('compression_used'):
498
509
 
499
510
  ## Supported Providers
500
511
 
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) |
512
+ | Provider | Status | SEED Support | Hardware | Setup |
513
+ |----------|--------|-------------|----------|-------|
514
+ | **OpenAI** | Full | Native | Any | [Get API key](docs/prerequisites.md#openai-setup) |
515
+ | **Anthropic** | Full | Warning* | Any | [Get API key](docs/prerequisites.md#anthropic-setup) |
516
+ | **Ollama** | Full | Native | Any | [Install guide](docs/prerequisites.md#ollama-setup) |
517
+ | **LMStudio** | Full | Native | Any | [Install guide](docs/prerequisites.md#lmstudio-setup) |
518
+ | **MLX** | Full | Native | **Apple Silicon only** | [Setup guide](docs/prerequisites.md#mlx-setup) |
519
+ | **HuggingFace** | Full | Native | Any | [Setup guide](docs/prerequisites.md#huggingface-setup) |
520
+ | **vLLM** | Full | Native | **NVIDIA CUDA only** | [Setup guide](docs/prerequisites.md#vllm-setup) |
521
+ | **OpenAI-Compatible** ⭐ NEW | Full | Native | Any | Works with llama.cpp, text-generation-webui, LocalAI, etc. |
509
522
 
510
523
  *Anthropic doesn't support seed parameters but issues a warning when provided. Use `temperature=0.0` for more consistent outputs.
511
524
 
@@ -1024,7 +1037,8 @@ pip install abstractcore[anthropic]
1024
1037
  pip install abstractcore[ollama]
1025
1038
  pip install abstractcore[lmstudio]
1026
1039
  pip install abstractcore[huggingface]
1027
- pip install abstractcore[mlx] # macOS/Apple Silicon only
1040
+ pip install abstractcore[mlx] # macOS/Apple Silicon only
1041
+ pip install abstractcore[vllm] # NVIDIA CUDA only (Linux)
1028
1042
 
1029
1043
  # With server support
1030
1044
  pip install abstractcore[server]
@@ -1032,20 +1046,26 @@ pip install abstractcore[server]
1032
1046
  # With embeddings
1033
1047
  pip install abstractcore[embeddings]
1034
1048
 
1035
- # Everything (recommended)
1049
+ # Everything (recommended for Apple Silicon)
1036
1050
  pip install abstractcore[all]
1037
1051
 
1038
- # Cross-platform (all except MLX - for Linux/Windows)
1052
+ # Cross-platform (all except MLX/vLLM - for Linux/Windows/Intel Mac)
1039
1053
  pip install abstractcore[all-non-mlx]
1040
1054
 
1041
1055
  # Provider groups
1042
- pip install abstractcore[all-providers] # All providers (includes MLX)
1043
- pip install abstractcore[all-providers-non-mlx] # All providers except MLX
1056
+ pip install abstractcore[all-providers] # All providers (includes MLX, excludes vLLM)
1057
+ pip install abstractcore[all-providers-non-mlx] # All providers except MLX (excludes vLLM)
1044
1058
  pip install abstractcore[local-providers] # Ollama, LMStudio, MLX
1045
1059
  pip install abstractcore[local-providers-non-mlx] # Ollama, LMStudio only
1046
1060
  pip install abstractcore[api-providers] # OpenAI, Anthropic
1061
+ pip install abstractcore[gpu-providers] # vLLM (NVIDIA CUDA only)
1047
1062
  ```
1048
1063
 
1064
+ **Hardware-Specific Notes:**
1065
+ - **MLX**: Requires Apple Silicon (M1/M2/M3/M4). Will not work on Intel Macs or other platforms.
1066
+ - **vLLM**: Requires NVIDIA GPUs with CUDA support. Will not work on Apple Silicon, AMD GPUs, or Intel integrated graphics.
1067
+ - **All other providers** (OpenAI, Anthropic, Ollama, LMStudio, HuggingFace): Work on any hardware.
1068
+
1049
1069
  **Media processing extras:**
1050
1070
  ```bash
1051
1071
  # 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 6 providers
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] # macOS/Apple Silicon only
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,26 @@ pip install abstractcore[server]
920
924
  # With embeddings
921
925
  pip install abstractcore[embeddings]
922
926
 
923
- # Everything (recommended)
927
+ # Everything (recommended for Apple Silicon)
924
928
  pip install abstractcore[all]
925
929
 
926
- # Cross-platform (all except MLX - for Linux/Windows)
930
+ # Cross-platform (all except MLX/vLLM - for Linux/Windows/Intel Mac)
927
931
  pip install abstractcore[all-non-mlx]
928
932
 
929
933
  # Provider groups
930
- pip install abstractcore[all-providers] # All providers (includes MLX)
931
- pip install abstractcore[all-providers-non-mlx] # All providers except MLX
934
+ pip install abstractcore[all-providers] # All providers (includes MLX, excludes vLLM)
935
+ pip install abstractcore[all-providers-non-mlx] # All providers except MLX (excludes vLLM)
932
936
  pip install abstractcore[local-providers] # Ollama, LMStudio, MLX
933
937
  pip install abstractcore[local-providers-non-mlx] # Ollama, LMStudio only
934
938
  pip install abstractcore[api-providers] # OpenAI, Anthropic
939
+ pip install abstractcore[gpu-providers] # vLLM (NVIDIA CUDA only)
935
940
  ```
936
941
 
942
+ **Hardware-Specific Notes:**
943
+ - **MLX**: Requires Apple Silicon (M1/M2/M3/M4). Will not work on Intel Macs or other platforms.
944
+ - **vLLM**: Requires NVIDIA GPUs with CUDA support. Will not work on Apple Silicon, AMD GPUs, or Intel integrated graphics.
945
+ - **All other providers** (OpenAI, Anthropic, Ollama, LMStudio, HuggingFace): Work on any hardware.
946
+
937
947
  **Media processing extras:**
938
948
  ```bash
939
949
  # For PDF processing
@@ -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',