Metadata-Version: 2.4
Name: hawk
Version: 2.0.0
Summary: GitHub Action to start Inspect eval sets in Kubernetes
Requires-Python: >=3.13
Requires-Dist: packaging>=21.0
Requires-Dist: pydantic>=2.11.2
Requires-Dist: ruamel-yaml>=0.19.1
Provides-Extra: api
Requires-Dist: aiofiles; extra == 'api'
Requires-Dist: aiohttp>=3.11.0; extra == 'api'
Requires-Dist: alembic>=1.16; extra == 'api'
Requires-Dist: async-lru>=2.3.0; extra == 'api'
Requires-Dist: asyncpg>=0.31; extra == 'api'
Requires-Dist: asyncssh>=2.18.0; extra == 'api'
Requires-Dist: boto3>=1.38.0; extra == 'api'
Requires-Dist: eralchemy<2.0.0,>=1.5.0; extra == 'api'
Requires-Dist: fastapi[standard]; extra == 'api'
Requires-Dist: graphviz>=0.20; extra == 'api'
Requires-Dist: greenlet>=3.2; extra == 'api'
Requires-Dist: inspect-ai>=0.3.241; extra == 'api'
Requires-Dist: inspect-scout>=0.4.39; extra == 'api'
Requires-Dist: joserfc>=1.6.3; extra == 'api'
Requires-Dist: kubernetes-asyncio>=31.0.0; extra == 'api'
Requires-Dist: opentelemetry-api>=1.20.0; extra == 'api'
Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.20.0; extra == 'api'
Requires-Dist: opentelemetry-propagator-aws-xray>=1.0.0; extra == 'api'
Requires-Dist: opentelemetry-sdk-extension-aws>=2.0.0; extra == 'api'
Requires-Dist: opentelemetry-sdk>=1.20.0; extra == 'api'
Requires-Dist: psycopg[binary,pool]>=3.2; extra == 'api'
Requires-Dist: pydantic-settings>=2.9.1; extra == 'api'
Requires-Dist: pyhelm3>=0.4.0; extra == 'api'
Requires-Dist: python-json-logger==3.3.0; extra == 'api'
Requires-Dist: sentry-sdk[fastapi]>=2.62.0; extra == 'api'
Requires-Dist: sqlalchemy-aurora-data-api>=0.5; extra == 'api'
Requires-Dist: sqlalchemy-rdsiam>=1.0.3; extra == 'api'
Requires-Dist: sqlalchemy[asyncio]>=2.0; extra == 'api'
Requires-Dist: sqlmodel>=0.0.24; extra == 'api'
Requires-Dist: tenacity>=8.0.0; extra == 'api'
Provides-Extra: cli
Requires-Dist: aiohttp>=3.11.0; extra == 'cli'
Requires-Dist: click~=8.2.0; extra == 'cli'
Requires-Dist: inspect-ai>=0.3.234; extra == 'cli'
Requires-Dist: joserfc>=1.6.3; extra == 'cli'
Requires-Dist: keyring>=25.6.0; extra == 'cli'
Requires-Dist: keyrings-alt>=5.0.2; extra == 'cli'
Requires-Dist: pydantic-settings>=2.9.1; extra == 'cli'
Requires-Dist: pyjwt>=2.0.0; extra == 'cli'
Requires-Dist: python-dotenv==1.2.2; extra == 'cli'
Requires-Dist: sentry-sdk>=2.62.0; extra == 'cli'
Requires-Dist: tabulate>=0.9.0; extra == 'cli'
Provides-Extra: core
Requires-Dist: sentry-sdk>=2.62.0; extra == 'core'
Provides-Extra: core-aws
Requires-Dist: boto3>=1.38.0; extra == 'core-aws'
Provides-Extra: core-db
Requires-Dist: alembic>=1.16; extra == 'core-db'
Requires-Dist: asyncpg>=0.31; extra == 'core-db'
Requires-Dist: boto3>=1.38.0; extra == 'core-db'
Requires-Dist: greenlet>=3.2; extra == 'core-db'
Requires-Dist: psycopg[binary,pool]>=3.2; extra == 'core-db'
Requires-Dist: sqlalchemy-aurora-data-api>=0.5; extra == 'core-db'
Requires-Dist: sqlalchemy-rdsiam>=1.0.3; extra == 'core-db'
Requires-Dist: sqlalchemy[asyncio]>=2.0; extra == 'core-db'
Requires-Dist: sqlmodel>=0.0.24; extra == 'core-db'
Provides-Extra: core-eval-import
Requires-Dist: alembic>=1.16; extra == 'core-eval-import'
Requires-Dist: asyncpg>=0.31; extra == 'core-eval-import'
Requires-Dist: aws-lambda-powertools[tracer]; extra == 'core-eval-import'
Requires-Dist: boto3>=1.38.0; extra == 'core-eval-import'
Requires-Dist: fsspec; extra == 'core-eval-import'
Requires-Dist: greenlet>=3.2; extra == 'core-eval-import'
Requires-Dist: inspect-ai>=0.3.241; extra == 'core-eval-import'
Requires-Dist: psycopg[binary,pool]>=3.2; extra == 'core-eval-import'
Requires-Dist: python-json-logger==3.3.0; extra == 'core-eval-import'
Requires-Dist: sqlalchemy-aurora-data-api>=0.5; extra == 'core-eval-import'
Requires-Dist: sqlalchemy-rdsiam>=1.0.3; extra == 'core-eval-import'
Requires-Dist: sqlalchemy[asyncio]>=2.0; extra == 'core-eval-import'
Requires-Dist: sqlmodel>=0.0.24; extra == 'core-eval-import'
Provides-Extra: core-scan-import
Requires-Dist: alembic>=1.16; extra == 'core-scan-import'
Requires-Dist: asyncpg>=0.31; extra == 'core-scan-import'
Requires-Dist: aws-lambda-powertools[tracer]; extra == 'core-scan-import'
Requires-Dist: boto3>=1.38.0; extra == 'core-scan-import'
Requires-Dist: greenlet>=3.2; extra == 'core-scan-import'
Requires-Dist: inspect-scout>=0.4.39; extra == 'core-scan-import'
Requires-Dist: psycopg[binary,pool]>=3.2; extra == 'core-scan-import'
Requires-Dist: sqlalchemy-aurora-data-api>=0.5; extra == 'core-scan-import'
Requires-Dist: sqlalchemy-rdsiam>=1.0.3; extra == 'core-scan-import'
Requires-Dist: sqlalchemy[asyncio]>=2.0; extra == 'core-scan-import'
Requires-Dist: sqlmodel>=0.0.24; extra == 'core-scan-import'
Provides-Extra: inspect
Requires-Dist: inspect-ai>=0.3.241; extra == 'inspect'
Provides-Extra: inspect-scout
Requires-Dist: inspect-scout>=0.4.39; extra == 'inspect-scout'
Provides-Extra: janitor
Requires-Dist: kubernetes<36,>=29.0.0; extra == 'janitor'
Provides-Extra: runner
Requires-Dist: aioboto3; extra == 'runner'
Requires-Dist: httpx>=0.28.1; extra == 'runner'
Requires-Dist: inspect-k8s-sandbox; extra == 'runner'
Requires-Dist: kubernetes<36,>=29.0.0; extra == 'runner'
Requires-Dist: memray>=1.14.0; extra == 'runner'
Requires-Dist: opentelemetry-api>=1.20.0; extra == 'runner'
Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.20.0; extra == 'runner'
Requires-Dist: opentelemetry-propagator-aws-xray>=1.0.0; extra == 'runner'
Requires-Dist: opentelemetry-sdk-extension-aws>=2.0.0; extra == 'runner'
Requires-Dist: opentelemetry-sdk>=1.20.0; extra == 'runner'
Requires-Dist: platformdirs>=3.0.0; extra == 'runner'
Requires-Dist: py-spy>=0.4.0; extra == 'runner'
Requires-Dist: pydantic-settings>=2.9.1; extra == 'runner'
Requires-Dist: pyjwt>=2.0.0; extra == 'runner'
Requires-Dist: python-json-logger==3.3.0; extra == 'runner'
Requires-Dist: sentry-sdk>=2.62.0; extra == 'runner'
Requires-Dist: shortuuid; extra == 'runner'
Provides-Extra: tracing
Requires-Dist: opentelemetry-api>=1.20.0; extra == 'tracing'
Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.20.0; extra == 'tracing'
Requires-Dist: opentelemetry-propagator-aws-xray>=1.0.0; extra == 'tracing'
Requires-Dist: opentelemetry-sdk-extension-aws>=2.0.0; extra == 'tracing'
Requires-Dist: opentelemetry-sdk>=1.20.0; extra == 'tracing'
Description-Content-Type: text/markdown

# Hawk

Hawk is a platform for running [Inspect AI](https://inspect.aisi.org.uk) evaluations at scale on cloud infrastructure. You describe the tasks, agents, and models to evaluate in a YAML config, and Hawk handles the rest: provisioning isolated Kubernetes pods, managing LLM API credentials, streaming logs, importing results into a PostgreSQL warehouse, and serving a web UI to browse them. It also runs [Inspect Scout](https://github.com/meridianlabs-ai/inspect_scout) scans over transcripts from completed evaluations.

**📚 Full documentation: [hawk.metr.org](https://hawk.metr.org/)**

## Install the CLI

To install the CLI from GitHub, use the [install command in the main README](../README.md#install-the-hawk-cli).

## Run your first eval

```bash
export HAWK_API_URL=https://api.hawk.example.com   # your Hawk deployment
hawk login
hawk eval-set my-eval-set.yaml   # write your own, or grab an example from the repo's hawk/examples/
hawk logs -f    # watch it run
hawk web        # open results in the browser
```

See [Running Evaluations](https://hawk.metr.org/user-guide/running-evaluations/) for a ready-to-run example config.

## Documentation

- [Installation](https://hawk.metr.org/getting-started/installation/) — install the CLI and run your first eval
- [Running Evaluations](https://hawk.metr.org/user-guide/running-evaluations/) — eval set configs, secrets, local runs
- [Running Scans](https://hawk.metr.org/user-guide/running-scans/) — Inspect Scout scans over transcripts
- [CLI Reference](https://hawk.metr.org/user-guide/cli-reference/) — full command reference
- [Deploy your own Hawk](https://hawk.metr.org/getting-started/) — stand up a Hawk instance on AWS
- [Contributing](https://hawk.metr.org/contributing/) — developer setup and testing

## License

[MIT](../LICENSE)
