autonomous-agent-architecture 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.
- autonomous_agent_architecture-0.3.1/.deepeval/.deepeval_telemetry.txt +2 -0
- autonomous_agent_architecture-0.3.1/.dockerignore +8 -0
- autonomous_agent_architecture-0.3.1/.github/dependabot.yml +11 -0
- autonomous_agent_architecture-0.3.1/.github/workflows/ci.yml +406 -0
- autonomous_agent_architecture-0.3.1/.github/workflows/docs.yml +64 -0
- autonomous_agent_architecture-0.3.1/.github/workflows/release-server.yml +92 -0
- autonomous_agent_architecture-0.3.1/.github/workflows/release.yml +121 -0
- autonomous_agent_architecture-0.3.1/.gitignore +7 -0
- autonomous_agent_architecture-0.3.1/CONTRIBUTING.md +8 -0
- autonomous_agent_architecture-0.3.1/Dockerfile +23 -0
- autonomous_agent_architecture-0.3.1/LICENSE +21 -0
- autonomous_agent_architecture-0.3.1/PKG-INFO +326 -0
- autonomous_agent_architecture-0.3.1/README.md +241 -0
- autonomous_agent_architecture-0.3.1/SECURITY.md +21 -0
- autonomous_agent_architecture-0.3.1/compose.yaml +27 -0
- autonomous_agent_architecture-0.3.1/deploy/app.py +49 -0
- autonomous_agent_architecture-0.3.1/docs/about/changelog.md +210 -0
- autonomous_agent_architecture-0.3.1/docs/about/contributing.md +90 -0
- autonomous_agent_architecture-0.3.1/docs/about/design-decisions.md +79 -0
- autonomous_agent_architecture-0.3.1/docs/about/license.md +7 -0
- autonomous_agent_architecture-0.3.1/docs/about/limitations.md +113 -0
- autonomous_agent_architecture-0.3.1/docs/concepts/architecture.md +76 -0
- autonomous_agent_architecture-0.3.1/docs/concepts/data-model.md +95 -0
- autonomous_agent_architecture-0.3.1/docs/concepts/delivery-and-idempotency.md +57 -0
- autonomous_agent_architecture-0.3.1/docs/concepts/events-and-the-log.md +105 -0
- autonomous_agent_architecture-0.3.1/docs/concepts/projections-and-snapshots.md +100 -0
- autonomous_agent_architecture-0.3.1/docs/concepts/runs-and-the-engine.md +134 -0
- autonomous_agent_architecture-0.3.1/docs/getting-started/installation.md +80 -0
- autonomous_agent_architecture-0.3.1/docs/getting-started/mental-model.md +66 -0
- autonomous_agent_architecture-0.3.1/docs/getting-started/quickstart.md +99 -0
- autonomous_agent_architecture-0.3.1/docs/guides/algorithms/custom.md +84 -0
- autonomous_agent_architecture-0.3.1/docs/guides/algorithms/ensembles-rag.md +64 -0
- autonomous_agent_architecture-0.3.1/docs/guides/algorithms/index.md +69 -0
- autonomous_agent_architecture-0.3.1/docs/guides/algorithms/plan-and-execute.md +81 -0
- autonomous_agent_architecture-0.3.1/docs/guides/algorithms/reasoning.md +64 -0
- autonomous_agent_architecture-0.3.1/docs/guides/algorithms/refine.md +92 -0
- autonomous_agent_architecture-0.3.1/docs/guides/algorithms/router-supervisor.md +74 -0
- autonomous_agent_architecture-0.3.1/docs/guides/algorithms/tool-loop-react.md +104 -0
- autonomous_agent_architecture-0.3.1/docs/guides/algorithms/workflow-fsm.md +80 -0
- autonomous_agent_architecture-0.3.1/docs/guides/builtin-tools.md +88 -0
- autonomous_agent_architecture-0.3.1/docs/guides/clusters.md +151 -0
- autonomous_agent_architecture-0.3.1/docs/guides/context.md +81 -0
- autonomous_agent_architecture-0.3.1/docs/guides/evals.md +181 -0
- autonomous_agent_architecture-0.3.1/docs/guides/evolving-events.md +50 -0
- autonomous_agent_architecture-0.3.1/docs/guides/extending.md +93 -0
- autonomous_agent_architecture-0.3.1/docs/guides/guardrails.md +110 -0
- autonomous_agent_architecture-0.3.1/docs/guides/human-approval.md +67 -0
- autonomous_agent_architecture-0.3.1/docs/guides/ingestion.md +56 -0
- autonomous_agent_architecture-0.3.1/docs/guides/large-payloads.md +61 -0
- autonomous_agent_architecture-0.3.1/docs/guides/llm-gateways.md +247 -0
- autonomous_agent_architecture-0.3.1/docs/guides/mcp.md +146 -0
- autonomous_agent_architecture-0.3.1/docs/guides/memory.md +194 -0
- autonomous_agent_architecture-0.3.1/docs/guides/multimodal.md +71 -0
- autonomous_agent_architecture-0.3.1/docs/guides/observability.md +75 -0
- autonomous_agent_architecture-0.3.1/docs/guides/persistence.md +90 -0
- autonomous_agent_architecture-0.3.1/docs/guides/privacy.md +170 -0
- autonomous_agent_architecture-0.3.1/docs/guides/server.md +111 -0
- autonomous_agent_architecture-0.3.1/docs/guides/sessions.md +112 -0
- autonomous_agent_architecture-0.3.1/docs/guides/streaming.md +50 -0
- autonomous_agent_architecture-0.3.1/docs/guides/testing.md +122 -0
- autonomous_agent_architecture-0.3.1/docs/guides/tool-guard.md +157 -0
- autonomous_agent_architecture-0.3.1/docs/guides/tools.md +128 -0
- autonomous_agent_architecture-0.3.1/docs/guides/vector-stores.md +115 -0
- autonomous_agent_architecture-0.3.1/docs/index.md +154 -0
- autonomous_agent_architecture-0.3.1/docs/operations/backup-restore.md +40 -0
- autonomous_agent_architecture-0.3.1/docs/operations/configuration.md +81 -0
- autonomous_agent_architecture-0.3.1/docs/operations/deployment.md +81 -0
- autonomous_agent_architecture-0.3.1/docs/operations/performance.md +84 -0
- autonomous_agent_architecture-0.3.1/docs/operations/security.md +77 -0
- autonomous_agent_architecture-0.3.1/docs/operations/troubleshooting.md +113 -0
- autonomous_agent_architecture-0.3.1/docs/operations/upgrading.md +24 -0
- autonomous_agent_architecture-0.3.1/docs/policy/stability.md +44 -0
- autonomous_agent_architecture-0.3.1/docs/reference/api/algos.md +68 -0
- autonomous_agent_architecture-0.3.1/docs/reference/api/builtin-tools.md +23 -0
- autonomous_agent_architecture-0.3.1/docs/reference/api/cli.md +12 -0
- autonomous_agent_architecture-0.3.1/docs/reference/api/context.md +35 -0
- autonomous_agent_architecture-0.3.1/docs/reference/api/core.md +43 -0
- autonomous_agent_architecture-0.3.1/docs/reference/api/data.md +43 -0
- autonomous_agent_architecture-0.3.1/docs/reference/api/eval.md +51 -0
- autonomous_agent_architecture-0.3.1/docs/reference/api/events.md +59 -0
- autonomous_agent_architecture-0.3.1/docs/reference/api/guard.md +45 -0
- autonomous_agent_architecture-0.3.1/docs/reference/api/index.md +19 -0
- autonomous_agent_architecture-0.3.1/docs/reference/api/ingest.md +19 -0
- autonomous_agent_architecture-0.3.1/docs/reference/api/llm.md +84 -0
- autonomous_agent_architecture-0.3.1/docs/reference/api/mcp.md +21 -0
- autonomous_agent_architecture-0.3.1/docs/reference/api/memory.md +55 -0
- autonomous_agent_architecture-0.3.1/docs/reference/api/observe.md +25 -0
- autonomous_agent_architecture-0.3.1/docs/reference/api/runtime.md +37 -0
- autonomous_agent_architecture-0.3.1/docs/reference/api/sandbox.md +13 -0
- autonomous_agent_architecture-0.3.1/docs/reference/api/server.md +33 -0
- autonomous_agent_architecture-0.3.1/docs/reference/api/session.md +21 -0
- autonomous_agent_architecture-0.3.1/docs/reference/api/tools.md +27 -0
- autonomous_agent_architecture-0.3.1/docs/reference/api/vector.md +37 -0
- autonomous_agent_architecture-0.3.1/docs/reference/event-catalog.md +88 -0
- autonomous_agent_architecture-0.3.1/docs/reference/outcomes-and-errors.md +58 -0
- autonomous_agent_architecture-0.3.1/docs/security/multimodal.md +34 -0
- autonomous_agent_architecture-0.3.1/docs/security/server.md +51 -0
- autonomous_agent_architecture-0.3.1/docs/security/tools.md +65 -0
- autonomous_agent_architecture-0.3.1/docs/server/index.md +79 -0
- autonomous_agent_architecture-0.3.1/examples/builtin_tools.py +69 -0
- autonomous_agent_architecture-0.3.1/examples/chat_session.py +62 -0
- autonomous_agent_architecture-0.3.1/examples/cluster_client.py +30 -0
- autonomous_agent_architecture-0.3.1/examples/cluster_worker.py +38 -0
- autonomous_agent_architecture-0.3.1/examples/context_management.py +66 -0
- autonomous_agent_architecture-0.3.1/examples/custom_algorithm.py +77 -0
- autonomous_agent_architecture-0.3.1/examples/data_codecs.py +56 -0
- autonomous_agent_architecture-0.3.1/examples/ensembles.py +35 -0
- autonomous_agent_architecture-0.3.1/examples/eval_extras.py +52 -0
- autonomous_agent_architecture-0.3.1/examples/evals.py +57 -0
- autonomous_agent_architecture-0.3.1/examples/generate_test_repair.py +42 -0
- autonomous_agent_architecture-0.3.1/examples/guardrails.py +83 -0
- autonomous_agent_architecture-0.3.1/examples/ingest_docs.py +54 -0
- autonomous_agent_architecture-0.3.1/examples/inspect_log.py +35 -0
- autonomous_agent_architecture-0.3.1/examples/large_payloads.py +42 -0
- autonomous_agent_architecture-0.3.1/examples/llm_gateways.py +53 -0
- autonomous_agent_architecture-0.3.1/examples/mcp_server.py +53 -0
- autonomous_agent_architecture-0.3.1/examples/mcp_tools.py +71 -0
- autonomous_agent_architecture-0.3.1/examples/memory_agent.py +63 -0
- autonomous_agent_architecture-0.3.1/examples/model_router.py +58 -0
- autonomous_agent_architecture-0.3.1/examples/multimodal.py +70 -0
- autonomous_agent_architecture-0.3.1/examples/native_providers.py +97 -0
- autonomous_agent_architecture-0.3.1/examples/observability.py +43 -0
- autonomous_agent_architecture-0.3.1/examples/persistence_recovery.py +69 -0
- autonomous_agent_architecture-0.3.1/examples/plan_and_execute.py +56 -0
- autonomous_agent_architecture-0.3.1/examples/privacy_tenancy.py +67 -0
- autonomous_agent_architecture-0.3.1/examples/quickstart.py +38 -0
- autonomous_agent_architecture-0.3.1/examples/rag_agent.py +43 -0
- autonomous_agent_architecture-0.3.1/examples/reasoning_algorithms.py +129 -0
- autonomous_agent_architecture-0.3.1/examples/router_supervisor.py +66 -0
- autonomous_agent_architecture-0.3.1/examples/server_quickstart.py +97 -0
- autonomous_agent_architecture-0.3.1/examples/streaming.py +26 -0
- autonomous_agent_architecture-0.3.1/examples/testing_replay.py +41 -0
- autonomous_agent_architecture-0.3.1/examples/tool_approval.py +47 -0
- autonomous_agent_architecture-0.3.1/examples/tool_guard.py +59 -0
- autonomous_agent_architecture-0.3.1/examples/vector_search.py +48 -0
- autonomous_agent_architecture-0.3.1/examples/workflow_fsm.py +70 -0
- autonomous_agent_architecture-0.3.1/mkdocs.yml +159 -0
- autonomous_agent_architecture-0.3.1/packages/aaa-server/LICENSE +21 -0
- autonomous_agent_architecture-0.3.1/packages/aaa-server/README.md +34 -0
- autonomous_agent_architecture-0.3.1/packages/aaa-server/pyproject.toml +47 -0
- autonomous_agent_architecture-0.3.1/packages/aaa-server/src/aaa_server/__init__.py +48 -0
- autonomous_agent_architecture-0.3.1/packages/aaa-server/src/aaa_server/a2a.py +351 -0
- autonomous_agent_architecture-0.3.1/packages/aaa-server/src/aaa_server/admission.py +247 -0
- autonomous_agent_architecture-0.3.1/packages/aaa-server/src/aaa_server/app.py +723 -0
- autonomous_agent_architecture-0.3.1/packages/aaa-server/src/aaa_server/auth.py +255 -0
- autonomous_agent_architecture-0.3.1/packages/aaa-server/src/aaa_server/cli.py +100 -0
- autonomous_agent_architecture-0.3.1/packages/aaa-server/src/aaa_server/mcp_http.py +64 -0
- autonomous_agent_architecture-0.3.1/packages/aaa-server/src/aaa_server/py.typed +0 -0
- autonomous_agent_architecture-0.3.1/pyproject.toml +99 -0
- autonomous_agent_architecture-0.3.1/scripts/bench_cluster.py +126 -0
- autonomous_agent_architecture-0.3.1/scripts/bench_growth.py +82 -0
- autonomous_agent_architecture-0.3.1/scripts/gen_event_fixtures.py +523 -0
- autonomous_agent_architecture-0.3.1/scripts/live_smoke.py +445 -0
- autonomous_agent_architecture-0.3.1/src/aaa/__init__.py +10 -0
- autonomous_agent_architecture-0.3.1/src/aaa/_compat.py +34 -0
- autonomous_agent_architecture-0.3.1/src/aaa/algos/__init__.py +35 -0
- autonomous_agent_architecture-0.3.1/src/aaa/algos/base.py +99 -0
- autonomous_agent_architecture-0.3.1/src/aaa/algos/control.py +183 -0
- autonomous_agent_architecture-0.3.1/src/aaa/algos/debate.py +182 -0
- autonomous_agent_architecture-0.3.1/src/aaa/algos/ensemble.py +173 -0
- autonomous_agent_architecture-0.3.1/src/aaa/algos/loops.py +365 -0
- autonomous_agent_architecture-0.3.1/src/aaa/algos/plan.py +259 -0
- autonomous_agent_architecture-0.3.1/src/aaa/algos/refine.py +169 -0
- autonomous_agent_architecture-0.3.1/src/aaa/algos/reflexion.py +203 -0
- autonomous_agent_architecture-0.3.1/src/aaa/algos/route.py +93 -0
- autonomous_agent_architecture-0.3.1/src/aaa/algos/swarm.py +182 -0
- autonomous_agent_architecture-0.3.1/src/aaa/algos/tot.py +212 -0
- autonomous_agent_architecture-0.3.1/src/aaa/cli.py +178 -0
- autonomous_agent_architecture-0.3.1/src/aaa/context/__init__.py +32 -0
- autonomous_agent_architecture-0.3.1/src/aaa/context/policy.py +199 -0
- autonomous_agent_architecture-0.3.1/src/aaa/context/strategies.py +387 -0
- autonomous_agent_architecture-0.3.1/src/aaa/context/tokens.py +137 -0
- autonomous_agent_architecture-0.3.1/src/aaa/core/__init__.py +33 -0
- autonomous_agent_architecture-0.3.1/src/aaa/core/aio.py +50 -0
- autonomous_agent_architecture-0.3.1/src/aaa/core/errors.py +30 -0
- autonomous_agent_architecture-0.3.1/src/aaa/core/ids.py +32 -0
- autonomous_agent_architecture-0.3.1/src/aaa/core/outcome.py +31 -0
- autonomous_agent_architecture-0.3.1/src/aaa/core/parts.py +177 -0
- autonomous_agent_architecture-0.3.1/src/aaa/core/retry.py +152 -0
- autonomous_agent_architecture-0.3.1/src/aaa/data/__init__.py +27 -0
- autonomous_agent_architecture-0.3.1/src/aaa/data/blob.py +87 -0
- autonomous_agent_architecture-0.3.1/src/aaa/data/capabilities.py +40 -0
- autonomous_agent_architecture-0.3.1/src/aaa/data/codec.py +102 -0
- autonomous_agent_architecture-0.3.1/src/aaa/data/index.py +118 -0
- autonomous_agent_architecture-0.3.1/src/aaa/data/item.py +41 -0
- autonomous_agent_architecture-0.3.1/src/aaa/eval/__init__.py +62 -0
- autonomous_agent_architecture-0.3.1/src/aaa/eval/autoevals.py +196 -0
- autonomous_agent_architecture-0.3.1/src/aaa/eval/dataset.py +91 -0
- autonomous_agent_architecture-0.3.1/src/aaa/eval/deepeval.py +157 -0
- autonomous_agent_architecture-0.3.1/src/aaa/eval/inspect.py +63 -0
- autonomous_agent_architecture-0.3.1/src/aaa/eval/metrics.py +302 -0
- autonomous_agent_architecture-0.3.1/src/aaa/eval/online.py +139 -0
- autonomous_agent_architecture-0.3.1/src/aaa/eval/ragas.py +117 -0
- autonomous_agent_architecture-0.3.1/src/aaa/eval/redteam.py +315 -0
- autonomous_agent_architecture-0.3.1/src/aaa/eval/report.py +178 -0
- autonomous_agent_architecture-0.3.1/src/aaa/eval/result.py +52 -0
- autonomous_agent_architecture-0.3.1/src/aaa/eval/simulate.py +188 -0
- autonomous_agent_architecture-0.3.1/src/aaa/eval/suite.py +128 -0
- autonomous_agent_architecture-0.3.1/src/aaa/eval/traces.py +99 -0
- autonomous_agent_architecture-0.3.1/src/aaa/events/__init__.py +33 -0
- autonomous_agent_architecture-0.3.1/src/aaa/events/bus.py +277 -0
- autonomous_agent_architecture-0.3.1/src/aaa/events/cloudevents.py +78 -0
- autonomous_agent_architecture-0.3.1/src/aaa/events/distributed.py +500 -0
- autonomous_agent_architecture-0.3.1/src/aaa/events/event.py +81 -0
- autonomous_agent_architecture-0.3.1/src/aaa/events/guard.py +67 -0
- autonomous_agent_architecture-0.3.1/src/aaa/events/migrate.py +40 -0
- autonomous_agent_architecture-0.3.1/src/aaa/events/postgres.py +459 -0
- autonomous_agent_architecture-0.3.1/src/aaa/events/projection.py +95 -0
- autonomous_agent_architecture-0.3.1/src/aaa/events/redis.py +395 -0
- autonomous_agent_architecture-0.3.1/src/aaa/events/schema.py +55 -0
- autonomous_agent_architecture-0.3.1/src/aaa/events/snapshot.py +24 -0
- autonomous_agent_architecture-0.3.1/src/aaa/events/sqlite.py +271 -0
- autonomous_agent_architecture-0.3.1/src/aaa/events/store.py +157 -0
- autonomous_agent_architecture-0.3.1/src/aaa/events/verify.py +79 -0
- autonomous_agent_architecture-0.3.1/src/aaa/guard/__init__.py +56 -0
- autonomous_agent_architecture-0.3.1/src/aaa/guard/azure.py +65 -0
- autonomous_agent_architecture-0.3.1/src/aaa/guard/bedrock.py +105 -0
- autonomous_agent_architecture-0.3.1/src/aaa/guard/builtin.py +267 -0
- autonomous_agent_architecture-0.3.1/src/aaa/guard/enforce.py +94 -0
- autonomous_agent_architecture-0.3.1/src/aaa/guard/guardrails_ai.py +78 -0
- autonomous_agent_architecture-0.3.1/src/aaa/guard/lakera.py +74 -0
- autonomous_agent_architecture-0.3.1/src/aaa/guard/nemo.py +63 -0
- autonomous_agent_architecture-0.3.1/src/aaa/guard/openai_moderation.py +69 -0
- autonomous_agent_architecture-0.3.1/src/aaa/guard/policy.py +194 -0
- autonomous_agent_architecture-0.3.1/src/aaa/guard/presidio.py +135 -0
- autonomous_agent_architecture-0.3.1/src/aaa/guard/types.py +65 -0
- autonomous_agent_architecture-0.3.1/src/aaa/guard/watch.py +99 -0
- autonomous_agent_architecture-0.3.1/src/aaa/ingest/__init__.py +25 -0
- autonomous_agent_architecture-0.3.1/src/aaa/ingest/chunkers.py +139 -0
- autonomous_agent_architecture-0.3.1/src/aaa/ingest/loaders.py +239 -0
- autonomous_agent_architecture-0.3.1/src/aaa/ingest/pipeline.py +317 -0
- autonomous_agent_architecture-0.3.1/src/aaa/ingest/types.py +45 -0
- autonomous_agent_architecture-0.3.1/src/aaa/llm/__init__.py +46 -0
- autonomous_agent_architecture-0.3.1/src/aaa/llm/_http.py +108 -0
- autonomous_agent_architecture-0.3.1/src/aaa/llm/anthropic.py +395 -0
- autonomous_agent_architecture-0.3.1/src/aaa/llm/client.py +43 -0
- autonomous_agent_architecture-0.3.1/src/aaa/llm/config.py +46 -0
- autonomous_agent_architecture-0.3.1/src/aaa/llm/embedder.py +14 -0
- autonomous_agent_architecture-0.3.1/src/aaa/llm/errors.py +68 -0
- autonomous_agent_architecture-0.3.1/src/aaa/llm/factory.py +48 -0
- autonomous_agent_architecture-0.3.1/src/aaa/llm/fake.py +178 -0
- autonomous_agent_architecture-0.3.1/src/aaa/llm/gateways.py +75 -0
- autonomous_agent_architecture-0.3.1/src/aaa/llm/gemini.py +336 -0
- autonomous_agent_architecture-0.3.1/src/aaa/llm/handler.py +453 -0
- autonomous_agent_architecture-0.3.1/src/aaa/llm/litellm_client.py +119 -0
- autonomous_agent_architecture-0.3.1/src/aaa/llm/middleware.py +113 -0
- autonomous_agent_architecture-0.3.1/src/aaa/llm/openai_compat.py +272 -0
- autonomous_agent_architecture-0.3.1/src/aaa/llm/openai_responses.py +355 -0
- autonomous_agent_architecture-0.3.1/src/aaa/llm/parts.py +40 -0
- autonomous_agent_architecture-0.3.1/src/aaa/llm/streaming.py +38 -0
- autonomous_agent_architecture-0.3.1/src/aaa/llm/types.py +107 -0
- autonomous_agent_architecture-0.3.1/src/aaa/llm/wire_media.py +80 -0
- autonomous_agent_architecture-0.3.1/src/aaa/mcp/__init__.py +15 -0
- autonomous_agent_architecture-0.3.1/src/aaa/mcp/client.py +364 -0
- autonomous_agent_architecture-0.3.1/src/aaa/mcp/memory.py +125 -0
- autonomous_agent_architecture-0.3.1/src/aaa/mcp/server.py +255 -0
- autonomous_agent_architecture-0.3.1/src/aaa/memory/__init__.py +46 -0
- autonomous_agent_architecture-0.3.1/src/aaa/memory/base.py +96 -0
- autonomous_agent_architecture-0.3.1/src/aaa/memory/callable.py +152 -0
- autonomous_agent_architecture-0.3.1/src/aaa/memory/fake.py +116 -0
- autonomous_agent_architecture-0.3.1/src/aaa/memory/graphiti.py +180 -0
- autonomous_agent_architecture-0.3.1/src/aaa/memory/handler.py +226 -0
- autonomous_agent_architecture-0.3.1/src/aaa/memory/langgraph.py +179 -0
- autonomous_agent_architecture-0.3.1/src/aaa/memory/mem0.py +158 -0
- autonomous_agent_architecture-0.3.1/src/aaa/memory/native.py +177 -0
- autonomous_agent_architecture-0.3.1/src/aaa/memory/supermemory.py +264 -0
- autonomous_agent_architecture-0.3.1/src/aaa/memory/tools.py +76 -0
- autonomous_agent_architecture-0.3.1/src/aaa/memory/types.py +138 -0
- autonomous_agent_architecture-0.3.1/src/aaa/observe/__init__.py +30 -0
- autonomous_agent_architecture-0.3.1/src/aaa/observe/base.py +31 -0
- autonomous_agent_architecture-0.3.1/src/aaa/observe/observer.py +276 -0
- autonomous_agent_architecture-0.3.1/src/aaa/observe/otel.py +534 -0
- autonomous_agent_architecture-0.3.1/src/aaa/observe/scoring.py +213 -0
- autonomous_agent_architecture-0.3.1/src/aaa/observe/sinks.py +88 -0
- autonomous_agent_architecture-0.3.1/src/aaa/privacy.py +270 -0
- autonomous_agent_architecture-0.3.1/src/aaa/py.typed +0 -0
- autonomous_agent_architecture-0.3.1/src/aaa/runtime/__init__.py +18 -0
- autonomous_agent_architecture-0.3.1/src/aaa/runtime/budget.py +63 -0
- autonomous_agent_architecture-0.3.1/src/aaa/runtime/engine.py +858 -0
- autonomous_agent_architecture-0.3.1/src/aaa/runtime/media.py +73 -0
- autonomous_agent_architecture-0.3.1/src/aaa/runtime/recovery.py +136 -0
- autonomous_agent_architecture-0.3.1/src/aaa/runtime/retention.py +188 -0
- autonomous_agent_architecture-0.3.1/src/aaa/runtime/tenancy.py +106 -0
- autonomous_agent_architecture-0.3.1/src/aaa/safe.py +92 -0
- autonomous_agent_architecture-0.3.1/src/aaa/sandbox/__init__.py +20 -0
- autonomous_agent_architecture-0.3.1/src/aaa/sandbox/base.py +131 -0
- autonomous_agent_architecture-0.3.1/src/aaa/sandbox/docker.py +170 -0
- autonomous_agent_architecture-0.3.1/src/aaa/sandbox/subproc.py +89 -0
- autonomous_agent_architecture-0.3.1/src/aaa/sandbox/tool.py +40 -0
- autonomous_agent_architecture-0.3.1/src/aaa/score.py +48 -0
- autonomous_agent_architecture-0.3.1/src/aaa/session.py +539 -0
- autonomous_agent_architecture-0.3.1/src/aaa/tools/__init__.py +29 -0
- autonomous_agent_architecture-0.3.1/src/aaa/tools/builtin/__init__.py +87 -0
- autonomous_agent_architecture-0.3.1/src/aaa/tools/builtin/files.py +116 -0
- autonomous_agent_architecture-0.3.1/src/aaa/tools/builtin/net.py +259 -0
- autonomous_agent_architecture-0.3.1/src/aaa/tools/builtin/search.py +152 -0
- autonomous_agent_architecture-0.3.1/src/aaa/tools/guard.py +104 -0
- autonomous_agent_architecture-0.3.1/src/aaa/tools/handler.py +483 -0
- autonomous_agent_architecture-0.3.1/src/aaa/tools/rag.py +28 -0
- autonomous_agent_architecture-0.3.1/src/aaa/tools/tool.py +225 -0
- autonomous_agent_architecture-0.3.1/src/aaa/trace.py +494 -0
- autonomous_agent_architecture-0.3.1/src/aaa/validate/__init__.py +79 -0
- autonomous_agent_architecture-0.3.1/src/aaa/vector/__init__.py +72 -0
- autonomous_agent_architecture-0.3.1/src/aaa/vector/_flat.py +103 -0
- autonomous_agent_architecture-0.3.1/src/aaa/vector/_sync.py +19 -0
- autonomous_agent_architecture-0.3.1/src/aaa/vector/chroma.py +228 -0
- autonomous_agent_architecture-0.3.1/src/aaa/vector/filters.py +214 -0
- autonomous_agent_architecture-0.3.1/src/aaa/vector/hybrid.py +48 -0
- autonomous_agent_architecture-0.3.1/src/aaa/vector/index.py +236 -0
- autonomous_agent_architecture-0.3.1/src/aaa/vector/lancedb.py +204 -0
- autonomous_agent_architecture-0.3.1/src/aaa/vector/memory.py +116 -0
- autonomous_agent_architecture-0.3.1/src/aaa/vector/pgvector.py +291 -0
- autonomous_agent_architecture-0.3.1/src/aaa/vector/pinecone.py +217 -0
- autonomous_agent_architecture-0.3.1/src/aaa/vector/qdrant.py +271 -0
- autonomous_agent_architecture-0.3.1/src/aaa/vector/rerank.py +182 -0
- autonomous_agent_architecture-0.3.1/src/aaa/vector/sqlitevec.py +345 -0
- autonomous_agent_architecture-0.3.1/src/aaa/vector/types.py +118 -0
- autonomous_agent_architecture-0.3.1/tests/cluster.py +101 -0
- autonomous_agent_architecture-0.3.1/tests/conftest.py +219 -0
- autonomous_agent_architecture-0.3.1/tests/fixtures/events_v0_2/MANIFEST.json +209 -0
- autonomous_agent_architecture-0.3.1/tests/fixtures/events_v0_2/approval.expected.json +79 -0
- autonomous_agent_architecture-0.3.1/tests/fixtures/events_v0_2/approval.jsonl +11 -0
- autonomous_agent_architecture-0.3.1/tests/fixtures/events_v0_2/approval_denied.expected.json +79 -0
- autonomous_agent_architecture-0.3.1/tests/fixtures/events_v0_2/approval_denied.jsonl +10 -0
- autonomous_agent_architecture-0.3.1/tests/fixtures/events_v0_2/budget.expected.json +80 -0
- autonomous_agent_architecture-0.3.1/tests/fixtures/events_v0_2/budget.jsonl +10 -0
- autonomous_agent_architecture-0.3.1/tests/fixtures/events_v0_2/cancel.expected.json +59 -0
- autonomous_agent_architecture-0.3.1/tests/fixtures/events_v0_2/cancel.jsonl +3 -0
- autonomous_agent_architecture-0.3.1/tests/fixtures/events_v0_2/context.expected.json +134 -0
- autonomous_agent_architecture-0.3.1/tests/fixtures/events_v0_2/context.jsonl +115 -0
- autonomous_agent_architecture-0.3.1/tests/fixtures/events_v0_2/erased.expected.json +30 -0
- autonomous_agent_architecture-0.3.1/tests/fixtures/events_v0_2/erased.jsonl +5 -0
- autonomous_agent_architecture-0.3.1/tests/fixtures/events_v0_2/eval_score.expected.json +74 -0
- autonomous_agent_architecture-0.3.1/tests/fixtures/events_v0_2/eval_score.jsonl +5 -0
- autonomous_agent_architecture-0.3.1/tests/fixtures/events_v0_2/fsm.expected.json +69 -0
- autonomous_agent_architecture-0.3.1/tests/fixtures/events_v0_2/fsm.jsonl +8 -0
- autonomous_agent_architecture-0.3.1/tests/fixtures/events_v0_2/guard.expected.json +146 -0
- autonomous_agent_architecture-0.3.1/tests/fixtures/events_v0_2/guard.jsonl +16 -0
- autonomous_agent_architecture-0.3.1/tests/fixtures/events_v0_2/memory.expected.json +74 -0
- autonomous_agent_architecture-0.3.1/tests/fixtures/events_v0_2/memory.jsonl +6 -0
- autonomous_agent_architecture-0.3.1/tests/fixtures/events_v0_2/memory_failed.expected.json +74 -0
- autonomous_agent_architecture-0.3.1/tests/fixtures/events_v0_2/memory_failed.jsonl +6 -0
- autonomous_agent_architecture-0.3.1/tests/fixtures/events_v0_2/memory_started.expected.json +74 -0
- autonomous_agent_architecture-0.3.1/tests/fixtures/events_v0_2/memory_started.jsonl +8 -0
- autonomous_agent_architecture-0.3.1/tests/fixtures/events_v0_2/plan.expected.json +249 -0
- autonomous_agent_architecture-0.3.1/tests/fixtures/events_v0_2/plan.jsonl +21 -0
- autonomous_agent_architecture-0.3.1/tests/fixtures/events_v0_2/refine.expected.json +75 -0
- autonomous_agent_architecture-0.3.1/tests/fixtures/events_v0_2/refine.jsonl +10 -0
- autonomous_agent_architecture-0.3.1/tests/fixtures/events_v0_2/router.expected.json +146 -0
- autonomous_agent_architecture-0.3.1/tests/fixtures/events_v0_2/router.jsonl +11 -0
- autonomous_agent_architecture-0.3.1/tests/fixtures/events_v0_2/samples.expected.json +78 -0
- autonomous_agent_architecture-0.3.1/tests/fixtures/events_v0_2/samples.jsonl +8 -0
- autonomous_agent_architecture-0.3.1/tests/fixtures/events_v0_2/session.expected.json +394 -0
- autonomous_agent_architecture-0.3.1/tests/fixtures/events_v0_2/session.jsonl +18 -0
- autonomous_agent_architecture-0.3.1/tests/fixtures/events_v0_2/session_summary.expected.json +1920 -0
- autonomous_agent_architecture-0.3.1/tests/fixtures/events_v0_2/session_summary.jsonl +68 -0
- autonomous_agent_architecture-0.3.1/tests/fixtures/events_v0_2/stream.expected.json +74 -0
- autonomous_agent_architecture-0.3.1/tests/fixtures/events_v0_2/stream.jsonl +7 -0
- autonomous_agent_architecture-0.3.1/tests/fixtures/events_v0_2/supervisor.expected.json +79 -0
- autonomous_agent_architecture-0.3.1/tests/fixtures/events_v0_2/supervisor.jsonl +8 -0
- autonomous_agent_architecture-0.3.1/tests/fixtures/events_v0_2/synthetic_fencing.expected.json +78 -0
- autonomous_agent_architecture-0.3.1/tests/fixtures/events_v0_2/synthetic_fencing.jsonl +7 -0
- autonomous_agent_architecture-0.3.1/tests/fixtures/events_v0_2/timeout.expected.json +59 -0
- autonomous_agent_architecture-0.3.1/tests/fixtures/events_v0_2/timeout.jsonl +3 -0
- autonomous_agent_architecture-0.3.1/tests/fixtures/events_v0_2/tools.expected.json +83 -0
- autonomous_agent_architecture-0.3.1/tests/fixtures/events_v0_2/tools.jsonl +14 -0
- autonomous_agent_architecture-0.3.1/tests/fixtures/events_v0_2/workflow.expected.json +82 -0
- autonomous_agent_architecture-0.3.1/tests/fixtures/events_v0_2/workflow.jsonl +9 -0
- autonomous_agent_architecture-0.3.1/tests/helpers/aaa_mcp_server.py +37 -0
- autonomous_agent_architecture-0.3.1/tests/helpers/eval_stubs.py +40 -0
- autonomous_agent_architecture-0.3.1/tests/helpers/mcp_server.py +93 -0
- autonomous_agent_architecture-0.3.1/tests/helpers/memory_stubs.py +382 -0
- autonomous_agent_architecture-0.3.1/tests/helpers/server_env.py +66 -0
- autonomous_agent_architecture-0.3.1/tests/helpers/victim.py +46 -0
- autonomous_agent_architecture-0.3.1/tests/helpers/worker.py +70 -0
- autonomous_agent_architecture-0.3.1/tests/server/test_a2a.py +217 -0
- autonomous_agent_architecture-0.3.1/tests/server/test_auth.py +249 -0
- autonomous_agent_architecture-0.3.1/tests/server/test_cli.py +147 -0
- autonomous_agent_architecture-0.3.1/tests/server/test_live.py +68 -0
- autonomous_agent_architecture-0.3.1/tests/server/test_mcp_http.py +147 -0
- autonomous_agent_architecture-0.3.1/tests/server/test_server.py +454 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_aio.py +96 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_algos.py +372 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_algos_m8.py +491 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_builtin_tools.py +684 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_cluster_engine.py +222 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_compat.py +30 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_context.py +423 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_data.py +49 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_distributed_bus.py +288 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_docs_snippets.py +40 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_engine.py +95 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_eval.py +329 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_eval_adapters.py +211 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_eval_m9.py +557 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_event_compat.py +101 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_events.py +104 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_examples.py +245 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_growth.py +276 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_guard.py +437 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_guard_adapters.py +520 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_ingest.py +357 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_llm.py +313 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_loops.py +216 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_mcp.py +267 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_mcp_server.py +171 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_memory_adapters.py +253 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_memory_contract.py +250 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_memory_runtime.py +278 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_memory_signatures.py +137 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_multimodal.py +439 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_multiprocess.py +235 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_native_providers.py +820 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_observer.py +232 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_openai_conformance.py +115 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_openai_responses.py +313 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_otel.py +198 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_privacy.py +327 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_recovery.py +353 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_sandbox.py +318 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_server_state.py +189 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_servers_smoke.py +10 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_session.py +276 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_snapshots.py +172 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_storage.py +50 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_store_contract.py +267 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_store_outage.py +373 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_store_outage_cluster.py +211 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_store_schema.py +196 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_tool_guard.py +445 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_trace.py +298 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_vector.py +261 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_vector_backends.py +486 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_vector_contract.py +370 -0
- autonomous_agent_architecture-0.3.1/tests/unit/test_vector_hybrid.py +168 -0
- autonomous_agent_architecture-0.3.1/uv.lock +5748 -0
|
@@ -0,0 +1,406 @@
|
|
|
1
|
+
name: ci
|
|
2
|
+
|
|
3
|
+
# Lint + type-check, then the full test suite against REAL Postgres and Redis, on Python 3.11 and 3.12.
|
|
4
|
+
# (Docs have their own workflow, docs.yml, which also runs the docs tests before publishing.)
|
|
5
|
+
|
|
6
|
+
on:
|
|
7
|
+
push:
|
|
8
|
+
branches: [master]
|
|
9
|
+
pull_request:
|
|
10
|
+
workflow_dispatch:
|
|
11
|
+
schedule:
|
|
12
|
+
- cron: "17 5 * * 1" # weekly: do the memory libraries' newest releases still match our adapters?
|
|
13
|
+
|
|
14
|
+
permissions:
|
|
15
|
+
contents: read
|
|
16
|
+
|
|
17
|
+
concurrency:
|
|
18
|
+
group: ci-${{ github.ref }}
|
|
19
|
+
cancel-in-progress: true
|
|
20
|
+
|
|
21
|
+
jobs:
|
|
22
|
+
lint:
|
|
23
|
+
runs-on: ubuntu-latest
|
|
24
|
+
timeout-minutes: 10
|
|
25
|
+
steps:
|
|
26
|
+
- uses: actions/checkout@v4
|
|
27
|
+
- uses: astral-sh/setup-uv@v5
|
|
28
|
+
with:
|
|
29
|
+
enable-cache: true
|
|
30
|
+
- run: uv sync --frozen
|
|
31
|
+
- name: ruff (lint)
|
|
32
|
+
run: uv run ruff check .
|
|
33
|
+
- name: ruff (format)
|
|
34
|
+
run: uv run ruff format --check .
|
|
35
|
+
- name: pyright (src, examples, scripts)
|
|
36
|
+
run: uv run pyright
|
|
37
|
+
|
|
38
|
+
test:
|
|
39
|
+
runs-on: ubuntu-latest
|
|
40
|
+
timeout-minutes: 15
|
|
41
|
+
strategy:
|
|
42
|
+
fail-fast: false
|
|
43
|
+
matrix:
|
|
44
|
+
python: ["3.11", "3.12", "3.13"]
|
|
45
|
+
services:
|
|
46
|
+
postgres:
|
|
47
|
+
image: pgvector/pgvector:pg16
|
|
48
|
+
env:
|
|
49
|
+
POSTGRES_PASSWORD: aaa
|
|
50
|
+
ports: ["5432:5432"]
|
|
51
|
+
options: >-
|
|
52
|
+
--health-cmd "pg_isready -U postgres"
|
|
53
|
+
--health-interval 5s
|
|
54
|
+
--health-timeout 5s
|
|
55
|
+
--health-retries 10
|
|
56
|
+
redis:
|
|
57
|
+
image: redis:7
|
|
58
|
+
ports: ["6379:6379"]
|
|
59
|
+
options: >-
|
|
60
|
+
--health-cmd "redis-cli ping"
|
|
61
|
+
--health-interval 5s
|
|
62
|
+
--health-timeout 5s
|
|
63
|
+
--health-retries 10
|
|
64
|
+
env:
|
|
65
|
+
# The suite creates a throwaway database per test and isolates Redis by key prefix.
|
|
66
|
+
AAA_TEST_POSTGRES_URL: postgresql://postgres:aaa@localhost:5432/postgres
|
|
67
|
+
AAA_TEST_REDIS_URL: redis://localhost:6379/0
|
|
68
|
+
steps:
|
|
69
|
+
- uses: actions/checkout@v4
|
|
70
|
+
- uses: astral-sh/setup-uv@v5
|
|
71
|
+
with:
|
|
72
|
+
enable-cache: true
|
|
73
|
+
python-version: ${{ matrix.python }}
|
|
74
|
+
- run: uv sync --frozen
|
|
75
|
+
- name: tests
|
|
76
|
+
# -v names every test, and a test stuck for 2 minutes dumps all thread stacks, so a hang is
|
|
77
|
+
# diagnosable from the log instead of just a cancelled job.
|
|
78
|
+
run: uv run pytest -v -p no:cacheprovider -o faulthandler_timeout=120
|
|
79
|
+
|
|
80
|
+
eval-adapters:
|
|
81
|
+
# DeepEval, Ragas and Inspect AI are large and pin clashing dependencies, so each gets its own environment. Their metrics run
|
|
82
|
+
# their REAL flows here against a fake judge model (tests/unit/test_eval_adapters.py).
|
|
83
|
+
runs-on: ubuntu-latest
|
|
84
|
+
timeout-minutes: 20
|
|
85
|
+
strategy:
|
|
86
|
+
fail-fast: false
|
|
87
|
+
matrix:
|
|
88
|
+
include:
|
|
89
|
+
- lib: autoevals
|
|
90
|
+
packages: "autoevals openai"
|
|
91
|
+
keyword: Autoevals
|
|
92
|
+
- lib: deepeval
|
|
93
|
+
packages: "deepeval"
|
|
94
|
+
keyword: DeepEval
|
|
95
|
+
- lib: ragas
|
|
96
|
+
# ragas 0.4.x does not import against langchain 1.x (langchain_community.chat_models.vertexai, ContextOverflowError)
|
|
97
|
+
packages: "ragas 'langchain-community<0.4' 'langchain-core<1' 'langchain-openai<1'"
|
|
98
|
+
keyword: Ragas
|
|
99
|
+
- lib: inspect-ai
|
|
100
|
+
packages: "inspect-ai"
|
|
101
|
+
keyword: Inspect
|
|
102
|
+
steps:
|
|
103
|
+
- uses: actions/checkout@v4
|
|
104
|
+
- uses: astral-sh/setup-uv@v5
|
|
105
|
+
with:
|
|
106
|
+
enable-cache: true
|
|
107
|
+
- run: uv sync --frozen
|
|
108
|
+
- name: Install ${{ matrix.lib }}
|
|
109
|
+
run: uv pip install ${{ matrix.packages }}
|
|
110
|
+
- name: Adapter tests
|
|
111
|
+
run: uv run --no-sync pytest -v -p no:cacheprovider tests/unit/test_eval_adapters.py -k ${{ matrix.keyword }}
|
|
112
|
+
|
|
113
|
+
guard-adapters:
|
|
114
|
+
# Presidio runs for real (with a small spaCy model); the OpenAI SDK validates the shape of the moderation replies we parse.
|
|
115
|
+
runs-on: ubuntu-latest
|
|
116
|
+
timeout-minutes: 20
|
|
117
|
+
steps:
|
|
118
|
+
- uses: actions/checkout@v4
|
|
119
|
+
- uses: astral-sh/setup-uv@v5
|
|
120
|
+
with:
|
|
121
|
+
enable-cache: true
|
|
122
|
+
- run: uv sync --frozen
|
|
123
|
+
- name: Install Presidio, its spaCy model, and the OpenAI SDK
|
|
124
|
+
run: |
|
|
125
|
+
uv pip install presidio-analyzer presidio-anonymizer openai pip
|
|
126
|
+
uv run --no-sync python -m spacy download en_core_web_sm
|
|
127
|
+
- name: Adapter tests
|
|
128
|
+
run: uv run --no-sync pytest -v -p no:cacheprovider tests/unit/test_guard.py tests/unit/test_guard_adapters.py tests/unit/test_multimodal.py
|
|
129
|
+
|
|
130
|
+
vector-adapters:
|
|
131
|
+
# pgvector (real PostgreSQL with the extension) and Qdrant (its in-process mode) run the shared contract suite.
|
|
132
|
+
# AAA_REQUIRE_PGVECTOR turns "extension not available" from a skip into a failure, so this job cannot go green by skipping.
|
|
133
|
+
runs-on: ubuntu-latest
|
|
134
|
+
timeout-minutes: 15
|
|
135
|
+
services:
|
|
136
|
+
postgres:
|
|
137
|
+
image: pgvector/pgvector:pg16
|
|
138
|
+
env:
|
|
139
|
+
POSTGRES_PASSWORD: aaa
|
|
140
|
+
ports: ["5432:5432"]
|
|
141
|
+
options: >-
|
|
142
|
+
--health-cmd "pg_isready -U postgres"
|
|
143
|
+
--health-interval 5s
|
|
144
|
+
--health-timeout 5s
|
|
145
|
+
--health-retries 10
|
|
146
|
+
env:
|
|
147
|
+
AAA_TEST_POSTGRES_URL: postgresql://postgres:aaa@localhost:5432/postgres
|
|
148
|
+
AAA_REQUIRE_PGVECTOR: "1"
|
|
149
|
+
steps:
|
|
150
|
+
- uses: actions/checkout@v4
|
|
151
|
+
- uses: astral-sh/setup-uv@v5
|
|
152
|
+
with:
|
|
153
|
+
enable-cache: true
|
|
154
|
+
- run: uv sync --frozen --extra qdrant --extra pdf
|
|
155
|
+
- name: Vector store tests
|
|
156
|
+
run: uv run pytest -v -p no:cacheprovider tests/unit/test_ingest.py tests/unit/test_vector.py tests/unit/test_vector_contract.py tests/unit/test_vector_backends.py tests/unit/test_vector_hybrid.py
|
|
157
|
+
- name: Newest releases (scheduled and manual runs only)
|
|
158
|
+
if: github.event_name != 'pull_request' && github.event_name != 'push'
|
|
159
|
+
run: |
|
|
160
|
+
uv pip install --upgrade qdrant-client asyncpg
|
|
161
|
+
uv run --no-sync pytest -v -p no:cacheprovider tests/unit/test_vector_contract.py tests/unit/test_vector_backends.py
|
|
162
|
+
|
|
163
|
+
embedded-vector:
|
|
164
|
+
# Embedded vector stores run the shared contract suite for real, one library per leg (Chroma is large).
|
|
165
|
+
runs-on: ubuntu-latest
|
|
166
|
+
timeout-minutes: 20
|
|
167
|
+
strategy:
|
|
168
|
+
fail-fast: false
|
|
169
|
+
matrix:
|
|
170
|
+
lib: [sqlite-vec, lancedb, chromadb]
|
|
171
|
+
steps:
|
|
172
|
+
- uses: actions/checkout@v4
|
|
173
|
+
- uses: astral-sh/setup-uv@v5
|
|
174
|
+
with:
|
|
175
|
+
enable-cache: true
|
|
176
|
+
- run: uv sync --frozen
|
|
177
|
+
- name: Install ${{ matrix.lib }}
|
|
178
|
+
run: |
|
|
179
|
+
uv pip install ${{ matrix.lib }}
|
|
180
|
+
uv run --no-sync python -c "import ${{ matrix.lib == 'sqlite-vec' && 'sqlite_vec' || matrix.lib }}"
|
|
181
|
+
- name: Vector store tests
|
|
182
|
+
run: uv run --no-sync pytest -v -p no:cacheprovider tests/unit/test_vector_contract.py tests/unit/test_vector_backends.py tests/unit/test_vector_hybrid.py tests/unit/test_ingest.py -k "not pgvector and not postgres"
|
|
183
|
+
- name: Newest release (scheduled and manual runs only)
|
|
184
|
+
if: github.event_name != 'pull_request' && github.event_name != 'push'
|
|
185
|
+
run: |
|
|
186
|
+
uv pip install --upgrade ${{ matrix.lib }}
|
|
187
|
+
uv run --no-sync pytest -v -p no:cacheprovider tests/unit/test_vector_contract.py tests/unit/test_vector_backends.py tests/unit/test_vector_hybrid.py tests/unit/test_ingest.py -k "not pgvector and not postgres"
|
|
188
|
+
|
|
189
|
+
pinecone-local:
|
|
190
|
+
# The official Pinecone Local emulator (data plane), against the newest SDK and the previous major. Not a live Pinecone account.
|
|
191
|
+
runs-on: ubuntu-latest
|
|
192
|
+
timeout-minutes: 15
|
|
193
|
+
strategy:
|
|
194
|
+
fail-fast: false
|
|
195
|
+
matrix:
|
|
196
|
+
sdk: ["pinecone", "'pinecone[asyncio]<8'"]
|
|
197
|
+
steps:
|
|
198
|
+
- uses: actions/checkout@v4
|
|
199
|
+
- uses: astral-sh/setup-uv@v5
|
|
200
|
+
with:
|
|
201
|
+
enable-cache: true
|
|
202
|
+
- run: uv sync --frozen
|
|
203
|
+
- name: Start Pinecone Local and create an index
|
|
204
|
+
run: |
|
|
205
|
+
docker run -d --name pinecone-local -e PORT=5080 -e PINECONE_HOST=localhost -p 5080-5090:5080-5090 --platform linux/amd64 ghcr.io/pinecone-io/pinecone-local:latest
|
|
206
|
+
for i in $(seq 1 30); do curl -sf localhost:5080/indexes && break; sleep 2; done
|
|
207
|
+
host=$(curl -s -X POST localhost:5080/indexes -H 'Content-Type: application/json' -H 'Api-Key: pclocal' -H 'X-Pinecone-API-Version: 2025-04' \
|
|
208
|
+
-d '{"name":"contract","dimension":4,"metric":"cosine","spec":{"serverless":{"cloud":"aws","region":"us-east-1"}}}' | python3 -c "import sys,json; print(json.load(sys.stdin)['host'])")
|
|
209
|
+
echo "AAA_TEST_PINECONE_HOST=http://$host" >> "$GITHUB_ENV"
|
|
210
|
+
- name: Install the SDK
|
|
211
|
+
run: uv pip install ${{ matrix.sdk }}
|
|
212
|
+
- name: Pinecone tests
|
|
213
|
+
run: uv run --no-sync pytest -v -p no:cacheprovider tests/unit/test_vector_contract.py tests/unit/test_vector_backends.py tests/unit/test_ingest.py -k "pinecone or Pinecone or each_real"
|
|
214
|
+
|
|
215
|
+
guard-adapters-more:
|
|
216
|
+
# Bedrock (botocore validates request and response against the service model), Guardrails AI and NeMo Guardrails (real flows).
|
|
217
|
+
runs-on: ubuntu-latest
|
|
218
|
+
timeout-minutes: 20
|
|
219
|
+
strategy:
|
|
220
|
+
fail-fast: false
|
|
221
|
+
matrix:
|
|
222
|
+
include:
|
|
223
|
+
- lib: boto3
|
|
224
|
+
packages: "boto3"
|
|
225
|
+
keyword: Bedrock
|
|
226
|
+
- lib: guardrails-ai
|
|
227
|
+
packages: "guardrails-ai"
|
|
228
|
+
keyword: GuardrailsAI
|
|
229
|
+
- lib: nemoguardrails
|
|
230
|
+
packages: "nemoguardrails"
|
|
231
|
+
keyword: NeMo
|
|
232
|
+
steps:
|
|
233
|
+
- uses: actions/checkout@v4
|
|
234
|
+
- uses: astral-sh/setup-uv@v5
|
|
235
|
+
with:
|
|
236
|
+
enable-cache: true
|
|
237
|
+
- run: uv sync --frozen
|
|
238
|
+
- name: Install ${{ matrix.lib }}
|
|
239
|
+
run: uv pip install ${{ matrix.packages }}
|
|
240
|
+
- name: Adapter tests
|
|
241
|
+
run: uv run --no-sync pytest -v -p no:cacheprovider tests/unit/test_guard_adapters.py -k ${{ matrix.keyword }}
|
|
242
|
+
- name: Newest release (scheduled and manual runs only)
|
|
243
|
+
if: github.event_name != 'pull_request' && github.event_name != 'push'
|
|
244
|
+
run: |
|
|
245
|
+
uv pip install --upgrade ${{ matrix.packages }}
|
|
246
|
+
uv run --no-sync pytest -v -p no:cacheprovider tests/unit/test_guard_adapters.py -k ${{ matrix.keyword }}
|
|
247
|
+
|
|
248
|
+
native-providers:
|
|
249
|
+
# The Anthropic and Gemini clients speak the vendors' HTTP APIs without their SDKs; here the SDKs' own types validate the
|
|
250
|
+
# requests, replies and stream events we build and parse (and the weekly run catches the vendors changing them).
|
|
251
|
+
runs-on: ubuntu-latest
|
|
252
|
+
timeout-minutes: 15
|
|
253
|
+
strategy:
|
|
254
|
+
fail-fast: false
|
|
255
|
+
matrix:
|
|
256
|
+
sdk: [anthropic, google-genai]
|
|
257
|
+
steps:
|
|
258
|
+
- uses: actions/checkout@v4
|
|
259
|
+
- uses: astral-sh/setup-uv@v5
|
|
260
|
+
with:
|
|
261
|
+
enable-cache: true
|
|
262
|
+
- run: uv sync --frozen
|
|
263
|
+
- name: Install ${{ matrix.sdk }}
|
|
264
|
+
run: uv pip install ${{ matrix.sdk }}
|
|
265
|
+
- name: Provider tests
|
|
266
|
+
run: uv run --no-sync pytest -v -p no:cacheprovider tests/unit/test_native_providers.py
|
|
267
|
+
- name: Newest release (scheduled and manual runs only)
|
|
268
|
+
if: github.event_name != 'pull_request' && github.event_name != 'push'
|
|
269
|
+
run: |
|
|
270
|
+
uv pip install --upgrade ${{ matrix.sdk }}
|
|
271
|
+
uv run --no-sync pytest -v -p no:cacheprovider tests/unit/test_native_providers.py
|
|
272
|
+
|
|
273
|
+
builtin-tools:
|
|
274
|
+
# The sandbox runs against real Docker (network denied, memory/pid/timeout/output limits) and the search provider against a real SearXNG.
|
|
275
|
+
# AAA_REQUIRE_DOCKER turns "no Docker" into a failure, so this job cannot go green by skipping.
|
|
276
|
+
runs-on: ubuntu-latest
|
|
277
|
+
timeout-minutes: 20
|
|
278
|
+
env:
|
|
279
|
+
AAA_REQUIRE_DOCKER: "1"
|
|
280
|
+
AAA_TEST_SEARXNG_URL: http://localhost:8888
|
|
281
|
+
steps:
|
|
282
|
+
- uses: actions/checkout@v4
|
|
283
|
+
- uses: astral-sh/setup-uv@v5
|
|
284
|
+
with:
|
|
285
|
+
enable-cache: true
|
|
286
|
+
- run: uv sync --frozen
|
|
287
|
+
- name: Start SearXNG with JSON output enabled
|
|
288
|
+
run: |
|
|
289
|
+
mkdir -p searx && printf 'use_default_settings: true\nserver:\n secret_key: "ci-only-secret"\n limiter: false\nsearch:\n formats:\n - html\n - json\n' > searx/settings.yml
|
|
290
|
+
docker run -d --name searxng -p 8888:8080 -v "$PWD/searx/settings.yml:/etc/searxng/settings.yml:ro" searxng/searxng:latest
|
|
291
|
+
for i in $(seq 1 40); do curl -sf "http://localhost:8888/search?q=test&format=json" >/dev/null && break; sleep 3; done
|
|
292
|
+
- name: Built-in tool and sandbox tests
|
|
293
|
+
run: uv run pytest -v -p no:cacheprovider tests/unit/test_builtin_tools.py tests/unit/test_sandbox.py
|
|
294
|
+
|
|
295
|
+
server:
|
|
296
|
+
# aaa-server against a real Redis (the shared rate limiter) and as a built, installed package (the console script works from a clean venv).
|
|
297
|
+
runs-on: ubuntu-latest
|
|
298
|
+
timeout-minutes: 15
|
|
299
|
+
services:
|
|
300
|
+
redis:
|
|
301
|
+
image: redis:7
|
|
302
|
+
ports: ["6379:6379"]
|
|
303
|
+
options: >-
|
|
304
|
+
--health-cmd "redis-cli ping" --health-interval 5s --health-timeout 5s --health-retries 10
|
|
305
|
+
env:
|
|
306
|
+
AAA_TEST_REDIS_URL: redis://localhost:6379/0
|
|
307
|
+
steps:
|
|
308
|
+
- uses: actions/checkout@v4
|
|
309
|
+
- uses: astral-sh/setup-uv@v5
|
|
310
|
+
with:
|
|
311
|
+
enable-cache: true
|
|
312
|
+
- run: uv sync --frozen
|
|
313
|
+
- name: Server tests (MCP and A2A tests skip without their SDKs)
|
|
314
|
+
run: uv run pytest -v -p no:cacheprovider tests/server
|
|
315
|
+
- name: MCP and A2A against the official SDK clients
|
|
316
|
+
run: |
|
|
317
|
+
uv pip install a2a-sdk "mcp>=1.12,<3"
|
|
318
|
+
uv run --no-sync pytest -v -p no:cacheprovider tests/server/test_a2a.py tests/server/test_mcp_http.py tests/unit/test_mcp_server.py
|
|
319
|
+
- name: Build both packages and check their metadata
|
|
320
|
+
run: |
|
|
321
|
+
uv build --all-packages
|
|
322
|
+
uvx twine check --strict dist/*
|
|
323
|
+
- name: The built wheels install together and the console scripts run
|
|
324
|
+
run: |
|
|
325
|
+
uv venv /tmp/smoke --python 3.12
|
|
326
|
+
uv pip install --python /tmp/smoke/bin/python dist/*.whl
|
|
327
|
+
/tmp/smoke/bin/aaa-server serve --help
|
|
328
|
+
/tmp/smoke/bin/aaa --help
|
|
329
|
+
|
|
330
|
+
score-backends:
|
|
331
|
+
# Scores delivered to a real Phoenix and a real Langfuse (2.x: one container plus Postgres). LangSmith is mock-only.
|
|
332
|
+
runs-on: ubuntu-latest
|
|
333
|
+
timeout-minutes: 20
|
|
334
|
+
env:
|
|
335
|
+
AAA_TEST_PHOENIX_URL: http://localhost:6006
|
|
336
|
+
AAA_TEST_LANGFUSE_URL: http://localhost:3100
|
|
337
|
+
steps:
|
|
338
|
+
- uses: actions/checkout@v4
|
|
339
|
+
- uses: astral-sh/setup-uv@v5
|
|
340
|
+
with:
|
|
341
|
+
enable-cache: true
|
|
342
|
+
- run: uv sync --frozen --extra otel
|
|
343
|
+
- name: Start Phoenix and Langfuse
|
|
344
|
+
run: |
|
|
345
|
+
docker run -d --name phx -p 6006:6006 arizephoenix/phoenix:latest
|
|
346
|
+
docker network create lfnet
|
|
347
|
+
docker run -d --name lfpg --network lfnet -e POSTGRES_PASSWORD=pg -e POSTGRES_DB=lf postgres:16
|
|
348
|
+
sleep 6
|
|
349
|
+
docker run -d --name lf --network lfnet -p 3100:3000 -e DATABASE_URL=postgresql://postgres:pg@lfpg:5432/lf -e NEXTAUTH_SECRET=s -e SALT=s -e NEXTAUTH_URL=http://localhost:3100 -e TELEMETRY_ENABLED=false -e LANGFUSE_INIT_ORG_ID=o -e LANGFUSE_INIT_PROJECT_ID=p -e LANGFUSE_INIT_PROJECT_PUBLIC_KEY=pk-lf-test -e LANGFUSE_INIT_PROJECT_SECRET_KEY=sk-lf-test -e LANGFUSE_INIT_USER_EMAIL=a@b.co -e LANGFUSE_INIT_USER_PASSWORD=password123 -e LANGFUSE_INIT_USER_NAME=a langfuse/langfuse:2
|
|
350
|
+
for i in $(seq 1 40); do curl -sf localhost:6006/healthz && curl -sf localhost:3100/api/public/health && break; sleep 3; done
|
|
351
|
+
sleep 5; docker restart lf; for i in $(seq 1 30); do curl -sf localhost:3100/api/public/health && break; sleep 2; done; sleep 5
|
|
352
|
+
- name: Score delivery tests
|
|
353
|
+
run: uv run pytest -v -p no:cacheprovider tests/unit/test_eval_m9.py
|
|
354
|
+
|
|
355
|
+
container:
|
|
356
|
+
# The image builds, runs as a non-root user next to Postgres, and serves an authenticated run end to end.
|
|
357
|
+
runs-on: ubuntu-latest
|
|
358
|
+
timeout-minutes: 20
|
|
359
|
+
steps:
|
|
360
|
+
- uses: actions/checkout@v4
|
|
361
|
+
- name: Start the stack
|
|
362
|
+
run: |
|
|
363
|
+
export AAA_API_KEY=ci-key-$(openssl rand -hex 8)
|
|
364
|
+
echo "AAA_API_KEY=$AAA_API_KEY" >> "$GITHUB_ENV"
|
|
365
|
+
docker compose up -d --build
|
|
366
|
+
for i in $(seq 1 40); do curl -sf localhost:8000/healthz && break; sleep 3; done
|
|
367
|
+
- name: A run completes and unauthenticated calls are refused
|
|
368
|
+
run: |
|
|
369
|
+
set -e
|
|
370
|
+
R=$(curl -sf -X POST localhost:8000/v1/runs -H "Authorization: Bearer $AAA_API_KEY" -H 'Content-Type: application/json' -d '{"algo":"agent","input":{"task":"hi"}}' | python3 -c "import json,sys; print(json.load(sys.stdin)['run_id'])")
|
|
371
|
+
sleep 3
|
|
372
|
+
curl -sf localhost:8000/v1/runs/$R -H "Authorization: Bearer $AAA_API_KEY" | grep -q '"status":"completed"'
|
|
373
|
+
test "$(curl -s -o /dev/null -w '%{http_code}' localhost:8000/v1/runs)" = 401
|
|
374
|
+
test "$(docker compose exec -T server id -u)" = 10001
|
|
375
|
+
- if: failure()
|
|
376
|
+
run: docker compose logs
|
|
377
|
+
- run: docker compose down -v
|
|
378
|
+
|
|
379
|
+
adapters:
|
|
380
|
+
# The memory adapters are tested against stand-ins; this job replays their calls against the REAL
|
|
381
|
+
# Mem0, Graphiti and LangGraph signatures (tests/unit/test_memory_signatures.py), which are skipped
|
|
382
|
+
# in the main job because those libraries are not dev dependencies.
|
|
383
|
+
runs-on: ubuntu-latest
|
|
384
|
+
timeout-minutes: 15
|
|
385
|
+
steps:
|
|
386
|
+
- uses: actions/checkout@v4
|
|
387
|
+
- uses: astral-sh/setup-uv@v5
|
|
388
|
+
with:
|
|
389
|
+
enable-cache: true
|
|
390
|
+
- name: Locked versions
|
|
391
|
+
run: |
|
|
392
|
+
uv sync --frozen --extra mem0 --extra graphiti --extra langgraph --extra langmem --extra mcp --extra otel
|
|
393
|
+
uv run pytest -v -p no:cacheprovider tests/unit/test_otel.py tests/unit/test_memory_signatures.py tests/unit/test_memory_adapters.py tests/unit/test_memory_contract.py tests/unit/test_mcp.py tests/unit/test_mcp_server.py tests/server/test_mcp_http.py tests/unit/test_examples.py -k "not cluster"
|
|
394
|
+
- name: OpenAI SDK types (conformance of the Responses client; not a runtime dependency)
|
|
395
|
+
run: |
|
|
396
|
+
uv pip install openai
|
|
397
|
+
uv run --no-sync pytest -v -p no:cacheprovider tests/unit/test_openai_conformance.py
|
|
398
|
+
- name: MCP SDK 1.x (the lock resolves 2.x; both are supported)
|
|
399
|
+
run: |
|
|
400
|
+
uv pip install "mcp<2"
|
|
401
|
+
uv run --no-sync pytest -v -p no:cacheprovider tests/unit/test_mcp.py tests/unit/test_mcp_server.py
|
|
402
|
+
- name: Newest releases (scheduled and manual runs only)
|
|
403
|
+
if: github.event_name != 'pull_request' && github.event_name != 'push'
|
|
404
|
+
run: |
|
|
405
|
+
uv pip install --upgrade mem0ai graphiti-core langgraph langmem mcp openai opentelemetry-sdk opentelemetry-exporter-otlp-proto-http opentelemetry-semantic-conventions
|
|
406
|
+
uv run --no-sync pytest -v -p no:cacheprovider tests/unit/test_otel.py tests/unit/test_memory_signatures.py tests/unit/test_mcp.py tests/unit/test_openai_conformance.py
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
name: docs
|
|
2
|
+
|
|
3
|
+
# Builds the documentation (strictly) and publishes it to GitHub Pages on every push to master that
|
|
4
|
+
# touches the docs, the examples they embed, the source their API reference is generated from, or
|
|
5
|
+
# this workflow. A broken example or an invalid fragment blocks publishing.
|
|
6
|
+
|
|
7
|
+
on:
|
|
8
|
+
push:
|
|
9
|
+
branches: [master]
|
|
10
|
+
paths:
|
|
11
|
+
- "docs/**"
|
|
12
|
+
- "examples/**"
|
|
13
|
+
- "src/**"
|
|
14
|
+
- "packages/**"
|
|
15
|
+
- "mkdocs.yml"
|
|
16
|
+
- "pyproject.toml"
|
|
17
|
+
- "uv.lock"
|
|
18
|
+
- "LICENSE"
|
|
19
|
+
- ".github/workflows/docs.yml"
|
|
20
|
+
workflow_dispatch:
|
|
21
|
+
|
|
22
|
+
permissions:
|
|
23
|
+
contents: read
|
|
24
|
+
pages: write
|
|
25
|
+
id-token: write
|
|
26
|
+
|
|
27
|
+
concurrency:
|
|
28
|
+
group: pages
|
|
29
|
+
cancel-in-progress: false
|
|
30
|
+
|
|
31
|
+
jobs:
|
|
32
|
+
build:
|
|
33
|
+
runs-on: ubuntu-latest
|
|
34
|
+
steps:
|
|
35
|
+
- uses: actions/checkout@v4
|
|
36
|
+
|
|
37
|
+
- uses: astral-sh/setup-uv@v5
|
|
38
|
+
with:
|
|
39
|
+
enable-cache: true
|
|
40
|
+
|
|
41
|
+
- name: Install (docs extra + dev group)
|
|
42
|
+
run: uv sync --extra docs --frozen
|
|
43
|
+
|
|
44
|
+
- name: Every embedded example runs, and every inline fragment is valid Python
|
|
45
|
+
run: uv run pytest -q -p no:cacheprovider tests/unit/test_examples.py tests/unit/test_docs_snippets.py
|
|
46
|
+
|
|
47
|
+
- name: "Build (strict - warnings fail the build)"
|
|
48
|
+
run: uv run mkdocs build --strict
|
|
49
|
+
|
|
50
|
+
- uses: actions/configure-pages@v5
|
|
51
|
+
|
|
52
|
+
- uses: actions/upload-pages-artifact@v3
|
|
53
|
+
with:
|
|
54
|
+
path: site
|
|
55
|
+
|
|
56
|
+
deploy:
|
|
57
|
+
needs: build
|
|
58
|
+
runs-on: ubuntu-latest
|
|
59
|
+
environment:
|
|
60
|
+
name: github-pages
|
|
61
|
+
url: ${{ steps.deployment.outputs.page_url }}
|
|
62
|
+
steps:
|
|
63
|
+
- id: deployment
|
|
64
|
+
uses: actions/deploy-pages@v4
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
name: release-server
|
|
2
|
+
|
|
3
|
+
# Publishes `aaa-server` to PyPI when a GitHub Release tagged server-vX.Y.Z is published (Trusted Publishing, no token stored).
|
|
4
|
+
# aaa-server is versioned and released independently of the library (release.yml handles v* tags).
|
|
5
|
+
# One-time setup: create the `aaa-server` project on PyPI with a pending trusted publisher for this repository,
|
|
6
|
+
# workflow `release-server.yml`, environment `pypi-server`.
|
|
7
|
+
|
|
8
|
+
on:
|
|
9
|
+
release:
|
|
10
|
+
types: [published]
|
|
11
|
+
workflow_dispatch:
|
|
12
|
+
|
|
13
|
+
permissions:
|
|
14
|
+
contents: read
|
|
15
|
+
|
|
16
|
+
jobs:
|
|
17
|
+
build:
|
|
18
|
+
if: github.event_name != 'release' || startsWith(github.event.release.tag_name, 'server-v')
|
|
19
|
+
runs-on: ubuntu-latest
|
|
20
|
+
timeout-minutes: 15
|
|
21
|
+
outputs:
|
|
22
|
+
already_published: ${{ steps.exists.outputs.published }}
|
|
23
|
+
steps:
|
|
24
|
+
- uses: actions/checkout@v4
|
|
25
|
+
- uses: astral-sh/setup-uv@v5
|
|
26
|
+
- name: Tag, version and dependency floor agree
|
|
27
|
+
run: |
|
|
28
|
+
uv run --no-project python - <<'PY'
|
|
29
|
+
import os, tomllib
|
|
30
|
+
meta = tomllib.load(open("packages/aaa-server/pyproject.toml", "rb"))["project"]
|
|
31
|
+
tag = os.environ.get("GITHUB_REF_NAME", "")
|
|
32
|
+
if os.environ.get("GITHUB_EVENT_NAME") == "release" and tag != "server-v" + meta["version"]:
|
|
33
|
+
raise SystemExit(f"release tag {tag!r} does not match aaa-server version {meta['version']!r}")
|
|
34
|
+
core = [d for d in meta["dependencies"] if d.startswith("autonomous-agent-architecture")]
|
|
35
|
+
if any("dev" in d for d in core):
|
|
36
|
+
raise SystemExit(f"the dependency on the library is still a development floor: {core}")
|
|
37
|
+
PY
|
|
38
|
+
- name: Is this version already on PyPI?
|
|
39
|
+
id: exists
|
|
40
|
+
run: |
|
|
41
|
+
version="$(uv run --no-project python -c "import tomllib; print(tomllib.load(open('packages/aaa-server/pyproject.toml','rb'))['project']['version'])")"
|
|
42
|
+
code="$(curl -s -o /dev/null -w '%{http_code}' "https://pypi.org/pypi/aaa-server/${version}/json")"
|
|
43
|
+
if [ "$code" = "200" ]; then echo "published=true" >> "$GITHUB_OUTPUT"; else echo "published=false" >> "$GITHUB_OUTPUT"; fi
|
|
44
|
+
- run: uv build --package aaa-server
|
|
45
|
+
- run: uvx twine check --strict dist/*
|
|
46
|
+
- name: The built wheel installs from PyPI's library and runs
|
|
47
|
+
run: |
|
|
48
|
+
uv venv /tmp/smoke --python 3.12
|
|
49
|
+
uv pip install --python /tmp/smoke/bin/python dist/*.whl
|
|
50
|
+
/tmp/smoke/bin/aaa-server serve --help
|
|
51
|
+
- uses: actions/upload-artifact@v4
|
|
52
|
+
with:
|
|
53
|
+
name: dist
|
|
54
|
+
path: dist/
|
|
55
|
+
if-no-files-found: error
|
|
56
|
+
|
|
57
|
+
test:
|
|
58
|
+
needs: build
|
|
59
|
+
runs-on: ubuntu-latest
|
|
60
|
+
timeout-minutes: 20
|
|
61
|
+
services:
|
|
62
|
+
redis:
|
|
63
|
+
image: redis:7
|
|
64
|
+
ports: ["6379:6379"]
|
|
65
|
+
options: >-
|
|
66
|
+
--health-cmd "redis-cli ping" --health-interval 5s --health-timeout 5s --health-retries 10
|
|
67
|
+
env:
|
|
68
|
+
AAA_TEST_REDIS_URL: redis://localhost:6379/0
|
|
69
|
+
steps:
|
|
70
|
+
- uses: actions/checkout@v4
|
|
71
|
+
- uses: astral-sh/setup-uv@v5
|
|
72
|
+
with:
|
|
73
|
+
enable-cache: true
|
|
74
|
+
- run: uv sync --frozen
|
|
75
|
+
- run: uv run ruff check . && uv run ruff format --check . && uv run pyright
|
|
76
|
+
- run: uv run pytest -v -p no:cacheprovider tests/server
|
|
77
|
+
|
|
78
|
+
publish-pypi:
|
|
79
|
+
if: github.event_name == 'release' && needs.build.outputs.already_published != 'true'
|
|
80
|
+
needs: [build, test]
|
|
81
|
+
runs-on: ubuntu-latest
|
|
82
|
+
environment:
|
|
83
|
+
name: pypi-server
|
|
84
|
+
url: https://pypi.org/p/aaa-server
|
|
85
|
+
permissions:
|
|
86
|
+
id-token: write
|
|
87
|
+
steps:
|
|
88
|
+
- uses: actions/download-artifact@v4
|
|
89
|
+
with:
|
|
90
|
+
name: dist
|
|
91
|
+
path: dist/
|
|
92
|
+
- uses: pypa/gh-action-pypi-publish@release/v1
|