NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #1267 most downloaded on PyPI
structured outputs for llm
Last release 25 days ago
09 Sep 2026
Release timing varies
gaps range from 8 days to 2 months
Nearly every release is documented
notes for 59 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
3 years old
98 releases · first in 2023
One column per quarter.
The proposed automatic execution in #2588 is deferred in favor of main's security fix for #2528 .
Includes the fixes previously planned for 1.16.1, which was not published. The
previous published version is 1.16.0.
cache_namespace only when clients are intended to share results; keep accounts, endpoints, and tenants isolated.Cache isolation: Include provider identity and prepared generation settings, including nested GenAI and Bedrock configuration; reuse the lookup key when storing after retries. Cache hits preserve current validation context and strictness. Clients have separate namespaces by default; use an explicit cache_namespace for intentional reuse across instances. Requests with unsupported opaque values bypass caching rather than using ambiguous identities. (#2585, #2586)
GenAI cached content: Omit conflicting system instructions and tool declarations after resolving cached-content configuration, including plain responses, and preserve caller-owned configuration. Consolidates #2581, #2582, and #2591 for #2580.
GenAI request configuration: Preserve caller-owned generation_config dictionaries when preparing tools and JSON requests, so repeated requests retain their sampling settings and token limits. (#2596)
OpenAI SDK compatibility: Support OpenAI 3.x and its HTTPX2 transport when constructing sync and async clients through from_provider, while retaining OpenAI 2.x support on Python 3.9. (#2553)
Async validation policy: Fail closed for @async_field_validator and @async_model_validator response models instead of silently skipping policy checks. The proposed automatic execution in #2588 is deferred in favor of main's security fix for #2528.
Anthropic local PDFs: Read local PDF sources from disk instead of trying to fetch them over HTTP. (#2577)
cache_namespace explicitly enables sharing and must identify the endpoint and tenant. Revalidate cache hits with the current context and strictness.urllib3 release and pin GitHub Actions to reviewed commit SHAs, including secret-bearing scheduled workflows.minItems > 1 constraints locally for native structured outputs, and preserve caller-owned nested inference configuration while normalizing requests. (#2530, #2532)total=False, Required, and NotRequired key semantics for single and iterable response models so valid partial outputs do not trigger retries. (#2567, #2568)Content-Type values with optional parameters when loading images, audio, and PDFs. (#2525)Provider documentation : Refresh retired Cerebras model IDs, clarify current and deprecated Google provider prefixes, and fix the Vertex Google GenAI…
Mode.JSON_SCHEMA and Mode.TOOLS_STRICT support through Converse outputConfig.textFormat and strict tool schemas, with recursive schema normalization and a boto3 1.42.42 minimum. Model selection remains caller-controlled. (#2515, #2084, #2086)token_budget limits for structured non-streaming retries, immutable completion:usage snapshots, sync/async cutoff parity, and stable cumulative usage metadata. Valid responses still win after crossing the budget. When a budget is configured, a failed attempt with unavailable usage stops before another provider call. (#2512, #2391, #2392)uv sync environments, uv run commands, and uv add only for intentional project metadata changes. (#2516, #2354)mistralai 2.x client export on Python 3.10+ while retaining the compatible 1.x fallback required by Python 3.9. (#2513, #2298, #2365)<think> blocks, preserve JSON escape sequences, and keep caller-owned messages unchanged during Bedrock request preparation and retries. (#2514, #2076, #2287)create_iterable(response_model=Weather | GoogleSearch), Iterable[Weather | GoogleSearch]) member by member instead of calling model_validate_json on types.UnionType. (#2509)567-labs/instructor organization and validate it before release.RESPONSES_TOOLS response contains no tool calls (e.g. reasoning-only output), so retries carry validation feedback instead of resending the identical request. (#2498)None message content, and install regex as the direct dependency required by CitationMixin. (#2473, #2441, #2440, #2443)from_genai(). (#2494, #2289, #2343, #2416, #2475)ValueError or FileNotFoundError from Audio.from_url() and Audio.from_path() instead of relying on bare assert statements that can disappear under python -O. (#2361)default_factory values as optional in generated OpenAI tool schemas.Optional[BaseModel] fields during incomplete streams instead of exposing raw dictionaries.IterableAOrB for both Union[A, B] and A | B response models.Partial responses, preventing final Pydantic validation errors for sync and async streams.max_retries=0 without an unwanted sleep or polling request, allow recovery on the final permitted retry, and report nameless pending uploads clearly before polling.system argument, and reject invalid scalar message content clearly.contents when messages is empty, avoid mutating nested caller input, and preserve uncopyable metadata during template expansion.list[A | B] PEP 604 unions of Pydantic models as iterable response models, matching list[Union[A, B]] schema behavior. (#2377)RESPONSES_TOOLS text.format with the forced tool schema and add targeted retry guidance when tool calls return empty {} arguments. (#2300, #2304)ValueError for rejected values instead of relying on optimization-sensitive assertions. (#2511, #2056, #2307)Instructor 1.15.4 is a patch release that consolidates the latest small fixes and docs cleanup after 1.15.3 .
Instructor 1.15.4 is a patch release that consolidates the latest small fixes and docs cleanup after 1.15.3.
AttributeError: type object 'list' has no attribute 'model_json_schema' for list[Model] and scalar response models.Image.autodetect() to accept raw JPEG, PNG, GIF, and WebP bytes, while raising clear errors for unsupported image inputs.list[BaseModel] simple-type detection so model lists route through iterable handling instead of scalar wrapping.llama3.2, including the ollama pull command and from_provider() example.1.15.4 in pyproject.toml, instructor/__init__.py, and uv.lock.PR #2398 passed Ruff, type-check, core tests, provider tests, live provider tests, auto client tests, and the Workers build before release.
Full Changelog: v1.15.3...v1.15.4
list[Model] and scalar response-model crashes such as AttributeError: type object 'list' has no attribute 'model_json_schema'. (#2374)Image.autodetect() for JPEG, PNG, GIF, and WebP, while raising clear errors for unsupported image inputs. (#2344)fix(templating): skip non-text Parts in GENAI/VertexAI mode by @jxnl in #2259
Full Changelog: v1.15.1...v1.15.3
top_k/topK through additionalModelRequestFields instead of leaving it as a top-level Converse kwarg. AWS InferenceConfiguration only supports maxTokens/stopSequences/temperature/topP, so a leftover top_k reached client.converse(top_k=...) and boto3 raised ParamValidationError: Unknown parameter "top_k".generation_config (and safety_settings/thinking_config) into config when response_model=None, so plain-text calls no longer raise generate_content() got an unexpected keyword argument 'generation_config' (#2366).jsonref dependency guidance, retry semantics and hook metadata, and multimodal autodetection.ty 0.0.44, enforce warning-free checks with GitHub annotations, cover V2 tests, validate supported Python versions and platforms, and strengthen installed-package public API typing tests.Bedrock : Block remote HTTP(S) image URL fetching in _openai_image_part_to_bedrock — only data: URLs accepted, preventing SSRF via user-controlled ima
_openai_image_part_to_bedrock — only data: URLs accepted, preventing SSRF via user-controlled image URLsPDF.to_bedrock — only base64 data or s3:// sources supported, preventing SSRF and local file disclosurecompletion:error and completion:last_attempt handlers now receive attempt_number, max_attempts, and is_last_attempt as keyword arguments. Old-style handlers remain fully backward-compatible.from_provider("anthropic/...") now sets a User-Agent: instructor/<version> header on the Anthropic clientANTHROPIC_REASONING_TOOLS and ANTHROPIC_PARALLEL_TOOLS modesreask_md_json for OPENROUTER_STRUCTURED_OUTPUTS retries instead of reask_default (tool-call format)kwargs unchanged instead of None in handle_templating when message list is empty or unrecognizedfrom_openai: Allow Mode.JSON_SCHEMA for the OpenAI providercachePoint dicts in message content unchanged (regression since v1.13.0)Mode.MD_JSON in from_bedrockParallelBase generator consumed into ListResponse in both sync and async paths, fixing AttributeError_openai_image_part_to_bedrock — only data: URLs are now accepted, preventing SSRF via user-controlled image URLsPDF.to_bedrock — only base64 data or s3:// sources are now supported, preventing SSRF and local file disclosurecompletion:error and completion:last_attempt handlers now receive attempt_number, max_attempts, and is_last_attempt as keyword arguments. Old-style handlers remain fully backward-compatible.from_provider("anthropic/...") now sets a User-Agent: instructor/<version> header on the Anthropic clientANTHROPIC_REASONING_TOOLS and ANTHROPIC_PARALLEL_TOOLS modes — previously fell through to OpenAI usage tracking with wrong field namesreask_md_json for OPENROUTER_STRUCTURED_OUTPUTS retries instead of reask_default (tool-call format), fixing malformed retry promptskwargs unchanged instead of None in handle_templating when message list is empty or format is unrecognized; process_message also now returns the original message unchanged for unrecognized formats instead of Nonefrom_openai: Allow Mode.JSON_SCHEMA for the OpenAI provider — it was incorrectly blocked by the mode validation checkcachePoint dicts in message content unchanged — previously raised ValueError: Unsupported dict content for Bedrock, breaking prompt caching (regression since v1.13.0)Mode.MD_JSON in from_bedrockParallelBase generator now consumed into ListResponse in both sync and async paths, fixing AttributeError when setting _raw_response on a generatorValidation : Fix Validator to require is_valid field
Validator to require is_valid field (#2230)GEMINI_TOOLS in async streaming paths (#2135)--full-id flag to show complete batch IDs (#2068)GENAI and Responses modes to tool_modes() (#2072)Full diff: v1.14.5...v1.15.0
<=1.82.6 to block compromised versions 1.82.7 and 1.82.8 (#2219)diskcache an optional dependency, removing it from all users' transitive dependency trees and mitigating CVE-2025-69872 (#2211)response.usage subclass type (e.g. LiteLLM, Langfuse) when accumulating token counts across retries — fixes downstream .get() method loss (#2217, #2199)HARM_CATEGORY_IMAGE_* safety categories from standard Gemini API calls — these are Vertex AI-only and caused 400 INVALID_ARGUMENT errors (#2174)finish_reason=MAX_TOKENS) in GENAI_STRUCTURED_OUTPUTS mode and raise IncompleteOutputException immediately instead of retrying with malformed JSON (#2232)create_with_completion: Handle List[Model] response models that lack _raw_response attribute — previously raised AttributeError, now returns None for the completion (#2167)Literal field values (e.g. type: Literal["Person"] = "Person") during streaming instead of emitting None before the field arrives (#2204)str | int) in Partial models on Python 3.10+ (#2200)allow_override=True in llm_validator — the override branch was unreachable due to a misplaced assertion, so fixed_value was never returned (#2215)ParallelBase responses now return ListResponse (consistent with IterableBase) instead of a raw generator with _raw_response set on it (#2216)continue in convert_messages after handling typed (audio/image) messages — previously fell through to message["role"] causing KeyError (#2139)ANTHROPIC_REASONING_TOOLS mode — the mode was shadowed by a duplicate ANTHROPIC_TOOLS check and never routed correctly (#2140)KnownModelName type (#2235)instructor-ai to 567-labs (#2149)test_xai_optional_dependency tests to use monkeypatch so they pass regardless of whether xai-sdk is installedclaude-3-5-haiku-latest -> claude-haiku-4-0-20250414, claude-3-7-sonnet-latest -> claude-sonnet-4-5-20250514)gpt-3.5-turbo -> gpt-4.1-mini) across unit testsshared_config.py: Writer palmyra-x5, Fireworks llama-v3p3, Perplexity sonar-profix(metadata): populate author field for PyPI stats
Separate author names from emails so hatchling populates the Author metadata field correctly. pypistats.org reads this field and was showing "None" because the names were only in author_email.
thought_signature is now preserved across validation retries for thinking models (#2001)pyproject.toml author field corrected so PyPI correctly populates the Author field (#2015)[dependency-groups] section in pyproject.toml (#2030)refactor(json_tracker): simplify using sibling heuristic by @thomasnormal in #2000
Full Changelog: v1.14.3...v1.14.4
GenerationConfig labels and custom fields are no longer silently dropped when merging configs (#2005)SafetySettings now applied correctly when request contains image content (#2007)_raw_response: Attribute access on list response wrappers works correctly (#2012)json_tracker: Sibling-heuristic algorithm simplified for improved partial-streaming reliability (#2000)PartialLiteralMixin is now deprecated - completeness-based validation handles Literal/Enum types automatically
JsonCompleteness class in instructor/dsl/json_tracker.py for tracking JSON completeness during streaming (#1999)max_retries > 1 (#1992)min_length, max_length, ge, le, etc.) now work correctly during streaming (#1999)PartialLiteralMixin is now deprecated - completeness-based validation handles Literal/Enum types automatically (#1999)Full Changelog: v1.14.2...v1.14.3
Stream objects in reask handlers are now consumed correctly before retry, preventing stale-stream errors (#1992)Fixed model validators crashing during partial streaming by skipping them until streaming completes
PartialLiteralMixin documentation for handling Literal/Enum types during streaming (#1994)Full Changelog: v1.14.1...v1.14.2
TreeNode with children: List["TreeNode"]) is now prevented (#1997)fix(genai): Support cached_content for Google context caching by @b-antosik-marcura in #1987
Full Changelog: v1.14.0...v1.14.1
cached_content parameter now correctly forwarded to support Google context caching (#1987)fix: Gemini HARM_CATEGORY_JAILBREAK and Anthropic tool_result blocks by @jxnl in https://github.com/567-labs/instructor/pull/1867
Full Changelog: https://github.com/567-labs/instructor/compare/v1.12.0...v1.13.0
py.typed: Marker file restored for PEP 561 type-checking support (#1868)disable_pydantic_error_url(): Now correctly suppresses Pydantic validation error URLs via monkey-patching ValidationError.__str__() (environment variable approach had no effect post-import)HARM_CATEGORY_JAILBREAK safety category and Anthropic tool_result content blocks now handled correctly (#1867)default_factory no longer retain the factory when made optional during streamingfix: replace deprecated gpt-3.5-turbo-0613 with gpt-4o-mini by @sergiobayona in https://github.com/567-labs/instructor/pull/1830
Full Changelog: https://github.com/567-labs/instructor/compare/1.11.2...v1.12.0
chunk.text ValueError when finish_reason=1 no longer crashes streamingthinking_config no longer unintentionally passed to the tools helperparse:error hook now correctly fires for InstructorValidationErrorfeat: add mkdocs-llmstxt plugin and llms.txt support by @jxnl in https://github.com/567-labs/instructor/pull/1795
Full Changelog: https://github.com/567-labs/instructor/compare/1.11.2...v1.11.3
__add__ / combine() — merge multiple hook handlers together.create() calls without registering globallyInstructorRetryException now tracks all failed attempts including exceptions and raw completions for better introspectionllms.txt support via mkdocs-llmstxt plugin for AI/LLM consumersInstructorError.__str__(): Now correctly formats failed-attempt detailsfunction_calls and validators modulesfeat: Add automated bi-weekly scheduled releases by @jxnl in https://github.com/567-labs/instructor/pull/1787
Full Changelog: https://github.com/567-labs/instructor/compare/v1.11.1...1.11.2
Fix Pydantic v2 deprecation warnings by migrating from class Config to ConfigDict by @anistark in https://github.com/567-labs/instructor/pull/1782
Full Changelog: https://github.com/567-labs/instructor/compare/1.10.0...v1.11.0
from_provider() using OPENROUTER_API_KEYfrom_provider() (#1723)completion:error and completion:last_attempt hooks now fully implemented (#1729)Config to ConfigDict (#1782)Deprecate google-generativeai in favor of google-genai by @jxnl in https://github.com/567-labs/instructor/pull/1673
Full Changelog: https://github.com/567-labs/instructor/compare/1.9.2...1.10.0
Fix docs build path by @jxnl in https://github.com/567-labs/instructor/pull/1662
Full Changelog: https://github.com/567-labs/instructor/compare/1.9.1...1.9.2
feat: add Azure OpenAI support to auto_client.py by @jxnl in https://github.com/567-labs/instructor/pull/1633
Full Changelog: https://github.com/567-labs/instructor/compare/1.9.0...1.9.1
feat: Improve error handling with comprehensive exception hierarchy by @jxnl in https://github.com/567-labs/instructor/pull/1549
enable_prompt_caching from Anthropic integration since we ha… by @ivanleomk in https://github.com/567-labs/instructor/pull/1562Full Changelog: https://github.com/567-labs/instructor/compare/1.8.3...1.9.0
docs: improve CLAUDE.md with better architecture description by @jxnl in https://github.com/567-labs/instructor/pull/1525
Full Changelog: https://github.com/567-labs/instructor/compare/1.8.2...1.8.3
fix: removed print statement by @ivanleomk in https://github.com/567-labs/instructor/pull/1524
Full Changelog: https://github.com/567-labs/instructor/compare/1.8.1...1.8.2
docs(blog): add Anthropic web search structured data blog post by @jxnl in https://github.com/567-labs/instructor/pull/1515
Full Changelog: https://github.com/567-labs/instructor/compare/1.8.0...1.8.1
Fix typo by @tdhopper in https://github.com/567-labs/instructor/pull/1468
Full Changelog: https://github.com/567-labs/instructor/compare/1.7.9...1.8.0
add async partial streaming support for genai by @oegedijk in https://github.com/instructor-ai/instructor/pull/1441
Full Changelog: https://github.com/instructor-ai/instructor/compare/1.7.8...1.7.9
docs: Add Cursor rules documentation by @jxnl in https://github.com/instructor-ai/instructor/pull/1423
Full Changelog: https://github.com/instructor-ai/instructor/compare/1.7.7...1.7.8
feat: adding sync and async example for sambanova by @ivanleomk in https://github.com/instructor-ai/instructor/pull/1415
Full Changelog: https://github.com/instructor-ai/instructor/compare/1.7.6...1.7.7
fix: fixing incorrect import issue by @ivanleomk in https://github.com/instructor-ai/instructor/pull/1414
Full Changelog: https://github.com/instructor-ai/instructor/compare/1.7.5...1.7.6
docs: improve documentation structure with visual diagrams by @jxnl in https://github.com/instructor-ai/instructor/pull/1399
Full Changelog: https://github.com/instructor-ai/instructor/compare/1.7.4...1.7.5
fix: adding static assets so that we can use them in our tests by @ivanleomk in https://github.com/instructor-ai/instructor/pull/1387
Full Changelog: https://github.com/instructor-ai/instructor/compare/1.7.3...1.7.4
feat: add new article on migrating to uv by @ivanleomk in https://github.com/instructor-ai/instructor/pull/1284
Full Changelog: https://github.com/instructor-ai/instructor/compare/1.7.2...1.7.3
Migrate to UV by @ivanleomk in https://github.com/instructor-ai/instructor/pull/1280
Full Changelog: https://github.com/instructor-ai/instructor/compare/1.7.1...1.7.2
feat: added cortex documentation by @ivanleomk in https://github.com/instructor-ai/instructor/pull/1225
Full Changelog: https://github.com/instructor-ai/instructor/compare/1.7.0...1.7.1
feat: adding new article on gemini citations by @ivanleomk in https://github.com/instructor-ai/instructor/pull/1186
Full Changelog: https://github.com/instructor-ai/instructor/compare/1.6.4...1.7.0
docs: fix typo in multimodal by @ivanleomk in https://github.com/instructor-ai/instructor/pull/1101
max_retries typing by @jordyjwilliams in https://github.com/instructor-ai/instructor/pull/1135Full Changelog: https://github.com/instructor-ai/instructor/compare/1.6.3...1.6.4
docs: update example to use file_path arg; reflecting updated BatchJob.create_from_messages by @goutham794 in https://github.com/instructor-ai/instruc
Audio class and update documentation by @jxnl in https://github.com/instructor-ai/instructor/pull/1095Full Changelog: https://github.com/instructor-ai/instructor/compare/1.6.2...1.6.3
fix: Added off and clear proeprty to Instructor base class by @ivanleomk in https://github.com/instructor-ai/instructor/pull/1087
Full Changelog: https://github.com/instructor-ai/instructor/compare/1.6.1...1.6.2
Added Jinja2 as a dependency by @ivanleomk in https://github.com/instructor-ai/instructor/pull/1084
Full Changelog: https://github.com/instructor-ai/instructor/compare/1.6.0...1.6.1
Fix compatibility with custom dicts for multimodal message content by @mjvdvlugt in https://github.com/instructor-ai/instructor/pull/1053
safety_settings by @alxpez in https://github.com/instructor-ai/instructor/pull/1057Full Changelog: https://github.com/instructor-ai/instructor/compare/1.5.2...1.6.0
Add github dependabot to keep dependencies updated by @noxan in https://github.com/jxnl/instructor/pull/895
Full Changelog: https://github.com/jxnl/instructor/compare/1.5.1...1.5.2
Update fake-data.md by @CodyBontecou in https://github.com/jxnl/instructor/pull/1034
max_retries to the correct section by @hartshorne in https://github.com/jxnl/instructor/pull/1017Full Changelog: https://github.com/jxnl/instructor/compare/1.5.0...1.5.1
doc: add newsletter link by @jxnl in https://github.com/jxnl/instructor/pull/1012
context by @jxnl in https://github.com/jxnl/instructor/pull/1011Full Changelog: https://github.com/jxnl/instructor/compare/1.4.3...1.5.0
Fixed up a new article for prompt caching by @ivanleomk in https://github.com/jxnl/instructor/pull/997
Full Changelog: https://github.com/jxnl/instructor/compare/1.4.2...1.4.3
Fixed typo in the installation command by @ivanleomk in https://github.com/jxnl/instructor/pull/983
Full Changelog: https://github.com/jxnl/instructor/compare/1.4.1...1.4.2
Correct small typos on Structured Output post by @ivanleomk in https://github.com/jxnl/instructor/pull/945
Full Changelog: https://github.com/jxnl/instructor/compare/1.4.0...1.4.1
Fix debug log exception in retry_async by @mattheath in https://github.com/jxnl/instructor/pull/884
Full Changelog: https://github.com/jxnl/instructor/compare/1.3.7...1.4.0
Moved Cohere import by @ivanleomk in https://github.com/jxnl/instructor/pull/874
Full Changelog: https://github.com/jxnl/instructor/compare/1.3.6...1.3.7
Nothing published for this version
prompting docs by @shreya-51 in https://github.com/jxnl/instructor/pull/786
Full Changelog: https://github.com/jxnl/instructor/compare/1.3.4...1.3.5
typo fix and rephrasing suggestion by @lukaskf in https://github.com/jxnl/instructor/pull/756
Full Changelog: https://github.com/jxnl/instructor/compare/1.3.3...1.3.4
Full Changelog: https://github.com/jxnl/instructor/compare/1.3.3...1.3.4
refactor(simple_type, ModelAdapter): update type checking and refactor model creation by @jxnl in https://github.com/jxnl/instructor/pull/710
tenacity.Retrying is used by @lazyhope in https://github.com/jxnl/instructor/pull/713pyproject.toml and poetry.lock files by @jlondonobo in https://github.com/jxnl/instructor/pull/729Full Changelog: https://github.com/jxnl/instructor/compare/1.3.2...1.3.3
Adding gpt4o vision example by @karbon0x in https://github.com/jxnl/instructor/pull/702
Full Changelog: https://github.com/jxnl/instructor/compare/1.3.1...1.3.2
Fix typos in README.md by @AmgadHasan in https://github.com/jxnl/instructor/pull/699
Full Changelog: https://github.com/jxnl/instructor/compare/1.3.0...1.3.1
Update groq.md by @frankbaele in https://github.com/jxnl/instructor/pull/651
Mode.FUNCTIONS access vs. in __new__ by @boydgreenfield in https://github.com/jxnl/instructor/pull/678Mode.MD_JSON and add Provider.DATABRICKS by @arcaputo3 in https://github.com/jxnl/instructor/pull/691Full Changelog: https://github.com/jxnl/instructor/compare/1.2.6...1.3.0
Import typing related imports only when type checking by @noxan in https://github.com/jxnl/instructor/pull/645
patch instead of from_openai by @abetlen in https://github.com/jxnl/instructor/pull/656Full Changelog: https://github.com/jxnl/instructor/compare/1.2.5...1.2.6
Avoid deprecated class property stacking by @max-muoto in https://github.com/jxnl/instructor/pull/637
Full Changelog: https://github.com/jxnl/instructor/compare/1.2.4...1.2.5
feat: update and allow strict mode by @jxnl in https://github.com/jxnl/instructor/pull/618
Full Changelog: https://github.com/jxnl/instructor/compare/1.2.3...1.2.4
Fix bullet list in README.md by @xingweitian in https://github.com/jxnl/instructor/pull/621
Full Changelog: https://github.com/jxnl/instructor/compare/1.2.2...1.2.3
From mistral by @wassim-trabelsi in https://github.com/jxnl/instructor/pull/599
Full Changelog: https://github.com/jxnl/instructor/compare/1.2.1...1.2.2
feat: basic sentiment analysis eval tests by @meta-boy in https://github.com/jxnl/instructor/pull/610
Full Changelog: https://github.com/jxnl/instructor/compare/1.2.0...1.2.1
Your coding agent can read these notes before it upgrades. Set up the MCP server →