# What AI leaves out, and what to use instead

Some things you might expect aren't part of Jadpo's AI support. Each row
says what to do instead.

| Left out | Why | Instead |
|---|---|---|
| Training and fine-tuning | Needs GPUs, datasets and long jobs, none of which a request does | A package or outside service trains; the app calls the result by `ModelId` |
| Tool calling, agent loops and agent frameworks | A model choosing which actions run needs a design for policy, idempotency and budgets per step; typed `generate` covers extracting, classifying and drafting | A package; code acts on the typed answer |
| Images, audio and files in prompts | `ChatMessage` content parts are refused ([AI types](ai-types.md)); each provider differs | A package's own operations |
| Partial objects while streaming | A half-written value can't be validated | `stream` for text, `generate` for values |
| Provider batch APIs | Answers arrive hours later; needs polls and resumable state | [Batches](batches-work-over-many-items.md) over `generate`; later with [polls](what-package-code-may-do.md#polls) |
| Guessing redaction of free text | Detectors miss things and give false assurance | The prompt type, the category list, `to_models: false` |
| Token usage returned to code | Budgets and `jadpo ai usage` cover cost control | A `Generated<T>` form when an app bills its own users by usage |
| Answer caching (semantic caches) | One person's answer served to another; holds personal data | Recordings in tests; nothing in production |
| Vector stores other than pgvector | A second store to run, back up and erase from | A hosted vector database is a package's own operations |
| Hybrid search (text and vector ranked together) | Needs the [search](search.md) capability first | Two queries merged in code; later with search |
| IVFFlat indexes | Need data present when built | HNSW |
| A prompt per locale | Models write in the language they are told | A `Locale` placeholder |
| Evaluations against a real model | Slow, costly and not deterministic, so not a test | Later: `jadpo ai eval` over recorded cases, run by hand or on a schedule, as contract runs are |
| Falling back to a second provider | Left until an app asks, as for every connection | One `ai` connection |
| Temperature and sampling settings | Newer models restrict them, and they differ by provider | The provider's defaults |

The design notes say more about each choice ([AI: design notes](https://github.com/jadpo-dev/jadpo/blob/main/docs/language/notes/21-ai.md)).
