abstractcore 2.5.0__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.
Files changed (169) hide show
  1. {abstractcore-2.5.0 → abstractcore-2.5.2}/PKG-INFO +34 -18
  2. {abstractcore-2.5.0 → abstractcore-2.5.2}/README.md +31 -17
  3. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/apps/__main__.py +8 -1
  4. abstractcore-2.5.2/abstractcore/apps/deepsearch.py +644 -0
  5. abstractcore-2.5.2/abstractcore/apps/intent.py +614 -0
  6. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/assets/model_capabilities.json +50 -34
  7. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/config/main.py +2 -1
  8. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/config/manager.py +11 -0
  9. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/core/session.py +46 -1
  10. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/processing/__init__.py +5 -1
  11. abstractcore-2.5.2/abstractcore/processing/basic_deepsearch.py +2173 -0
  12. abstractcore-2.5.2/abstractcore/processing/basic_intent.py +690 -0
  13. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/providers/anthropic_provider.py +1 -0
  14. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/providers/base.py +1 -0
  15. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/providers/huggingface_provider.py +95 -4
  16. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/providers/lmstudio_provider.py +14 -0
  17. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/providers/mlx_provider.py +76 -2
  18. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/providers/ollama_provider.py +6 -2
  19. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/providers/openai_provider.py +1 -0
  20. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/providers/registry.py +6 -6
  21. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/structured/handler.py +161 -1
  22. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/tools/common_tools.py +98 -3
  23. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/utils/cli.py +114 -1
  24. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/utils/version.py +1 -1
  25. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore.egg-info/PKG-INFO +34 -18
  26. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore.egg-info/SOURCES.txt +4 -0
  27. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore.egg-info/entry_points.txt +4 -0
  28. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore.egg-info/requires.txt +2 -0
  29. {abstractcore-2.5.0 → abstractcore-2.5.2}/pyproject.toml +7 -0
  30. {abstractcore-2.5.0 → abstractcore-2.5.2}/LICENSE +0 -0
  31. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/__init__.py +0 -0
  32. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/apps/__init__.py +0 -0
  33. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/apps/app_config_utils.py +0 -0
  34. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/apps/extractor.py +0 -0
  35. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/apps/judge.py +0 -0
  36. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/apps/summarizer.py +0 -0
  37. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/architectures/__init__.py +0 -0
  38. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/architectures/detection.py +0 -0
  39. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/architectures/enums.py +0 -0
  40. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/assets/architecture_formats.json +0 -0
  41. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/assets/session_schema.json +0 -0
  42. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/config/__init__.py +0 -0
  43. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/config/vision_config.py +0 -0
  44. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/core/__init__.py +0 -0
  45. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/core/enums.py +0 -0
  46. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/core/factory.py +0 -0
  47. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/core/interface.py +0 -0
  48. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/core/retry.py +0 -0
  49. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/core/types.py +0 -0
  50. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/embeddings/__init__.py +0 -0
  51. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/embeddings/manager.py +0 -0
  52. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/embeddings/models.py +0 -0
  53. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/events/__init__.py +0 -0
  54. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/exceptions/__init__.py +0 -0
  55. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/media/__init__.py +0 -0
  56. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/media/auto_handler.py +0 -0
  57. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/media/base.py +0 -0
  58. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/media/capabilities.py +0 -0
  59. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/media/handlers/__init__.py +0 -0
  60. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/media/handlers/anthropic_handler.py +0 -0
  61. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/media/handlers/local_handler.py +0 -0
  62. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/media/handlers/openai_handler.py +0 -0
  63. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/media/processors/__init__.py +0 -0
  64. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/media/processors/image_processor.py +0 -0
  65. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/media/processors/office_processor.py +0 -0
  66. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/media/processors/pdf_processor.py +0 -0
  67. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/media/processors/text_processor.py +0 -0
  68. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/media/types.py +0 -0
  69. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/media/utils/__init__.py +0 -0
  70. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/media/utils/image_scaler.py +0 -0
  71. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/media/vision_fallback.py +0 -0
  72. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/processing/basic_extractor.py +0 -0
  73. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/processing/basic_judge.py +0 -0
  74. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/processing/basic_summarizer.py +0 -0
  75. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/providers/__init__.py +0 -0
  76. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/providers/streaming.py +0 -0
  77. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/server/__init__.py +0 -0
  78. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/server/app.py +0 -0
  79. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/structured/__init__.py +0 -0
  80. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/structured/retry.py +0 -0
  81. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/tools/__init__.py +0 -0
  82. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/tools/core.py +0 -0
  83. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/tools/handler.py +0 -0
  84. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/tools/parser.py +0 -0
  85. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/tools/registry.py +0 -0
  86. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/tools/syntax_rewriter.py +0 -0
  87. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/tools/tag_rewriter.py +0 -0
  88. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/utils/__init__.py +0 -0
  89. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/utils/message_preprocessor.py +0 -0
  90. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/utils/self_fixes.py +0 -0
  91. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/utils/structured_logging.py +0 -0
  92. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore/utils/token_utils.py +0 -0
  93. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore.egg-info/dependency_links.txt +0 -0
  94. {abstractcore-2.5.0 → abstractcore-2.5.2}/abstractcore.egg-info/top_level.txt +0 -0
  95. {abstractcore-2.5.0 → abstractcore-2.5.2}/setup.cfg +0 -0
  96. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_agentic_cli_compatibility.py +0 -0
  97. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_all_specified_providers.py +0 -0
  98. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_basic_session.py +0 -0
  99. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_basic_summarizer.py +0 -0
  100. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_cli_media.py +0 -0
  101. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_complete_integration.py +0 -0
  102. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_comprehensive_events.py +0 -0
  103. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_consistency.py +0 -0
  104. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_core_components.py +0 -0
  105. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_critical_streaming_tool_fix.py +0 -0
  106. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_debug_server.py +0 -0
  107. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_direct_vs_server.py +0 -0
  108. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_embeddings.py +0 -0
  109. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_embeddings_integration.py +0 -0
  110. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_embeddings_llm_integration.py +0 -0
  111. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_embeddings_matrix_operations.py +0 -0
  112. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_embeddings_no_mock.py +0 -0
  113. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_embeddings_real.py +0 -0
  114. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_embeddings_semantic_validation.py +0 -0
  115. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_embeddings_simple.py +0 -0
  116. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_enhanced_prompt.py +0 -0
  117. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_environment_variable_tool_call_tags.py +0 -0
  118. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_factory.py +0 -0
  119. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_final_accuracy.py +0 -0
  120. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_final_comprehensive.py +0 -0
  121. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_final_graceful_errors.py +0 -0
  122. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_fixed_media.py +0 -0
  123. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_fixed_prompt.py +0 -0
  124. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_graceful_fallback.py +0 -0
  125. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_import_debug.py +0 -0
  126. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_integrated_functionality.py +0 -0
  127. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_lmstudio_context.py +0 -0
  128. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_media_import.py +0 -0
  129. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_media_server.py +0 -0
  130. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_ollama_tool_role_fix.py +0 -0
  131. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_openai_conversion_manual.py +0 -0
  132. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_openai_format_bug.py +0 -0
  133. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_openai_format_conversion.py +0 -0
  134. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_openai_media_integration.py +0 -0
  135. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_progressive_complexity.py +0 -0
  136. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_provider_basic_session.py +0 -0
  137. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_provider_connectivity.py +0 -0
  138. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_provider_simple_generation.py +0 -0
  139. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_provider_streaming.py +0 -0
  140. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_provider_token_translation.py +0 -0
  141. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_provider_tool_detection.py +0 -0
  142. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_providers.py +0 -0
  143. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_providers_comprehensive.py +0 -0
  144. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_providers_simple.py +0 -0
  145. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_real_models_comprehensive.py +0 -0
  146. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_retry_observability.py +0 -0
  147. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_retry_strategy.py +0 -0
  148. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_seed_determinism.py +0 -0
  149. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_seed_temperature_basic.py +0 -0
  150. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_sensory_prompting.py +0 -0
  151. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_server_debug.py +0 -0
  152. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_server_embeddings_real.py +0 -0
  153. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_server_integration.py +0 -0
  154. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_stream_tool_calling.py +0 -0
  155. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_streaming_enhancements.py +0 -0
  156. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_streaming_tag_rewriting.py +0 -0
  157. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_structured_integration.py +0 -0
  158. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_structured_output.py +0 -0
  159. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_syntax_rewriter.py +0 -0
  160. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_text_only_model_experience.py +0 -0
  161. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_tool_calling.py +0 -0
  162. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_tool_execution_separation.py +0 -0
  163. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_unified_streaming.py +0 -0
  164. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_unload_memory.py +0 -0
  165. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_user_scenario_validation.py +0 -0
  166. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_vision_accuracy.py +0 -0
  167. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_vision_comprehensive.py +0 -0
  168. {abstractcore-2.5.0 → abstractcore-2.5.2}/tests/test_vision_fallback_improvement.py +0 -0
  169. {abstractcore-2.5.0 → 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.5.0
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 **unified media handling** across all providers with **automatic maximum resolution optimization** for best results. Upload images, PDFs, and documents using the same simple API regardless of your provider.
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 best vision results
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 for best results
314
- - **Document Processing**: Advanced PDF extraction (PyMuPDF4LLM), Office documents (DOCX/XLSX/PPT), CSV/TSV analysis
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 Responses**: Clean, predictable output formats with Pydantic
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 | Native | [Get API key](docs/prerequisites.md#openai-setup) |
328
- | **Anthropic** | Full | ⚠️ Warning* | [Get API key](docs/prerequisites.md#anthropic-setup) |
329
- | **Ollama** | Full | Native | [Install guide](docs/prerequisites.md#ollama-setup) |
330
- | **LMStudio** | Full | Native | [Install guide](docs/prerequisites.md#lmstudio-setup) |
331
- | **MLX** | Full | Native | [Setup guide](docs/prerequisites.md#mlx-setup) |
332
- | **HuggingFace** | Full | Native | [Setup guide](docs/prerequisites.md#huggingface-setup) |
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
- ## Internal CLI (Optional Interactive Testing Tool)
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:** [Internal CLI Guide](docs/internal-cli.md)
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 **three 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.
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 comprehensive documentation with examples and advanced usage:
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:**
@@ -666,7 +680,7 @@ llm = create_llm("anthropic", model="claude-3.5-sonnet")
666
680
  response = llm.generate(analysis_prompt, media=documents)
667
681
 
668
682
  # Automatic format handling:
669
- # - PDF: Advanced text extraction with PyMuPDF4LLM
683
+ # - PDF: Text extraction with PyMuPDF4LLM
670
684
  # - Excel: Table parsing with pandas
671
685
  # - PowerPoint: Slide content extraction with unstructured
672
686
  ```
@@ -719,6 +733,8 @@ review = llm.generate(
719
733
  print(f"{review.title}: {review.rating}/5")
720
734
  ```
721
735
 
736
+ [Learn more about Structured Output](docs/structured-output.md)
737
+
722
738
  ### 7. Universal API Server
723
739
 
724
740
  ```bash
@@ -774,7 +790,7 @@ pip install abstractcore[all]
774
790
 
775
791
  **Media processing extras:**
776
792
  ```bash
777
- # For advanced PDF processing
793
+ # For PDF processing
778
794
  pip install pymupdf4llm
779
795
 
780
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 **unified media handling** across all providers with **automatic maximum resolution optimization** for best results. Upload images, PDFs, and documents using the same simple API regardless of your provider.
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 best vision results
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 for best results
214
- - **Document Processing**: Advanced PDF extraction (PyMuPDF4LLM), Office documents (DOCX/XLSX/PPT), CSV/TSV analysis
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 Responses**: Clean, predictable output formats with Pydantic
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 | 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) |
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
- ## Internal CLI (Optional Interactive Testing Tool)
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:** [Internal CLI Guide](docs/internal-cli.md)
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 **three 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.
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 comprehensive documentation with examples and advanced usage:
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:**
@@ -566,7 +578,7 @@ llm = create_llm("anthropic", model="claude-3.5-sonnet")
566
578
  response = llm.generate(analysis_prompt, media=documents)
567
579
 
568
580
  # Automatic format handling:
569
- # - PDF: Advanced text extraction with PyMuPDF4LLM
581
+ # - PDF: Text extraction with PyMuPDF4LLM
570
582
  # - Excel: Table parsing with pandas
571
583
  # - PowerPoint: Slide content extraction with unstructured
572
584
  ```
@@ -619,6 +631,8 @@ review = llm.generate(
619
631
  print(f"{review.title}: {review.rating}/5")
620
632
  ```
621
633
 
634
+ [Learn more about Structured Output](docs/structured-output.md)
635
+
622
636
  ### 7. Universal API Server
623
637
 
624
638
  ```bash
@@ -674,7 +688,7 @@ pip install abstractcore[all]
674
688
 
675
689
  **Media processing extras:**
676
690
  ```bash
677
- # For advanced PDF processing
691
+ # For PDF processing
678
692
  pip install pymupdf4llm
679
693
 
680
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__":