10xscale-agentflow-cli 0.2.9__tar.gz → 0.3.1__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.
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/10xscale_agentflow_cli.egg-info/PKG-INFO +27 -2
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/10xscale_agentflow_cli.egg-info/SOURCES.txt +42 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/10xscale_agentflow_cli.egg-info/requires.txt +2 -1
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/MANIFEST.in +1 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/PKG-INFO +27 -2
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/README.md +24 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow.json +1 -2
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/commands/api.py +211 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/commands/skills.py +306 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/cli/constants.py +1 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/cli/main.py +125 -1
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/SKILL.md +100 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/agents-and-tools.md +65 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/api-client.md +67 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/api-configuration.md +64 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/api-settings-and-middleware.md +82 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/architecture.md +55 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/auth-and-authorization.md +88 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/callbacks-and-command.md +102 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/checkpointing-and-threads.md +63 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/cli-commands.md +73 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/client-auth-and-errors.md +95 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/client-messages-invoke-stream.md +117 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/client-threads-memory-files.md +82 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/context-id-background.md +82 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/dependency-injection.md +58 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/id-and-thread-name-generators.md +71 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/media-and-files.md +66 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/memory-and-store.md +70 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/prebuilt-agents-and-tools.md +60 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/production-runtime.md +56 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/providers-and-adapters.md +81 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/publishers-and-runtime-protocols.md +78 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/remote-tools.md +86 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/rest-api-and-errors.md +93 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/security-and-validators.md +69 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/state-and-messages.md +68 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/state-graph.md +67 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/streaming.md +53 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/testing-and-evaluation.md +66 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/copilot/agentflow.instructions.md +51 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/core/auth/jwt_auth.py +7 -8
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/src/app/core/config/media_settings.py +50 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/core/config/settings.py +8 -3
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/core/exceptions/handle_errors.py +1 -1
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/loader.py +15 -3
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/main.py +29 -1
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/checkpointer/router.py +4 -13
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/checkpointer/schemas/checkpointer_schemas.py +1 -1
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/checkpointer/services/checkpointer_service.py +12 -3
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/graph/router.py +1 -1
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/graph/schemas/graph_schemas.py +1 -1
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/graph/services/graph_service.py +49 -11
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/src/app/routers/graph/services/multimodal_preprocessor.py +89 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/src/app/routers/media/__init__.py +395 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/src/app/routers/media/router.py +154 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/src/app/routers/media/schemas.py +40 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/setup_router.py +2 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/store/schemas/store_schemas.py +2 -2
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/store/services/store_service.py +12 -3
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/src/app/utils/media/__init__.py +15 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/src/app/utils/media/extractor.py +73 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/src/app/utils/media/pipeline.py +83 -0
- 10xscale_agentflow_cli-0.3.1/graph/react.py +95 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/pyproject.toml +10 -10
- 10xscale_agentflow_cli-0.3.1/requirements.txt +31 -0
- 10xscale_agentflow_cli-0.3.1/tests/test_multimodal_sprint2_extraction.py +213 -0
- 10xscale_agentflow_cli-0.3.1/tests/test_sprint4_media_api.py +340 -0
- 10xscale_agentflow_cli-0.2.9/agentflow_cli/cli/commands/api.py +0 -101
- 10xscale_agentflow_cli-0.2.9/graph/react.py +0 -214
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/10xscale_agentflow_cli.egg-info/dependency_links.txt +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/10xscale_agentflow_cli.egg-info/entry_points.txt +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/10xscale_agentflow_cli.egg-info/not-zip-safe +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/10xscale_agentflow_cli.egg-info/top_level.txt +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/ActionPlan.md +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/__init__.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/cli/__init__.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/cli/commands/__init__.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/cli/commands/build.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/cli/commands/init.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/cli/commands/version.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/cli/core/__init__.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/cli/core/config.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/cli/core/output.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/cli/core/validation.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/cli/exceptions.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/cli/logger.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/cli/templates/__init__.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/cli/templates/defaults.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/__init__.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/__init__.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/core/__init__.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/core/auth/__init__.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/core/auth/auth_backend.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/core/auth/authorization.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/core/auth/base_auth.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/core/auth/permissions.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/core/config/__init__.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/core/config/graph_config.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/core/config/sentry_config.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/core/config/setup_logs.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/core/config/setup_middleware.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/core/config/worker_middleware.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/core/exceptions/__init__.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/core/exceptions/general_exception.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/core/exceptions/resources_exceptions.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/core/exceptions/user_exception.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/core/middleware/__init__.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/core/middleware/request_limits.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/core/middleware/security_headers.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/core/utils/__init__.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/core/utils/log_sanitizer.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/__init__.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/a2a.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/a2ui.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/checkpointer/__init__.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/checkpointer/schemas/__init__.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/checkpointer/services/__init__.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/graph/__init__.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/graph/schemas/__init__.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/graph/services/__init__.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/ping/__init__.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/ping/router.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/store/__init__.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/store/router.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/store/schemas/__init__.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/store/services/__init__.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/tasks/__init__.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/tasks/user_tasks.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/utils/__init__.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/utils/callable_helper.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/utils/parse_output.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/utils/response_helper.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/utils/schemas/__init__.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/utils/schemas/output_schemas.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/utils/schemas/user_schemas.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/utils/snowflake_id_generator.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/utils/swagger_helper.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/utils/thread_name_generator.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/worker.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/graph/__init__.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/graph/thread_name_generator.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/plan.md +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/scripts/generate_docs.py +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/setup.cfg +0 -0
- {10xscale_agentflow_cli-0.2.9 → 10xscale_agentflow_cli-0.3.1}/tests/test_utils_parse_and_callable.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: 10xscale-agentflow-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.1
|
|
4
4
|
Summary: CLI and API for 10xscale AgentFlow
|
|
5
5
|
Author-email: 10xscale <contact@10xscale.ai>
|
|
6
6
|
Maintainer-email: Shudipto Trafder <shudiptotrafder@gmail.com>
|
|
@@ -21,7 +21,7 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
|
21
21
|
Classifier: Topic :: Internet :: WWW/HTTP :: HTTP Servers
|
|
22
22
|
Requires-Python: >=3.12
|
|
23
23
|
Description-Content-Type: text/markdown
|
|
24
|
-
Requires-Dist: 10xscale-agentflow>=0.
|
|
24
|
+
Requires-Dist: 10xscale-agentflow>=0.7.0
|
|
25
25
|
Requires-Dist: fastapi
|
|
26
26
|
Requires-Dist: gunicorn
|
|
27
27
|
Requires-Dist: orjson
|
|
@@ -32,6 +32,7 @@ Requires-Dist: uvicorn
|
|
|
32
32
|
Requires-Dist: typer
|
|
33
33
|
Requires-Dist: python-dotenv
|
|
34
34
|
Requires-Dist: PyJWT
|
|
35
|
+
Requires-Dist: textxtract[docx,html,md,pdf,xml]>=0.2.0
|
|
35
36
|
Provides-Extra: sentry
|
|
36
37
|
Requires-Dist: sentry-sdk>=2.10.0; extra == "sentry"
|
|
37
38
|
Provides-Extra: firebase
|
|
@@ -81,6 +82,12 @@ agentflow init --prod
|
|
|
81
82
|
agentflow api
|
|
82
83
|
```
|
|
83
84
|
|
|
85
|
+
### Start API With Play
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
agentflow play
|
|
89
|
+
```
|
|
90
|
+
|
|
84
91
|
### Generate Docker Files
|
|
85
92
|
|
|
86
93
|
```bash
|
|
@@ -142,6 +149,24 @@ agentflow api --no-reload
|
|
|
142
149
|
agentflow api --verbose
|
|
143
150
|
```
|
|
144
151
|
|
|
152
|
+
### `agentflow play`
|
|
153
|
+
|
|
154
|
+
Start the development API server and open the hosted playground with your local backend URL preconfigured.
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
# Start with defaults and open the playground
|
|
158
|
+
agentflow play
|
|
159
|
+
|
|
160
|
+
# Custom host and port
|
|
161
|
+
agentflow play --host 127.0.0.1 --port 9000
|
|
162
|
+
|
|
163
|
+
# Custom config file
|
|
164
|
+
agentflow play --config production.json
|
|
165
|
+
|
|
166
|
+
# Disable auto-reload
|
|
167
|
+
agentflow play --no-reload
|
|
168
|
+
```
|
|
169
|
+
|
|
145
170
|
### `agentflow build`
|
|
146
171
|
|
|
147
172
|
Generate production Docker files.
|
|
@@ -4,6 +4,7 @@ README.md
|
|
|
4
4
|
agentflow.json
|
|
5
5
|
plan.md
|
|
6
6
|
pyproject.toml
|
|
7
|
+
requirements.txt
|
|
7
8
|
10xscale_agentflow_cli.egg-info/PKG-INFO
|
|
8
9
|
10xscale_agentflow_cli.egg-info/SOURCES.txt
|
|
9
10
|
10xscale_agentflow_cli.egg-info/dependency_links.txt
|
|
@@ -21,6 +22,7 @@ agentflow_cli/cli/commands/__init__.py
|
|
|
21
22
|
agentflow_cli/cli/commands/api.py
|
|
22
23
|
agentflow_cli/cli/commands/build.py
|
|
23
24
|
agentflow_cli/cli/commands/init.py
|
|
25
|
+
agentflow_cli/cli/commands/skills.py
|
|
24
26
|
agentflow_cli/cli/commands/version.py
|
|
25
27
|
agentflow_cli/cli/core/__init__.py
|
|
26
28
|
agentflow_cli/cli/core/config.py
|
|
@@ -28,6 +30,36 @@ agentflow_cli/cli/core/output.py
|
|
|
28
30
|
agentflow_cli/cli/core/validation.py
|
|
29
31
|
agentflow_cli/cli/templates/__init__.py
|
|
30
32
|
agentflow_cli/cli/templates/defaults.py
|
|
33
|
+
agentflow_cli/cli/templates/skills/agent-skills/SKILL.md
|
|
34
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/agents-and-tools.md
|
|
35
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/api-client.md
|
|
36
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/api-configuration.md
|
|
37
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/api-settings-and-middleware.md
|
|
38
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/architecture.md
|
|
39
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/auth-and-authorization.md
|
|
40
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/callbacks-and-command.md
|
|
41
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/checkpointing-and-threads.md
|
|
42
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/cli-commands.md
|
|
43
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/client-auth-and-errors.md
|
|
44
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/client-messages-invoke-stream.md
|
|
45
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/client-threads-memory-files.md
|
|
46
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/context-id-background.md
|
|
47
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/dependency-injection.md
|
|
48
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/id-and-thread-name-generators.md
|
|
49
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/media-and-files.md
|
|
50
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/memory-and-store.md
|
|
51
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/prebuilt-agents-and-tools.md
|
|
52
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/production-runtime.md
|
|
53
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/providers-and-adapters.md
|
|
54
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/publishers-and-runtime-protocols.md
|
|
55
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/remote-tools.md
|
|
56
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/rest-api-and-errors.md
|
|
57
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/security-and-validators.md
|
|
58
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/state-and-messages.md
|
|
59
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/state-graph.md
|
|
60
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/streaming.md
|
|
61
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/testing-and-evaluation.md
|
|
62
|
+
agentflow_cli/cli/templates/skills/copilot/agentflow.instructions.md
|
|
31
63
|
agentflow_cli/src/__init__.py
|
|
32
64
|
agentflow_cli/src/app/__init__.py
|
|
33
65
|
agentflow_cli/src/app/loader.py
|
|
@@ -42,6 +74,7 @@ agentflow_cli/src/app/core/auth/jwt_auth.py
|
|
|
42
74
|
agentflow_cli/src/app/core/auth/permissions.py
|
|
43
75
|
agentflow_cli/src/app/core/config/__init__.py
|
|
44
76
|
agentflow_cli/src/app/core/config/graph_config.py
|
|
77
|
+
agentflow_cli/src/app/core/config/media_settings.py
|
|
45
78
|
agentflow_cli/src/app/core/config/sentry_config.py
|
|
46
79
|
agentflow_cli/src/app/core/config/settings.py
|
|
47
80
|
agentflow_cli/src/app/core/config/setup_logs.py
|
|
@@ -73,6 +106,10 @@ agentflow_cli/src/app/routers/graph/schemas/__init__.py
|
|
|
73
106
|
agentflow_cli/src/app/routers/graph/schemas/graph_schemas.py
|
|
74
107
|
agentflow_cli/src/app/routers/graph/services/__init__.py
|
|
75
108
|
agentflow_cli/src/app/routers/graph/services/graph_service.py
|
|
109
|
+
agentflow_cli/src/app/routers/graph/services/multimodal_preprocessor.py
|
|
110
|
+
agentflow_cli/src/app/routers/media/__init__.py
|
|
111
|
+
agentflow_cli/src/app/routers/media/router.py
|
|
112
|
+
agentflow_cli/src/app/routers/media/schemas.py
|
|
76
113
|
agentflow_cli/src/app/routers/ping/__init__.py
|
|
77
114
|
agentflow_cli/src/app/routers/ping/router.py
|
|
78
115
|
agentflow_cli/src/app/routers/store/__init__.py
|
|
@@ -90,6 +127,9 @@ agentflow_cli/src/app/utils/response_helper.py
|
|
|
90
127
|
agentflow_cli/src/app/utils/snowflake_id_generator.py
|
|
91
128
|
agentflow_cli/src/app/utils/swagger_helper.py
|
|
92
129
|
agentflow_cli/src/app/utils/thread_name_generator.py
|
|
130
|
+
agentflow_cli/src/app/utils/media/__init__.py
|
|
131
|
+
agentflow_cli/src/app/utils/media/extractor.py
|
|
132
|
+
agentflow_cli/src/app/utils/media/pipeline.py
|
|
93
133
|
agentflow_cli/src/app/utils/schemas/__init__.py
|
|
94
134
|
agentflow_cli/src/app/utils/schemas/output_schemas.py
|
|
95
135
|
agentflow_cli/src/app/utils/schemas/user_schemas.py
|
|
@@ -97,4 +137,6 @@ graph/__init__.py
|
|
|
97
137
|
graph/react.py
|
|
98
138
|
graph/thread_name_generator.py
|
|
99
139
|
scripts/generate_docs.py
|
|
140
|
+
tests/test_multimodal_sprint2_extraction.py
|
|
141
|
+
tests/test_sprint4_media_api.py
|
|
100
142
|
tests/test_utils_parse_and_callable.py
|
|
@@ -6,6 +6,7 @@ include example_weather_agent.py
|
|
|
6
6
|
recursive-include agentflow_cli *.json
|
|
7
7
|
recursive-include agentflow_cli *.yaml
|
|
8
8
|
recursive-include agentflow_cli *.yml
|
|
9
|
+
recursive-include agentflow_cli *.md
|
|
9
10
|
recursive-include agentflow_cli *.py
|
|
10
11
|
recursive-include src *.json
|
|
11
12
|
recursive-include src *.yaml
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: 10xscale-agentflow-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.1
|
|
4
4
|
Summary: CLI and API for 10xscale AgentFlow
|
|
5
5
|
Author-email: 10xscale <contact@10xscale.ai>
|
|
6
6
|
Maintainer-email: Shudipto Trafder <shudiptotrafder@gmail.com>
|
|
@@ -21,7 +21,7 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
|
21
21
|
Classifier: Topic :: Internet :: WWW/HTTP :: HTTP Servers
|
|
22
22
|
Requires-Python: >=3.12
|
|
23
23
|
Description-Content-Type: text/markdown
|
|
24
|
-
Requires-Dist: 10xscale-agentflow>=0.
|
|
24
|
+
Requires-Dist: 10xscale-agentflow>=0.7.0
|
|
25
25
|
Requires-Dist: fastapi
|
|
26
26
|
Requires-Dist: gunicorn
|
|
27
27
|
Requires-Dist: orjson
|
|
@@ -32,6 +32,7 @@ Requires-Dist: uvicorn
|
|
|
32
32
|
Requires-Dist: typer
|
|
33
33
|
Requires-Dist: python-dotenv
|
|
34
34
|
Requires-Dist: PyJWT
|
|
35
|
+
Requires-Dist: textxtract[docx,html,md,pdf,xml]>=0.2.0
|
|
35
36
|
Provides-Extra: sentry
|
|
36
37
|
Requires-Dist: sentry-sdk>=2.10.0; extra == "sentry"
|
|
37
38
|
Provides-Extra: firebase
|
|
@@ -81,6 +82,12 @@ agentflow init --prod
|
|
|
81
82
|
agentflow api
|
|
82
83
|
```
|
|
83
84
|
|
|
85
|
+
### Start API With Play
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
agentflow play
|
|
89
|
+
```
|
|
90
|
+
|
|
84
91
|
### Generate Docker Files
|
|
85
92
|
|
|
86
93
|
```bash
|
|
@@ -142,6 +149,24 @@ agentflow api --no-reload
|
|
|
142
149
|
agentflow api --verbose
|
|
143
150
|
```
|
|
144
151
|
|
|
152
|
+
### `agentflow play`
|
|
153
|
+
|
|
154
|
+
Start the development API server and open the hosted playground with your local backend URL preconfigured.
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
# Start with defaults and open the playground
|
|
158
|
+
agentflow play
|
|
159
|
+
|
|
160
|
+
# Custom host and port
|
|
161
|
+
agentflow play --host 127.0.0.1 --port 9000
|
|
162
|
+
|
|
163
|
+
# Custom config file
|
|
164
|
+
agentflow play --config production.json
|
|
165
|
+
|
|
166
|
+
# Disable auto-reload
|
|
167
|
+
agentflow play --no-reload
|
|
168
|
+
```
|
|
169
|
+
|
|
145
170
|
### `agentflow build`
|
|
146
171
|
|
|
147
172
|
Generate production Docker files.
|
|
@@ -35,6 +35,12 @@ agentflow init --prod
|
|
|
35
35
|
agentflow api
|
|
36
36
|
```
|
|
37
37
|
|
|
38
|
+
### Start API With Play
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
agentflow play
|
|
42
|
+
```
|
|
43
|
+
|
|
38
44
|
### Generate Docker Files
|
|
39
45
|
|
|
40
46
|
```bash
|
|
@@ -96,6 +102,24 @@ agentflow api --no-reload
|
|
|
96
102
|
agentflow api --verbose
|
|
97
103
|
```
|
|
98
104
|
|
|
105
|
+
### `agentflow play`
|
|
106
|
+
|
|
107
|
+
Start the development API server and open the hosted playground with your local backend URL preconfigured.
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
# Start with defaults and open the playground
|
|
111
|
+
agentflow play
|
|
112
|
+
|
|
113
|
+
# Custom host and port
|
|
114
|
+
agentflow play --host 127.0.0.1 --port 9000
|
|
115
|
+
|
|
116
|
+
# Custom config file
|
|
117
|
+
agentflow play --config production.json
|
|
118
|
+
|
|
119
|
+
# Disable auto-reload
|
|
120
|
+
agentflow play --no-reload
|
|
121
|
+
```
|
|
122
|
+
|
|
99
123
|
### `agentflow build`
|
|
100
124
|
|
|
101
125
|
Generate production Docker files.
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
"""API server command implementation."""
|
|
2
|
+
|
|
3
|
+
import ipaddress
|
|
4
|
+
import os
|
|
5
|
+
import socket
|
|
6
|
+
import sys
|
|
7
|
+
import threading
|
|
8
|
+
import time
|
|
9
|
+
import webbrowser
|
|
10
|
+
from pathlib import Path
|
|
11
|
+
from typing import Any
|
|
12
|
+
from urllib.parse import urlencode
|
|
13
|
+
|
|
14
|
+
import uvicorn
|
|
15
|
+
from dotenv import load_dotenv
|
|
16
|
+
|
|
17
|
+
from agentflow_cli.cli.commands import BaseCommand
|
|
18
|
+
from agentflow_cli.cli.constants import (
|
|
19
|
+
DEFAULT_CONFIG_FILE,
|
|
20
|
+
DEFAULT_HOST,
|
|
21
|
+
DEFAULT_PLAYGROUND_URL,
|
|
22
|
+
DEFAULT_PORT,
|
|
23
|
+
)
|
|
24
|
+
from agentflow_cli.cli.core.config import ConfigManager
|
|
25
|
+
from agentflow_cli.cli.core.validation import validate_cli_options
|
|
26
|
+
from agentflow_cli.cli.exceptions import ConfigurationError, ServerError
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class APICommand(BaseCommand):
|
|
30
|
+
"""Command to start the Pyagenity API server."""
|
|
31
|
+
|
|
32
|
+
_PLAYGROUND_WAIT_TIMEOUT_SECONDS = 30.0
|
|
33
|
+
_PLAYGROUND_WAIT_INTERVAL_SECONDS = 0.25
|
|
34
|
+
|
|
35
|
+
def execute(
|
|
36
|
+
self,
|
|
37
|
+
config: str = DEFAULT_CONFIG_FILE,
|
|
38
|
+
host: str = DEFAULT_HOST,
|
|
39
|
+
port: int = DEFAULT_PORT,
|
|
40
|
+
reload: bool = True,
|
|
41
|
+
open_playground: bool = False,
|
|
42
|
+
playground_url: str = DEFAULT_PLAYGROUND_URL,
|
|
43
|
+
**kwargs: Any,
|
|
44
|
+
) -> int:
|
|
45
|
+
"""Execute the API server command.
|
|
46
|
+
|
|
47
|
+
Args:
|
|
48
|
+
config: Path to config file
|
|
49
|
+
host: Host to bind to
|
|
50
|
+
port: Port to bind to
|
|
51
|
+
reload: Enable auto-reload
|
|
52
|
+
open_playground: Open the hosted playground after the API becomes reachable
|
|
53
|
+
playground_url: Hosted playground base URL
|
|
54
|
+
**kwargs: Additional arguments
|
|
55
|
+
|
|
56
|
+
Returns:
|
|
57
|
+
Exit code
|
|
58
|
+
"""
|
|
59
|
+
try:
|
|
60
|
+
# Print banner
|
|
61
|
+
self.output.print_banner(
|
|
62
|
+
"API (development)",
|
|
63
|
+
"Starting development server via Uvicorn. Not for production use.",
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
# Validate inputs
|
|
67
|
+
validated_options = validate_cli_options(host, port, config)
|
|
68
|
+
|
|
69
|
+
# Load configuration
|
|
70
|
+
config_manager = ConfigManager()
|
|
71
|
+
actual_config_path = config_manager.find_config_file(validated_options["config"])
|
|
72
|
+
# Load and validate config
|
|
73
|
+
config_manager.load_config(str(actual_config_path))
|
|
74
|
+
|
|
75
|
+
# Load environment file if specified
|
|
76
|
+
env_file_path = config_manager.resolve_env_file()
|
|
77
|
+
if env_file_path:
|
|
78
|
+
self.logger.info("Loading environment from: %s", env_file_path)
|
|
79
|
+
load_dotenv(env_file_path)
|
|
80
|
+
else:
|
|
81
|
+
# Load default .env if it exists
|
|
82
|
+
load_dotenv()
|
|
83
|
+
|
|
84
|
+
# Set environment variables
|
|
85
|
+
os.environ["GRAPH_PATH"] = str(actual_config_path)
|
|
86
|
+
|
|
87
|
+
# Add project root to sys.path for importing graph modules
|
|
88
|
+
sys.path.insert(0, str(actual_config_path.parent))
|
|
89
|
+
|
|
90
|
+
# Ensure we're using the correct module path
|
|
91
|
+
sys.path.insert(0, str(Path(__file__).parent.parent.parent))
|
|
92
|
+
|
|
93
|
+
self.logger.info(
|
|
94
|
+
"Starting API with config: %s, host: %s, port: %d",
|
|
95
|
+
actual_config_path,
|
|
96
|
+
validated_options["host"],
|
|
97
|
+
validated_options["port"],
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
if open_playground:
|
|
101
|
+
self._schedule_playground_launch(
|
|
102
|
+
host=validated_options["host"],
|
|
103
|
+
port=validated_options["port"],
|
|
104
|
+
playground_base_url=playground_url,
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
# Start the server
|
|
108
|
+
uvicorn.run(
|
|
109
|
+
"agentflow_cli.src.app.main:app",
|
|
110
|
+
host=validated_options["host"],
|
|
111
|
+
port=validated_options["port"],
|
|
112
|
+
reload=reload,
|
|
113
|
+
workers=1,
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
return 0
|
|
117
|
+
|
|
118
|
+
except (ConfigurationError, ServerError) as e:
|
|
119
|
+
return self.handle_error(e)
|
|
120
|
+
except Exception as e:
|
|
121
|
+
server_error = ServerError(
|
|
122
|
+
f"Failed to start API server: {e}",
|
|
123
|
+
host=host,
|
|
124
|
+
port=port,
|
|
125
|
+
)
|
|
126
|
+
return self.handle_error(server_error)
|
|
127
|
+
|
|
128
|
+
def _schedule_playground_launch(
|
|
129
|
+
self,
|
|
130
|
+
host: str,
|
|
131
|
+
port: int,
|
|
132
|
+
playground_base_url: str,
|
|
133
|
+
) -> None:
|
|
134
|
+
browser_host = self._normalize_browser_host(host)
|
|
135
|
+
launch_url = self._build_playground_url(browser_host, port, playground_base_url)
|
|
136
|
+
self.output.info(
|
|
137
|
+
f"Playground will open at {launch_url} when the API is ready.",
|
|
138
|
+
emoji=False,
|
|
139
|
+
)
|
|
140
|
+
launch_thread = threading.Thread(
|
|
141
|
+
target=self._open_playground_when_ready,
|
|
142
|
+
args=(launch_url, browser_host, port),
|
|
143
|
+
daemon=True,
|
|
144
|
+
name="agentflow-playground-launcher",
|
|
145
|
+
)
|
|
146
|
+
launch_thread.start()
|
|
147
|
+
|
|
148
|
+
def _open_playground_when_ready(
|
|
149
|
+
self,
|
|
150
|
+
launch_url: str,
|
|
151
|
+
host: str,
|
|
152
|
+
port: int,
|
|
153
|
+
) -> None:
|
|
154
|
+
if not self._wait_for_server(host, port):
|
|
155
|
+
self.logger.warning(
|
|
156
|
+
"API server did not become reachable in time. Open the playground manually: %s",
|
|
157
|
+
launch_url,
|
|
158
|
+
)
|
|
159
|
+
return
|
|
160
|
+
|
|
161
|
+
opened = webbrowser.open_new_tab(launch_url)
|
|
162
|
+
if opened:
|
|
163
|
+
self.logger.info("Opened playground URL: %s", launch_url)
|
|
164
|
+
return
|
|
165
|
+
|
|
166
|
+
self.logger.warning(
|
|
167
|
+
"Browser launch returned false. Open the playground manually: %s",
|
|
168
|
+
launch_url,
|
|
169
|
+
)
|
|
170
|
+
|
|
171
|
+
def _wait_for_server(
|
|
172
|
+
self,
|
|
173
|
+
host: str,
|
|
174
|
+
port: int,
|
|
175
|
+
) -> bool:
|
|
176
|
+
deadline = time.monotonic() + self._PLAYGROUND_WAIT_TIMEOUT_SECONDS
|
|
177
|
+
while time.monotonic() < deadline:
|
|
178
|
+
try:
|
|
179
|
+
with socket.create_connection((host, port), timeout=1):
|
|
180
|
+
return True
|
|
181
|
+
except OSError:
|
|
182
|
+
time.sleep(self._PLAYGROUND_WAIT_INTERVAL_SECONDS)
|
|
183
|
+
|
|
184
|
+
return False
|
|
185
|
+
|
|
186
|
+
def _build_playground_url(
|
|
187
|
+
self,
|
|
188
|
+
host: str,
|
|
189
|
+
port: int,
|
|
190
|
+
playground_base_url: str,
|
|
191
|
+
) -> str:
|
|
192
|
+
backend_host = host
|
|
193
|
+
if ":" in backend_host and not backend_host.startswith("["):
|
|
194
|
+
backend_host = f"[{backend_host}]"
|
|
195
|
+
|
|
196
|
+
backend_url = f"http://{backend_host}:{port}"
|
|
197
|
+
return f"{playground_base_url}?{urlencode({'backendUrl': backend_url})}"
|
|
198
|
+
|
|
199
|
+
def _normalize_browser_host(self, host: str) -> str:
|
|
200
|
+
if not host:
|
|
201
|
+
return "127.0.0.1"
|
|
202
|
+
|
|
203
|
+
normalized_host = host[1:-1] if host.startswith("[") and host.endswith("]") else host
|
|
204
|
+
|
|
205
|
+
try:
|
|
206
|
+
if ipaddress.ip_address(normalized_host).is_unspecified:
|
|
207
|
+
return "127.0.0.1"
|
|
208
|
+
except ValueError:
|
|
209
|
+
pass
|
|
210
|
+
|
|
211
|
+
return normalized_host
|