Skip to content

[pull] main from mistralai:main#1

Open
pull[bot] wants to merge 97 commits intooli5679:mainfrom
mistralai:main
Open

[pull] main from mistralai:main#1
pull[bot] wants to merge 97 commits intooli5679:mainfrom
mistralai:main

Conversation

@pull
Copy link

@pull pull bot commented Nov 17, 2025

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

@pull pull bot locked and limited conversation to collaborators Nov 17, 2025
@pull pull bot added the ⤵️ pull label Nov 17, 2025
amenasria and others added 27 commits December 2, 2025 14:40
* `mistral.beta.libraries.create()`:  `response.owner_id` **Changed** **Breaking** ⚠️
* `mistral.beta.libraries.documents.get()`:  `response` **Changed** **Breaking** ⚠️
* `mistral.models.list()`: 
  *  `response.data.[].[base].capabilities` **Changed**
  *  `error.status[422]` **Removed** **Breaking** ⚠️
* `mistral.files.list()`: 
  *  `request.include_total` **Added**
  *  `response.total` **Changed** **Breaking** ⚠️
* `mistral.beta.conversations.start()`: 
  *  `request` **Changed** **Breaking** ⚠️
  *  `response.outputs.[].[tool_execution_entry].name` **Changed** **Breaking** ⚠️
* `mistral.beta.libraries.accesses.delete()`: 
  *  `request.org_id` **Changed**
  *  `response.share_with_uuid` **Changed** **Breaking** ⚠️
* `mistral.beta.libraries.accesses.update_or_create()`: 
  *  `request.org_id` **Changed**
  *  `response.share_with_uuid` **Changed** **Breaking** ⚠️
* `mistral.beta.conversations.append()`: 
  *  `request.inputs.[array].[].[tool_execution_entry].name` **Changed** **Breaking** ⚠️
  *  `response.outputs.[].[tool_execution_entry].name` **Changed** **Breaking** ⚠️
* `mistral.beta.libraries.accesses.list()`:  `response.data.[].share_with_uuid` **Changed** **Breaking** ⚠️
* `mistral.beta.conversations.restart()`: 
  *  `request` **Changed** **Breaking** ⚠️
  *  `response.outputs.[].[tool_execution_entry].name` **Changed** **Breaking** ⚠️
* `mistral.beta.libraries.documents.update()`: 
  *  `request.attributes` **Added**
  *  `response` **Changed** **Breaking** ⚠️
* `mistral.beta.libraries.documents.upload()`:  `response` **Changed** **Breaking** ⚠️
* `mistral.beta.libraries.documents.list()`: 
  *  `request.filters_attributes` **Added**
  *  `response.data.[]` **Changed** **Breaking** ⚠️
* `mistral.beta.libraries.update()`:  `response.owner_id` **Changed** **Breaking** ⚠️
* `mistral.beta.libraries.delete()`:  `response.owner_id` **Changed** **Breaking** ⚠️
* `mistral.beta.libraries.get()`:  `response.owner_id` **Changed** **Breaking** ⚠️
* `mistral.beta.conversations.get_history()`:  `response.entries.[].[tool_execution_entry].name` **Changed** **Breaking** ⚠️
* `mistral.beta.libraries.list()`:  `response.data.[].owner_id` **Changed** **Breaking** ⚠️
* `mistral.models.retrieve()`:  `response.[base].capabilities` **Changed**
* `mistral.agents.complete()`:  `request.metadata` **Added**
* `mistral.beta.agents.get()`: 
  *  `request.agent_version` **Added**
  *  `response` **Changed**
* `mistral.beta.agents.list()`: 
  *  `request` **Changed**
  *  `response.[]` **Changed**
* `mistral.beta.agents.update_version()`:  `response` **Changed**
* `mistral.beta.agents.delete()`: **Added**
* `mistral.beta.conversations.list()`: 
  *  `request.metadata` **Added**
  *  `response.[]` **Changed**
* `mistral.beta.conversations.get()`:  `response` **Changed**
* `mistral.beta.agents.update()`: 
  *  `request` **Changed**
  *  `response` **Changed**
* `mistral.beta.conversations.delete()`: **Added**
* `mistral.chat.complete()`:  `request.metadata` **Added**
* `mistral.fim.complete()`:  `request.metadata` **Added**
* `mistral.beta.agents.create()`: 
  *  `request.metadata` **Added**
  *  `response` **Changed**
* `mistral.ocr.process()`: 
  *  `request` **Changed**
  *  `response.pages.[]` **Changed**
Update the reference to the speakeasy-api/sdk-generation-action workflows to the latest version (a658ca0a4a9b11bbcd7d3fb4e3063fa843afabff) for all SDK generation workflows. This ensures the latest features and bug fixes are used during SDK generation.
* feat!: unify README handling across packages

This commit standardizes the way README files are handled during builds and publishes across all packages. The main changes include:

1. Removing the need for separate README-PYPI.md files by using a more flexible approach
2. Updating the prepare_readme.py script to handle relative links more robustly
3. Simplifying the build and publish workflows by removing redundant steps
4. Adding tests for the README preparation functionality

The changes make the build process more consistent across different packages and reduce duplication in the workflow files. The new approach also provides better handling of relative links in README files during package publication.

BREAKING CHANGE: The way README files are prepared for publication has changed, which may affect custom build processes that relied on the previous approach.

* ignore

* chore: add linting for scripts directory

This commit adds mypy, pyright, and ruff linting checks for the scripts directory to ensure code quality and consistency across the project. The changes include:

- Adding mypy checks for the scripts directory
- Adding pyright checks for the scripts directory
- Adding ruff checks for the scripts directory

This helps maintain consistent code quality standards across all parts of the codebase.
The SDK was creating its own TracerProvider when OTEL_EXPORTER_OTLP_ENDPOINT
was set but no TracerProvider was configured. This caused issues when used
in applications that configure their own TracerProvider:

1. The SDK's TracerProvider would be set first, preventing the app's setup
2. The endpoint was passed without /v1/traces path, causing 404 errors

Now the SDK follows OTEL best practices:
- Libraries/SDKs get tracers from the global provider
- Applications configure the TracerProvider
- If no provider is set, tracing is effectively disabled (NoOp)

This allows applications to control when and how OTEL is configured,
and the SDK will automatically use whatever TracerProvider is available.

Removed:
- QuietOTLPSpanExporter class (no longer needed)
- OTEL_EXPORTER_OTLP_* constants (no longer used)
- TracerProvider setup logic
fix(otel): don't setup TracerProvider, rely on application config
This commit fixes the CI for GCP and Azure SDKs:

* The GitHub actions now reference the correct Speakeasy targets
* Fixes issues in packages/mistralai_gcp/src/mistralai_private_gcp/sdk.py (not tracked by Speakeasy since we added gcloud authentication)
  * Dropped the use of SDKError for non-HTTP errors (it now expects a raw_response in its constructor and internally makes accesses to its attributes). They have been replaced with ValueError when relevant (aligned with elsewhere in the SDK for invalid inputs) or basic Exceptions.
  * Changed the return type GoogleCloudBeforeRequestHook#before_request to a union like in the base class.
The migration to uv was done in #303. This PR reflects this change in the GCP/Azure .speakeasy/gen.yaml files. The pyproject.toml for those package has also been added in .genignore to prevent speakeasy from rewritting them (in line with what is done for the main SDK).
* `mistral_azure.chat.complete()`: 
  *  `request.messages.[].[assistant].content.[array]` **Changed** **Breaking** ⚠️

Co-authored-by: speakeasybot <[email protected]>
* `mistral_gcp.chat.complete()`: 
  *  `request` **Changed** **Breaking** ⚠️
  *  `response` **Changed**
* `mistral_gcp.fim.complete()`:  `response` **Changed**

Co-authored-by: speakeasybot <[email protected]>
Changes:
* Added missing dependency on pyright in Azure/GCP's dev dependency groups
* Fixed the github token used to publish the pull request
* `mistral.beta.conversations.restart()`: 
  *  `request.inputs.[array].[]` **Changed** **Breaking** ⚠️
  *  `response.outputs.[].[message_output_entry].content.[array].[]` **Changed** **Breaking** ⚠️
* `mistral.beta.conversations.start()`: 
  *  `request.inputs.[array].[]` **Changed** **Breaking** ⚠️
  *  `response.outputs.[].[message_output_entry].content.[array].[]` **Changed** **Breaking** ⚠️
* `mistral.beta.conversations.append()`: 
  *  `request.inputs.[array].[]` **Changed** **Breaking** ⚠️
  *  `response.outputs.[].[message_output_entry].content.[array].[]` **Changed** **Breaking** ⚠️
* `mistral.beta.conversations.get_history()`:  `response.entries.[]` **Changed** **Breaking** ⚠️
* `mistral.beta.conversations.get_messages()`:  `response.messages.[]` **Changed** **Breaking** ⚠️
* `mistral.beta.agents.list()`:  `request.metadata` **Changed**
* `mistral.beta.conversations.list()`:  `request.metadata` **Changed**
* `mistral.batch.jobs.list()`:  `response.data.[].outputs` **Added**
* `mistral.batch.jobs.create()`: 
  *  `request` **Changed**
  *  `response.outputs` **Added**
* `mistral.batch.jobs.get()`: 
  *  `request.inline` **Added**
  *  `response.outputs` **Added**
* `mistral.batch.jobs.cancel()`:  `response.outputs` **Added**
* `mistral.embeddings.create()`:  `request.metadata` **Added**
* `mistral.classifiers.moderate()`:  `request.metadata` **Added**
* `mistral.classifiers.classify()`:  `request.metadata` **Added**

Co-authored-by: speakeasybot <[email protected]>
* feat(mistral): add async batch job chat completion example

Adds a new example demonstrating how to use Mistral's async batch job API for chat completion. The example creates a batch job with multiple requests, monitors its status, and prints the results once completed. This provides a practical implementation of asynchronous batch processing with Mistral's API.

* fix
pyproject.toml is managed manually (until we enable custom code) and we can forget to update the version there.
Since the workflow only triggers when the README changes, it will not start if we fix the version in a separate commit.

Allowing it to be triggered manually mitigates this issue.
* `mistral.beta.agents.list_versions()`: **Added**
* `mistral.beta.agents.get_version()`: **Added**
* `mistral.ocr.process()`:  `request.document_annotation_prompt` **Added**

Co-authored-by: speakeasybot <[email protected]>
This change was omitted in previous PR.
…334)

This update should address the recent issues with the publishing workflow.
* `mistral.beta.conversations.restart_stream()`:  `request.agent_version` **Changed** **Breaking** ⚠️
* `mistral.beta.conversations.start()`:  `request.agent_version` **Changed** **Breaking** ⚠️
* `mistral.beta.conversations.list()`:  `response.[].[agent_conversation].agent_version` **Changed** **Breaking** ⚠️
* `mistral.beta.conversations.get()`:  `response.[agent_conversation].agent_version` **Changed** **Breaking** ⚠️
* `mistral.beta.conversations.restart()`:  `request.agent_version` **Changed** **Breaking** ⚠️
* `mistral.beta.conversations.start_stream()`:  `request.agent_version` **Changed** **Breaking** ⚠️
* `mistral.beta.agents.get()`:  `request.agent_version` **Changed** **Breaking** ⚠️
* `mistral.beta.agents.get_version()`:  `request.version` **Changed** **Breaking** ⚠️
* `mistral.beta.agents.list_version_aliases()`: **Added**
* `mistral.models.list()`:  `response.data.[].[fine-tuned].capabilities.audio_transcription` **Added**
* `mistral.models.retrieve()`:  `response.[base].capabilities.audio_transcription` **Added**
* `mistral.beta.agents.create_version_alias()`: **Added**
* `mistral.files.list()`:  `request.mimetypes` **Added**
This commit adds support for realtime audio transcription using WebSocket connections. The implementation includes:

1. New realtime transcription client in the extra module
2. Examples for microphone and file-based transcription
3. Support for audio format negotiation
4. Proper error handling and connection management

The realtime transcription feature requires the websockets package (>=13.0) which is now added as an optional dependency. This implementation allows for streaming audio data to the Mistral API and receiving transcription results in realtime.

The changes include new models for realtime events and connection management, as well as updated audio.py to expose the realtime functionality.
github-actions bot and others added 30 commits March 2, 2026 13:43
* ## Python SDK Changes:
* `mistral.beta.libraries.documents.list()`:  `response.data[].process_status` **Added**
* `mistral.beta.libraries.documents.upload()`:  `response.process_status` **Added**
* `mistral.beta.libraries.documents.get()`:  `response.process_status` **Added**
* `mistral.beta.libraries.documents.update()`:  `response.process_status` **Added**
* `mistral.beta.libraries.documents.status()`:  `response.process_status` **Added**

* chore: align pyproject.toml and uv.lock to version 2.0.0rc1

---------

Co-authored-by: speakeasybot <[email protected]>
Co-authored-by: GitHub Action <[email protected]>
…LAI-GCP-SDK 2.0.0rc1 (#396)

* ci: regenerated with OpenAPI Doc , Speakeasy CLI 1.729.0

* chore: align GCP pyproject.toml and uv.lock to version 2.0.0rc1

---------

Co-authored-by: speakeasybot <[email protected]>
Co-authored-by: GitHub Action <[email protected]>
…RE-SDK 2.0.0rc1 (#397)

* ci: regenerated with OpenAPI Doc , Speakeasy CLI 1.729.0

* chore: align Azure pyproject.toml and uv.lock to version 2.0.0rc1

---------

Co-authored-by: speakeasybot <[email protected]>
Co-authored-by: GitHub Action <[email protected]>
* chore: consolidate v1-to-v2 migration guide

* chore: add v0-to-v1 section back

* Update MIGRATION.md
* ## Python SDK Changes:
* `mistral.beta.conversations.start()`: 
  *  `request` **Changed** (Breaking ⚠️)
  *  `response` **Changed** (Breaking ⚠️)
  *  `error.detail[]` **Changed**
* `mistral.beta.conversations.append()`: 
  *  `request.inputs.union(Array<InputEntries>)[]` **Changed** (Breaking ⚠️)
  *  `response` **Changed** (Breaking ⚠️)
  *  `error.detail[]` **Changed**
* `mistral.beta.conversations.get_history()`: 
  *  `response.entries[]` **Changed** (Breaking ⚠️)
  *  `error.detail[]` **Changed**
* `mistral.beta.conversations.get_messages()`: 
  *  `response.messages[]` **Changed** (Breaking ⚠️)
  *  `error.detail[]` **Changed**
* `mistral.beta.conversations.restart()`: 
  *  `request` **Changed** (Breaking ⚠️)
  *  `response` **Changed** (Breaking ⚠️)
  *  `error.detail[]` **Changed**
* `mistral.agents.stream()`: 
  *  `request.messages[].union(tool).content.union(Array<ContentChunk>)[]` **Changed**
  *  `response.[].data.choices[].delta.content.union(Array<ContentChunk>)[]` **Changed** (Breaking ⚠️)
  *  `error.detail[]` **Changed**
* `mistral.agents.complete()`: 
  *  `request.messages[]` **Changed**
  *  `response.choices[].message.content.union(Array<ContentChunk>)[]` **Changed** (Breaking ⚠️)
  *  `error.detail[]` **Changed**
* `mistral.fim.stream()`: 
  *  `response.[].data.choices[].delta.content.union(Array<ContentChunk>)[]` **Changed** (Breaking ⚠️)
  *  `error.detail[]` **Changed**
* `mistral.fim.complete()`: 
  *  `response.choices[].message.content.union(Array<ContentChunk>)[]` **Changed** (Breaking ⚠️)
  *  `error.detail[]` **Changed**
* `mistral.chat.stream()`: 
  *  `request.messages[]` **Changed**
  *  `response.[].data.choices[].delta.content.union(Array<ContentChunk>)[]` **Changed** (Breaking ⚠️)
  *  `error.detail[]` **Changed**
* `mistral.chat.complete()`: 
  *  `request.messages[].union(tool).content.union(Array<ContentChunk>)[]` **Changed**
  *  `response.choices[].message.content.union(Array<ContentChunk>)[]` **Changed** (Breaking ⚠️)
  *  `error.detail[]` **Changed**
* `mistral.beta.conversations.restart_stream()`: 
  *  `request` **Changed** (Breaking ⚠️)
  *  `response.[].data.union(message.output.delta).content.union(OutputContentChunks)` **Changed** (Breaking ⚠️)
  *  `error.detail[]` **Changed**
* `mistral.beta.conversations.append_stream()`: 
  *  `request.inputs.union(Array<InputEntries>)[]` **Changed** (Breaking ⚠️)
  *  `response.[].data.union(message.output.delta).content.union(OutputContentChunks)` **Changed** (Breaking ⚠️)
  *  `error.detail[]` **Changed**
* `mistral.beta.conversations.start_stream()`: 
  *  `request` **Changed** (Breaking ⚠️)
  *  `response.[].data.union(message.output.delta).content.union(OutputContentChunks)` **Changed** (Breaking ⚠️)
  *  `error.detail[]` **Changed**
* `mistral.beta.connectors.delete()`: **Added**
* `mistral.beta.conversations.delete()`:  `error.detail[]` **Changed**
* `mistral.beta.observability.judges.delete()`: **Added**
* `mistral.beta.observability.judges.update()`: **Added**
* `mistral.beta.observability.campaigns.create()`: **Added**
* `mistral.beta.observability.campaigns.list()`: **Added**
* `mistral.beta.observability.campaigns.fetch()`: **Added**
* `mistral.beta.observability.campaigns.delete()`: **Added**
* `mistral.beta.observability.campaigns.fetch_status()`: **Added**
* `mistral.beta.observability.campaigns.list_events()`: **Added**
* `mistral.beta.observability.datasets.create()`: **Added**
* `mistral.beta.observability.datasets.list()`: **Added**
* `mistral.beta.observability.datasets.fetch()`: **Added**
* `mistral.beta.observability.datasets.delete()`: **Added**
* `mistral.beta.observability.datasets.update()`: **Added**
* `mistral.beta.observability.datasets.list_records()`: **Added**
* `mistral.beta.observability.datasets.create_record()`: **Added**
* `mistral.beta.observability.datasets.import_from_campaign()`: **Added**
* `mistral.beta.observability.datasets.import_from_explorer()`: **Added**
* `mistral.beta.observability.datasets.import_from_file()`: **Added**
* `mistral.beta.observability.datasets.import_from_playground()`: **Added**
* `mistral.beta.observability.datasets.import_from_dataset_records()`: **Added**
* `mistral.beta.observability.datasets.export_to_jsonl()`: **Added**
* `mistral.beta.observability.datasets.fetch_task()`: **Added**
* `mistral.beta.observability.datasets.list_tasks()`: **Added**
* `mistral.beta.observability.datasets.records.fetch()`: **Added**
* `mistral.beta.observability.datasets.records.delete()`: **Added**
* `mistral.beta.observability.datasets.records.bulk_delete()`: **Added**
* `mistral.beta.observability.datasets.records.judge()`: **Added**
* `mistral.beta.observability.datasets.records.update_payload()`: **Added**
* `mistral.beta.observability.datasets.records.update_properties()`: **Added**
* `mistral.beta.connectors.create()`: **Added**
* `mistral.beta.connectors.list()`: **Added**
* `mistral.beta.connectors.call_tool()`: **Added**
* `mistral.beta.connectors.get()`: **Added**
* `mistral.beta.connectors.update()`: **Added**
* `mistral.beta.observability.judges.list()`: **Added**
* `mistral.models.list()`: 
  *  `request` **Changed**
  *  `error.status[422]` **Added**
* `mistral.models.retrieve()`:  `error.detail[]` **Changed**
* `mistral.beta.observability.judges.create()`: **Added**
* `mistral.beta.observability.chat_completion_events.fields.fetch_option_counts()`: **Added**
* `mistral.beta.observability.chat_completion_events.fields.fetch_options()`: **Added**
* `mistral.models.delete()`:  `error.detail[]` **Changed**
* `mistral.beta.conversations.list()`: 
  *  `response.[].union(ModelConversation).guardrails` **Added**
  *  `error.detail[]` **Changed**
* `mistral.beta.conversations.get()`: 
  *  `response.union(ModelConversation).guardrails` **Added**
  *  `error.detail[]` **Changed**
* `mistral.beta.observability.judges.fetch()`: **Added**
* `mistral.beta.agents.create()`: 
  *  `request.guardrails` **Added**
  *  `response.guardrails` **Added**
  *  `error.detail[]` **Changed**
* `mistral.beta.agents.list()`: 
  *  `response.[].guardrails` **Added**
  *  `error.detail[]` **Changed**
* `mistral.beta.agents.get()`: 
  *  `response.guardrails` **Added**
  *  `error.detail[]` **Changed**
* `mistral.beta.agents.update()`: 
  *  `request.guardrails` **Added**
  *  `response.guardrails` **Added**
  *  `error.detail[]` **Changed**
* `mistral.beta.agents.delete()`:  `error.detail[]` **Changed**
* `mistral.beta.agents.update_version()`: 
  *  `response.guardrails` **Added**
  *  `error.detail[]` **Changed**
* `mistral.beta.agents.list_versions()`: 
  *  `response.[].guardrails` **Added**
  *  `error.detail[]` **Changed**
* `mistral.beta.agents.get_version()`: 
  *  `response.guardrails` **Added**
  *  `error.detail[]` **Changed**
* `mistral.beta.agents.create_version_alias()`:  `error.detail[]` **Changed**
* `mistral.beta.agents.list_version_aliases()`:  `error.detail[]` **Changed**
* `mistral.beta.agents.delete_version_alias()`:  `error.detail[]` **Changed**
* `mistral.beta.libraries.create()`:  `error.detail[]` **Changed**
* `mistral.beta.libraries.get()`:  `error.detail[]` **Changed**
* `mistral.beta.libraries.delete()`:  `error.detail[]` **Changed**
* `mistral.beta.libraries.update()`:  `error.detail[]` **Changed**
* `mistral.beta.libraries.documents.list()`:  `error.detail[]` **Changed**
* `mistral.beta.libraries.documents.upload()`:  `error.detail[]` **Changed**
* `mistral.beta.libraries.documents.get()`:  `error.detail[]` **Changed**
* `mistral.beta.libraries.documents.update()`:  `error.detail[]` **Changed**
* `mistral.beta.libraries.documents.delete()`:  `error.detail[]` **Changed**
* `mistral.beta.libraries.documents.text_content()`:  `error.detail[]` **Changed**
* `mistral.beta.libraries.documents.status()`:  `error.detail[]` **Changed**
* `mistral.beta.libraries.documents.get_signed_url()`:  `error.detail[]` **Changed**
* `mistral.beta.libraries.documents.extracted_text_signed_url()`:  `error.detail[]` **Changed**
* `mistral.beta.libraries.documents.reprocess()`:  `error.detail[]` **Changed**
* `mistral.beta.libraries.accesses.list()`:  `error.detail[]` **Changed**
* `mistral.beta.libraries.accesses.update_or_create()`:  `error.detail[]` **Changed**
* `mistral.beta.libraries.accesses.delete()`:  `error.detail[]` **Changed**
* `mistral.files.upload()`: 
  *  `request` **Changed**
  *  `response` **Changed**
* `mistral.files.list()`:  `response.data[]` **Changed**
* `mistral.files.retrieve()`:  `response` **Changed**
* `mistral.beta.observability.chat_completion_events.fields.list()`: **Added**
* `mistral.beta.observability.chat_completion_events.judge()`: **Added**
* `mistral.beta.observability.chat_completion_events.fetch_similar_events()`: **Added**
* `mistral.beta.observability.chat_completion_events.fetch()`: **Added**
* `mistral.beta.observability.chat_completion_events.search_ids()`: **Added**
* `mistral.beta.observability.chat_completion_events.search()`: **Added**
* `mistral.embeddings.create()`:  `error.detail[]` **Changed**
* `mistral.classifiers.moderate()`:  `error.detail[]` **Changed**
* `mistral.classifiers.moderate_chat()`: 
  *  `request.inputs.union(Array<>)[]` **Changed**
  *  `error.detail[]` **Changed**
* `mistral.classifiers.classify()`:  `error.detail[]` **Changed**
* `mistral.classifiers.classify_chat()`: 
  *  `request.input.union(Array<InstructRequest>)[].messages[].union(tool).content.union(Array<ContentChunk>)[]` **Changed**
  *  `error.detail[]` **Changed**
* `mistral.ocr.process()`:  `error.detail[]` **Changed**

* chore: align pyproject.toml and uv.lock to version 2.0.0

---------

Co-authored-by: speakeasybot <[email protected]>
Co-authored-by: GitHub Action <[email protected]>
…LAI-GCP-SDK 2.0.0 (#410)

* ## Python SDK Changes:
* `mistral_gcp.chat.stream()`: 
  *  `request.messages[].union(system).content.union(Array<SystemMessageContentChunks>)[].union(thinking).thinking[].union(ToolReferenceChunk)` **Added**
  *  `error.detail[]` **Changed**
* `mistral_gcp.chat.complete()`: 
  *  `request.messages[].union(system).content.union(Array<SystemMessageContentChunks>)[].union(thinking).thinking[].union(ToolReferenceChunk)` **Added**
  *  `error.detail[]` **Changed**
* `mistral_gcp.fim.stream()`:  `error.detail[]` **Changed**
* `mistral_gcp.fim.complete()`:  `error.detail[]` **Changed**

* chore: align GCP pyproject.toml and uv.lock to version 2.0.0

---------

Co-authored-by: speakeasybot <[email protected]>
Co-authored-by: GitHub Action <[email protected]>
…RE-SDK 2.0.0 (#411)

* ## Python SDK Changes:
* `mistral_azure.chat.stream()`: 
  *  `request.messages[].union(system).content.union(Array<SystemMessageContentChunks>)[].union(thinking).thinking[].union(ToolReferenceChunk)` **Added**
  *  `error.detail[]` **Changed**
* `mistral_azure.chat.complete()`: 
  *  `request.messages[].union(system).content.union(Array<SystemMessageContentChunks>)[].union(thinking).thinking[].union(ToolReferenceChunk)` **Added**
  *  `error.detail[]` **Changed**
* `mistral_azure.ocr.process()`:  `error.detail[]` **Changed**

* chore: align Azure pyproject.toml and uv.lock to version 2.0.0

---------

Co-authored-by: speakeasybot <[email protected]>
Co-authored-by: GitHub Action <[email protected]>
The rec_strict_json_schema function now handles int and float values
as terminal types. This fixes issue #300 where Pydantic models with
constraint keywords like min_length, max_length, minItems, maxItems,
minimum, maximum, and multipleOf would cause a ValueError.

JSON Schema constraint keywords have numeric values (int or float),
and these should be preserved without recursion, just like str and bool.

Fixes #300

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: yurekami <[email protected]>
Co-authored-by: Claude Opus 4.5 <[email protected]>
* docs: fix typo in migration guide

* revert: fix typo in migration guide

This reverts commit 1b67727.

* docs: clarify migration guide v0 to v1
* feat(extra): better OTEL instrumentation

* chore: adapt to v2

* chore(deps): adapt opentelemetry deps

Will probably be merged before in #406

* fix: use public httpx content API

* docs: add some TODOs

* chore: remove custom mistral ai total tokens span attribute

* chore(extra): remove custom operation id span attribute
Remove the IMPORTANT banner stating v2 was not yet on PyPI.
Replace with a NOTE pointing v1 users to the v1 branch.
Rename 'Migration warning' section to 'Migrating from v1'.

Generated by Mistral Vibe.

Co-authored-by: Mistral Vibe <[email protected]>
* ## Python SDK Changes:
* `mistral.chat.complete()`: 
  *  `request.messages[].union(user).content.union(Array<ContentChunk>)[].union(audio_url)` **Removed** (Breaking ⚠️)
  *  `response.choices[].message.content.union(Array<ContentChunk>)[].union(audio_url)` **Removed** (Breaking ⚠️)
* `mistral.classifiers.classify_chat()`: 
  *  `request.input.union(InstructRequest).messages[].union(user).content.union(Array<ContentChunk>)[].union(audio_url)` **Removed** (Breaking ⚠️)
* `mistral.classifiers.moderate_chat()`: 
  *  `request.inputs.union(Array<>)[].union(user).content.union(Array<ContentChunk>)[].union(audio_url)` **Removed** (Breaking ⚠️)
* `mistral.agents.stream()`: 
  *  `request.messages[].union(user).content.union(Array<ContentChunk>)[].union(audio_url)` **Removed** (Breaking ⚠️)
  *  `response.[].data.choices[].delta.content.union(Array<ContentChunk>)[].union(audio_url)` **Removed** (Breaking ⚠️)
* `mistral.agents.complete()`: 
  *  `request.messages[].union(user).content.union(Array<ContentChunk>)[].union(audio_url)` **Removed** (Breaking ⚠️)
  *  `response.choices[].message.content.union(Array<ContentChunk>)[].union(audio_url)` **Removed** (Breaking ⚠️)
* `mistral.fim.stream()`:  `response.[].data.choices[].delta.content.union(Array<ContentChunk>)[].union(audio_url)` **Removed** (Breaking ⚠️)
* `mistral.fim.complete()`:  `response.choices[].message.content.union(Array<ContentChunk>)[].union(audio_url)` **Removed** (Breaking ⚠️)
* `mistral.chat.stream()`: 
  *  `request.messages[].union(user).content.union(Array<ContentChunk>)[].union(audio_url)` **Removed** (Breaking ⚠️)
  *  `response.[].data.choices[].delta.content.union(Array<ContentChunk>)[].union(audio_url)` **Removed** (Breaking ⚠️)
* `mistral.beta.conversations.restart_stream()`: 
  *  `request.guardrails[]` **Changed**
* `mistral.beta.agents.update()`: 
  *  `request` **Changed**
  *  `response` **Changed**
* `mistral.beta.agents.update_version()`:  `response` **Changed**
* `mistral.beta.agents.list_versions()`:  `response.[]` **Changed**
* `mistral.beta.agents.get_version()`:  `response` **Changed**
* `mistral.beta.agents.get()`:  `response` **Changed**
* `mistral.beta.agents.list()`:  `response.[]` **Changed**
* `mistral.beta.agents.create()`: 
  *  `request` **Changed**
  *  `response` **Changed**
* `mistral.beta.conversations.start()`:  `request` **Changed**
* `mistral.beta.conversations.start_stream()`:  `request` **Changed**
* `mistral.beta.conversations.restart()`: 
  *  `request.guardrails[]` **Changed**
* `mistral.beta.conversations.get()`:  `response.union(ModelConversation)` **Changed**
* `mistral.beta.conversations.list()`:  `response.[].union(ModelConversation)` **Changed**

* chore: align pyproject.toml and uv.lock to version 2.0.1

---------

Co-authored-by: speakeasybot <[email protected]>
Co-authored-by: GitHub Action <[email protected]>
Docs-only fixes (broken links, typos, syntax) and publish pipeline alignment for a 2.0.1.post1 PyPI release.
* ## Python SDK Changes:
* `mistral.beta.conversations.start()`:  `response.guardrails[]` **Changed** (Breaking ⚠️)
* `mistral.beta.conversations.append()`:  `response.guardrails[]` **Changed** (Breaking ⚠️)
* `mistral.beta.conversations.restart()`:  `response.guardrails[]` **Changed** (Breaking ⚠️)

* chore: align pyproject.toml and uv.lock to version 2.0.2

---------

Co-authored-by: speakeasybot <[email protected]>
Co-authored-by: GitHub Action <[email protected]>
* ## Python SDK Changes:
* `mistral.beta.conversations.append_stream()`: 
  *  `request.inputs.union(Array<InputEntries>)[].union(MessageInputEntry).content.union(Array<MessageInputContentChunks>)[].union(ThinkChunk).thinking[].union(ReferenceChunk).reference_ids[]` **Changed** (Breaking ⚠️)
  *  `response.[].data.union(message.output.delta).content.union(OutputContentChunks).union(ThinkChunk).thinking[].union(ReferenceChunk).reference_ids[]` **Changed** (Breaking ⚠️)
* `mistral.chat.complete()`: 
  *  `request.messages[].union(system).content.union(Array<SystemMessageContentChunks>)[].union(thinking).thinking[].union(ReferenceChunk).reference_ids[]` **Changed** (Breaking ⚠️)
  *  `response.choices[].message.content.union(Array<ContentChunk>)[].union(reference).reference_ids[]` **Changed** (Breaking ⚠️)
* `mistral.beta.conversations.start()`: 
  *  `request.inputs.union(Array<InputEntries>)[].union(MessageInputEntry).content.union(Array<MessageInputContentChunks>)[].union(ThinkChunk).thinking[].union(ReferenceChunk).reference_ids[]` **Changed** (Breaking ⚠️)
  *  `response.outputs[].union(MessageOutputEntry).content.union(Array<MessageOutputContentChunks>)[].union(ThinkChunk).thinking[].union(ReferenceChunk).reference_ids[]` **Changed** (Breaking ⚠️)
* `mistral.beta.conversations.append()`: 
  *  `request.inputs.union(Array<InputEntries>)[].union(MessageOutputEntry).content.union(Array<MessageOutputContentChunks>)[].union(ThinkChunk).thinking[].union(ReferenceChunk).reference_ids[]` **Changed** (Breaking ⚠️)
  *  `response.outputs[].union(MessageOutputEntry).content.union(Array<MessageOutputContentChunks>)[].union(ThinkChunk).thinking[].union(ReferenceChunk).reference_ids[]` **Changed** (Breaking ⚠️)
* `mistral.beta.conversations.get_history()`:  `response.entries[].union(MessageInputEntry).content.union(Array<MessageInputContentChunks>)[].union(ThinkChunk).thinking[].union(ReferenceChunk).reference_ids[]` **Changed** (Breaking ⚠️)
* `mistral.beta.conversations.get_messages()`:  `response.messages[].union(MessageInputEntry).content.union(Array<MessageInputContentChunks>)[].union(ThinkChunk).thinking[].union(ReferenceChunk).reference_ids[]` **Changed** (Breaking ⚠️)
* `mistral.beta.conversations.restart()`: 
  *  `request.inputs.union(Array<InputEntries>)[].union(MessageInputEntry).content.union(Array<MessageInputContentChunks>)[].union(ThinkChunk).thinking[].union(ReferenceChunk).reference_ids[]` **Changed** (Breaking ⚠️)
  *  `response.outputs[].union(MessageOutputEntry).content.union(Array<MessageOutputContentChunks>)[].union(ThinkChunk).thinking[].union(ReferenceChunk).reference_ids[]` **Changed** (Breaking ⚠️)
* `mistral.beta.conversations.start_stream()`: 
  *  `request.inputs.union(Array<InputEntries>)[].union(MessageInputEntry).content.union(Array<MessageInputContentChunks>)[].union(ThinkChunk).thinking[].union(ReferenceChunk).reference_ids[]` **Changed** (Breaking ⚠️)
  *  `response.[].data.union(message.output.delta).content.union(OutputContentChunks).union(ThinkChunk).thinking[].union(ReferenceChunk).reference_ids[]` **Changed** (Breaking ⚠️)
* `mistral.classifiers.classify_chat()`: 
  *  `request.input.union(InstructRequest).messages[].union(user).content.union(Array<ContentChunk>)[].union(reference).reference_ids[]` **Changed** (Breaking ⚠️)
* `mistral.classifiers.moderate_chat()`: 
  *  `request.inputs.union(Array<>)[].union(tool).content.union(Array<ContentChunk>)[].union(reference).reference_ids[]` **Changed** (Breaking ⚠️)
* `mistral.beta.conversations.restart_stream()`: 
  *  `request.inputs.union(Array<InputEntries>)[].union(MessageInputEntry).content.union(Array<MessageInputContentChunks>)[].union(ThinkChunk).thinking[].union(ReferenceChunk).reference_ids[]` **Changed** (Breaking ⚠️)
  *  `response.[].data.union(message.output.delta).content.union(OutputContentChunks).union(ThinkChunk).thinking[].union(ReferenceChunk).reference_ids[]` **Changed** (Breaking ⚠️)
* `mistral.chat.stream()`: 
  *  `request.messages[].union(tool).content.union(Array<ContentChunk>)[].union(reference).reference_ids[]` **Changed** (Breaking ⚠️)
  *  `response.[].data.choices[].delta.content.union(Array<ContentChunk>)[].union(reference).reference_ids[]` **Changed** (Breaking ⚠️)
* `mistral.fim.complete()`:  `response.choices[].message.content.union(Array<ContentChunk>)[].union(thinking).thinking[].union(ReferenceChunk).reference_ids[]` **Changed** (Breaking ⚠️)
* `mistral.fim.stream()`:  `response.[].data.choices[].delta.content.union(Array<ContentChunk>)[].union(thinking).thinking[].union(ReferenceChunk).reference_ids[]` **Changed** (Breaking ⚠️)
* `mistral.agents.complete()`: 
  *  `request.messages[].union(system).content.union(Array<SystemMessageContentChunks>)[].union(thinking).thinking[].union(ReferenceChunk).reference_ids[]` **Changed** (Breaking ⚠️)
  *  `response.choices[].message.content.union(Array<ContentChunk>)[].union(reference).reference_ids[]` **Changed** (Breaking ⚠️)
* `mistral.agents.stream()`: 
  *  `request.messages[].union(system).content.union(Array<SystemMessageContentChunks>)[].union(thinking).thinking[].union(ReferenceChunk).reference_ids[]` **Changed** (Breaking ⚠️)
  *  `response.[].data.choices[].delta.content.union(Array<ContentChunk>)[].union(reference).reference_ids[]` **Changed** (Breaking ⚠️)
* `mistral.models.list()`:  `response.data[].union(base).capabilities` **Changed**
* `mistral.models.retrieve()`:  `response.union(base).capabilities` **Changed**

* chore: align pyproject.toml and uv.lock to version 2.0.3

---------

Co-authored-by: speakeasybot <[email protected]>
Co-authored-by: GitHub Action <[email protected]>
* ## Python SDK Changes:
* `mistral.beta.observability.judges.judge_conversation()`: **Added**
* `mistral.chat.complete()`:  `request.guardrails` **Added**
* `mistral.chat.stream()`:  `request.guardrails` **Added**
* `mistral.agents.complete()`:  `request.guardrails` **Added**
* `mistral.agents.stream()`:  `request.guardrails` **Added**

* chore: align pyproject.toml and uv.lock to version 2.0.4

---------

Co-authored-by: speakeasybot <[email protected]>
Co-authored-by: GitHub Action <[email protected]>
* ci: pin Speakeasy version to 1.754.0

* ci: source Speakeasy version from .speakeasy/workflow.yaml

* ci: log resolved Speakeasy version in workflow
…span attribute (#429)

Read gen_ai.conversation.id from OTEL baggage in get_traced_request_and_span()
and set it as an attribute on SDK-created spans. This allows callers that
propagate conversation ID via standard OTEL baggage (opentelemetry.baggage)
to have it automatically attached to descendant Mistral SDK spans, per GenAI
semantic conventions.

Generated by Mistral Vibe.

Co-authored-by: Mistral Vibe <[email protected]>
* ## Python SDK Changes:
* `mistral.beta.connectors.get_auth_url()`: **Added**
* `mistral.chat.complete()`:  `request.reasoning_effort` **Added**
* `mistral.chat.stream()`:  `request.reasoning_effort` **Added**
* `mistral.agents.complete()`:  `request.reasoning_effort` **Added**
* `mistral.agents.stream()`:  `request.reasoning_effort` **Added**

* chore: align pyproject.toml and uv.lock to version 2.0.5

---------

Co-authored-by: speakeasybot <[email protected]>
Co-authored-by: GitHub Action <[email protected]>
* ## Python SDK Changes:
* `mistral.beta.agents.update_version()`:  `response` **Changed** (Breaking ⚠️)
* `mistral.beta.agents.get()`:  `response` **Changed** (Breaking ⚠️)
* `mistral.agents.stream()`:  `request` **Changed** (Breaking ⚠️)
* `mistral.agents.complete()`:  `request` **Changed** (Breaking ⚠️)
* `mistral.beta.conversations.start_stream()`:  `request` **Changed** (Breaking ⚠️)
* `mistral.chat.stream()`:  `request` **Changed** (Breaking ⚠️)
* `mistral.chat.complete()`:  `request` **Changed** (Breaking ⚠️)
* `mistral.beta.conversations.restart()`:  `request` **Changed** (Breaking ⚠️)
* `mistral.beta.agents.list_versions()`:  `response.[]` **Changed** (Breaking ⚠️)
* `mistral.beta.conversations.start()`:  `request` **Changed** (Breaking ⚠️)
* `mistral.beta.conversations.list()`:  `response.[]` **Changed** (Breaking ⚠️)
* `mistral.beta.conversations.get()`:  `response` **Changed** (Breaking ⚠️)
* `mistral.beta.agents.update()`: 
  *  `request` **Changed** (Breaking ⚠️)
  *  `response` **Changed** (Breaking ⚠️)
* `mistral.beta.agents.get_version()`:  `response` **Changed** (Breaking ⚠️)
* `mistral.beta.agents.list()`:  `response.[]` **Changed** (Breaking ⚠️)
* `mistral.beta.agents.create()`: 
  *  `request` **Changed** (Breaking ⚠️)
  *  `response` **Changed** (Breaking ⚠️)
* `mistral.beta.conversations.restart_stream()`:  `request` **Changed** (Breaking ⚠️)
* `mistral.beta.conversations.append_stream()`: 
  *  `request.completion_args.reasoning_effort` **Added**
* `mistral.audio.voices.update()`: **Added**
* `mistral.beta.conversations.append()`: 
  *  `request.completion_args.reasoning_effort` **Added**
* `mistral.audio.voices.list()`: **Added**
* `mistral.audio.speech.complete()`: **Added**
* `mistral.models.retrieve()`:  `response.union(base).capabilities.reasoning` **Added**
* `mistral.models.list()`:  `response.data[].union(base).capabilities.reasoning` **Added**
* `mistral.audio.voices.get_sample_audio()`: **Added**
* `mistral.audio.voices.get()`: **Added**
* `mistral.audio.voices.delete()`: **Added**
* `mistral.audio.voices.create()`: **Added**

* chore: align pyproject.toml and uv.lock to version 2.1.0

---------

Co-authored-by: speakeasybot <[email protected]>
Co-authored-by: GitHub Action <[email protected]>
…pydantic_model (#438)

* fix(extra): return ResponseFormatTypedDict from response_format_from_pydantic_model

response_format_from_pydantic_model now returns a ResponseFormatTypedDict
(plain dict) instead of a ResponseFormat model instance. This fixes the
type mismatch when passing the result to the Azure SDK, which expects its
own ResponseFormat class, and avoids the schema alias data loss issue.

Fixes AIR-143 / GitHub #367

* fix(examples): use ChatCompletionRequestTools1 type for tools list

Fix mypy list invariance error introduced by SDK 2.1.0 regen where
list[Tool] no longer satisfies the broadened tools union type.
* ## Python SDK Changes:
* `mistral.chat.complete()`:  `response.choices[]` **Changed** (Breaking ⚠️)
* `mistral.fim.complete()`:  `response.choices[]` **Changed** (Breaking ⚠️)
* `mistral.agents.complete()`:  `response.choices[]` **Changed** (Breaking ⚠️)

* chore: align pyproject.toml and uv.lock to version 2.1.1

---------

Co-authored-by: speakeasybot <[email protected]>
Co-authored-by: GitHub Action <[email protected]>
* ## Python SDK Changes:
* `mistral.beta.conversations.start()`: 
  *  `request.tools[]` **Changed** (Breaking ⚠️)
* `mistral.beta.conversations.list()`:  `response.[].union(ModelConversation).tools[]` **Changed** (Breaking ⚠️)
* `mistral.beta.conversations.get()`:  `response.union(ModelConversation).tools[]` **Changed** (Breaking ⚠️)
* `mistral.beta.conversations.start_stream()`: 
  *  `request.tools[]` **Changed** (Breaking ⚠️)
* `mistral.beta.agents.create()`: 
  *  `request.tools[]` **Changed** (Breaking ⚠️)
  *  `response.tools[]` **Changed** (Breaking ⚠️)
* `mistral.beta.agents.list()`:  `response.[].tools[]` **Changed** (Breaking ⚠️)
* `mistral.beta.agents.get()`:  `response.tools[]` **Changed** (Breaking ⚠️)
* `mistral.beta.agents.update()`: 
  *  `request.tools[]` **Changed** (Breaking ⚠️)
  *  `response.tools[]` **Changed** (Breaking ⚠️)
* `mistral.beta.agents.update_version()`:  `response.tools[]` **Changed** (Breaking ⚠️)
* `mistral.beta.agents.list_versions()`:  `response.[].tools[]` **Changed** (Breaking ⚠️)
* `mistral.beta.agents.get_version()`:  `response.tools[]` **Changed** (Breaking ⚠️)
* `mistral.chat.complete()`: 
  *  `request` **Changed** (Breaking ⚠️)
  *  `response.choices[]` **Changed** (Breaking ⚠️)
* `mistral.chat.stream()`:  `request` **Changed** (Breaking ⚠️)
* `mistral.fim.complete()`:  `response.choices[]` **Changed** (Breaking ⚠️)
* `mistral.agents.complete()`: 
  *  `request` **Changed** (Breaking ⚠️)
  *  `response.choices[]` **Changed** (Breaking ⚠️)
* `mistral.agents.stream()`:  `request` **Changed** (Breaking ⚠️)

* chore: align pyproject.toml and uv.lock to version 2.1.2

* chore: trigger CI

* fix(examples): revert to list[Tool] now that ChatCompletionRequestTools1 is removed

* chore: retrigger CI

---------

Co-authored-by: speakeasybot <[email protected]>
Co-authored-by: GitHub Action <[email protected]>
Co-authored-by: Louis Sanna <[email protected]>
* ## Python SDK Changes:
* `mistral.beta.connectors.list_tools()`: **Added**

* chore: align pyproject.toml and uv.lock to version 2.1.3

* chore: trigger CI

---------

Co-authored-by: speakeasybot <[email protected]>
Co-authored-by: GitHub Action <[email protected]>
Co-authored-by: Louis Sanna <[email protected]>
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.