Feature Request
Make the root README a trustworthy first install: package extras matrix, telemetry opt-out before import, runnable quickstarts, and a short concepts blurb (Scenario / Check / Suite / Target).
Motivation
pip install giskard only pulls checks; scan and provider SDKs are extras. Telemetry opt-out lives in giskard-core but not on the landing path (and must be set before import). Scan quickstart uses undefined my_agent. Checks snippets often omit asyncio.run.
Implementation plan
- Edit root
README.md Install + Checks + Scan sections only (minimal churn).
- Add extras table + telemetry blurb linking to
libs/giskard-core/README.md.
- Rewrite Checks fence with
async def main + asyncio.run(main()).
- Rewrite Scan fence with a real stub
target.
- Add a short Concepts subsection.
- Cross-link
giskard[scan] / provider extras next to judge usage — no package README rewrite.
Suggested README fragments
Install
## Install
```sh
pip install giskard # checks (+ agents, llm, core)
pip install "giskard[scan]" # + vulnerability / quality scan
pip install "giskard[openai]" # provider SDK for LLM judges / generators
| Extra |
Adds |
| (none) |
giskard-checks and dependencies |
scan |
giskard-scan |
openai / anthropic / … |
provider SDKs (see pyproject optional deps) |
Telemetry: optional aggregated analytics via giskard-core. No prompts or outputs are sent.
Opt out before importing Giskard: export DO_NOT_TRACK=1 or GISKARD_TELEMETRY_DISABLED=1.
Details: giskard-core README.
**Concepts**
```markdown
### Concepts
- **Target** — your system under test: any sync/async callable `(inputs) -> outputs` (optionally with `trace`)
- **Scenario** — one eval: interactions + checks
- **Check** — assertion or LLM judge over the trace
- **Suite** — many scenarios run together
`giskard.agents.Generator` is an LLM client for workflows/judges — not the same as
`giskard.checks` input generators (`LLMGenerator`) that synthesize user messages.
Checks quickstart shape
import asyncio
from giskard.checks import Scenario, Groundedness
def get_answer(inputs: str) -> str:
return "Paris" # replace with your model / agent
async def main() -> None:
scenario = (
Scenario("test_france_capital")
.interact(inputs="What is the capital of France?", outputs=get_answer)
.check(
Groundedness(
name="answer is grounded",
context="France is in Western Europe. Its capital is Paris.",
)
)
)
result = await scenario.run()
result.print_report()
asyncio.run(main())
Scan quickstart shape
import asyncio
from giskard.scan import vulnerability_scan
async def my_agent(inputs: str) -> str:
# Replace with your agent / model call
return f"Echo: {inputs}"
async def main() -> None:
await vulnerability_scan(
target=my_agent,
description="A customer support chatbot for an e-commerce platform.",
languages=["en"],
)
asyncio.run(main())
Acceptance criteria
Out of scope
Feature Request
Make the root README a trustworthy first install: package extras matrix, telemetry opt-out before import, runnable quickstarts, and a short concepts blurb (Scenario / Check / Suite / Target).
Motivation
pip install giskardonly pulls checks; scan and provider SDKs are extras. Telemetry opt-out lives ingiskard-corebut not on the landing path (and must be set before import). Scan quickstart uses undefinedmy_agent. Checks snippets often omitasyncio.run.Implementation plan
README.mdInstall + Checks + Scan sections only (minimal churn).libs/giskard-core/README.md.async def main+asyncio.run(main()).target.giskard[scan]/ provider extras next to judge usage — no package README rewrite.Suggested README fragments
Install
giskard-checksand dependenciesscangiskard-scanopenai/anthropic/ …Telemetry: optional aggregated analytics via
giskard-core. No prompts or outputs are sent.Opt out before importing Giskard:
export DO_NOT_TRACK=1orGISKARD_TELEMETRY_DISABLED=1.Details:
giskard-coreREADME.Checks quickstart shape
Scan quickstart shape
Acceptance criteria
asyncio.runtargetOut of scope
Errortype collapse (separate)