ciagent 0.4.2__tar.gz → 0.5.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.
- ciagent-0.5.1/CHANGELOG.md +87 -0
- {ciagent-0.4.2 → ciagent-0.5.1}/PKG-INFO +95 -11
- {ciagent-0.4.2 → ciagent-0.5.1}/README.md +89 -8
- {ciagent-0.4.2 → ciagent-0.5.1}/pyproject.toml +3 -3
- {ciagent-0.4.2 → ciagent-0.5.1}/src/agentci/capture.py +1 -0
- {ciagent-0.4.2 → ciagent-0.5.1}/src/agentci/cli.py +265 -49
- {ciagent-0.4.2 → ciagent-0.5.1}/src/agentci/engine/correctness.py +48 -9
- {ciagent-0.4.2 → ciagent-0.5.1}/src/agentci/engine/diff.py +14 -8
- {ciagent-0.4.2 → ciagent-0.5.1}/src/agentci/engine/judge.py +64 -19
- {ciagent-0.4.2 → ciagent-0.5.1}/src/agentci/engine/mock_runner.py +9 -3
- {ciagent-0.4.2 → ciagent-0.5.1}/src/agentci/engine/reporter.py +25 -0
- {ciagent-0.4.2 → ciagent-0.5.1}/src/agentci/engine/runner.py +10 -11
- {ciagent-0.4.2 → ciagent-0.5.1}/src/agentci/mocks.py +1 -0
- {ciagent-0.4.2 → ciagent-0.5.1}/src/agentci/pytest_plugin.py +1 -0
- {ciagent-0.4.2 → ciagent-0.5.1}/src/agentci/runner.py +1 -0
- {ciagent-0.4.2 → ciagent-0.5.1}/src/agentci/schema/spec_models.py +5 -1
- {ciagent-0.4.2 → ciagent-0.5.1}/src/agentci/templates/github_action.yml.j2 +2 -0
- ciagent-0.4.2/CHANGELOG.md +0 -11
- {ciagent-0.4.2 → ciagent-0.5.1}/.gitignore +0 -0
- {ciagent-0.4.2 → ciagent-0.5.1}/LICENSE +0 -0
- {ciagent-0.4.2 → ciagent-0.5.1}/src/agentci/__init__.py +0 -0
- {ciagent-0.4.2 → ciagent-0.5.1}/src/agentci/_version.py +0 -0
- {ciagent-0.4.2 → ciagent-0.5.1}/src/agentci/adapters/__init__.py +0 -0
- {ciagent-0.4.2 → ciagent-0.5.1}/src/agentci/adapters/base.py +0 -0
- {ciagent-0.4.2 → ciagent-0.5.1}/src/agentci/adapters/generic.py +0 -0
- {ciagent-0.4.2 → ciagent-0.5.1}/src/agentci/adapters/langgraph.py +0 -0
- {ciagent-0.4.2 → ciagent-0.5.1}/src/agentci/adapters/openai_agents.py +0 -0
- {ciagent-0.4.2 → ciagent-0.5.1}/src/agentci/assertions.py +0 -0
- {ciagent-0.4.2 → ciagent-0.5.1}/src/agentci/baselines.py +0 -0
- {ciagent-0.4.2 → ciagent-0.5.1}/src/agentci/config.py +0 -0
- {ciagent-0.4.2 → ciagent-0.5.1}/src/agentci/cost.py +0 -0
- {ciagent-0.4.2 → ciagent-0.5.1}/src/agentci/diff_engine.py +0 -0
- {ciagent-0.4.2 → ciagent-0.5.1}/src/agentci/engine/__init__.py +0 -0
- {ciagent-0.4.2 → ciagent-0.5.1}/src/agentci/engine/cost.py +0 -0
- {ciagent-0.4.2 → ciagent-0.5.1}/src/agentci/engine/cost_estimator.py +0 -0
- {ciagent-0.4.2 → ciagent-0.5.1}/src/agentci/engine/metrics.py +0 -0
- {ciagent-0.4.2 → ciagent-0.5.1}/src/agentci/engine/parallel.py +0 -0
- {ciagent-0.4.2 → ciagent-0.5.1}/src/agentci/engine/path.py +0 -0
- {ciagent-0.4.2 → ciagent-0.5.1}/src/agentci/engine/results.py +0 -0
- {ciagent-0.4.2 → ciagent-0.5.1}/src/agentci/engine/span_assertions.py +0 -0
- {ciagent-0.4.2 → ciagent-0.5.1}/src/agentci/exceptions.py +0 -0
- {ciagent-0.4.2 → ciagent-0.5.1}/src/agentci/loader.py +0 -0
- {ciagent-0.4.2 → ciagent-0.5.1}/src/agentci/models.py +0 -0
- {ciagent-0.4.2 → ciagent-0.5.1}/src/agentci/py.typed +0 -0
- {ciagent-0.4.2 → ciagent-0.5.1}/src/agentci/report.py +0 -0
- {ciagent-0.4.2 → ciagent-0.5.1}/src/agentci/schema/__init__.py +0 -0
- {ciagent-0.4.2 → ciagent-0.5.1}/src/agentci/schema/agentci_spec.schema.json +0 -0
- {ciagent-0.4.2 → ciagent-0.5.1}/src/agentci/schema/generate_schema.py +0 -0
- {ciagent-0.4.2 → ciagent-0.5.1}/src/agentci/templates/__init__.py +0 -0
- {ciagent-0.4.2 → ciagent-0.5.1}/src/agentci/templates/agentci.yaml +0 -0
- {ciagent-0.4.2 → ciagent-0.5.1}/src/agentci/templates/pre_push_hook.sh.j2 +0 -0
|
@@ -0,0 +1,87 @@
|
|
|
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.0.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [0.5.0] - 2026-03-01
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
#### Three-Layer Evaluation Engine
|
|
13
|
+
- **Correctness layer** (Layer 1 — hard fail): keyword matching, LLM-as-a-judge, safety checks, hallucination checks, regex/exact match, JSON schema validation
|
|
14
|
+
- **Path layer** (Layer 2 — soft warn): tool trajectory validation, loop detection (default `max_loops=3`), routing assertions, handoff expectations
|
|
15
|
+
- **Cost layer** (Layer 3 — soft warn): token budgets, cost caps, LLM call limits, latency thresholds
|
|
16
|
+
- `runner.py` orchestrates all three layers per query
|
|
17
|
+
- `parallel.py` for parallel query execution across specs
|
|
18
|
+
|
|
19
|
+
#### OR-Logic Keywords
|
|
20
|
+
- `any_expected_in_answer` field — at least one keyword must match (complementing `expected_in_answer` which requires all)
|
|
21
|
+
|
|
22
|
+
#### LLM Judge Enhancements
|
|
23
|
+
- `context_file` support in `JudgeRubric` — doc-grounded judging against reference documents
|
|
24
|
+
- `refutes_premise` flag — injects built-in premise-correction rubric for trick questions
|
|
25
|
+
|
|
26
|
+
#### Span Assertions
|
|
27
|
+
- `SpanAssertionSpec` schema model for span-level assertions
|
|
28
|
+
- `Span.attributes: dict[str, Any]` — OTel-style span-level data propagation
|
|
29
|
+
- Span-level LLM judge support
|
|
30
|
+
|
|
31
|
+
#### Mock Testing Mode
|
|
32
|
+
- `agentci test --mock` — generates synthetic traces, zero API cost
|
|
33
|
+
- `mock_runner.py` — synthetic trace generation from spec expectations
|
|
34
|
+
- `--golden-file` flag — load Q&A pairs from JSON/CSV for mock mode
|
|
35
|
+
|
|
36
|
+
#### Cost Estimator
|
|
37
|
+
- `cost_estimator.py` — pre-execution cost estimates with pricing table
|
|
38
|
+
- Cost estimate shown before live test runs; `--yes`/`-y` skips confirmation
|
|
39
|
+
|
|
40
|
+
#### CLI Improvements
|
|
41
|
+
- `agentci init --generate` — AI-assisted spec generation with guided interview
|
|
42
|
+
- `agentci doctor` — health-check command (spec, runner, API keys, deps, CI)
|
|
43
|
+
- Scan-first flow: auto-scan project before questions, show summary
|
|
44
|
+
- Agent type auto-detected via `_detect_agent_type_from_code()`
|
|
45
|
+
- Skeleton template generation with TODO placeholders for zero-API-key usage
|
|
46
|
+
- Context-aware "Next Steps" based on mode (mock vs live)
|
|
47
|
+
- Non-interactive flags: `--kb-path`, `--mode`
|
|
48
|
+
|
|
49
|
+
#### Diff Engine
|
|
50
|
+
- Three-tier diff engine for baseline comparison
|
|
51
|
+
- 11 `DiffType` categories including `ROUTING_CHANGED`, `GUARDRAILS_CHANGED`
|
|
52
|
+
- `agentci diff` CLI command
|
|
53
|
+
|
|
54
|
+
#### Reporting
|
|
55
|
+
- GitHub annotations with budget cap (`MAX_INLINE_ANNOTATIONS = 10` for warnings; errors uncapped)
|
|
56
|
+
- JSON output format
|
|
57
|
+
- Prometheus metrics export
|
|
58
|
+
|
|
59
|
+
#### Trace Helpers
|
|
60
|
+
- `Trace.called(tool)` / `never_called(tool)` / `loop_count(tool)` — readable assertion helpers
|
|
61
|
+
- `Trace.cost_under(usd)` / `llm_calls_under(n)` — budget assertion helpers
|
|
62
|
+
- `langgraph_trace(agent_name)` — context manager shortcut for LangGraph
|
|
63
|
+
- `TraceContext.attach(state)` — alias for `attach_langgraph_state()`
|
|
64
|
+
|
|
65
|
+
#### Adapters
|
|
66
|
+
- OpenAI Agents SDK adapter (`openai_agents.py`)
|
|
67
|
+
- LangGraph adapter (`langgraph.py`)
|
|
68
|
+
|
|
69
|
+
#### Other
|
|
70
|
+
- `python-dotenv` added as core dependency
|
|
71
|
+
- Deep KB sampling: 2000 chars/file for spec generation
|
|
72
|
+
- Progressive spec building: smoke queries (3) then full queries (10-12)
|
|
73
|
+
- Pytest plugin entry point (`pytest11: agentci`)
|
|
74
|
+
- GUARDRAIL span type, HANDOFF span type
|
|
75
|
+
|
|
76
|
+
### Changed
|
|
77
|
+
- `PathSpec.max_loops` now defaults to `3` (was `None`)
|
|
78
|
+
- Development status upgraded from Alpha to Beta
|
|
79
|
+
- Package version bumped to 0.5.0
|
|
80
|
+
|
|
81
|
+
## [0.4.1] - 2026-02-20
|
|
82
|
+
|
|
83
|
+
### Added
|
|
84
|
+
- Initial project structure and core models
|
|
85
|
+
- Basic trace capture and assertion framework
|
|
86
|
+
- CLI scaffolding with `agentci init`
|
|
87
|
+
- PyPI publishing as `ciagent`
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ciagent
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.5.1
|
|
4
4
|
Summary: Continuous Integration for AI Agents. Catch cost spikes and logic regressions before production.
|
|
5
5
|
Project-URL: Documentation, https://github.com/agentci-org/agentci#readme
|
|
6
6
|
Project-URL: Repository, https://github.com/agentci-org/agentci.git
|
|
@@ -8,7 +8,7 @@ Project-URL: Issues, https://github.com/agentci-org/agentci/issues
|
|
|
8
8
|
License: Apache-2.0
|
|
9
9
|
License-File: LICENSE
|
|
10
10
|
Keywords: agents,ai,ci-cd,llm,regression,testing
|
|
11
|
-
Classifier: Development Status ::
|
|
11
|
+
Classifier: Development Status :: 4 - Beta
|
|
12
12
|
Classifier: Framework :: Pytest
|
|
13
13
|
Classifier: Intended Audience :: Developers
|
|
14
14
|
Classifier: Topic :: Software Development :: Testing
|
|
@@ -23,7 +23,10 @@ Requires-Dist: python-dotenv>=0.19
|
|
|
23
23
|
Requires-Dist: pyyaml>=6.0
|
|
24
24
|
Requires-Dist: rich>=13.0
|
|
25
25
|
Provides-Extra: all
|
|
26
|
-
Requires-Dist:
|
|
26
|
+
Requires-Dist: anthropic>=0.20; extra == 'all'
|
|
27
|
+
Requires-Dist: jsonschema>=4.0; extra == 'all'
|
|
28
|
+
Requires-Dist: langgraph>=0.1; extra == 'all'
|
|
29
|
+
Requires-Dist: openai>=1.0; extra == 'all'
|
|
27
30
|
Provides-Extra: anthropic
|
|
28
31
|
Requires-Dist: anthropic>=0.20; extra == 'anthropic'
|
|
29
32
|
Provides-Extra: dev
|
|
@@ -219,11 +222,87 @@ Clone the [DemoAgents](https://github.com/agentci-org/DemoAgents) repo and try t
|
|
|
219
222
|
## CLI
|
|
220
223
|
|
|
221
224
|
```bash
|
|
222
|
-
|
|
223
|
-
agentci
|
|
224
|
-
agentci
|
|
225
|
-
agentci
|
|
226
|
-
agentci
|
|
225
|
+
# ── Setup & Scaffolding ──────────────────────────────────────────────
|
|
226
|
+
agentci init # Scaffold GitHub Actions + pre-push hooks
|
|
227
|
+
agentci init --generate # Guided interview: auto-scan project, generate agentci_spec.yaml
|
|
228
|
+
agentci init --generate --mode mock --golden-file qa.json # Zero-API-key spec generation
|
|
229
|
+
agentci doctor # Health check: spec, deps, API keys, KB, CI workflow
|
|
230
|
+
agentci validate # Validate agentci_spec.yaml against schema (no execution)
|
|
231
|
+
agentci bootstrap # Quick setup from a queries file + runner path
|
|
232
|
+
|
|
233
|
+
# ── Testing & Evaluation ─────────────────────────────────────────────
|
|
234
|
+
agentci test # Run 3-layer evaluation (Correctness → Path → Cost)
|
|
235
|
+
agentci test --mock # Zero-cost synthetic traces — no API keys needed
|
|
236
|
+
agentci test --yes # Skip cost-estimate confirmation (CI-friendly)
|
|
237
|
+
agentci test --workers 4 # Parallel execution
|
|
238
|
+
agentci eval # Standalone correctness evaluation (no golden baselines)
|
|
239
|
+
|
|
240
|
+
# ── Golden Baselines ─────────────────────────────────────────────────
|
|
241
|
+
agentci record # Record a golden baseline trace from a live run
|
|
242
|
+
agentci save --agent my-agent --version v1 --trace-file trace.json # Save versioned baseline
|
|
243
|
+
agentci baselines --agent my-agent # List saved baseline versions
|
|
244
|
+
agentci diff --agent my-agent --baseline v1 --compare v2 # Diff two versions
|
|
245
|
+
|
|
246
|
+
# ── Reporting ─────────────────────────────────────────────────────────
|
|
247
|
+
agentci run # Legacy test runner (pytest-compatible)
|
|
248
|
+
agentci report # Generate HTML report from results JSON
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
## 3-Layer Evaluation Engine
|
|
252
|
+
|
|
253
|
+
`agentci test` evaluates every query through three layers:
|
|
254
|
+
|
|
255
|
+
| Layer | Severity | Purpose | Example |
|
|
256
|
+
|-------|----------|---------|---------|
|
|
257
|
+
| **Correctness** | Hard FAIL (blocks CI) | Answer quality | `expected_in_answer`, `llm_judge`, `not_in_answer`, `regex_match`, `json_schema` |
|
|
258
|
+
| **Path** | Soft WARN (annotation only) | Tool trajectory | `expected_tools`, `min_tool_recall`, `max_loops` |
|
|
259
|
+
| **Cost** | Soft WARN (annotation only) | Efficiency budget | `max_llm_calls`, `max_tokens`, `max_cost_usd` |
|
|
260
|
+
|
|
261
|
+
Layer 1 failures block CI (exit code 1). Layers 2-3 produce GitHub annotations but let CI pass.
|
|
262
|
+
|
|
263
|
+
```yaml
|
|
264
|
+
# agentci_spec.yaml — one query with all three layers
|
|
265
|
+
queries:
|
|
266
|
+
- query: "How do I install AgentCI?"
|
|
267
|
+
correctness:
|
|
268
|
+
any_expected_in_answer: ["pip install", "ciagent"]
|
|
269
|
+
llm_judge:
|
|
270
|
+
- rule: "Response provides clear installation instructions"
|
|
271
|
+
threshold: 0.7
|
|
272
|
+
path:
|
|
273
|
+
expected_tools: [retrieve_docs]
|
|
274
|
+
min_tool_recall: 1.0
|
|
275
|
+
cost:
|
|
276
|
+
max_llm_calls: 8
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
## Mock Mode
|
|
280
|
+
|
|
281
|
+
Test your spec structure with zero API keys and zero cost:
|
|
282
|
+
|
|
283
|
+
```bash
|
|
284
|
+
agentci test --mock
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
Mock mode generates synthetic traces that match your spec expectations. Use it to:
|
|
288
|
+
- Validate spec structure before spending on live runs
|
|
289
|
+
- Run in CI without API keys for fast feedback
|
|
290
|
+
- Iterate on assertions without waiting for LLM responses
|
|
291
|
+
|
|
292
|
+
## Cost Estimation
|
|
293
|
+
|
|
294
|
+
Before live test runs, AgentCI shows a cost estimate:
|
|
295
|
+
|
|
296
|
+
```bash
|
|
297
|
+
$ agentci test
|
|
298
|
+
Estimated cost: $0.12 – $0.35 (12 queries)
|
|
299
|
+
Proceed? [y/N] y
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
Skip the prompt in CI with `--yes` or `-y`:
|
|
303
|
+
|
|
304
|
+
```bash
|
|
305
|
+
agentci test --yes # no confirmation prompt
|
|
227
306
|
```
|
|
228
307
|
|
|
229
308
|
## CI/CD
|
|
@@ -298,13 +377,18 @@ When you diff a current run against a golden baseline, AgentCI flags these chang
|
|
|
298
377
|
|
|
299
378
|
## Status
|
|
300
379
|
|
|
301
|
-
AgentCI is in **
|
|
380
|
+
AgentCI is in **beta** (v0.5.0). The core trace model, diffing engine, 3-layer evaluation engine, mock system, and CLI are stable. The API may evolve based on community feedback.
|
|
302
381
|
|
|
303
382
|
**What's here today:**
|
|
383
|
+
- 3-layer evaluation engine (Correctness / Path / Cost)
|
|
304
384
|
- Trace capture for LangGraph, Anthropic, and OpenAI Agents SDK
|
|
305
|
-
- Golden baseline recording and regression diffing
|
|
385
|
+
- Golden baseline recording, versioned saves, and regression diffing
|
|
306
386
|
- LLM mocking for all three frameworks (zero API keys)
|
|
307
|
-
- LLM-as-judge
|
|
387
|
+
- LLM-as-judge with composite rubrics, ensemble judging, and doc-grounded evaluation
|
|
388
|
+
- Mock mode (`agentci test --mock`) for zero-cost spec validation
|
|
389
|
+
- Guided spec generation (`agentci init --generate`) with auto-scan and KB sampling
|
|
390
|
+
- Health check (`agentci doctor`) for environment validation
|
|
391
|
+
- Cost estimation before live runs
|
|
308
392
|
- Pytest plugin for native integration
|
|
309
393
|
- GitHub Actions generator via `agentci init`
|
|
310
394
|
|
|
@@ -179,11 +179,87 @@ Clone the [DemoAgents](https://github.com/agentci-org/DemoAgents) repo and try t
|
|
|
179
179
|
## CLI
|
|
180
180
|
|
|
181
181
|
```bash
|
|
182
|
-
|
|
183
|
-
agentci
|
|
184
|
-
agentci
|
|
185
|
-
agentci
|
|
186
|
-
agentci
|
|
182
|
+
# ── Setup & Scaffolding ──────────────────────────────────────────────
|
|
183
|
+
agentci init # Scaffold GitHub Actions + pre-push hooks
|
|
184
|
+
agentci init --generate # Guided interview: auto-scan project, generate agentci_spec.yaml
|
|
185
|
+
agentci init --generate --mode mock --golden-file qa.json # Zero-API-key spec generation
|
|
186
|
+
agentci doctor # Health check: spec, deps, API keys, KB, CI workflow
|
|
187
|
+
agentci validate # Validate agentci_spec.yaml against schema (no execution)
|
|
188
|
+
agentci bootstrap # Quick setup from a queries file + runner path
|
|
189
|
+
|
|
190
|
+
# ── Testing & Evaluation ─────────────────────────────────────────────
|
|
191
|
+
agentci test # Run 3-layer evaluation (Correctness → Path → Cost)
|
|
192
|
+
agentci test --mock # Zero-cost synthetic traces — no API keys needed
|
|
193
|
+
agentci test --yes # Skip cost-estimate confirmation (CI-friendly)
|
|
194
|
+
agentci test --workers 4 # Parallel execution
|
|
195
|
+
agentci eval # Standalone correctness evaluation (no golden baselines)
|
|
196
|
+
|
|
197
|
+
# ── Golden Baselines ─────────────────────────────────────────────────
|
|
198
|
+
agentci record # Record a golden baseline trace from a live run
|
|
199
|
+
agentci save --agent my-agent --version v1 --trace-file trace.json # Save versioned baseline
|
|
200
|
+
agentci baselines --agent my-agent # List saved baseline versions
|
|
201
|
+
agentci diff --agent my-agent --baseline v1 --compare v2 # Diff two versions
|
|
202
|
+
|
|
203
|
+
# ── Reporting ─────────────────────────────────────────────────────────
|
|
204
|
+
agentci run # Legacy test runner (pytest-compatible)
|
|
205
|
+
agentci report # Generate HTML report from results JSON
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
## 3-Layer Evaluation Engine
|
|
209
|
+
|
|
210
|
+
`agentci test` evaluates every query through three layers:
|
|
211
|
+
|
|
212
|
+
| Layer | Severity | Purpose | Example |
|
|
213
|
+
|-------|----------|---------|---------|
|
|
214
|
+
| **Correctness** | Hard FAIL (blocks CI) | Answer quality | `expected_in_answer`, `llm_judge`, `not_in_answer`, `regex_match`, `json_schema` |
|
|
215
|
+
| **Path** | Soft WARN (annotation only) | Tool trajectory | `expected_tools`, `min_tool_recall`, `max_loops` |
|
|
216
|
+
| **Cost** | Soft WARN (annotation only) | Efficiency budget | `max_llm_calls`, `max_tokens`, `max_cost_usd` |
|
|
217
|
+
|
|
218
|
+
Layer 1 failures block CI (exit code 1). Layers 2-3 produce GitHub annotations but let CI pass.
|
|
219
|
+
|
|
220
|
+
```yaml
|
|
221
|
+
# agentci_spec.yaml — one query with all three layers
|
|
222
|
+
queries:
|
|
223
|
+
- query: "How do I install AgentCI?"
|
|
224
|
+
correctness:
|
|
225
|
+
any_expected_in_answer: ["pip install", "ciagent"]
|
|
226
|
+
llm_judge:
|
|
227
|
+
- rule: "Response provides clear installation instructions"
|
|
228
|
+
threshold: 0.7
|
|
229
|
+
path:
|
|
230
|
+
expected_tools: [retrieve_docs]
|
|
231
|
+
min_tool_recall: 1.0
|
|
232
|
+
cost:
|
|
233
|
+
max_llm_calls: 8
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
## Mock Mode
|
|
237
|
+
|
|
238
|
+
Test your spec structure with zero API keys and zero cost:
|
|
239
|
+
|
|
240
|
+
```bash
|
|
241
|
+
agentci test --mock
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
Mock mode generates synthetic traces that match your spec expectations. Use it to:
|
|
245
|
+
- Validate spec structure before spending on live runs
|
|
246
|
+
- Run in CI without API keys for fast feedback
|
|
247
|
+
- Iterate on assertions without waiting for LLM responses
|
|
248
|
+
|
|
249
|
+
## Cost Estimation
|
|
250
|
+
|
|
251
|
+
Before live test runs, AgentCI shows a cost estimate:
|
|
252
|
+
|
|
253
|
+
```bash
|
|
254
|
+
$ agentci test
|
|
255
|
+
Estimated cost: $0.12 – $0.35 (12 queries)
|
|
256
|
+
Proceed? [y/N] y
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
Skip the prompt in CI with `--yes` or `-y`:
|
|
260
|
+
|
|
261
|
+
```bash
|
|
262
|
+
agentci test --yes # no confirmation prompt
|
|
187
263
|
```
|
|
188
264
|
|
|
189
265
|
## CI/CD
|
|
@@ -258,13 +334,18 @@ When you diff a current run against a golden baseline, AgentCI flags these chang
|
|
|
258
334
|
|
|
259
335
|
## Status
|
|
260
336
|
|
|
261
|
-
AgentCI is in **
|
|
337
|
+
AgentCI is in **beta** (v0.5.0). The core trace model, diffing engine, 3-layer evaluation engine, mock system, and CLI are stable. The API may evolve based on community feedback.
|
|
262
338
|
|
|
263
339
|
**What's here today:**
|
|
340
|
+
- 3-layer evaluation engine (Correctness / Path / Cost)
|
|
264
341
|
- Trace capture for LangGraph, Anthropic, and OpenAI Agents SDK
|
|
265
|
-
- Golden baseline recording and regression diffing
|
|
342
|
+
- Golden baseline recording, versioned saves, and regression diffing
|
|
266
343
|
- LLM mocking for all three frameworks (zero API keys)
|
|
267
|
-
- LLM-as-judge
|
|
344
|
+
- LLM-as-judge with composite rubrics, ensemble judging, and doc-grounded evaluation
|
|
345
|
+
- Mock mode (`agentci test --mock`) for zero-cost spec validation
|
|
346
|
+
- Guided spec generation (`agentci init --generate`) with auto-scan and KB sampling
|
|
347
|
+
- Health check (`agentci doctor`) for environment validation
|
|
348
|
+
- Cost estimation before live runs
|
|
268
349
|
- Pytest plugin for native integration
|
|
269
350
|
- GitHub Actions generator via `agentci init`
|
|
270
351
|
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "ciagent"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.5.1"
|
|
4
4
|
description = "Continuous Integration for AI Agents. Catch cost spikes and logic regressions before production."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = {text = "Apache-2.0"}
|
|
7
7
|
requires-python = ">=3.10"
|
|
8
8
|
keywords = ["ai", "agents", "testing", "llm", "ci-cd", "regression"]
|
|
9
9
|
classifiers = [
|
|
10
|
-
"Development Status ::
|
|
10
|
+
"Development Status :: 4 - Beta",
|
|
11
11
|
"Intended Audience :: Developers",
|
|
12
12
|
"Topic :: Software Development :: Testing",
|
|
13
13
|
"Framework :: Pytest",
|
|
@@ -37,7 +37,7 @@ openai = ["openai>=1.0"]
|
|
|
37
37
|
anthropic = ["anthropic>=0.20"]
|
|
38
38
|
langgraph = ["langgraph>=0.1"]
|
|
39
39
|
jsonschema = ["jsonschema>=4.0"]
|
|
40
|
-
all = ["
|
|
40
|
+
all = ["ciagent[openai,anthropic,langgraph,jsonschema]"]
|
|
41
41
|
dev = ["pytest>=8.0", "ruff", "mypy"]
|
|
42
42
|
|
|
43
43
|
[project.scripts]
|
|
@@ -8,6 +8,7 @@ object. The developer doesn't change their agent code at all.
|
|
|
8
8
|
Phase 1: Patch openai.ChatCompletion and anthropic.Messages
|
|
9
9
|
Phase 2: Add OTEL span emission for interop with Arize/Langfuse
|
|
10
10
|
"""
|
|
11
|
+
from __future__ import annotations
|
|
11
12
|
|
|
12
13
|
import time
|
|
13
14
|
import contextvars
|