10xgraph-api 0.7.0__tar.gz → 0.9.0__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.
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/10xgraph_api.egg-info/PKG-INFO +60 -21
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/10xgraph_api.egg-info/SOURCES.txt +7 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/10xgraph_api.egg-info/requires.txt +7 -4
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/CHANGELOG.md +169 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/PKG-INFO +60 -21
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/README.md +51 -14
- 10xgraph_api-0.9.0/RELEASE_NOTES.md +42 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/SECURITY.md +34 -2
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/pyproject.toml +16 -13
- 10xgraph_api-0.9.0/tenxgraph_api/_slim_image.py +120 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/commands/api.py +17 -1
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/commands/build.py +32 -2
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/commands/demo.py +3 -4
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/commands/init.py +128 -8
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/config_editor/schema.py +133 -7
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/config_editor/validation.py +32 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/constants.py +1 -1
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/core/animations.py +0 -4
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/main.py +14 -115
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/defaults.py +83 -46
- 10xgraph_api-0.9.0/tenxgraph_api/cli/templates/dev/.env.example +1 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/dev/graph/agent.py +2 -2
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/prod/.env.example +3 -1
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/prod/evals/user_simulator_eval.py +2 -1
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/prod/graph/agent.py +7 -2
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/prod/pyproject.toml +2 -3
- 10xgraph_api-0.9.0/tenxgraph_api/cli/templates/prod/tests/conftest.py +6 -0
- 10xgraph_api-0.9.0/tenxgraph_api/cli/templates/prod/tests/test_graph_nodes.py +24 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/skills/10xgraph/SKILL.md +5 -5
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/skills/10xgraph/references/api-client.md +7 -7
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/skills/10xgraph/references/architecture.md +5 -5
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/skills/10xgraph/references/auth-and-authorization.md +1 -1
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/skills/10xgraph/references/callbacks-and-command.md +1 -1
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/skills/10xgraph/references/checkpointing-and-threads.md +1 -1
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/skills/10xgraph/references/cli-commands.md +9 -13
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/skills/10xgraph/references/client-auth-and-errors.md +12 -12
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/skills/10xgraph/references/client-messages-invoke-stream.md +8 -8
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/skills/10xgraph/references/client-threads-memory-files.md +5 -5
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/skills/10xgraph/references/media-and-files.md +1 -1
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/skills/10xgraph/references/memory-and-store.md +1 -1
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/skills/10xgraph/references/production-runtime.md +2 -3
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/skills/10xgraph/references/realtime.md +1 -1
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/skills/10xgraph/references/remote-tools.md +1 -1
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/skills/10xgraph/references/state-and-messages.md +1 -1
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/skills/10xgraph/references/streaming.md +2 -2
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/skills/copilot/10xgraph.instructions.md +4 -4
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/core/auth/authorization.py +115 -25
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/core/auth/base_auth.py +5 -0
- 10xgraph_api-0.9.0/tenxgraph_api/src/app/core/auth/identity_cache.py +68 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/core/auth/jwt_auth.py +3 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/core/auth/ownership_resolver.py +75 -6
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/core/auth/permissions.py +58 -5
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/core/auth/request_config.py +59 -0
- 10xgraph_api-0.9.0/tenxgraph_api/src/app/core/auth/revocation.py +219 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/core/auth/route_guard.py +1 -0
- 10xgraph_api-0.9.0/tenxgraph_api/src/app/core/concurrency.py +200 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/core/config/graph_config.py +220 -5
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/core/config/media_settings.py +12 -3
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/core/config/settings.py +22 -5
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/core/config/setup_middleware.py +78 -82
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/core/exceptions/handle_errors.py +8 -2
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/core/middleware/rate_limit/factory.py +5 -2
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/core/middleware/rate_limit/keying.py +24 -9
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/core/middleware/rate_limit/middleware.py +39 -20
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/core/middleware/security_headers.py +44 -62
- 10xgraph_api-0.9.0/tenxgraph_api/src/app/core/utils/container.py +21 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/core/utils/log_sanitizer.py +10 -1
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/loader.py +138 -17
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/main.py +28 -5
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/routers/ag_ui/converter.py +8 -6
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/routers/ag_ui/router.py +16 -8
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/routers/checkpointer/services/checkpointer_service.py +60 -9
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/routers/graph/realtime_guard.py +54 -6
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/routers/graph/router.py +144 -43
- 10xgraph_api-0.9.0/tenxgraph_api/src/app/routers/graph/run_limits.py +100 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/routers/graph/services/graph_service.py +246 -73
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/routers/graph/services/multimodal_preprocessor.py +5 -2
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/routers/media/__init__.py +33 -8
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/routers/media/router.py +58 -21
- 10xgraph_api-0.9.0/tenxgraph_api/src/app/routers/ping/readiness.py +142 -0
- 10xgraph_api-0.9.0/tenxgraph_api/src/app/routers/ping/router.py +65 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/routers/setup_router.py +44 -2
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/utils/callable_helper.py +1 -1
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/utils/response_helper.py +26 -5
- 10xgraph_api-0.7.0/RELEASE_NOTES.md +0 -51
- 10xgraph_api-0.7.0/tenxgraph_api/cli/templates/dev/.env.example +0 -1
- 10xgraph_api-0.7.0/tenxgraph_api/cli/templates/prod/tests/conftest.py +0 -6
- 10xgraph_api-0.7.0/tenxgraph_api/cli/templates/prod/tests/test_graph_nodes.py +0 -57
- 10xgraph_api-0.7.0/tenxgraph_api/src/app/routers/ping/router.py +0 -28
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/10xgraph.json +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/10xgraph_api.egg-info/dependency_links.txt +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/10xgraph_api.egg-info/entry_points.txt +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/10xgraph_api.egg-info/not-zip-safe +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/10xgraph_api.egg-info/top_level.txt +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/CODE_OF_CONDUCT.md +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/CONTRIBUTING.md +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/LICENSE +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/MANIFEST.in +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/agentflow_cli/__init__.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/setup.cfg +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/__init__.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/__init__.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/capabilities.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/commands/__init__.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/commands/audit.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/commands/config.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/commands/eval.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/commands/skills.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/commands/test.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/commands/version.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/config_editor/__init__.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/config_editor/server.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/config_editor/static/app.css +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/config_editor/static/app.js +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/config_editor/static/favicon.svg +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/config_editor/static/index.html +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/config_editor/store.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/context.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/core/__init__.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/core/config.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/core/output.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/core/prompts.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/core/screen.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/core/steps.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/core/theme.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/core/validation.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/exceptions.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/logger.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/__init__.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/dev/10xgraph.json +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/dev/graph/__init__.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/prod/.pre-commit-config.yaml +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/prod/.python-version +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/prod/10xgraph.json +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/prod/auth/__init__.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/prod/auth/agent_auth.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/prod/evals/__init__.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/prod/evals/weather_agents_eval.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/prod/graph/__init__.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/prod/graph/state.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/prod/graph/thread_name_generator.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/prod/graph/tools/__init__.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/prod/graph/tools/weather_tool.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/prod/graph/validators/__init__.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/prod/graph/validators/lifecyle.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/prod/graph/validators/manager.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/prod/graph/validators/validators.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/prod/tests/__init__.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/prod/tests/test_agent_eval.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/prod/tests/test_catalog_tools.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/skills/10xgraph/references/agents-and-tools.md +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/skills/10xgraph/references/api-configuration.md +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/skills/10xgraph/references/api-settings-and-middleware.md +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/skills/10xgraph/references/context-id-background.md +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/skills/10xgraph/references/dependency-injection.md +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/skills/10xgraph/references/evaluation.md +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/skills/10xgraph/references/id-and-thread-name-generators.md +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/skills/10xgraph/references/prebuilt-agents-and-tools.md +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/skills/10xgraph/references/providers-and-adapters.md +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/skills/10xgraph/references/publishers-and-runtime-protocols.md +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/skills/10xgraph/references/rate-limiting.md +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/skills/10xgraph/references/rest-api-and-errors.md +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/skills/10xgraph/references/security-and-validators.md +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/skills/10xgraph/references/state-graph.md +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/skills/10xgraph/references/stream-emitter.md +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/skills/10xgraph/references/testing-and-evaluation.md +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/cli/templates/skills/10xgraph/references/unit-testing.md +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/py.typed +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/__init__.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/__init__.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/core/__init__.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/core/auth/__init__.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/core/auth/auth_backend.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/core/config/__init__.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/core/config/sentry_config.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/core/config/setup_logs.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/core/config/worker_middleware.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/core/exceptions/__init__.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/core/exceptions/general_exception.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/core/exceptions/resources_exceptions.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/core/exceptions/user_exception.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/core/middleware/__init__.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/core/middleware/rate_limit/__init__.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/core/middleware/rate_limit/base.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/core/middleware/rate_limit/memory.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/core/middleware/rate_limit/redis.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/core/middleware/request_limits.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/core/utils/__init__.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/routers/__init__.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/routers/ag_ui/__init__.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/routers/ag_ui/event_mapper.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/routers/ag_ui/service.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/routers/checkpointer/__init__.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/routers/checkpointer/router.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/routers/checkpointer/schemas/__init__.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/routers/checkpointer/schemas/checkpointer_schemas.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/routers/checkpointer/services/__init__.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/routers/evals/__init__.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/routers/evals/router.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/routers/evals/services/__init__.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/routers/evals/services/eval_report_service.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/routers/graph/__init__.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/routers/graph/schemas/__init__.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/routers/graph/schemas/graph_schemas.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/routers/graph/services/__init__.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/routers/media/schemas.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/routers/ping/__init__.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/routers/store/__init__.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/routers/store/router.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/routers/store/schemas/__init__.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/routers/store/schemas/store_schemas.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/routers/store/services/__init__.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/routers/store/services/store_service.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/tasks/__init__.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/tasks/user_tasks.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/utils/__init__.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/utils/media/__init__.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/utils/media/extractor.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/utils/media/pipeline.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/utils/parse_output.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/utils/schemas/__init__.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/utils/schemas/output_schemas.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/utils/schemas/user_schemas.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/utils/snowflake_id_generator.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/utils/swagger_helper.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/utils/telemetry_store.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/utils/thread_name_generator.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tenxgraph_api/src/app/worker.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tests/test_agentflow_cli_alias.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tests/test_multimodal_sprint2_extraction.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tests/test_sprint4_media_api.py +0 -0
- {10xgraph_api-0.7.0 → 10xgraph_api-0.9.0}/tests/test_utils_parse_and_callable.py +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: 10xgraph-api
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.9.0
|
|
4
4
|
Summary: Production server for 10xGraph agents (formerly 10xscale-agentflow-cli). Serves a compiled graph over REST, SSE, WebSocket, realtime audio and AG-UI with JWT or custom auth, scoped authorization on every endpoint, owner-only threads and rate limiting, and generates Docker Compose and Kubernetes files. Includes the 10xgraph CLI. MIT licensed, self-hosted.
|
|
5
5
|
Author-email: Shudipto Trafder <shudiptotrafder@gmail.com>
|
|
6
6
|
Maintainer-email: Shudipto Trafder <shudiptotrafder@gmail.com>, 10xScale <contact@10xscale.ai>
|
|
7
|
-
License: MIT
|
|
7
|
+
License-Expression: MIT
|
|
8
8
|
Project-URL: Homepage, https://10xgraph.com
|
|
9
9
|
Project-URL: Repository, https://github.com/10xGraph/10xgraph-api
|
|
10
10
|
Project-URL: Issues, https://github.com/10xGraph/10xgraph-api/issues
|
|
@@ -13,11 +13,12 @@ Project-URL: Changelog, https://github.com/10xGraph/10xgraph-api/blob/main/CHANG
|
|
|
13
13
|
Keywords: 10xgraph,10xscale,agentflow,agents,ai-agents,multi-agent,agent-server,agent-deployment,llm,fastapi,api-server,rest-api,sse,websocket,realtime-audio,ag-ui,jwt,authentication,authorization,rbac,multi-tenant,rate-limiting,self-hosted,production,docker,kubernetes,cli
|
|
14
14
|
Classifier: Development Status :: 4 - Beta
|
|
15
15
|
Classifier: Intended Audience :: Developers
|
|
16
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
17
16
|
Classifier: Operating System :: OS Independent
|
|
18
17
|
Classifier: Programming Language :: Python :: 3
|
|
19
18
|
Classifier: Programming Language :: Python :: 3.12
|
|
20
19
|
Classifier: Programming Language :: Python :: 3.13
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.15
|
|
21
22
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
22
23
|
Classifier: Topic :: Internet :: WWW/HTTP :: HTTP Servers
|
|
23
24
|
Requires-Python: >=3.12
|
|
@@ -25,13 +26,10 @@ Description-Content-Type: text/markdown
|
|
|
25
26
|
License-File: LICENSE
|
|
26
27
|
Requires-Dist: 10xgraph<2.0,>=0.10.0
|
|
27
28
|
Requires-Dist: fastapi<1.0,>=0.116
|
|
28
|
-
Requires-Dist: gunicorn<24,>=23.0
|
|
29
|
-
Requires-Dist: orjson<4,>=3.11
|
|
30
|
-
Requires-Dist: platformdirs<5,>=4.0
|
|
31
29
|
Requires-Dist: python-multipart<0.1,>=0.0.19
|
|
32
30
|
Requires-Dist: pydantic<3,>=2.13
|
|
33
31
|
Requires-Dist: pydantic-settings<3,>=2.3
|
|
34
|
-
Requires-Dist: uvicorn<1.0,>=0.
|
|
32
|
+
Requires-Dist: uvicorn<1.0,>=0.36
|
|
35
33
|
Requires-Dist: typer<1.0,>=0.17
|
|
36
34
|
Requires-Dist: python-dotenv<2,>=1.0
|
|
37
35
|
Requires-Dist: questionary<3,>=2.0
|
|
@@ -49,6 +47,8 @@ Provides-Extra: jwt
|
|
|
49
47
|
Requires-Dist: PyJWT<3,>=2.8; extra == "jwt"
|
|
50
48
|
Provides-Extra: media
|
|
51
49
|
Requires-Dist: textxtract[docx,html,md,pdf,xml]>=0.2.0; extra == "media"
|
|
50
|
+
Provides-Extra: images
|
|
51
|
+
Requires-Dist: 10xgraph[images]<2.0,>=0.10.0; extra == "images"
|
|
52
52
|
Provides-Extra: gcloud
|
|
53
53
|
Requires-Dist: google-cloud-logging; extra == "gcloud"
|
|
54
54
|
Provides-Extra: otel
|
|
@@ -58,6 +58,8 @@ Requires-Dist: opentelemetry-instrumentation-fastapi>=0.40b0; extra == "otel"
|
|
|
58
58
|
Requires-Dist: opentelemetry-exporter-otlp>=1.20.0; extra == "otel"
|
|
59
59
|
Provides-Extra: ag-ui
|
|
60
60
|
Requires-Dist: ag-ui-protocol<2,>=1.0; extra == "ag-ui"
|
|
61
|
+
Provides-Extra: websocket
|
|
62
|
+
Requires-Dist: websockets<17,>=13.0; extra == "websocket"
|
|
61
63
|
Dynamic: license-file
|
|
62
64
|
|
|
63
65
|
# 10xGraph API
|
|
@@ -93,7 +95,7 @@ Not built in: automatic per-tool permissions (user A may call `refund`, user B m
|
|
|
93
95
|
|---|---|---|
|
|
94
96
|
| [`10xgraph`](https://github.com/10xGraph/10xGraph) | Core engine: graph, state, replay-safe tools, checkpointing, memory | `pip install 10xgraph` (pulled in by this package) |
|
|
95
97
|
| `10xgraph-api` (this repository) | Production server and the `10xgraph` command | `pip install 10xgraph-api` |
|
|
96
|
-
| [`10xgraph-client`](https://github.com/10xGraph/10xgraph-client) | Typed TypeScript client for every endpoint | `npm install 10xgraph-client`
|
|
98
|
+
| [`10xgraph-client`](https://github.com/10xGraph/10xgraph-client) | Typed TypeScript client for every endpoint | `npm install 10xgraph-client` |
|
|
97
99
|
|
|
98
100
|
Docs: [10xgraph.com](https://10xgraph.com).
|
|
99
101
|
|
|
@@ -151,11 +153,17 @@ Optional extras; install only what you configure:
|
|
|
151
153
|
pip install "10xgraph-api[redis]" # Redis rate-limit / cache backend
|
|
152
154
|
pip install "10xgraph-api[jwt]" # JWT authentication
|
|
153
155
|
pip install "10xgraph-api[media]" # Document text extraction (multimodal)
|
|
156
|
+
pip install "10xgraph-api[images]" # Image resize / EXIF / format conversion (Pillow)
|
|
157
|
+
pip install "10xgraph-api[ag-ui]" # AG-UI endpoint
|
|
158
|
+
pip install "10xgraph-api[websocket]" # WebSocket streaming + realtime audio
|
|
154
159
|
pip install "10xgraph-api[otel]" # OpenTelemetry tracing
|
|
155
160
|
pip install "10xgraph-api[snowflakekit]" # Snowflake ID generation
|
|
161
|
+
pip install "10xgraph-api[sentry]" # Sentry error reporting
|
|
162
|
+
pip install "10xgraph-api[firebase]" # Firebase Admin SDK
|
|
163
|
+
pip install "10xgraph-api[gcloud]" # Google Cloud Logging
|
|
156
164
|
```
|
|
157
165
|
|
|
158
|
-
Requires Python 3.12 or newer. Installs the core `10xgraph` framework as a dependency.
|
|
166
|
+
Requires Python 3.12 or newer. Tested on 3.12, 3.13, 3.14 and 3.15. Installs the core `10xgraph` framework as a dependency.
|
|
159
167
|
|
|
160
168
|
---
|
|
161
169
|
|
|
@@ -175,9 +183,6 @@ Requires Python 3.12 or newer. Installs the core `10xgraph` framework as a depen
|
|
|
175
183
|
10xgraph build --docker-compose
|
|
176
184
|
```
|
|
177
185
|
|
|
178
|
-
`10xgraph api` (server only) and `10xgraph play` (server + playground) remain
|
|
179
|
-
available; `dev` is the goal-oriented wrapper around them.
|
|
180
|
-
|
|
181
186
|
---
|
|
182
187
|
|
|
183
188
|
## CLI commands
|
|
@@ -195,9 +200,17 @@ Initialize a new project with configuration and a sample graph.
|
|
|
195
200
|
10xgraph init --path ./my-app --name MyAgent --template quick-start \
|
|
196
201
|
--non-interactive # reproducible CI/agent workflow
|
|
197
202
|
10xgraph init --path ./my-app --template production --auth jwt \
|
|
198
|
-
--rate-limit redis --yes --dry-run
|
|
203
|
+
--rate-limit redis --provider openai --yes --dry-run
|
|
199
204
|
```
|
|
200
205
|
|
|
206
|
+
`init` asks which AI provider to use (`--provider google|openai|anthropic`, default `google`)
|
|
207
|
+
and writes the matching model and API key variable. It also asks whether to enable WebSocket
|
|
208
|
+
streaming and realtime audio (`--websocket`, default off); off leaves `/v1/graph/ws` and
|
|
209
|
+
`/v1/graph/live` unmounted and installs no WebSocket library. A production project's `pyproject.toml`
|
|
210
|
+
lists only what your answers need, for example `10xgraph[openai]` and
|
|
211
|
+
`10xgraph-api[jwt,redis]`, and `10xgraph build` installs exactly that list, so no separate
|
|
212
|
+
`requirements.txt` is needed.
|
|
213
|
+
|
|
201
214
|
### `10xgraph dev`
|
|
202
215
|
|
|
203
216
|
Start the development API server and open the hosted playground when it is ready.
|
|
@@ -209,16 +222,18 @@ Start the development API server and open the hosted playground when it is ready
|
|
|
209
222
|
10xgraph dev --no-open --no-reload # API only, without auto-reload
|
|
210
223
|
```
|
|
211
224
|
|
|
212
|
-
`
|
|
225
|
+
`dev` is the only server command: the old `api` and `play` commands were removed
|
|
226
|
+
(use `10xgraph dev --no-open` and `10xgraph dev`). It runs Uvicorn with reload for local
|
|
227
|
+
work; production runs Gunicorn in the image from `10xgraph build`.
|
|
213
228
|
|
|
214
229
|
### Adaptive and structured output
|
|
215
230
|
|
|
216
231
|
```bash
|
|
217
|
-
10xgraph
|
|
232
|
+
10xgraph dev # branded intro, then output in your scrollback
|
|
218
233
|
10xgraph demo # preview every animation theme safely
|
|
219
234
|
10xgraph demo --style build # one theme: typing, network, init, build, or eval
|
|
220
|
-
10xgraph --fullscreen
|
|
221
|
-
10xgraph --no-animation
|
|
235
|
+
10xgraph --fullscreen dev # opt-in pinned header/footer surface
|
|
236
|
+
10xgraph --no-animation dev # accessible/static workflow
|
|
222
237
|
10xgraph --format plain --no-color audit
|
|
223
238
|
10xgraph --format jsonl eval --parallel
|
|
224
239
|
10xgraph --quiet build
|
|
@@ -577,7 +592,7 @@ sdist + wheel, checks the distribution metadata, and creates a GitHub Release wi
|
|
|
577
592
|
notes and the artifacts attached. PyPI publishing is manual (`make publish`).
|
|
578
593
|
|
|
579
594
|
```bash
|
|
580
|
-
git tag v0.
|
|
595
|
+
git tag v0.9.0 && git push origin v0.9.0
|
|
581
596
|
```
|
|
582
597
|
|
|
583
598
|
---
|
|
@@ -601,9 +616,33 @@ git tag v0.7.0 && git push origin v0.7.0
|
|
|
601
616
|
|
|
602
617
|
## Contributing
|
|
603
618
|
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
619
|
+
**Your avatar belongs on this wall.**
|
|
620
|
+
|
|
621
|
+
<a href="https://github.com/10xGraph/10xgraph-api/graphs/contributors">
|
|
622
|
+
<img src="https://contrib.rocks/image?repo=10xGraph/10xgraph-api" alt="People who have contributed to 10xgraph-api" />
|
|
623
|
+
</a>
|
|
624
|
+
|
|
625
|
+
Every person above shipped code that serves real agents in production. Merge one pull request and you join them, here and on the contributor page at [10xgraph.com/maintainers](https://10xgraph.com/maintainers).
|
|
626
|
+
|
|
627
|
+
Your first pull request can be small. These are real, self-contained, and useful today:
|
|
628
|
+
|
|
629
|
+
- **Type one module.** `pyproject.toml` lists the modules `mypy` still skips, each with its error count. Start with a one-error module, fix it, delete its line.
|
|
630
|
+
- **Add a test for an edge case you hit.** A request that should be rejected, a config that should fail at startup, a header that should be set.
|
|
631
|
+
- **Write the deployment recipe you needed.** Behind a reverse proxy, on a specific cloud, with your auth provider. Recipes go on [10xgraph.com](https://10xgraph.com), where every page has an "Edit this page" link.
|
|
632
|
+
- **Turn a bug into a failing test.** Open it as a draft pull request; the fix can come later.
|
|
633
|
+
|
|
634
|
+
From clone to a passing check:
|
|
635
|
+
|
|
636
|
+
```bash
|
|
637
|
+
git clone https://github.com/10xGraph/10xgraph-api.git
|
|
638
|
+
cd 10xgraph-api
|
|
639
|
+
uv sync --dev
|
|
640
|
+
uv run pytest
|
|
641
|
+
uv run pre-commit run --all-files # ruff, bandit and hygiene checks, as in CI
|
|
642
|
+
uv run mypy
|
|
643
|
+
```
|
|
644
|
+
|
|
645
|
+
Draft pull requests are welcome, so open early and ask questions in the PR. For bigger changes, start a thread in the core repository's [Discussions](https://github.com/10xGraph/10xGraph/discussions) first so the work does not overlap.
|
|
607
646
|
|
|
608
647
|
---
|
|
609
648
|
|
|
@@ -17,6 +17,7 @@ pyproject.toml
|
|
|
17
17
|
10xgraph_api.egg-info/top_level.txt
|
|
18
18
|
agentflow_cli/__init__.py
|
|
19
19
|
tenxgraph_api/__init__.py
|
|
20
|
+
tenxgraph_api/_slim_image.py
|
|
20
21
|
tenxgraph_api/py.typed
|
|
21
22
|
tenxgraph_api/cli/__init__.py
|
|
22
23
|
tenxgraph_api/cli/capabilities.py
|
|
@@ -126,14 +127,17 @@ tenxgraph_api/src/app/loader.py
|
|
|
126
127
|
tenxgraph_api/src/app/main.py
|
|
127
128
|
tenxgraph_api/src/app/worker.py
|
|
128
129
|
tenxgraph_api/src/app/core/__init__.py
|
|
130
|
+
tenxgraph_api/src/app/core/concurrency.py
|
|
129
131
|
tenxgraph_api/src/app/core/auth/__init__.py
|
|
130
132
|
tenxgraph_api/src/app/core/auth/auth_backend.py
|
|
131
133
|
tenxgraph_api/src/app/core/auth/authorization.py
|
|
132
134
|
tenxgraph_api/src/app/core/auth/base_auth.py
|
|
135
|
+
tenxgraph_api/src/app/core/auth/identity_cache.py
|
|
133
136
|
tenxgraph_api/src/app/core/auth/jwt_auth.py
|
|
134
137
|
tenxgraph_api/src/app/core/auth/ownership_resolver.py
|
|
135
138
|
tenxgraph_api/src/app/core/auth/permissions.py
|
|
136
139
|
tenxgraph_api/src/app/core/auth/request_config.py
|
|
140
|
+
tenxgraph_api/src/app/core/auth/revocation.py
|
|
137
141
|
tenxgraph_api/src/app/core/auth/route_guard.py
|
|
138
142
|
tenxgraph_api/src/app/core/config/__init__.py
|
|
139
143
|
tenxgraph_api/src/app/core/config/graph_config.py
|
|
@@ -159,6 +163,7 @@ tenxgraph_api/src/app/core/middleware/rate_limit/memory.py
|
|
|
159
163
|
tenxgraph_api/src/app/core/middleware/rate_limit/middleware.py
|
|
160
164
|
tenxgraph_api/src/app/core/middleware/rate_limit/redis.py
|
|
161
165
|
tenxgraph_api/src/app/core/utils/__init__.py
|
|
166
|
+
tenxgraph_api/src/app/core/utils/container.py
|
|
162
167
|
tenxgraph_api/src/app/core/utils/log_sanitizer.py
|
|
163
168
|
tenxgraph_api/src/app/routers/__init__.py
|
|
164
169
|
tenxgraph_api/src/app/routers/setup_router.py
|
|
@@ -180,6 +185,7 @@ tenxgraph_api/src/app/routers/evals/services/eval_report_service.py
|
|
|
180
185
|
tenxgraph_api/src/app/routers/graph/__init__.py
|
|
181
186
|
tenxgraph_api/src/app/routers/graph/realtime_guard.py
|
|
182
187
|
tenxgraph_api/src/app/routers/graph/router.py
|
|
188
|
+
tenxgraph_api/src/app/routers/graph/run_limits.py
|
|
183
189
|
tenxgraph_api/src/app/routers/graph/schemas/__init__.py
|
|
184
190
|
tenxgraph_api/src/app/routers/graph/schemas/graph_schemas.py
|
|
185
191
|
tenxgraph_api/src/app/routers/graph/services/__init__.py
|
|
@@ -189,6 +195,7 @@ tenxgraph_api/src/app/routers/media/__init__.py
|
|
|
189
195
|
tenxgraph_api/src/app/routers/media/router.py
|
|
190
196
|
tenxgraph_api/src/app/routers/media/schemas.py
|
|
191
197
|
tenxgraph_api/src/app/routers/ping/__init__.py
|
|
198
|
+
tenxgraph_api/src/app/routers/ping/readiness.py
|
|
192
199
|
tenxgraph_api/src/app/routers/ping/router.py
|
|
193
200
|
tenxgraph_api/src/app/routers/store/__init__.py
|
|
194
201
|
tenxgraph_api/src/app/routers/store/router.py
|
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
10xgraph<2.0,>=0.10.0
|
|
2
2
|
fastapi<1.0,>=0.116
|
|
3
|
-
gunicorn<24,>=23.0
|
|
4
|
-
orjson<4,>=3.11
|
|
5
|
-
platformdirs<5,>=4.0
|
|
6
3
|
python-multipart<0.1,>=0.0.19
|
|
7
4
|
pydantic<3,>=2.13
|
|
8
5
|
pydantic-settings<3,>=2.3
|
|
9
|
-
uvicorn<1.0,>=0.
|
|
6
|
+
uvicorn<1.0,>=0.36
|
|
10
7
|
typer<1.0,>=0.17
|
|
11
8
|
python-dotenv<2,>=1.0
|
|
12
9
|
questionary<3,>=2.0
|
|
@@ -22,6 +19,9 @@ oauth2client>=4.1.3
|
|
|
22
19
|
[gcloud]
|
|
23
20
|
google-cloud-logging
|
|
24
21
|
|
|
22
|
+
[images]
|
|
23
|
+
10xgraph[images]<2.0,>=0.10.0
|
|
24
|
+
|
|
25
25
|
[jwt]
|
|
26
26
|
PyJWT<3,>=2.8
|
|
27
27
|
|
|
@@ -42,3 +42,6 @@ sentry-sdk>=2.10.0
|
|
|
42
42
|
|
|
43
43
|
[snowflakekit]
|
|
44
44
|
snowflakekit<1.0,>=0.1.1
|
|
45
|
+
|
|
46
|
+
[websocket]
|
|
47
|
+
websockets<17,>=13.0
|
|
@@ -20,6 +20,173 @@ project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
20
20
|
|
|
21
21
|
---
|
|
22
22
|
|
|
23
|
+
## [Unreleased]
|
|
24
|
+
|
|
25
|
+
## [0.9.0] - 2026-10-22
|
|
26
|
+
|
|
27
|
+
One server command, a guided `10xgraph init`, leaner production images and Python 3.14 and
|
|
28
|
+
3.15 support. This release has a breaking change: read the **Breaking** list before upgrading.
|
|
29
|
+
|
|
30
|
+
### Breaking
|
|
31
|
+
|
|
32
|
+
- **`10xgraph api` and `10xgraph play` are removed; `10xgraph dev` is the only server command.**
|
|
33
|
+
All three ran the same local Uvicorn dev server. Migration: `10xgraph api` ->
|
|
34
|
+
`10xgraph dev --no-open`, `10xgraph play` -> `10xgraph dev`. Options are unchanged
|
|
35
|
+
(`--config`, `--host`, `--port`, `--reload/--no-reload`). `10xgraph demo --style` no longer
|
|
36
|
+
accepts the `play` / `api` aliases. Production is unaffected: the image from `10xgraph build`
|
|
37
|
+
runs Gunicorn directly.
|
|
38
|
+
|
|
39
|
+
### Added
|
|
40
|
+
|
|
41
|
+
- **Python 3.14 and 3.15 are officially supported.** The test suite runs on 3.12, 3.13, 3.14
|
|
42
|
+
and 3.15 in CI, and the package classifiers list all four.
|
|
43
|
+
- **`websocket.enabled` in `10xgraph.json`** turns the WebSocket routes on or off. `false` leaves
|
|
44
|
+
out `/v1/graph/ws` and `/v1/graph/live`, so the server needs no WebSocket library. `true`
|
|
45
|
+
without one refuses to boot with the install hint. Unset keeps them mounted, as before, but
|
|
46
|
+
now logs a warning when no library is installed (previously a non-Google project silently
|
|
47
|
+
answered 404 on both routes, because only `google-genai` brought in `websockets`).
|
|
48
|
+
- **`10xgraph-api[websocket]` extra** (`websockets`) for those routes.
|
|
49
|
+
- **`10xgraph init` asks whether to enable WebSocket streaming and realtime audio**
|
|
50
|
+
(`--websocket/--no-websocket`, default off). Yes adds the `websocket` extra to a production
|
|
51
|
+
`pyproject.toml` and writes `"websocket": {"enabled": true}`; no writes `false`.
|
|
52
|
+
- **`10xgraph init` asks for the AI provider** (Google Gemini, OpenAI or Anthropic Claude;
|
|
53
|
+
`--provider` for non-interactive runs, default `google`). The scaffold's model, provider,
|
|
54
|
+
`.env.example` API key, test conftest and eval simulator model follow the answer.
|
|
55
|
+
- **`10xgraph-api[images]` extra.** Pillow is optional in core `10xgraph`; this extra installs it
|
|
56
|
+
for image resize, EXIF orientation and format conversion.
|
|
57
|
+
|
|
58
|
+
### Changed
|
|
59
|
+
|
|
60
|
+
- Replaced `asyncio.iscoroutinefunction`, which is removed in Python 3.16, with
|
|
61
|
+
`inspect.iscoroutinefunction`. No behaviour change.
|
|
62
|
+
- **Production scaffolds list only the dependencies the answers need.** `pyproject.toml` now
|
|
63
|
+
depends on `10xgraph[<provider>]` and `10xgraph-api[jwt,redis]` as chosen (no extras when
|
|
64
|
+
neither is picked), and drops the hardcoded `google-genai`. The generated Dockerfile installs
|
|
65
|
+
this list, so JWT and Redis work in the image without a separate `requirements.txt`.
|
|
66
|
+
- **The generated Dockerfile removes pip and the CLI's own libraries from the image.** typer,
|
|
67
|
+
rich, questionary and what only they pull in (pygments, markdown-it-py, mdurl, prompt-toolkit,
|
|
68
|
+
wcwidth, shellingham) are uninstalled in the builder stage by `tenxgraph_api/_slim_image.py`,
|
|
69
|
+
unless another installed package still needs them. With pip, about 38 MB smaller.
|
|
70
|
+
- Dropped unused dev dependencies (`mkdocs-gen-files`, `mkdocstrings`, `mypy-extensions`,
|
|
71
|
+
`lib`, `markdown-it-py`).
|
|
72
|
+
|
|
73
|
+
### Fixed
|
|
74
|
+
|
|
75
|
+
- **`10xgraph init` generated a `pyproject.toml` claiming Python 3.10.** The template said
|
|
76
|
+
`requires-python = ">=3.10"`, but `10xgraph` needs 3.12, so installing a generated project
|
|
77
|
+
on 3.10 or 3.11 failed. It now says `>=3.12`.
|
|
78
|
+
- **Redis rate limiting from a URL crashed at startup** with `NameError: Redis`: the class was
|
|
79
|
+
imported only for type checking but used at runtime to bind the client.
|
|
80
|
+
- **A production scaffold with the Redis rate limiter did not start:** `10xgraph.json` had no
|
|
81
|
+
Redis URL. It now reads `"redis": {"url": "${REDIS_URL}"}` from `.env`.
|
|
82
|
+
- **A production scaffold did not start at all:** `10xgraph.json` points at
|
|
83
|
+
`graph.agent:container`, which the template never defined. `graph/agent.py` now exports it.
|
|
84
|
+
- **The production scaffold's `tests/test_graph_nodes.py` failed on collection** (it imported
|
|
85
|
+
`graph.nodes` and `graph.utils`, which the template does not create). It now tests the agent
|
|
86
|
+
in `graph/agent.py`.
|
|
87
|
+
|
|
88
|
+
## [0.8.0] - 2026-10-16
|
|
89
|
+
|
|
90
|
+
Security and scalability pass over the API, following an external review. Every item below
|
|
91
|
+
has tests; see the review notes for the full list. This release has breaking changes: read
|
|
92
|
+
the **Breaking** list before upgrading.
|
|
93
|
+
|
|
94
|
+
### Breaking
|
|
95
|
+
|
|
96
|
+
- **Ownership checks fail closed.** With auth on, an ownership or `rbac` authorization
|
|
97
|
+
backend now refuses to start on a checkpointer that cannot resolve thread owners
|
|
98
|
+
(`aget_thread_owner` not implemented), and denies thread requests if none is available at
|
|
99
|
+
runtime. Implement `aget_thread_owner`, or set `"authorization": "allow_all"` or a custom
|
|
100
|
+
backend.
|
|
101
|
+
- **An unowned thread only allows actions that create it** (`graph:invoke`, `graph:stream`,
|
|
102
|
+
`checkpointer:write`). Reading, deleting, stopping or fixing a thread that does not exist
|
|
103
|
+
(or has no owner) now answers 403 instead of an empty result.
|
|
104
|
+
- **Authorization defaults to `ownership` whenever auth is configured**, in every mode. It
|
|
105
|
+
used to be `allow_all` unless `MODE=production`. Set `"authorization": "allow_all"` to keep
|
|
106
|
+
the old development behaviour.
|
|
107
|
+
- **Realtime init frames can no longer replace the system prompt by default.** Add
|
|
108
|
+
`"system_prompt"` to `websocket.realtime_client_overrides` to allow it.
|
|
109
|
+
- **`trusted_proxy_headers: true` without `trusted_proxies` trusts only loopback and private
|
|
110
|
+
networks**, not every peer. List your proxy networks (or `0.0.0.0/0` and `::/0`).
|
|
111
|
+
- **Production defaults:** `MEDIA_REQUIRE_OWNER` is on, `graph_introspection` is `scoped`
|
|
112
|
+
(graph structure, tools and state schema need the `graph:read` scope), and `IS_DEBUG` is
|
|
113
|
+
forced off.
|
|
114
|
+
- **`/v1/graph/invoke` no longer returns `meta.thread_name`**; the name is generated in the
|
|
115
|
+
background and appears on the thread (`GET /v1/threads`).
|
|
116
|
+
- **Production 4xx responses keep their message**; only 5xx are made generic. A 422 built
|
|
117
|
+
from an unexpected `ValueError` is still made generic.
|
|
118
|
+
- **`gunicorn` is no longer a dependency.** The generated Dockerfile installs it, so
|
|
119
|
+
`10xgraph build` images are unaffected. If you run `gunicorn` yourself outside that image,
|
|
120
|
+
install it alongside the API: `pip install gunicorn uvicorn-worker`.
|
|
121
|
+
- **Gunicorn's worker class is now `uvicorn_worker.UvicornWorker`** (from the `uvicorn-worker`
|
|
122
|
+
package). `uvicorn.workers.UvicornWorker` is deprecated in uvicorn. Regenerate the
|
|
123
|
+
Dockerfile and compose file with `10xgraph build --force`, or change `-k` in your own
|
|
124
|
+
command.
|
|
125
|
+
- **`POST /v1/graph/fix` returns `state` as a JSON object.** It used to be a JSON-encoded
|
|
126
|
+
string. Drop any `JSON.parse` / `json.loads` on that field; the TS client already types it
|
|
127
|
+
as an object.
|
|
128
|
+
- **Generated Dockerfiles install only the dependencies you list.** The `pyproject.toml` path
|
|
129
|
+
no longer adds `10xgraph-api` on top of your list. `10xgraph build` warns when the requirements file or `pyproject.toml` does not list
|
|
130
|
+
`10xgraph-api`.
|
|
131
|
+
|
|
132
|
+
### Added
|
|
133
|
+
|
|
134
|
+
- `runs` key in `10xgraph.json`: `thread_ids` (`client` | `server`), `config_keys` and
|
|
135
|
+
`state_keys` allow-lists, `max_concurrent_per_user` (default 10) and `timeout`.
|
|
136
|
+
- `token_revocation` key (`redis`, `memory` or `module:attr`) and the
|
|
137
|
+
`TokenRevocationBackend` hook: revoked tokens are refused before they expire, on HTTP and
|
|
138
|
+
on every WebSocket run.
|
|
139
|
+
- `graph_introspection` key (`open` | `scoped`).
|
|
140
|
+
- `websocket.realtime_client_overrides` allow-list.
|
|
141
|
+
- `STRICT_PRODUCTION_CHECKS=true`: production refuses to start on wildcard `ALLOWED_HOST` or
|
|
142
|
+
`ORIGINS`, or enabled API docs.
|
|
143
|
+
- `GET /health/ready` readiness probe (checkpointer, Redis, store); the k8s manifest uses it.
|
|
144
|
+
- Run and WebSocket connection caps are shared across workers through Redis when it is
|
|
145
|
+
configured.
|
|
146
|
+
|
|
147
|
+
### Changed
|
|
148
|
+
|
|
149
|
+
- `10xgraph play` and `10xgraph dev` open the hosted playground at its new address,
|
|
150
|
+
`https://play.10xgraph.com`. The previous address, `playground-463bd.web.app`, still
|
|
151
|
+
serves the same app for older releases.
|
|
152
|
+
- Thread delete leaves a short tombstone so a deleted id cannot be handed to another user
|
|
153
|
+
while other workers still cache the old owner.
|
|
154
|
+
- Every thread the API saves records its owner, which fixes owner lookups on the in-memory
|
|
155
|
+
and SQLite checkpointers.
|
|
156
|
+
- WebSocket JSON frames over `MAX_REQUEST_SIZE` are refused (close 1009); `10xgraph api`
|
|
157
|
+
passes the same limit to uvicorn as `ws_max_size`.
|
|
158
|
+
- Request ID, security headers and rate limiting are pure ASGI middleware; CORS is now the
|
|
159
|
+
outermost layer, so 429, 413 and Host rejections are readable by browsers.
|
|
160
|
+
- Route-set security headers (such as the download sandbox CSP) are no longer overwritten.
|
|
161
|
+
- The JWT is verified once per request when rate limiting by user.
|
|
162
|
+
- Local-store downloads stream from disk; uploads are read into memory once.
|
|
163
|
+
- JSON responses are serialized by pydantic-core (`model_dump_json`) instead of orjson.
|
|
164
|
+
FastAPI deprecated `ORJSONResponse` in 0.131; the FastAPI floor stays at 0.116.
|
|
165
|
+
- Dependencies: dropped `orjson` and the unused `platformdirs`; the `uvicorn` floor is now
|
|
166
|
+
0.36 (required by `uvicorn-worker`).
|
|
167
|
+
- Generated Dockerfiles build in two stages: dependencies go into a virtualenv in a builder
|
|
168
|
+
stage, and only that virtualenv and your code reach the runtime image. The runtime image
|
|
169
|
+
has no compiler or curl, copies code with `COPY --chown` instead of a second `chown -R`
|
|
170
|
+
layer, and its healthcheck uses the Python standard library.
|
|
171
|
+
- A requirements file in a subfolder (for example `requirements/base.txt`) keeps its path in
|
|
172
|
+
the generated Dockerfile.
|
|
173
|
+
- Packaging: `license` is an SPDX expression (`MIT`), so builds no longer warn about the
|
|
174
|
+
deprecated table form; the build needs setuptools 77 or later.
|
|
175
|
+
|
|
176
|
+
### Security
|
|
177
|
+
|
|
178
|
+
- **Log injection.** Values a client controls (user and thread ids, file ids, rate-limit
|
|
179
|
+
keys, request paths, run config and messages) are written to logs through `log_safe()`,
|
|
180
|
+
which escapes CR and LF, so a request cannot forge extra log lines. This covers the graph,
|
|
181
|
+
checkpointer and media services, the rate-limit middleware, the WebSocket guard and the
|
|
182
|
+
run limits.
|
|
183
|
+
- **ReDoS in the log sanitizer.** The JWT detection pattern backtracked polynomially on
|
|
184
|
+
crafted input (about 585 ms for a 16,000-character string). It now matches in linear time.
|
|
185
|
+
- **Security examples.** `examples/security/` no longer prints any part of an API key or of
|
|
186
|
+
the JWT secret. The API key example hashes keys with HMAC-SHA-256 and a server-side
|
|
187
|
+
`API_KEY_PEPPER`; hashes made with the previous example's plain SHA-256 must be
|
|
188
|
+
regenerated.
|
|
189
|
+
|
|
23
190
|
## [0.7.0] - 2026-10-10
|
|
24
191
|
|
|
25
192
|
**First release as `10xgraph-api`.** 10xScale Agentflow is now 10xGraph. This package
|
|
@@ -351,6 +518,8 @@ can be pinned.
|
|
|
351
518
|
Initial entry in this changelog. Releases before `0.5.0` were not tracked here; see the
|
|
352
519
|
GitHub release history for their notes.
|
|
353
520
|
|
|
521
|
+
[Unreleased]: https://github.com/10xGraph/10xgraph-api/compare/v0.8.0...HEAD
|
|
522
|
+
[0.8.0]: https://github.com/10xGraph/10xgraph-api/compare/v0.7.0...v0.8.0
|
|
354
523
|
[0.7.0]: https://github.com/10xGraph/10xgraph-api/compare/v0.6.0...v0.7.0
|
|
355
524
|
[0.6.0]: https://github.com/10xHub/agentflow-cli/compare/v0.5.1...v0.6.0
|
|
356
525
|
[0.5.1]: https://github.com/10xHub/agentflow-cli/compare/v0.5.0...v0.5.1
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: 10xgraph-api
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.9.0
|
|
4
4
|
Summary: Production server for 10xGraph agents (formerly 10xscale-agentflow-cli). Serves a compiled graph over REST, SSE, WebSocket, realtime audio and AG-UI with JWT or custom auth, scoped authorization on every endpoint, owner-only threads and rate limiting, and generates Docker Compose and Kubernetes files. Includes the 10xgraph CLI. MIT licensed, self-hosted.
|
|
5
5
|
Author-email: Shudipto Trafder <shudiptotrafder@gmail.com>
|
|
6
6
|
Maintainer-email: Shudipto Trafder <shudiptotrafder@gmail.com>, 10xScale <contact@10xscale.ai>
|
|
7
|
-
License: MIT
|
|
7
|
+
License-Expression: MIT
|
|
8
8
|
Project-URL: Homepage, https://10xgraph.com
|
|
9
9
|
Project-URL: Repository, https://github.com/10xGraph/10xgraph-api
|
|
10
10
|
Project-URL: Issues, https://github.com/10xGraph/10xgraph-api/issues
|
|
@@ -13,11 +13,12 @@ Project-URL: Changelog, https://github.com/10xGraph/10xgraph-api/blob/main/CHANG
|
|
|
13
13
|
Keywords: 10xgraph,10xscale,agentflow,agents,ai-agents,multi-agent,agent-server,agent-deployment,llm,fastapi,api-server,rest-api,sse,websocket,realtime-audio,ag-ui,jwt,authentication,authorization,rbac,multi-tenant,rate-limiting,self-hosted,production,docker,kubernetes,cli
|
|
14
14
|
Classifier: Development Status :: 4 - Beta
|
|
15
15
|
Classifier: Intended Audience :: Developers
|
|
16
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
17
16
|
Classifier: Operating System :: OS Independent
|
|
18
17
|
Classifier: Programming Language :: Python :: 3
|
|
19
18
|
Classifier: Programming Language :: Python :: 3.12
|
|
20
19
|
Classifier: Programming Language :: Python :: 3.13
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.15
|
|
21
22
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
22
23
|
Classifier: Topic :: Internet :: WWW/HTTP :: HTTP Servers
|
|
23
24
|
Requires-Python: >=3.12
|
|
@@ -25,13 +26,10 @@ Description-Content-Type: text/markdown
|
|
|
25
26
|
License-File: LICENSE
|
|
26
27
|
Requires-Dist: 10xgraph<2.0,>=0.10.0
|
|
27
28
|
Requires-Dist: fastapi<1.0,>=0.116
|
|
28
|
-
Requires-Dist: gunicorn<24,>=23.0
|
|
29
|
-
Requires-Dist: orjson<4,>=3.11
|
|
30
|
-
Requires-Dist: platformdirs<5,>=4.0
|
|
31
29
|
Requires-Dist: python-multipart<0.1,>=0.0.19
|
|
32
30
|
Requires-Dist: pydantic<3,>=2.13
|
|
33
31
|
Requires-Dist: pydantic-settings<3,>=2.3
|
|
34
|
-
Requires-Dist: uvicorn<1.0,>=0.
|
|
32
|
+
Requires-Dist: uvicorn<1.0,>=0.36
|
|
35
33
|
Requires-Dist: typer<1.0,>=0.17
|
|
36
34
|
Requires-Dist: python-dotenv<2,>=1.0
|
|
37
35
|
Requires-Dist: questionary<3,>=2.0
|
|
@@ -49,6 +47,8 @@ Provides-Extra: jwt
|
|
|
49
47
|
Requires-Dist: PyJWT<3,>=2.8; extra == "jwt"
|
|
50
48
|
Provides-Extra: media
|
|
51
49
|
Requires-Dist: textxtract[docx,html,md,pdf,xml]>=0.2.0; extra == "media"
|
|
50
|
+
Provides-Extra: images
|
|
51
|
+
Requires-Dist: 10xgraph[images]<2.0,>=0.10.0; extra == "images"
|
|
52
52
|
Provides-Extra: gcloud
|
|
53
53
|
Requires-Dist: google-cloud-logging; extra == "gcloud"
|
|
54
54
|
Provides-Extra: otel
|
|
@@ -58,6 +58,8 @@ Requires-Dist: opentelemetry-instrumentation-fastapi>=0.40b0; extra == "otel"
|
|
|
58
58
|
Requires-Dist: opentelemetry-exporter-otlp>=1.20.0; extra == "otel"
|
|
59
59
|
Provides-Extra: ag-ui
|
|
60
60
|
Requires-Dist: ag-ui-protocol<2,>=1.0; extra == "ag-ui"
|
|
61
|
+
Provides-Extra: websocket
|
|
62
|
+
Requires-Dist: websockets<17,>=13.0; extra == "websocket"
|
|
61
63
|
Dynamic: license-file
|
|
62
64
|
|
|
63
65
|
# 10xGraph API
|
|
@@ -93,7 +95,7 @@ Not built in: automatic per-tool permissions (user A may call `refund`, user B m
|
|
|
93
95
|
|---|---|---|
|
|
94
96
|
| [`10xgraph`](https://github.com/10xGraph/10xGraph) | Core engine: graph, state, replay-safe tools, checkpointing, memory | `pip install 10xgraph` (pulled in by this package) |
|
|
95
97
|
| `10xgraph-api` (this repository) | Production server and the `10xgraph` command | `pip install 10xgraph-api` |
|
|
96
|
-
| [`10xgraph-client`](https://github.com/10xGraph/10xgraph-client) | Typed TypeScript client for every endpoint | `npm install 10xgraph-client`
|
|
98
|
+
| [`10xgraph-client`](https://github.com/10xGraph/10xgraph-client) | Typed TypeScript client for every endpoint | `npm install 10xgraph-client` |
|
|
97
99
|
|
|
98
100
|
Docs: [10xgraph.com](https://10xgraph.com).
|
|
99
101
|
|
|
@@ -151,11 +153,17 @@ Optional extras; install only what you configure:
|
|
|
151
153
|
pip install "10xgraph-api[redis]" # Redis rate-limit / cache backend
|
|
152
154
|
pip install "10xgraph-api[jwt]" # JWT authentication
|
|
153
155
|
pip install "10xgraph-api[media]" # Document text extraction (multimodal)
|
|
156
|
+
pip install "10xgraph-api[images]" # Image resize / EXIF / format conversion (Pillow)
|
|
157
|
+
pip install "10xgraph-api[ag-ui]" # AG-UI endpoint
|
|
158
|
+
pip install "10xgraph-api[websocket]" # WebSocket streaming + realtime audio
|
|
154
159
|
pip install "10xgraph-api[otel]" # OpenTelemetry tracing
|
|
155
160
|
pip install "10xgraph-api[snowflakekit]" # Snowflake ID generation
|
|
161
|
+
pip install "10xgraph-api[sentry]" # Sentry error reporting
|
|
162
|
+
pip install "10xgraph-api[firebase]" # Firebase Admin SDK
|
|
163
|
+
pip install "10xgraph-api[gcloud]" # Google Cloud Logging
|
|
156
164
|
```
|
|
157
165
|
|
|
158
|
-
Requires Python 3.12 or newer. Installs the core `10xgraph` framework as a dependency.
|
|
166
|
+
Requires Python 3.12 or newer. Tested on 3.12, 3.13, 3.14 and 3.15. Installs the core `10xgraph` framework as a dependency.
|
|
159
167
|
|
|
160
168
|
---
|
|
161
169
|
|
|
@@ -175,9 +183,6 @@ Requires Python 3.12 or newer. Installs the core `10xgraph` framework as a depen
|
|
|
175
183
|
10xgraph build --docker-compose
|
|
176
184
|
```
|
|
177
185
|
|
|
178
|
-
`10xgraph api` (server only) and `10xgraph play` (server + playground) remain
|
|
179
|
-
available; `dev` is the goal-oriented wrapper around them.
|
|
180
|
-
|
|
181
186
|
---
|
|
182
187
|
|
|
183
188
|
## CLI commands
|
|
@@ -195,9 +200,17 @@ Initialize a new project with configuration and a sample graph.
|
|
|
195
200
|
10xgraph init --path ./my-app --name MyAgent --template quick-start \
|
|
196
201
|
--non-interactive # reproducible CI/agent workflow
|
|
197
202
|
10xgraph init --path ./my-app --template production --auth jwt \
|
|
198
|
-
--rate-limit redis --yes --dry-run
|
|
203
|
+
--rate-limit redis --provider openai --yes --dry-run
|
|
199
204
|
```
|
|
200
205
|
|
|
206
|
+
`init` asks which AI provider to use (`--provider google|openai|anthropic`, default `google`)
|
|
207
|
+
and writes the matching model and API key variable. It also asks whether to enable WebSocket
|
|
208
|
+
streaming and realtime audio (`--websocket`, default off); off leaves `/v1/graph/ws` and
|
|
209
|
+
`/v1/graph/live` unmounted and installs no WebSocket library. A production project's `pyproject.toml`
|
|
210
|
+
lists only what your answers need, for example `10xgraph[openai]` and
|
|
211
|
+
`10xgraph-api[jwt,redis]`, and `10xgraph build` installs exactly that list, so no separate
|
|
212
|
+
`requirements.txt` is needed.
|
|
213
|
+
|
|
201
214
|
### `10xgraph dev`
|
|
202
215
|
|
|
203
216
|
Start the development API server and open the hosted playground when it is ready.
|
|
@@ -209,16 +222,18 @@ Start the development API server and open the hosted playground when it is ready
|
|
|
209
222
|
10xgraph dev --no-open --no-reload # API only, without auto-reload
|
|
210
223
|
```
|
|
211
224
|
|
|
212
|
-
`
|
|
225
|
+
`dev` is the only server command: the old `api` and `play` commands were removed
|
|
226
|
+
(use `10xgraph dev --no-open` and `10xgraph dev`). It runs Uvicorn with reload for local
|
|
227
|
+
work; production runs Gunicorn in the image from `10xgraph build`.
|
|
213
228
|
|
|
214
229
|
### Adaptive and structured output
|
|
215
230
|
|
|
216
231
|
```bash
|
|
217
|
-
10xgraph
|
|
232
|
+
10xgraph dev # branded intro, then output in your scrollback
|
|
218
233
|
10xgraph demo # preview every animation theme safely
|
|
219
234
|
10xgraph demo --style build # one theme: typing, network, init, build, or eval
|
|
220
|
-
10xgraph --fullscreen
|
|
221
|
-
10xgraph --no-animation
|
|
235
|
+
10xgraph --fullscreen dev # opt-in pinned header/footer surface
|
|
236
|
+
10xgraph --no-animation dev # accessible/static workflow
|
|
222
237
|
10xgraph --format plain --no-color audit
|
|
223
238
|
10xgraph --format jsonl eval --parallel
|
|
224
239
|
10xgraph --quiet build
|
|
@@ -577,7 +592,7 @@ sdist + wheel, checks the distribution metadata, and creates a GitHub Release wi
|
|
|
577
592
|
notes and the artifacts attached. PyPI publishing is manual (`make publish`).
|
|
578
593
|
|
|
579
594
|
```bash
|
|
580
|
-
git tag v0.
|
|
595
|
+
git tag v0.9.0 && git push origin v0.9.0
|
|
581
596
|
```
|
|
582
597
|
|
|
583
598
|
---
|
|
@@ -601,9 +616,33 @@ git tag v0.7.0 && git push origin v0.7.0
|
|
|
601
616
|
|
|
602
617
|
## Contributing
|
|
603
618
|
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
619
|
+
**Your avatar belongs on this wall.**
|
|
620
|
+
|
|
621
|
+
<a href="https://github.com/10xGraph/10xgraph-api/graphs/contributors">
|
|
622
|
+
<img src="https://contrib.rocks/image?repo=10xGraph/10xgraph-api" alt="People who have contributed to 10xgraph-api" />
|
|
623
|
+
</a>
|
|
624
|
+
|
|
625
|
+
Every person above shipped code that serves real agents in production. Merge one pull request and you join them, here and on the contributor page at [10xgraph.com/maintainers](https://10xgraph.com/maintainers).
|
|
626
|
+
|
|
627
|
+
Your first pull request can be small. These are real, self-contained, and useful today:
|
|
628
|
+
|
|
629
|
+
- **Type one module.** `pyproject.toml` lists the modules `mypy` still skips, each with its error count. Start with a one-error module, fix it, delete its line.
|
|
630
|
+
- **Add a test for an edge case you hit.** A request that should be rejected, a config that should fail at startup, a header that should be set.
|
|
631
|
+
- **Write the deployment recipe you needed.** Behind a reverse proxy, on a specific cloud, with your auth provider. Recipes go on [10xgraph.com](https://10xgraph.com), where every page has an "Edit this page" link.
|
|
632
|
+
- **Turn a bug into a failing test.** Open it as a draft pull request; the fix can come later.
|
|
633
|
+
|
|
634
|
+
From clone to a passing check:
|
|
635
|
+
|
|
636
|
+
```bash
|
|
637
|
+
git clone https://github.com/10xGraph/10xgraph-api.git
|
|
638
|
+
cd 10xgraph-api
|
|
639
|
+
uv sync --dev
|
|
640
|
+
uv run pytest
|
|
641
|
+
uv run pre-commit run --all-files # ruff, bandit and hygiene checks, as in CI
|
|
642
|
+
uv run mypy
|
|
643
|
+
```
|
|
644
|
+
|
|
645
|
+
Draft pull requests are welcome, so open early and ask questions in the PR. For bigger changes, start a thread in the core repository's [Discussions](https://github.com/10xGraph/10xGraph/discussions) first so the work does not overlap.
|
|
607
646
|
|
|
608
647
|
---
|
|
609
648
|
|