agent-framework-lib 0.6.3.post3__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.post3/agent_framework_lib.egg-info → agent_framework_lib-0.6.3.post4}/PKG-INFO +13 -13
  2. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/README.md +12 -12
  3. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/__init__.py +5 -0
  4. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/core/model_config.py +5 -5
  5. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/core/step_display_config.py +10 -0
  6. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/monitoring/llm_metrics.py +1 -1
  7. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/monitoring/llm_metrics_collector.py +1 -1
  8. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/monitoring/otel_instrumentor.py +3 -3
  9. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/monitoring/token_counter.py +3 -3
  10. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/skills/agent_mixin.py +62 -3
  11. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/skills/base.py +16 -1
  12. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/skills/builtin/__init__.py +25 -9
  13. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/scripts/__init__.py +1 -0
  14. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/scripts/create_and_register.py +189 -0
  15. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/scripts/register_to_storage.py +115 -0
  16. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/skills/chart/SKILL.md +290 -0
  17. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/skills/chart/chart_to_image.py +244 -0
  18. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/skills/drawio/SKILL.md +109 -0
  19. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/skills/drawio/create_drawio.py +85 -0
  20. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/skills/excel/SKILL.md +111 -0
  21. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/skills/excel/create_excel.py +110 -0
  22. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/skills/file/SKILL.md +187 -0
  23. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/skills/file/create_file.py +85 -0
  24. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/skills/file/list_files.py +77 -0
  25. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/skills/file/read_file.py +62 -0
  26. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/skills/file_access/SKILL.md +96 -0
  27. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/skills/file_access/get_file_path.py +75 -0
  28. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/skills/form/SKILL.md +163 -0
  29. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/skills/image_display/SKILL.md +206 -0
  30. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/skills/mermaid/SKILL.md +267 -0
  31. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/skills/mermaid/mermaid_to_image.py +246 -0
  32. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/skills/multimodal/SKILL.md +124 -0
  33. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/skills/optionsblock/SKILL.md +258 -0
  34. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/skills/table/SKILL.md +220 -0
  35. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/skills/table/table_to_image.py +366 -0
  36. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/skills/unified_pdf/SKILL.md +167 -0
  37. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/skills/unified_pdf/create_pdf.py +180 -0
  38. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/skills/web_search/SKILL.md +141 -0
  39. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/skills/web_search/web_news_search.py +77 -0
  40. agent_framework_lib-0.6.3.post4/agent_framework/skills/builtin/skills/web_search/web_search.py +75 -0
  41. agent_framework_lib-0.6.3.post4/agent_framework/skills/custom_skill_manager.py +529 -0
  42. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/skills/discovery_prompt.py +47 -18
  43. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/skills/markdown_loader.py +17 -0
  44. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/tools/shell_tool.py +22 -0
  45. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/utils/session_title_generator.py +4 -4
  46. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/web/docs/GETTING_STARTED.md +3 -3
  47. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/web/docs/README.md +12 -12
  48. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4/agent_framework/web}/docs/TOOLS_AND_MCP_GUIDE.md +287 -14
  49. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4/agent_framework/web}/docs/configuration.md +10 -10
  50. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4/agent_framework/web/docs}/examples/agent_with_memory_graphiti.py +1 -1
  51. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/web/helper_agent.py +3 -3
  52. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/web/modern_ui.html +526 -0
  53. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/web/server.py +46 -2
  54. agent_framework_lib-0.6.3.post4/agent_framework/web/skills_router.py +389 -0
  55. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4/agent_framework_lib.egg-info}/PKG-INFO +13 -13
  56. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework_lib.egg-info/SOURCES.txt +30 -0
  57. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/docs/ARCHITECTURE_DIAGRAM.md +3 -3
  58. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/docs/ELASTICSEARCH_DATA_STRUCTURES.md +1 -1
  59. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/docs/GETTING_STARTED.md +3 -3
  60. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/docs/HISTORY_MESSAGE_FORMAT.md +1 -1
  61. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/docs/MULTIMODAL_TOOLS_GUIDE.md +2 -2
  62. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/docs/SKILLS_AND_SUBAGENTS_ANALYSIS.md +73 -51
  63. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/docs/STREAMING_EVENTS_FRONTEND.md +1 -1
  64. {agent_framework_lib-0.6.3.post3/agent_framework/web → agent_framework_lib-0.6.3.post4}/docs/TOOLS_AND_MCP_GUIDE.md +287 -14
  65. {agent_framework_lib-0.6.3.post3/agent_framework/web → agent_framework_lib-0.6.3.post4}/docs/configuration.md +10 -10
  66. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/docs/framework_audit_remarques.md +1 -1
  67. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/examples/agent_context_budget_test.py +1 -1
  68. {agent_framework_lib-0.6.3.post3/agent_framework/web/docs → agent_framework_lib-0.6.3.post4}/examples/agent_with_memory_graphiti.py +1 -1
  69. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/pyproject.toml +13 -10
  70. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/ARCHITECTURE.md +0 -0
  71. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/LICENSE +0 -0
  72. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/MANIFEST.in +0 -0
  73. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/a2a/__init__.py +0 -0
  74. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/a2a/base.py +0 -0
  75. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/a2a/endpoints/__init__.py +0 -0
  76. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/a2a/endpoints/a2a_router.py +0 -0
  77. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/a2a/endpoints/agent_card_builder.py +0 -0
  78. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/a2a/endpoints/agent_card_skill_builder.py +0 -0
  79. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/a2a/endpoints/jsonrpc_dispatcher.py +0 -0
  80. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/a2a/endpoints/models_jsonrpc.py +0 -0
  81. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/a2a/endpoints/sse_wrapper.py +0 -0
  82. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/a2a/endpoints/translation_layer.py +0 -0
  83. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/a2a/models.py +0 -0
  84. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/a2a/providers/__init__.py +0 -0
  85. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/a2a/providers/elasticsearch_provider.py +0 -0
  86. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/a2a/providers/postgres_provider.py +0 -0
  87. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/capabilities/__init__.py +0 -0
  88. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/capabilities/resolver.py +0 -0
  89. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/chart_generation/llm_refinement_loop.py +0 -0
  90. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/core/__init__.py +0 -0
  91. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/core/activity_formatter.py +0 -0
  92. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/core/agent_interface.py +0 -0
  93. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/core/agent_provider.py +0 -0
  94. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/core/base_agent.py +0 -0
  95. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/core/context_budget.py +0 -0
  96. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/core/context_summarizer.py +0 -0
  97. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/core/elasticsearch_config_provider.py +0 -0
  98. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/core/implementation_validator.py +0 -0
  99. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/core/knowledge_state.py +0 -0
  100. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/core/loop_detector.py +0 -0
  101. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/core/model_clients.py +0 -0
  102. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/core/model_router.py +0 -0
  103. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/core/models.py +0 -0
  104. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/core/provider_calibration.py +0 -0
  105. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/core/rich_content_prompt_unsused_to_be_deleted.py +0 -0
  106. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/core/scratchpad_compressor.py +0 -0
  107. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/core/state_manager.py +0 -0
  108. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/core/streaming_parts_accumulator.py +0 -0
  109. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/implementations/__init__.py +0 -0
  110. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/implementations/budget_aware_agent.py +0 -0
  111. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/implementations/llamaindex_agent.py +0 -0
  112. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/implementations/llamaindex_memory_adapter.py +0 -0
  113. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/implementations/microsoft_agent.py +0 -0
  114. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/memory/__init__.py +0 -0
  115. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/memory/agent_mixin.py +0 -0
  116. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/memory/base.py +0 -0
  117. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/memory/config.py +0 -0
  118. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/memory/manager.py +0 -0
  119. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/memory/personalization.py +0 -0
  120. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/memory/providers/__init__.py +0 -0
  121. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/memory/providers/graphiti_provider.py +0 -0
  122. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/memory/providers/memori_provider.py +0 -0
  123. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/memory/tools.py +0 -0
  124. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/monitoring/__init__.py +0 -0
  125. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/monitoring/api_timing_tracker.py +0 -0
  126. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/monitoring/elasticsearch_circuit_breaker.py +0 -0
  127. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/monitoring/elasticsearch_logging.py +0 -0
  128. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/monitoring/error_handling.py +0 -0
  129. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/monitoring/error_logging.py +0 -0
  130. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/monitoring/llm_auto_instrumentor.py +0 -0
  131. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/monitoring/llm_metrics_extractor.py +0 -0
  132. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/monitoring/metrics_aggregator.py +0 -0
  133. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/monitoring/metrics_config.py +0 -0
  134. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/monitoring/observability_manager.py +0 -0
  135. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/monitoring/otel_logging_handler.py +0 -0
  136. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/monitoring/otel_metrics_recorder.py +0 -0
  137. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/monitoring/otel_setup.py +0 -0
  138. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/monitoring/performance_monitor.py +0 -0
  139. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/monitoring/progress_tracker.py +0 -0
  140. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/monitoring/resource_manager.py +0 -0
  141. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/monitoring/resource_metrics_collector.py +0 -0
  142. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/monitoring/streaming_latency_tracer.py +0 -0
  143. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/monitoring/timing_tracker.py +0 -0
  144. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/monitoring/tracing_context.py +0 -0
  145. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/processing/__init__.py +0 -0
  146. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/processing/ai_content_management.py +0 -0
  147. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/processing/markdown_converter.py +0 -0
  148. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/processing/multimodal_integration.py +0 -0
  149. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/processing/rich_content_validation.py +0 -0
  150. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/py.typed +0 -0
  151. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/session/__init__.py +0 -0
  152. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/session/elasticsearch_session_storage.py +0 -0
  153. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/session/session_storage.py +0 -0
  154. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/skills/__init__.py +0 -0
  155. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/skills/builtin/chart_skill.py +0 -0
  156. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/skills/builtin/drawio_skill.py +0 -0
  157. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/skills/builtin/excel_skill.py +0 -0
  158. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/skills/builtin/file_access_skill.py +0 -0
  159. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/skills/builtin/file_skill.py +0 -0
  160. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/skills/builtin/form_skill.py +0 -0
  161. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/skills/builtin/image_display_skill.py +0 -0
  162. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/skills/builtin/mermaid_skill.py +0 -0
  163. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/skills/builtin/multimodal_skill.py +0 -0
  164. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/skills/builtin/optionsblock_skill.py +0 -0
  165. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/skills/builtin/pdf_skill.py +0 -0
  166. {agent_framework_lib-0.6.3.post3 → 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.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/skills/builtin/table_skill.py +0 -0
  168. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/skills/builtin/unified_pdf_skill.py +0 -0
  169. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/skills/builtin/web_search_skill.py +0 -0
  170. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/skills/tools.py +0 -0
  171. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/storage/__init__.py +0 -0
  172. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/storage/file_storages.py +0 -0
  173. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/storage/file_system_management.py +0 -0
  174. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/storage/storage_optimizer.py +0 -0
  175. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/subagents/__init__.py +0 -0
  176. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/subagents/spawn_tool.py +0 -0
  177. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/tools/__init__.py +0 -0
  178. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/tools/activity_callback.py +0 -0
  179. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/tools/adaptive_pdf_css.py +0 -0
  180. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/tools/base.py +0 -0
  181. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/tools/chart_tools.py +0 -0
  182. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/tools/drawio_tools.py +0 -0
  183. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/tools/excel_tools.py +0 -0
  184. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/tools/file_access_tools.py +0 -0
  185. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/tools/file_tools.py +0 -0
  186. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/tools/html_content_analyzer.py +0 -0
  187. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/tools/mermaid_tools.py +0 -0
  188. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/tools/multimodal_tools.py +0 -0
  189. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/tools/pdf_image_scaler.py +0 -0
  190. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/tools/pdf_tools.py +0 -0
  191. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/tools/pdf_with_images_tool.py +0 -0
  192. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/tools/sizing_config.py +0 -0
  193. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/tools/tabledata_tools.py +0 -0
  194. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/tools/unified_pdf_tool.py +0 -0
  195. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/tools/web_fetch_tool.py +0 -0
  196. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/tools/web_search_tools.py +0 -0
  197. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/utils/__init__.py +0 -0
  198. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/utils/path_utils.py +0 -0
  199. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/utils/post_install.py +0 -0
  200. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/utils/source_detector.py +0 -0
  201. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/utils/special_blocks.py +0 -0
  202. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/web/__init__.py +0 -0
  203. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/web/admin_auth.py +0 -0
  204. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/web/admin_models.py +0 -0
  205. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/web/admin_router.py +0 -0
  206. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/web/admin_services.py +0 -0
  207. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/web/api_timing_middleware.py +0 -0
  208. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/web/docs/A2A_GUIDE.md +0 -0
  209. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/web/docs/CREATING_AGENTS.md +0 -0
  210. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/web/docs/DOCKER_SETUP.md +0 -0
  211. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/web/docs/Dockerfile +0 -0
  212. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/web/docs/MEMORY_INSTALLATION.md +0 -0
  213. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/web/docs/api-reference.md +0 -0
  214. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/web/docs/docker-compose.yml +0 -0
  215. {agent_framework_lib-0.6.3.post3 → 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.post3 → 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.post3 → 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.post3 → 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.post3 → 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.post3 → 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.post3 → 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.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/web/docs/examples/simple_agent.py +0 -0
  223. {agent_framework_lib-0.6.3.post3 → 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.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/web/docs/installation-guide.md +0 -0
  225. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/web/documentation_generator.py +0 -0
  226. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/web/helper_ui.html +0 -0
  227. {agent_framework_lib-0.6.3.post3 → 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.post3 → 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.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/web/otel_tracing_middleware.py +0 -0
  230. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework/web/test_app.html +0 -0
  231. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework_lib.egg-info/dependency_links.txt +0 -0
  232. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework_lib.egg-info/entry_points.txt +0 -0
  233. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework_lib.egg-info/requires.txt +0 -0
  234. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/agent_framework_lib.egg-info/top_level.txt +0 -0
  235. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/docs/A2A_GUIDE.md +0 -0
  236. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/docs/ACTIVITY_OUTPUT_PART.md +0 -0
  237. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/docs/CONCURRENCE_VS_PARALLELISME_GUIDE.md +0 -0
  238. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/docs/CREATING_AGENTS.md +0 -0
  239. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/docs/DOCKER_SETUP.md +0 -0
  240. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/docs/FILE_DOWNLOAD_LINKS.md +0 -0
  241. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/docs/FILE_STORAGE_GUIDE.md +0 -0
  242. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/docs/IMPLEMENTATION_GUIDE_NEW_AGENT.md +0 -0
  243. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/docs/MEMORY_INSTALLATION.md +0 -0
  244. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/docs/MODIFICATIONS_CONCURRENCE.md +0 -0
  245. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/docs/OBSERVABILITY_GUIDE.md +0 -0
  246. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/docs/PYPI_PUBLISHING.md +0 -0
  247. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/docs/QA_STREAMING_LATENCY.md +0 -0
  248. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/docs/SPEC_CROSS_MODEL_HISTORY_CONVERSION.md +0 -0
  249. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/docs/api-reference.md +0 -0
  250. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/docs/installation-guide.md +0 -0
  251. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/examples/README.md +0 -0
  252. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/examples/agent_example_multi_skills.py +0 -0
  253. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/examples/agent_exemple_test.py +0 -0
  254. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/examples/agent_training_with_apo.py +0 -0
  255. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/examples/agent_with_custom_tools_file_storage.py +0 -0
  256. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/examples/agent_with_file_storage.py +0 -0
  257. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/examples/agent_with_mcp.py +0 -0
  258. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/examples/agent_with_memory_hybrid.py +0 -0
  259. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/examples/agent_with_memory_simple.py +0 -0
  260. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/examples/agent_with_personalization.py +0 -0
  261. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/examples/biagenttest.py +0 -0
  262. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/examples/custom_framework_agent.py +0 -0
  263. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/examples/dependencies/docker-compose.yaml +0 -0
  264. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/examples/pyproject.toml +0 -0
  265. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/examples/simple_agent.py +0 -0
  266. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/examples/skills_demo_agent.py +0 -0
  267. {agent_framework_lib-0.6.3.post3 → agent_framework_lib-0.6.3.post4}/setup.cfg +0 -0
  268. {agent_framework_lib-0.6.3.post3 → 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.post3
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:**
@@ -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
  ```
@@ -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(
@@ -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.
@@ -220,13 +220,15 @@ class SkillRegistry:
220
220
  self._skills: dict[str, Skill] = {}
221
221
  self._loaded: set[str] = set()
222
222
  self._loaded_contexts: dict[str, LoadedSkillContext] = {}
223
+ self._sources: dict[str, str] = {}
223
224
 
224
- def register(self, skill: Skill) -> None:
225
+ def register(self, skill: Skill, source: str = "builtin") -> None:
225
226
  """
226
227
  Register a skill in the registry.
227
228
 
228
229
  Args:
229
230
  skill: The skill to register
231
+ source: Origin of the skill (e.g. "builtin" or "custom").
230
232
 
231
233
  Raises:
232
234
  ValueError: If the skill is invalid
@@ -234,6 +236,7 @@ class SkillRegistry:
234
236
  if not skill.validate_skill():
235
237
  raise ValueError(f"Invalid skill: {skill.metadata.name}")
236
238
  self._skills[skill.metadata.name] = skill
239
+ self._sources[skill.metadata.name] = source
237
240
 
238
241
  def unregister(self, name: str) -> None:
239
242
  """
@@ -248,6 +251,18 @@ class SkillRegistry:
248
251
  self.unload(name)
249
252
  if name in self._skills:
250
253
  del self._skills[name]
254
+ self._sources.pop(name, None)
255
+
256
+ def get_source(self, name: str) -> str | None:
257
+ """Return the source for a registered skill.
258
+
259
+ Args:
260
+ name: Name of the skill
261
+
262
+ Returns:
263
+ The source string (e.g. "builtin", "custom") or None if not found.
264
+ """
265
+ return self._sources.get(name)
251
266
 
252
267
  def get(self, name: str) -> Skill | None:
253
268
  """
@@ -98,28 +98,44 @@ def _get_builtin_skills_from_python() -> list[Skill]:
98
98
 
99
99
 
100
100
  def _get_builtin_skills_from_markdown() -> list[Skill]:
101
- """Load built-in skills from SKILL.md files."""
101
+ """Load built-in skills from SKILL.md files with ShellTool and WebFetchTool attached."""
102
102
  from ..markdown_loader import MarkdownSkillLoader
103
- return MarkdownSkillLoader().load_from_dir(_SKILLS_MD_DIR)
103
+ from ...tools.shell_tool import ShellTool
104
+ from ...tools.web_fetch_tool import WebFetchTool
105
+
106
+ skills = MarkdownSkillLoader().load_from_dir(_SKILLS_MD_DIR)
107
+ for skill in skills:
108
+ existing_types = {type(t) for t in skill.tools}
109
+ if ShellTool not in existing_types:
110
+ skill.tools.append(ShellTool(default_timeout=60))
111
+ if WebFetchTool not in existing_types:
112
+ skill.tools.append(WebFetchTool())
113
+ return skills
104
114
 
105
115
 
106
116
  def get_all_builtin_skills(
107
- source: Literal["python", "markdown"] = "python",
117
+ source: Literal["python", "markdown"] = "markdown",
108
118
  ) -> list[Skill]:
109
119
  """Get all built-in skills.
110
120
 
111
121
  Args:
112
122
  source: Loading strategy.
113
- - ``"python"`` (default): use Python factory functions.
114
- - ``"markdown"``: use SKILL.md files from the ``skills/`` directory.
115
- This will become the default once the migration is complete.
123
+ - ``"markdown"`` (default): use SKILL.md files from the ``skills/`` directory.
124
+ - ``"python"``: deprecated, use Python factory functions.
116
125
 
117
126
  Returns:
118
127
  List of Skill instances for all built-in skills.
119
128
  """
120
- if source == "markdown":
121
- return _get_builtin_skills_from_markdown()
122
- return _get_builtin_skills_from_python()
129
+ if source == "python":
130
+ import warnings
131
+
132
+ warnings.warn(
133
+ "source='python' is deprecated. Use source='markdown' (now default).",
134
+ DeprecationWarning,
135
+ stacklevel=2,
136
+ )
137
+ return _get_builtin_skills_from_python()
138
+ return _get_builtin_skills_from_markdown()
123
139
 
124
140
 
125
141
  __all__ = [
@@ -0,0 +1 @@
1
+ """Shared scripts for builtin skills."""
@@ -0,0 +1,189 @@
1
+ #!/usr/bin/env python3
2
+ """Wrapper that creates a file via a skill script and registers it to storage.
3
+
4
+ Combines file creation and storage registration into a single CLI invocation.
5
+ Runs the underlying skill script as a subprocess, verifies the output file,
6
+ uploads it to the Storage API, cleans up the local copy, and emits a single
7
+ JSON result with the download URL.
8
+
9
+ Usage:
10
+ uv run python -m agent_framework.skills.builtin.scripts.create_and_register \
11
+ --skill <skill_name> --filename <name> [--output-dir <dir>] [extra args...]
12
+ """
13
+ import json
14
+ import os
15
+ import subprocess
16
+ import sys
17
+ import urllib.error
18
+ import urllib.request
19
+
20
+ from agent_framework.skills.builtin.scripts.register_to_storage import (
21
+ _guess_mime,
22
+ _multipart_body,
23
+ )
24
+
25
+ SKILL_MODULE_MAP = {
26
+ "chart": "agent_framework.skills.builtin.skills.chart.chart_to_image",
27
+ "unified_pdf": "agent_framework.skills.builtin.skills.unified_pdf.create_pdf",
28
+ "excel": "agent_framework.skills.builtin.skills.excel.create_excel",
29
+ "file": "agent_framework.skills.builtin.skills.file.create_file",
30
+ "mermaid": "agent_framework.skills.builtin.skills.mermaid.mermaid_to_image",
31
+ "drawio": "agent_framework.skills.builtin.skills.drawio.create_drawio",
32
+ "table": "agent_framework.skills.builtin.skills.table.table_to_image",
33
+ }
34
+
35
+
36
+ def _emit_error(message: str, code: int = 1) -> None:
37
+ """Print a JSON error to stderr and exit."""
38
+ print(json.dumps({"status": "error", "message": message}), file=sys.stderr)
39
+ sys.exit(code)
40
+
41
+
42
+ def _parse_args(argv: list[str]) -> tuple[str, str, str | None, list[str]]:
43
+ """Extract --skill, --filename, --output-dir from argv.
44
+
45
+ Returns:
46
+ Tuple of (skill, filename, output_dir, remaining_args).
47
+ """
48
+ skill = None
49
+ filename = None
50
+ output_dir = None
51
+ remaining = []
52
+ i = 0
53
+ while i < len(argv):
54
+ if argv[i] == "--skill" and i + 1 < len(argv):
55
+ skill = argv[i + 1]
56
+ i += 2
57
+ elif argv[i] == "--filename" and i + 1 < len(argv):
58
+ filename = argv[i + 1]
59
+ i += 2
60
+ elif argv[i] == "--output-dir" and i + 1 < len(argv):
61
+ output_dir = argv[i + 1]
62
+ i += 2
63
+ else:
64
+ remaining.append(argv[i])
65
+ i += 1
66
+
67
+ if not skill:
68
+ _emit_error("Missing required argument: --skill", code=2)
69
+ if not filename:
70
+ _emit_error("Missing required argument: --filename", code=2)
71
+
72
+ return skill, filename, output_dir, remaining # type: ignore[return-value]
73
+
74
+
75
+ def _run_skill(
76
+ module: str,
77
+ filename: str,
78
+ output_dir: str | None,
79
+ extra_args: list[str],
80
+ stdin_data: bytes,
81
+ ) -> str:
82
+ """Invoke the skill script as a subprocess and return the created file path."""
83
+ cmd = [sys.executable, "-m", module, "--filename", filename]
84
+ if output_dir:
85
+ cmd.extend(["--output-dir", output_dir])
86
+ cmd.extend(extra_args)
87
+
88
+ result = subprocess.run(cmd, input=stdin_data, capture_output=True)
89
+
90
+ if result.returncode != 0:
91
+ sys.stderr.buffer.write(result.stderr)
92
+ sys.exit(result.returncode)
93
+
94
+ try:
95
+ output = json.loads(result.stdout.decode("utf-8"))
96
+ except (json.JSONDecodeError, UnicodeDecodeError) as exc:
97
+ _emit_error(f"Failed to parse skill output: {exc}")
98
+
99
+ if "file" not in output:
100
+ _emit_error("Skill output missing 'file' field")
101
+
102
+ return output["file"]
103
+
104
+
105
+ def _verify_file(filepath: str) -> None:
106
+ """Check that the created file exists and is non-empty."""
107
+ if not os.path.isfile(filepath):
108
+ _emit_error(f"Created file not found: {filepath}")
109
+ if os.path.getsize(filepath) == 0:
110
+ _emit_error(f"Created file is empty: {filepath}")
111
+
112
+
113
+ def _upload_file(filepath: str) -> dict:
114
+ """Upload the file to the Storage API and return the response dict."""
115
+ user_id = os.environ.get("AGENT_USER_ID", "default_user")
116
+ session_id = os.environ.get("AGENT_SESSION_ID", "")
117
+ host = os.environ.get("AGENT_HOST", "localhost")
118
+ port = os.environ.get("AGENT_PORT", "8203")
119
+
120
+ filename = os.path.basename(filepath)
121
+ mime = _guess_mime(filepath)
122
+
123
+ params = f"user_id={user_id}&is_generated=true&tags=agent-created"
124
+ if session_id:
125
+ params += f"&session_id={session_id}"
126
+
127
+ url = f"http://{host}:{port}/files/upload?{params}"
128
+ body, content_type = _multipart_body(filepath, filename, mime)
129
+
130
+ req = urllib.request.Request(url, data=body, method="POST")
131
+ req.add_header("Content-Type", content_type)
132
+
133
+ try:
134
+ with urllib.request.urlopen(req, timeout=30) as resp:
135
+ return json.loads(resp.read().decode("utf-8"))
136
+ except urllib.error.HTTPError as e:
137
+ err = e.read().decode("utf-8", errors="replace")
138
+ _emit_error(f"Server {e.code}: {err}")
139
+ except urllib.error.URLError as e:
140
+ _emit_error(
141
+ f"Cannot connect to server at http://{host}:{port}: {e.reason}"
142
+ )
143
+ return {} # unreachable, but satisfies type checker
144
+
145
+
146
+ def _cleanup(filepath: str) -> bool:
147
+ """Delete the local file. Returns True on success, False on failure."""
148
+ try:
149
+ os.remove(filepath)
150
+ return True
151
+ except OSError:
152
+ return False
153
+
154
+
155
+ def main() -> None:
156
+ """Entry point for the create-and-register wrapper."""
157
+ stdin_data = sys.stdin.buffer.read()
158
+
159
+ skill, filename, output_dir, extra_args = _parse_args(sys.argv[1:])
160
+
161
+ module = SKILL_MODULE_MAP.get(skill)
162
+ if module is None:
163
+ _emit_error(f"Unknown skill: {skill}")
164
+
165
+ filepath = _run_skill(module, filename, output_dir, extra_args, stdin_data) # type: ignore[arg-type]
166
+
167
+ _verify_file(filepath)
168
+
169
+ upload_result = _upload_file(filepath)
170
+
171
+ local_cleaned = _cleanup(filepath)
172
+
173
+ mime = _guess_mime(filepath)
174
+ size_bytes = upload_result.get("size_bytes", 0)
175
+
176
+ output = {
177
+ "status": "success",
178
+ "file_id": upload_result.get("file_id", ""),
179
+ "download_url": upload_result.get("download_url", ""),
180
+ "filename": os.path.basename(filepath),
181
+ "size_bytes": size_bytes,
182
+ "mime_type": mime,
183
+ "local_cleaned": local_cleaned,
184
+ }
185
+ print(json.dumps(output))
186
+
187
+
188
+ if __name__ == "__main__":
189
+ main()