Class: Spacy::OpenAIHelper
- Inherits:
-
Object
- Object
- Spacy::OpenAIHelper
- Defined in:
- lib/ruby-spacy/openai_helper.rb
Overview
A helper class for OpenAI API interactions, designed to work with spaCy's linguistic analysis via the block-based Language#with_llm / Language#with_openai API.
With a custom base_url, this helper also works with any OpenAI-compatible
server such as Ollama, LM Studio, llama.cpp server, or vLLM.
Instance Attribute Summary collapse
-
#model ⇒ String
readonly
The default model for chat requests.
Instance Method Summary collapse
-
#chat(system: nil, user: nil, messages: nil, model: nil, max_completion_tokens: nil, max_tokens: nil, temperature: nil, response_format: nil, schema: nil, raw: false) ⇒ String, ...
Sends a chat completion request.
-
#embeddings(text, model: OpenAIClient::DEFAULT_EMBEDDINGS_MODEL, dimensions: nil) ⇒ Array<Float>?
Generates text embeddings using the embeddings API.
-
#initialize(access_token: nil, model: OpenAIClient::DEFAULT_MODEL, max_completion_tokens: 1000, max_tokens: nil, temperature: nil, base_url: nil) ⇒ OpenAIHelper
constructor
Creates a new OpenAIHelper instance.
Constructor Details
#initialize(access_token: nil, model: OpenAIClient::DEFAULT_MODEL, max_completion_tokens: 1000, max_tokens: nil, temperature: nil, base_url: nil) ⇒ OpenAIHelper
Creates a new OpenAIHelper instance.
35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/ruby-spacy/openai_helper.rb', line 35 def initialize(access_token: nil, model: OpenAIClient::DEFAULT_MODEL, max_completion_tokens: 1000, max_tokens: nil, temperature: nil, base_url: nil) @access_token = access_token || ENV["OPENAI_API_KEY"] raise "Error: OPENAI_API_KEY is not set" unless @access_token @model = model @default_max_completion_tokens = max_tokens || max_completion_tokens @default_temperature = temperature @client = OpenAIClient.new(access_token: @access_token, base_url: base_url || OpenAIClient::API_ENDPOINT) end |
Instance Attribute Details
#model ⇒ String (readonly)
Returns the default model for chat requests.
24 25 26 |
# File 'lib/ruby-spacy/openai_helper.rb', line 24 def model @model end |
Instance Method Details
#chat(system: nil, user: nil, messages: nil, model: nil, max_completion_tokens: nil, max_tokens: nil, temperature: nil, response_format: nil, schema: nil, raw: false) ⇒ String, ...
Sends a chat completion request.
Provides convenient system: and user: keyword arguments as shortcuts
for building simple message arrays. For more complex conversations, pass
a full messages: array directly.
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
# File 'lib/ruby-spacy/openai_helper.rb', line 70 def chat(system: nil, user: nil, messages: nil, model: nil, max_completion_tokens: nil, max_tokens: nil, temperature: nil, response_format: nil, schema: nil, raw: false) msgs = || (system: system, user: user) raise ArgumentError, "No messages provided. Use system:/user: or messages:" if msgs.empty? if schema response_format = { type: "json_schema", json_schema: { name: "response", strict: true, schema: schema } } end response = @client.chat( model: model || @model, messages: msgs, max_completion_tokens: max_tokens || max_completion_tokens || @default_max_completion_tokens, temperature: temperature || @default_temperature, response_format: response_format ) return response if raw choice = response.dig("choices", 0) if choice&.dig("finish_reason") == "length" warn "Warning: response was truncated (finish_reason: length); consider increasing max_completion_tokens" end content = choice&.dig("message", "content") schema && content ? parse_json_content(content) : content rescue OpenAIClient::APIError => e warn "Error: OpenAI API call failed - #{e.}" nil end |
#embeddings(text, model: OpenAIClient::DEFAULT_EMBEDDINGS_MODEL, dimensions: nil) ⇒ Array<Float>?
Generates text embeddings using the embeddings API.
111 112 113 114 115 116 117 |
# File 'lib/ruby-spacy/openai_helper.rb', line 111 def (text, model: OpenAIClient::DEFAULT_EMBEDDINGS_MODEL, dimensions: nil) response = @client.(model: model, input: text, dimensions: dimensions) response.dig("data", 0, "embedding") rescue OpenAIClient::APIError => e warn "Error: OpenAI API call failed - #{e.}" nil end |