Class: Spacy::AnthropicClient
- Inherits:
-
LLMClientBase
- Object
- LLMClientBase
- Spacy::AnthropicClient
- Defined in:
- lib/ruby-spacy/anthropic_client.rb
Overview
A lightweight Anthropic Messages API client without external dependencies.
Constant Summary collapse
- API_ENDPOINT =
Default Anthropic API endpoint
"https://api.anthropic.com/v1"- ANTHROPIC_VERSION =
Messages API version header value
"2023-06-01"- DEFAULT_MODEL =
Default model for chat requests
"claude-sonnet-5"- APIError =
Raised when an LLM API request fails after retries; carries the HTTP status code and the parsed response body when available.
LLMClientBase::APIError
Constants inherited from LLMClientBase
LLMClientBase::BASE_RETRY_DELAY, LLMClientBase::DEFAULT_TIMEOUT, LLMClientBase::MAX_RETRIES
Instance Method Summary collapse
-
#initialize(access_token:, timeout: DEFAULT_TIMEOUT, base_url: API_ENDPOINT) ⇒ AnthropicClient
constructor
A new instance of AnthropicClient.
-
#messages(model:, messages:, system: nil, max_tokens: 1000, temperature: nil, output_config: nil) ⇒ Hash
Sends a Messages API request.
Constructor Details
#initialize(access_token:, timeout: DEFAULT_TIMEOUT, base_url: API_ENDPOINT) ⇒ AnthropicClient
Returns a new instance of AnthropicClient.
20 21 22 23 |
# File 'lib/ruby-spacy/anthropic_client.rb', line 20 def initialize(access_token:, timeout: DEFAULT_TIMEOUT, base_url: API_ENDPOINT) super(base_url: base_url, timeout: timeout) @access_token = access_token end |
Instance Method Details
#messages(model:, messages:, system: nil, max_tokens: 1000, temperature: nil, output_config: nil) ⇒ Hash
Sends a Messages API request.
The temperature parameter is sent only when explicitly given. Current
Claude models (Opus 4.7+) reject it; the request is then retried once
without it.
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/ruby-spacy/anthropic_client.rb', line 39 def (model:, messages:, system: nil, max_tokens: 1000, temperature: nil, output_config: nil) body = { model: model, max_tokens: max_tokens, messages: } body[:system] = system if system body[:temperature] = temperature unless temperature.nil? body[:output_config] = output_config if output_config post("/messages", body) rescue APIError => e raise unless body.key?(:temperature) && e.status_code == 400 && e..match?(/temperature/i) warn "Warning: model does not support the temperature parameter; retrying without it" post("/messages", body.reject { |key, _| key == :temperature }) end |