abstractcore 2.4.9__tar.gz → 2.5.2__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.4.9 → abstractcore-2.5.2}/PKG-INFO +38 -18
- {abstractcore-2.4.9 → abstractcore-2.5.2}/README.md +35 -17
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/apps/__main__.py +8 -1
- abstractcore-2.5.2/abstractcore/apps/deepsearch.py +644 -0
- abstractcore-2.5.2/abstractcore/apps/intent.py +614 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/assets/model_capabilities.json +50 -34
- abstractcore-2.5.2/abstractcore/config/__init__.py +10 -0
- {abstractcore-2.4.9/abstractcore/cli → abstractcore-2.5.2/abstractcore/config}/main.py +13 -1
- abstractcore-2.5.2/abstractcore/config/manager.py +355 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/core/session.py +46 -1
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/processing/__init__.py +5 -1
- abstractcore-2.5.2/abstractcore/processing/basic_deepsearch.py +2173 -0
- abstractcore-2.5.2/abstractcore/processing/basic_intent.py +690 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/providers/anthropic_provider.py +1 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/providers/base.py +1 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/providers/huggingface_provider.py +95 -4
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/providers/lmstudio_provider.py +14 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/providers/mlx_provider.py +76 -2
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/providers/ollama_provider.py +6 -2
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/providers/openai_provider.py +1 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/providers/registry.py +6 -6
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/structured/handler.py +161 -1
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/tools/common_tools.py +98 -3
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/utils/cli.py +114 -1
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/utils/version.py +1 -1
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore.egg-info/PKG-INFO +38 -18
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore.egg-info/SOURCES.txt +8 -3
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore.egg-info/entry_points.txt +6 -2
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore.egg-info/requires.txt +2 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/pyproject.toml +10 -3
- abstractcore-2.4.9/abstractcore/cli/__init__.py +0 -9
- {abstractcore-2.4.9 → abstractcore-2.5.2}/LICENSE +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/__init__.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/apps/__init__.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/apps/app_config_utils.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/apps/extractor.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/apps/judge.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/apps/summarizer.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/architectures/__init__.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/architectures/detection.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/architectures/enums.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/assets/architecture_formats.json +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/assets/session_schema.json +0 -0
- {abstractcore-2.4.9/abstractcore/cli → abstractcore-2.5.2/abstractcore/config}/vision_config.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/core/__init__.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/core/enums.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/core/factory.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/core/interface.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/core/retry.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/core/types.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/embeddings/__init__.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/embeddings/manager.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/embeddings/models.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/events/__init__.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/exceptions/__init__.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/media/__init__.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/media/auto_handler.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/media/base.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/media/capabilities.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/media/handlers/__init__.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/media/handlers/anthropic_handler.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/media/handlers/local_handler.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/media/handlers/openai_handler.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/media/processors/__init__.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/media/processors/image_processor.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/media/processors/office_processor.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/media/processors/pdf_processor.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/media/processors/text_processor.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/media/types.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/media/utils/__init__.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/media/utils/image_scaler.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/media/vision_fallback.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/processing/basic_extractor.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/processing/basic_judge.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/processing/basic_summarizer.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/providers/__init__.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/providers/streaming.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/server/__init__.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/server/app.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/structured/__init__.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/structured/retry.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/tools/__init__.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/tools/core.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/tools/handler.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/tools/parser.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/tools/registry.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/tools/syntax_rewriter.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/tools/tag_rewriter.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/utils/__init__.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/utils/message_preprocessor.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/utils/self_fixes.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/utils/structured_logging.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore/utils/token_utils.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore.egg-info/dependency_links.txt +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/abstractcore.egg-info/top_level.txt +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/setup.cfg +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_agentic_cli_compatibility.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_all_specified_providers.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_basic_session.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_basic_summarizer.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_cli_media.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_complete_integration.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_comprehensive_events.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_consistency.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_core_components.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_critical_streaming_tool_fix.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_debug_server.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_direct_vs_server.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_embeddings.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_embeddings_integration.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_embeddings_llm_integration.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_embeddings_matrix_operations.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_embeddings_no_mock.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_embeddings_real.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_embeddings_semantic_validation.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_embeddings_simple.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_enhanced_prompt.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_environment_variable_tool_call_tags.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_factory.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_final_accuracy.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_final_comprehensive.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_final_graceful_errors.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_fixed_media.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_fixed_prompt.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_graceful_fallback.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_import_debug.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_integrated_functionality.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_lmstudio_context.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_media_import.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_media_server.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_ollama_tool_role_fix.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_openai_conversion_manual.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_openai_format_bug.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_openai_format_conversion.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_openai_media_integration.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_progressive_complexity.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_provider_basic_session.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_provider_connectivity.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_provider_simple_generation.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_provider_streaming.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_provider_token_translation.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_provider_tool_detection.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_providers.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_providers_comprehensive.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_providers_simple.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_real_models_comprehensive.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_retry_observability.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_retry_strategy.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_seed_determinism.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_seed_temperature_basic.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_sensory_prompting.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_server_debug.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_server_embeddings_real.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_server_integration.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_stream_tool_calling.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_streaming_enhancements.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_streaming_tag_rewriting.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_structured_integration.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_structured_output.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_syntax_rewriter.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_text_only_model_experience.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_tool_calling.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_tool_execution_separation.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_unified_streaming.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_unload_memory.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_user_scenario_validation.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_vision_accuracy.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_vision_comprehensive.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_vision_fallback_improvement.py +0 -0
- {abstractcore-2.4.9 → abstractcore-2.5.2}/tests/test_wrong_model_fallback.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: abstractcore
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.5.2
|
|
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>
|
|
@@ -40,9 +40,11 @@ Provides-Extra: huggingface
|
|
|
40
40
|
Requires-Dist: transformers<5.0.0,>=4.30.0; extra == "huggingface"
|
|
41
41
|
Requires-Dist: torch<3.0.0,>=1.12.0; extra == "huggingface"
|
|
42
42
|
Requires-Dist: llama-cpp-python<1.0.0,>=0.2.0; extra == "huggingface"
|
|
43
|
+
Requires-Dist: outlines>=0.1.0; extra == "huggingface"
|
|
43
44
|
Provides-Extra: mlx
|
|
44
45
|
Requires-Dist: mlx<1.0.0,>=0.15.0; extra == "mlx"
|
|
45
46
|
Requires-Dist: mlx-lm<1.0.0,>=0.15.0; extra == "mlx"
|
|
47
|
+
Requires-Dist: outlines>=0.1.0; extra == "mlx"
|
|
46
48
|
Provides-Extra: embeddings
|
|
47
49
|
Requires-Dist: sentence-transformers<4.0.0,>=2.7.0; extra == "embeddings"
|
|
48
50
|
Requires-Dist: numpy<2.0.0,>=1.20.0; extra == "embeddings"
|
|
@@ -258,7 +260,7 @@ loaded_session = BasicSession.load('conversation.json', provider=llm)
|
|
|
258
260
|
|
|
259
261
|
### Media Handling
|
|
260
262
|
|
|
261
|
-
AbstractCore provides
|
|
263
|
+
AbstractCore provides unified media handling across all providers with automatic resolution optimization. Upload images, PDFs, and documents using the same simple API regardless of your provider.
|
|
262
264
|
|
|
263
265
|
```python
|
|
264
266
|
from abstractcore import create_llm
|
|
@@ -296,7 +298,7 @@ response = llm.generate(
|
|
|
296
298
|
- **Smart Resolution**: Automatically uses maximum resolution supported by each model
|
|
297
299
|
- **Format Support**: PNG, JPEG, GIF, WEBP, BMP, TIFF images; PDF, TXT, MD, CSV, TSV, JSON documents
|
|
298
300
|
- **Office Documents**: DOCX, XLSX, PPT (with `pip install abstractcore[all]`)
|
|
299
|
-
- **Vision Optimization**: Model-specific image processing for
|
|
301
|
+
- **Vision Optimization**: Model-specific image processing for vision results
|
|
300
302
|
|
|
301
303
|
**Provider compatibility:**
|
|
302
304
|
- **High-resolution vision**: GPT-4o (up to 4096x4096), Claude 3.5 Sonnet (up to 1568x1568)
|
|
@@ -310,11 +312,11 @@ response = llm.generate(
|
|
|
310
312
|
- **Provider Agnostic**: Seamlessly switch between OpenAI, Anthropic, Ollama, LMStudio, MLX, HuggingFace
|
|
311
313
|
- **Centralized Configuration**: Global defaults and app-specific preferences at `~/.abstractcore/config/abstractcore.json`
|
|
312
314
|
- **Intelligent Media Handling**: Upload images, PDFs, and documents with automatic maximum resolution optimization
|
|
313
|
-
- **Vision Model Support**: Smart image processing at each model's maximum capability
|
|
314
|
-
- **Document Processing**:
|
|
315
|
+
- **Vision Model Support**: Smart image processing at each model's maximum capability
|
|
316
|
+
- **Document Processing**: PDF extraction (PyMuPDF4LLM), Office documents (DOCX/XLSX/PPT), CSV/TSV analysis
|
|
315
317
|
- **Unified Tools**: Consistent tool calling across all providers
|
|
316
318
|
- **Session Management**: Persistent conversations with metadata, analytics, and complete serialization
|
|
317
|
-
- **Structured
|
|
319
|
+
- **Native Structured Output**: Server-side schema enforcement for Ollama and LMStudio (OpenAI and Anthropic also supported)
|
|
318
320
|
- **Streaming Support**: Real-time token generation for interactive experiences
|
|
319
321
|
- **Consistent Token Terminology**: Unified `input_tokens`, `output_tokens`, `total_tokens` across all providers
|
|
320
322
|
- **Embeddings**: Built-in support for semantic search and RAG applications
|
|
@@ -324,12 +326,12 @@ response = llm.generate(
|
|
|
324
326
|
|
|
325
327
|
| Provider | Status | SEED Support | Setup |
|
|
326
328
|
|----------|--------|-------------|-------|
|
|
327
|
-
| **OpenAI** | Full |
|
|
328
|
-
| **Anthropic** | Full |
|
|
329
|
-
| **Ollama** | Full |
|
|
330
|
-
| **LMStudio** | Full |
|
|
331
|
-
| **MLX** | Full |
|
|
332
|
-
| **HuggingFace** | Full |
|
|
329
|
+
| **OpenAI** | Full | Native | [Get API key](docs/prerequisites.md#openai-setup) |
|
|
330
|
+
| **Anthropic** | Full | Warning* | [Get API key](docs/prerequisites.md#anthropic-setup) |
|
|
331
|
+
| **Ollama** | Full | Native | [Install guide](docs/prerequisites.md#ollama-setup) |
|
|
332
|
+
| **LMStudio** | Full | Native | [Install guide](docs/prerequisites.md#lmstudio-setup) |
|
|
333
|
+
| **MLX** | Full | Native | [Setup guide](docs/prerequisites.md#mlx-setup) |
|
|
334
|
+
| **HuggingFace** | Full | Native | [Setup guide](docs/prerequisites.md#huggingface-setup) |
|
|
333
335
|
|
|
334
336
|
*Anthropic doesn't support seed parameters but issues a warning when provided. Use `temperature=0.0` for more consistent outputs.
|
|
335
337
|
|
|
@@ -374,7 +376,7 @@ response = client.chat.completions.create(
|
|
|
374
376
|
- Building web applications that need HTTP API
|
|
375
377
|
- Multi-language access (not just Python)
|
|
376
378
|
|
|
377
|
-
##
|
|
379
|
+
## AbstractCore CLI (Optional Interactive Testing Tool)
|
|
378
380
|
|
|
379
381
|
AbstractCore includes a **built-in CLI** for interactive testing, development, and conversation management. This is an internal testing tool, distinct from external agentic CLIs.
|
|
380
382
|
|
|
@@ -394,6 +396,7 @@ python -m abstractcore.utils.cli --provider anthropic --model claude-3-5-haiku-l
|
|
|
394
396
|
- Chat history compaction and management
|
|
395
397
|
- Fact extraction from conversations
|
|
396
398
|
- Conversation quality evaluation (LLM-as-a-judge)
|
|
399
|
+
- Intent analysis and deception detection
|
|
397
400
|
- Tool call testing and debugging
|
|
398
401
|
- System prompt management
|
|
399
402
|
- Multiple provider support
|
|
@@ -402,12 +405,13 @@ python -m abstractcore.utils.cli --provider anthropic --model claude-3-5-haiku-l
|
|
|
402
405
|
- `/compact` - Compress chat history while preserving context
|
|
403
406
|
- `/facts [file]` - Extract structured facts from conversation
|
|
404
407
|
- `/judge` - Evaluate conversation quality with feedback
|
|
408
|
+
- `/intent [participant]` - Analyze psychological intents and detect deception
|
|
405
409
|
- `/history [n]` - View conversation history
|
|
406
410
|
- `/stream` - Toggle real-time streaming
|
|
407
411
|
- `/system [prompt]` - Show or change system prompt
|
|
408
412
|
- `/status` - Show current provider, model, and capabilities
|
|
409
413
|
|
|
410
|
-
**Full Documentation:** [
|
|
414
|
+
**Full Documentation:** [AbstractCore CLI Guide](docs/acore-cli.md)
|
|
411
415
|
|
|
412
416
|
**When to use the CLI:**
|
|
413
417
|
- Interactive development and testing
|
|
@@ -418,7 +422,7 @@ python -m abstractcore.utils.cli --provider anthropic --model claude-3-5-haiku-l
|
|
|
418
422
|
|
|
419
423
|
## Built-in Applications (Ready-to-Use CLI Tools)
|
|
420
424
|
|
|
421
|
-
AbstractCore includes **
|
|
425
|
+
AbstractCore includes **four specialized command-line applications** for common LLM tasks. These are production-ready tools that can be used directly from the terminal without any Python programming.
|
|
422
426
|
|
|
423
427
|
### Available Applications
|
|
424
428
|
|
|
@@ -427,6 +431,7 @@ AbstractCore includes **three specialized command-line applications** for common
|
|
|
427
431
|
| **Summarizer** | Document summarization | `summarizer` |
|
|
428
432
|
| **Extractor** | Entity and relationship extraction | `extractor` |
|
|
429
433
|
| **Judge** | Text evaluation and scoring | `judge` |
|
|
434
|
+
| **Intent Analyzer** | Psychological intent analysis & deception detection | `intent` |
|
|
430
435
|
|
|
431
436
|
### Quick Usage Examples
|
|
432
437
|
|
|
@@ -445,6 +450,11 @@ extractor doc.txt --iterate 3 --mode thorough --verbose
|
|
|
445
450
|
judge essay.txt --criteria clarity,accuracy,coherence --context "academic writing"
|
|
446
451
|
judge code.py --context "code review" --format plain --verbose
|
|
447
452
|
judge proposal.md --custom-criteria has_examples,covers_risks --output assessment.json
|
|
453
|
+
|
|
454
|
+
# Intent analysis with psychological insights and deception detection
|
|
455
|
+
intent conversation.txt --focus-participant user --depth comprehensive
|
|
456
|
+
intent email.txt --format plain --context document --verbose
|
|
457
|
+
intent chat_log.json --conversation-mode --provider lmstudio --model qwen/qwen3-30b-a3b-2507
|
|
448
458
|
```
|
|
449
459
|
|
|
450
460
|
### Installation & Setup
|
|
@@ -459,6 +469,7 @@ pip install abstractcore[all]
|
|
|
459
469
|
summarizer --help
|
|
460
470
|
extractor --help
|
|
461
471
|
judge --help
|
|
472
|
+
intent --help
|
|
462
473
|
```
|
|
463
474
|
|
|
464
475
|
### Alternative Usage Methods
|
|
@@ -468,11 +479,13 @@ judge --help
|
|
|
468
479
|
summarizer document.txt
|
|
469
480
|
extractor report.pdf
|
|
470
481
|
judge essay.md
|
|
482
|
+
intent conversation.txt
|
|
471
483
|
|
|
472
484
|
# Method 2: Via Python module
|
|
473
485
|
python -m abstractcore.apps summarizer document.txt
|
|
474
486
|
python -m abstractcore.apps extractor report.pdf
|
|
475
487
|
python -m abstractcore.apps judge essay.md
|
|
488
|
+
python -m abstractcore.apps intent conversation.txt
|
|
476
489
|
```
|
|
477
490
|
|
|
478
491
|
### Key Parameters
|
|
@@ -514,10 +527,11 @@ python -m abstractcore.apps judge essay.md
|
|
|
514
527
|
|
|
515
528
|
### Full Documentation
|
|
516
529
|
|
|
517
|
-
Each application has
|
|
530
|
+
Each application has documentation with examples and usage information:
|
|
518
531
|
|
|
519
532
|
- **[Summarizer Guide](docs/apps/basic-summarizer.md)** - Document summarization with multiple strategies
|
|
520
533
|
- **[Extractor Guide](docs/apps/basic-extractor.md)** - Entity and relationship extraction
|
|
534
|
+
- **[Intent Analyzer Guide](docs/apps/basic-intent.md)** - Psychological intent analysis and deception detection
|
|
521
535
|
- **[Judge Guide](docs/apps/basic-judge.md)** - Text evaluation and scoring systems
|
|
522
536
|
|
|
523
537
|
**When to use the apps:**
|
|
@@ -551,6 +565,10 @@ abstractcore --set-console-log-level NONE # Disable console logging
|
|
|
551
565
|
abstractcore --enable-file-logging # Save logs to files
|
|
552
566
|
abstractcore --enable-debug-logging # Full debug mode
|
|
553
567
|
|
|
568
|
+
# Configure vision for image analysis with text-only models
|
|
569
|
+
abstractcore --set-vision-provider ollama qwen2.5vl:7b
|
|
570
|
+
abstractcore --set-vision-provider lmstudio qwen/qwen3-vl-4b
|
|
571
|
+
|
|
554
572
|
# Set API keys as needed
|
|
555
573
|
abstractcore --set-api-key openai sk-your-key-here
|
|
556
574
|
abstractcore --set-api-key anthropic your-anthropic-key
|
|
@@ -662,7 +680,7 @@ llm = create_llm("anthropic", model="claude-3.5-sonnet")
|
|
|
662
680
|
response = llm.generate(analysis_prompt, media=documents)
|
|
663
681
|
|
|
664
682
|
# Automatic format handling:
|
|
665
|
-
# - PDF:
|
|
683
|
+
# - PDF: Text extraction with PyMuPDF4LLM
|
|
666
684
|
# - Excel: Table parsing with pandas
|
|
667
685
|
# - PowerPoint: Slide content extraction with unstructured
|
|
668
686
|
```
|
|
@@ -715,6 +733,8 @@ review = llm.generate(
|
|
|
715
733
|
print(f"{review.title}: {review.rating}/5")
|
|
716
734
|
```
|
|
717
735
|
|
|
736
|
+
[Learn more about Structured Output](docs/structured-output.md)
|
|
737
|
+
|
|
718
738
|
### 7. Universal API Server
|
|
719
739
|
|
|
720
740
|
```bash
|
|
@@ -770,7 +790,7 @@ pip install abstractcore[all]
|
|
|
770
790
|
|
|
771
791
|
**Media processing extras:**
|
|
772
792
|
```bash
|
|
773
|
-
# For
|
|
793
|
+
# For PDF processing
|
|
774
794
|
pip install pymupdf4llm
|
|
775
795
|
|
|
776
796
|
# For Office documents (DOCX, XLSX, PPT)
|
|
@@ -158,7 +158,7 @@ loaded_session = BasicSession.load('conversation.json', provider=llm)
|
|
|
158
158
|
|
|
159
159
|
### Media Handling
|
|
160
160
|
|
|
161
|
-
AbstractCore provides
|
|
161
|
+
AbstractCore provides unified media handling across all providers with automatic resolution optimization. Upload images, PDFs, and documents using the same simple API regardless of your provider.
|
|
162
162
|
|
|
163
163
|
```python
|
|
164
164
|
from abstractcore import create_llm
|
|
@@ -196,7 +196,7 @@ response = llm.generate(
|
|
|
196
196
|
- **Smart Resolution**: Automatically uses maximum resolution supported by each model
|
|
197
197
|
- **Format Support**: PNG, JPEG, GIF, WEBP, BMP, TIFF images; PDF, TXT, MD, CSV, TSV, JSON documents
|
|
198
198
|
- **Office Documents**: DOCX, XLSX, PPT (with `pip install abstractcore[all]`)
|
|
199
|
-
- **Vision Optimization**: Model-specific image processing for
|
|
199
|
+
- **Vision Optimization**: Model-specific image processing for vision results
|
|
200
200
|
|
|
201
201
|
**Provider compatibility:**
|
|
202
202
|
- **High-resolution vision**: GPT-4o (up to 4096x4096), Claude 3.5 Sonnet (up to 1568x1568)
|
|
@@ -210,11 +210,11 @@ response = llm.generate(
|
|
|
210
210
|
- **Provider Agnostic**: Seamlessly switch between OpenAI, Anthropic, Ollama, LMStudio, MLX, HuggingFace
|
|
211
211
|
- **Centralized Configuration**: Global defaults and app-specific preferences at `~/.abstractcore/config/abstractcore.json`
|
|
212
212
|
- **Intelligent Media Handling**: Upload images, PDFs, and documents with automatic maximum resolution optimization
|
|
213
|
-
- **Vision Model Support**: Smart image processing at each model's maximum capability
|
|
214
|
-
- **Document Processing**:
|
|
213
|
+
- **Vision Model Support**: Smart image processing at each model's maximum capability
|
|
214
|
+
- **Document Processing**: PDF extraction (PyMuPDF4LLM), Office documents (DOCX/XLSX/PPT), CSV/TSV analysis
|
|
215
215
|
- **Unified Tools**: Consistent tool calling across all providers
|
|
216
216
|
- **Session Management**: Persistent conversations with metadata, analytics, and complete serialization
|
|
217
|
-
- **Structured
|
|
217
|
+
- **Native Structured Output**: Server-side schema enforcement for Ollama and LMStudio (OpenAI and Anthropic also supported)
|
|
218
218
|
- **Streaming Support**: Real-time token generation for interactive experiences
|
|
219
219
|
- **Consistent Token Terminology**: Unified `input_tokens`, `output_tokens`, `total_tokens` across all providers
|
|
220
220
|
- **Embeddings**: Built-in support for semantic search and RAG applications
|
|
@@ -224,12 +224,12 @@ response = llm.generate(
|
|
|
224
224
|
|
|
225
225
|
| Provider | Status | SEED Support | Setup |
|
|
226
226
|
|----------|--------|-------------|-------|
|
|
227
|
-
| **OpenAI** | Full |
|
|
228
|
-
| **Anthropic** | Full |
|
|
229
|
-
| **Ollama** | Full |
|
|
230
|
-
| **LMStudio** | Full |
|
|
231
|
-
| **MLX** | Full |
|
|
232
|
-
| **HuggingFace** | Full |
|
|
227
|
+
| **OpenAI** | Full | Native | [Get API key](docs/prerequisites.md#openai-setup) |
|
|
228
|
+
| **Anthropic** | Full | Warning* | [Get API key](docs/prerequisites.md#anthropic-setup) |
|
|
229
|
+
| **Ollama** | Full | Native | [Install guide](docs/prerequisites.md#ollama-setup) |
|
|
230
|
+
| **LMStudio** | Full | Native | [Install guide](docs/prerequisites.md#lmstudio-setup) |
|
|
231
|
+
| **MLX** | Full | Native | [Setup guide](docs/prerequisites.md#mlx-setup) |
|
|
232
|
+
| **HuggingFace** | Full | Native | [Setup guide](docs/prerequisites.md#huggingface-setup) |
|
|
233
233
|
|
|
234
234
|
*Anthropic doesn't support seed parameters but issues a warning when provided. Use `temperature=0.0` for more consistent outputs.
|
|
235
235
|
|
|
@@ -274,7 +274,7 @@ response = client.chat.completions.create(
|
|
|
274
274
|
- Building web applications that need HTTP API
|
|
275
275
|
- Multi-language access (not just Python)
|
|
276
276
|
|
|
277
|
-
##
|
|
277
|
+
## AbstractCore CLI (Optional Interactive Testing Tool)
|
|
278
278
|
|
|
279
279
|
AbstractCore includes a **built-in CLI** for interactive testing, development, and conversation management. This is an internal testing tool, distinct from external agentic CLIs.
|
|
280
280
|
|
|
@@ -294,6 +294,7 @@ python -m abstractcore.utils.cli --provider anthropic --model claude-3-5-haiku-l
|
|
|
294
294
|
- Chat history compaction and management
|
|
295
295
|
- Fact extraction from conversations
|
|
296
296
|
- Conversation quality evaluation (LLM-as-a-judge)
|
|
297
|
+
- Intent analysis and deception detection
|
|
297
298
|
- Tool call testing and debugging
|
|
298
299
|
- System prompt management
|
|
299
300
|
- Multiple provider support
|
|
@@ -302,12 +303,13 @@ python -m abstractcore.utils.cli --provider anthropic --model claude-3-5-haiku-l
|
|
|
302
303
|
- `/compact` - Compress chat history while preserving context
|
|
303
304
|
- `/facts [file]` - Extract structured facts from conversation
|
|
304
305
|
- `/judge` - Evaluate conversation quality with feedback
|
|
306
|
+
- `/intent [participant]` - Analyze psychological intents and detect deception
|
|
305
307
|
- `/history [n]` - View conversation history
|
|
306
308
|
- `/stream` - Toggle real-time streaming
|
|
307
309
|
- `/system [prompt]` - Show or change system prompt
|
|
308
310
|
- `/status` - Show current provider, model, and capabilities
|
|
309
311
|
|
|
310
|
-
**Full Documentation:** [
|
|
312
|
+
**Full Documentation:** [AbstractCore CLI Guide](docs/acore-cli.md)
|
|
311
313
|
|
|
312
314
|
**When to use the CLI:**
|
|
313
315
|
- Interactive development and testing
|
|
@@ -318,7 +320,7 @@ python -m abstractcore.utils.cli --provider anthropic --model claude-3-5-haiku-l
|
|
|
318
320
|
|
|
319
321
|
## Built-in Applications (Ready-to-Use CLI Tools)
|
|
320
322
|
|
|
321
|
-
AbstractCore includes **
|
|
323
|
+
AbstractCore includes **four specialized command-line applications** for common LLM tasks. These are production-ready tools that can be used directly from the terminal without any Python programming.
|
|
322
324
|
|
|
323
325
|
### Available Applications
|
|
324
326
|
|
|
@@ -327,6 +329,7 @@ AbstractCore includes **three specialized command-line applications** for common
|
|
|
327
329
|
| **Summarizer** | Document summarization | `summarizer` |
|
|
328
330
|
| **Extractor** | Entity and relationship extraction | `extractor` |
|
|
329
331
|
| **Judge** | Text evaluation and scoring | `judge` |
|
|
332
|
+
| **Intent Analyzer** | Psychological intent analysis & deception detection | `intent` |
|
|
330
333
|
|
|
331
334
|
### Quick Usage Examples
|
|
332
335
|
|
|
@@ -345,6 +348,11 @@ extractor doc.txt --iterate 3 --mode thorough --verbose
|
|
|
345
348
|
judge essay.txt --criteria clarity,accuracy,coherence --context "academic writing"
|
|
346
349
|
judge code.py --context "code review" --format plain --verbose
|
|
347
350
|
judge proposal.md --custom-criteria has_examples,covers_risks --output assessment.json
|
|
351
|
+
|
|
352
|
+
# Intent analysis with psychological insights and deception detection
|
|
353
|
+
intent conversation.txt --focus-participant user --depth comprehensive
|
|
354
|
+
intent email.txt --format plain --context document --verbose
|
|
355
|
+
intent chat_log.json --conversation-mode --provider lmstudio --model qwen/qwen3-30b-a3b-2507
|
|
348
356
|
```
|
|
349
357
|
|
|
350
358
|
### Installation & Setup
|
|
@@ -359,6 +367,7 @@ pip install abstractcore[all]
|
|
|
359
367
|
summarizer --help
|
|
360
368
|
extractor --help
|
|
361
369
|
judge --help
|
|
370
|
+
intent --help
|
|
362
371
|
```
|
|
363
372
|
|
|
364
373
|
### Alternative Usage Methods
|
|
@@ -368,11 +377,13 @@ judge --help
|
|
|
368
377
|
summarizer document.txt
|
|
369
378
|
extractor report.pdf
|
|
370
379
|
judge essay.md
|
|
380
|
+
intent conversation.txt
|
|
371
381
|
|
|
372
382
|
# Method 2: Via Python module
|
|
373
383
|
python -m abstractcore.apps summarizer document.txt
|
|
374
384
|
python -m abstractcore.apps extractor report.pdf
|
|
375
385
|
python -m abstractcore.apps judge essay.md
|
|
386
|
+
python -m abstractcore.apps intent conversation.txt
|
|
376
387
|
```
|
|
377
388
|
|
|
378
389
|
### Key Parameters
|
|
@@ -414,10 +425,11 @@ python -m abstractcore.apps judge essay.md
|
|
|
414
425
|
|
|
415
426
|
### Full Documentation
|
|
416
427
|
|
|
417
|
-
Each application has
|
|
428
|
+
Each application has documentation with examples and usage information:
|
|
418
429
|
|
|
419
430
|
- **[Summarizer Guide](docs/apps/basic-summarizer.md)** - Document summarization with multiple strategies
|
|
420
431
|
- **[Extractor Guide](docs/apps/basic-extractor.md)** - Entity and relationship extraction
|
|
432
|
+
- **[Intent Analyzer Guide](docs/apps/basic-intent.md)** - Psychological intent analysis and deception detection
|
|
421
433
|
- **[Judge Guide](docs/apps/basic-judge.md)** - Text evaluation and scoring systems
|
|
422
434
|
|
|
423
435
|
**When to use the apps:**
|
|
@@ -451,6 +463,10 @@ abstractcore --set-console-log-level NONE # Disable console logging
|
|
|
451
463
|
abstractcore --enable-file-logging # Save logs to files
|
|
452
464
|
abstractcore --enable-debug-logging # Full debug mode
|
|
453
465
|
|
|
466
|
+
# Configure vision for image analysis with text-only models
|
|
467
|
+
abstractcore --set-vision-provider ollama qwen2.5vl:7b
|
|
468
|
+
abstractcore --set-vision-provider lmstudio qwen/qwen3-vl-4b
|
|
469
|
+
|
|
454
470
|
# Set API keys as needed
|
|
455
471
|
abstractcore --set-api-key openai sk-your-key-here
|
|
456
472
|
abstractcore --set-api-key anthropic your-anthropic-key
|
|
@@ -562,7 +578,7 @@ llm = create_llm("anthropic", model="claude-3.5-sonnet")
|
|
|
562
578
|
response = llm.generate(analysis_prompt, media=documents)
|
|
563
579
|
|
|
564
580
|
# Automatic format handling:
|
|
565
|
-
# - PDF:
|
|
581
|
+
# - PDF: Text extraction with PyMuPDF4LLM
|
|
566
582
|
# - Excel: Table parsing with pandas
|
|
567
583
|
# - PowerPoint: Slide content extraction with unstructured
|
|
568
584
|
```
|
|
@@ -615,6 +631,8 @@ review = llm.generate(
|
|
|
615
631
|
print(f"{review.title}: {review.rating}/5")
|
|
616
632
|
```
|
|
617
633
|
|
|
634
|
+
[Learn more about Structured Output](docs/structured-output.md)
|
|
635
|
+
|
|
618
636
|
### 7. Universal API Server
|
|
619
637
|
|
|
620
638
|
```bash
|
|
@@ -670,7 +688,7 @@ pip install abstractcore[all]
|
|
|
670
688
|
|
|
671
689
|
**Media processing extras:**
|
|
672
690
|
```bash
|
|
673
|
-
# For
|
|
691
|
+
# For PDF processing
|
|
674
692
|
pip install pymupdf4llm
|
|
675
693
|
|
|
676
694
|
# For Office documents (DOCX, XLSX, PPT)
|
|
@@ -9,11 +9,13 @@ Available apps:
|
|
|
9
9
|
summarizer - Document summarization tool
|
|
10
10
|
extractor - Entity and relationship extraction tool
|
|
11
11
|
judge - Text evaluation and scoring tool
|
|
12
|
+
intent - Intent analysis and motivation identification tool
|
|
12
13
|
|
|
13
14
|
Examples:
|
|
14
15
|
python -m abstractcore.apps summarizer document.txt
|
|
15
16
|
python -m abstractcore.apps extractor report.txt --format json-ld
|
|
16
17
|
python -m abstractcore.apps judge essay.txt --criteria clarity,accuracy
|
|
18
|
+
python -m abstractcore.apps intent "I need help with this problem" --depth comprehensive
|
|
17
19
|
python -m abstractcore.apps <app> --help
|
|
18
20
|
"""
|
|
19
21
|
|
|
@@ -43,9 +45,14 @@ def main():
|
|
|
43
45
|
sys.argv = [sys.argv[0]] + sys.argv[2:]
|
|
44
46
|
from .judge import main as judge_main
|
|
45
47
|
judge_main()
|
|
48
|
+
elif app_name == "intent":
|
|
49
|
+
# Remove the app name from sys.argv and run intent analyzer
|
|
50
|
+
sys.argv = [sys.argv[0]] + sys.argv[2:]
|
|
51
|
+
from .intent import main as intent_main
|
|
52
|
+
intent_main()
|
|
46
53
|
else:
|
|
47
54
|
print(f"Unknown app: {app_name}")
|
|
48
|
-
print("\nAvailable apps: summarizer, extractor, judge")
|
|
55
|
+
print("\nAvailable apps: summarizer, extractor, judge, intent")
|
|
49
56
|
sys.exit(1)
|
|
50
57
|
|
|
51
58
|
if __name__ == "__main__":
|