Project

mistral

0.0
The project is in a healthy, maintained state
A 1:1 Ruby port of the official Mistral Python client, with feature and API parity.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 3.1
~> 5.22
~> 13.2
~> 1.63
~> 3.23

Runtime

~> 5.2
 Project Readme

Mistral Ruby Client

Gem Version Build

Mistral is a Ruby gem to interact with the Mistral AI API.

This client is a 1:1 port of Mistral's client-python. For a detailed comparison between the Ruby and Python clients, please refer to the PYTHON_CLIENT_COMPARISON.md file.

🔑 Key features

  • API parity with the official Python client
  • Full support for all Mistral AI functionalities, including chat completions, embeddings, and function calling
  • Asynchronous streaming of responses
  • Comprehensive error handling and retry mechanisms
  • Configurable client options (e.g., API endpoint, timeout, max retries)
  • Fully leverages dry-struct for type safety and avoids primitive obsession with hashes

📦 Installation

Install the gem and add to the application's Gemfile by executing:

$ bundle add mistral

If bundler is not being used to manage dependencies, install the gem by executing:

$ gem install mistral

⚡️ Quickstart

Here are a few examples of how to use the Mistral gem:

Chat completion

require 'mistral'

api_key = ENV.fetch('MISTRAL_API_KEY')
client = Mistral::Client.new(api_key: api_key)

model = 'mistral-small'

chat_response = client.chat(
 model: model,
 messages: [
   Mistral::ChatMessage.new(role: 'user', content: 'What is the best French cheese?')
 ]
)

puts chat_response.choices[0].message.content

Chat completion with streaming

require 'mistral'

api_key = ENV.fetch('MISTRAL_API_KEY')
client = Mistral::Client.new(api_key: api_key)

model = 'mistral-small'

client.chat_stream(
  model: model,
  messages: [
    Mistral::ChatMessage.new(role: 'user', content: 'What is the best French cheese?')
  ]
).each do |chunk|
  print chunk.choices[0].delta.content if chunk.choices[0].delta.content
end

📚 Documentation

In the examples folder, you will find how to do:

File Name Description
chat_no_streaming.rb How to use the chat endpoint without streaming
chat_with_streaming.rb How to use the chat endpoint with streaming
chatbot_with_streaming.rb A simple interactive chatbot using streaming
code_completion.rb How to perform a code completion
completion_with_streaming.rb How to perform a code completion with streaming
embeddings.rb How to use the embeddings endpoint
function_calling.rb How to call functions using the chat endpoint
json_format.rb How to request and parse JSON responses from the chat endpoint
list_models.rb How to list available models

🔨 Development

After checking out the repo, run bin/setup to install dependencies.

To install this gem onto your local machine, run bundle exec rake install.

You can also run bin/console for an interactive prompt that will allow you to experiment.

To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and the created tag, and push the .gem file to rubygems.org.

The health and maintainability of the codebase is ensured through a set of Rake tasks to test and lint the gem:

rake build                    # Build mistral into the pkg directory
rake build:checksum           # Generate SHA512 checksum if mistral.gem into the checksums directory
rake clean                    # Remove any temporary products
rake clobber                  # Remove any generated files
rake install                  # Build and install mistral.gem into system gems
rake install:local            # Build and install mistral.gem into system gems without network access
rake release[remote]          # Create tag v0.1.0 and build and push mistral.gem to https://rubygems.org
rake rubocop                  # Run RuboCop
rake rubocop:autocorrect      # Autocorrect RuboCop offenses (only when it's safe)
rake rubocop:autocorrect_all  # Autocorrect RuboCop offenses (safe and unsafe)
rake test                     # Run the test suite
rake test:cmd                 # Print out the test command
rake test:isolated            # Show which test files fail when run in isolation
rake test:slow                # Show bottom 25 tests wrt time

🐞 Issues & Bugs

If you find any issues or bugs, please report them here, I will be happy to have a look at them and fix them as soon as possible.

Please let me know if the client-python introduces any new features, so I can keep this gem in sync with the latest updates.

🤝 Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/wilsonsilva/mistral. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the code of conduct.

📜 License

The gem is available as open source under the terms of the MIT License.

👔 Code of Conduct

Everyone interacting in the mistral project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the code of conduct.