aireliability 0.1.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.
Files changed (209) hide show
  1. aireliability-0.1.0/.github/workflows/ci.yml +114 -0
  2. aireliability-0.1.0/.github/workflows/integration.yml +43 -0
  3. aireliability-0.1.0/.github/workflows/reliability.yml +81 -0
  4. aireliability-0.1.0/.gitignore +88 -0
  5. aireliability-0.1.0/CHANGELOG.md +45 -0
  6. aireliability-0.1.0/CONTRIBUTING.md +149 -0
  7. aireliability-0.1.0/LICENSE +176 -0
  8. aireliability-0.1.0/PKG-INFO +801 -0
  9. aireliability-0.1.0/README.md +758 -0
  10. aireliability-0.1.0/benchmarks/README.md +158 -0
  11. aireliability-0.1.0/benchmarks/RESULTS.md +132 -0
  12. aireliability-0.1.0/benchmarks/benchmark_results.json +121 -0
  13. aireliability-0.1.0/benchmarks/phase14_results.json +124 -0
  14. aireliability-0.1.0/benchmarks/run_benchmarks.py +497 -0
  15. aireliability-0.1.0/benchmarks/run_phase24_benchmarks.py +183 -0
  16. aireliability-0.1.0/benchmarks/run_phase25_benchmarks.py +165 -0
  17. aireliability-0.1.0/benchmarks/run_phase26_benchmarks.py +215 -0
  18. aireliability-0.1.0/benchmarks/run_phase27_benchmarks.py +292 -0
  19. aireliability-0.1.0/benchmarks/run_phase28_benchmarks.py +252 -0
  20. aireliability-0.1.0/benchmarks/run_phase29_benchmarks.py +249 -0
  21. aireliability-0.1.0/benchmarks/scenarios/__init__.py +53 -0
  22. aireliability-0.1.0/benchmarks/scenarios/latency_regression.py +50 -0
  23. aireliability-0.1.0/benchmarks/scenarios/missing_tool.py +71 -0
  24. aireliability-0.1.0/benchmarks/scenarios/output_regression.py +48 -0
  25. aireliability-0.1.0/benchmarks/scenarios/tool_order.py +67 -0
  26. aireliability-0.1.0/benchmarks/scenarios/wrong_arguments.py +62 -0
  27. aireliability-0.1.0/benchmarks/scenarios/wrong_tool.py +55 -0
  28. aireliability-0.1.0/benchmarks/scenarios.py +162 -0
  29. aireliability-0.1.0/docs/README.md +29 -0
  30. aireliability-0.1.0/docs/adapters.md +197 -0
  31. aireliability-0.1.0/docs/architecture.md +134 -0
  32. aireliability-0.1.0/docs/ci-reliability.md +189 -0
  33. aireliability-0.1.0/docs/control-plane.md +185 -0
  34. aireliability-0.1.0/docs/distributed-execution.md +184 -0
  35. aireliability-0.1.0/docs/evaluation_concepts.md +83 -0
  36. aireliability-0.1.0/docs/integrations.md +214 -0
  37. aireliability-0.1.0/docs/multi-tenancy.md +176 -0
  38. aireliability-0.1.0/docs/observability.md +250 -0
  39. aireliability-0.1.0/docs/persistence.md +250 -0
  40. aireliability-0.1.0/docs/provider-integration.md +200 -0
  41. aireliability-0.1.0/docs/regression-generation.md +185 -0
  42. aireliability-0.1.0/docs/release.md +117 -0
  43. aireliability-0.1.0/docs/resilience.md +202 -0
  44. aireliability-0.1.0/docs/root-cause-analysis.md +177 -0
  45. aireliability-0.1.0/docs/security.md +141 -0
  46. aireliability-0.1.0/docs/semantic-evaluation.md +196 -0
  47. aireliability-0.1.0/examples/README.md +60 -0
  48. aireliability-0.1.0/examples/ci_pipeline.sh +53 -0
  49. aireliability-0.1.0/examples/custom_evaluator_and_adapter.py +177 -0
  50. aireliability-0.1.0/examples/end_to_end_workflow.py +170 -0
  51. aireliability-0.1.0/examples/langchain_reliability.py +95 -0
  52. aireliability-0.1.0/examples/langgraph_reliability.py +96 -0
  53. aireliability-0.1.0/examples/local_agent.py +140 -0
  54. aireliability-0.1.0/examples/real_agent_reliability.py +143 -0
  55. aireliability-0.1.0/pyproject.toml +117 -0
  56. aireliability-0.1.0/src/aireliability/__init__.py +574 -0
  57. aireliability-0.1.0/src/aireliability/cli.py +2010 -0
  58. aireliability-0.1.0/src/aireliability/control_plane/__init__.py +66 -0
  59. aireliability-0.1.0/src/aireliability/control_plane/cancellation.py +146 -0
  60. aireliability-0.1.0/src/aireliability/control_plane/controller.py +716 -0
  61. aireliability-0.1.0/src/aireliability/control_plane/errors.py +25 -0
  62. aireliability-0.1.0/src/aireliability/control_plane/models.py +248 -0
  63. aireliability-0.1.0/src/aireliability/control_plane/policies.py +144 -0
  64. aireliability-0.1.0/src/aireliability/control_plane/queue.py +183 -0
  65. aireliability-0.1.0/src/aireliability/control_plane/scheduler.py +203 -0
  66. aireliability-0.1.0/src/aireliability/control_plane/worker_manager.py +196 -0
  67. aireliability-0.1.0/src/aireliability/core/__init__.py +51 -0
  68. aireliability-0.1.0/src/aireliability/core/exceptions.py +25 -0
  69. aireliability-0.1.0/src/aireliability/core/models.py +218 -0
  70. aireliability-0.1.0/src/aireliability/core/protocols.py +93 -0
  71. aireliability-0.1.0/src/aireliability/diagnosis/__init__.py +21 -0
  72. aireliability-0.1.0/src/aireliability/diagnosis/analyzer.py +156 -0
  73. aireliability-0.1.0/src/aireliability/diagnosis/evidence.py +31 -0
  74. aireliability-0.1.0/src/aireliability/diagnosis/models.py +171 -0
  75. aireliability-0.1.0/src/aireliability/diagnosis/rules.py +330 -0
  76. aireliability-0.1.0/src/aireliability/distributed/__init__.py +59 -0
  77. aireliability-0.1.0/src/aireliability/distributed/aggregator.py +156 -0
  78. aireliability-0.1.0/src/aireliability/distributed/metrics.py +473 -0
  79. aireliability-0.1.0/src/aireliability/distributed/models.py +336 -0
  80. aireliability-0.1.0/src/aireliability/distributed/runner.py +297 -0
  81. aireliability-0.1.0/src/aireliability/distributed/sqlite_storage.py +1671 -0
  82. aireliability-0.1.0/src/aireliability/distributed/storage.py +772 -0
  83. aireliability-0.1.0/src/aireliability/distributed/worker.py +386 -0
  84. aireliability-0.1.0/src/aireliability/evaluation/__init__.py +54 -0
  85. aireliability-0.1.0/src/aireliability/evaluation/assertions.py +16 -0
  86. aireliability-0.1.0/src/aireliability/evaluation/deterministic/__init__.py +33 -0
  87. aireliability-0.1.0/src/aireliability/evaluation/expectations.py +770 -0
  88. aireliability-0.1.0/src/aireliability/evaluation/semantic/__init__.py +23 -0
  89. aireliability-0.1.0/src/aireliability/evaluation/semantic/base.py +81 -0
  90. aireliability-0.1.0/src/aireliability/evaluation/semantic/expectations.py +198 -0
  91. aireliability-0.1.0/src/aireliability/evaluation/semantic/mock_judge.py +134 -0
  92. aireliability-0.1.0/src/aireliability/execution/__init__.py +22 -0
  93. aireliability-0.1.0/src/aireliability/execution/adapters/__init__.py +25 -0
  94. aireliability-0.1.0/src/aireliability/execution/adapters/base.py +269 -0
  95. aireliability-0.1.0/src/aireliability/execution/adapters/callable.py +302 -0
  96. aireliability-0.1.0/src/aireliability/execution/runner.py +263 -0
  97. aireliability-0.1.0/src/aireliability/failures/__init__.py +15 -0
  98. aireliability-0.1.0/src/aireliability/failures/analyzer.py +354 -0
  99. aireliability-0.1.0/src/aireliability/failures/taxonomy.py +147 -0
  100. aireliability-0.1.0/src/aireliability/integrations/__init__.py +52 -0
  101. aireliability-0.1.0/src/aireliability/integrations/langchain/__init__.py +27 -0
  102. aireliability-0.1.0/src/aireliability/integrations/langchain/adapter.py +355 -0
  103. aireliability-0.1.0/src/aireliability/integrations/langgraph/__init__.py +27 -0
  104. aireliability-0.1.0/src/aireliability/integrations/langgraph/adapter.py +393 -0
  105. aireliability-0.1.0/src/aireliability/integrations/openai_compatible/__init__.py +30 -0
  106. aireliability-0.1.0/src/aireliability/integrations/openai_compatible/adapter.py +885 -0
  107. aireliability-0.1.0/src/aireliability/integrations/opentelemetry/__init__.py +110 -0
  108. aireliability-0.1.0/src/aireliability/integrations/postgres/__init__.py +125 -0
  109. aireliability-0.1.0/src/aireliability/integrations/prometheus/__init__.py +139 -0
  110. aireliability-0.1.0/src/aireliability/integrations/redis/__init__.py +30 -0
  111. aireliability-0.1.0/src/aireliability/observability/__init__.py +113 -0
  112. aireliability-0.1.0/src/aireliability/observability/aggregation.py +107 -0
  113. aireliability-0.1.0/src/aireliability/observability/anomaly.py +128 -0
  114. aireliability-0.1.0/src/aireliability/observability/context.py +110 -0
  115. aireliability-0.1.0/src/aireliability/observability/events.py +111 -0
  116. aireliability-0.1.0/src/aireliability/observability/exporter.py +99 -0
  117. aireliability-0.1.0/src/aireliability/observability/health.py +134 -0
  118. aireliability-0.1.0/src/aireliability/observability/incidents.py +122 -0
  119. aireliability-0.1.0/src/aireliability/observability/manager.py +197 -0
  120. aireliability-0.1.0/src/aireliability/observability/metrics.py +419 -0
  121. aireliability-0.1.0/src/aireliability/observability/models.py +133 -0
  122. aireliability-0.1.0/src/aireliability/observability/retention.py +91 -0
  123. aireliability-0.1.0/src/aireliability/observability/sanitization.py +29 -0
  124. aireliability-0.1.0/src/aireliability/observability/slo.py +280 -0
  125. aireliability-0.1.0/src/aireliability/observability/spans.py +150 -0
  126. aireliability-0.1.0/src/aireliability/observability/traces.py +223 -0
  127. aireliability-0.1.0/src/aireliability/py.typed +0 -0
  128. aireliability-0.1.0/src/aireliability/regression/__init__.py +38 -0
  129. aireliability-0.1.0/src/aireliability/regression/baseline.py +222 -0
  130. aireliability-0.1.0/src/aireliability/regression/generator.py +173 -0
  131. aireliability-0.1.0/src/aireliability/regression/minimizer.py +144 -0
  132. aireliability-0.1.0/src/aireliability/regression/models.py +107 -0
  133. aireliability-0.1.0/src/aireliability/regression/runner.py +197 -0
  134. aireliability-0.1.0/src/aireliability/regression/synthesizer.py +302 -0
  135. aireliability-0.1.0/src/aireliability/regression/validator.py +169 -0
  136. aireliability-0.1.0/src/aireliability/resilience/__init__.py +57 -0
  137. aireliability-0.1.0/src/aireliability/resilience/bulkhead.py +61 -0
  138. aireliability-0.1.0/src/aireliability/resilience/circuit_breaker.py +110 -0
  139. aireliability-0.1.0/src/aireliability/resilience/classifier.py +157 -0
  140. aireliability-0.1.0/src/aireliability/resilience/health.py +87 -0
  141. aireliability-0.1.0/src/aireliability/resilience/load_shedder.py +97 -0
  142. aireliability-0.1.0/src/aireliability/resilience/manager.py +201 -0
  143. aireliability-0.1.0/src/aireliability/resilience/models.py +98 -0
  144. aireliability-0.1.0/src/aireliability/resilience/retry.py +65 -0
  145. aireliability-0.1.0/src/aireliability/resilience/worker_health.py +221 -0
  146. aireliability-0.1.0/src/aireliability/security/__init__.py +151 -0
  147. aireliability-0.1.0/src/aireliability/security/api_keys.py +197 -0
  148. aireliability-0.1.0/src/aireliability/security/audit.py +113 -0
  149. aireliability-0.1.0/src/aireliability/security/authentication.py +260 -0
  150. aireliability-0.1.0/src/aireliability/security/authorization.py +102 -0
  151. aireliability-0.1.0/src/aireliability/security/errors.py +99 -0
  152. aireliability-0.1.0/src/aireliability/security/gateway.py +355 -0
  153. aireliability-0.1.0/src/aireliability/security/identity.py +57 -0
  154. aireliability-0.1.0/src/aireliability/security/models.py +146 -0
  155. aireliability-0.1.0/src/aireliability/security/permissions.py +113 -0
  156. aireliability-0.1.0/src/aireliability/security/replay_protection.py +119 -0
  157. aireliability-0.1.0/src/aireliability/security/request_validator.py +91 -0
  158. aireliability-0.1.0/src/aireliability/security/roles.py +193 -0
  159. aireliability-0.1.0/src/aireliability/security/security_events.py +82 -0
  160. aireliability-0.1.0/src/aireliability/security/tokens.py +154 -0
  161. aireliability-0.1.0/src/aireliability/storage/__init__.py +6 -0
  162. aireliability-0.1.0/src/aireliability/storage/base.py +146 -0
  163. aireliability-0.1.0/src/aireliability/storage/sqlite.py +694 -0
  164. aireliability-0.1.0/src/aireliability/telemetry/__init__.py +45 -0
  165. aireliability-0.1.0/src/aireliability/telemetry/async_collector.py +167 -0
  166. aireliability-0.1.0/src/aireliability/telemetry/builder.py +299 -0
  167. aireliability-0.1.0/src/aireliability/telemetry/collector.py +156 -0
  168. aireliability-0.1.0/src/aireliability/telemetry/models.py +170 -0
  169. aireliability-0.1.0/src/aireliability/telemetry/sampler.py +61 -0
  170. aireliability-0.1.0/src/aireliability/telemetry/sanitizer.py +86 -0
  171. aireliability-0.1.0/src/aireliability/tenancy/__init__.py +54 -0
  172. aireliability-0.1.0/src/aireliability/tenancy/governance.py +177 -0
  173. aireliability-0.1.0/src/aireliability/tenancy/models.py +279 -0
  174. aireliability-0.1.0/src/aireliability/tenancy/policies.py +139 -0
  175. aireliability-0.1.0/src/aireliability/tenancy/quota.py +167 -0
  176. aireliability-0.1.0/src/aireliability/tenancy/rate_limiter.py +164 -0
  177. aireliability-0.1.0/tests/fixtures/reliability/output_regression.json +23 -0
  178. aireliability-0.1.0/tests/fixtures/reliability/tool_order.json +31 -0
  179. aireliability-0.1.0/tests/fixtures/reliability/wrong_arguments.json +28 -0
  180. aireliability-0.1.0/tests/fixtures/reliability/wrong_tool.json +27 -0
  181. aireliability-0.1.0/tests/integration/__init__.py +1 -0
  182. aireliability-0.1.0/tests/integration/test_phase30_final.py +525 -0
  183. aireliability-0.1.0/tests/mocks/framework_mocks.py +336 -0
  184. aireliability-0.1.0/tests/unit/__init__.py +1 -0
  185. aireliability-0.1.0/tests/unit/test_assertions.py +502 -0
  186. aireliability-0.1.0/tests/unit/test_cli.py +221 -0
  187. aireliability-0.1.0/tests/unit/test_failures.py +290 -0
  188. aireliability-0.1.0/tests/unit/test_imports.py +148 -0
  189. aireliability-0.1.0/tests/unit/test_models.py +428 -0
  190. aireliability-0.1.0/tests/unit/test_phase14_benchmarks.py +323 -0
  191. aireliability-0.1.0/tests/unit/test_phase15_integration.py +354 -0
  192. aireliability-0.1.0/tests/unit/test_phase16_semantic.py +379 -0
  193. aireliability-0.1.0/tests/unit/test_phase17_diagnosis.py +387 -0
  194. aireliability-0.1.0/tests/unit/test_phase18_regression.py +608 -0
  195. aireliability-0.1.0/tests/unit/test_phase19_integrations.py +408 -0
  196. aireliability-0.1.0/tests/unit/test_phase20_ci_reliability.py +557 -0
  197. aireliability-0.1.0/tests/unit/test_phase21_provider_integration.py +679 -0
  198. aireliability-0.1.0/tests/unit/test_phase22_telemetry.py +745 -0
  199. aireliability-0.1.0/tests/unit/test_phase23_distributed.py +433 -0
  200. aireliability-0.1.0/tests/unit/test_phase24_persistence.py +488 -0
  201. aireliability-0.1.0/tests/unit/test_phase25_control_plane.py +568 -0
  202. aireliability-0.1.0/tests/unit/test_phase26_resilience.py +571 -0
  203. aireliability-0.1.0/tests/unit/test_phase27_multitenancy.py +492 -0
  204. aireliability-0.1.0/tests/unit/test_phase28_security.py +476 -0
  205. aireliability-0.1.0/tests/unit/test_phase29_observability.py +447 -0
  206. aireliability-0.1.0/tests/unit/test_protocols.py +166 -0
  207. aireliability-0.1.0/tests/unit/test_regression.py +329 -0
  208. aireliability-0.1.0/tests/unit/test_reliability_runner.py +274 -0
  209. aireliability-0.1.0/tests/unit/test_storage.py +357 -0
@@ -0,0 +1,114 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ pull_request:
8
+ branches:
9
+ - main
10
+
11
+ concurrency:
12
+ group: ${{ github.workflow }}-${{ github.ref }}
13
+ cancel-in-progress: true
14
+
15
+ permissions:
16
+ contents: read
17
+
18
+ jobs:
19
+ lint:
20
+ name: Lint & Format Check (Ruff)
21
+ runs-on: ubuntu-latest
22
+ steps:
23
+ - name: Check out repository
24
+ uses: actions/checkout@v4
25
+
26
+ - name: Set up Python
27
+ uses: actions/setup-python@v5
28
+ with:
29
+ python-version: "3.11"
30
+ cache: "pip"
31
+
32
+ - name: Install dependencies
33
+ run: |
34
+ python -m pip install --upgrade pip
35
+ python -m pip install ruff
36
+
37
+ - name: Run Ruff Lint
38
+ run: ruff check .
39
+
40
+ - name: Run Ruff Format Check
41
+ run: ruff format --check .
42
+
43
+ tests:
44
+ name: Tests (Python ${{ matrix.python-version }})
45
+ runs-on: ubuntu-latest
46
+ needs: [lint]
47
+ strategy:
48
+ fail-fast: false
49
+ matrix:
50
+ python-version: ["3.11", "3.12", "3.13"]
51
+ steps:
52
+ - name: Check out repository
53
+ uses: actions/checkout@v4
54
+
55
+ - name: Set up Python ${{ matrix.python-version }}
56
+ uses: actions/setup-python@v5
57
+ with:
58
+ python-version: ${{ matrix.python-version }}
59
+ cache: "pip"
60
+
61
+ - name: Install core package and dev dependencies
62
+ run: |
63
+ python -m pip install --upgrade pip
64
+ python -m pip install -e ".[dev]"
65
+
66
+ - name: Run test suite with JUnit report
67
+ run: |
68
+ pytest --junitxml=junit-results-${{ matrix.python-version }}.xml
69
+
70
+ - name: Upload test results artifact
71
+ uses: actions/upload-artifact@v4
72
+ if: always()
73
+ with:
74
+ name: test-results-python-${{ matrix.python-version }}
75
+ path: junit-results-${{ matrix.python-version }}.xml
76
+ retention-days: 7
77
+
78
+ package:
79
+ name: Package Build & Clean Install Verification
80
+ runs-on: ubuntu-latest
81
+ needs: [tests]
82
+ steps:
83
+ - name: Check out repository
84
+ uses: actions/checkout@v4
85
+
86
+ - name: Set up Python
87
+ uses: actions/setup-python@v5
88
+ with:
89
+ python-version: "3.11"
90
+ cache: "pip"
91
+
92
+ - name: Install packaging tools
93
+ run: |
94
+ python -m pip install --upgrade pip
95
+ python -m pip install build twine
96
+
97
+ - name: Build package distribution (sdist and wheel)
98
+ run: python -m build
99
+
100
+ - name: Validate distribution metadata with Twine
101
+ run: |
102
+ ls -la dist/
103
+ twine check dist/*
104
+
105
+ - name: Clean environment installation test
106
+ run: |
107
+ # Create an isolated temporary virtual environment outside repository tree
108
+ python -m venv /tmp/aireliability-clean
109
+ /tmp/aireliability-clean/bin/pip install --upgrade pip
110
+ /tmp/aireliability-clean/bin/pip install dist/*.whl
111
+
112
+ # Verify Python import and CLI entrypoint
113
+ /tmp/aireliability-clean/bin/python -c "import aireliability; print('aireliability version:', aireliability.__version__)"
114
+ /tmp/aireliability-clean/bin/airel --help
@@ -0,0 +1,43 @@
1
+ name: Integration
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ pull_request:
8
+ branches:
9
+ - main
10
+
11
+ concurrency:
12
+ group: ${{ github.workflow }}-${{ github.ref }}
13
+ cancel-in-progress: true
14
+
15
+ permissions:
16
+ contents: read
17
+
18
+ jobs:
19
+ framework-matrix:
20
+ name: Optional Frameworks (Python ${{ matrix.python-version }})
21
+ runs-on: ubuntu-latest
22
+ strategy:
23
+ fail-fast: false
24
+ matrix:
25
+ python-version: ["3.11", "3.12"]
26
+ steps:
27
+ - name: Check out repository
28
+ uses: actions/checkout@v4
29
+
30
+ - name: Set up Python ${{ matrix.python-version }}
31
+ uses: actions/setup-python@v5
32
+ with:
33
+ python-version: ${{ matrix.python-version }}
34
+ cache: "pip"
35
+
36
+ - name: Install package with optional framework dependencies
37
+ run: |
38
+ python -m pip install --upgrade pip
39
+ python -m pip install -e ".[dev,langgraph,langchain,openai,opentelemetry,prometheus]"
40
+
41
+ - name: Run framework and provider integration test suite
42
+ run: |
43
+ pytest tests/unit/test_phase19_integrations.py tests/unit/test_phase21_provider_integration.py tests/unit/test_phase22_telemetry.py -v
@@ -0,0 +1,81 @@
1
+ name: Reliability
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ pull_request:
8
+ branches:
9
+ - main
10
+
11
+ concurrency:
12
+ group: ${{ github.workflow }}-${{ github.ref }}
13
+ cancel-in-progress: true
14
+
15
+ permissions:
16
+ contents: read
17
+
18
+ jobs:
19
+ reliability:
20
+ name: Deterministic Reliability & Regression Suite
21
+ runs-on: ubuntu-latest
22
+ steps:
23
+ - name: Check out repository
24
+ uses: actions/checkout@v4
25
+
26
+ - name: Set up Python
27
+ uses: actions/setup-python@v5
28
+ with:
29
+ python-version: "3.11"
30
+ cache: "pip"
31
+
32
+ - name: Install dependencies
33
+ run: |
34
+ python -m pip install --upgrade pip
35
+ python -m pip install -e ".[dev]"
36
+
37
+ - name: Run Deterministic Reliability Benchmarks & Scenarios
38
+ run: |
39
+ pytest tests/unit/test_phase14_benchmarks.py \
40
+ tests/unit/test_phase18_regression.py \
41
+ tests/unit/test_phase20_ci_reliability.py \
42
+ tests/unit/test_phase23_distributed.py \
43
+ tests/unit/test_phase24_persistence.py \
44
+ tests/unit/test_phase25_control_plane.py \
45
+ tests/unit/test_phase26_resilience.py \
46
+ -v
47
+
48
+ - name: Run Smoke Benchmark (100 Iterations)
49
+ run: |
50
+ python benchmarks/run_benchmarks.py --smoke
51
+
52
+ - name: Verify CLI PR Reliability Reporting & Step Summary
53
+ run: |
54
+ # 1. Initialize clean test project
55
+ mkdir -p /tmp/pr-reliability-eval
56
+ airel init --dir /tmp/pr-reliability-eval
57
+
58
+ # 2. Establish main baseline with nominal agent
59
+ airel test --dir /tmp/pr-reliability-eval --save-baseline
60
+
61
+ # 3. Evaluate PR with comparison and generate reports
62
+ airel compare default \
63
+ --dir /tmp/pr-reliability-eval \
64
+ --report-json /tmp/reliability-report.json \
65
+ --report-markdown /tmp/reliability-report.md
66
+
67
+ # 4. Append to GitHub Step Summary if running in GitHub Actions
68
+ if [ -n "$GITHUB_STEP_SUMMARY" ]; then
69
+ cat /tmp/reliability-report.md >> $GITHUB_STEP_SUMMARY
70
+ fi
71
+
72
+ - name: Upload Reliability Reports
73
+ uses: actions/upload-artifact@v4
74
+ if: always()
75
+ with:
76
+ name: reliability-reports
77
+ path: |
78
+ /tmp/reliability-report.json
79
+ /tmp/reliability-report.md
80
+ benchmarks/phase14_results.json
81
+ retention-days: 14
@@ -0,0 +1,88 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ share/python-wheels/
24
+ *.egg-info/
25
+ .installed.cfg
26
+ *.egg
27
+ MANIFEST
28
+
29
+ # Virtual environments
30
+ .venv/
31
+ venv/
32
+ ENV/
33
+ env/
34
+
35
+ # Testing and coverage
36
+ .pytest_cache/
37
+ .coverage
38
+ .coverage.*
39
+ htmlcov/
40
+ nosetests.xml
41
+ coverage.xml
42
+ *.cover
43
+ *.py,cover
44
+
45
+ # Ruff
46
+ .ruff_cache/
47
+
48
+ # IDE / Editor
49
+ .vscode/
50
+ .idea/
51
+ *.swp
52
+ *.swo
53
+ *~
54
+ .DS_Store
55
+ # Python
56
+ __pycache__/
57
+ *.py[cod]
58
+ *.so
59
+
60
+ # Virtual environments
61
+ .venv/
62
+ venv/
63
+ env/
64
+
65
+ # Build artifacts
66
+ build/
67
+ dist/
68
+ *.egg-info/
69
+
70
+ # Test / coverage
71
+ .pytest_cache/
72
+ .coverage
73
+ htmlcov/
74
+ .coverage.*
75
+
76
+ # Ruff
77
+ .ruff_cache/
78
+
79
+ # AI Reliability Engine runtime data
80
+ .aireliability/
81
+ *.db
82
+
83
+ # macOS
84
+ .DS_Store
85
+ # Environment / secrets
86
+ .env
87
+ .env.*
88
+ !.env.example
@@ -0,0 +1,45 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+
10
+ ### Added
11
+ - **Phase 1: Foundation & Setup**
12
+ - Package structure, `pyproject.toml` configuration with Hatchling build backend.
13
+ - Python 3.11+ requirement, Pydantic runtime dependency.
14
+ - Development tools (`pytest`, `ruff`).
15
+ - **Phase 2: Core Data Models**
16
+ - Implemented immutable Pydantic models: `TestCase`, `TraceStep`, `ExecutionTrace`, `EvaluationResult`, `FailureReport`, `RegressionTest`, and `RunResult`.
17
+ - Added enums: `StepType`, `ExecutionStatus`, and `FailureSeverity`.
18
+ - **Phase 3: Core Protocols & Interfaces**
19
+ - Added `runtime_checkable` protocols: `Traceable`, `ExecutionAdapter`, `Evaluator`, and `Expectation`.
20
+ - **Phase 4: Deterministic Assertions**
21
+ - Implemented non-LLM, microsecond-level assertions: `ToolCalled`, `ToolNotCalled`, `ToolOrder`, `ToolArguments`, `OutputEquals`, `OutputContains`, `SchemaMatch`, `MaxLatency`, and `MaxCost`.
22
+ - **Phase 5: Execution Engine**
23
+ - Implemented `ReliabilityRunner` orchestrating agent invocation, trace capture, evaluator execution, and failure compilation.
24
+ - **Phase 6: Failure Taxonomy & Analysis**
25
+ - Implemented `FailureTaxonomy` across 6 categories (`TASK`, `TOOL`, `RETRIEVAL`, `OUTPUT`, `SAFETY`, `PERFORMANCE`).
26
+ - Implemented deterministic `FailureAnalyzer` mapping evaluation outcomes into structured `FailureReports`.
27
+ - **Phase 7: Regression Generator & Baseline Management**
28
+ - Implemented `RegressionGenerator` creating reproducible `RegressionTest` cases preserving provenance (`source_failure_id`).
29
+ - Implemented `BaselineManager` with 5-state comparison logic (`PASSING`, `REGRESSION`, `KNOWN_FAILURE`, `FIXED`, `NEW`).
30
+ - **Phase 8: SQLite Storage Subsystem**
31
+ - Implemented serverless, transactional `SQLiteStorage` implementing `StorageBackend`.
32
+ - Added index optimization and safe schema initialization.
33
+ - **Phase 9: Command-Line Interface (`airel`)**
34
+ - Implemented CLI commands: `airel init`, `airel test`, `airel failures`, `airel regressions`, and `airel compare`.
35
+ - **Phase 10: CI/CD Workflows & Packaging**
36
+ - Added GitHub Actions workflow (`.github/workflows/ci.yml`) testing Python 3.11, 3.12, 3.13, Ruff linting, and package builds.
37
+ - Implemented `--ci` strict exit code flag (`airel test --ci`).
38
+ - Added executable CI script `examples/ci_pipeline.sh`.
39
+ - **Phase 11: Reproducible Benchmarks**
40
+ - Created reproducible benchmark runner `benchmarks/run_benchmarks.py` and scenario definitions `benchmarks/scenarios.py`.
41
+ - Empirical overhead verification (< 0.04 ms added per agent run; 500k–700k ops/sec assertion throughput).
42
+ - **Phase 12 (Documentation & Community Readiness)**
43
+ - Comprehensive `README.md` covering architecture, deterministic vs semantic evaluation, CI/CD, and extension points.
44
+ - Added `docs/architecture.md`, `docs/evaluation_concepts.md`, and `docs/README.md`.
45
+ - Added practical runnable examples: `examples/end_to_end_workflow.py` and `examples/custom_evaluator_and_adapter.py`.
@@ -0,0 +1,149 @@
1
+ # Contributing to AI Reliability Engine
2
+
3
+ Thank you for your interest in contributing to `aireliability`! We welcome community contributions, bug reports, documentation improvements, and architectural suggestions.
4
+
5
+ ---
6
+
7
+ ## 1. Code of Conduct
8
+
9
+ We are committed to providing a welcoming, inclusive, and harassment-free environment for all contributors. Please treat all community members with respect.
10
+
11
+ ---
12
+
13
+ ## 2. Technical Philosophy & Design Invariants
14
+
15
+ Before contributing code, please keep our core architectural rules in mind:
16
+ - **Zero Heavy External Dependencies**: The core package relies only on Python standard libraries and `pydantic`. External frameworks (e.g. LangChain, LangGraph) are strictly optional adapters.
17
+ - **Provider & Framework Agnostic**: Never couple internal models or runners to a specific LLM vendor or agent framework. Use standard protocols.
18
+ - **Deterministic Confidence**: Never report confidence `1.0` on failure analyses unless backed by verifiable, deterministic evidence.
19
+ - **Zero API Key Requirement in CI**: All CI and local test suites run deterministically without API keys, GPUs, or network access.
20
+ - **Microsecond Overhead**: Evaluators and tracing logic must remain lightweight (< 0.1 ms overhead).
21
+
22
+ ---
23
+
24
+ ## 3. Development Setup
25
+
26
+ ### Prerequisites
27
+ - Python 3.11, 3.12, or 3.13
28
+ - `git`
29
+
30
+ ### Installation
31
+ 1. **Fork and clone the repository:**
32
+ ```bash
33
+ git clone https://github.com/aireliability/aireliability.git
34
+ cd aireliability
35
+ ```
36
+
37
+ 2. **Set up a virtual environment:**
38
+ ```bash
39
+ python3 -m venv .venv
40
+ source .venv/bin/activate
41
+ ```
42
+
43
+ 3. **Install dependencies in editable mode:**
44
+ ```bash
45
+ pip install --upgrade pip
46
+ pip install -e ".[dev]"
47
+ pip install build twine
48
+ ```
49
+
50
+ 4. **Install optional frameworks (if testing integrations):**
51
+ ```bash
52
+ pip install -e ".[langgraph,langchain]"
53
+ ```
54
+
55
+ ---
56
+
57
+ ## 4. Running Checks Locally
58
+
59
+ All contributions must pass local linting, formatting, tests, and packaging checks before opening a pull request.
60
+
61
+ ### 1. Running Unit & Integration Tests
62
+ ```bash
63
+ # Run all unit tests
64
+ pytest
65
+
66
+ # Run tests with verbose output
67
+ pytest -v
68
+
69
+ # Run with JUnit XML generation (same as CI)
70
+ pytest --junitxml=test-results.xml
71
+ ```
72
+
73
+ ### 2. Running Reliability Scenarios & Distributed Tests
74
+ ```bash
75
+ # Run deterministic reliability benchmark scenarios
76
+ pytest tests/unit/test_phase14_benchmarks.py \
77
+ tests/unit/test_phase18_regression.py \
78
+ tests/unit/test_phase20_ci_reliability.py
79
+
80
+ # Run Phase 23-29 distributed, resilience, tenancy, security, & observability tests
81
+ pytest tests/unit/test_phase23_distributed.py \
82
+ tests/unit/test_phase24_persistence.py \
83
+ tests/unit/test_phase25_control_plane.py \
84
+ tests/unit/test_phase26_resilience.py \
85
+ tests/unit/test_phase27_multitenancy.py \
86
+ tests/unit/test_phase28_security.py \
87
+ tests/unit/test_phase29_observability.py
88
+ ```
89
+
90
+ ### 3. Running Benchmarks
91
+ ```bash
92
+ python benchmarks/run_benchmarks.py --smoke
93
+ python benchmarks/run_phase28_benchmarks.py
94
+ python benchmarks/run_phase29_benchmarks.py
95
+ ```
96
+
97
+ ### 4. Running Optional Framework Tests
98
+ If you have `langgraph` and `langchain` installed:
99
+ ```bash
100
+ pytest tests/unit/test_phase19_integrations.py
101
+ ```
102
+
103
+ ### 5. Running Ruff (Linter & Formatter)
104
+ We enforce clean code via `ruff` with an 88-character line length:
105
+ ```bash
106
+ # Check for lint violations
107
+ ruff check .
108
+
109
+ # Check code formatting
110
+ ruff format --check .
111
+
112
+ # Automatically apply safe lint fixes and formatting
113
+ ruff check --fix .
114
+ ruff format .
115
+ ```
116
+
117
+ ### 6. Validating Package Distribution
118
+ Ensure the project builds cleanly and installs in an isolated clean environment:
119
+ ```bash
120
+ # Build distribution
121
+ python -m build
122
+ twine check dist/*
123
+
124
+ # Test clean wheel installation
125
+ python -m venv /tmp/airel-clean
126
+ source /tmp/airel-clean/bin/activate
127
+ pip install dist/*.whl
128
+ python -c "import aireliability; print(aireliability.__version__)"
129
+ airel --help
130
+ deactivate
131
+ rm -rf /tmp/airel-clean
132
+ ```
133
+
134
+ ---
135
+
136
+ ## 5. Pull Request Expectations & Handling Reliability Regressions
137
+
138
+ 1. **Deterministic Test Execution**:
139
+ - Tests in CI do not use network access or external LLM API keys. Do not add tests that require external network access.
140
+ 2. **Baseline Comparison Policy**:
141
+ - The reliability CI job compares execution against established baselines using `BaselineManager`.
142
+ - `PASSING` (previously passing, still passing): Allowed.
143
+ - `FIXED` (previously failing, now passing): Allowed.
144
+ - `KNOWN_FAILURE` (previously failing, still failing): Allowed (does not fail CI).
145
+ - `REGRESSION` (previously passing, now failing): **Strict CI failure**.
146
+ 3. **Diagnosing a Reliability Regression**:
147
+ - If CI flags a regression, inspect the step summary and generated `reliability-report.json` / `reliability-report.md` artifacts.
148
+ - The report pinpoints the test ID, failure category (`tool`, `output`, `performance`), root cause diagnosis, and synthesized regression test.
149
+ - Run the scenario locally using `airel test` or `airel compare` to reproduce and resolve the regression before requesting review.