agent-framework-lib 0.8.7.post6__tar.gz → 0.8.7.post7__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.7.post6/agent_framework_lib.egg-info → agent_framework_lib-0.8.7.post7}/PKG-INFO +1 -1
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/image_gen/SKILL.md +60 -27
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/image_gen/create_image.py +92 -19
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/unified_pdf/SKILL.md +3 -3
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/unified_pdf/create_pdf.py +151 -13
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7/agent_framework_lib.egg-info}/PKG-INFO +1 -1
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/pyproject.toml +1 -1
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/ARCHITECTURE.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/LICENSE +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/MANIFEST.in +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/README.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/__init__.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/a2a/__init__.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/a2a/base.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/a2a/endpoints/__init__.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/a2a/endpoints/a2a_router.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/a2a/endpoints/agent_card_builder.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/a2a/endpoints/agent_card_skill_builder.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/a2a/endpoints/jsonrpc_dispatcher.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/a2a/endpoints/models_jsonrpc.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/a2a/endpoints/sse_wrapper.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/a2a/endpoints/translation_layer.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/a2a/models.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/a2a/providers/__init__.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/a2a/providers/elasticsearch_provider.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/a2a/providers/postgres_provider.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/capabilities/__init__.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/capabilities/resolver.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/code_delivery/__init__.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/code_delivery/audit.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/code_delivery/config.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/code_delivery/crypto.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/code_delivery/git_provider.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/code_delivery/herdr_client.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/code_delivery/models.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/code_delivery/orchestrator.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/code_delivery/store.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/code_delivery/tools.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/core/__init__.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/core/activity_formatter.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/core/agent_interface.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/core/agent_provider.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/core/base_agent.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/core/context_budget.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/core/context_summarizer.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/core/elasticsearch_config_provider.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/core/execution_controller.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/core/implementation_validator.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/core/interruption_message.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/core/knowledge_state.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/core/loop_detector.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/core/model_clients.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/core/model_config.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/core/model_router.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/core/models.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/core/prompt_builder.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/core/provider_calibration.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/core/scratchpad_compressor.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/core/scratchpad_serializer.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/core/state_manager.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/core/step_display_config.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/core/streaming_parts_accumulator.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/implementations/__init__.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/implementations/budget_aware_agent.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/implementations/llamaindex_agent.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/implementations/llamaindex_memory_adapter.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/implementations/microsoft_agent.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/memory/__init__.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/memory/agent_mixin.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/memory/base.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/memory/config.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/memory/hypothesis_engine.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/memory/implicit_feedback.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/memory/manager.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/memory/personalization.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/memory/providers/__init__.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/memory/providers/graphiti_provider.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/memory/providers/memori_provider.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/memory/response_lessons.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/memory/tools.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/memory/work_patterns.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/monitoring/__init__.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/monitoring/api_timing_tracker.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/monitoring/elasticsearch_circuit_breaker.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/monitoring/elasticsearch_logging.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/monitoring/error_handling.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/monitoring/error_logging.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/monitoring/llm_auto_instrumentor.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/monitoring/llm_metrics.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/monitoring/llm_metrics_collector.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/monitoring/llm_metrics_extractor.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/monitoring/metrics_aggregator.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/monitoring/metrics_config.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/monitoring/observability_manager.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/monitoring/otel_instrumentor.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/monitoring/otel_logging_handler.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/monitoring/otel_metrics_recorder.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/monitoring/otel_setup.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/monitoring/performance_monitor.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/monitoring/progress_tracker.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/monitoring/resource_manager.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/monitoring/resource_metrics_collector.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/monitoring/streaming_latency_tracer.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/monitoring/timing_tracker.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/monitoring/token_counter.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/monitoring/tracing_context.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/notifications/__init__.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/notifications/hub.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/notifications/webhook_notifier.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/processing/__init__.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/processing/ai_content_management.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/processing/markdown_converter.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/processing/multimodal_integration.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/processing/rich_content_validation.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/py.typed +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/security/__init__.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/security/secret_redactor.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/security/shell_env.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/session/__init__.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/session/elasticsearch_session_storage.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/session/session_storage.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/__init__.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/agent_mixin.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/base.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/__init__.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/scripts/__init__.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/scripts/create_and_register.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/scripts/register_to_storage.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/chart/SKILL.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/chart/chart_to_image.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/chart/vendor_chart.umd.min.js +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/code_delivery/SKILL.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/code_format/SKILL.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/code_format/format_python.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/csv/SKILL.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/csv/create_csv.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/csv/read_csv.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/csv/transform_csv.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/data_format/SKILL.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/data_format/json_to_yaml.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/data_format/yaml_to_json.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/drawio/SKILL.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/drawio/create_drawio.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/email_template/SKILL.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/excel/SKILL.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/excel/create_excel.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/file/SKILL.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/file/create_file.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/file/list_files.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/file/read_file.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/file_access/SKILL.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/file_access/download_to_local.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/file_access/get_file_path.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/form/SKILL.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/image_display/SKILL.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/image_gen/generate_image.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/mermaid/SKILL.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/mermaid/mermaid_to_image.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/multimodal/SKILL.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/optionsblock/SKILL.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/powerpoint/SKILL.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/powerpoint/create_powerpoint.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/powerpoint/templates/Big Data Infographics.pptx +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/powerpoint/templates/Executive Design Pitch Deck.pptx +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/powerpoint/templates/Management Consulting Toolkit.pptx +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/powerpoint/templates/__init__.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/powerpoint/templates/generate_templates.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/skill_creator/SKILL.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/skill_creator/skill_api.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/table/SKILL.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/table/table_to_image.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/web_news_search/SKILL.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/web_news_search/web_news_search.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/word/SKILL.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/word/create_word.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/custom_skill_manager.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/discovery_prompt.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/markdown_loader.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/tools.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/storage/__init__.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/storage/file_storages.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/storage/file_system_management.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/storage/storage_optimizer.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/subagents/__init__.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/subagents/executor.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/subagents/message_injector.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/subagents/message_queue.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/subagents/retrigger.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/subagents/spawn_tool.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/tools/__init__.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/tools/activity_callback.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/tools/adaptive_pdf_css.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/tools/base.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/tools/html_content_analyzer.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/tools/multimodal_tools.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/tools/pdf_image_scaler.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/tools/shell_tool.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/tools/sizing_config.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/tools/web_fetch_tool.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/tools/web_search_tool.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/utils/__init__.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/utils/path_utils.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/utils/post_install.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/utils/session_title_generator.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/utils/source_detector.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/utils/special_blocks.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/__init__.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/admin_auth.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/admin_models.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/admin_router.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/admin_services.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/api_timing_middleware.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/A2A_GUIDE.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/BUILTIN_SKILLS_REFERENCE.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/CREATING_AGENTS.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/CUSTOM_SKILLS_GUIDE.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/DOCKER_SETUP.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/Dockerfile +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/GETTING_STARTED.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/GITNEXUS_USER_GUIDE.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/MEMORY_INSTALLATION.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/README.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/TOOLS_AND_MCP_GUIDE.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/WORKSPACE_INTEGRATION.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/api-reference.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/configuration.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/docker-compose.yml +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/examples/agent_example_multi_skills.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/examples/agent_with_file_storage.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/examples/agent_with_mcp.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/examples/agent_with_memory.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/examples/agent_with_memory_graphiti.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/examples/agent_with_memory_hybrid.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/examples/agent_with_memory_simple.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/examples/custom_framework_agent.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/examples/simple_agent.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/examples/skills_demo_agent.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/installation-guide.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/documentation_generator.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/gitnexus_client.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/helper_agent.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/helper_ui.html +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/modern_ui.html +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/observability/kibana-llm-dashboard-setup.json +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/observability/kibana-resource-metrics-dashboard.json +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/otel_tracing_middleware.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/server.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/skills_router.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/test_app.html +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/workspace/__init__.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/workspace/artefacts.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/workspace/client.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/workspace/config.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/workspace/context.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/workspace/cursor.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/workspace/memory.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/workspace/models.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/workspace/poller.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/workspace/preferences.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/workspace/router.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/workspace/session.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/workspace/subscription.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework_lib.egg-info/SOURCES.txt +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework_lib.egg-info/dependency_links.txt +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework_lib.egg-info/entry_points.txt +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework_lib.egg-info/requires.txt +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework_lib.egg-info/top_level.txt +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/A2A_GUIDE.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/ACTIVITY_OUTPUT_PART.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/ARCHITECTURE_DIAGRAM.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/BUILTIN_SKILLS_REFERENCE.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/CANCEL_AND_INTERRUPT_FRONTEND.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/CONCURRENCE_VS_PARALLELISME_GUIDE.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/CREATING_AGENTS.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/CUSTOM_SKILLS_GUIDE.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/DEEPEVAL_TEST_REPORT.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/DOCKER_SETUP.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/ELASTICSEARCH_DATA_STRUCTURES.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/FILE_DOWNLOAD_LINKS.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/FILE_STORAGE_GUIDE.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/GETTING_STARTED.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/GITNEXUS_USER_GUIDE.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/HISTORY_MESSAGE_FORMAT.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/IMPLEMENTATION_GUIDE_NEW_AGENT.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/MEMORY_INSTALLATION.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/MODIFICATIONS_CONCURRENCE.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/MULTIMODAL_TOOLS_GUIDE.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/OBSERVABILITY_GUIDE.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/PYPI_PUBLISHING.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/QA_STREAMING_LATENCY.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/SCREENSHOTS_GUIDE.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/SPEC_CROSS_MODEL_HISTORY_CONVERSION.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/SSE_NOTIFICATIONS_GUIDE.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/STREAMING_EVENTS_FRONTEND.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/TOOLS_AND_MCP_GUIDE.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/WORKSPACE_INTEGRATION.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/api-reference.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/configuration.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/framework_audit_remarques.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/helper_agent.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/index.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/installation-guide.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/examples/README.md +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/examples/agent_context_budget_test.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/examples/agent_example_multi_skills.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/examples/agent_exemple_test.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/examples/agent_training_with_apo.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/examples/agent_with_custom_tools_file_storage.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/examples/agent_with_file_storage.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/examples/agent_with_mcp.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/examples/agent_with_memory_graphiti.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/examples/agent_with_memory_hybrid.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/examples/agent_with_memory_simple.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/examples/agent_with_personalization.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/examples/biagenttest.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/examples/custom_framework_agent.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/examples/dependencies/docker-compose.yaml +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/examples/pyproject.toml +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/examples/simple_agent.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/examples/skills_demo_agent.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/examples/test_work_patterns_live.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/examples/workspace_test_agent.py +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/setup.cfg +0 -0
- {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/setup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agent-framework-lib
|
|
3
|
-
Version: 0.8.7.
|
|
3
|
+
Version: 0.8.7.post7
|
|
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>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: image_gen
|
|
3
|
-
description: "Generate images using AI image generation APIs (DALL-E 3, DALL-E 2). Create custom illustrations, diagrams, and visual content from text descriptions."
|
|
3
|
+
description: "Generate images using AI image generation APIs (gpt-image-1, DALL-E 3, DALL-E 2). Create custom illustrations, diagrams, and visual content from text descriptions."
|
|
4
4
|
display_name: "Génération d'images par IA"
|
|
5
5
|
metadata:
|
|
6
6
|
config:
|
|
@@ -13,6 +13,7 @@ metadata:
|
|
|
13
13
|
- ai image
|
|
14
14
|
- dall-e
|
|
15
15
|
- dalle
|
|
16
|
+
- gpt-image
|
|
16
17
|
- image generation
|
|
17
18
|
- create picture
|
|
18
19
|
- generate illustration
|
|
@@ -27,9 +28,11 @@ metadata:
|
|
|
27
28
|
|
|
28
29
|
## AI Image Generation
|
|
29
30
|
|
|
30
|
-
Generate images using OpenAI's
|
|
31
|
+
Generate images using OpenAI's image models by running the `create_image.py` script via `shell_exec`.
|
|
31
32
|
|
|
32
|
-
The
|
|
33
|
+
The default model is **gpt-image-1** (OpenAI's current image model: best quality, reliable text rendering, transparent backgrounds). **DALL-E 3** and **DALL-E 2** remain available as alternatives.
|
|
34
|
+
|
|
35
|
+
> **gpt-image-1 requires a verified OpenAI organization.** If the org is not verified the API returns a 403; in that case set `IMAGE_GEN_DEFAULT_MODEL=dall-e-3` (env var) or pass `"model": "dall-e-3"` in the request to fall back.
|
|
33
36
|
|
|
34
37
|
---
|
|
35
38
|
|
|
@@ -38,9 +41,11 @@ The script supports DALL-E 3 (latest, highest quality) and DALL-E 2 (faster, mor
|
|
|
38
41
|
Pipe a JSON generation request to stdin and specify the target filename:
|
|
39
42
|
|
|
40
43
|
```bash
|
|
41
|
-
echo '{"prompt": "A futuristic cityscape at sunset", "
|
|
44
|
+
echo '{"prompt": "A futuristic cityscape at sunset", "size": "1536x1024", "quality": "high"}' | uv run python -m agent_framework.skills.builtin.scripts.create_and_register --skill image_gen --filename "cityscape.png" --output-dir "/path/to/output"
|
|
42
45
|
```
|
|
43
46
|
|
|
47
|
+
The default model (`gpt-image-1`) is used when `model` is omitted.
|
|
48
|
+
|
|
44
49
|
---
|
|
45
50
|
|
|
46
51
|
## Arguments
|
|
@@ -58,20 +63,35 @@ Provide a JSON object on stdin with the following structure:
|
|
|
58
63
|
|
|
59
64
|
| Field | Type | Required | Description |
|
|
60
65
|
|-------|------|----------|-------------|
|
|
61
|
-
| `prompt` | string | Yes | Text description of the image to generate (max
|
|
62
|
-
| `model` | string | No | AI model: `"
|
|
66
|
+
| `prompt` | string | Yes | Text description of the image to generate (max 32000 chars for gpt-image-1, 4000 for DALL-E 3, 1000 for DALL-E 2) |
|
|
67
|
+
| `model` | string | No | AI model: `"gpt-image-1"` (default), `"dall-e-3"`, `"dall-e-2"` |
|
|
63
68
|
| `size` | string | No | Image size (see Size Options below) |
|
|
64
|
-
| `quality` | string | No |
|
|
69
|
+
| `quality` | string | No | gpt-image-1: `low`/`medium`/`high`(default)/`auto` — DALL-E 3: `standard`(default)/`hd` |
|
|
65
70
|
| `style` | string | No | Image style: `"vivid"` (default), `"natural"` (DALL-E 3 only) |
|
|
66
|
-
| `n` | integer | No | Number of images to generate (1-10 for DALL-E 2, always 1 for DALL-E 3) |
|
|
71
|
+
| `n` | integer | No | Number of images to generate (1-10 for gpt-image-1 and DALL-E 2, always 1 for DALL-E 3) |
|
|
67
72
|
|
|
68
73
|
---
|
|
69
74
|
|
|
70
75
|
## Model Comparison
|
|
71
76
|
|
|
72
|
-
###
|
|
77
|
+
### gpt-image-1 (Default, Recommended)
|
|
73
78
|
|
|
74
|
-
**Best for**:
|
|
79
|
+
**Best for**: Highest-quality images, accurate text rendering, transparent backgrounds.
|
|
80
|
+
|
|
81
|
+
| Feature | Value |
|
|
82
|
+
|---------|-------|
|
|
83
|
+
| Quality | Best available (`low`/`medium`/`high`/`auto`) |
|
|
84
|
+
| Prompt adherence | Excellent — handles long, complex prompts (up to 32000 chars) |
|
|
85
|
+
| Available sizes | `1024x1024`, `1536x1024` (landscape), `1024x1536` (portrait), `auto` |
|
|
86
|
+
| Output | Always returned as base64 (handled transparently by the script) |
|
|
87
|
+
| Requirement | **Verified OpenAI organization** (else 403 — fall back to dall-e-3) |
|
|
88
|
+
| Cost / speed | Higher cost, slower than DALL-E 2 |
|
|
89
|
+
|
|
90
|
+
**Use gpt-image-1 when**: you want the best quality, images with legible text, or transparent backgrounds. This is the default.
|
|
91
|
+
|
|
92
|
+
### DALL-E 3
|
|
93
|
+
|
|
94
|
+
**Best for**: High-quality, detailed images with better prompt following (alternative to gpt-image-1).
|
|
75
95
|
|
|
76
96
|
| Feature | Value |
|
|
77
97
|
|---------|-------|
|
|
@@ -83,10 +103,9 @@ Provide a JSON object on stdin with the following structure:
|
|
|
83
103
|
| Speed | Slower (~10-30 seconds) |
|
|
84
104
|
|
|
85
105
|
**Use DALL-E 3 when**:
|
|
86
|
-
-
|
|
106
|
+
- gpt-image-1 is unavailable (org not verified)
|
|
107
|
+
- You need the `vivid`/`natural` style control
|
|
87
108
|
- Prompt contains complex or specific requirements
|
|
88
|
-
- Image will be used professionally (presentations, marketing)
|
|
89
|
-
- You want HDproperty quality output
|
|
90
109
|
|
|
91
110
|
### DALL-E 2
|
|
92
111
|
|
|
@@ -111,6 +130,12 @@ Provide a JSON object on stdin with the following structure:
|
|
|
111
130
|
|
|
112
131
|
## Size Options
|
|
113
132
|
|
|
133
|
+
### gpt-image-1 Sizes
|
|
134
|
+
- `1024x1024` — Square (default) — General purpose
|
|
135
|
+
- `1536x1024` — Landscape — Presentations, web banners
|
|
136
|
+
- `1024x1536` — Portrait — Mobile screens, posters
|
|
137
|
+
- `auto` — Let the model pick the best size for the prompt
|
|
138
|
+
|
|
114
139
|
### DALL-E 3 Sizes
|
|
115
140
|
- `1024x1024` — Square (default) — General purpose
|
|
116
141
|
- `1024x1792` — Portrait (9:16 aspect ratio) — Mobile screens, posters
|
|
@@ -123,19 +148,26 @@ Provide a JSON object on stdin with the following structure:
|
|
|
123
148
|
|
|
124
149
|
---
|
|
125
150
|
|
|
126
|
-
## Quality & Style
|
|
151
|
+
## Quality & Style
|
|
152
|
+
|
|
153
|
+
### Quality (gpt-image-1)
|
|
127
154
|
|
|
128
|
-
|
|
155
|
+
- `"low"` — Fastest, lowest cost
|
|
156
|
+
- `"medium"` — Balanced
|
|
157
|
+
- `"high"` (default) — Best detail
|
|
158
|
+
- `"auto"` — Let the model decide
|
|
159
|
+
|
|
160
|
+
### Quality (DALL-E 3)
|
|
129
161
|
|
|
130
162
|
- `"standard"` (default) — Good quality, faster, lower cost
|
|
131
163
|
- `"hd"` — Highest quality, more detail, slower, higher cost
|
|
132
164
|
|
|
133
|
-
**Use
|
|
165
|
+
**Use higher quality for**:
|
|
134
166
|
- Professional presentations and marketing materials
|
|
135
167
|
- Large format prints or displays
|
|
136
168
|
- Images requiring fine details (textures, faces, text)
|
|
137
169
|
|
|
138
|
-
### Style
|
|
170
|
+
### Style (DALL-E 3 only)
|
|
139
171
|
|
|
140
172
|
- `"vivid"` (default) — Vibrant, hyper-real, dramatic — Good for eye-catching visuals
|
|
141
173
|
- `"natural"` — More subdued, realistic, natural tones — Good for professional/corporate content
|
|
@@ -144,18 +176,18 @@ Provide a JSON object on stdin with the following structure:
|
|
|
144
176
|
|
|
145
177
|
## Complete Example
|
|
146
178
|
|
|
147
|
-
Generate a high-quality landscape illustration for a presentation:
|
|
179
|
+
Generate a high-quality landscape illustration for a presentation (default model gpt-image-1):
|
|
148
180
|
|
|
149
181
|
```bash
|
|
150
182
|
echo '{
|
|
151
183
|
"prompt": "A serene mountain landscape with a crystal-clear lake reflecting snow-capped peaks, surrounded by pine forests, during golden hour. Photorealistic style with soft lighting and vibrant colors.",
|
|
152
|
-
"
|
|
153
|
-
"
|
|
154
|
-
"quality": "hd",
|
|
155
|
-
"style": "natural"
|
|
184
|
+
"size": "1536x1024",
|
|
185
|
+
"quality": "high"
|
|
156
186
|
}' | uv run python -m agent_framework.skills.builtin.scripts.create_and_register --skill image_gen --filename "mountain_landscape.png"
|
|
157
187
|
```
|
|
158
188
|
|
|
189
|
+
To use DALL-E 3 instead, set `"model": "dall-e-3"` (with `quality` `standard`/`hd` and an optional `style`).
|
|
190
|
+
|
|
159
191
|
---
|
|
160
192
|
|
|
161
193
|
## Output Format (stdout)
|
|
@@ -172,15 +204,15 @@ On success, the script prints a JSON object with download information:
|
|
|
172
204
|
"mime_type": "image/png",
|
|
173
205
|
"local_cleaned": true,
|
|
174
206
|
"metadata": {
|
|
175
|
-
"model": "
|
|
176
|
-
"size": "
|
|
177
|
-
"quality": "
|
|
207
|
+
"model": "gpt-image-1",
|
|
208
|
+
"size": "1536x1024",
|
|
209
|
+
"quality": "high",
|
|
178
210
|
"revised_prompt": "A tranquil mountain vista featuring..."
|
|
179
211
|
}
|
|
180
212
|
}
|
|
181
213
|
```
|
|
182
214
|
|
|
183
|
-
**Note**: The `revised_prompt` field (
|
|
215
|
+
**Note**: The `revised_prompt` field (when provided by the model) shows how OpenAI interpreted and enhanced your original prompt.
|
|
184
216
|
|
|
185
217
|
Use the `download_url` to provide a download link:
|
|
186
218
|
```
|
|
@@ -209,6 +241,7 @@ On failure, the script prints a JSON error to stderr and exits with non-zero cod
|
|
|
209
241
|
| 1 | Invalid size | `"Invalid size '2048x2048' for dall-e-3. Must be one of: 1024x1024, 1024x1792, 1792x1024"` |
|
|
210
242
|
| 1 | Missing API key | `"OPENAI_API_KEY environment variable is not set"` |
|
|
211
243
|
| 1 | API error | `"OpenAI API error: Rate limit exceeded"` |
|
|
244
|
+
| 1 | Org not verified (gpt-image-1) | `"model 'gpt-image-1' requires a verified OpenAI organization. Set IMAGE_GEN_DEFAULT_MODEL=dall-e-3 ..."` |
|
|
212
245
|
| 1 | Content policy violation | `"Image generation failed: Content policy violation"` |
|
|
213
246
|
|
|
214
247
|
---
|
|
@@ -371,7 +404,7 @@ If your prompt violates the content policy, the API will return an error.
|
|
|
371
404
|
When helping users generate images:
|
|
372
405
|
|
|
373
406
|
1. **Clarify requirements**: Ask about purpose, style, dimensions, quality needs
|
|
374
|
-
2. **Suggest model**: DALL-E 3
|
|
407
|
+
2. **Suggest model**: gpt-image-1 (default) for best quality and text rendering; DALL-E 3 if you need vivid/natural style control or the org isn't verified; DALL-E 2 for cheap, fast iterations
|
|
375
408
|
3. **Recommend size**: Based on use case (presentation → landscape, social media → square, poster → portrait)
|
|
376
409
|
4. **Craft detailed prompts**: Include style, mood, lighting, composition
|
|
377
410
|
5. **Set expectations**: Mention generation time (~10-30s for DALL-E 3)
|
|
@@ -8,6 +8,7 @@ downloads it, and saves it to the specified output directory.
|
|
|
8
8
|
This script is designed to be called by create_and_register.py wrapper.
|
|
9
9
|
"""
|
|
10
10
|
import argparse
|
|
11
|
+
import base64
|
|
11
12
|
import json
|
|
12
13
|
import os
|
|
13
14
|
import sys
|
|
@@ -28,8 +29,21 @@ except ImportError:
|
|
|
28
29
|
sys.exit(1)
|
|
29
30
|
|
|
30
31
|
|
|
32
|
+
# Default model. gpt-image-1 is OpenAI's current image model (best quality,
|
|
33
|
+
# reliable text rendering, transparency). Requires a verified OpenAI org.
|
|
34
|
+
# Override via IMAGE_GEN_DEFAULT_MODEL (e.g. set to "dall-e-3" if the org is
|
|
35
|
+
# not verified).
|
|
36
|
+
DEFAULT_MODEL = os.getenv("IMAGE_GEN_DEFAULT_MODEL", "gpt-image-1")
|
|
37
|
+
|
|
31
38
|
# Model configurations
|
|
32
39
|
MODEL_CONFIGS = {
|
|
40
|
+
"gpt-image-1": {
|
|
41
|
+
"sizes": ["1024x1024", "1536x1024", "1024x1536", "auto"],
|
|
42
|
+
"qualities": ["low", "medium", "high", "auto"],
|
|
43
|
+
"max_prompt_length": 32000,
|
|
44
|
+
"n_images_max": 10,
|
|
45
|
+
# Always returns base64 (no response_format param accepted).
|
|
46
|
+
},
|
|
33
47
|
"dall-e-3": {
|
|
34
48
|
"sizes": ["1024x1024", "1024x1792", "1792x1024"],
|
|
35
49
|
"qualities": ["standard", "hd"],
|
|
@@ -52,7 +66,7 @@ def validate_request(data: dict[str, Any]) -> tuple[bool, str]:
|
|
|
52
66
|
return False, "prompt field is required"
|
|
53
67
|
|
|
54
68
|
prompt = data["prompt"]
|
|
55
|
-
model = data.get("model",
|
|
69
|
+
model = data.get("model", DEFAULT_MODEL)
|
|
56
70
|
|
|
57
71
|
# Validate model
|
|
58
72
|
if model not in MODEL_CONFIGS:
|
|
@@ -76,13 +90,14 @@ def validate_request(data: dict[str, Any]) -> tuple[bool, str]:
|
|
|
76
90
|
f"Invalid size '{size}' for {model}. Must be one of: {', '.join(config['sizes'])}",
|
|
77
91
|
)
|
|
78
92
|
|
|
79
|
-
# Validate quality (
|
|
80
|
-
if
|
|
93
|
+
# Validate quality (gpt-image-1 and dall-e-3 have their own scales)
|
|
94
|
+
if "quality" in data and "qualities" in config:
|
|
81
95
|
quality = data["quality"]
|
|
82
96
|
if quality not in config["qualities"]:
|
|
83
97
|
return (
|
|
84
98
|
False,
|
|
85
|
-
f"Invalid quality '{quality}'
|
|
99
|
+
f"Invalid quality '{quality}' for {model}. "
|
|
100
|
+
f"Must be one of: {', '.join(config['qualities'])}",
|
|
86
101
|
)
|
|
87
102
|
|
|
88
103
|
# Validate style (DALL-E 3 only)
|
|
@@ -91,14 +106,14 @@ def validate_request(data: dict[str, Any]) -> tuple[bool, str]:
|
|
|
91
106
|
if style not in config["styles"]:
|
|
92
107
|
return False, f"Invalid style '{style}'. Must be one of: {', '.join(config['styles'])}"
|
|
93
108
|
|
|
94
|
-
# Validate n
|
|
109
|
+
# Validate n
|
|
95
110
|
if "n" in data:
|
|
96
111
|
n = data["n"]
|
|
97
112
|
if model == "dall-e-3" and n != 1:
|
|
98
113
|
return False, "DALL-E 3 can only generate 1 image at a time (n=1)"
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
114
|
+
max_n = config.get("n_images_max")
|
|
115
|
+
if max_n is not None and (not isinstance(n, int) or n < 1 or n > max_n):
|
|
116
|
+
return False, f"n must be between 1 and {max_n} for {model}"
|
|
102
117
|
|
|
103
118
|
return True, ""
|
|
104
119
|
|
|
@@ -115,14 +130,19 @@ def generate_image(data: dict[str, Any]) -> dict[str, Any]:
|
|
|
115
130
|
|
|
116
131
|
# Extract parameters
|
|
117
132
|
prompt = data["prompt"]
|
|
118
|
-
model = data.get("model",
|
|
133
|
+
model = data.get("model", DEFAULT_MODEL)
|
|
119
134
|
size = data.get("size")
|
|
120
135
|
quality = data.get("quality")
|
|
121
136
|
style = data.get("style")
|
|
122
137
|
n = data.get("n", 1)
|
|
123
138
|
|
|
124
139
|
# Set defaults based on model
|
|
125
|
-
if model == "
|
|
140
|
+
if model == "gpt-image-1":
|
|
141
|
+
if not size:
|
|
142
|
+
size = "1024x1024"
|
|
143
|
+
if not quality:
|
|
144
|
+
quality = "high"
|
|
145
|
+
elif model == "dall-e-3":
|
|
126
146
|
if not size:
|
|
127
147
|
size = "1024x1024"
|
|
128
148
|
if not quality:
|
|
@@ -135,16 +155,23 @@ def generate_image(data: dict[str, Any]) -> dict[str, Any]:
|
|
|
135
155
|
size = "1024x1024"
|
|
136
156
|
|
|
137
157
|
# Build API request parameters
|
|
138
|
-
api_params = {
|
|
158
|
+
api_params: dict[str, Any] = {
|
|
139
159
|
"model": model,
|
|
140
160
|
"prompt": prompt,
|
|
141
161
|
"n": n,
|
|
142
162
|
"size": size,
|
|
143
|
-
"response_format": "url", # Get URL instead of base64
|
|
144
163
|
}
|
|
145
164
|
|
|
146
|
-
#
|
|
147
|
-
|
|
165
|
+
# `response_format` (url | b64_json) is only accepted by the dall-e-* models.
|
|
166
|
+
# gpt-image-1 rejects it and always returns base64. Only send it for the
|
|
167
|
+
# dall-e family; otherwise let the API use its default.
|
|
168
|
+
if model.startswith("dall-e"):
|
|
169
|
+
api_params["response_format"] = "url"
|
|
170
|
+
|
|
171
|
+
# Model-specific parameters
|
|
172
|
+
if model == "gpt-image-1":
|
|
173
|
+
api_params["quality"] = quality
|
|
174
|
+
elif model == "dall-e-3":
|
|
148
175
|
api_params["quality"] = quality
|
|
149
176
|
api_params["style"] = style
|
|
150
177
|
|
|
@@ -162,20 +189,35 @@ def generate_image(data: dict[str, Any]) -> dict[str, Any]:
|
|
|
162
189
|
raise ValueError("OpenAI API error: Rate limit exceeded. Please try again later.")
|
|
163
190
|
elif "insufficient_quota" in error_message.lower():
|
|
164
191
|
raise ValueError("OpenAI API error: Insufficient quota. Please check your API credits.")
|
|
192
|
+
elif "must be verified" in error_message.lower() or "organization must be verified" in (
|
|
193
|
+
error_message.lower()
|
|
194
|
+
):
|
|
195
|
+
raise ValueError(
|
|
196
|
+
f"OpenAI API error: model '{model}' requires a verified OpenAI organization. "
|
|
197
|
+
f"Set IMAGE_GEN_DEFAULT_MODEL=dall-e-3 or pass \"model\": \"dall-e-3\" to fall back. "
|
|
198
|
+
f"({error_message})"
|
|
199
|
+
)
|
|
165
200
|
else:
|
|
166
201
|
raise ValueError(f"OpenAI API error: {error_message}")
|
|
167
202
|
|
|
168
|
-
# Extract response data
|
|
203
|
+
# Extract response data. The API may return either a hosted URL or inline
|
|
204
|
+
# base64 (b64_json), depending on the model and whether response_format was
|
|
205
|
+
# honored. gpt-image-1 always returns base64. Support both.
|
|
169
206
|
image_data = response.data[0]
|
|
170
|
-
image_url = image_data
|
|
207
|
+
image_url = getattr(image_data, "url", None)
|
|
208
|
+
image_b64 = getattr(image_data, "b64_json", None)
|
|
171
209
|
revised_prompt = getattr(image_data, "revised_prompt", None)
|
|
172
210
|
|
|
211
|
+
if not image_url and not image_b64:
|
|
212
|
+
raise ValueError("OpenAI API error: response contained neither an image URL nor base64 data")
|
|
213
|
+
|
|
173
214
|
return {
|
|
174
215
|
"url": image_url,
|
|
216
|
+
"b64_json": image_b64,
|
|
175
217
|
"revised_prompt": revised_prompt,
|
|
176
218
|
"model": model,
|
|
177
219
|
"size": size,
|
|
178
|
-
"quality": quality if model
|
|
220
|
+
"quality": quality if model in ("gpt-image-1", "dall-e-3") else None,
|
|
179
221
|
"style": style if model == "dall-e-3" else None,
|
|
180
222
|
}
|
|
181
223
|
|
|
@@ -202,6 +244,37 @@ def download_image(url: str, output_path: Path) -> int:
|
|
|
202
244
|
raise ValueError(f"Failed to download image: {e}")
|
|
203
245
|
|
|
204
246
|
|
|
247
|
+
def save_image(result: dict[str, Any], output_path: Path) -> int:
|
|
248
|
+
"""Persist a generated image to disk from either a URL or base64 payload.
|
|
249
|
+
|
|
250
|
+
Args:
|
|
251
|
+
result: The dict returned by generate_image (carries 'url' and/or
|
|
252
|
+
'b64_json').
|
|
253
|
+
output_path: Path where the image should be saved.
|
|
254
|
+
|
|
255
|
+
Returns:
|
|
256
|
+
Size of the written file in bytes.
|
|
257
|
+
|
|
258
|
+
Raises:
|
|
259
|
+
ValueError: If neither a URL nor base64 data is available, or if
|
|
260
|
+
decoding/downloading fails.
|
|
261
|
+
"""
|
|
262
|
+
b64_data = result.get("b64_json")
|
|
263
|
+
if b64_data:
|
|
264
|
+
try:
|
|
265
|
+
image_bytes = base64.b64decode(b64_data)
|
|
266
|
+
except (ValueError, TypeError) as e:
|
|
267
|
+
raise ValueError(f"Failed to decode base64 image data: {e}")
|
|
268
|
+
output_path.write_bytes(image_bytes)
|
|
269
|
+
return len(image_bytes)
|
|
270
|
+
|
|
271
|
+
url = result.get("url")
|
|
272
|
+
if url:
|
|
273
|
+
return download_image(url, output_path)
|
|
274
|
+
|
|
275
|
+
raise ValueError("No image data to save (neither URL nor base64 returned)")
|
|
276
|
+
|
|
277
|
+
|
|
205
278
|
def main() -> None:
|
|
206
279
|
"""Main entry point for the image generation script."""
|
|
207
280
|
parser = argparse.ArgumentParser(description="Generate AI images using DALL-E")
|
|
@@ -250,8 +323,8 @@ def main() -> None:
|
|
|
250
323
|
# Generate image via OpenAI API
|
|
251
324
|
result = generate_image(data)
|
|
252
325
|
|
|
253
|
-
#
|
|
254
|
-
file_size =
|
|
326
|
+
# Persist image to local file (handles both URL and base64 responses)
|
|
327
|
+
file_size = save_image(result, output_path)
|
|
255
328
|
|
|
256
329
|
# Output success result
|
|
257
330
|
output = {
|
|
@@ -30,7 +30,7 @@ metadata:
|
|
|
30
30
|
|
|
31
31
|
Generate PDF documents from HTML content by running the `create_pdf.py` script via `shell_exec`.
|
|
32
32
|
|
|
33
|
-
The script uses Playwright to render HTML in a headless Chromium browser and produce an A4 PDF. HTML fragments are automatically wrapped in a
|
|
33
|
+
The script uses Playwright to render HTML in a headless Chromium browser and produce an A4 PDF. HTML fragments are automatically wrapped in a **professionally styled** document shell (clean typography, styled headings/tables/figures). Images are **automatically scaled to fit the page width** — you never need to set image dimensions or worry about a large chart PNG overflowing the page.
|
|
34
34
|
|
|
35
35
|
### Usage
|
|
36
36
|
|
|
@@ -51,8 +51,8 @@ echo '<h1>Hello World</h1><p>This is a PDF.</p>' | uv run python -m agent_framew
|
|
|
51
51
|
|
|
52
52
|
Provide raw HTML content on stdin. This can be either:
|
|
53
53
|
|
|
54
|
-
- A **complete HTML document** (starts with `<!DOCTYPE` or contains `<html`): used as-is.
|
|
55
|
-
- An **HTML fragment** (anything else): automatically wrapped in a
|
|
54
|
+
- A **complete HTML document** (starts with `<!DOCTYPE` or contains `<html`): used as-is, but print-safety CSS is still injected so oversized images are scaled to the page.
|
|
55
|
+
- An **HTML fragment** (anything else): automatically wrapped in a professionally styled document (clean typography, styled headings, tables, and figures with captions). Recommended for most reports — just provide the body content.
|
|
56
56
|
|
|
57
57
|
### Recommended HTML Structure
|
|
58
58
|
|
|
@@ -21,6 +21,145 @@ import urllib.request
|
|
|
21
21
|
VIEWPORT_WIDTH = 1280
|
|
22
22
|
VIEWPORT_HEIGHT = 1024
|
|
23
23
|
|
|
24
|
+
# Critical print-safety CSS. Injected into EVERY document (fragments and complete
|
|
25
|
+
# HTML alike) so that oversized raster images (e.g. 3200px-wide chart PNGs) are
|
|
26
|
+
# scaled to the page width instead of overflowing and spilling across pages.
|
|
27
|
+
_PRINT_SAFETY_CSS = """
|
|
28
|
+
img, svg, canvas, video {
|
|
29
|
+
max-width: 100% !important;
|
|
30
|
+
height: auto !important;
|
|
31
|
+
}
|
|
32
|
+
figure {
|
|
33
|
+
margin: 1.2em 0;
|
|
34
|
+
text-align: center;
|
|
35
|
+
page-break-inside: avoid;
|
|
36
|
+
break-inside: avoid;
|
|
37
|
+
}
|
|
38
|
+
figure img {
|
|
39
|
+
margin: 0 auto;
|
|
40
|
+
}
|
|
41
|
+
table, pre, blockquote {
|
|
42
|
+
page-break-inside: avoid;
|
|
43
|
+
break-inside: avoid;
|
|
44
|
+
}
|
|
45
|
+
h1, h2, h3, h4 {
|
|
46
|
+
page-break-after: avoid;
|
|
47
|
+
break-after: avoid;
|
|
48
|
+
}
|
|
49
|
+
"""
|
|
50
|
+
|
|
51
|
+
# Professional baseline styling applied when wrapping a bare HTML fragment.
|
|
52
|
+
_PROFESSIONAL_CSS = """
|
|
53
|
+
:root {
|
|
54
|
+
--accent: #2563eb;
|
|
55
|
+
--ink: #1f2937;
|
|
56
|
+
--muted: #6b7280;
|
|
57
|
+
--border: #e5e7eb;
|
|
58
|
+
}
|
|
59
|
+
* { box-sizing: border-box; }
|
|
60
|
+
body {
|
|
61
|
+
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
|
|
62
|
+
"Helvetica Neue", Arial, sans-serif;
|
|
63
|
+
margin: 0;
|
|
64
|
+
padding: 0;
|
|
65
|
+
color: var(--ink);
|
|
66
|
+
line-height: 1.6;
|
|
67
|
+
font-size: 11pt;
|
|
68
|
+
}
|
|
69
|
+
h1 {
|
|
70
|
+
font-size: 24pt;
|
|
71
|
+
font-weight: 700;
|
|
72
|
+
margin: 0 0 0.4em;
|
|
73
|
+
padding-bottom: 0.3em;
|
|
74
|
+
border-bottom: 3px solid var(--accent);
|
|
75
|
+
}
|
|
76
|
+
h2 {
|
|
77
|
+
font-size: 16pt;
|
|
78
|
+
font-weight: 700;
|
|
79
|
+
margin: 1.4em 0 0.5em;
|
|
80
|
+
color: var(--ink);
|
|
81
|
+
}
|
|
82
|
+
h3 {
|
|
83
|
+
font-size: 13pt;
|
|
84
|
+
font-weight: 600;
|
|
85
|
+
margin: 1.1em 0 0.4em;
|
|
86
|
+
}
|
|
87
|
+
p { margin: 0.6em 0; }
|
|
88
|
+
a { color: var(--accent); text-decoration: none; }
|
|
89
|
+
ul, ol { margin: 0.6em 0; padding-left: 1.4em; }
|
|
90
|
+
li { margin: 0.25em 0; }
|
|
91
|
+
table {
|
|
92
|
+
width: 100%;
|
|
93
|
+
border-collapse: collapse;
|
|
94
|
+
margin: 1em 0;
|
|
95
|
+
font-size: 10pt;
|
|
96
|
+
}
|
|
97
|
+
th, td {
|
|
98
|
+
border: 1px solid var(--border);
|
|
99
|
+
padding: 8px 10px;
|
|
100
|
+
text-align: left;
|
|
101
|
+
}
|
|
102
|
+
th {
|
|
103
|
+
background: #f3f4f6;
|
|
104
|
+
font-weight: 600;
|
|
105
|
+
}
|
|
106
|
+
tr:nth-child(even) td { background: #fafafa; }
|
|
107
|
+
figure {
|
|
108
|
+
margin: 1.4em 0;
|
|
109
|
+
text-align: center;
|
|
110
|
+
}
|
|
111
|
+
figcaption {
|
|
112
|
+
font-size: 9.5pt;
|
|
113
|
+
color: var(--muted);
|
|
114
|
+
margin-top: 0.5em;
|
|
115
|
+
font-style: italic;
|
|
116
|
+
}
|
|
117
|
+
blockquote {
|
|
118
|
+
margin: 1em 0;
|
|
119
|
+
padding: 0.4em 1em;
|
|
120
|
+
border-left: 4px solid var(--accent);
|
|
121
|
+
color: var(--muted);
|
|
122
|
+
}
|
|
123
|
+
pre, code {
|
|
124
|
+
font-family: "SF Mono", Menlo, Consolas, monospace;
|
|
125
|
+
font-size: 9.5pt;
|
|
126
|
+
}
|
|
127
|
+
pre {
|
|
128
|
+
background: #f6f8fa;
|
|
129
|
+
padding: 12px 14px;
|
|
130
|
+
border-radius: 6px;
|
|
131
|
+
overflow-x: auto;
|
|
132
|
+
}
|
|
133
|
+
.section { margin-bottom: 1.2em; }
|
|
134
|
+
.break-before { page-break-before: always; break-before: page; }
|
|
135
|
+
"""
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
def _inject_into_head(html: str, style_block: str) -> str:
|
|
139
|
+
"""Insert a <style> block into a complete HTML document.
|
|
140
|
+
|
|
141
|
+
Tries to place it just before </head>; falls back to after <html>, or
|
|
142
|
+
prepends it if neither tag is present. Case-insensitive.
|
|
143
|
+
|
|
144
|
+
Args:
|
|
145
|
+
html: A complete HTML document.
|
|
146
|
+
style_block: The CSS (without <style> tags) to inject.
|
|
147
|
+
|
|
148
|
+
Returns:
|
|
149
|
+
The document with the style block inserted.
|
|
150
|
+
"""
|
|
151
|
+
tag = f"<style>{style_block}</style>"
|
|
152
|
+
lower = html.lower()
|
|
153
|
+
head_close = lower.find("</head>")
|
|
154
|
+
if head_close != -1:
|
|
155
|
+
return html[:head_close] + tag + html[head_close:]
|
|
156
|
+
html_open = lower.find("<html")
|
|
157
|
+
if html_open != -1:
|
|
158
|
+
insert_at = lower.find(">", html_open)
|
|
159
|
+
if insert_at != -1:
|
|
160
|
+
return html[: insert_at + 1] + tag + html[insert_at + 1 :]
|
|
161
|
+
return tag + html
|
|
162
|
+
|
|
24
163
|
_IMG_SRC_RE = re.compile(r'(<img\b[^>]*?\bsrc\s*=\s*)(["\'])(.*?)\2', re.IGNORECASE)
|
|
25
164
|
_FILES_DOWNLOAD_RE = re.compile(r"/files/[A-Za-z0-9_-]+/download")
|
|
26
165
|
|
|
@@ -168,8 +307,12 @@ async def render_pdf(html_content: str, filename: str, output_dir: str) -> str:
|
|
|
168
307
|
# would otherwise silently fail to load and the PDF would show no image.
|
|
169
308
|
html_content = _inline_images(html_content)
|
|
170
309
|
|
|
171
|
-
# Wrap fragment in a basic HTML document if needed
|
|
172
|
-
|
|
310
|
+
# Wrap fragment in a basic HTML document if needed. Complete documents get
|
|
311
|
+
# the print-safety CSS injected so that oversized images are still scaled
|
|
312
|
+
# to the page (the #1 cause of charts overflowing / being cropped in PDFs).
|
|
313
|
+
if _is_complete_html(html_content):
|
|
314
|
+
html_content = _inject_into_head(html_content, _PRINT_SAFETY_CSS)
|
|
315
|
+
else:
|
|
173
316
|
html_content = _wrap_html_fragment(html_content)
|
|
174
317
|
|
|
175
318
|
# Sanitize filename
|
|
@@ -223,7 +366,10 @@ def _is_complete_html(content: str) -> bool:
|
|
|
223
366
|
|
|
224
367
|
|
|
225
368
|
def _wrap_html_fragment(fragment: str) -> str:
|
|
226
|
-
"""Wrap an HTML fragment in a
|
|
369
|
+
"""Wrap an HTML fragment in a professionally styled HTML document.
|
|
370
|
+
|
|
371
|
+
Applies a clean report stylesheet plus the print-safety CSS so that
|
|
372
|
+
embedded charts and images are scaled to the page width.
|
|
227
373
|
|
|
228
374
|
Args:
|
|
229
375
|
fragment: HTML fragment to wrap.
|
|
@@ -235,16 +381,8 @@ def _wrap_html_fragment(fragment: str) -> str:
|
|
|
235
381
|
<html>
|
|
236
382
|
<head>
|
|
237
383
|
<meta charset="UTF-8">
|
|
238
|
-
<style>
|
|
239
|
-
|
|
240
|
-
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
|
|
241
|
-
"Helvetica Neue", Arial, sans-serif;
|
|
242
|
-
margin: 0;
|
|
243
|
-
padding: 0;
|
|
244
|
-
color: #333;
|
|
245
|
-
line-height: 1.6;
|
|
246
|
-
}}
|
|
247
|
-
</style>
|
|
384
|
+
<style>{_PROFESSIONAL_CSS}
|
|
385
|
+
{_PRINT_SAFETY_CSS}</style>
|
|
248
386
|
</head>
|
|
249
387
|
<body>
|
|
250
388
|
{fragment}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agent-framework-lib
|
|
3
|
-
Version: 0.8.7.
|
|
3
|
+
Version: 0.8.7.post7
|
|
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>
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "agent-framework-lib"
|
|
7
|
-
version = "0.8.
|
|
7
|
+
version = "0.8.7post7"
|
|
8
8
|
description = "A comprehensive Python framework for building and serving conversational AI agents with FastAPI"
|
|
9
9
|
readme = {file = "README.md", content-type = "text/markdown"}
|
|
10
10
|
license = {text = "MIT"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/__init__.py
RENAMED
|
File without changes
|
{agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/a2a/__init__.py
RENAMED
|
File without changes
|
{agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/a2a/base.py
RENAMED
|
File without changes
|
|
File without changes
|