abstractcore 2.5.2__py3-none-any.whl → 2.5.3__py3-none-any.whl

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 (50) hide show
  1. abstractcore/__init__.py +12 -0
  2. abstractcore/architectures/detection.py +250 -4
  3. abstractcore/assets/architecture_formats.json +14 -1
  4. abstractcore/assets/model_capabilities.json +533 -10
  5. abstractcore/compression/__init__.py +29 -0
  6. abstractcore/compression/analytics.py +420 -0
  7. abstractcore/compression/cache.py +250 -0
  8. abstractcore/compression/config.py +279 -0
  9. abstractcore/compression/exceptions.py +30 -0
  10. abstractcore/compression/glyph_processor.py +381 -0
  11. abstractcore/compression/optimizer.py +388 -0
  12. abstractcore/compression/orchestrator.py +380 -0
  13. abstractcore/compression/pil_text_renderer.py +818 -0
  14. abstractcore/compression/quality.py +226 -0
  15. abstractcore/compression/text_formatter.py +666 -0
  16. abstractcore/compression/vision_compressor.py +371 -0
  17. abstractcore/config/main.py +64 -0
  18. abstractcore/config/manager.py +100 -5
  19. abstractcore/core/session.py +61 -6
  20. abstractcore/events/__init__.py +1 -1
  21. abstractcore/media/auto_handler.py +312 -18
  22. abstractcore/media/handlers/local_handler.py +14 -2
  23. abstractcore/media/handlers/openai_handler.py +62 -3
  24. abstractcore/media/processors/__init__.py +11 -1
  25. abstractcore/media/processors/direct_pdf_processor.py +210 -0
  26. abstractcore/media/processors/glyph_pdf_processor.py +227 -0
  27. abstractcore/media/processors/image_processor.py +7 -1
  28. abstractcore/media/processors/text_processor.py +18 -3
  29. abstractcore/media/types.py +164 -7
  30. abstractcore/providers/__init__.py +18 -0
  31. abstractcore/providers/anthropic_provider.py +28 -2
  32. abstractcore/providers/base.py +278 -6
  33. abstractcore/providers/huggingface_provider.py +563 -23
  34. abstractcore/providers/lmstudio_provider.py +38 -2
  35. abstractcore/providers/mlx_provider.py +27 -2
  36. abstractcore/providers/model_capabilities.py +352 -0
  37. abstractcore/providers/ollama_provider.py +38 -4
  38. abstractcore/providers/openai_provider.py +28 -2
  39. abstractcore/providers/registry.py +85 -13
  40. abstractcore/server/app.py +91 -81
  41. abstractcore/utils/__init__.py +4 -1
  42. abstractcore/utils/trace_export.py +287 -0
  43. abstractcore/utils/version.py +1 -1
  44. abstractcore/utils/vlm_token_calculator.py +655 -0
  45. {abstractcore-2.5.2.dist-info → abstractcore-2.5.3.dist-info}/METADATA +107 -6
  46. {abstractcore-2.5.2.dist-info → abstractcore-2.5.3.dist-info}/RECORD +50 -33
  47. {abstractcore-2.5.2.dist-info → abstractcore-2.5.3.dist-info}/WHEEL +0 -0
  48. {abstractcore-2.5.2.dist-info → abstractcore-2.5.3.dist-info}/entry_points.txt +0 -0
  49. {abstractcore-2.5.2.dist-info → abstractcore-2.5.3.dist-info}/licenses/LICENSE +0 -0
  50. {abstractcore-2.5.2.dist-info → abstractcore-2.5.3.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: abstractcore
3
- Version: 2.5.2
3
+ Version: 2.5.3
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>
@@ -37,8 +37,10 @@ Requires-Dist: anthropic<1.0.0,>=0.25.0; extra == "anthropic"
37
37
  Provides-Extra: ollama
38
38
  Provides-Extra: lmstudio
39
39
  Provides-Extra: huggingface
40
- Requires-Dist: transformers<5.0.0,>=4.30.0; extra == "huggingface"
41
- Requires-Dist: torch<3.0.0,>=1.12.0; extra == "huggingface"
40
+ Requires-Dist: transformers<5.0.0,>=4.57.1; extra == "huggingface"
41
+ Requires-Dist: torch<3.0.0,>=2.6.0; extra == "huggingface"
42
+ Requires-Dist: torchvision>=0.17.0; extra == "huggingface"
43
+ Requires-Dist: torchaudio>=2.1.0; extra == "huggingface"
42
44
  Requires-Dist: llama-cpp-python<1.0.0,>=0.2.0; extra == "huggingface"
43
45
  Requires-Dist: outlines>=0.1.0; extra == "huggingface"
44
46
  Provides-Extra: mlx
@@ -46,7 +48,7 @@ Requires-Dist: mlx<1.0.0,>=0.15.0; extra == "mlx"
46
48
  Requires-Dist: mlx-lm<1.0.0,>=0.15.0; extra == "mlx"
47
49
  Requires-Dist: outlines>=0.1.0; extra == "mlx"
48
50
  Provides-Extra: embeddings
49
- Requires-Dist: sentence-transformers<4.0.0,>=2.7.0; extra == "embeddings"
51
+ Requires-Dist: sentence-transformers<6.0.0,>=5.1.0; extra == "embeddings"
50
52
  Requires-Dist: numpy<2.0.0,>=1.20.0; extra == "embeddings"
51
53
  Provides-Extra: processing
52
54
  Provides-Extra: tools
@@ -59,6 +61,8 @@ Requires-Dist: Pillow<12.0.0,>=10.0.0; extra == "media"
59
61
  Requires-Dist: pymupdf4llm<1.0.0,>=0.0.20; extra == "media"
60
62
  Requires-Dist: unstructured[office]<1.0.0,>=0.10.0; extra == "media"
61
63
  Requires-Dist: pandas<3.0.0,>=1.0.0; extra == "media"
64
+ Provides-Extra: compression
65
+ Requires-Dist: pdf2image<2.0.0,>=1.16.0; extra == "compression"
62
66
  Provides-Extra: api-providers
63
67
  Requires-Dist: abstractcore[anthropic,openai]; extra == "api-providers"
64
68
  Provides-Extra: local-providers
@@ -68,9 +72,9 @@ Requires-Dist: abstractcore[huggingface]; extra == "heavy-providers"
68
72
  Provides-Extra: all-providers
69
73
  Requires-Dist: abstractcore[anthropic,embeddings,huggingface,lmstudio,mlx,ollama,openai]; extra == "all-providers"
70
74
  Provides-Extra: all
71
- Requires-Dist: abstractcore[anthropic,dev,docs,embeddings,huggingface,lmstudio,media,mlx,ollama,openai,processing,server,test,tools]; extra == "all"
75
+ Requires-Dist: abstractcore[anthropic,compression,dev,docs,embeddings,huggingface,lmstudio,media,mlx,ollama,openai,processing,server,test,tools]; extra == "all"
72
76
  Provides-Extra: lightweight
73
- Requires-Dist: abstractcore[anthropic,embeddings,lmstudio,media,ollama,openai,processing,server,tools]; extra == "lightweight"
77
+ Requires-Dist: abstractcore[anthropic,compression,embeddings,lmstudio,media,ollama,openai,processing,server,tools]; extra == "lightweight"
74
78
  Provides-Extra: dev
75
79
  Requires-Dist: pytest>=7.0.0; extra == "dev"
76
80
  Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev"
@@ -258,6 +262,55 @@ loaded_session = BasicSession.load('conversation.json', provider=llm)
258
262
 
259
263
  [Learn more about Session](docs/session.md)
260
264
 
265
+ ### Interaction Tracing (Observability)
266
+
267
+ Enable complete observability of LLM interactions for debugging, compliance, and transparency:
268
+
269
+ ```python
270
+ from abstractcore import create_llm
271
+ from abstractcore.core.session import BasicSession
272
+ from abstractcore.utils import export_traces
273
+
274
+ # Enable tracing on provider
275
+ llm = create_llm('openai', model='gpt-4o-mini', enable_tracing=True, max_traces=100)
276
+
277
+ # Or on session for automatic correlation
278
+ session = BasicSession(provider=llm, enable_tracing=True)
279
+
280
+ # Generate with custom metadata
281
+ response = session.generate(
282
+ "Write Python code",
283
+ step_type='code_generation',
284
+ attempt_number=1
285
+ )
286
+
287
+ # Access complete trace
288
+ trace_id = response.metadata['trace_id']
289
+ trace = llm.get_traces(trace_id=trace_id)
290
+
291
+ # Full interaction context
292
+ print(f"Prompt: {trace['prompt']}")
293
+ print(f"Response: {trace['response']['content']}")
294
+ print(f"Tokens: {trace['response']['usage']['total_tokens']}")
295
+ print(f"Time: {trace['response']['generation_time_ms']}ms")
296
+ print(f"Custom metadata: {trace['metadata']}")
297
+
298
+ # Get all session traces
299
+ traces = session.get_interaction_history()
300
+
301
+ # Export to JSONL, JSON, or Markdown
302
+ export_traces(traces, format='markdown', file_path='workflow_trace.md')
303
+ ```
304
+
305
+ **What's captured:**
306
+ - All prompts, system prompts, and conversation history
307
+ - Complete responses with token usage and timing
308
+ - Generation parameters (temperature, tokens, seed, etc.)
309
+ - Custom metadata for workflow tracking
310
+ - Tool calls and results
311
+
312
+ [Learn more about Interaction Tracing](docs/interaction-tracing.md)
313
+
261
314
  ### Media Handling
262
315
 
263
316
  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.
@@ -307,9 +360,56 @@ response = llm.generate(
307
360
 
308
361
  [Learn more about Media Handling](docs/media-handling-system.md)
309
362
 
363
+ ### Glyph Visual-Text Compression (🧪 EXPERIMENTAL)
364
+
365
+ > ⚠️ **Vision Model Requirement**: This feature ONLY works with vision-capable models (e.g., gpt-4o, claude-3-5-sonnet, llama3.2-vision)
366
+
367
+ Achieve **3-4x token compression** and **faster inference** with Glyph's revolutionary visual-text compression:
368
+
369
+ ```python
370
+ from abstractcore import create_llm
371
+
372
+ # IMPORTANT: Requires a vision-capable model
373
+ llm = create_llm("ollama", model="llama3.2-vision:11b") # ✓ Vision model
374
+
375
+ # Large documents are automatically compressed for efficiency
376
+ response = llm.generate(
377
+ "Analyze the key findings in this research paper",
378
+ media=["large_research_paper.pdf"] # Automatically compressed if beneficial
379
+ )
380
+
381
+ # Force compression (raises error if model lacks vision)
382
+ response = llm.generate(
383
+ "Summarize this document",
384
+ media=["document.pdf"],
385
+ glyph_compression="always" # "auto" | "always" | "never"
386
+ )
387
+
388
+ # Non-vision models will raise UnsupportedFeatureError
389
+ # llm_no_vision = create_llm("openai", model="gpt-4") # ✗ No vision
390
+ # response = llm_no_vision.generate("...", glyph_compression="always") # Error!
391
+
392
+ # Check compression stats
393
+ if response.metadata and response.metadata.get('compression_used'):
394
+ stats = response.metadata.get('compression_stats', {})
395
+ print(f"Compression ratio: {stats.get('compression_ratio')}x")
396
+ print(f"Processing speedup: 14% faster, 79% less memory")
397
+ ```
398
+
399
+ **Validated Performance:**
400
+ - **14% faster processing** with real-world documents
401
+ - **79% lower memory usage** during processing
402
+ - **100% quality preservation** - no loss of analytical accuracy
403
+ - **Transparent operation** - works with existing code
404
+
405
+ [Learn more about Glyph Compression](docs/glyphs.md)
406
+
310
407
  ## Key Features
311
408
 
409
+ - **Offline-First Design**: Built primarily for open source LLMs with full offline capability. Download once, run forever without internet access
312
410
  - **Provider Agnostic**: Seamlessly switch between OpenAI, Anthropic, Ollama, LMStudio, MLX, HuggingFace
411
+ - **Interaction Tracing**: Complete LLM observability with programmatic access to prompts, responses, tokens, and timing for debugging and compliance
412
+ - **Glyph Visual-Text Compression**: Revolutionary compression system that renders text as optimized images for 3-4x token compression and faster inference
313
413
  - **Centralized Configuration**: Global defaults and app-specific preferences at `~/.abstractcore/config/abstractcore.json`
314
414
  - **Intelligent Media Handling**: Upload images, PDFs, and documents with automatic maximum resolution optimization
315
415
  - **Vision Model Support**: Smart image processing at each model's maximum capability
@@ -752,6 +852,7 @@ curl -X POST http://localhost:8000/v1/chat/completions \
752
852
 
753
853
  ## Why AbstractCore?
754
854
 
855
+ - **Offline-First Philosophy**: Designed for open source LLMs with complete offline operation. No internet required after initial model download
755
856
  - **Unified Interface**: One API for all LLM providers
756
857
  - **Multimodal Support**: Upload images, PDFs, and documents across all providers
757
858
  - **Vision Models**: Seamless integration with GPT-4o, Claude Vision, qwen3-vl, and more
@@ -1,4 +1,4 @@
1
- abstractcore/__init__.py,sha256=A7Gbn_C-robdWLLQXjtTyWsoaXDGIblSFmLRV_ni6O8,1934
1
+ abstractcore/__init__.py,sha256=G3x3N515eDSDnFd8xFfR6xO875j-Wppyab7yd8_pgE8,2296
2
2
  abstractcore/apps/__init__.py,sha256=sgNOv3lYyOWNBC-w6GnRN6aILGCbdkQtNcuQdJz5ghE,31
3
3
  abstractcore/apps/__main__.py,sha256=fV9cGU99K4lGRsPNOLkh8qrDjH3JtMEWNlBiZrvI5Kk,1974
4
4
  abstractcore/apps/app_config_utils.py,sha256=5GIvXnD996LFIV3-BpfkqII6UqYlStm7ZCgmqDEN8dc,890
@@ -8,42 +8,56 @@ abstractcore/apps/intent.py,sha256=5ie_H9_K_ZxlA0oCu7ROUrsgwfzDNFgVUyBNec6YVRE,2
8
8
  abstractcore/apps/judge.py,sha256=nOgxvn-BbhNY6xU9AlTeD1yidTh73AiVlSN7hQCVE2M,23169
9
9
  abstractcore/apps/summarizer.py,sha256=9aD6KH21w-tv_wGp9MaO2uyJuaU71OemW7KpqrG5t6w,14669
10
10
  abstractcore/architectures/__init__.py,sha256=-4JucAM7JkMWShWKkePoclxrUHRKgaG36UTguJihE0U,1046
11
- abstractcore/architectures/detection.py,sha256=Cxap1pL6qOJjyY22Vc4hzbLALTuuBisPT5UaMotousk,10025
11
+ abstractcore/architectures/detection.py,sha256=kCgm0CjI1Ood0Lv36zGAlwv4AKy4ypsmzwFhEWxIXKM,19785
12
12
  abstractcore/architectures/enums.py,sha256=9vIv2vDBEKhxwzwH9iaSAyf-iVj3p8y9loMeN_mYTJ8,3821
13
- abstractcore/assets/architecture_formats.json,sha256=CIf6SaR_IJs1D7Uvd1K3zWngIXJ_yq3DM_IE3wnpCHY,16076
14
- abstractcore/assets/model_capabilities.json,sha256=AJwF1tmaGGl4P-UTbKX6awsgw7W543UN2TuqhC3y_Ss,50236
13
+ abstractcore/assets/architecture_formats.json,sha256=Yf-W1UuadrL8qid0pfU_pEBOkjwH4lvx7Nzu83GACp8,16622
14
+ abstractcore/assets/model_capabilities.json,sha256=tmfQNNPTNJAauF51nPYkMqcjc17F2geeYngh0HjEUZ0,68836
15
15
  abstractcore/assets/session_schema.json,sha256=hMCVrq3KSyVExrMGzuykf7bU-z6WyIVuEGU8du9_zUY,10570
16
+ abstractcore/compression/__init__.py,sha256=svwaHCHoLkKp1IJKdlSC72k6b8vOUOqVF-Yek8ZHwj8,915
17
+ abstractcore/compression/analytics.py,sha256=3orxJkjjMQE_6mID8_8C0sRQ4Gr2Pw7kQ-Iy0p7pIgM,16042
18
+ abstractcore/compression/cache.py,sha256=ohBEvxzjwAbdG8bpQi6ZbF7uh2vyz07-vuu4Sig0ABk,9186
19
+ abstractcore/compression/config.py,sha256=Ec2raN_KEDW-prLax0vQN9nahlQWbfCho_Yr2QPb_LQ,11089
20
+ abstractcore/compression/exceptions.py,sha256=BOTfNyZFNiLuNcWoVSwW8xUXB7XHBi2bW3cUmOK_C9M,756
21
+ abstractcore/compression/glyph_processor.py,sha256=v3xuxWe4MGzdJi7I5tUxnMomV4hTFN2McPcH6kL6ly8,16362
22
+ abstractcore/compression/optimizer.py,sha256=PAsVWbhBKwCvnp6Omzf-cdcW-9-wmug7hVBtH-P9e3M,12733
23
+ abstractcore/compression/orchestrator.py,sha256=kG3iDIxorXlshii7568jX8ha0cpWldH9_kjjqIjHQO8,15117
24
+ abstractcore/compression/pil_text_renderer.py,sha256=IxVs5ZFXIJeXIQdS1hDQKJC6O2lHVOI7I2MvIx1P0i4,36819
25
+ abstractcore/compression/quality.py,sha256=bq7YI_5ywHfPnWSu1MmBRnV5Nxz8KBJGFvnfQOJSx5c,9415
26
+ abstractcore/compression/text_formatter.py,sha256=5RE6JrLkHvYoDQlsYJSoqfbwAa3caMr2i_DXog6ovZs,27328
27
+ abstractcore/compression/vision_compressor.py,sha256=5Ox3w_ee7fgPRDOpSQcooEGtuBKpQoAmWjwpLE2hoNU,12773
16
28
  abstractcore/config/__init__.py,sha256=4mHX5z5Sq8R8xh78tb9jjZLaz_oBNW1eh914OsdDTxs,318
17
- abstractcore/config/main.py,sha256=U9zz-h9OvadqW9pBRRf999gVZKtBWsk27oPJtiJa8Qk,32646
18
- abstractcore/config/manager.py,sha256=mo-cpT-jNfQmfTSe9LcalwE1WqjCyvNQexPIqNMS6sc,13098
29
+ abstractcore/config/main.py,sha256=oQxnNxo_78CusCuDKGgwal2T3S8MDpo3yzLSB1wpYkU,35573
30
+ abstractcore/config/manager.py,sha256=JTN_qoNqRGKQoPH66nVGn3PIjgt-eSgsG9BndYIC8Dg,16752
19
31
  abstractcore/config/vision_config.py,sha256=jJzO4zBexh8SqSKp6YKOXdMDSv4AL4Ztl5Xi-5c4KyY,17869
20
32
  abstractcore/core/__init__.py,sha256=2h-86U4QkCQ4gzZ4iRusSTMlkODiUS6tKjZHiEXz6rM,684
21
33
  abstractcore/core/enums.py,sha256=BhkVnHC-X1_377JDmqd-2mnem9GdBLqixWlYzlP_FJU,695
22
34
  abstractcore/core/factory.py,sha256=ec7WGW2JKK-dhDplziTAeRkebEUFymtEEZ_bS5qkpqY,2798
23
35
  abstractcore/core/interface.py,sha256=-VAY0nlsTnWN_WghiuMC7iE7xUdZfYOg6KlgrAPi14Y,14086
24
36
  abstractcore/core/retry.py,sha256=wNlUAxfmvdO_uVWb4iqkhTqd7O1oRwXxqvVQaLXQOw0,14538
25
- abstractcore/core/session.py,sha256=thqG8zWICKpPeCJi5IoKbMhBDOH4RJlTfUjymP14TFY,38249
37
+ abstractcore/core/session.py,sha256=WNVZYTX-xrY-7XUGLd3jpfhWcMrMRa4rlnyRixFJIJQ,40770
26
38
  abstractcore/core/types.py,sha256=jj44i07kMjdg9FQ3mA_fK6r_M0Lcgt1RQpy1Ra5w-eI,4578
27
39
  abstractcore/embeddings/__init__.py,sha256=hR3xZyqcRm4c2pq1dIa5lxj_-Bk70Zad802JQN4joWo,637
28
40
  abstractcore/embeddings/manager.py,sha256=uFVbRPHx_R-kVMVA7N7_7EzeUmCJCeN9Dv0EV8Jko24,52245
29
41
  abstractcore/embeddings/models.py,sha256=bsPAzL6gv57AVii8O15PT0kxfwRkOml3f3njJN4UDi4,4874
30
- abstractcore/events/__init__.py,sha256=UtbdTOeL05kvi7YP91yo4OEqs5UAbKylBvOOEkrUL5E,11065
42
+ abstractcore/events/__init__.py,sha256=OQJP7qOMWLg_tZyM62eZZ6uUpiHNevAWVdkK7W5slr0,11088
31
43
  abstractcore/exceptions/__init__.py,sha256=h6y3sdZR6uFMh0iq7z85DfJi01zGQvjVOm1W7l86iVQ,3224
32
44
  abstractcore/media/__init__.py,sha256=94k22PRXInaXFlxU7p06IRbyjmOkSlCITDm0gb8d9AI,3202
33
- abstractcore/media/auto_handler.py,sha256=R3EhifSlGSJ_2oftQ7BdD7nQBMGePHOubuXkqHmcHHQ,13478
45
+ abstractcore/media/auto_handler.py,sha256=eo5a-hn_geLPsBe1oLKvd2YTxS8NRMms1uosmUyu3-s,26500
34
46
  abstractcore/media/base.py,sha256=vWdxscqTGTvd3oc4IzzsBTWhUrznWcqM7M_sFyq6-eE,15971
35
47
  abstractcore/media/capabilities.py,sha256=qqKvXGkUT-FNnbFS-EYx8KCT9SZOovO2h4N7ucrHgBA,12844
36
- abstractcore/media/types.py,sha256=jG-g_2_gzl8eOgEalk9x3Ikhni9GoGfoRjkZWaBhV30,10165
48
+ abstractcore/media/types.py,sha256=fofcQXSb-_PQwAHoSVObPhPdVUkwxOJec1ssv-731Ho,16158
37
49
  abstractcore/media/vision_fallback.py,sha256=yojFTwKqiE0wfQGYphpXUcANpC0Q80s-qlt7gmQGfZg,11282
38
50
  abstractcore/media/handlers/__init__.py,sha256=HBqFo15JX1q7RM11076iFQUfPvInLlOizX-LGSznLuI,404
39
51
  abstractcore/media/handlers/anthropic_handler.py,sha256=iwcHKnHgHoQGpJKlJmwFJWBvrYg9lAzAnndybwsWZRA,12427
40
- abstractcore/media/handlers/local_handler.py,sha256=xfMV2Ztre3eUkDno4aSGob96oWUlgicZ3VChs-txjXU,23033
41
- abstractcore/media/handlers/openai_handler.py,sha256=o0H_WQ_NQt133my55xYQmq6_QFGafghF8sPTrqr1f0Q,9726
42
- abstractcore/media/processors/__init__.py,sha256=tExCZwVhD9Qzn3D99-zQcU-T1324YtiLkWjIfWLC708,442
43
- abstractcore/media/processors/image_processor.py,sha256=wj-f1W71ZCs4AZdmyTKZvnMee83GkiXKuZ6QvJwd3Lo,22577
52
+ abstractcore/media/handlers/local_handler.py,sha256=Y-viFGYowmtrj-J95JeKgx0L1WSe4ttJeEZ60PHf9Ck,23815
53
+ abstractcore/media/handlers/openai_handler.py,sha256=pzf9rHWWiBFKbQzABJhwbA1TlSC9neR4wXnPeAz0ENM,12754
54
+ abstractcore/media/processors/__init__.py,sha256=V5OqxTnIkcni-tVQZQYpSvO4hl74aFwYsc3MfSQSFWE,706
55
+ abstractcore/media/processors/direct_pdf_processor.py,sha256=DuI3bK8JfZwPVXZ43tH56y09kKqvHgWhR5NZ_HslcF4,8989
56
+ abstractcore/media/processors/glyph_pdf_processor.py,sha256=H-IqnQ0roDEWhsMzoW3BYgXzO9OWBSsrUr_zYIabRdI,8576
57
+ abstractcore/media/processors/image_processor.py,sha256=jXvbiV3RCYpAKVaee24lE5oXavASyt3ScJppOIiosmg,22972
44
58
  abstractcore/media/processors/office_processor.py,sha256=MqhLDWNtjHEpiMgpFaf7tbj8iDcTCf_zelWrHZkr7Z4,18580
45
59
  abstractcore/media/processors/pdf_processor.py,sha256=qniYt7cTYYPVRi_cS1IsXztOldeY0bqdn7sdbELBU9k,17157
46
- abstractcore/media/processors/text_processor.py,sha256=E28FtT2_jzsvMIDwZi6aVWuu_pSyAPSBa96fe4YYcU8,21092
60
+ abstractcore/media/processors/text_processor.py,sha256=D84QWxxIou4MeNhERmCTxi_p27CgicVFhMXJiujZgIE,21905
47
61
  abstractcore/media/utils/__init__.py,sha256=30-CTif91iRKOXJ4njGiduWAt-xp31U7NafMBNvgdO0,460
48
62
  abstractcore/media/utils/image_scaler.py,sha256=QrYqoNQc8tzGu7I9Sf_E-Iv7ei2oLh714AGiX3yACNM,11338
49
63
  abstractcore/processing/__init__.py,sha256=QcACEnhnHKYCkFL1LNOW_uqBrwkTAmz5A61N4K2dyu0,988
@@ -52,18 +66,19 @@ abstractcore/processing/basic_extractor.py,sha256=3x-3BdIHgLvqLnLF6K1-P4qVaLIpAn
52
66
  abstractcore/processing/basic_intent.py,sha256=wD99Z7fE2RiYk6oyTZXojUbv-bz8HhKFIuIHYLLTw54,32455
53
67
  abstractcore/processing/basic_judge.py,sha256=tKWJrg_tY4vCHzWgXxz0ZjgLXBYYfpMcpG7vl03hJcM,32218
54
68
  abstractcore/processing/basic_summarizer.py,sha256=XHNxMQ_8aLStTeUo6_2JaThlct12Htpz7ORmm0iuJsg,25495
55
- abstractcore/providers/__init__.py,sha256=n-2RMNm3QpKxHw9EOjv8icRMRnfJp5Xg0uSVzHCW3BI,1222
56
- abstractcore/providers/anthropic_provider.py,sha256=wXzRgW1AJCRX5dovXHVRTNxL96vycr7Ug9omKnLjPzo,21588
57
- abstractcore/providers/base.py,sha256=gWlkchUZBXgcJAKNV8U1hROUGGw8MdDIuLHQM2LRx8Y,51530
58
- abstractcore/providers/huggingface_provider.py,sha256=mTjpdZlC49QCMqsDHEabTnQbX21z7MNV77Dv9hs_RiM,53696
59
- abstractcore/providers/lmstudio_provider.py,sha256=jzNMngjRtpw4lgdF66i5h22QIPWXvritezcJndetu7A,21632
60
- abstractcore/providers/mlx_provider.py,sha256=1gI1KXJdKcgjiaivk7LpuBScpYgsVJ9YEikm-gCChoo,22156
61
- abstractcore/providers/ollama_provider.py,sha256=VfPn6y87Jjih1MhFsHhijtv1AhbefhwSh4_Z2eAKc4o,21975
62
- abstractcore/providers/openai_provider.py,sha256=kV1YXjzKyqJMQhmn9kG7AwQ-ssu8PipFwXdmmuosR98,23346
63
- abstractcore/providers/registry.py,sha256=oqEaKjF2nuPiw9W0u6DM7TJgm4P2i94aKZRb8Ma6PqM,16002
69
+ abstractcore/providers/__init__.py,sha256=O7gmT4p_jbzMjoZPhi_6RIMHQm-IMFX1XfcgySz3DSQ,1729
70
+ abstractcore/providers/anthropic_provider.py,sha256=kw5fegRkQL-maNdgnmRRMcQCIIFCdeX24ls9iDnuXDo,22648
71
+ abstractcore/providers/base.py,sha256=T7CTil_F_0_ZCu8jxiJUORc9hlkLKpTHmPRb2GolS4U,64571
72
+ abstractcore/providers/huggingface_provider.py,sha256=v4UUmODrnWKtTygzPh-lm4jSCAPms5VYJE5v7PWB4Lo,79458
73
+ abstractcore/providers/lmstudio_provider.py,sha256=mq5fy8nvpltc1KZgSgYOHwzv6T5sbZ4mlqjJR3nwiy4,23185
74
+ abstractcore/providers/mlx_provider.py,sha256=afLCEwuw7r8OK4fD3OriyKMcWpxVIob_37ItmgAclfc,23123
75
+ abstractcore/providers/model_capabilities.py,sha256=C4HIgvNTp9iIPiDeWyXo7vdzRkMdecRPoQi80yHSOL0,11955
76
+ abstractcore/providers/ollama_provider.py,sha256=wt8SfpODWZvhaqhaW80PvUeiCK7KNWauOgiWivOppK8,23463
77
+ abstractcore/providers/openai_provider.py,sha256=pWKkFF8Gy6hcg4unFxmN9AMXlVmEcqEOBKIZTH6PN4k,24379
78
+ abstractcore/providers/registry.py,sha256=KG7qjP76Z5t6k5ZsmqoDEbe3A39RJhhvExKPvSKMEms,19442
64
79
  abstractcore/providers/streaming.py,sha256=VnffBV_CU9SAKzghL154OoFyEdDsiLwUNXPahyU41Bw,31342
65
80
  abstractcore/server/__init__.py,sha256=1DSAz_YhQtnKv7sNi5TMQV8GFujctDOabgvAdilQE0o,249
66
- abstractcore/server/app.py,sha256=7pG5ZkZqYNnyby4jyvp3_NKl5nNDmZpOhv_-F8Jruy4,96580
81
+ abstractcore/server/app.py,sha256=ajG4yfMOHjqBafquLHeLTaMmEr01RXiBRxjFRTIT2j8,96602
67
82
  abstractcore/structured/__init__.py,sha256=VXRQHGcm-iaYnLOBPin2kyhvhhQA0kaGt_pcNDGsE_8,339
68
83
  abstractcore/structured/handler.py,sha256=hcUe_fZcwx0O3msLqFiOsj6-jbq3S-ZQa9c1nRIZvuo,24622
69
84
  abstractcore/structured/retry.py,sha256=BN_PvrWybyU1clMy2cult1-TVxFSMaVqiCPmmXvA5aI,3805
@@ -75,16 +90,18 @@ abstractcore/tools/parser.py,sha256=1r5nmEEp1Rid3JU6ct-s3lP-eCln67fvXG5HCjqiRew,
75
90
  abstractcore/tools/registry.py,sha256=cN3nbPEK6L2vAd9740MIFf2fitW_4WHpQfK4KvQjnT0,9059
76
91
  abstractcore/tools/syntax_rewriter.py,sha256=c3NSTvUF3S3ho5Cwjp7GJJdibeYAI6k3iaBwhKcpTfo,17318
77
92
  abstractcore/tools/tag_rewriter.py,sha256=UGFMBj2QKwm12j8JQ6oc2C_N3ZeNqz9Enz4VkEIrS0c,20338
78
- abstractcore/utils/__init__.py,sha256=29mMc3jV_suEPBn7W8Yw_wqcdvFP-083ws5AUFJVM28,676
93
+ abstractcore/utils/__init__.py,sha256=8uvIU1WpUfetvWA90PPvXtxnFNjMQF0umb8_FuK2cTA,779
79
94
  abstractcore/utils/cli.py,sha256=tO7S-iVSZavxJaX7OTruNAmF3lJz9eCDORK8Dm7FdgA,70558
80
95
  abstractcore/utils/message_preprocessor.py,sha256=GdHkm6tmrgjm3PwHRSCjIsq1XLkbhy_vDEKEUE7OiKY,6028
81
96
  abstractcore/utils/self_fixes.py,sha256=QEDwNTW80iQM4ftfEY3Ghz69F018oKwLM9yeRCYZOvw,5886
82
97
  abstractcore/utils/structured_logging.py,sha256=Vm-HviSa42G9DJCWmaEv4a0QG3NMsADD3ictLOs4En0,19952
83
98
  abstractcore/utils/token_utils.py,sha256=eLwFmJ68p9WMFD_MHLMmeJRW6Oqx_4hKELB8FNQ2Mnk,21097
84
- abstractcore/utils/version.py,sha256=GC9cH32Kxl_Gm71B9JyHaV8605RVj_YHzLdOS6AjFM0,605
85
- abstractcore-2.5.2.dist-info/licenses/LICENSE,sha256=PI2v_4HMvd6050uDD_4AY_8PzBnu2asa3RKbdDjowTA,1078
86
- abstractcore-2.5.2.dist-info/METADATA,sha256=VeTcJ285fQCo75pDmpjGmnllxlWHH6JvyfSYeN_o8Y4,32893
87
- abstractcore-2.5.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
88
- abstractcore-2.5.2.dist-info/entry_points.txt,sha256=jXNdzeltVs23A2JM2e2HOiAHldHrsnud3EvPI5VffOs,658
89
- abstractcore-2.5.2.dist-info/top_level.txt,sha256=DiNHBI35SIawW3N9Z-z0y6cQYNbXd32pvBkW0RLfScs,13
90
- abstractcore-2.5.2.dist-info/RECORD,,
99
+ abstractcore/utils/trace_export.py,sha256=MD1DHDWltpewy62cYzz_OSPAA6edZbZq7_pZbvxz_H8,9279
100
+ abstractcore/utils/version.py,sha256=5dD6Nqt67LVS1pdUKp_GG1C6h57jBU2JksiHqv5h774,605
101
+ abstractcore/utils/vlm_token_calculator.py,sha256=VBmIji_oiqOQ13IvVhNkb8E246tYMIXWVVOnl86Ne94,27978
102
+ abstractcore-2.5.3.dist-info/licenses/LICENSE,sha256=PI2v_4HMvd6050uDD_4AY_8PzBnu2asa3RKbdDjowTA,1078
103
+ abstractcore-2.5.3.dist-info/METADATA,sha256=0PFx8kXgAlmR4xKa7QRLBqcf1ZxGOZeXJhTfo9OvYu4,36966
104
+ abstractcore-2.5.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
105
+ abstractcore-2.5.3.dist-info/entry_points.txt,sha256=jXNdzeltVs23A2JM2e2HOiAHldHrsnud3EvPI5VffOs,658
106
+ abstractcore-2.5.3.dist-info/top_level.txt,sha256=DiNHBI35SIawW3N9Z-z0y6cQYNbXd32pvBkW0RLfScs,13
107
+ abstractcore-2.5.3.dist-info/RECORD,,