ragops 1.6.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.
- ragops-1.6.0/.dockerignore +9 -0
- ragops-1.6.0/.github/ISSUE_TEMPLATE/bug.yml +41 -0
- ragops-1.6.0/.github/ISSUE_TEMPLATE/config.yml +8 -0
- ragops-1.6.0/.github/ISSUE_TEMPLATE/design-partner.yml +48 -0
- ragops-1.6.0/.github/ISSUE_TEMPLATE/evaluator.yml +40 -0
- ragops-1.6.0/.github/ISSUE_TEMPLATE/feature.yml +38 -0
- ragops-1.6.0/.github/pull_request_template.md +26 -0
- ragops-1.6.0/.github/workflows/ci.yml +73 -0
- ragops-1.6.0/.github/workflows/nightly.yml +39 -0
- ragops-1.6.0/.github/workflows/pages.yml +31 -0
- ragops-1.6.0/.github/workflows/publish-pypi.yml +43 -0
- ragops-1.6.0/.github/workflows/ragops-gate-smoke.yml +24 -0
- ragops-1.6.0/.github/workflows/ragops-gate.yml +104 -0
- ragops-1.6.0/.github/workflows/release.yml +38 -0
- ragops-1.6.0/.gitignore +13 -0
- ragops-1.6.0/AGENTS.md +36 -0
- ragops-1.6.0/CHANGELOG.md +110 -0
- ragops-1.6.0/CODE_OF_CONDUCT.md +32 -0
- ragops-1.6.0/CONTRIBUTING.md +71 -0
- ragops-1.6.0/Dockerfile +10 -0
- ragops-1.6.0/LICENSE +21 -0
- ragops-1.6.0/PKG-INFO +220 -0
- ragops-1.6.0/README.md +204 -0
- ragops-1.6.0/SECURITY.md +32 -0
- ragops-1.6.0/SUPPORT.md +20 -0
- ragops-1.6.0/apps/__init__.py +2 -0
- ragops-1.6.0/apps/api/__init__.py +2 -0
- ragops-1.6.0/apps/api/main.py +149 -0
- ragops-1.6.0/apps/web/index.html +26 -0
- ragops-1.6.0/compose.yaml +9 -0
- ragops-1.6.0/design-qa.md +74 -0
- ragops-1.6.0/docs/architecture/adr/0001-local-first-core.md +19 -0
- ragops-1.6.0/docs/architecture/adr/0002-baseline-regression-gates.md +23 -0
- ragops-1.6.0/docs/architecture/adr/0003-reference-app-outside-core.md +21 -0
- ragops-1.6.0/docs/architecture/adr/0004-open-core-boundary.md +22 -0
- ragops-1.6.0/docs/architecture/adr/0005-scenario-0.2-metadata-and-citation-precision.md +23 -0
- ragops-1.6.0/docs/architecture/adr/0006-response-fixture-overlays.md +22 -0
- ragops-1.6.0/docs/architecture/adr/0007-offline-reference-graphrag-agent.md +23 -0
- ragops-1.6.0/docs/architecture/adr/0008-local-team-review-workflow.md +22 -0
- ragops-1.6.0/docs/architecture/adr/0009-adopt-mit-license.md +38 -0
- ragops-1.6.0/docs/architecture/adr/0010-repair-trace-04-schema-json.md +32 -0
- ragops-1.6.0/docs/architecture/adr/0011-reusable-pr-gate-is-an-adapter.md +35 -0
- ragops-1.6.0/docs/architecture/adr/0012-opentelemetry-export-is-an-example-adapter.md +34 -0
- ragops-1.6.0/docs/architecture/component-diagram.md +22 -0
- ragops-1.6.0/docs/architecture/context-diagram.md +18 -0
- ragops-1.6.0/docs/architecture/control-plane-alpha.md +34 -0
- ragops-1.6.0/docs/architecture/data-model.md +33 -0
- ragops-1.6.0/docs/architecture/system-overview.md +23 -0
- ragops-1.6.0/docs/architecture/threat-model.md +36 -0
- ragops-1.6.0/docs/demo/cv-linkedin-copy.md +28 -0
- ragops-1.6.0/docs/demo/design-audit/01-current-desktop.jpg +0 -0
- ragops-1.6.0/docs/demo/design-audit/02-implementation-desktop.jpg +0 -0
- ragops-1.6.0/docs/demo/design-audit/04-implementation-mobile.jpg +0 -0
- ragops-1.6.0/docs/demo/design-audit/06-desktop-comparison.jpg +0 -0
- ragops-1.6.0/docs/demo/design-audit/09-limitations-section.jpg +0 -0
- ragops-1.6.0/docs/demo/design-audit/selected-open-source-adoption.png +0 -0
- ragops-1.6.0/docs/demo/infographics/evidence-stack.svg +54 -0
- ragops-1.6.0/docs/demo/infographics/release-gate-flow.svg +54 -0
- ragops-1.6.0/docs/demo/portfolio-case-study.md +28 -0
- ragops-1.6.0/docs/demo/portfolio-handoff.md +30 -0
- ragops-1.6.0/docs/demo/presentation-outline.md +36 -0
- ragops-1.6.0/docs/demo/screenshots/ragops-limitations-screen.jpg +0 -0
- ragops-1.6.0/docs/demo/screenshots/ragops-mobile-screen.jpg +0 -0
- ragops-1.6.0/docs/demo/screenshots/ragops-portfolio-desktop.jpg +0 -0
- ragops-1.6.0/docs/demo/screenshots/ragops-portfolio-mobile.jpg +0 -0
- ragops-1.6.0/docs/demo/screenshots/ragops-release-screen.jpg +0 -0
- ragops-1.6.0/docs/demo/screenshots/ragops-showcase-hero.jpg +0 -0
- ragops-1.6.0/docs/demo/social-preview.png +0 -0
- ragops-1.6.0/docs/demo/video-script.md +32 -0
- ragops-1.6.0/docs/demo/walkthrough.md +45 -0
- ragops-1.6.0/docs/engineering/export-your-first-trace.md +56 -0
- ragops-1.6.0/docs/engineering/github-pr-gate.md +69 -0
- ragops-1.6.0/docs/engineering/handbook.md +31 -0
- ragops-1.6.0/docs/engineering/observability.md +28 -0
- ragops-1.6.0/docs/engineering/provider-adapters.md +32 -0
- ragops-1.6.0/docs/engineering/pypi-publishing.md +39 -0
- ragops-1.6.0/docs/engineering/testing-strategy.md +24 -0
- ragops-1.6.0/docs/evaluation/benchmark-report-v0.2.md +69 -0
- ragops-1.6.0/docs/evaluation/red-team-plan.md +28 -0
- ragops-1.6.0/docs/evaluation/scenario-taxonomy.md +26 -0
- ragops-1.6.0/docs/evaluation/strategy.md +37 -0
- ragops-1.6.0/docs/getting-started.md +61 -0
- ragops-1.6.0/docs/gtm/design-partner-outreach.md +37 -0
- ragops-1.6.0/docs/gtm/github-launch-checklist.md +54 -0
- ragops-1.6.0/docs/gtm/pilot-measurement-plan.md +32 -0
- ragops-1.6.0/docs/product/commercialization.md +36 -0
- ragops-1.6.0/docs/product/competitive-analysis.md +25 -0
- ragops-1.6.0/docs/product/jobs-to-be-done.md +28 -0
- ragops-1.6.0/docs/product/oss-launch-plan.md +58 -0
- ragops-1.6.0/docs/product/personas.md +29 -0
- ragops-1.6.0/docs/product/product_thesis.md +41 -0
- ragops-1.6.0/docs/product/requirements-v0.1.md +40 -0
- ragops-1.6.0/docs/product/requirements-v0.2.md +38 -0
- ragops-1.6.0/docs/product/requirements-v1.5.md +45 -0
- ragops-1.6.0/docs/product/requirements-v1.6.md +39 -0
- ragops-1.6.0/docs/product/roadmap.md +63 -0
- ragops-1.6.0/docs/product/success-metrics.md +35 -0
- ragops-1.6.0/docs/project/backlog.md +61 -0
- ragops-1.6.0/docs/project/charter.md +32 -0
- ragops-1.6.0/docs/project/decision-log.md +16 -0
- ragops-1.6.0/docs/project/m1-acceptance.md +40 -0
- ragops-1.6.0/docs/project/m2-acceptance.md +24 -0
- ragops-1.6.0/docs/project/m3-acceptance.md +24 -0
- ragops-1.6.0/docs/project/m4-acceptance.md +22 -0
- ragops-1.6.0/docs/project/m5-acceptance.md +26 -0
- ragops-1.6.0/docs/project/milestones.md +14 -0
- ragops-1.6.0/docs/project/program-completion-audit.md +61 -0
- ragops-1.6.0/docs/project/release-plan.md +23 -0
- ragops-1.6.0/docs/project/risk-register.md +16 -0
- ragops-1.6.0/docs/project/v1-acceptance.md +29 -0
- ragops-1.6.0/docs/project/v1.5-acceptance.md +60 -0
- ragops-1.6.0/docs/project/v1.6-acceptance.md +39 -0
- ragops-1.6.0/docs/project/work-breakdown.md +34 -0
- ragops-1.6.0/docs/releases/v1.5.0.md +36 -0
- ragops-1.6.0/docs/releases/v1.6.0.md +32 -0
- ragops-1.6.0/examples/__init__.py +1 -0
- ragops-1.6.0/examples/japanese_troubleshooting_agent/README.md +57 -0
- ragops-1.6.0/examples/japanese_troubleshooting_agent/__init__.py +5 -0
- ragops-1.6.0/examples/japanese_troubleshooting_agent/agent.py +200 -0
- ragops-1.6.0/examples/japanese_troubleshooting_agent/architecture.md +26 -0
- ragops-1.6.0/examples/japanese_troubleshooting_agent/cli.py +39 -0
- ragops-1.6.0/examples/japanese_troubleshooting_agent/data/documents.json +10 -0
- ragops-1.6.0/examples/japanese_troubleshooting_agent/data/graph.json +11 -0
- ragops-1.6.0/examples/japanese_troubleshooting_agent/discovery.md +30 -0
- ragops-1.6.0/examples/japanese_troubleshooting_agent/executive-report.md +26 -0
- ragops-1.6.0/examples/japanese_troubleshooting_agent/results/comparison.md +19 -0
- ragops-1.6.0/examples/japanese_troubleshooting_agent/results/graph-traces.jsonl +4 -0
- ragops-1.6.0/examples/japanese_troubleshooting_agent/results/lexical-traces.jsonl +4 -0
- ragops-1.6.0/examples/japanese_troubleshooting_agent/rollout-plan.md +31 -0
- ragops-1.6.0/examples/japanese_troubleshooting_agent/scenario.json +13 -0
- ragops-1.6.0/examples/japanese_troubleshooting_agent/suite.json +6 -0
- ragops-1.6.0/examples/opentelemetry_trace_adapter/README.md +43 -0
- ragops-1.6.0/examples/opentelemetry_trace_adapter/__init__.py +1 -0
- ragops-1.6.0/examples/opentelemetry_trace_adapter/adapter.py +153 -0
- ragops-1.6.0/examples/opentelemetry_trace_adapter/spans.jsonl +2 -0
- ragops-1.6.0/pyproject.toml +32 -0
- ragops-1.6.0/ragops.toml +6 -0
- ragops-1.6.0/scenarios/japanese_troubleshooting/attack-pack.json +13 -0
- ragops-1.6.0/scenarios/japanese_troubleshooting/benchmark-adversarial.json +13 -0
- ragops-1.6.0/scenarios/japanese_troubleshooting/benchmark-baseline.json +32 -0
- ragops-1.6.0/scenarios/japanese_troubleshooting/benchmark-regressed.json +11 -0
- ragops-1.6.0/scenarios/japanese_troubleshooting/benchmark-v0.2.json +39 -0
- ragops-1.6.0/scenarios/japanese_troubleshooting/regressed_responses.json +16 -0
- ragops-1.6.0/scenarios/japanese_troubleshooting/sample_responses.json +17 -0
- ragops-1.6.0/scenarios/japanese_troubleshooting/sample_traces.jsonl +2 -0
- ragops-1.6.0/scenarios/japanese_troubleshooting/scenario.json +43 -0
- ragops-1.6.0/schemas/attack-pack-0.1.schema.json +30 -0
- ragops-1.6.0/schemas/report-0.2.schema.json +19 -0
- ragops-1.6.0/schemas/response-fixture-0.2.schema.json +30 -0
- ragops-1.6.0/schemas/scenario-0.1.schema.json +48 -0
- ragops-1.6.0/schemas/scenario-0.2.schema.json +54 -0
- ragops-1.6.0/schemas/trace-0.3.schema.json +31 -0
- ragops-1.6.0/schemas/trace-0.4.schema.json +50 -0
- ragops-1.6.0/site/apple-touch-icon.png +0 -0
- ragops-1.6.0/site/favicon.png +0 -0
- ragops-1.6.0/site/index.html +216 -0
- ragops-1.6.0/site/styles.css +1 -0
- ragops-1.6.0/skills/ragops-feature/SKILL.md +18 -0
- ragops-1.6.0/skills/ragops-presentation/SKILL.md +19 -0
- ragops-1.6.0/skills/ragops-release/SKILL.md +18 -0
- ragops-1.6.0/src/ragops/__init__.py +16 -0
- ragops-1.6.0/src/ragops/adapters/__init__.py +5 -0
- ragops-1.6.0/src/ragops/adapters/http.py +34 -0
- ragops-1.6.0/src/ragops/benchmarks.py +25 -0
- ragops-1.6.0/src/ragops/cli.py +207 -0
- ragops-1.6.0/src/ragops/config.py +14 -0
- ragops-1.6.0/src/ragops/control_plane.py +125 -0
- ragops-1.6.0/src/ragops/demo.py +162 -0
- ragops-1.6.0/src/ragops/engine.py +149 -0
- ragops-1.6.0/src/ragops/evaluators.py +70 -0
- ragops-1.6.0/src/ragops/loader.py +196 -0
- ragops-1.6.0/src/ragops/models.py +131 -0
- ragops-1.6.0/src/ragops/plugins.py +117 -0
- ragops-1.6.0/src/ragops/providers/__init__.py +5 -0
- ragops-1.6.0/src/ragops/providers/openai_responses.py +84 -0
- ragops-1.6.0/src/ragops/reporters.py +124 -0
- ragops-1.6.0/src/ragops/store.py +170 -0
- ragops-1.6.0/src/ragops/traces.py +52 -0
- ragops-1.6.0/tests/test_benchmarks.py +33 -0
- ragops-1.6.0/tests/test_comparison.py +42 -0
- ragops-1.6.0/tests/test_config.py +19 -0
- ragops-1.6.0/tests/test_control_plane.py +43 -0
- ragops-1.6.0/tests/test_demo.py +76 -0
- ragops-1.6.0/tests/test_engine.py +40 -0
- ragops-1.6.0/tests/test_evaluator_depth.py +64 -0
- ragops-1.6.0/tests/test_github_workflows.py +47 -0
- ragops-1.6.0/tests/test_http_adapter.py +35 -0
- ragops-1.6.0/tests/test_loader.py +30 -0
- ragops-1.6.0/tests/test_openai_provider.py +62 -0
- ragops-1.6.0/tests/test_opentelemetry_adapter.py +78 -0
- ragops-1.6.0/tests/test_plugins_and_traces.py +36 -0
- ragops-1.6.0/tests/test_public_api.py +30 -0
- ragops-1.6.0/tests/test_readme_visuals.py +32 -0
- ragops-1.6.0/tests/test_reference_agent.py +77 -0
- ragops-1.6.0/tests/test_reference_benchmark.py +25 -0
- ragops-1.6.0/tests/test_release_version.py +15 -0
- ragops-1.6.0/tests/test_response_fixtures.py +73 -0
- ragops-1.6.0/tests/test_scenario_v02_and_attacks.py +92 -0
- ragops-1.6.0/tests/test_schema_files.py +12 -0
- ragops-1.6.0/tests/test_showcase_site.py +72 -0
- ragops-1.6.0/tests/test_store_and_html.py +39 -0
- ragops-1.6.0/tests/test_team_workflow.py +74 -0
- ragops-1.6.0/tests/test_workbench.py +12 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
name: Bug report
|
|
2
|
+
description: Report a reproducible defect without private data
|
|
3
|
+
title: "[Bug]: "
|
|
4
|
+
labels: [bug]
|
|
5
|
+
body:
|
|
6
|
+
- type: markdown
|
|
7
|
+
attributes:
|
|
8
|
+
value: Never include secrets, customer-confidential data, or private traces.
|
|
9
|
+
- type: input
|
|
10
|
+
id: version
|
|
11
|
+
attributes:
|
|
12
|
+
label: RAGOps version or commit
|
|
13
|
+
placeholder: v1.6.0 or commit SHA
|
|
14
|
+
validations:
|
|
15
|
+
required: true
|
|
16
|
+
- type: textarea
|
|
17
|
+
id: reproduction
|
|
18
|
+
attributes:
|
|
19
|
+
label: Minimal reproduction
|
|
20
|
+
description: Include the command and a synthetic or redacted fixture.
|
|
21
|
+
validations:
|
|
22
|
+
required: true
|
|
23
|
+
- type: textarea
|
|
24
|
+
id: expected
|
|
25
|
+
attributes:
|
|
26
|
+
label: Expected behavior
|
|
27
|
+
validations:
|
|
28
|
+
required: true
|
|
29
|
+
- type: textarea
|
|
30
|
+
id: actual
|
|
31
|
+
attributes:
|
|
32
|
+
label: Actual behavior
|
|
33
|
+
validations:
|
|
34
|
+
required: true
|
|
35
|
+
- type: input
|
|
36
|
+
id: environment
|
|
37
|
+
attributes:
|
|
38
|
+
label: Environment
|
|
39
|
+
placeholder: Python 3.12, macOS 15
|
|
40
|
+
validations:
|
|
41
|
+
required: true
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
blank_issues_enabled: false
|
|
2
|
+
contact_links:
|
|
3
|
+
- name: Security vulnerability
|
|
4
|
+
url: https://github.com/thangldw/ragops/security/policy
|
|
5
|
+
about: Report vulnerabilities privately through the security policy.
|
|
6
|
+
- name: Support guidance
|
|
7
|
+
url: https://github.com/thangldw/ragops/blob/main/SUPPORT.md
|
|
8
|
+
about: Read what to include before opening an issue.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
name: Design-partner interest
|
|
2
|
+
description: Explore an offline RAGOps evaluation pilot using synthetic or redacted data.
|
|
3
|
+
title: "[Design partner]: "
|
|
4
|
+
labels: [design-partner]
|
|
5
|
+
body:
|
|
6
|
+
- type: markdown
|
|
7
|
+
attributes:
|
|
8
|
+
value: |
|
|
9
|
+
Do not include production secrets, personal data, customer-confidential
|
|
10
|
+
content, API keys, or proprietary traces in this public issue.
|
|
11
|
+
- type: textarea
|
|
12
|
+
id: workflow
|
|
13
|
+
attributes:
|
|
14
|
+
label: AI workflow
|
|
15
|
+
description: What RAG or agent workflow are you evaluating?
|
|
16
|
+
validations:
|
|
17
|
+
required: true
|
|
18
|
+
- type: textarea
|
|
19
|
+
id: decision
|
|
20
|
+
attributes:
|
|
21
|
+
label: Release decision today
|
|
22
|
+
description: How do you currently decide whether a candidate is safe and useful enough to release?
|
|
23
|
+
validations:
|
|
24
|
+
required: true
|
|
25
|
+
- type: textarea
|
|
26
|
+
id: failure
|
|
27
|
+
attributes:
|
|
28
|
+
label: Representative synthetic failure
|
|
29
|
+
description: Describe a redacted or synthetic regression without sharing sensitive data.
|
|
30
|
+
validations:
|
|
31
|
+
required: true
|
|
32
|
+
- type: dropdown
|
|
33
|
+
id: data
|
|
34
|
+
attributes:
|
|
35
|
+
label: Safe fixture availability
|
|
36
|
+
options:
|
|
37
|
+
- Synthetic fixtures available
|
|
38
|
+
- Redacted fixtures available
|
|
39
|
+
- Need help creating safe fixtures
|
|
40
|
+
validations:
|
|
41
|
+
required: true
|
|
42
|
+
- type: checkboxes
|
|
43
|
+
id: consent
|
|
44
|
+
attributes:
|
|
45
|
+
label: Public issue safety
|
|
46
|
+
options:
|
|
47
|
+
- label: I confirm this issue contains no secrets, personal data, or customer-confidential content.
|
|
48
|
+
required: true
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
name: Evaluator proposal
|
|
2
|
+
description: Propose a measurable evaluator with calibration and failure modes.
|
|
3
|
+
title: "[Evaluator]: "
|
|
4
|
+
labels: [evaluation]
|
|
5
|
+
body:
|
|
6
|
+
- type: textarea
|
|
7
|
+
id: construct
|
|
8
|
+
attributes:
|
|
9
|
+
label: Construct being measured
|
|
10
|
+
description: Define precisely what the score means and does not mean.
|
|
11
|
+
validations:
|
|
12
|
+
required: true
|
|
13
|
+
- type: textarea
|
|
14
|
+
id: method
|
|
15
|
+
attributes:
|
|
16
|
+
label: Method and inputs
|
|
17
|
+
description: Explain deterministic/provider behavior, required evidence, and output range.
|
|
18
|
+
validations:
|
|
19
|
+
required: true
|
|
20
|
+
- type: textarea
|
|
21
|
+
id: calibration
|
|
22
|
+
attributes:
|
|
23
|
+
label: Calibration plan
|
|
24
|
+
description: Labeled cases, human rubric, agreement analysis, and thresholds.
|
|
25
|
+
validations:
|
|
26
|
+
required: true
|
|
27
|
+
- type: textarea
|
|
28
|
+
id: failures
|
|
29
|
+
attributes:
|
|
30
|
+
label: Known failure modes
|
|
31
|
+
validations:
|
|
32
|
+
required: true
|
|
33
|
+
- type: checkboxes
|
|
34
|
+
id: boundary
|
|
35
|
+
attributes:
|
|
36
|
+
label: Product boundary
|
|
37
|
+
options:
|
|
38
|
+
- label: The core remains useful offline or this is an explicitly optional plugin.
|
|
39
|
+
required: true
|
|
40
|
+
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
name: Product feature
|
|
2
|
+
description: Propose a capability tied to a user outcome and release contract.
|
|
3
|
+
title: "[Feature]: "
|
|
4
|
+
labels: [enhancement]
|
|
5
|
+
body:
|
|
6
|
+
- type: textarea
|
|
7
|
+
id: problem
|
|
8
|
+
attributes:
|
|
9
|
+
label: User problem
|
|
10
|
+
description: Who has the problem, in what workflow, and why does it matter?
|
|
11
|
+
validations:
|
|
12
|
+
required: true
|
|
13
|
+
- type: textarea
|
|
14
|
+
id: outcome
|
|
15
|
+
attributes:
|
|
16
|
+
label: Desired outcome
|
|
17
|
+
description: Describe observable success without prescribing implementation.
|
|
18
|
+
validations:
|
|
19
|
+
required: true
|
|
20
|
+
- type: textarea
|
|
21
|
+
id: contract
|
|
22
|
+
attributes:
|
|
23
|
+
label: Contract and acceptance criteria
|
|
24
|
+
description: Include input, output, release behavior, compatibility, and tests.
|
|
25
|
+
validations:
|
|
26
|
+
required: true
|
|
27
|
+
- type: textarea
|
|
28
|
+
id: non_goals
|
|
29
|
+
attributes:
|
|
30
|
+
label: Non-goals and boundaries
|
|
31
|
+
validations:
|
|
32
|
+
required: true
|
|
33
|
+
- type: textarea
|
|
34
|
+
id: evidence
|
|
35
|
+
attributes:
|
|
36
|
+
label: Supporting evidence
|
|
37
|
+
description: Customer observation, benchmark case, incident, or design-partner request.
|
|
38
|
+
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
## Product contract
|
|
2
|
+
|
|
3
|
+
- Requirement / issue:
|
|
4
|
+
- User outcome:
|
|
5
|
+
- Explicit non-goals:
|
|
6
|
+
|
|
7
|
+
## Change
|
|
8
|
+
|
|
9
|
+
- Public API or schema impact:
|
|
10
|
+
- Metric or release-decision impact:
|
|
11
|
+
- Architecture / ADR impact:
|
|
12
|
+
|
|
13
|
+
## Verification
|
|
14
|
+
|
|
15
|
+
- [ ] Tests added or updated
|
|
16
|
+
- [ ] `ruff check .`
|
|
17
|
+
- [ ] `PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 pytest -q`
|
|
18
|
+
- [ ] Affected CLI/API workflow exercised
|
|
19
|
+
- [ ] Documentation and changelog updated
|
|
20
|
+
|
|
21
|
+
## Owner acceptance
|
|
22
|
+
|
|
23
|
+
- Evidence or demo:
|
|
24
|
+
- Known limitations:
|
|
25
|
+
- Decision requested from product owner:
|
|
26
|
+
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
pull_request:
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
test:
|
|
9
|
+
runs-on: ubuntu-latest
|
|
10
|
+
strategy:
|
|
11
|
+
matrix:
|
|
12
|
+
python-version: ["3.11", "3.12"]
|
|
13
|
+
steps:
|
|
14
|
+
- uses: actions/checkout@v4
|
|
15
|
+
- uses: actions/setup-python@v5
|
|
16
|
+
with:
|
|
17
|
+
python-version: ${{ matrix.python-version }}
|
|
18
|
+
- run: pip install -e '.[dev]'
|
|
19
|
+
- run: ruff check .
|
|
20
|
+
- run: pytest
|
|
21
|
+
- run: ragops evaluate --scenario scenarios/japanese_troubleshooting/scenario.json --responses scenarios/japanese_troubleshooting/sample_responses.json
|
|
22
|
+
- name: Validate reference benchmark coverage
|
|
23
|
+
run: ragops inspect --scenario scenarios/japanese_troubleshooting/benchmark-v0.2.json
|
|
24
|
+
- name: Evaluate reference benchmark baseline
|
|
25
|
+
run: >-
|
|
26
|
+
ragops evaluate
|
|
27
|
+
--scenario scenarios/japanese_troubleshooting/benchmark-v0.2.json
|
|
28
|
+
--responses scenarios/japanese_troubleshooting/benchmark-baseline.json
|
|
29
|
+
--evaluator citation_correctness
|
|
30
|
+
--evaluator claim_support
|
|
31
|
+
- name: Confirm regressed benchmark is blocked
|
|
32
|
+
shell: bash
|
|
33
|
+
run: |
|
|
34
|
+
set +e
|
|
35
|
+
ragops compare \
|
|
36
|
+
--scenario scenarios/japanese_troubleshooting/benchmark-v0.2.json \
|
|
37
|
+
--baseline scenarios/japanese_troubleshooting/benchmark-baseline.json \
|
|
38
|
+
--candidate scenarios/japanese_troubleshooting/benchmark-regressed.json \
|
|
39
|
+
--format markdown
|
|
40
|
+
code=$?
|
|
41
|
+
set -e
|
|
42
|
+
test "$code" -eq 2
|
|
43
|
+
- name: Confirm adversarial benchmark is blocked
|
|
44
|
+
shell: bash
|
|
45
|
+
run: |
|
|
46
|
+
set +e
|
|
47
|
+
ragops evaluate \
|
|
48
|
+
--scenario scenarios/japanese_troubleshooting/benchmark-v0.2.json \
|
|
49
|
+
--responses scenarios/japanese_troubleshooting/benchmark-adversarial.json
|
|
50
|
+
code=$?
|
|
51
|
+
set -e
|
|
52
|
+
test "$code" -eq 2
|
|
53
|
+
- name: Render regression report
|
|
54
|
+
run: >-
|
|
55
|
+
ragops compare
|
|
56
|
+
--scenario scenarios/japanese_troubleshooting/scenario.json
|
|
57
|
+
--baseline scenarios/japanese_troubleshooting/sample_responses.json
|
|
58
|
+
--candidate scenarios/japanese_troubleshooting/sample_responses.json
|
|
59
|
+
--format markdown
|
|
60
|
+
--output reports/regression.md
|
|
61
|
+
- name: Run reference GraphRAG agent
|
|
62
|
+
run: >-
|
|
63
|
+
python -m examples.japanese_troubleshooting_agent.cli
|
|
64
|
+
--suite examples/japanese_troubleshooting_agent/suite.json
|
|
65
|
+
--retriever graph
|
|
66
|
+
--output /tmp/reference-traces.jsonl
|
|
67
|
+
- name: Evaluate reference deployment traces
|
|
68
|
+
run: >-
|
|
69
|
+
ragops evaluate
|
|
70
|
+
--scenario examples/japanese_troubleshooting_agent/scenario.json
|
|
71
|
+
--traces /tmp/reference-traces.jsonl
|
|
72
|
+
--evaluator citation_correctness
|
|
73
|
+
--evaluator claim_support
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
name: Nightly benchmark
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
schedule:
|
|
5
|
+
- cron: "17 18 * * *"
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
benchmark:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
steps:
|
|
15
|
+
- uses: actions/checkout@v4
|
|
16
|
+
- uses: actions/setup-python@v5
|
|
17
|
+
with:
|
|
18
|
+
python-version: "3.12"
|
|
19
|
+
- run: pip install -e '.[dev]'
|
|
20
|
+
- name: Evaluate 30-case benchmark
|
|
21
|
+
run: >-
|
|
22
|
+
ragops evaluate
|
|
23
|
+
--scenario scenarios/japanese_troubleshooting/benchmark-v0.2.json
|
|
24
|
+
--responses scenarios/japanese_troubleshooting/benchmark-baseline.json
|
|
25
|
+
--evaluator citation_correctness
|
|
26
|
+
--evaluator claim_support
|
|
27
|
+
- name: Run reference deployment
|
|
28
|
+
run: >-
|
|
29
|
+
python -m examples.japanese_troubleshooting_agent.cli
|
|
30
|
+
--suite examples/japanese_troubleshooting_agent/suite.json
|
|
31
|
+
--retriever graph
|
|
32
|
+
--output /tmp/reference-traces.jsonl
|
|
33
|
+
- name: Gate reference traces
|
|
34
|
+
run: >-
|
|
35
|
+
ragops evaluate
|
|
36
|
+
--scenario examples/japanese_troubleshooting_agent/scenario.json
|
|
37
|
+
--traces /tmp/reference-traces.jsonl
|
|
38
|
+
--evaluator citation_correctness
|
|
39
|
+
--evaluator claim_support
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
name: Pages
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
paths: ["site/**", ".github/workflows/pages.yml"]
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
|
|
9
|
+
permissions:
|
|
10
|
+
contents: read
|
|
11
|
+
pages: write
|
|
12
|
+
id-token: write
|
|
13
|
+
|
|
14
|
+
concurrency:
|
|
15
|
+
group: pages
|
|
16
|
+
cancel-in-progress: true
|
|
17
|
+
|
|
18
|
+
jobs:
|
|
19
|
+
deploy:
|
|
20
|
+
environment:
|
|
21
|
+
name: github-pages
|
|
22
|
+
url: ${{ steps.deployment.outputs.page_url }}
|
|
23
|
+
runs-on: ubuntu-latest
|
|
24
|
+
steps:
|
|
25
|
+
- uses: actions/checkout@v4
|
|
26
|
+
- uses: actions/configure-pages@v5
|
|
27
|
+
- uses: actions/upload-pages-artifact@v3
|
|
28
|
+
with:
|
|
29
|
+
path: site
|
|
30
|
+
- id: deployment
|
|
31
|
+
uses: actions/deploy-pages@v4
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
name: Publish package to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
inputs:
|
|
6
|
+
tag:
|
|
7
|
+
description: Existing RAGOps release tag to publish
|
|
8
|
+
required: true
|
|
9
|
+
type: string
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
publish:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
environment: pypi
|
|
15
|
+
permissions:
|
|
16
|
+
contents: read
|
|
17
|
+
id-token: write
|
|
18
|
+
steps:
|
|
19
|
+
- uses: actions/checkout@v4
|
|
20
|
+
with:
|
|
21
|
+
ref: ${{ inputs.tag }}
|
|
22
|
+
- uses: actions/setup-python@v5
|
|
23
|
+
with:
|
|
24
|
+
python-version: "3.12"
|
|
25
|
+
- name: Verify tag and package version
|
|
26
|
+
env:
|
|
27
|
+
RELEASE_TAG: ${{ inputs.tag }}
|
|
28
|
+
run: |
|
|
29
|
+
python - "$RELEASE_TAG" <<'PY'
|
|
30
|
+
import sys
|
|
31
|
+
import tomllib
|
|
32
|
+
from pathlib import Path
|
|
33
|
+
|
|
34
|
+
tag = sys.argv[1]
|
|
35
|
+
version = tomllib.loads(Path("pyproject.toml").read_text())["project"]["version"]
|
|
36
|
+
if tag != f"v{version}":
|
|
37
|
+
raise SystemExit(f"tag {tag!r} does not match package version v{version}")
|
|
38
|
+
print(f"publishing ragops {version}")
|
|
39
|
+
PY
|
|
40
|
+
- run: python -m pip install --upgrade build
|
|
41
|
+
- run: python -m build
|
|
42
|
+
- name: Publish distributions with Trusted Publishing
|
|
43
|
+
uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # v1.13.0
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
name: RAGOps reusable gate smoke
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
paths:
|
|
7
|
+
- ".github/workflows/ragops-gate.yml"
|
|
8
|
+
- ".github/workflows/ragops-gate-smoke.yml"
|
|
9
|
+
- "tests/test_github_workflows.py"
|
|
10
|
+
pull_request:
|
|
11
|
+
paths:
|
|
12
|
+
- ".github/workflows/ragops-gate.yml"
|
|
13
|
+
- ".github/workflows/ragops-gate-smoke.yml"
|
|
14
|
+
- "tests/test_github_workflows.py"
|
|
15
|
+
workflow_dispatch:
|
|
16
|
+
|
|
17
|
+
jobs:
|
|
18
|
+
passing-reference:
|
|
19
|
+
uses: ./.github/workflows/ragops-gate.yml
|
|
20
|
+
with:
|
|
21
|
+
ragops-version: v1.6.0
|
|
22
|
+
scenario: scenarios/japanese_troubleshooting/benchmark-v0.2.json
|
|
23
|
+
baseline: scenarios/japanese_troubleshooting/benchmark-baseline.json
|
|
24
|
+
candidate: scenarios/japanese_troubleshooting/benchmark-baseline.json
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
name: RAGOps reusable release gate
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_call:
|
|
5
|
+
inputs:
|
|
6
|
+
python-version:
|
|
7
|
+
description: Python version used to run RAGOps
|
|
8
|
+
required: false
|
|
9
|
+
type: string
|
|
10
|
+
default: "3.12"
|
|
11
|
+
ragops-version:
|
|
12
|
+
description: RAGOps Git revision or tag to install
|
|
13
|
+
required: false
|
|
14
|
+
type: string
|
|
15
|
+
default: "v1.6.0"
|
|
16
|
+
scenario:
|
|
17
|
+
description: Caller-relative scenario JSON path
|
|
18
|
+
required: true
|
|
19
|
+
type: string
|
|
20
|
+
baseline:
|
|
21
|
+
description: Caller-relative accepted baseline response path
|
|
22
|
+
required: true
|
|
23
|
+
type: string
|
|
24
|
+
candidate:
|
|
25
|
+
description: Caller-relative candidate response path
|
|
26
|
+
required: true
|
|
27
|
+
type: string
|
|
28
|
+
policy:
|
|
29
|
+
description: Optional caller-relative regression policy path
|
|
30
|
+
required: false
|
|
31
|
+
type: string
|
|
32
|
+
default: ""
|
|
33
|
+
|
|
34
|
+
jobs:
|
|
35
|
+
release-gate:
|
|
36
|
+
runs-on: ubuntu-latest
|
|
37
|
+
permissions:
|
|
38
|
+
contents: read
|
|
39
|
+
steps:
|
|
40
|
+
- uses: actions/checkout@v4
|
|
41
|
+
- uses: actions/setup-python@v5
|
|
42
|
+
with:
|
|
43
|
+
python-version: ${{ inputs.python-version }}
|
|
44
|
+
- name: Install RAGOps
|
|
45
|
+
env:
|
|
46
|
+
RAGOPS_VERSION: ${{ inputs.ragops-version }}
|
|
47
|
+
run: >-
|
|
48
|
+
python -m pip install
|
|
49
|
+
"ragops @ git+https://github.com/thangldw/ragops.git@${RAGOPS_VERSION}"
|
|
50
|
+
- id: gate
|
|
51
|
+
name: Compare candidate with accepted baseline
|
|
52
|
+
shell: bash
|
|
53
|
+
env:
|
|
54
|
+
RAGOPS_SCENARIO: ${{ inputs.scenario }}
|
|
55
|
+
RAGOPS_BASELINE: ${{ inputs.baseline }}
|
|
56
|
+
RAGOPS_CANDIDATE: ${{ inputs.candidate }}
|
|
57
|
+
RAGOPS_POLICY: ${{ inputs.policy }}
|
|
58
|
+
run: |
|
|
59
|
+
set +e
|
|
60
|
+
command=(
|
|
61
|
+
ragops compare
|
|
62
|
+
--scenario "$RAGOPS_SCENARIO"
|
|
63
|
+
--baseline "$RAGOPS_BASELINE"
|
|
64
|
+
--candidate "$RAGOPS_CANDIDATE"
|
|
65
|
+
--format markdown
|
|
66
|
+
--output ragops-report.md
|
|
67
|
+
)
|
|
68
|
+
if [[ -n "$RAGOPS_POLICY" ]]; then
|
|
69
|
+
command+=(--policy "$RAGOPS_POLICY")
|
|
70
|
+
fi
|
|
71
|
+
"${command[@]}" >ragops-command.log 2>&1
|
|
72
|
+
gate_exit=$?
|
|
73
|
+
set -e
|
|
74
|
+
if [[ ! -f ragops-report.md ]]; then
|
|
75
|
+
{
|
|
76
|
+
echo "# RAGOps release gate error"
|
|
77
|
+
echo
|
|
78
|
+
echo '```text'
|
|
79
|
+
cat ragops-command.log
|
|
80
|
+
echo '```'
|
|
81
|
+
} >ragops-report.md
|
|
82
|
+
fi
|
|
83
|
+
echo "exit_code=$gate_exit" >>"$GITHUB_OUTPUT"
|
|
84
|
+
- name: Publish evidence to job summary
|
|
85
|
+
if: always()
|
|
86
|
+
run: cat ragops-report.md >>"$GITHUB_STEP_SUMMARY"
|
|
87
|
+
- name: Upload release evidence
|
|
88
|
+
if: always()
|
|
89
|
+
uses: actions/upload-artifact@v4
|
|
90
|
+
with:
|
|
91
|
+
name: ragops-release-evidence
|
|
92
|
+
path: |
|
|
93
|
+
ragops-report.md
|
|
94
|
+
ragops-command.log
|
|
95
|
+
- name: Enforce release decision
|
|
96
|
+
if: always()
|
|
97
|
+
env:
|
|
98
|
+
RAGOPS_GATE_EXIT: ${{ steps.gate.outputs.exit_code }}
|
|
99
|
+
run: |
|
|
100
|
+
if [[ -z "$RAGOPS_GATE_EXIT" ]]; then
|
|
101
|
+
echo "RAGOps gate did not produce an exit code." >&2
|
|
102
|
+
exit 1
|
|
103
|
+
fi
|
|
104
|
+
exit "$RAGOPS_GATE_EXIT"
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags: ["v*"]
|
|
6
|
+
|
|
7
|
+
permissions:
|
|
8
|
+
contents: write
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
build:
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
steps:
|
|
14
|
+
- uses: actions/checkout@v4
|
|
15
|
+
- uses: actions/setup-python@v5
|
|
16
|
+
with:
|
|
17
|
+
python-version: "3.12"
|
|
18
|
+
- run: python -m pip install --upgrade build
|
|
19
|
+
- run: pip install -e '.[dev]'
|
|
20
|
+
- run: pytest
|
|
21
|
+
- run: ruff check .
|
|
22
|
+
- run: python -m build
|
|
23
|
+
- uses: actions/upload-artifact@v4
|
|
24
|
+
with:
|
|
25
|
+
name: python-package
|
|
26
|
+
path: dist/
|
|
27
|
+
- name: Publish GitHub Release
|
|
28
|
+
env:
|
|
29
|
+
GH_TOKEN: ${{ github.token }}
|
|
30
|
+
run: |
|
|
31
|
+
if gh release view "$GITHUB_REF_NAME" >/dev/null 2>&1; then
|
|
32
|
+
gh release upload "$GITHUB_REF_NAME" dist/* --clobber
|
|
33
|
+
else
|
|
34
|
+
gh release create "$GITHUB_REF_NAME" dist/* \
|
|
35
|
+
--verify-tag \
|
|
36
|
+
--title "RAGOps $GITHUB_REF_NAME" \
|
|
37
|
+
--notes-file "docs/releases/$GITHUB_REF_NAME.md"
|
|
38
|
+
fi
|
ragops-1.6.0/.gitignore
ADDED
ragops-1.6.0/AGENTS.md
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# RAGOps collaboration contract
|
|
2
|
+
|
|
3
|
+
This repository is product-first. Product intent, contracts, and acceptance
|
|
4
|
+
criteria are authoritative; implementation must not silently redefine them.
|
|
5
|
+
|
|
6
|
+
## Ownership
|
|
7
|
+
|
|
8
|
+
- Thang owns product vision, architecture acceptance, review, and release.
|
|
9
|
+
- Codex and Claude Code may implement, test, refactor, and propose ADRs.
|
|
10
|
+
- Any change to a public schema, release gate, metric meaning, or open-core
|
|
11
|
+
boundary requires an ADR and explicit owner review.
|
|
12
|
+
|
|
13
|
+
## Required workflow
|
|
14
|
+
|
|
15
|
+
1. Read the relevant product requirement and architecture decision.
|
|
16
|
+
2. State the contract being changed and its compatibility impact.
|
|
17
|
+
3. Implement the smallest vertical slice, including tests and documentation.
|
|
18
|
+
4. Run `ruff check .` and `PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 pytest -q`.
|
|
19
|
+
5. Update the changelog for user-visible behavior.
|
|
20
|
+
6. Leave the work ready for owner acceptance; do not publish or release unless
|
|
21
|
+
explicitly requested.
|
|
22
|
+
|
|
23
|
+
## Architectural boundaries
|
|
24
|
+
|
|
25
|
+
- `src/ragops/` is the dependency-free evaluation core.
|
|
26
|
+
- `apps/` contains adapters and user interfaces, not evaluation semantics.
|
|
27
|
+
- `scenarios/` contains portable fixtures, policies, and expected evidence.
|
|
28
|
+
- Provider integrations are optional adapters or plugins.
|
|
29
|
+
- The open-source core must remain valuable without a hosted service.
|
|
30
|
+
|
|
31
|
+
## Repository skills
|
|
32
|
+
|
|
33
|
+
- Use `skills/ragops-feature/SKILL.md` for feature implementation.
|
|
34
|
+
- Use `skills/ragops-release/SKILL.md` for validation and release readiness.
|
|
35
|
+
- Use `skills/ragops-presentation/SKILL.md` for demos and presentation assets.
|
|
36
|
+
|