instructor-ai / instructor-rb

Structured outputs for LLMs
https://useinstructor.com/
MIT License
51 stars 2 forks source link
artificial-intelligence artificial-intelligence-projects chatgpt chatgpt-api function-calling large-language-models llm openai openai-api openai-assistant-api structured-data

instructor-rb

Structured extraction in Ruby, powered by llms, designed for simplicity, transparency, and control.


Twitter Follow Twitter Follow Documentation GitHub issues Discord

Instructor-rb is a Ruby library that makes it a breeze to work with structured outputs from large language models (LLMs). Built on top of EasyTalk, it provides a simple, transparent, and user-friendly API to manage validation, retries, and streaming responses. Get ready to supercharge your LLM workflows!

Getting Started

  1. Install Instructor-rb at the command prompt if you haven't yet:

    ```bash
    $ gem install instructor-rb
    ```
  2. In your Ruby project, require the gem:

    ```ruby
    require 'instructor'
    ```
  3. At the beginning of your script, initialize and patch the client:

    For the OpenAI client:

    ```ruby
    client = Instructor.from_openai(OpenAI::Client)
    ```

    For the Anthropic client:

    ```ruby
    client = Instructor.from_anthropic(Anthropic::Client)
    ```

Usage

export your API key:

export OPENAI_API_KEY=sk-...

or for Anthropic:

export ANTHROPIC_API_KEY=sk-...

Then use Instructor by defining your schema in Ruby using the define_schema block and EasyTalk's schema definition syntax. Here's an example in:

require 'instructor'

class UserDetail
  include EasyTalk::Model

  define_schema do
    property :name, String
    property :age, Integer
  end
end

client = Instructor.from_openai(OpenAI::Client).new

user = client.chat(
  parameters: {
    model: 'gpt-3.5-turbo',
    messages: [{ role: 'user', content: 'Extract Jason is 25 years old' }]
  },
  response_model: UserDetail
)

user.name
# => "Jason"
user.age
# => 25

ℹ️ Tip: Support in other languages

Check out ports to other languages below:

- [Python](https://www.github.com/jxnl/instructor)
- [TS/JS](https://github.com/instructor-ai/instructor-js/)
- [Ruby](https://github.com/instructor-ai/instructor-rb)
- [Elixir](https://github.com/thmsmlr/instructor_ex/)

If you want to port Instructor to another language, please reach out to us on [Twitter](https://twitter.com/jxnlco) we'd love to help you get started!

Why use Instructor?

  1. OpenAI Integration — Integrates seamlessly with OpenAI's API, facilitating efficient data management and manipulation.

  2. Customizable — It offers significant flexibility. Users can tailor validation processes and define unique error messages.

  3. Tested and Trusted — Its reliability is proven by extensive real-world application.

Installing Instructor is a breeze.

Contributing

If you want to help out, checkout some of the issues marked as good-first-issue or help-wanted. Found here. They could be anything from code improvements, a guest blog post, or a new cook book.

Checkout the [contribution guide]() for details on how to set things up, testing, changesets and guidelines.

License

This project is licensed under the terms of the MIT License.

TODO