Class: I18nContextGenerator::LLM::OpenAI

Inherits:
Client
  • Object
show all
Defined in:
lib/i18n_context_generator/llm/openai.rb

Overview

OpenAI Responses API implementation of the LLM client.

Direct Known Subclasses

OpenAICompatible

Constant Summary collapse

API_URL =
'https://api.openai.com/v1/responses'
DEFAULT_MODEL =
'gpt-5-mini'

Constants inherited from Client

Client::CONFIDENCE_LEVELS, Client::DEFAULT_MAX_PROMPT_CHARS, Client::MAX_AMBIGUITY_REASON_LENGTH, Client::MAX_DESCRIPTION_LENGTH, Client::MAX_OUTPUT_TOKENS, Client::MAX_TRANSLATION_LENGTH, Client::MIN_MAX_PROMPT_CHARS, Client::RESPONSE_FIELDS, Client::RESPONSE_SCHEMA, Client::SYSTEM_PROMPT, Client::TONES, Client::UI_ELEMENTS

Constants included from RequestPolicy

RequestPolicy::MAX_RETRIES, RequestPolicy::MAX_RETRY_DELAY, RequestPolicy::RETRYABLE_STATUS_CODES, RequestPolicy::TRANSIENT_NETWORK_ERRORS

Instance Method Summary collapse

Methods inherited from Client

default_model_for, for, provider_class, #resolved_model, #validate_supplemental_context!

Constructor Details

#initialize(api_url: API_URL, api_key: ENV.fetch('OPENAI_API_KEY', nil), require_api_key: true) ⇒ OpenAI

Returns a new instance of OpenAI.

Raises:



10
11
12
13
14
15
16
# File 'lib/i18n_context_generator/llm/openai.rb', line 10

def initialize(api_url: API_URL, api_key: ENV.fetch('OPENAI_API_KEY', nil), require_api_key: true)
  super()
  @api_key = api_key
  raise Error, 'OPENAI_API_KEY environment variable is required' if require_api_key && !@api_key

  @uri = URI(api_url)
end

Instance Method Details

#generate_context(key:, text:, matches:, model: nil, comment: nil, include_file_paths: false, redact_prompts: true, max_prompt_chars: nil, supplemental_context: []) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/i18n_context_generator/llm/openai.rb', line 18

def generate_context(key:, text:, matches:, model: nil, comment: nil,
                     include_file_paths: false, redact_prompts: true,
                     max_prompt_chars: nil, supplemental_context: [])
  outcome = nil
  model = resolved_model(model)
  prompt = build_prompt(
    key: key,
    text: text,
    matches: matches,
    comment: comment,
    include_file_paths: include_file_paths,
    redact_prompts: redact_prompts,
    max_prompt_chars: max_prompt_chars,
    supplemental_context: supplemental_context
  )
  outcome = request_with_retries(uri: @uri) { post_request(model: model, prompt: prompt) }
  handle_response(outcome.response, retries: outcome.retries)
rescue PromptPreparationError => e
  ContextResult.new(description: 'Prompt preparation failed', error: e.message)
rescue StandardError => e
  ContextResult.new(
    description: 'API request failed',
    error: e.message,
    **failure_request_telemetry(e, outcome: outcome)
  )
end