Metadata-Version: 2.4
Name: aire-ai
Version: 0.3.5
Summary: Agent-first AI creation library: one consistent interface from idea to deployed AI system.
Project-URL: Homepage, https://github.com/desenyon/aire
Project-URL: Documentation, https://desenyon.github.io/aire/
Project-URL: Repository, https://github.com/desenyon/aire
Project-URL: Changelog, https://github.com/desenyon/aire/blob/main/CHANGELOG.md
Project-URL: Issues, https://github.com/desenyon/aire/issues
Author: aire contributors
License: Apache-2.0
License-File: LICENSE
Keywords: agents,ai,evaluation,llm,rag,workflows
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Typing :: Typed
Requires-Python: >=3.11
Requires-Dist: httpx>=0.27
Requires-Dist: pydantic>=2.6
Requires-Dist: pyyaml>=6.0
Requires-Dist: typer>=0.12
Provides-Extra: all
Requires-Dist: catboost>=1.2; extra == 'all'
Requires-Dist: datasets>=2.18; extra == 'all'
Requires-Dist: fastapi>=0.110; extra == 'all'
Requires-Dist: keras>=3.0; extra == 'all'
Requires-Dist: lightgbm>=4.0; extra == 'all'
Requires-Dist: neo4j>=5.14; extra == 'all'
Requires-Dist: numpy>=1.26; extra == 'all'
Requires-Dist: optuna>=3.5; extra == 'all'
Requires-Dist: pandas>=2.0; extra == 'all'
Requires-Dist: peft>=0.10; extra == 'all'
Requires-Dist: pillow>=10.0; extra == 'all'
Requires-Dist: polars>=0.20; extra == 'all'
Requires-Dist: psycopg[binary]>=3.1; extra == 'all'
Requires-Dist: pypdf>=4.0; extra == 'all'
Requires-Dist: pypdfium2>=4.0; extra == 'all'
Requires-Dist: pytesseract>=0.3.10; extra == 'all'
Requires-Dist: redis>=5.0; extra == 'all'
Requires-Dist: sacrebleu>=2.4; extra == 'all'
Requires-Dist: scikit-learn>=1.4; extra == 'all'
Requires-Dist: sentence-transformers>=2.7; extra == 'all'
Requires-Dist: torch>=2.2; extra == 'all'
Requires-Dist: transformers>=4.38; extra == 'all'
Requires-Dist: uvicorn>=0.29; extra == 'all'
Requires-Dist: xgboost>=2.0; extra == 'all'
Provides-Extra: anthropic
Provides-Extra: catboost
Requires-Dist: catboost>=1.2; extra == 'catboost'
Provides-Extra: chroma
Provides-Extra: datasets
Requires-Dist: datasets>=2.18; extra == 'datasets'
Provides-Extra: dev
Requires-Dist: fastapi>=0.110; extra == 'dev'
Requires-Dist: mypy>=1.10; extra == 'dev'
Requires-Dist: pytest-cov>=5.0; extra == 'dev'
Requires-Dist: pytest>=8.0; extra == 'dev'
Requires-Dist: ruff>=0.5; extra == 'dev'
Requires-Dist: types-pyyaml>=6.0; extra == 'dev'
Requires-Dist: uvicorn>=0.29; extra == 'dev'
Provides-Extra: docs
Requires-Dist: mkdocs-material>=9.5; extra == 'docs'
Requires-Dist: mkdocs>=1.6; extra == 'docs'
Requires-Dist: mkdocstrings[python]>=0.25; extra == 'docs'
Provides-Extra: eval
Requires-Dist: sacrebleu>=2.4; extra == 'eval'
Requires-Dist: sentence-transformers>=2.7; extra == 'eval'
Provides-Extra: huggingface
Provides-Extra: keras
Requires-Dist: keras>=3.0; extra == 'keras'
Provides-Extra: lightgbm
Requires-Dist: lightgbm>=4.0; extra == 'lightgbm'
Provides-Extra: ml
Requires-Dist: pandas>=2.0; extra == 'ml'
Requires-Dist: scikit-learn>=1.4; extra == 'ml'
Provides-Extra: neo4j
Requires-Dist: neo4j>=5.14; extra == 'neo4j'
Provides-Extra: numpy
Requires-Dist: numpy>=1.26; extra == 'numpy'
Provides-Extra: ocr
Requires-Dist: pillow>=10.0; extra == 'ocr'
Requires-Dist: pypdf>=4.0; extra == 'ocr'
Requires-Dist: pypdfium2>=4.0; extra == 'ocr'
Requires-Dist: pytesseract>=0.3.10; extra == 'ocr'
Provides-Extra: ollama
Provides-Extra: openai
Provides-Extra: optuna
Requires-Dist: optuna>=3.5; extra == 'optuna'
Provides-Extra: peft
Requires-Dist: peft>=0.10; extra == 'peft'
Requires-Dist: transformers>=4.38; extra == 'peft'
Provides-Extra: pgvector
Requires-Dist: psycopg[binary]>=3.1; extra == 'pgvector'
Provides-Extra: polars
Requires-Dist: polars>=0.20; extra == 'polars'
Provides-Extra: pypdf
Requires-Dist: pypdf>=4.0; extra == 'pypdf'
Provides-Extra: qdrant
Provides-Extra: redis
Requires-Dist: redis>=5.0; extra == 'redis'
Provides-Extra: serve
Requires-Dist: fastapi>=0.110; extra == 'serve'
Requires-Dist: uvicorn>=0.29; extra == 'serve'
Provides-Extra: torch
Requires-Dist: torch>=2.2; extra == 'torch'
Provides-Extra: training
Requires-Dist: torch>=2.2; extra == 'training'
Provides-Extra: vision
Requires-Dist: pillow>=10.0; extra == 'vision'
Provides-Extra: xgboost
Requires-Dist: xgboost>=2.0; extra == 'xgboost'
Description-Content-Type: text/markdown

# aire

**Agent-first AI creation library** (Apache-2.0, Python 3.11+) — one consistent
interface from a local prototype to a deployed system: models, data, RAG,
agents, tools, workflows, evaluation, safety, observability, and deployment.

> **Status: Alpha (`0.3.x`).** APIs can change. Some surfaces (vision, audio,
> foundation helpers) are intentionally stubby — check return flags / `.describe()`
> rather than assuming production-ready multimodal or pretrained weights.

```python
from aire import AI

assistant = (
    AI.project("knowledge_assistant")
    .documents("./docs")
    .model("mock:echo")  # or openai:gpt-4o-mini, ollama:llama3.2, anthropic:claude-sonnet-4-5
    .vector_store("local:default")
    .citations(True)
)

assistant.index()
answer = assistant.ask("What does the documentation say about authentication?")
print(answer.text)
print(answer.citations)
```

**Works offline out of the box** (`mock:echo` + `local:hashing`) — no API keys,
no network. Swap providers with a one-string change.

---

## Install

```bash
pip install aire-ai
# import name stays `aire`:
#   from aire import AI
#
# or from source
pip install -e ".[dev]"
```

> **Note:** The PyPI distribution is named **`aire-ai`** because the name `aire`
> is already taken by an unrelated package. The Python import remains `aire`.

Optional extras: `serve`, `ml`, `vision`, `training`, `eval`, `docs`, provider-named extras, and
`all`. See `pyproject.toml`.

Requires **Python 3.11+**.

---

## Quick start (offline)

```python
from aire import AI

model = AI.models.use_sync("mock:echo")
result = model.generate_sync("hello, aire")
print(result.text)

# Knowledge assistant / RAG without credentials
assistant = AI.project("demo").documents("./docs").model("mock:echo")
assistant.index()
print(assistant.ask("Summarize the project.").text)
```

CLI:

```bash
aire doctor
aire run "hello, aire"
```

Runnable samples live under [`examples/`](examples/).

---

## Core ideas

| Idea | What it means |
|------|----------------|
| Agent-first | Discoverable components (`.describe()`), tools as contracts, deterministic agent runtime |
| Provider-independent | `provider:name` refs (`openai:…`, `anthropic:…`, `ollama:…`, `mock:echo`) via plugins |
| Offline-capable | Full local loop with `mock:echo` / `local:hashing` |
| Structured errors | `AireError` subclasses with stable `code`, `context`, `retryable` |
| Composable facade | `AI.models`, `AI.rag`, `AI.agents`, `AI.workflows`, `AI.eval`, `AI.deploy`, … |

---

## Honesty about stubs

aire prefers **honest stubs** over silent fakes:

- **Vision / audio** — pipelines may return `stub=True` when no real media provider is configured.
- **Foundation / training helpers** — config-driven toy stacks and hooks; not pretrained weight downloads by default.
- **Some builtins / toolkits** — still thin; read `.describe()` and docs before relying on them in production.

See [`docs/`](docs/) (especially honesty / guide pages as they land) and [`GAPS.md`](GAPS.md)
for the rebuild backlog.

---

## Documentation

| Resource | Link |
|----------|------|
| Docs home | [`docs/`](docs/) |
| Changelog | [`CHANGELOG.md`](CHANGELOG.md) |
| Contributing | [`CONTRIBUTING.md`](CONTRIBUTING.md) |
| Security | [`SECURITY.md`](SECURITY.md) |
| Code of conduct | [`CODE_OF_CONDUCT.md`](CODE_OF_CONDUCT.md) |
| Cite | [`CITATION.cff`](CITATION.cff) |

---

## Development

```bash
make install      # pip install -e ".[dev]"
make lint         # ruff check + format --check
make typecheck    # mypy
make test         # pytest -q
make all          # lint + typecheck + test
pre-commit install
```

CI runs on Python 3.11–3.13. See [Contributing](CONTRIBUTING.md).

---

## Providers

First-party provider entry points: `openai`, `anthropic`, `ollama`, `huggingface`,
`mock`, `echo`. Additional OpenAI-compatible aliases and vector stores are
available via integrations — see docs and `aire.integrations`.

---

## License

Apache License 2.0 — see [`LICENSE`](LICENSE).
