agent-framework-lib 0.8.8.post9__tar.gz → 0.8.9__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.
- {agent_framework_lib-0.8.8.post9/agent_framework_lib.egg-info → agent_framework_lib-0.8.9}/PKG-INFO +5 -3
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/core/model_clients.py +570 -1
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/monitoring/__init__.py +2 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/monitoring/metrics_aggregator.py +101 -49
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/security/sandbox_provider.py +61 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/image_gen/SKILL.md +20 -19
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/image_gen/create_image.py +55 -58
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/web/server.py +1 -3
- agent_framework_lib-0.8.9/agent_framework/workflow/__init__.py +130 -0
- agent_framework_lib-0.8.9/agent_framework/workflow/core/__init__.py +27 -0
- agent_framework_lib-0.8.9/agent_framework/workflow/core/builder.py +379 -0
- agent_framework_lib-0.8.9/agent_framework/workflow/core/chat_completion.py +507 -0
- agent_framework_lib-0.8.9/agent_framework/workflow/core/context.py +109 -0
- agent_framework_lib-0.8.9/agent_framework/workflow/core/decorators.py +155 -0
- agent_framework_lib-0.8.9/agent_framework/workflow/core/engine.py +216 -0
- agent_framework_lib-0.8.9/agent_framework/workflow/core/errors.py +117 -0
- agent_framework_lib-0.8.9/agent_framework/workflow/core/monitoring.py +453 -0
- agent_framework_lib-0.8.9/agent_framework/workflow/core/runner.py +292 -0
- agent_framework_lib-0.8.9/agent_framework/workflow/core/state.py +24 -0
- agent_framework_lib-0.8.9/agent_framework/workflow/core/types.py +155 -0
- agent_framework_lib-0.8.9/agent_framework/workflow/implementations/__init__.py +19 -0
- agent_framework_lib-0.8.9/agent_framework/workflow/implementations/langgraph_engine.py +195 -0
- agent_framework_lib-0.8.9/agent_framework/workflow/server/__init__.py +11 -0
- agent_framework_lib-0.8.9/agent_framework/workflow/server/router.py +380 -0
- agent_framework_lib-0.8.9/agent_framework/workflow/server/schemas.py +58 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9/agent_framework_lib.egg-info}/PKG-INFO +5 -3
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework_lib.egg-info/SOURCES.txt +18 -1
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework_lib.egg-info/requires.txt +5 -2
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/docs/DIAGNOSTIC_SANDBOX_SKILLS.md +14 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/docs/OPENSHELL_GATEWAY_HOST_SETUP.md +111 -33
- agent_framework_lib-0.8.9/examples/workflow_engine_example.py +244 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/pyproject.toml +14 -3
- agent_framework_lib-0.8.8.post9/agent_framework/skills/builtin/skills/image_gen/generate_image.py +0 -199
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/ARCHITECTURE.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/LICENSE +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/MANIFEST.in +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/README.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/__init__.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/a2a/__init__.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/a2a/base.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/a2a/endpoints/__init__.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/a2a/endpoints/a2a_router.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/a2a/endpoints/agent_card_builder.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/a2a/endpoints/agent_card_skill_builder.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/a2a/endpoints/jsonrpc_dispatcher.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/a2a/endpoints/models_jsonrpc.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/a2a/endpoints/sse_wrapper.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/a2a/endpoints/translation_layer.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/a2a/models.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/a2a/providers/__init__.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/a2a/providers/elasticsearch_provider.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/a2a/providers/postgres_provider.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/capabilities/__init__.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/capabilities/resolver.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/code_delivery/__init__.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/code_delivery/audit.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/code_delivery/config.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/code_delivery/crypto.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/code_delivery/git_provider.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/code_delivery/herdr_client.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/code_delivery/models.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/code_delivery/orchestrator.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/code_delivery/store.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/code_delivery/tools.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/core/__init__.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/core/activity_formatter.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/core/agent_interface.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/core/agent_provider.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/core/base_agent.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/core/context_budget.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/core/context_summarizer.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/core/elasticsearch_config_provider.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/core/execution_controller.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/core/implementation_validator.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/core/interruption_message.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/core/knowledge_state.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/core/loop_detector.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/core/model_config.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/core/model_router.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/core/models.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/core/prompt_builder.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/core/provider_calibration.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/core/scratchpad_compressor.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/core/scratchpad_serializer.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/core/state_manager.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/core/step_display_config.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/core/streaming_parts_accumulator.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/implementations/__init__.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/implementations/budget_aware_agent.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/implementations/llamaindex_agent.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/implementations/llamaindex_memory_adapter.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/implementations/microsoft_agent.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/memory/__init__.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/memory/agent_mixin.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/memory/base.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/memory/config.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/memory/hypothesis_engine.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/memory/implicit_feedback.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/memory/manager.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/memory/personalization.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/memory/providers/__init__.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/memory/providers/graphiti_provider.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/memory/providers/memori_provider.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/memory/response_lessons.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/memory/tools.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/memory/work_patterns.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/monitoring/api_timing_tracker.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/monitoring/elasticsearch_circuit_breaker.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/monitoring/elasticsearch_logging.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/monitoring/error_handling.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/monitoring/error_logging.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/monitoring/llm_auto_instrumentor.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/monitoring/llm_metrics.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/monitoring/llm_metrics_collector.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/monitoring/llm_metrics_extractor.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/monitoring/metrics_config.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/monitoring/observability_manager.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/monitoring/otel_instrumentor.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/monitoring/otel_logging_handler.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/monitoring/otel_metrics_recorder.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/monitoring/otel_setup.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/monitoring/performance_monitor.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/monitoring/progress_tracker.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/monitoring/resource_manager.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/monitoring/resource_metrics_collector.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/monitoring/streaming_latency_tracer.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/monitoring/timing_tracker.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/monitoring/token_counter.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/monitoring/tracing_context.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/notifications/__init__.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/notifications/hub.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/notifications/webhook_notifier.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/processing/__init__.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/processing/ai_content_management.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/processing/markdown_converter.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/processing/multimodal_integration.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/processing/rich_content_validation.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/py.typed +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/security/__init__.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/security/authz.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/security/file_view_token.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/security/input_guard.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/security/openshell_policy.yaml +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/security/pii_redactor.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/security/sandbox.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/security/secret_redactor.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/security/shell_env.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/security/upload_token.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/session/__init__.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/session/elasticsearch_session_storage.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/session/session_storage.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/__init__.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/agent_mixin.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/base.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/__init__.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/scripts/__init__.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/scripts/create_and_register.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/scripts/register_to_storage.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/chart/SKILL.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/chart/chart_to_image.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/chart/vendor_chart.umd.min.js +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/code_delivery/SKILL.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/code_format/SKILL.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/code_format/format_python.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/csv/SKILL.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/csv/create_csv.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/csv/read_csv.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/csv/transform_csv.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/data_format/SKILL.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/data_format/json_to_yaml.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/data_format/yaml_to_json.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/drawio/SKILL.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/drawio/create_drawio.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/email_template/SKILL.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/excel/SKILL.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/excel/create_excel.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/file/SKILL.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/file/create_file.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/file/list_files.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/file/read_file.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/file_access/SKILL.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/file_access/download_to_local.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/file_access/get_file_path.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/form/SKILL.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/image_display/SKILL.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/mermaid/SKILL.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/mermaid/mermaid_to_image.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/mermaid/vendor_mermaid.umd.min.js +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/multimodal/SKILL.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/optionsblock/SKILL.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/powerpoint/SKILL.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/powerpoint/create_powerpoint.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/powerpoint/templates/Big Data Infographics.pptx +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/powerpoint/templates/Executive Design Pitch Deck.pptx +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/powerpoint/templates/Management Consulting Toolkit.pptx +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/powerpoint/templates/__init__.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/powerpoint/templates/generate_templates.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/skill_creator/SKILL.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/skill_creator/skill_api.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/table/SKILL.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/table/table_to_image.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/unified_pdf/SKILL.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/unified_pdf/create_pdf.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/web_news_search/SKILL.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/web_news_search/web_news_search.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/word/SKILL.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/builtin/skills/word/create_word.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/custom_skill_manager.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/discovery_prompt.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/markdown_loader.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/skills/tools.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/storage/__init__.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/storage/file_storages.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/storage/file_system_management.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/storage/storage_optimizer.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/subagents/__init__.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/subagents/executor.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/subagents/message_injector.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/subagents/message_queue.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/subagents/retrigger.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/subagents/spawn_tool.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/tools/__init__.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/tools/activity_callback.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/tools/adaptive_pdf_css.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/tools/base.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/tools/html_content_analyzer.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/tools/multimodal_tools.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/tools/pdf_image_scaler.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/tools/shell_tool.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/tools/sizing_config.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/tools/web_fetch_tool.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/tools/web_search_tool.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/utils/__init__.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/utils/path_utils.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/utils/post_install.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/utils/session_title_generator.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/utils/source_detector.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/utils/special_blocks.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/web/__init__.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/web/admin_auth.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/web/admin_models.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/web/admin_router.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/web/admin_services.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/web/api_timing_middleware.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/web/docs/A2A_GUIDE.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/web/docs/BUILTIN_SKILLS_REFERENCE.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/web/docs/CREATING_AGENTS.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/web/docs/CUSTOM_SKILLS_GUIDE.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/web/docs/DOCKER_SETUP.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/web/docs/Dockerfile +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/web/docs/GETTING_STARTED.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/web/docs/GITNEXUS_USER_GUIDE.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/web/docs/MEMORY_INSTALLATION.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/web/docs/README.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/web/docs/TOOLS_AND_MCP_GUIDE.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/web/docs/WORKSPACE_INTEGRATION.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/web/docs/api-reference.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/web/docs/configuration.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/web/docs/docker-compose.yml +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/web/docs/examples/agent_example_multi_skills.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/web/docs/examples/agent_with_file_storage.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/web/docs/examples/agent_with_mcp.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/web/docs/examples/agent_with_memory.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/web/docs/examples/agent_with_memory_graphiti.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/web/docs/examples/agent_with_memory_hybrid.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/web/docs/examples/agent_with_memory_simple.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/web/docs/examples/custom_framework_agent.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/web/docs/examples/simple_agent.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/web/docs/examples/skills_demo_agent.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/web/docs/installation-guide.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/web/documentation_generator.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/web/gitnexus_client.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/web/helper_agent.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/web/helper_ui.html +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/web/modern_ui.html +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/web/observability/kibana-llm-dashboard-setup.json +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/web/observability/kibana-resource-metrics-dashboard.json +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/web/otel_tracing_middleware.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/web/skills_router.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/web/test_app.html +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/workspace/__init__.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/workspace/artefacts.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/workspace/client.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/workspace/config.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/workspace/context.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/workspace/cursor.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/workspace/memory.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/workspace/models.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/workspace/poller.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/workspace/preferences.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/workspace/router.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/workspace/session.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/workspace/subscription.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework_lib.egg-info/dependency_links.txt +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework_lib.egg-info/entry_points.txt +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework_lib.egg-info/top_level.txt +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/docs/A2A_GUIDE.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/docs/ACTIVITY_OUTPUT_PART.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/docs/ARCHITECTURE_DIAGRAM.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/docs/BUILTIN_SKILLS_REFERENCE.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/docs/CANCEL_AND_INTERRUPT_FRONTEND.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/docs/CONCURRENCE_VS_PARALLELISME_GUIDE.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/docs/CREATING_AGENTS.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/docs/CUSTOM_SKILLS_GUIDE.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/docs/DEEPEVAL_TEST_REPORT.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/docs/DOCKER_SETUP.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/docs/ELASTICSEARCH_DATA_STRUCTURES.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/docs/FILE_DOWNLOAD_LINKS.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/docs/FILE_STORAGE_GUIDE.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/docs/GETTING_STARTED.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/docs/GITNEXUS_USER_GUIDE.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/docs/HISTORY_MESSAGE_FORMAT.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/docs/IMPLEMENTATION_GUIDE_NEW_AGENT.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/docs/MEMORY_INSTALLATION.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/docs/MODIFICATIONS_CONCURRENCE.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/docs/MULTIMODAL_TOOLS_GUIDE.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/docs/OBSERVABILITY_GUIDE.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/docs/PYPI_PUBLISHING.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/docs/QA_STREAMING_LATENCY.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/docs/SCREENSHOTS_GUIDE.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/docs/SECRETS_MANAGEMENT.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/docs/SECURITY_HARDENING.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/docs/SPEC_CROSS_MODEL_HISTORY_CONVERSION.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/docs/SSE_NOTIFICATIONS_GUIDE.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/docs/STREAMING_EVENTS_FRONTEND.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/docs/TOOLS_AND_MCP_GUIDE.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/docs/WORKSPACE_INTEGRATION.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/docs/api-reference.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/docs/configuration.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/docs/framework_audit_remarques.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/docs/helper_agent.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/docs/index.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/docs/installation-guide.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/examples/README.md +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/examples/agent_context_budget_test.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/examples/agent_example_multi_skills.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/examples/agent_exemple_test.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/examples/agent_training_with_apo.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/examples/agent_with_custom_tools_file_storage.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/examples/agent_with_file_storage.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/examples/agent_with_mcp.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/examples/agent_with_memory_graphiti.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/examples/agent_with_memory_hybrid.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/examples/agent_with_memory_simple.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/examples/agent_with_personalization.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/examples/biagenttest.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/examples/custom_framework_agent.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/examples/dependencies/docker-compose.yaml +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/examples/pyproject.toml +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/examples/simple_agent.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/examples/skills_demo_agent.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/examples/test_work_patterns_live.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/examples/workspace_test_agent.py +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/setup.cfg +0 -0
- {agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/setup.py +0 -0
{agent_framework_lib-0.8.8.post9/agent_framework_lib.egg-info → agent_framework_lib-0.8.9}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agent-framework-lib
|
|
3
|
-
Version: 0.8.
|
|
3
|
+
Version: 0.8.9
|
|
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>
|
|
@@ -63,7 +63,7 @@ Requires-Dist: llama-index-llms-openai>=0.7.9
|
|
|
63
63
|
Requires-Dist: llama-index-llms-anthropic>=0.11.5
|
|
64
64
|
Requires-Dist: llama-index-llms-google-genai>=0.1.0
|
|
65
65
|
Requires-Dist: graphiti-core>=0.24.3
|
|
66
|
-
Requires-Dist: tiktoken>=0.
|
|
66
|
+
Requires-Dist: tiktoken>=0.8.0
|
|
67
67
|
Requires-Dist: falkordb>=1.0.0
|
|
68
68
|
Requires-Dist: grpcio-status>=1.71.2
|
|
69
69
|
Requires-Dist: nodeenv>=1.8.0
|
|
@@ -84,6 +84,8 @@ Requires-Dist: llama-index-workflows>=2.16.0; extra == "llamaindex"
|
|
|
84
84
|
Requires-Dist: llama-index-llms-openai>=0.7.9; extra == "llamaindex"
|
|
85
85
|
Requires-Dist: llama-index-llms-google-genai>=0.1.0; extra == "llamaindex"
|
|
86
86
|
Requires-Dist: llama-index-llms-anthropic>=0.11.5; extra == "llamaindex"
|
|
87
|
+
Provides-Extra: langgraph
|
|
88
|
+
Requires-Dist: langgraph>=0.2.0; extra == "langgraph"
|
|
87
89
|
Provides-Extra: mcp
|
|
88
90
|
Requires-Dist: llama-index-tools-mcp>=0.4.0; extra == "mcp"
|
|
89
91
|
Provides-Extra: websearch
|
|
@@ -151,7 +153,7 @@ Requires-Dist: traceloop-sdk>=0.30.0; extra == "observability"
|
|
|
151
153
|
Provides-Extra: monitoring
|
|
152
154
|
Requires-Dist: psutil>=5.9.0; extra == "monitoring"
|
|
153
155
|
Provides-Extra: all
|
|
154
|
-
Requires-Dist: agent-framework-lib[dev,drawio,elasticsearch,excel,gcp,graphiti-all,llamaindex,mcp,memory,microsoft,minio,mongodb,monitoring,multimodal,observability,postgresql,s3,websearch]; extra == "all"
|
|
156
|
+
Requires-Dist: agent-framework-lib[dev,drawio,elasticsearch,excel,gcp,graphiti-all,langgraph,llamaindex,mcp,memory,microsoft,minio,mongodb,monitoring,multimodal,observability,postgresql,s3,websearch]; extra == "all"
|
|
155
157
|
Dynamic: license-file
|
|
156
158
|
|
|
157
159
|
# Agent Framework Library
|
{agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/core/model_clients.py
RENAMED
|
@@ -8,7 +8,7 @@ This module is framework-agnostic and uses native client libraries.
|
|
|
8
8
|
import json
|
|
9
9
|
import logging
|
|
10
10
|
import re
|
|
11
|
-
from typing import Any
|
|
11
|
+
from typing import Any, cast
|
|
12
12
|
|
|
13
13
|
from .agent_interface import AgentConfig
|
|
14
14
|
from .model_config import ModelConfigManager, ModelProvider, model_config
|
|
@@ -1095,3 +1095,572 @@ class ModelClientFactory:
|
|
|
1095
1095
|
|
|
1096
1096
|
# Global factory instance
|
|
1097
1097
|
client_factory = ModelClientFactory()
|
|
1098
|
+
|
|
1099
|
+
|
|
1100
|
+
# ===========================================================================
|
|
1101
|
+
# Provider-execution layer (additive)
|
|
1102
|
+
# ---------------------------------------------------------------------------
|
|
1103
|
+
# This is the reusable "execute a chat completion" capability that does NOT
|
|
1104
|
+
# exist elsewhere in the codebase today: ``ModelRouter`` only *selects* a model
|
|
1105
|
+
# and ``ModelClientFactory`` only *creates* a raw provider SDK client. These
|
|
1106
|
+
# additive module-level functions own ALL provider branching (dispatching on the
|
|
1107
|
+
# concrete client type to the correct SDK method) and normalize every provider's
|
|
1108
|
+
# native response shape onto a single vendor-neutral structure, so callers such
|
|
1109
|
+
# as ``workflow/core`` stay provider-neutral.
|
|
1110
|
+
#
|
|
1111
|
+
# Token usage is taken from the provider's reported counts whenever available
|
|
1112
|
+
# (OpenAI ``usage.prompt_tokens``/``completion_tokens``; Anthropic
|
|
1113
|
+
# ``usage.input_tokens``/``output_tokens``; Gemini ``usage_metadata``), plus
|
|
1114
|
+
# ``thinking_tokens`` where the provider reports them. ``LLMMetricsCollector``
|
|
1115
|
+
# estimation is used ONLY as a fallback when the provider reports no usage
|
|
1116
|
+
# (notably mid-stream or a stream that ends without a usage chunk) (Req 2.7, 2.12).
|
|
1117
|
+
# ===========================================================================
|
|
1118
|
+
|
|
1119
|
+
from collections.abc import AsyncIterator # noqa: E402
|
|
1120
|
+
from dataclasses import dataclass # noqa: E402
|
|
1121
|
+
|
|
1122
|
+
|
|
1123
|
+
# Default max_tokens for providers (Anthropic) that REQUIRE the parameter when
|
|
1124
|
+
# the caller and model_params supply none.
|
|
1125
|
+
_DEFAULT_MAX_TOKENS = 4096
|
|
1126
|
+
|
|
1127
|
+
|
|
1128
|
+
@dataclass
|
|
1129
|
+
class ChatExecutionResult:
|
|
1130
|
+
"""Normalized, provider-agnostic result of a non-streaming chat completion.
|
|
1131
|
+
|
|
1132
|
+
The orchestration layer (``workflow/core/chat_completion.py``) maps this onto
|
|
1133
|
+
the public ``ChatCompletionResult`` and builds ``LLMMetrics`` from it. Token
|
|
1134
|
+
counts are the EXACT provider-reported values for a completed non-streaming
|
|
1135
|
+
call; ``usage_estimated`` is ``True`` only when the provider reported no usage
|
|
1136
|
+
and the counts were estimated via ``LLMMetricsCollector`` (Req 2.12).
|
|
1137
|
+
"""
|
|
1138
|
+
|
|
1139
|
+
content: str
|
|
1140
|
+
model: str
|
|
1141
|
+
input_tokens: int
|
|
1142
|
+
output_tokens: int
|
|
1143
|
+
thinking_tokens: int
|
|
1144
|
+
finish_reason: str | None = None
|
|
1145
|
+
usage_estimated: bool = False
|
|
1146
|
+
|
|
1147
|
+
|
|
1148
|
+
@dataclass
|
|
1149
|
+
class ChatExecutionChunk:
|
|
1150
|
+
"""A single normalized incremental chunk yielded by a streaming completion.
|
|
1151
|
+
|
|
1152
|
+
``delta`` is the text fragment since the previous chunk. The final chunk sets
|
|
1153
|
+
``done=True`` and carries the best-effort token counts: provider-reported when
|
|
1154
|
+
the stream emitted a usage chunk, otherwise estimated via
|
|
1155
|
+
``LLMMetricsCollector`` (token counts mid-stream are best-effort, Req 2.7).
|
|
1156
|
+
"""
|
|
1157
|
+
|
|
1158
|
+
delta: str
|
|
1159
|
+
model: str
|
|
1160
|
+
done: bool = False
|
|
1161
|
+
finish_reason: str | None = None
|
|
1162
|
+
input_tokens: int | None = None
|
|
1163
|
+
output_tokens: int | None = None
|
|
1164
|
+
thinking_tokens: int | None = None
|
|
1165
|
+
usage_estimated: bool = False
|
|
1166
|
+
|
|
1167
|
+
|
|
1168
|
+
def _split_system_messages(
|
|
1169
|
+
messages: list[dict[str, Any]],
|
|
1170
|
+
) -> tuple[str | None, list[dict[str, Any]]]:
|
|
1171
|
+
"""Separate system-role messages from the rest.
|
|
1172
|
+
|
|
1173
|
+
Returns ``(system_text, non_system_messages)``. Multiple system messages are
|
|
1174
|
+
joined with newlines. Used by ``_execute_anthropic`` because Anthropic takes
|
|
1175
|
+
no system role inside ``messages`` and instead requires the top-level
|
|
1176
|
+
``system`` parameter (Req 2.11).
|
|
1177
|
+
"""
|
|
1178
|
+
system_parts: list[str] = []
|
|
1179
|
+
remaining: list[dict[str, Any]] = []
|
|
1180
|
+
for msg in messages:
|
|
1181
|
+
if msg.get("role") == "system":
|
|
1182
|
+
content = msg.get("content")
|
|
1183
|
+
if content:
|
|
1184
|
+
system_parts.append(content if isinstance(content, str) else str(content))
|
|
1185
|
+
else:
|
|
1186
|
+
remaining.append(msg)
|
|
1187
|
+
system_text = "\n".join(system_parts) if system_parts else None
|
|
1188
|
+
return system_text, remaining
|
|
1189
|
+
|
|
1190
|
+
|
|
1191
|
+
def _join_message_text(messages: list[dict[str, Any]]) -> str:
|
|
1192
|
+
"""Concatenate message contents into a single string for token estimation."""
|
|
1193
|
+
parts: list[str] = []
|
|
1194
|
+
for msg in messages:
|
|
1195
|
+
content = msg.get("content")
|
|
1196
|
+
if isinstance(content, str):
|
|
1197
|
+
parts.append(content)
|
|
1198
|
+
elif content is not None:
|
|
1199
|
+
parts.append(str(content))
|
|
1200
|
+
return "\n".join(parts)
|
|
1201
|
+
|
|
1202
|
+
|
|
1203
|
+
def _estimate_token_counts(model: str | None, input_text: str, output_text: str) -> tuple[int, int]:
|
|
1204
|
+
"""Estimate (input_tokens, output_tokens) via ``LLMMetricsCollector``.
|
|
1205
|
+
|
|
1206
|
+
This is the fallback used ONLY when a provider reports no usage. Imported
|
|
1207
|
+
lazily to avoid a hard import-time dependency on the monitoring package.
|
|
1208
|
+
"""
|
|
1209
|
+
try:
|
|
1210
|
+
from agent_framework.monitoring.llm_metrics_collector import LLMMetricsCollector
|
|
1211
|
+
|
|
1212
|
+
collector = LLMMetricsCollector(model_name=model, enabled=True)
|
|
1213
|
+
input_tokens = collector.count_input(input_text)
|
|
1214
|
+
output_tokens = collector.count_output(output_text)
|
|
1215
|
+
return input_tokens, output_tokens
|
|
1216
|
+
except Exception as e: # pragma: no cover - defensive: estimation must not crash a call
|
|
1217
|
+
logger.warning(f"[execute_chat_completion] Token estimation fallback failed: {e}")
|
|
1218
|
+
return 0, 0
|
|
1219
|
+
|
|
1220
|
+
|
|
1221
|
+
def _resolve_call_params(
|
|
1222
|
+
model_params: dict[str, Any],
|
|
1223
|
+
max_tokens: int | None,
|
|
1224
|
+
temperature: float | None,
|
|
1225
|
+
) -> tuple[str, float, int | None]:
|
|
1226
|
+
"""Resolve effective (model, temperature, max_tokens).
|
|
1227
|
+
|
|
1228
|
+
Explicit call arguments take precedence over the client's ``model_params``.
|
|
1229
|
+
"""
|
|
1230
|
+
model = model_params.get("model")
|
|
1231
|
+
effective_temperature = (
|
|
1232
|
+
temperature if temperature is not None else model_params.get("temperature", 0.7)
|
|
1233
|
+
)
|
|
1234
|
+
effective_max_tokens = max_tokens if max_tokens is not None else model_params.get("max_tokens")
|
|
1235
|
+
return cast(str, model), effective_temperature, effective_max_tokens
|
|
1236
|
+
|
|
1237
|
+
|
|
1238
|
+
async def execute_chat_completion(
|
|
1239
|
+
client: Any,
|
|
1240
|
+
model_params: dict[str, Any],
|
|
1241
|
+
messages: list[dict[str, Any]],
|
|
1242
|
+
*,
|
|
1243
|
+
stream: bool = False,
|
|
1244
|
+
max_tokens: int | None = None,
|
|
1245
|
+
temperature: float | None = None,
|
|
1246
|
+
) -> "ChatExecutionResult | AsyncIterator[ChatExecutionChunk]":
|
|
1247
|
+
"""Execute a chat completion against a raw provider client and normalize it.
|
|
1248
|
+
|
|
1249
|
+
Dispatches on the concrete client type (``AsyncOpenAI`` →
|
|
1250
|
+
``client.chat.completions.create``; ``AsyncAnthropic`` →
|
|
1251
|
+
``client.messages.create``; Gemini ``GenerativeModel`` →
|
|
1252
|
+
``generate_content_async``) and returns a provider-agnostic result. All
|
|
1253
|
+
provider branching lives in this layer so ``workflow/core`` stays neutral.
|
|
1254
|
+
|
|
1255
|
+
Args:
|
|
1256
|
+
client: A raw provider SDK client created by ``ModelClientFactory``.
|
|
1257
|
+
model_params: The ``client._model_params`` dict (model name, temperature,
|
|
1258
|
+
and any provider-specific extras attached by the factory).
|
|
1259
|
+
messages: OpenAI-style ``[{"role", "content"}]`` list. The system-role
|
|
1260
|
+
message is ALWAYS preserved and placed in each provider's expected
|
|
1261
|
+
slot by its helper (Req 2.11).
|
|
1262
|
+
stream: When ``True``, returns an async iterator of ``ChatExecutionChunk``.
|
|
1263
|
+
max_tokens: Optional max output tokens (overrides ``model_params``).
|
|
1264
|
+
temperature: Optional sampling temperature (overrides ``model_params``).
|
|
1265
|
+
|
|
1266
|
+
Returns:
|
|
1267
|
+
A ``ChatExecutionResult`` for non-streaming calls, or an
|
|
1268
|
+
``AsyncIterator[ChatExecutionChunk]`` when ``stream=True``.
|
|
1269
|
+
|
|
1270
|
+
Raises:
|
|
1271
|
+
TypeError: If the client type is not a recognized provider client.
|
|
1272
|
+
"""
|
|
1273
|
+
# Dispatch on the concrete client type. Availability flags guard the isinstance
|
|
1274
|
+
# checks so a missing optional SDK never raises at dispatch time.
|
|
1275
|
+
if OPENAI_AVAILABLE and isinstance(client, AsyncOpenAI):
|
|
1276
|
+
return await _execute_openai(
|
|
1277
|
+
client,
|
|
1278
|
+
model_params,
|
|
1279
|
+
messages,
|
|
1280
|
+
stream=stream,
|
|
1281
|
+
max_tokens=max_tokens,
|
|
1282
|
+
temperature=temperature,
|
|
1283
|
+
)
|
|
1284
|
+
if ANTHROPIC_AVAILABLE and isinstance(client, AsyncAnthropic):
|
|
1285
|
+
return await _execute_anthropic(
|
|
1286
|
+
client,
|
|
1287
|
+
model_params,
|
|
1288
|
+
messages,
|
|
1289
|
+
stream=stream,
|
|
1290
|
+
max_tokens=max_tokens,
|
|
1291
|
+
temperature=temperature,
|
|
1292
|
+
)
|
|
1293
|
+
if GEMINI_AVAILABLE and isinstance(client, genai.GenerativeModel):
|
|
1294
|
+
return await _execute_gemini(
|
|
1295
|
+
client,
|
|
1296
|
+
model_params,
|
|
1297
|
+
messages,
|
|
1298
|
+
stream=stream,
|
|
1299
|
+
max_tokens=max_tokens,
|
|
1300
|
+
temperature=temperature,
|
|
1301
|
+
)
|
|
1302
|
+
# Fallback: dispatch by duck-typing on the SDK surface when isinstance fails
|
|
1303
|
+
# (e.g., a subclass or a test double). This keeps dispatch robust without
|
|
1304
|
+
# leaking provider types out of this layer.
|
|
1305
|
+
if hasattr(client, "chat") and hasattr(client.chat, "completions"):
|
|
1306
|
+
return await _execute_openai(
|
|
1307
|
+
client,
|
|
1308
|
+
model_params,
|
|
1309
|
+
messages,
|
|
1310
|
+
stream=stream,
|
|
1311
|
+
max_tokens=max_tokens,
|
|
1312
|
+
temperature=temperature,
|
|
1313
|
+
)
|
|
1314
|
+
if hasattr(client, "messages") and hasattr(client.messages, "create"):
|
|
1315
|
+
return await _execute_anthropic(
|
|
1316
|
+
client,
|
|
1317
|
+
model_params,
|
|
1318
|
+
messages,
|
|
1319
|
+
stream=stream,
|
|
1320
|
+
max_tokens=max_tokens,
|
|
1321
|
+
temperature=temperature,
|
|
1322
|
+
)
|
|
1323
|
+
if hasattr(client, "generate_content_async"):
|
|
1324
|
+
return await _execute_gemini(
|
|
1325
|
+
client,
|
|
1326
|
+
model_params,
|
|
1327
|
+
messages,
|
|
1328
|
+
stream=stream,
|
|
1329
|
+
max_tokens=max_tokens,
|
|
1330
|
+
temperature=temperature,
|
|
1331
|
+
)
|
|
1332
|
+
raise TypeError(
|
|
1333
|
+
f"execute_chat_completion: unrecognized client type {type(client).__name__!r}; "
|
|
1334
|
+
"expected an AsyncOpenAI, AsyncAnthropic, or Gemini GenerativeModel client"
|
|
1335
|
+
)
|
|
1336
|
+
|
|
1337
|
+
|
|
1338
|
+
async def _execute_openai(
|
|
1339
|
+
client: Any,
|
|
1340
|
+
model_params: dict[str, Any],
|
|
1341
|
+
messages: list[dict[str, Any]],
|
|
1342
|
+
*,
|
|
1343
|
+
stream: bool = False,
|
|
1344
|
+
max_tokens: int | None = None,
|
|
1345
|
+
temperature: float | None = None,
|
|
1346
|
+
) -> "ChatExecutionResult | AsyncIterator[ChatExecutionChunk]":
|
|
1347
|
+
"""Execute via ``client.chat.completions.create``.
|
|
1348
|
+
|
|
1349
|
+
OpenAI accepts the system role INSIDE the messages list, so the messages are
|
|
1350
|
+
passed through unchanged (Req 2.11). Token usage is read from
|
|
1351
|
+
``usage.prompt_tokens``/``usage.completion_tokens`` with reasoning tokens (if
|
|
1352
|
+
reported) mapped to ``thinking_tokens``.
|
|
1353
|
+
"""
|
|
1354
|
+
model, effective_temperature, effective_max_tokens = _resolve_call_params(
|
|
1355
|
+
model_params, max_tokens, temperature
|
|
1356
|
+
)
|
|
1357
|
+
|
|
1358
|
+
create_kwargs: dict[str, Any] = {
|
|
1359
|
+
"model": model,
|
|
1360
|
+
"messages": messages,
|
|
1361
|
+
"temperature": effective_temperature,
|
|
1362
|
+
}
|
|
1363
|
+
if effective_max_tokens is not None:
|
|
1364
|
+
create_kwargs["max_tokens"] = effective_max_tokens
|
|
1365
|
+
|
|
1366
|
+
if stream:
|
|
1367
|
+
# Ask OpenAI to include the usage chunk at the end of the stream so token
|
|
1368
|
+
# counts are provider-reported rather than estimated when possible.
|
|
1369
|
+
create_kwargs["stream"] = True
|
|
1370
|
+
create_kwargs["stream_options"] = {"include_usage": True}
|
|
1371
|
+
|
|
1372
|
+
async def _openai_stream() -> AsyncIterator[ChatExecutionChunk]:
|
|
1373
|
+
response = await client.chat.completions.create(**create_kwargs)
|
|
1374
|
+
collected: list[str] = []
|
|
1375
|
+
finish_reason: str | None = None
|
|
1376
|
+
usage = None
|
|
1377
|
+
async for chunk in response:
|
|
1378
|
+
if getattr(chunk, "usage", None):
|
|
1379
|
+
usage = chunk.usage
|
|
1380
|
+
choices = getattr(chunk, "choices", None)
|
|
1381
|
+
if choices:
|
|
1382
|
+
choice = choices[0]
|
|
1383
|
+
delta_obj = getattr(choice, "delta", None)
|
|
1384
|
+
delta_text = getattr(delta_obj, "content", None) if delta_obj else None
|
|
1385
|
+
if getattr(choice, "finish_reason", None):
|
|
1386
|
+
finish_reason = choice.finish_reason
|
|
1387
|
+
if delta_text:
|
|
1388
|
+
collected.append(delta_text)
|
|
1389
|
+
yield ChatExecutionChunk(delta=delta_text, model=model)
|
|
1390
|
+
full_text = "".join(collected)
|
|
1391
|
+
input_tokens, output_tokens, thinking_tokens, estimated = _normalize_openai_usage(
|
|
1392
|
+
usage, model, messages, full_text
|
|
1393
|
+
)
|
|
1394
|
+
yield ChatExecutionChunk(
|
|
1395
|
+
delta="",
|
|
1396
|
+
model=model,
|
|
1397
|
+
done=True,
|
|
1398
|
+
finish_reason=finish_reason,
|
|
1399
|
+
input_tokens=input_tokens,
|
|
1400
|
+
output_tokens=output_tokens,
|
|
1401
|
+
thinking_tokens=thinking_tokens,
|
|
1402
|
+
usage_estimated=estimated,
|
|
1403
|
+
)
|
|
1404
|
+
|
|
1405
|
+
return _openai_stream()
|
|
1406
|
+
|
|
1407
|
+
response = await client.chat.completions.create(**create_kwargs)
|
|
1408
|
+
choice = response.choices[0]
|
|
1409
|
+
content = getattr(choice.message, "content", None) or ""
|
|
1410
|
+
finish_reason = getattr(choice, "finish_reason", None)
|
|
1411
|
+
input_tokens, output_tokens, thinking_tokens, estimated = _normalize_openai_usage(
|
|
1412
|
+
getattr(response, "usage", None), model, messages, content
|
|
1413
|
+
)
|
|
1414
|
+
return ChatExecutionResult(
|
|
1415
|
+
content=content,
|
|
1416
|
+
model=model,
|
|
1417
|
+
input_tokens=input_tokens,
|
|
1418
|
+
output_tokens=output_tokens,
|
|
1419
|
+
thinking_tokens=thinking_tokens,
|
|
1420
|
+
finish_reason=finish_reason,
|
|
1421
|
+
usage_estimated=estimated,
|
|
1422
|
+
)
|
|
1423
|
+
|
|
1424
|
+
|
|
1425
|
+
def _normalize_openai_usage(
|
|
1426
|
+
usage: Any, model: str | None, messages: list[dict[str, Any]], output_text: str
|
|
1427
|
+
) -> tuple[int, int, int, bool]:
|
|
1428
|
+
"""Normalize OpenAI usage to (input, output, thinking, estimated)."""
|
|
1429
|
+
if usage is not None:
|
|
1430
|
+
input_tokens = getattr(usage, "prompt_tokens", 0) or 0
|
|
1431
|
+
output_tokens = getattr(usage, "completion_tokens", 0) or 0
|
|
1432
|
+
thinking_tokens = 0
|
|
1433
|
+
details = getattr(usage, "completion_tokens_details", None)
|
|
1434
|
+
if details is not None:
|
|
1435
|
+
thinking_tokens = getattr(details, "reasoning_tokens", 0) or 0
|
|
1436
|
+
return input_tokens, output_tokens, thinking_tokens, False
|
|
1437
|
+
# Fallback: provider reported no usage -> estimate (Req 2.12).
|
|
1438
|
+
input_tokens, output_tokens = _estimate_token_counts(
|
|
1439
|
+
model, _join_message_text(messages), output_text
|
|
1440
|
+
)
|
|
1441
|
+
return input_tokens, output_tokens, 0, True
|
|
1442
|
+
|
|
1443
|
+
|
|
1444
|
+
async def _execute_anthropic(
|
|
1445
|
+
client: Any,
|
|
1446
|
+
model_params: dict[str, Any],
|
|
1447
|
+
messages: list[dict[str, Any]],
|
|
1448
|
+
*,
|
|
1449
|
+
stream: bool = False,
|
|
1450
|
+
max_tokens: int | None = None,
|
|
1451
|
+
temperature: float | None = None,
|
|
1452
|
+
) -> "ChatExecutionResult | AsyncIterator[ChatExecutionChunk]":
|
|
1453
|
+
"""Execute via ``client.messages.create``.
|
|
1454
|
+
|
|
1455
|
+
Anthropic takes NO system role inside ``messages`` and instead requires the
|
|
1456
|
+
top-level ``system`` parameter, so the system-role message is lifted out of
|
|
1457
|
+
the messages list into ``system`` (Req 2.11). Token usage is read from
|
|
1458
|
+
``usage.input_tokens``/``usage.output_tokens``.
|
|
1459
|
+
"""
|
|
1460
|
+
model, effective_temperature, effective_max_tokens = _resolve_call_params(
|
|
1461
|
+
model_params, max_tokens, temperature
|
|
1462
|
+
)
|
|
1463
|
+
# Anthropic REQUIRES max_tokens; fall back to a default when none was provided.
|
|
1464
|
+
if effective_max_tokens is None:
|
|
1465
|
+
effective_max_tokens = model_params.get("max_tokens", _DEFAULT_MAX_TOKENS)
|
|
1466
|
+
|
|
1467
|
+
system_text, non_system_messages = _split_system_messages(messages)
|
|
1468
|
+
|
|
1469
|
+
create_kwargs: dict[str, Any] = {
|
|
1470
|
+
"model": model,
|
|
1471
|
+
"messages": non_system_messages,
|
|
1472
|
+
"max_tokens": effective_max_tokens,
|
|
1473
|
+
"temperature": effective_temperature,
|
|
1474
|
+
}
|
|
1475
|
+
if system_text is not None:
|
|
1476
|
+
create_kwargs["system"] = system_text
|
|
1477
|
+
|
|
1478
|
+
if stream:
|
|
1479
|
+
|
|
1480
|
+
async def _anthropic_stream() -> AsyncIterator[ChatExecutionChunk]:
|
|
1481
|
+
collected: list[str] = []
|
|
1482
|
+
usage = None
|
|
1483
|
+
finish_reason: str | None = None
|
|
1484
|
+
# The streaming helper yields text deltas and exposes the final message.
|
|
1485
|
+
async with client.messages.stream(**create_kwargs) as stream_mgr:
|
|
1486
|
+
async for text in stream_mgr.text_stream:
|
|
1487
|
+
if text:
|
|
1488
|
+
collected.append(text)
|
|
1489
|
+
yield ChatExecutionChunk(delta=text, model=model)
|
|
1490
|
+
final_message = await stream_mgr.get_final_message()
|
|
1491
|
+
usage = getattr(final_message, "usage", None)
|
|
1492
|
+
finish_reason = getattr(final_message, "stop_reason", None)
|
|
1493
|
+
full_text = "".join(collected)
|
|
1494
|
+
input_tokens, output_tokens, thinking_tokens, estimated = _normalize_anthropic_usage(
|
|
1495
|
+
usage, model, messages, full_text
|
|
1496
|
+
)
|
|
1497
|
+
yield ChatExecutionChunk(
|
|
1498
|
+
delta="",
|
|
1499
|
+
model=model,
|
|
1500
|
+
done=True,
|
|
1501
|
+
finish_reason=finish_reason,
|
|
1502
|
+
input_tokens=input_tokens,
|
|
1503
|
+
output_tokens=output_tokens,
|
|
1504
|
+
thinking_tokens=thinking_tokens,
|
|
1505
|
+
usage_estimated=estimated,
|
|
1506
|
+
)
|
|
1507
|
+
|
|
1508
|
+
return _anthropic_stream()
|
|
1509
|
+
|
|
1510
|
+
response = await client.messages.create(**create_kwargs)
|
|
1511
|
+
content = _extract_anthropic_text(response)
|
|
1512
|
+
finish_reason = getattr(response, "stop_reason", None)
|
|
1513
|
+
input_tokens, output_tokens, thinking_tokens, estimated = _normalize_anthropic_usage(
|
|
1514
|
+
getattr(response, "usage", None), model, messages, content
|
|
1515
|
+
)
|
|
1516
|
+
return ChatExecutionResult(
|
|
1517
|
+
content=content,
|
|
1518
|
+
model=model,
|
|
1519
|
+
input_tokens=input_tokens,
|
|
1520
|
+
output_tokens=output_tokens,
|
|
1521
|
+
thinking_tokens=thinking_tokens,
|
|
1522
|
+
finish_reason=finish_reason,
|
|
1523
|
+
usage_estimated=estimated,
|
|
1524
|
+
)
|
|
1525
|
+
|
|
1526
|
+
|
|
1527
|
+
def _extract_anthropic_text(response: Any) -> str:
|
|
1528
|
+
"""Concatenate text from Anthropic content blocks."""
|
|
1529
|
+
blocks = getattr(response, "content", None)
|
|
1530
|
+
if not blocks:
|
|
1531
|
+
return ""
|
|
1532
|
+
parts: list[str] = []
|
|
1533
|
+
for block in blocks:
|
|
1534
|
+
text = getattr(block, "text", None)
|
|
1535
|
+
if text:
|
|
1536
|
+
parts.append(text)
|
|
1537
|
+
return "".join(parts)
|
|
1538
|
+
|
|
1539
|
+
|
|
1540
|
+
def _normalize_anthropic_usage(
|
|
1541
|
+
usage: Any, model: str | None, messages: list[dict[str, Any]], output_text: str
|
|
1542
|
+
) -> tuple[int, int, int, bool]:
|
|
1543
|
+
"""Normalize Anthropic usage to (input, output, thinking, estimated)."""
|
|
1544
|
+
if usage is not None:
|
|
1545
|
+
input_tokens = getattr(usage, "input_tokens", 0) or 0
|
|
1546
|
+
output_tokens = getattr(usage, "output_tokens", 0) or 0
|
|
1547
|
+
# Anthropic does not separately report thinking tokens in usage today.
|
|
1548
|
+
thinking_tokens = 0
|
|
1549
|
+
return input_tokens, output_tokens, thinking_tokens, False
|
|
1550
|
+
input_tokens, output_tokens = _estimate_token_counts(
|
|
1551
|
+
model, _join_message_text(messages), output_text
|
|
1552
|
+
)
|
|
1553
|
+
return input_tokens, output_tokens, 0, True
|
|
1554
|
+
|
|
1555
|
+
|
|
1556
|
+
def _messages_to_gemini_contents(messages: list[dict[str, Any]]) -> str:
|
|
1557
|
+
"""Flatten messages into a single prompt for the Gemini SDK.
|
|
1558
|
+
|
|
1559
|
+
Gemini sets a system instruction at model construction time; the model passed
|
|
1560
|
+
here is already constructed, so the system-role message is kept INSIDE the
|
|
1561
|
+
prompt content (it is NOT dropped) (Req 2.11). Roles are prefixed so the model
|
|
1562
|
+
retains the system/user distinction.
|
|
1563
|
+
"""
|
|
1564
|
+
parts: list[str] = []
|
|
1565
|
+
for msg in messages:
|
|
1566
|
+
role = msg.get("role", "user")
|
|
1567
|
+
content = msg.get("content")
|
|
1568
|
+
if content is None:
|
|
1569
|
+
continue
|
|
1570
|
+
text = content if isinstance(content, str) else str(content)
|
|
1571
|
+
if role == "system":
|
|
1572
|
+
parts.append(f"System: {text}")
|
|
1573
|
+
elif role == "assistant":
|
|
1574
|
+
parts.append(f"Assistant: {text}")
|
|
1575
|
+
else:
|
|
1576
|
+
parts.append(text)
|
|
1577
|
+
return "\n\n".join(parts)
|
|
1578
|
+
|
|
1579
|
+
|
|
1580
|
+
async def _execute_gemini(
|
|
1581
|
+
client: Any,
|
|
1582
|
+
model_params: dict[str, Any],
|
|
1583
|
+
messages: list[dict[str, Any]],
|
|
1584
|
+
*,
|
|
1585
|
+
stream: bool = False,
|
|
1586
|
+
max_tokens: int | None = None,
|
|
1587
|
+
temperature: float | None = None,
|
|
1588
|
+
) -> "ChatExecutionResult | AsyncIterator[ChatExecutionChunk]":
|
|
1589
|
+
"""Execute via Gemini ``GenerativeModel.generate_content_async``.
|
|
1590
|
+
|
|
1591
|
+
Gemini keeps the system role inside the prompt / system instruction (Req 2.11).
|
|
1592
|
+
Token usage is read from ``usage_metadata`` (``prompt_token_count`` /
|
|
1593
|
+
``candidates_token_count`` / ``thoughts_token_count``).
|
|
1594
|
+
"""
|
|
1595
|
+
model, effective_temperature, effective_max_tokens = _resolve_call_params(
|
|
1596
|
+
model_params, max_tokens, temperature
|
|
1597
|
+
)
|
|
1598
|
+
contents = _messages_to_gemini_contents(messages)
|
|
1599
|
+
|
|
1600
|
+
generation_config: dict[str, Any] = {"temperature": effective_temperature}
|
|
1601
|
+
if effective_max_tokens is not None:
|
|
1602
|
+
generation_config["max_output_tokens"] = effective_max_tokens
|
|
1603
|
+
|
|
1604
|
+
if stream:
|
|
1605
|
+
|
|
1606
|
+
async def _gemini_stream() -> AsyncIterator[ChatExecutionChunk]:
|
|
1607
|
+
collected: list[str] = []
|
|
1608
|
+
usage_metadata = None
|
|
1609
|
+
finish_reason: str | None = None
|
|
1610
|
+
response = await client.generate_content_async(
|
|
1611
|
+
contents, generation_config=generation_config, stream=True
|
|
1612
|
+
)
|
|
1613
|
+
async for chunk in response:
|
|
1614
|
+
text = getattr(chunk, "text", None)
|
|
1615
|
+
if getattr(chunk, "usage_metadata", None):
|
|
1616
|
+
usage_metadata = chunk.usage_metadata
|
|
1617
|
+
if text:
|
|
1618
|
+
collected.append(text)
|
|
1619
|
+
yield ChatExecutionChunk(delta=text, model=model)
|
|
1620
|
+
full_text = "".join(collected)
|
|
1621
|
+
input_tokens, output_tokens, thinking_tokens, estimated = _normalize_gemini_usage(
|
|
1622
|
+
usage_metadata, model, messages, full_text
|
|
1623
|
+
)
|
|
1624
|
+
yield ChatExecutionChunk(
|
|
1625
|
+
delta="",
|
|
1626
|
+
model=model,
|
|
1627
|
+
done=True,
|
|
1628
|
+
finish_reason=finish_reason,
|
|
1629
|
+
input_tokens=input_tokens,
|
|
1630
|
+
output_tokens=output_tokens,
|
|
1631
|
+
thinking_tokens=thinking_tokens,
|
|
1632
|
+
usage_estimated=estimated,
|
|
1633
|
+
)
|
|
1634
|
+
|
|
1635
|
+
return _gemini_stream()
|
|
1636
|
+
|
|
1637
|
+
response = await client.generate_content_async(contents, generation_config=generation_config)
|
|
1638
|
+
content = getattr(response, "text", None) or ""
|
|
1639
|
+
finish_reason = None
|
|
1640
|
+
input_tokens, output_tokens, thinking_tokens, estimated = _normalize_gemini_usage(
|
|
1641
|
+
getattr(response, "usage_metadata", None), model, messages, content
|
|
1642
|
+
)
|
|
1643
|
+
return ChatExecutionResult(
|
|
1644
|
+
content=content,
|
|
1645
|
+
model=model,
|
|
1646
|
+
input_tokens=input_tokens,
|
|
1647
|
+
output_tokens=output_tokens,
|
|
1648
|
+
thinking_tokens=thinking_tokens,
|
|
1649
|
+
finish_reason=finish_reason,
|
|
1650
|
+
usage_estimated=estimated,
|
|
1651
|
+
)
|
|
1652
|
+
|
|
1653
|
+
|
|
1654
|
+
def _normalize_gemini_usage(
|
|
1655
|
+
usage_metadata: Any, model: str | None, messages: list[dict[str, Any]], output_text: str
|
|
1656
|
+
) -> tuple[int, int, int, bool]:
|
|
1657
|
+
"""Normalize Gemini ``usage_metadata`` to (input, output, thinking, estimated)."""
|
|
1658
|
+
if usage_metadata is not None:
|
|
1659
|
+
input_tokens = getattr(usage_metadata, "prompt_token_count", 0) or 0
|
|
1660
|
+
output_tokens = getattr(usage_metadata, "candidates_token_count", 0) or 0
|
|
1661
|
+
thinking_tokens = getattr(usage_metadata, "thoughts_token_count", 0) or 0
|
|
1662
|
+
return input_tokens, output_tokens, thinking_tokens, False
|
|
1663
|
+
input_tokens, output_tokens = _estimate_token_counts(
|
|
1664
|
+
model, _join_message_text(messages), output_text
|
|
1665
|
+
)
|
|
1666
|
+
return input_tokens, output_tokens, 0, True
|
{agent_framework_lib-0.8.8.post9 → agent_framework_lib-0.8.9}/agent_framework/monitoring/__init__.py
RENAMED
|
@@ -42,6 +42,7 @@ from agent_framework.monitoring.metrics_aggregator import (
|
|
|
42
42
|
MetricsAggregator,
|
|
43
43
|
UnifiedMetricsDocument,
|
|
44
44
|
ensure_unified_index_template,
|
|
45
|
+
write_unified_metrics_document,
|
|
45
46
|
)
|
|
46
47
|
from agent_framework.monitoring.metrics_config import (
|
|
47
48
|
MetricsConfig,
|
|
@@ -161,6 +162,7 @@ __all__ = [
|
|
|
161
162
|
"MetricsAggregator",
|
|
162
163
|
"UnifiedMetricsDocument",
|
|
163
164
|
"ensure_unified_index_template",
|
|
165
|
+
"write_unified_metrics_document",
|
|
164
166
|
# LLM Metrics Extraction
|
|
165
167
|
"LLMMetricsExtractor",
|
|
166
168
|
"TraceMetricsAccumulator",
|