agent-framework-lib 0.6.3.post2__tar.gz → 0.6.3.post4__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 (268) hide show
  1. {agent_framework_lib-0.6.3.post2/agent_framework_lib.egg-info → agent_framework_lib-0.6.3.post4}/PKG-INFO +13 -13
  2. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/README.md +12 -12
  3. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/__init__.py +6 -1
  4. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/core/model_config.py +5 -5
  5. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/core/scratchpad_compressor.py +128 -5
  6. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/core/step_display_config.py +10 -0
  7. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/implementations/budget_aware_agent.py +61 -8
  8. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/monitoring/llm_metrics.py +1 -1
  9. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/monitoring/llm_metrics_collector.py +1 -1
  10. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/monitoring/otel_instrumentor.py +3 -3
  11. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/monitoring/token_counter.py +3 -3
  12. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/skills/agent_mixin.py +62 -3
  13. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/skills/base.py +16 -1
  14. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/skills/builtin/__init__.py +25 -9
  15. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/scripts/__init__.py +1 -0
  16. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/scripts/create_and_register.py +189 -0
  17. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/scripts/register_to_storage.py +115 -0
  18. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/skills/chart/SKILL.md +290 -0
  19. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/skills/chart/chart_to_image.py +244 -0
  20. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/skills/drawio/SKILL.md +109 -0
  21. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/skills/drawio/create_drawio.py +85 -0
  22. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/skills/excel/SKILL.md +111 -0
  23. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/skills/excel/create_excel.py +110 -0
  24. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/skills/file/SKILL.md +187 -0
  25. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/skills/file/create_file.py +85 -0
  26. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/skills/file/list_files.py +77 -0
  27. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/skills/file/read_file.py +62 -0
  28. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/skills/file_access/SKILL.md +96 -0
  29. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/skills/file_access/get_file_path.py +75 -0
  30. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/skills/form/SKILL.md +163 -0
  31. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/skills/image_display/SKILL.md +206 -0
  32. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/skills/mermaid/SKILL.md +267 -0
  33. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/skills/mermaid/mermaid_to_image.py +246 -0
  34. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/skills/multimodal/SKILL.md +124 -0
  35. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/skills/optionsblock/SKILL.md +258 -0
  36. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/skills/table/SKILL.md +220 -0
  37. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/skills/table/table_to_image.py +366 -0
  38. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/skills/unified_pdf/SKILL.md +167 -0
  39. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/skills/unified_pdf/create_pdf.py +180 -0
  40. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/skills/web_search/SKILL.md +141 -0
  41. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/skills/web_search/web_news_search.py +77 -0
  42. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/skills/web_search/web_search.py +75 -0
  43. agent_framework_lib-0.6.3.post4/agent_framework/skills/custom_skill_manager.py +529 -0
  44. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/skills/discovery_prompt.py +47 -18
  45. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/skills/markdown_loader.py +17 -0
  46. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/tools/shell_tool.py +22 -0
  47. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/utils/session_title_generator.py +4 -4
  48. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/web/docs/GETTING_STARTED.md +3 -3
  49. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/web/docs/README.md +12 -12
  50. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4/agent_framework/web}/docs/TOOLS_AND_MCP_GUIDE.md +287 -14
  51. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4/agent_framework/web}/docs/configuration.md +10 -10
  52. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4/agent_framework/web/docs}/examples/agent_with_memory_graphiti.py +1 -1
  53. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/web/helper_agent.py +3 -3
  54. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/web/modern_ui.html +526 -0
  55. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/web/server.py +46 -2
  56. agent_framework_lib-0.6.3.post4/agent_framework/web/skills_router.py +389 -0
  57. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4/agent_framework_lib.egg-info}/PKG-INFO +13 -13
  58. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework_lib.egg-info/SOURCES.txt +30 -0
  59. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/docs/ARCHITECTURE_DIAGRAM.md +3 -3
  60. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/docs/ELASTICSEARCH_DATA_STRUCTURES.md +1 -1
  61. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/docs/GETTING_STARTED.md +3 -3
  62. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/docs/HISTORY_MESSAGE_FORMAT.md +1 -1
  63. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/docs/MULTIMODAL_TOOLS_GUIDE.md +2 -2
  64. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/docs/SKILLS_AND_SUBAGENTS_ANALYSIS.md +73 -51
  65. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/docs/STREAMING_EVENTS_FRONTEND.md +1 -1
  66. {agent_framework_lib-0.6.3.post2/agent_framework/web → agent_framework_lib-0.6.3.post4}/docs/TOOLS_AND_MCP_GUIDE.md +287 -14
  67. {agent_framework_lib-0.6.3.post2/agent_framework/web → agent_framework_lib-0.6.3.post4}/docs/configuration.md +10 -10
  68. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/docs/framework_audit_remarques.md +1 -1
  69. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/examples/agent_context_budget_test.py +1 -1
  70. {agent_framework_lib-0.6.3.post2/agent_framework/web/docs → agent_framework_lib-0.6.3.post4}/examples/agent_with_memory_graphiti.py +1 -1
  71. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/pyproject.toml +13 -10
  72. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/ARCHITECTURE.md +0 -0
  73. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/LICENSE +0 -0
  74. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/MANIFEST.in +0 -0
  75. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/a2a/__init__.py +0 -0
  76. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/a2a/base.py +0 -0
  77. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/a2a/endpoints/__init__.py +0 -0
  78. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/a2a/endpoints/a2a_router.py +0 -0
  79. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/a2a/endpoints/agent_card_builder.py +0 -0
  80. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/a2a/endpoints/agent_card_skill_builder.py +0 -0
  81. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/a2a/endpoints/jsonrpc_dispatcher.py +0 -0
  82. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/a2a/endpoints/models_jsonrpc.py +0 -0
  83. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/a2a/endpoints/sse_wrapper.py +0 -0
  84. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/a2a/endpoints/translation_layer.py +0 -0
  85. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/a2a/models.py +0 -0
  86. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/a2a/providers/__init__.py +0 -0
  87. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/a2a/providers/elasticsearch_provider.py +0 -0
  88. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/a2a/providers/postgres_provider.py +0 -0
  89. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/capabilities/__init__.py +0 -0
  90. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/capabilities/resolver.py +0 -0
  91. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/chart_generation/llm_refinement_loop.py +0 -0
  92. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/core/__init__.py +0 -0
  93. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/core/activity_formatter.py +0 -0
  94. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/core/agent_interface.py +0 -0
  95. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/core/agent_provider.py +0 -0
  96. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/core/base_agent.py +0 -0
  97. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/core/context_budget.py +0 -0
  98. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/core/context_summarizer.py +0 -0
  99. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/core/elasticsearch_config_provider.py +0 -0
  100. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/core/implementation_validator.py +0 -0
  101. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/core/knowledge_state.py +0 -0
  102. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/core/loop_detector.py +0 -0
  103. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/core/model_clients.py +0 -0
  104. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/core/model_router.py +0 -0
  105. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/core/models.py +0 -0
  106. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/core/provider_calibration.py +0 -0
  107. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/core/rich_content_prompt_unsused_to_be_deleted.py +0 -0
  108. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/core/state_manager.py +0 -0
  109. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/core/streaming_parts_accumulator.py +0 -0
  110. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/implementations/__init__.py +0 -0
  111. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/implementations/llamaindex_agent.py +0 -0
  112. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/implementations/llamaindex_memory_adapter.py +0 -0
  113. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/implementations/microsoft_agent.py +0 -0
  114. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/memory/__init__.py +0 -0
  115. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/memory/agent_mixin.py +0 -0
  116. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/memory/base.py +0 -0
  117. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/memory/config.py +0 -0
  118. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/memory/manager.py +0 -0
  119. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/memory/personalization.py +0 -0
  120. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/memory/providers/__init__.py +0 -0
  121. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/memory/providers/graphiti_provider.py +0 -0
  122. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/memory/providers/memori_provider.py +0 -0
  123. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/memory/tools.py +0 -0
  124. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/monitoring/__init__.py +0 -0
  125. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/monitoring/api_timing_tracker.py +0 -0
  126. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/monitoring/elasticsearch_circuit_breaker.py +0 -0
  127. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/monitoring/elasticsearch_logging.py +0 -0
  128. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/monitoring/error_handling.py +0 -0
  129. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/monitoring/error_logging.py +0 -0
  130. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/monitoring/llm_auto_instrumentor.py +0 -0
  131. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/monitoring/llm_metrics_extractor.py +0 -0
  132. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/monitoring/metrics_aggregator.py +0 -0
  133. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/monitoring/metrics_config.py +0 -0
  134. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/monitoring/observability_manager.py +0 -0
  135. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/monitoring/otel_logging_handler.py +0 -0
  136. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/monitoring/otel_metrics_recorder.py +0 -0
  137. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/monitoring/otel_setup.py +0 -0
  138. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/monitoring/performance_monitor.py +0 -0
  139. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/monitoring/progress_tracker.py +0 -0
  140. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/monitoring/resource_manager.py +0 -0
  141. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/monitoring/resource_metrics_collector.py +0 -0
  142. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/monitoring/streaming_latency_tracer.py +0 -0
  143. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/monitoring/timing_tracker.py +0 -0
  144. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/monitoring/tracing_context.py +0 -0
  145. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/processing/__init__.py +0 -0
  146. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/processing/ai_content_management.py +0 -0
  147. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/processing/markdown_converter.py +0 -0
  148. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/processing/multimodal_integration.py +0 -0
  149. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/processing/rich_content_validation.py +0 -0
  150. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/py.typed +0 -0
  151. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/session/__init__.py +0 -0
  152. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/session/elasticsearch_session_storage.py +0 -0
  153. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/session/session_storage.py +0 -0
  154. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/skills/__init__.py +0 -0
  155. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/skills/builtin/chart_skill.py +0 -0
  156. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/skills/builtin/drawio_skill.py +0 -0
  157. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/skills/builtin/excel_skill.py +0 -0
  158. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/skills/builtin/file_access_skill.py +0 -0
  159. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/skills/builtin/file_skill.py +0 -0
  160. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/skills/builtin/form_skill.py +0 -0
  161. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/skills/builtin/image_display_skill.py +0 -0
  162. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/skills/builtin/mermaid_skill.py +0 -0
  163. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/skills/builtin/multimodal_skill.py +0 -0
  164. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/skills/builtin/optionsblock_skill.py +0 -0
  165. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/skills/builtin/pdf_skill.py +0 -0
  166. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/skills/builtin/pdf_with_images_skill.py +0 -0
  167. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/skills/builtin/table_skill.py +0 -0
  168. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/skills/builtin/unified_pdf_skill.py +0 -0
  169. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/skills/builtin/web_search_skill.py +0 -0
  170. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/skills/tools.py +0 -0
  171. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/storage/__init__.py +0 -0
  172. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/storage/file_storages.py +0 -0
  173. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/storage/file_system_management.py +0 -0
  174. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/storage/storage_optimizer.py +0 -0
  175. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/subagents/__init__.py +0 -0
  176. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/subagents/spawn_tool.py +0 -0
  177. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/tools/__init__.py +0 -0
  178. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/tools/activity_callback.py +0 -0
  179. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/tools/adaptive_pdf_css.py +0 -0
  180. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/tools/base.py +0 -0
  181. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/tools/chart_tools.py +0 -0
  182. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/tools/drawio_tools.py +0 -0
  183. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/tools/excel_tools.py +0 -0
  184. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/tools/file_access_tools.py +0 -0
  185. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/tools/file_tools.py +0 -0
  186. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/tools/html_content_analyzer.py +0 -0
  187. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/tools/mermaid_tools.py +0 -0
  188. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/tools/multimodal_tools.py +0 -0
  189. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/tools/pdf_image_scaler.py +0 -0
  190. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/tools/pdf_tools.py +0 -0
  191. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/tools/pdf_with_images_tool.py +0 -0
  192. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/tools/sizing_config.py +0 -0
  193. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/tools/tabledata_tools.py +0 -0
  194. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/tools/unified_pdf_tool.py +0 -0
  195. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/tools/web_fetch_tool.py +0 -0
  196. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/tools/web_search_tools.py +0 -0
  197. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/utils/__init__.py +0 -0
  198. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/utils/path_utils.py +0 -0
  199. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/utils/post_install.py +0 -0
  200. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/utils/source_detector.py +0 -0
  201. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/utils/special_blocks.py +0 -0
  202. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/web/__init__.py +0 -0
  203. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/web/admin_auth.py +0 -0
  204. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/web/admin_models.py +0 -0
  205. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/web/admin_router.py +0 -0
  206. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/web/admin_services.py +0 -0
  207. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/web/api_timing_middleware.py +0 -0
  208. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/web/docs/A2A_GUIDE.md +0 -0
  209. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/web/docs/CREATING_AGENTS.md +0 -0
  210. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/web/docs/DOCKER_SETUP.md +0 -0
  211. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/web/docs/Dockerfile +0 -0
  212. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/web/docs/MEMORY_INSTALLATION.md +0 -0
  213. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/web/docs/api-reference.md +0 -0
  214. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/web/docs/docker-compose.yml +0 -0
  215. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/web/docs/examples/agent_example_multi_skills.py +0 -0
  216. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/web/docs/examples/agent_with_file_storage.py +0 -0
  217. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/web/docs/examples/agent_with_mcp.py +0 -0
  218. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/web/docs/examples/agent_with_memory.py +0 -0
  219. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/web/docs/examples/agent_with_memory_hybrid.py +0 -0
  220. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/web/docs/examples/agent_with_memory_simple.py +0 -0
  221. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/web/docs/examples/custom_framework_agent.py +0 -0
  222. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/web/docs/examples/simple_agent.py +0 -0
  223. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/web/docs/examples/skills_demo_agent.py +0 -0
  224. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/web/docs/installation-guide.md +0 -0
  225. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/web/documentation_generator.py +0 -0
  226. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/web/helper_ui.html +0 -0
  227. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/web/observability/kibana-llm-dashboard-setup.json +0 -0
  228. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/web/observability/kibana-resource-metrics-dashboard.json +0 -0
  229. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/web/otel_tracing_middleware.py +0 -0
  230. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework/web/test_app.html +0 -0
  231. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework_lib.egg-info/dependency_links.txt +0 -0
  232. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework_lib.egg-info/entry_points.txt +0 -0
  233. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework_lib.egg-info/requires.txt +0 -0
  234. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/agent_framework_lib.egg-info/top_level.txt +0 -0
  235. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/docs/A2A_GUIDE.md +0 -0
  236. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/docs/ACTIVITY_OUTPUT_PART.md +0 -0
  237. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/docs/CONCURRENCE_VS_PARALLELISME_GUIDE.md +0 -0
  238. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/docs/CREATING_AGENTS.md +0 -0
  239. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/docs/DOCKER_SETUP.md +0 -0
  240. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/docs/FILE_DOWNLOAD_LINKS.md +0 -0
  241. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/docs/FILE_STORAGE_GUIDE.md +0 -0
  242. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/docs/IMPLEMENTATION_GUIDE_NEW_AGENT.md +0 -0
  243. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/docs/MEMORY_INSTALLATION.md +0 -0
  244. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/docs/MODIFICATIONS_CONCURRENCE.md +0 -0
  245. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/docs/OBSERVABILITY_GUIDE.md +0 -0
  246. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/docs/PYPI_PUBLISHING.md +0 -0
  247. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/docs/QA_STREAMING_LATENCY.md +0 -0
  248. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/docs/SPEC_CROSS_MODEL_HISTORY_CONVERSION.md +0 -0
  249. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/docs/api-reference.md +0 -0
  250. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/docs/installation-guide.md +0 -0
  251. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/examples/README.md +0 -0
  252. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/examples/agent_example_multi_skills.py +0 -0
  253. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/examples/agent_exemple_test.py +0 -0
  254. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/examples/agent_training_with_apo.py +0 -0
  255. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/examples/agent_with_custom_tools_file_storage.py +0 -0
  256. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/examples/agent_with_file_storage.py +0 -0
  257. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/examples/agent_with_mcp.py +0 -0
  258. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/examples/agent_with_memory_hybrid.py +0 -0
  259. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/examples/agent_with_memory_simple.py +0 -0
  260. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/examples/agent_with_personalization.py +0 -0
  261. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/examples/biagenttest.py +0 -0
  262. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/examples/custom_framework_agent.py +0 -0
  263. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/examples/dependencies/docker-compose.yaml +0 -0
  264. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/examples/pyproject.toml +0 -0
  265. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/examples/simple_agent.py +0 -0
  266. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/examples/skills_demo_agent.py +0 -0
  267. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/setup.cfg +0 -0
  268. {agent_framework_lib-0.6.3.post2 → agent_framework_lib-0.6.3.post4}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agent-framework-lib
3
- Version: 0.6.3.post2
3
+ Version: 0.6.3.post4
4
4
  Summary: A comprehensive Python framework for building and serving conversational AI agents with FastAPI
5
5
  Author-email: Sebastian Pavel <sebastian@cinco.ai>, Elliott Girard <elliott.girard@icloud.com>
6
6
  Maintainer-email: Sebastian Pavel <sebastian@cinco.ai>
@@ -373,13 +373,13 @@ ANTHROPIC_API_KEY=sk-ant-your-anthropic-key
373
373
  GEMINI_API_KEY=your-gemini-key
374
374
 
375
375
  # Model Configuration
376
- DEFAULT_MODEL=gpt-5-mini
376
+ DEFAULT_MODEL=gpt-5.4-mini
377
377
 
378
378
  # Multi-Model Routing (Auto Mode)
379
379
  DEFAULT_MODEL_MODE=auto # "auto" or specific model name
380
- AUTO_CLASSIFIER_MODEL=gpt-5-nano # Model for complexity classification
381
- PREFERRED_LIGHT_MODELS=gpt-5-nano,claude-haiku-4-5-20251001
382
- PREFERRED_STANDARD_MODELS=gpt-5-mini
380
+ AUTO_CLASSIFIER_MODEL=gpt-5.4-nano # Model for complexity classification
381
+ PREFERRED_LIGHT_MODELS=gpt-5.4-nano,claude-haiku-4-5-20251001
382
+ PREFERRED_STANDARD_MODELS=gpt-5.4-mini
383
383
  PREFERRED_ADVANCED_MODELS=gpt-5.2,claude-opus-4-6
384
384
 
385
385
  # Session Storage (optional)
@@ -446,8 +446,8 @@ When `DEFAULT_MODEL_MODE=auto`, the system analyzes each query and routes it to
446
446
 
447
447
  | Tier | Icon | Use Case | Example Models |
448
448
  |------|------|----------|----------------|
449
- | **Light** | 💨 | Simple queries, greetings, basic info | gpt-5-nano, claude-haiku-4-5 |
450
- | **Standard** | ⚖️ | Typical questions, explanations | gpt-5-mini, claude-sonnet-4-6 |
449
+ | **Light** | 💨 | Simple queries, greetings, basic info | gpt-5.4-nano, claude-haiku-4-5 |
450
+ | **Standard** | ⚖️ | Typical questions, explanations | gpt-5.4-mini, claude-sonnet-4-6 |
451
451
  | **Advanced** | 🧠 | Complex analysis, creative tasks | gpt-5.2, claude-opus-4-6 |
452
452
 
453
453
  **Benefits:**
@@ -469,11 +469,11 @@ Users can also select a specific model from the UI dropdown:
469
469
  DEFAULT_MODEL_MODE=auto
470
470
 
471
471
  # Model used for complexity classification (should be fast and cheap)
472
- AUTO_CLASSIFIER_MODEL=gpt-5-nano
472
+ AUTO_CLASSIFIER_MODEL=gpt-5.4-nano
473
473
 
474
474
  # Preferred models per tier (comma-separated, in order of preference)
475
- PREFERRED_LIGHT_MODELS=gpt-5-nano,claude-haiku-4-5-20251001,gemini-2.5-flash-lite
476
- PREFERRED_STANDARD_MODELS=gpt-5-mini,gemini-2.5-flash
475
+ PREFERRED_LIGHT_MODELS=gpt-5.4-nano,claude-haiku-4-5-20251001,gemini-2.5-flash-lite
476
+ PREFERRED_STANDARD_MODELS=gpt-5.4-mini,gemini-2.5-flash
477
477
  PREFERRED_ADVANCED_MODELS=gpt-5.2,claude-opus-4-6,gemini-2.5-pro
478
478
  ```
479
479
 
@@ -486,12 +486,12 @@ curl http://localhost:8000/api/models
486
486
  # Response
487
487
  {
488
488
  "models_by_tier": {
489
- "light": [{"id": "gpt-5-nano", "provider": "openai", "available": true}, ...],
489
+ "light": [{"id": "gpt-5.4-nano", "provider": "openai", "available": true}, ...],
490
490
  "standard": [...],
491
491
  "advanced": [...]
492
492
  },
493
493
  "default_mode": "auto",
494
- "classifier_model": "gpt-5-nano"
494
+ "classifier_model": "gpt-5.4-nano"
495
495
  }
496
496
  ```
497
497
 
@@ -520,7 +520,7 @@ class MyAgent(LlamaIndexAgent):
520
520
  )
521
521
  # Default model config (can be overridden per session)
522
522
  self.default_temperature = 0.7
523
- self.default_model = "gpt-5-mini"
523
+ self.default_model = "gpt-5.4-mini"
524
524
  ```
525
525
 
526
526
  **Runtime Configuration:**
@@ -227,13 +227,13 @@ ANTHROPIC_API_KEY=sk-ant-your-anthropic-key
227
227
  GEMINI_API_KEY=your-gemini-key
228
228
 
229
229
  # Model Configuration
230
- DEFAULT_MODEL=gpt-5-mini
230
+ DEFAULT_MODEL=gpt-5.4-mini
231
231
 
232
232
  # Multi-Model Routing (Auto Mode)
233
233
  DEFAULT_MODEL_MODE=auto # "auto" or specific model name
234
- AUTO_CLASSIFIER_MODEL=gpt-5-nano # Model for complexity classification
235
- PREFERRED_LIGHT_MODELS=gpt-5-nano,claude-haiku-4-5-20251001
236
- PREFERRED_STANDARD_MODELS=gpt-5-mini
234
+ AUTO_CLASSIFIER_MODEL=gpt-5.4-nano # Model for complexity classification
235
+ PREFERRED_LIGHT_MODELS=gpt-5.4-nano,claude-haiku-4-5-20251001
236
+ PREFERRED_STANDARD_MODELS=gpt-5.4-mini
237
237
  PREFERRED_ADVANCED_MODELS=gpt-5.2,claude-opus-4-6
238
238
 
239
239
  # Session Storage (optional)
@@ -300,8 +300,8 @@ When `DEFAULT_MODEL_MODE=auto`, the system analyzes each query and routes it to
300
300
 
301
301
  | Tier | Icon | Use Case | Example Models |
302
302
  |------|------|----------|----------------|
303
- | **Light** | 💨 | Simple queries, greetings, basic info | gpt-5-nano, claude-haiku-4-5 |
304
- | **Standard** | ⚖️ | Typical questions, explanations | gpt-5-mini, claude-sonnet-4-6 |
303
+ | **Light** | 💨 | Simple queries, greetings, basic info | gpt-5.4-nano, claude-haiku-4-5 |
304
+ | **Standard** | ⚖️ | Typical questions, explanations | gpt-5.4-mini, claude-sonnet-4-6 |
305
305
  | **Advanced** | 🧠 | Complex analysis, creative tasks | gpt-5.2, claude-opus-4-6 |
306
306
 
307
307
  **Benefits:**
@@ -323,11 +323,11 @@ Users can also select a specific model from the UI dropdown:
323
323
  DEFAULT_MODEL_MODE=auto
324
324
 
325
325
  # Model used for complexity classification (should be fast and cheap)
326
- AUTO_CLASSIFIER_MODEL=gpt-5-nano
326
+ AUTO_CLASSIFIER_MODEL=gpt-5.4-nano
327
327
 
328
328
  # Preferred models per tier (comma-separated, in order of preference)
329
- PREFERRED_LIGHT_MODELS=gpt-5-nano,claude-haiku-4-5-20251001,gemini-2.5-flash-lite
330
- PREFERRED_STANDARD_MODELS=gpt-5-mini,gemini-2.5-flash
329
+ PREFERRED_LIGHT_MODELS=gpt-5.4-nano,claude-haiku-4-5-20251001,gemini-2.5-flash-lite
330
+ PREFERRED_STANDARD_MODELS=gpt-5.4-mini,gemini-2.5-flash
331
331
  PREFERRED_ADVANCED_MODELS=gpt-5.2,claude-opus-4-6,gemini-2.5-pro
332
332
  ```
333
333
 
@@ -340,12 +340,12 @@ curl http://localhost:8000/api/models
340
340
  # Response
341
341
  {
342
342
  "models_by_tier": {
343
- "light": [{"id": "gpt-5-nano", "provider": "openai", "available": true}, ...],
343
+ "light": [{"id": "gpt-5.4-nano", "provider": "openai", "available": true}, ...],
344
344
  "standard": [...],
345
345
  "advanced": [...]
346
346
  },
347
347
  "default_mode": "auto",
348
- "classifier_model": "gpt-5-nano"
348
+ "classifier_model": "gpt-5.4-nano"
349
349
  }
350
350
  ```
351
351
 
@@ -374,7 +374,7 @@ class MyAgent(LlamaIndexAgent):
374
374
  )
375
375
  # Default model config (can be overridden per session)
376
376
  self.default_temperature = 0.7
377
- self.default_model = "gpt-5-mini"
377
+ self.default_model = "gpt-5.4-mini"
378
378
  ```
379
379
 
380
380
  **Runtime Configuration:**
@@ -88,7 +88,7 @@ def _auto_setup_dependencies() -> None:
88
88
  # Track if auto-setup has been done
89
89
  _AUTO_SETUP_DONE = False
90
90
 
91
- __version__ = "0.6.3"
91
+ __version__ = "0.6.3post3"
92
92
  __author__ = "Cinco AI Team"
93
93
  __license__ = "MIT"
94
94
  __email__ = "sebastian@cinco.ai"
@@ -345,6 +345,11 @@ def create_basic_agent_server(
345
345
 
346
346
  logger.info(f"[create_basic_agent_server] Starting server for {agent_class.__name__} on {host}:{port}")
347
347
  logger.info(f"[create_basic_agent_server] Reload: {reload}")
348
+
349
+ # Ensure AGENT_HOST and AGENT_PORT are in the environment so that
350
+ # subprocesses (e.g. skill scripts via ShellTool) can reach this server.
351
+ os.environ["AGENT_HOST"] = host
352
+ os.environ["AGENT_PORT"] = str(port)
348
353
 
349
354
  # When reload=True, uvicorn requires an import string, not the app object directly
350
355
  if reload:
@@ -14,7 +14,7 @@ This module provides:
14
14
  Environment Variables:
15
15
  - OPENAI_API_KEY: OpenAI API key
16
16
  - GEMINI_API_KEY: Google Gemini API key
17
- - DEFAULT_MODEL: Default model to use (default: "gpt-5-mini")
17
+ - DEFAULT_MODEL: Default model to use (default: "gpt-5.4-mini")
18
18
  - OPENAI_MODELS: Comma-separated list of OpenAI model names
19
19
  - GEMINI_MODELS: Comma-separated list of Gemini model names
20
20
  - FALLBACK_PROVIDER: Provider to use when model provider is unknown
@@ -27,7 +27,7 @@ Example:
27
27
  from agent_framework.model_config import model_config
28
28
 
29
29
  # Get provider for a model
30
- provider = model_config.get_provider("gpt-5-mini")
30
+ provider = model_config.get_provider("gpt-5.4-mini")
31
31
 
32
32
  # Get API key for a provider
33
33
  api_key = model_config.get_api_key(provider)
@@ -383,7 +383,7 @@ class ModelConfigManager:
383
383
  Get a flat list of all models with provider info and availability status.
384
384
 
385
385
  Returns a list of dictionaries, each containing:
386
- - id: The model identifier (e.g., "gpt-5-minio-mini")
386
+ - id: The model identifier (e.g., "gpt-5.4-minio-mini")
387
387
  - provider: The provider name (e.g., "openai")
388
388
  - available: Boolean indicating if the model's API key is configured
389
389
 
@@ -394,7 +394,7 @@ class ModelConfigManager:
394
394
  ```python
395
395
  models = model_config.get_all_available_models()
396
396
  # [
397
- # {"id": "gpt-5-minio", "provider": "openai", "available": True},
397
+ # {"id": "gpt-5.4-minio", "provider": "openai", "available": True},
398
398
  # {"id": "claude-3-opus", "provider": "anthropic", "available": False},
399
399
  # ...
400
400
  # ]
@@ -500,7 +500,7 @@ class ModelConfigManager:
500
500
  ```python
501
501
  model_config.register_agent_config("my-agent", {
502
502
  "system_prompt": "You are a helpful assistant.",
503
- "model_name": "gpt-5-minio",
503
+ "model_name": "gpt-5.4-minio",
504
504
  "model_config": {"temperature": 0.7, "max_tokens": 50000}
505
505
  })
506
506
  ```
@@ -29,6 +29,11 @@ logger = logging.getLogger(__name__)
29
29
 
30
30
  TRUNCATION_MARKER = "\n\n[... contenu tronqué ...]\n\n"
31
31
 
32
+ # OpenAI enforces a 10 485 760 character limit per message content.
33
+ # We use a conservative 8M limit to leave headroom for JSON serialization
34
+ # overhead, tool_call metadata, and other wrapper text added by the SDK.
35
+ MAX_MESSAGE_CONTENT_CHARS = 8_000_000
36
+
32
37
 
33
38
  class ScratchpadCompressor:
34
39
  """Compresse le scratchpad de la boucle d'outils pour respecter le budget."""
@@ -106,22 +111,100 @@ class ScratchpadCompressor:
106
111
  # Pas de paire trouvée, tout est considéré comme dernière paire
107
112
  return [], list(scratchpad)
108
113
 
114
+ @staticmethod
115
+ def _flatten_message_content(message: ChatMessage) -> str:
116
+ """Aplatit tous les blocks d'un message en une seule chaîne de texte.
117
+
118
+ LlamaIndex stocke le contenu des messages dans des blocks typés
119
+ (TextBlock, ToolCallBlock, ToolResultBlock, etc.). La propriété
120
+ .content ne retourne que le texte des TextBlock. Cette méthode
121
+ sérialise TOUS les blocks pour que la troncature opère sur le
122
+ contenu réel envoyé à l'API.
123
+
124
+ Args:
125
+ message: ChatMessage à aplatir.
126
+
127
+ Returns:
128
+ Texte complet incluant tous les blocks.
129
+ """
130
+ if not hasattr(message, "blocks") or not message.blocks:
131
+ return message.content or ""
132
+
133
+ parts: list[str] = []
134
+ for block in message.blocks:
135
+ block_type = type(block).__name__
136
+ if hasattr(block, "text"):
137
+ parts.append(block.text or "")
138
+ elif hasattr(block, "tool_kwargs"):
139
+ tool_name = getattr(block, "tool_name", "") or ""
140
+ kwargs = getattr(block, "tool_kwargs", None)
141
+ if kwargs:
142
+ import json as _json
143
+ try:
144
+ kwargs_str = _json.dumps(kwargs) if isinstance(kwargs, dict) else str(kwargs)
145
+ except (TypeError, ValueError):
146
+ kwargs_str = str(kwargs)
147
+ parts.append(f"[tool_call: {tool_name}({kwargs_str})]")
148
+ else:
149
+ parts.append(f"[tool_call: {tool_name}()]")
150
+ elif hasattr(block, "tool_output"):
151
+ output = str(getattr(block, "tool_output", "") or "")
152
+ parts.append(output)
153
+ elif block_type == "ImageBlock":
154
+ parts.append("[image]")
155
+ else:
156
+ try:
157
+ block_str = str(block)
158
+ if len(block_str) > 10:
159
+ parts.append(block_str)
160
+ except Exception:
161
+ parts.append("[block non sérialisable]")
162
+
163
+ return "\n".join(parts)
164
+
109
165
  def _truncate_single_result(
110
166
  self, message: ChatMessage, target_tokens: int
111
167
  ) -> ChatMessage:
112
168
  """Tronque le contenu d'un tool_result en gardant début + marqueur + fin.
113
169
 
170
+ Aplatit d'abord tous les blocks en texte brut pour que la troncature
171
+ opère sur le contenu réel (pas seulement .content/TextBlock).
172
+
173
+ Applique deux niveaux de troncature :
174
+ 1. Par tokens (budget du context window)
175
+ 2. Par caractères bruts (limite API OpenAI de 10M chars par message)
176
+
114
177
  Args:
115
178
  message: Message tool_result à tronquer.
116
179
  target_tokens: Nombre cible de tokens pour le message tronqué.
117
180
 
118
181
  Returns:
119
- Nouveau ChatMessage avec le contenu tronqué.
182
+ Nouveau ChatMessage avec le contenu tronqué (blocks nettoyés).
120
183
  """
121
- content = message.content or ""
184
+ content = self._flatten_message_content(message)
185
+
186
+ # Garde-fou caractères bruts : tronquer d'abord si on dépasse la
187
+ # limite API (10M chars) pour éviter un 400 même si le budget
188
+ # tokens semble OK.
189
+ content = self._enforce_char_limit(content)
190
+
122
191
  current_tokens = self._token_counter.count_tokens(content).count
123
192
 
193
+ # Nettoyer additional_kwargs pour ne pas conserver les blocks originaux
194
+ # qui seraient re-sérialisés par LlamaIndex en plus du content tronqué.
195
+ clean_kwargs = {
196
+ k: v
197
+ for k, v in (message.additional_kwargs or {}).items()
198
+ if k not in ("tool_calls",)
199
+ }
200
+
124
201
  if current_tokens <= target_tokens or target_tokens <= 0:
202
+ if content != (message.content or ""):
203
+ return ChatMessage(
204
+ role=message.role,
205
+ content=content,
206
+ additional_kwargs=clean_kwargs,
207
+ )
125
208
  return message
126
209
 
127
210
  # Réserver des tokens pour le marqueur de troncature
@@ -142,6 +225,12 @@ class ScratchpadCompressor:
142
225
  end_chars = max(0, int(end_tokens * chars_per_token))
143
226
 
144
227
  if begin_chars + end_chars >= len(content):
228
+ if content != (message.content or ""):
229
+ return ChatMessage(
230
+ role=message.role,
231
+ content=content,
232
+ additional_kwargs=clean_kwargs,
233
+ )
145
234
  return message
146
235
 
147
236
  begin_part = content[:begin_chars]
@@ -151,9 +240,40 @@ class ScratchpadCompressor:
151
240
  return ChatMessage(
152
241
  role=message.role,
153
242
  content=truncated_content,
154
- additional_kwargs=message.additional_kwargs,
243
+ additional_kwargs=clean_kwargs,
155
244
  )
156
245
 
246
+ @staticmethod
247
+ def _enforce_char_limit(content: str, limit: int = MAX_MESSAGE_CONTENT_CHARS) -> str:
248
+ """Tronque le contenu si sa longueur dépasse la limite en caractères.
249
+
250
+ Garde 60% du début et 40% de la fin pour préserver le contexte.
251
+
252
+ Args:
253
+ content: Texte brut du message.
254
+ limit: Limite en caractères (défaut : MAX_MESSAGE_CONTENT_CHARS).
255
+
256
+ Returns:
257
+ Contenu tronqué si nécessaire, sinon inchangé.
258
+ """
259
+ if len(content) <= limit:
260
+ return content
261
+
262
+ marker_len = len(TRUNCATION_MARKER)
263
+ available = max(0, limit - marker_len)
264
+ begin_chars = int(available * 0.6)
265
+ end_chars = available - begin_chars
266
+
267
+ logger.warning(
268
+ "Message content exceeds char limit (%d > %d), truncating",
269
+ len(content),
270
+ limit,
271
+ )
272
+
273
+ begin_part = content[:begin_chars]
274
+ end_part = content[-end_chars:] if end_chars > 0 else ""
275
+ return begin_part + TRUNCATION_MARKER + end_part
276
+
157
277
  async def compress(
158
278
  self,
159
279
  scratchpad: list[ChatMessage],
@@ -316,7 +436,7 @@ class ScratchpadCompressor:
316
436
  result = list(old_entries)
317
437
  while result and total > target_tokens:
318
438
  removed = result.pop(0)
319
- total -= self._token_counter.count_tokens(removed.content or "").count
439
+ total -= self._count_tokens([removed])
320
440
  return result
321
441
 
322
442
  def _truncate_last_pair(
@@ -326,6 +446,9 @@ class ScratchpadCompressor:
326
446
  ) -> list[ChatMessage]:
327
447
  """Tronque le tool_result dans la dernière paire pour respecter le budget.
328
448
 
449
+ Utilise _count_tokens (blocks-aware) pour compter les tokens du
450
+ message ASSISTANT, pas seulement .content.
451
+
329
452
  Args:
330
453
  last_pair: Dernière paire de messages (tool_call + tool_result).
331
454
  available_tokens: Tokens disponibles pour toute la paire.
@@ -341,7 +464,7 @@ class ScratchpadCompressor:
341
464
  remaining = max(0, available_tokens - tokens_used)
342
465
  result.append(self._truncate_single_result(msg, remaining))
343
466
  else:
344
- tokens_used += self._token_counter.count_tokens(msg.content or "").count
467
+ tokens_used += self._count_tokens([msg])
345
468
  result.append(msg)
346
469
 
347
470
  return result
@@ -279,6 +279,16 @@ DEFAULT_TOOL_DISPLAY: dict[str, StepDisplayInfo] = {
279
279
  category="file",
280
280
  ),
281
281
  # ==========================================================================
282
+ # Shell & Script Execution Tools
283
+ # ==========================================================================
284
+ "shell_exec": StepDisplayInfo(
285
+ id="shell_exec",
286
+ friendly_name="🐚 Exécution du script",
287
+ description="Exécution d'un script ou d'une commande shell",
288
+ icon="🐚",
289
+ category="shell",
290
+ ),
291
+ # ==========================================================================
282
292
  # Code Execution Tools
283
293
  # ==========================================================================
284
294
  "execute_code": StepDisplayInfo(
@@ -20,6 +20,7 @@ from llama_index.core.workflow import Context
20
20
 
21
21
  from agent_framework.core.knowledge_state import ToolCallSignature
22
22
  from agent_framework.core.loop_detector import LoopDetector
23
+ from agent_framework.core.scratchpad_compressor import MAX_MESSAGE_CONTENT_CHARS
23
24
 
24
25
  if TYPE_CHECKING:
25
26
  from agent_framework.core.context_budget import ContextBudgetManager
@@ -176,14 +177,66 @@ class BudgetAwareFunctionAgent(FunctionAgent):
176
177
  "Compressing scratchpad: usage %.1f%% >= 80%% threshold",
177
178
  usage_percent,
178
179
  )
179
- compressed_scratchpad = await self._scratchpad_compressor.compress(
180
- scratchpad=scratchpad,
181
- llm_input=llm_input,
182
- context_window=context_window,
183
- sacred_zone_tokens=sacred_zone_tokens,
184
- model_name=getattr(self.llm, "model", None),
185
- )
186
- await ctx.store.set(self.scratchpad_key, compressed_scratchpad)
180
+
181
+ # Boucle de compression : re-vérifier après chaque passe
182
+ # car la première compression peut ne pas suffire (ex: blocks
183
+ # non aplatis, écart de tokenisation).
184
+ max_compression_passes = 3
185
+ for compression_pass in range(max_compression_passes):
186
+ compressed_scratchpad = await self._scratchpad_compressor.compress(
187
+ scratchpad=scratchpad,
188
+ llm_input=llm_input,
189
+ context_window=context_window,
190
+ sacred_zone_tokens=sacred_zone_tokens,
191
+ model_name=getattr(self.llm, "model", None),
192
+ )
193
+ await ctx.store.set(self.scratchpad_key, compressed_scratchpad)
194
+
195
+ # Recalculer le total après compression
196
+ new_scratchpad_tokens = self._count_total_tokens([], compressed_scratchpad)
197
+ new_total = sacred_zone_tokens + llm_input_tokens + new_scratchpad_tokens
198
+ new_usage = new_total / context_window * 100 if context_window > 0 else 0.0
199
+
200
+ logger.info(
201
+ "Post-compression pass %d: %d/%d tokens (%.1f%%), scratchpad=%d",
202
+ compression_pass + 1,
203
+ new_total,
204
+ context_window,
205
+ new_usage,
206
+ new_scratchpad_tokens,
207
+ )
208
+
209
+ if new_usage < 80:
210
+ break
211
+
212
+ # Préparer la prochaine passe avec le scratchpad compressé
213
+ scratchpad = compressed_scratchpad
214
+
215
+ if compression_pass == max_compression_passes - 1:
216
+ logger.error(
217
+ "Scratchpad still at %.1f%% after %d compression passes",
218
+ new_usage,
219
+ max_compression_passes,
220
+ )
221
+
222
+ # Garde-fou caractères bruts : même après compression en tokens,
223
+ # un message peut dépasser la limite API (10M chars). On tronque
224
+ # chaque message du scratchpad qui dépasse avant l'appel LLM.
225
+ if self._scratchpad_compressor:
226
+ scratchpad = await ctx.store.get(self.scratchpad_key, default=[])
227
+ patched = False
228
+ for i, msg in enumerate(scratchpad):
229
+ content = msg.content or ""
230
+ if len(content) > MAX_MESSAGE_CONTENT_CHARS:
231
+ from agent_framework.core.scratchpad_compressor import ScratchpadCompressor
232
+ scratchpad[i] = ChatMessage(
233
+ role=msg.role,
234
+ content=ScratchpadCompressor._enforce_char_limit(content),
235
+ additional_kwargs=msg.additional_kwargs,
236
+ )
237
+ patched = True
238
+ if patched:
239
+ await ctx.store.set(self.scratchpad_key, scratchpad)
187
240
 
188
241
  return await super().take_step(ctx, llm_input, tools, memory)
189
242
 
@@ -47,7 +47,7 @@ class LLMMetrics(BaseModel):
47
47
  thinking_tokens=50,
48
48
  output_tokens=200,
49
49
  start_time=datetime.now(timezone.utc),
50
- model_name="gpt-5-mini",
50
+ model_name="gpt-5.4-mini",
51
51
  session_id="session-123"
52
52
  )
53
53
  print(f"Total tokens: {metrics.total_tokens}")
@@ -66,7 +66,7 @@ class LLMMetricsCollector:
66
66
  ```python
67
67
  # Fallback usage when auto-instrumentation is unavailable
68
68
  collector = LLMMetricsCollector(
69
- model_name="gpt-5-mini",
69
+ model_name="gpt-5.4-mini",
70
70
  session_id="session-123",
71
71
  enabled=True
72
72
  )
@@ -77,7 +77,7 @@ def get_tracer() -> Any:
77
77
  tracer = get_tracer()
78
78
  if tracer:
79
79
  with tracer.start_as_current_span("llm.chat") as span:
80
- span.set_attribute("model", "gpt-5")
80
+ span.set_attribute("model", "gpt-5.4")
81
81
  ```
82
82
  """
83
83
  global _tracer
@@ -106,7 +106,7 @@ def get_meter() -> Any:
106
106
  meter = get_meter()
107
107
  if meter:
108
108
  counter = meter.create_counter("llm.tokens.total")
109
- counter.add(100, {"model": "gpt-5"})
109
+ counter.add(100, {"model": "gpt-5.4"})
110
110
  ```
111
111
  """
112
112
  global _meter
@@ -147,7 +147,7 @@ class OTELInstrumentor:
147
147
 
148
148
  with instrumentor.trace_llm_call(
149
149
  operation_name="llm.chat",
150
- model_name="gpt-5-mini",
150
+ model_name="gpt-5.4-mini",
151
151
  session_id="session-123"
152
152
  ) as span:
153
153
  # Perform LLM call
@@ -56,7 +56,7 @@ class TokenCounter:
56
56
 
57
57
  Example:
58
58
  ```python
59
- counter = TokenCounter(model_name="gpt-5-mini")
59
+ counter = TokenCounter(model_name="gpt-5.4-mini")
60
60
  result = counter.count_tokens("Hello, world!")
61
61
  print(f"Tokens: {result.count}, Encoding: {result.encoding_name}")
62
62
  ```
@@ -215,7 +215,7 @@ class TokenCounter:
215
215
 
216
216
  Example:
217
217
  ```python
218
- counter = TokenCounter(model_name="gpt-5-mini")
218
+ counter = TokenCounter(model_name="gpt-5.4-mini")
219
219
  result = counter.count_tokens("Hello, world!")
220
220
  print(f"Token count: {result.count}")
221
221
  ```
@@ -245,7 +245,7 @@ class TokenCounter:
245
245
 
246
246
  Example:
247
247
  ```python
248
- counter = TokenCounter(model_name="gpt-5-mini")
248
+ counter = TokenCounter(model_name="gpt-5.4-mini")
249
249
  messages = [
250
250
  {"role": "system", "content": "You are a helpful assistant."},
251
251
  {"role": "user", "content": "Hello!"}
@@ -127,13 +127,16 @@ class SkillsMixin:
127
127
  self._skill_registry.unload(name)
128
128
  logger.info(f"Unloaded skill '{name}' for agent '{getattr(self, 'agent_id', 'unknown')}'")
129
129
 
130
- def register_builtin_skills(self, source: str = "python") -> None:
130
+ def register_builtin_skills(self, source: str = "markdown") -> None:
131
131
  """Register all built-in skills with this agent.
132
132
 
133
+ After registering builtins, also loads any custom skills found in
134
+ the ``CUSTOM_SKILLS_DIR`` environment variable (default ``./custom_skills``).
135
+
133
136
  Args:
134
137
  source: Loading strategy passed to ``get_all_builtin_skills``.
135
- Use ``"python"`` (default) for Python factory functions or
136
- ``"markdown"`` to load from SKILL.md files.
138
+ Use ``"markdown"`` (default) to load from SKILL.md files or
139
+ ``"python"`` for legacy Python factory functions.
137
140
  Skills already registered are skipped.
138
141
  """
139
142
  from .builtin import get_all_builtin_skills
@@ -158,6 +161,62 @@ class SkillsMixin:
158
161
  f"for agent '{getattr(self, 'agent_id', 'unknown')}'"
159
162
  )
160
163
 
164
+ self._register_custom_skills()
165
+
166
+ def _register_custom_skills(self) -> None:
167
+ """Load custom skills from CUSTOM_SKILLS_DIR into this agent's registry.
168
+
169
+ Each subdirectory containing a SKILL.md is loaded, has native tools
170
+ attached, and is registered with ``source="custom"``. Failures are
171
+ logged as warnings without blocking the remaining skills.
172
+ """
173
+ import os
174
+ import shutil
175
+
176
+ from .markdown_loader import MarkdownSkillLoader
177
+ from ..tools.shell_tool import ShellTool
178
+ from ..tools.web_fetch_tool import WebFetchTool
179
+
180
+ custom_dir = Path(os.getenv("CUSTOM_SKILLS_DIR", "./custom_skills"))
181
+ if not custom_dir.is_dir():
182
+ return
183
+
184
+ loader = MarkdownSkillLoader()
185
+ count = 0
186
+
187
+ for child in sorted(custom_dir.iterdir()):
188
+ if not child.is_dir():
189
+ continue
190
+ skill_md = child / "SKILL.md"
191
+ if not skill_md.exists():
192
+ continue
193
+ try:
194
+ skill = loader.load_from_file(skill_md)
195
+ if self._skill_registry.get(skill.metadata.name) is not None:
196
+ continue
197
+ existing_types = {type(t) for t in skill.tools}
198
+ if ShellTool not in existing_types:
199
+ skill.tools.append(ShellTool(default_timeout=60))
200
+ if WebFetchTool not in existing_types:
201
+ skill.tools.append(WebFetchTool())
202
+ for binary in skill.metadata.requires_bins:
203
+ if shutil.which(binary) is None:
204
+ logger.warning(
205
+ "Custom skill '%s' requires binary '%s' not found in PATH",
206
+ skill.metadata.name,
207
+ binary,
208
+ )
209
+ self._skill_registry.register(skill, source="custom")
210
+ count += 1
211
+ except Exception as exc:
212
+ logger.warning("Failed to load custom skill from %s: %s", child, exc)
213
+
214
+ if count > 0:
215
+ logger.info(
216
+ f"Registered {count} custom skill(s) "
217
+ f"for agent '{getattr(self, 'agent_id', 'unknown')}'"
218
+ )
219
+
161
220
  def get_skill_tools(self) -> list[Callable[..., str]]:
162
221
  """
163
222
  Get skill management tools for the agent.