diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0e8361e..d8d83c6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -67,8 +67,10 @@ jobs: pip install -e ".[dev]" - name: Run tests # -rs surfaces skipped tests (e.g. importorskip-guarded integration tests) in the log - # so a silently-skipping suite is visible rather than looking fully green. - run: python -m pytest -rs + # so a silently-skipping suite is visible rather than looking fully green. --cov prints + # a coverage summary for the package on every leg; there is deliberately no + # --cov-fail-under, so coverage is measured and visible but never gates the build. + run: python -m pytest -rs --cov=dprovenancekit --cov-report=term-missing:skip-covered # The default `test` job installs only `.[dev]` (which includes langchain-core, so the # LangChain integration tests run there). The OpenAI Agents, LlamaIndex, and CrewAI diff --git a/CHANGELOG.md b/CHANGELOG.md index 30a52c7..1c90fff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,10 @@ public API may still change between minor versions. `traced_run(context_id="...")` without an explicit store now owns and deterministically closes a SQLite store at `DPROV_DB` or `.dprovenance/traces.sqlite`, while the existing explicit-store and run-id/context CLI interfaces remain compatible. +- **An `all` convenience extra.** `pip install dprovenancekit[all]` installs every framework + adapter (LangChain, OpenAI Agents, LlamaIndex, CrewAI, Google GenAI, FastAPI, Jupyter, MCP) in + one step. It requires Python ≥ 3.10 (three of those adapters declare that floor) and is heavy + (CrewAI pulls chromadb/onnxruntime); on 3.9, or for a lean install, pick the specific extras. ### Security diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f9e8f9e..fa1b2ba 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -21,7 +21,7 @@ standard library. Framework adapters live behind optional extras (`.[langchain]` Run the same checks CI runs: ```bash -python -m pytest -q # full test suite (currently ~430 tests, a few seconds) +python -m pytest -q # full test suite (currently ~440 tests, a few seconds) python -m ruff check dprovenancekit/ python -m mypy dprovenancekit/ ``` diff --git a/README.md b/README.md index e95cdab..48d4873 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,8 @@ [![CI](https://github.com/Therealdk8890/DProvenanceKitPython/actions/workflows/ci.yml/badge.svg)](https://github.com/Therealdk8890/DProvenanceKitPython/actions/workflows/ci.yml) [![PyPI](https://img.shields.io/pypi/v/dprovenancekit)](https://pypi.org/project/dprovenancekit/) [![PyPI Downloads](https://static.pepy.tech/personalized-badge/dprovenancekit?period=total&units=INTERNATIONAL_SYSTEM&left_color=BLACK&right_color=GREEN&left_text=downloads)](https://pepy.tech/projects/dprovenancekit) +[![Python versions](https://img.shields.io/pypi/pyversions/dprovenancekit)](https://pypi.org/project/dprovenancekit/) +[![License](https://img.shields.io/pypi/l/dprovenancekit)](LICENSE) [![Listed in the official OpenAI Agents SDK docs](https://img.shields.io/badge/OpenAI%20Agents%20SDK-listed%20in%20the%20official%20docs-412991)](https://github.com/openai/openai-agents-python/blob/main/docs/tracing.md#external-tracing-processors-list) **Your agent skipped its verification step. The final answer still looked right, so every eval and @@ -574,8 +576,8 @@ application owns storage or needs a different backend. python -m pytest ``` -380+ tests. A default run (core plus whichever adapters you have installed) is ~380; CI's full -matrix is higher. Coverage spans Swift-parity tests ported from the original suite, cross-language +~440 tests in the suite. A default run (core plus whichever adapters you have installed) executes +~380 and skips the rest; CI's full matrix runs them all. Coverage spans Swift-parity tests ported from the original suite, cross-language conformance checks against the frozen Trace Specification v1 vectors, per-adapter integration tests (LangChain, OpenAI Agents SDK, LlamaIndex, CrewAI), instrumentation-layer tests, regression-gate tests, facade and visualizer tests, ecosystem integration tests (FastAPI, Jupyter, MCP), and the diff --git a/pyproject.toml b/pyproject.toml index 0023f9f..1b9ffef 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -34,7 +34,7 @@ dependencies = [] # silently skipping them. The CrewAI integration test needs `crewai`, which is heavy # (chromadb, onnxruntime, …) and requires Python >=3.10, so it is intentionally left out # of `dev` and runs only where crewai is installed (importorskip skips it otherwise). -dev = ["pytest>=7.0", "fastapi", "httpx", "IPython", "pytest-asyncio", "langchain-core>=0.2"] +dev = ["pytest>=7.0", "pytest-cov", "fastapi", "httpx", "IPython", "pytest-asyncio", "langchain-core>=0.2"] # Framework adapters. The core package stays pure standard library; these extras are only # needed to wire DProvenanceKit into the corresponding framework. langchain = ["langchain-core>=0.2"] @@ -51,6 +51,20 @@ google-genai = ["google-genai"] fastapi = ["fastapi", "starlette"] jupyter = ["ipython"] mcp = ["mcp"] +# Convenience aggregate: every framework adapter in one install. Requires Python >= 3.10 +# (openai-agents, llama-index, and crewai declare that floor) and is heavy (crewai pulls +# chromadb/onnxruntime). On 3.9, or for a lean install, pick the specific extras above. +all = [ + "langchain-core>=0.2", + "openai-agents>=0.1", + "llama-index-core", + "crewai>=1.0.0", + "google-genai", + "fastapi", + "starlette", + "ipython", + "mcp", +] [project.scripts] dprovenancekit = "dprovenancekit.cli:main"