abstractcore 2.4.4__tar.gz → 2.4.6__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. {abstractcore-2.4.4 → abstractcore-2.4.6}/PKG-INFO +59 -9
  2. {abstractcore-2.4.4 → abstractcore-2.4.6}/README.md +58 -8
  3. abstractcore-2.4.6/abstractcore/cli/__init__.py +9 -0
  4. abstractcore-2.4.6/abstractcore/cli/main.py +759 -0
  5. abstractcore-2.4.6/abstractcore/cli/vision_config.py +491 -0
  6. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/core/interface.py +7 -0
  7. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/core/session.py +27 -2
  8. abstractcore-2.4.6/abstractcore/media/handlers/__init__.py +16 -0
  9. abstractcore-2.4.6/abstractcore/media/handlers/anthropic_handler.py +326 -0
  10. abstractcore-2.4.6/abstractcore/media/handlers/local_handler.py +541 -0
  11. abstractcore-2.4.6/abstractcore/media/handlers/openai_handler.py +281 -0
  12. abstractcore-2.4.6/abstractcore/media/processors/__init__.py +13 -0
  13. abstractcore-2.4.6/abstractcore/media/processors/image_processor.py +610 -0
  14. abstractcore-2.4.6/abstractcore/media/processors/office_processor.py +490 -0
  15. abstractcore-2.4.6/abstractcore/media/processors/pdf_processor.py +485 -0
  16. abstractcore-2.4.6/abstractcore/media/processors/text_processor.py +557 -0
  17. abstractcore-2.4.6/abstractcore/media/utils/__init__.py +22 -0
  18. abstractcore-2.4.6/abstractcore/media/utils/image_scaler.py +306 -0
  19. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/providers/anthropic_provider.py +14 -2
  20. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/providers/base.py +24 -0
  21. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/providers/huggingface_provider.py +23 -9
  22. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/providers/lmstudio_provider.py +6 -1
  23. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/providers/mlx_provider.py +20 -7
  24. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/providers/ollama_provider.py +6 -1
  25. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/providers/openai_provider.py +6 -2
  26. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/tools/common_tools.py +651 -1
  27. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/utils/version.py +1 -1
  28. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore.egg-info/PKG-INFO +59 -9
  29. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore.egg-info/SOURCES.txt +16 -0
  30. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore.egg-info/entry_points.txt +2 -0
  31. {abstractcore-2.4.4 → abstractcore-2.4.6}/pyproject.toml +28 -1
  32. abstractcore-2.4.6/tests/test_seed_determinism.py +354 -0
  33. abstractcore-2.4.6/tests/test_seed_temperature_basic.py +189 -0
  34. {abstractcore-2.4.4 → abstractcore-2.4.6}/LICENSE +0 -0
  35. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/__init__.py +0 -0
  36. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/apps/__init__.py +0 -0
  37. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/apps/__main__.py +0 -0
  38. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/apps/app_config_utils.py +0 -0
  39. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/apps/extractor.py +0 -0
  40. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/apps/judge.py +0 -0
  41. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/apps/summarizer.py +0 -0
  42. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/architectures/__init__.py +0 -0
  43. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/architectures/detection.py +0 -0
  44. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/architectures/enums.py +0 -0
  45. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/assets/architecture_formats.json +0 -0
  46. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/assets/model_capabilities.json +0 -0
  47. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/assets/session_schema.json +0 -0
  48. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/core/__init__.py +0 -0
  49. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/core/enums.py +0 -0
  50. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/core/factory.py +0 -0
  51. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/core/retry.py +0 -0
  52. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/core/types.py +0 -0
  53. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/embeddings/__init__.py +0 -0
  54. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/embeddings/manager.py +0 -0
  55. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/embeddings/models.py +0 -0
  56. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/events/__init__.py +0 -0
  57. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/exceptions/__init__.py +0 -0
  58. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/media/__init__.py +0 -0
  59. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/media/auto_handler.py +0 -0
  60. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/media/base.py +0 -0
  61. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/media/capabilities.py +0 -0
  62. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/media/types.py +0 -0
  63. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/media/vision_fallback.py +0 -0
  64. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/processing/__init__.py +0 -0
  65. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/processing/basic_extractor.py +0 -0
  66. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/processing/basic_judge.py +0 -0
  67. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/processing/basic_summarizer.py +0 -0
  68. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/providers/__init__.py +0 -0
  69. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/providers/mock_provider.py +0 -0
  70. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/providers/registry.py +0 -0
  71. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/providers/streaming.py +0 -0
  72. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/server/__init__.py +0 -0
  73. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/server/app.py +0 -0
  74. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/structured/__init__.py +0 -0
  75. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/structured/handler.py +0 -0
  76. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/structured/retry.py +0 -0
  77. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/tools/__init__.py +0 -0
  78. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/tools/core.py +0 -0
  79. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/tools/handler.py +0 -0
  80. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/tools/parser.py +0 -0
  81. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/tools/registry.py +0 -0
  82. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/tools/syntax_rewriter.py +0 -0
  83. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/tools/tag_rewriter.py +0 -0
  84. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/utils/__init__.py +0 -0
  85. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/utils/cli.py +0 -0
  86. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/utils/message_preprocessor.py +0 -0
  87. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/utils/self_fixes.py +0 -0
  88. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/utils/structured_logging.py +0 -0
  89. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore/utils/token_utils.py +0 -0
  90. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore.egg-info/dependency_links.txt +0 -0
  91. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore.egg-info/requires.txt +0 -0
  92. {abstractcore-2.4.4 → abstractcore-2.4.6}/abstractcore.egg-info/top_level.txt +0 -0
  93. {abstractcore-2.4.4 → abstractcore-2.4.6}/setup.cfg +0 -0
  94. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_agentic_cli_compatibility.py +0 -0
  95. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_all_specified_providers.py +0 -0
  96. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_basic_session.py +0 -0
  97. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_basic_summarizer.py +0 -0
  98. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_cli_media.py +0 -0
  99. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_complete_integration.py +0 -0
  100. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_comprehensive_events.py +0 -0
  101. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_consistency.py +0 -0
  102. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_core_components.py +0 -0
  103. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_critical_streaming_tool_fix.py +0 -0
  104. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_debug_server.py +0 -0
  105. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_direct_vs_server.py +0 -0
  106. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_embeddings.py +0 -0
  107. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_embeddings_integration.py +0 -0
  108. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_embeddings_llm_integration.py +0 -0
  109. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_embeddings_matrix_operations.py +0 -0
  110. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_embeddings_no_mock.py +0 -0
  111. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_embeddings_real.py +0 -0
  112. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_embeddings_semantic_validation.py +0 -0
  113. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_embeddings_simple.py +0 -0
  114. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_enhanced_prompt.py +0 -0
  115. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_environment_variable_tool_call_tags.py +0 -0
  116. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_factory.py +0 -0
  117. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_final_accuracy.py +0 -0
  118. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_final_comprehensive.py +0 -0
  119. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_final_graceful_errors.py +0 -0
  120. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_fixed_media.py +0 -0
  121. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_fixed_prompt.py +0 -0
  122. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_graceful_fallback.py +0 -0
  123. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_import_debug.py +0 -0
  124. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_integrated_functionality.py +0 -0
  125. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_lmstudio_context.py +0 -0
  126. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_media_import.py +0 -0
  127. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_media_server.py +0 -0
  128. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_ollama_tool_role_fix.py +0 -0
  129. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_openai_conversion_manual.py +0 -0
  130. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_openai_format_bug.py +0 -0
  131. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_openai_format_conversion.py +0 -0
  132. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_openai_media_integration.py +0 -0
  133. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_progressive_complexity.py +0 -0
  134. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_provider_basic_session.py +0 -0
  135. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_provider_connectivity.py +0 -0
  136. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_provider_simple_generation.py +0 -0
  137. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_provider_streaming.py +0 -0
  138. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_provider_token_translation.py +0 -0
  139. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_provider_tool_detection.py +0 -0
  140. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_providers.py +0 -0
  141. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_providers_comprehensive.py +0 -0
  142. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_providers_simple.py +0 -0
  143. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_real_models_comprehensive.py +0 -0
  144. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_retry_observability.py +0 -0
  145. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_retry_strategy.py +0 -0
  146. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_sensory_prompting.py +0 -0
  147. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_server_debug.py +0 -0
  148. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_server_embeddings_real.py +0 -0
  149. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_server_integration.py +0 -0
  150. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_stream_tool_calling.py +0 -0
  151. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_streaming_enhancements.py +0 -0
  152. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_streaming_tag_rewriting.py +0 -0
  153. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_structured_integration.py +0 -0
  154. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_structured_output.py +0 -0
  155. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_syntax_rewriter.py +0 -0
  156. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_text_only_model_experience.py +0 -0
  157. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_tool_calling.py +0 -0
  158. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_tool_execution_separation.py +0 -0
  159. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_unified_streaming.py +0 -0
  160. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_unload_memory.py +0 -0
  161. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_user_scenario_validation.py +0 -0
  162. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_vision_accuracy.py +0 -0
  163. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_vision_comprehensive.py +0 -0
  164. {abstractcore-2.4.4 → abstractcore-2.4.6}/tests/test_vision_fallback_improvement.py +0 -0
  165. {abstractcore-2.4.4 → abstractcore-2.4.6}/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.4.4
3
+ Version: 2.4.6
4
4
  Summary: Unified interface to all LLM providers with essential infrastructure for tool calling, streaming, and model management
5
5
  Author-email: Laurent-Philippe Albou <contact@abstractcore.ai>
6
6
  Maintainer-email: Laurent-Philippe Albou <contact@abstractcore.ai>
@@ -122,6 +122,21 @@ response = llm.generate("What is the capital of France?")
122
122
  print(response.content)
123
123
  ```
124
124
 
125
+ ### Deterministic Generation
126
+
127
+ ```python
128
+ from abstractcore import create_llm
129
+
130
+ # Deterministic outputs with seed + temperature=0
131
+ llm = create_llm("openai", model="gpt-3.5-turbo", seed=42, temperature=0.0)
132
+
133
+ # These will produce identical outputs
134
+ response1 = llm.generate("Write exactly 3 words about coding")
135
+ response2 = llm.generate("Write exactly 3 words about coding")
136
+ print(f"Response 1: {response1.content}") # "Innovative, challenging, rewarding."
137
+ print(f"Response 2: {response2.content}") # "Innovative, challenging, rewarding."
138
+ ```
139
+
125
140
  ### Tool Calling
126
141
 
127
142
  ```python
@@ -140,6 +155,39 @@ response = llm.generate(
140
155
  print(response.content)
141
156
  ```
142
157
 
158
+ ### Built-in Tools
159
+
160
+ AbstractCore includes a comprehensive set of ready-to-use tools for common tasks:
161
+
162
+ ```python
163
+ from abstractcore.tools.common_tools import fetch_url, search_files, read_file
164
+
165
+ # Intelligent web content fetching with automatic parsing
166
+ result = fetch_url("https://api.github.com/repos/python/cpython")
167
+ # Automatically detects JSON, HTML, images, PDFs, etc. and provides structured analysis
168
+
169
+ # File system operations
170
+ files = search_files("def.*fetch", ".", file_pattern="*.py") # Find function definitions
171
+ content = read_file("config.json") # Read file contents
172
+
173
+ # Use with any LLM
174
+ llm = create_llm("anthropic", model="claude-3-5-haiku-latest")
175
+ response = llm.generate(
176
+ "Analyze this API response and summarize the key information",
177
+ tools=[fetch_url]
178
+ )
179
+ ```
180
+
181
+ **Available Tools:**
182
+ - `fetch_url` - Intelligent web content fetching with automatic content type detection and parsing
183
+ - `search_files` - Search for text patterns inside files using regex
184
+ - `list_files` - Find and list files by names/paths using glob patterns
185
+ - `read_file` - Read file contents with optional line range selection
186
+ - `write_file` - Write content to files with directory creation
187
+ - `edit_file` - Edit files using pattern matching and replacement
188
+ - `web_search` - Search the web using DuckDuckGo
189
+ - `execute_command` - Execute shell commands safely with security controls
190
+
143
191
  ### Session Management
144
192
 
145
193
  ```python
@@ -228,14 +276,16 @@ response = llm.generate(
228
276
 
229
277
  ## Supported Providers
230
278
 
231
- | Provider | Status | Setup |
232
- |----------|--------|-------|
233
- | **OpenAI** | Full | [Get API key](docs/prerequisites.md#openai-setup) |
234
- | **Anthropic** | Full | [Get API key](docs/prerequisites.md#anthropic-setup) |
235
- | **Ollama** | Full | [Install guide](docs/prerequisites.md#ollama-setup) |
236
- | **LMStudio** | Full | [Install guide](docs/prerequisites.md#lmstudio-setup) |
237
- | **MLX** | Full | [Setup guide](docs/prerequisites.md#mlx-setup) |
238
- | **HuggingFace** | Full | [Setup guide](docs/prerequisites.md#huggingface-setup) |
279
+ | Provider | Status | SEED Support | Setup |
280
+ |----------|--------|-------------|-------|
281
+ | **OpenAI** | Full | ✅ Native | [Get API key](docs/prerequisites.md#openai-setup) |
282
+ | **Anthropic** | Full | ⚠️ Warning* | [Get API key](docs/prerequisites.md#anthropic-setup) |
283
+ | **Ollama** | Full | ✅ Native | [Install guide](docs/prerequisites.md#ollama-setup) |
284
+ | **LMStudio** | Full | ✅ Native | [Install guide](docs/prerequisites.md#lmstudio-setup) |
285
+ | **MLX** | Full | ✅ Native | [Setup guide](docs/prerequisites.md#mlx-setup) |
286
+ | **HuggingFace** | Full | ✅ Native | [Setup guide](docs/prerequisites.md#huggingface-setup) |
287
+
288
+ *Anthropic doesn't support seed parameters but issues a warning when provided. Use `temperature=0.0` for more consistent outputs.
239
289
 
240
290
  ## Server Mode (Optional HTTP REST API)
241
291
 
@@ -28,6 +28,21 @@ response = llm.generate("What is the capital of France?")
28
28
  print(response.content)
29
29
  ```
30
30
 
31
+ ### Deterministic Generation
32
+
33
+ ```python
34
+ from abstractcore import create_llm
35
+
36
+ # Deterministic outputs with seed + temperature=0
37
+ llm = create_llm("openai", model="gpt-3.5-turbo", seed=42, temperature=0.0)
38
+
39
+ # These will produce identical outputs
40
+ response1 = llm.generate("Write exactly 3 words about coding")
41
+ response2 = llm.generate("Write exactly 3 words about coding")
42
+ print(f"Response 1: {response1.content}") # "Innovative, challenging, rewarding."
43
+ print(f"Response 2: {response2.content}") # "Innovative, challenging, rewarding."
44
+ ```
45
+
31
46
  ### Tool Calling
32
47
 
33
48
  ```python
@@ -46,6 +61,39 @@ response = llm.generate(
46
61
  print(response.content)
47
62
  ```
48
63
 
64
+ ### Built-in Tools
65
+
66
+ AbstractCore includes a comprehensive set of ready-to-use tools for common tasks:
67
+
68
+ ```python
69
+ from abstractcore.tools.common_tools import fetch_url, search_files, read_file
70
+
71
+ # Intelligent web content fetching with automatic parsing
72
+ result = fetch_url("https://api.github.com/repos/python/cpython")
73
+ # Automatically detects JSON, HTML, images, PDFs, etc. and provides structured analysis
74
+
75
+ # File system operations
76
+ files = search_files("def.*fetch", ".", file_pattern="*.py") # Find function definitions
77
+ content = read_file("config.json") # Read file contents
78
+
79
+ # Use with any LLM
80
+ llm = create_llm("anthropic", model="claude-3-5-haiku-latest")
81
+ response = llm.generate(
82
+ "Analyze this API response and summarize the key information",
83
+ tools=[fetch_url]
84
+ )
85
+ ```
86
+
87
+ **Available Tools:**
88
+ - `fetch_url` - Intelligent web content fetching with automatic content type detection and parsing
89
+ - `search_files` - Search for text patterns inside files using regex
90
+ - `list_files` - Find and list files by names/paths using glob patterns
91
+ - `read_file` - Read file contents with optional line range selection
92
+ - `write_file` - Write content to files with directory creation
93
+ - `edit_file` - Edit files using pattern matching and replacement
94
+ - `web_search` - Search the web using DuckDuckGo
95
+ - `execute_command` - Execute shell commands safely with security controls
96
+
49
97
  ### Session Management
50
98
 
51
99
  ```python
@@ -134,14 +182,16 @@ response = llm.generate(
134
182
 
135
183
  ## Supported Providers
136
184
 
137
- | Provider | Status | Setup |
138
- |----------|--------|-------|
139
- | **OpenAI** | Full | [Get API key](docs/prerequisites.md#openai-setup) |
140
- | **Anthropic** | Full | [Get API key](docs/prerequisites.md#anthropic-setup) |
141
- | **Ollama** | Full | [Install guide](docs/prerequisites.md#ollama-setup) |
142
- | **LMStudio** | Full | [Install guide](docs/prerequisites.md#lmstudio-setup) |
143
- | **MLX** | Full | [Setup guide](docs/prerequisites.md#mlx-setup) |
144
- | **HuggingFace** | Full | [Setup guide](docs/prerequisites.md#huggingface-setup) |
185
+ | Provider | Status | SEED Support | Setup |
186
+ |----------|--------|-------------|-------|
187
+ | **OpenAI** | Full | ✅ Native | [Get API key](docs/prerequisites.md#openai-setup) |
188
+ | **Anthropic** | Full | ⚠️ Warning* | [Get API key](docs/prerequisites.md#anthropic-setup) |
189
+ | **Ollama** | Full | ✅ Native | [Install guide](docs/prerequisites.md#ollama-setup) |
190
+ | **LMStudio** | Full | ✅ Native | [Install guide](docs/prerequisites.md#lmstudio-setup) |
191
+ | **MLX** | Full | ✅ Native | [Setup guide](docs/prerequisites.md#mlx-setup) |
192
+ | **HuggingFace** | Full | ✅ Native | [Setup guide](docs/prerequisites.md#huggingface-setup) |
193
+
194
+ *Anthropic doesn't support seed parameters but issues a warning when provided. Use `temperature=0.0` for more consistent outputs.
145
195
 
146
196
  ## Server Mode (Optional HTTP REST API)
147
197
 
@@ -0,0 +1,9 @@
1
+ """
2
+ AbstractCore CLI Module
3
+
4
+ Provides command-line interface for AbstractCore configuration and tools.
5
+ """
6
+
7
+ from .vision_config import handle_vision_commands, add_vision_arguments
8
+
9
+ __all__ = ['handle_vision_commands', 'add_vision_arguments']