I heard that ChatGPT API has been released.
You can call it easily from Ruby.
I wrote a mini desktop tool using GPT-3.5-turbo.
Requirements
- https://github.com/AndyObtiva/glimmer-dsl-libui
- https://github.com/alexrudall/ruby-openai
- Get your API key from https://beta.openai.com/account/api-keys
Script
require 'glimmer-dsl-libui' require 'ruby/openai' class ChatGPT class Message < Struct.new(:role, :content) def role_color [role, color] end def content_color [content, color] end def color case role when 'System' then :gray when 'Human' then :green when 'CatGPT' then :brown else raise end end end attr_reader :history def initialize @client = OpenAI::Client.new(access_token: ENV['OPENAI_ACCESS_TOKEN']) @history = [Message.new('System', 'Act like a cat')] call('Hi gpt 3.5 turbo!') end def call(query_text) res = @client.chat( parameters: { model: 'gpt-3.5-turbo', messages: generate_message(query_text) } ) str = res.dig('choices', 0, 'message', 'content') history << Message.new('Human', query_text) history << Message.new('CatGPT', str) end def generate_message(query_text) m = history.map do |m| case m.role when 'CatGPT' { 'role' => 'assistant', 'content' => m.content } when 'Human' { 'role' => 'user', 'content' => m.content } when 'System' { 'role' => 'system', 'content' => m.content } end end m.push({ 'role' => 'user', 'content' => query_text }) p m end end class Chat include Glimmer attr_accessor :entry_text def initialize @chatgpt = ChatGPT.new end def launch window('CatGPT - Glimmer DSL LibUI', 400, 400) do vertical_box do table do text_color_column('role') text_color_column('content') cell_rows <=> [@chatgpt, :history, { column_attributes: { 'role' => :role_color, 'content' => :content_color } }] end horizontal_box do stretchy false entry do text <=> [self, :entry_text] end button('GO') do stretchy false on_clicked do @chatgpt.call(entry_text) end end end end end.show end end Chat.new.launch
Meow, thank you for reading to the end.
Have a purr-fect day!
Top comments (0)