OmniAI::Anthropic
An Anthropic implementation of the OmniAI APIs.
Installation
gem install omniai-anthropic
Usage
Client
A client is setup as follows if ENV['ANTHROPIC_API_KEY']
exists:
client = OmniAI::Anthropic::Client.new
A client may also be passed the following options:
api_key
(required - default isENV['ANTHROPIC_API_KEY']
)host
(optional)
Configuration
Global configuration is supported for the following options:
OmniAI::Anthropic.configure do |config|
config.api_key = '...' # default: ENV['ANTHROPIC_API_KEY']
config.host = '...' # default: 'https://api.anthropic.com'
end
Chat
A chat completion is generated by passing in prompts using any a variety of formats:
completion = client.chat('Tell me a joke!')
completion.choice..content # 'Why did the chicken cross the road? To get to the other side.'
completion = client.chat do |prompt|
prompt.system('You are a helpful assistant.')
prompt.user('What is the capital of Canada?')
end
completion.choice..content # 'The capital of Canada is Ottawa.'
Model
model
takes an optional string (default is claude-3-haiku-20240307
):
completion = client.chat('Provide code for fibonacci', model: OmniAI::Anthropic::Chat::Model::CLAUDE_SONNET)
completion.choice..content # 'def fibonacci(n)...end'
Temperature
temperature
takes an optional float between 0.0
and 1.0
(defaults is 0.7
):
completion = client.chat('Pick a number between 1 and 5', temperature: 1.0)
completion.choice..content # '3'
Anthropic API Reference temperature
Stream
stream
takes an optional a proc to stream responses in real-time chunks instead of waiting for a complete response:
stream = proc do |chunk|
print(chunk.choice.delta.content) # 'Better', 'three', 'hours', ...
end
client.chat('Be poetic.', stream:)
Anthropic API Reference stream
Format
format
takes an optional symbol (:json
) and modifies requests to send additional system text requesting JSON:
completion = client.chat(format: :json) do |prompt|
prompt.system(OmniAI::Chat::JSON_PROMPT)
prompt.user('What is the name of the drummer for the Beatles?')
JSON.parse(completion.choice.message.content) # { "name": "Ringo" }