AI and models · Edition No. 5 · 30 Aug 2026

567-labs/instructor

Makes a language model return data in a declared shape, and retries automatically when it does not.

← AI and modelsRead the whole edition →
Instructor: answers in a declared shape. Checks what the model returned and asks again.

13.8k stars · MIT · v1.16.0 (2026-08-27) · Track this in Rising ↗

Pydantic-validated structured output from any LLM, with automatic retry on malformed responses — so the subtopic map cannot fail to parse.

Verified27 Oct 2026

Radar check

What we found when we opened it. Every bar is one fact, with its date.

Alive100

Last code pushed 26 Oct 2026, one day before this check.

Releases85

Latest release v1.17.0 on 9 Sep 2026.

Maturity70

Public since June 2023, a little over 3 years.

Adoption83

14,067 stars and 1,344 forks.

Activity85

113 commits and 58 new issues in the last 90 days.

Community100

267 contributors. 29 pull requests merged in 90 days.

Security40

No security policy file says how to report a problem. No published security advisories.

Licence MIT: permissive: use it for anything, keep the noticeSetup effort 1 of 5Payoff 4 of 5
How the bars are scored
  • Alive. Days since the last code push: a week or less 100, a month 90, three months 70, six months 50, a year 30, eighteen months 15, older 0.
  • Releases. Age of the latest GitHub release, on a similar scale; no bar when the project publishes no releases.
  • Maturity. Age of the project: eight years 100, five 90, three 70, two 55, one 40, six months 25, younger 10.
  • Adoption. Stars on a log scale: 100,000 stars is 100, 10,000 is 80, 1,000 is 60, 100 is 40.
  • Activity. Commits in the last 90 days: 300 or more 100, 100 85, 30 65, 10 45, any 25.
  • Community. People who have contributed: 100 or more 100, 30 80, 10 60, 5 40, 2 25, one 10.
  • Security. A published security policy 80, none 40; published advisories are listed, not scored.

Checked by Repo Radar on 27 Oct 2026 from the repository on GitHub. Covered in Edition 5.

▶Repo detailsthe review · specs · pros & cons · install

What it does

You describe the answer you want as a Pydantic model, which is the standard Python way to declare the fields and types of a piece of data. The library turns that into the schema the provider needs, sends the request, and checks the reply against the model. If the reply does not validate, it asks again, including the validation error in the new request so the model can see what was wrong. Results can be streamed as they arrive, and lists of items can be returned one at a time. The same code works across providers, with examples for several paid services and for models running locally. What it does not do is guarantee the answer is right: it enforces the shape only, so a confidently wrong value in the correct field passes every check. Its own README draws the line at agents, pointing elsewhere for those.

Why it matters

Who it suits. Anyone whose program feeds a model's answer straight into a screen, a table or a database. Structured output is where the "sometimes the page just fails" class of fault comes from, and that fault is fatal in anything whose purpose is to make a mess readable. It also suits anyone changing prompts often, because the declared model becomes the contract and a reworded prompt cannot quietly change the shape. Skip it if the output is meant to be prose. And skip it if a strict shape is being forced on a weak model, because the retries will cost more than a better model would.

Verdict. Worth an hour, and one of the easiest wins on this page if a model's output is already being parsed by hand. The schema is a Pydantic class, which an existing FastAPI application already uses, so there is no new vocabulary. In good health: 13,992 stars, a release on 9 September 2026, code on 8 October 2026, and only 44 open issues. Three honest costs. Every retry is a paid request and added delay, so a strict shape against a weak model can quietly multiply the price, which is exactly why entry #9 belongs in front of it. It promises the shape and never the quality. And it is one more layer between the code and the provider, so an odd failure now has two places to look. pydantic/pydantic-ai is where the same team's thinking goes for agents rather than extraction.

Stars13.8k
LicenceMIT
Latestv1.16.0 (2026-08-27)checked 7 Sep 2026
Written inPython
RunsLocally, on your own machine
Summary (Key Points)from the README
Key features
  • Typed extraction: Define a Pydantic model and get structured data back, with validation and IDE support.
  • Automatic retries: Failed validations are retried with the error message sent back to the model.
  • Streaming: Partial objects are streamed as they are generated.
  • Nested objects: Complex, nested data structures can be extracted.
  • Provider-agnostic code: The same code works across LLM providers, which the README describes as "every major provider" without naming them.
  • Simple scope: Focused on one task, structured extraction, rather than a broad agent framework.
  • Multiple languages: Implementations are listed for Python, TypeScript, Ruby, Go, Elixir and Rust.
  • Adoption figures: The README cites 3M+ monthly downloads, 10K+ GitHub stars, 1000+ community contributors and over 100,000 developers.
Ways to install
Platform or methodWhat it needsEffort
Python (the original)Not stated in READMENot stated in README
TypeScriptNot stated in READMENot stated in README
RubyNot stated in READMENot stated in README
GoNot stated in READMENot stated in README
ElixirNot stated in READMENot stated in README
RustNot stated in READMENot stated in README
Important
  • Not for agent workloads: The README points to PydanticAI for agent runs, built-in observability, traces, evals and dashboards.
  • Self-reported figures: The download, star, contributor and developer counts and the company list come from the project itself and are not independently verified in the README.
  • Comparisons are the project's own: The claims that Instructor is "lighter, faster, and easier to debug" than LangChain or LlamaIndex are not backed by benchmarks in the README.
  • Missing details: The README does not name the supported providers, give retry limits, or show install commands in the text provided.
  • Retries add model calls: Automatic retries mean repeated LLM requests when validation fails, so usage and cost depend on how often that happens.
  • License: MIT, with details in the LICENSE file.

Written by an AI model from the project’s README; not part of the review, and it can be wrong.

Setup effort
1 / 5
Payoff
4 / 5
Good
  • The shape is an ordinary Pydantic class, which an existing Python web application almost certainly already uses.
  • Automatic retry with the validation error fed back, which fixes most malformed replies before the calling code sees them.
  • MIT licence, 44 open issues, a release on 9 September 2026 and code on 8 October 2026, and it works across providers.
Watch for
  • Retries cost money and add delay, so a strict shape against a weak model can multiply the price of a request.
  • It guarantees the shape of an answer and never its truth: a confidently wrong value validates perfectly.
  • One more layer between the code and the provider, which means one more place to look when something behaves oddly.
Install
python3 -m venv venv
source venv/bin/activate
pip install instructor
Screenshots
567-labs/instructor: GitHub preview card

On Stack Radar: AI & Automation › AI Models & Inference › Language Models.

Get the next edition in your inbox

A dozen repositories, opened and checked. The licence read, the last release dated, and the ones that did not make it named with the reason. It is the half most lists leave out.

No tracking pixels. One click to leave. The archive stays free either way.

We use your address to send the edition and nothing else. Confirm by email, leave in one click. How we handle it.