anthropic-rb 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 137b1e285afd97d1ec45ba94685dfcb17afd4388dbd43dbad200ef61228952bd
4
- data.tar.gz: 465bc7914a25c1f438539364de3fe753f379879273ffafac0818305db60d782c
3
+ metadata.gz: b5e066105f3157621c27e2f974ed43bde9f14e6e55187d1d7a4f095b79a5a1ba
4
+ data.tar.gz: f32d479f7ec06c29a0347f69084a4378a64d69233d78ed280f5a1c924e15d708
5
5
  SHA512:
6
- metadata.gz: 34e45517ffa6f2b35a550f8ff1827618b1a01068cc685f8e7980ea893025cd3811609f80cf2ce5c3d199507252701ad4efcc4ddb7cf2d462b996b5c9aa3229f3
7
- data.tar.gz: 2eddc00d9f8c86c45187a332a93e1d218f04af1eaf8cac45ccdcc767dba4e3c9217c17b80753b1c53d64c2b80aa2fa2c8940af1fe56a0c630766ab8e2f4ef0d5
6
+ metadata.gz: 90040c86504a3dfd28e0093d1b8525252387f4e978271908aa158d1cffe10a3dd5766aadc243bc31f45ca6dd38ecf1259d009b2da9f2f78670fcc114c76574a3
7
+ data.tar.gz: 8ca46c62fe204b3b2403cce1267b6661f43c52159c8d31877b9d2522be604427996eedcbac67ba22a1b6df703259ededd98ea2b86d49755d7aa057835458321c
data/.reek.yml CHANGED
@@ -8,3 +8,6 @@ detectors:
8
8
  BooleanParameter:
9
9
  exclude:
10
10
  - 'Anthropic::Messages#initialize'
11
+ DuplicateMethodCall:
12
+ exclude:
13
+ - 'Anthropic::Messages#create'
data/CHANGELOG.md CHANGED
@@ -2,6 +2,16 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [0.4.0] - 2024-04-20
6
+
7
+ ### Added
8
+
9
+ - Add support for the tools beta.
10
+
11
+ ### Updated
12
+
13
+ - Remove beta header for Messages API as the API is no longer in beta.
14
+
5
15
  ## [0.3.0] - 2023-12-28
6
16
 
7
17
  ### Added
@@ -47,7 +57,8 @@
47
57
 
48
58
  - Initial release
49
59
 
50
- [Unreleased]: https://github.com/dickdavis/anthropic-rb/compare/v0.3.0...HEAD
60
+ [Unreleased]: https://github.com/dickdavis/anthropic-rb/compare/v0.4.0...HEAD
61
+ [0.4.0]: https://github.com/dickdavis/anthropic-rb/compare/v0.3.0...v0.4.0
51
62
  [0.3.0]: https://github.com/dickdavis/anthropic-rb/compare/v0.2.5...v0.3.0
52
63
  [0.2.5]: https://github.com/dickdavis/anthropic-rb/compare/v0.2.3...v0.2.5
53
64
  [0.2.3]: https://github.com/dickdavis/anthropic-rb/compare/v0.2.2...v0.2.3
data/README.md CHANGED
@@ -9,7 +9,7 @@ The goal of this project is feature parity with Anthropic's Python SDK until an
9
9
  anthropic-rb will default to the value of the `ANTHROPIC_API_KEY` environment variable. However, you may initialize the library with your API key. You must set your API key before using the library.
10
10
 
11
11
  ```ruby
12
- require 'anthropic-rb'
12
+ require 'anthropic'
13
13
 
14
14
  Anthropic.setup do |config|
15
15
  config.api_key = 'YOUR_API_KEY'
@@ -19,7 +19,7 @@ end
19
19
  You can also specify an API version to use by setting the `ANTHROPIC_API_VERSION` environment variable or during initialization. This is optional; if not set, the library will default to `2023-06-01`.
20
20
 
21
21
  ```ruby
22
- require 'anthropic-rb'
22
+ require 'anthropic'
23
23
 
24
24
  Anthropic.setup do |config|
25
25
  config.api_version = '2023-06-01'
@@ -28,10 +28,10 @@ end
28
28
 
29
29
  ### Messages API
30
30
 
31
- You can send a request to the Messages API. The Messages API is currently in beta; as such, you'll need to pass the `beta` flag when calling the API to ensure the correct header is included.
31
+ You can send a request to the Messages API.
32
32
 
33
33
  ```ruby
34
- Anthropic.messages(beta: true).create(model: 'claude-2.1', max_tokens: 200, messages: [{role: 'user', content: 'Yo what up?'}])
34
+ Anthropic.messages.create(model: 'claude-2.1', max_tokens: 200, messages: [{role: 'user', content: 'Yo what up?'}])
35
35
 
36
36
  # Output =>
37
37
  # {
@@ -48,7 +48,7 @@ Anthropic.messages(beta: true).create(model: 'claude-2.1', max_tokens: 200, mess
48
48
  Alternatively, you can stream the response:
49
49
 
50
50
  ```ruby
51
- Anthropic.messages(beta: true).create(model: 'claude-2.1', max_tokens: 200, messages: [{role: 'user', content: 'Yo what up?'}], stream: true) do |event|
51
+ Anthropic.messages.create(model: 'claude-2.1', max_tokens: 200, messages: [{role: 'user', content: 'Yo what up?'}], stream: true) do |event|
52
52
  puts event
53
53
  end
54
54
 
@@ -62,6 +62,33 @@ end
62
62
  # { type: 'message_stop' }
63
63
  ```
64
64
 
65
+ You can also experiment with the new tools beta by passing the `beta` flag when calling the API. This will ensure each request includes the correct beta header.
66
+
67
+ ```ruby
68
+ tools = [
69
+ {
70
+ name: 'get_weather',
71
+ description: 'Get the current weather in a given location',
72
+ input_schema: {
73
+ type: 'object',
74
+ properties: {
75
+ location: { type: 'string' }
76
+ },
77
+ required: ['location']
78
+ }
79
+ }
80
+ ]
81
+
82
+ Anthropic.messages(beta: true).create(
83
+ model: 'claude-3-opus-20240229',
84
+ max_tokens: 200,
85
+ tools:,
86
+ messages: [{role: 'user', content: 'What is the weather like in Nashville?'}]
87
+ )
88
+ ```
89
+
90
+ Streaming is currently not supported by the tools beta. You can find out more information about tools in the [documentation](https://docs.anthropic.com/claude/docs/tool-use).
91
+
65
92
  ### Completions API
66
93
 
67
94
  To make a request to the Completions API:
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'lib/anthropic/version'
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = 'anthropic-rb'
7
+ spec.version = Anthropic::VERSION
8
+ spec.authors = ['Dick Davis']
9
+ spec.email = ['dick@hey.com']
10
+
11
+ spec.summary = 'Ruby bindings for the Anthropic API'
12
+ spec.homepage = 'https://github.com/dickdavis/anthropic-rb'
13
+ spec.license = 'MIT'
14
+
15
+ spec.metadata['allowed_push_host'] = 'https://rubygems.org'
16
+ spec.metadata['homepage_uri'] = spec.homepage
17
+ spec.metadata['source_code_uri'] = 'https://github.com/dickdavis/anthropic-rb'
18
+ spec.metadata['changelog_uri'] = 'https://github.com/dickdavis/anthropic-rb/blob/main/CHANGELOG.md'
19
+
20
+ # Specify which files should be added to the gem when it is released.
21
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
22
+ spec.files = Dir.chdir(__dir__) do
23
+ `git ls-files -z`.split("\x0").reject do |f|
24
+ (File.expand_path(f) == __FILE__) ||
25
+ f.start_with?(*%w[bin/ spec/ .git .github/ Gemfile])
26
+ end
27
+ end
28
+ spec.bindir = 'exe'
29
+ spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
30
+ spec.require_paths = ['lib']
31
+
32
+ # Uncomment to register a new dependency of your gem
33
+ # spec.add_dependency "example-gem", "~> 1.0"
34
+
35
+ # For more information and examples about making a new gem, check out our
36
+ # guide at: https://bundler.io/guides/creating_gem.html
37
+ spec.metadata['rubygems_mfa_required'] = 'true'
38
+
39
+ spec.required_ruby_version = '>= 3.1'
40
+ spec.add_dependency 'httpx', '>= 1.1.5'
41
+ spec.add_dependency 'json-schema', '>= 4.1.1'
42
+ end
@@ -7,6 +7,9 @@ module Anthropic
7
7
  # Error for when the API version is not supported.
8
8
  class UnsupportedApiVersionError < StandardError; end
9
9
 
10
+ # Error for when a beta feature is not used correctly
11
+ class UnsupportedBetaOptionError < StandardError; end
12
+
10
13
  ENDPOINT = 'https://api.anthropic.com/v1/messages'
11
14
  V1_SCHEMA = {
12
15
  type: 'object',
@@ -18,6 +21,14 @@ module Anthropic
18
21
  system: { type: 'string' },
19
22
  stop_sequences: { type: 'array', items: { type: 'string' } },
20
23
  temperature: { type: 'number' },
24
+ tools: {
25
+ type: 'array',
26
+ items: {
27
+ name: { type: 'string' },
28
+ description: { type: 'string' },
29
+ input_schema: { type: 'object' }
30
+ }
31
+ },
21
32
  top_k: { type: 'integer' },
22
33
  top_p: { type: 'number' },
23
34
  metadata: { type: 'object' },
@@ -31,7 +42,10 @@ module Anthropic
31
42
  end
32
43
 
33
44
  def create(**params, &)
45
+ raise UnsupportedBetaOptionError, 'Tool use is not yet supported in streaming mode' if params[:stream] && beta
46
+
34
47
  JSON::Validator.validate!(schema_for_api_version, params)
48
+
35
49
  return Anthropic::Client.post(ENDPOINT, params, additional_headers) unless params[:stream]
36
50
 
37
51
  Anthropic::Client.post_as_stream(ENDPOINT, params, additional_headers, &)
@@ -56,7 +70,7 @@ module Anthropic
56
70
  def additional_headers
57
71
  return {} unless beta
58
72
 
59
- { 'anthropic-beta' => 'messages-2023-12-15' }
73
+ { 'anthropic-beta' => 'tools-2024-04-04' }
60
74
  end
61
75
  end
62
76
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Anthropic
4
- VERSION = '0.3.0'
4
+ VERSION = '0.4.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: anthropic-rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dick Davis
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-12-28 00:00:00.000000000 Z
11
+ date: 2024-04-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httpx
@@ -54,6 +54,7 @@ files:
54
54
  - LICENSE.txt
55
55
  - README.md
56
56
  - Rakefile
57
+ - anthropic-rb.gemspec
57
58
  - lib/anthropic.rb
58
59
  - lib/anthropic/client.rb
59
60
  - lib/anthropic/completions.rb