Class: ClaudeSwarm::OpenAI::Executor

Inherits:
BaseExecutor show all
Defined in:
lib/claude_swarm/openai/executor.rb

Constant Summary collapse

FARADAY_RETRY_CONFIG =

Static configuration for Faraday retry middleware

{
  max: 3, # Maximum number of retries
  interval: 0.5, # Initial delay between retries (in seconds)
  interval_randomness: 0.5, # Randomness factor for retry intervals
  backoff_factor: 2, # Exponential backoff factor
  exceptions: [
    Faraday::TimeoutError,
    Faraday::ConnectionFailed,
    Faraday::ServerError, # Retry on 5xx errors
  ].freeze,
  retry_statuses: [429, 500, 502, 503, 504].freeze, # HTTP status codes to retry
}.freeze
OPENAI_CLIENT_CONFIG =

Static configuration for OpenAI client

{
  log_errors: true,
  request_timeout: 1800, # 30 minutes
}.freeze

Instance Attribute Summary

Attributes inherited from BaseExecutor

#instance_info, #last_response, #logger, #session_id, #session_json_path, #session_path, #working_directory

Instance Method Summary collapse

Methods inherited from BaseExecutor

#has_session?

Constructor Details

#initialize(working_directory: Dir.pwd, model: nil, mcp_config: nil, vibe: false, instance_name: nil, instance_id: nil, calling_instance: nil, calling_instance_id: nil, claude_session_id: nil, additional_directories: [], debug: false, temperature: nil, api_version: "chat_completion", openai_token_env: "OPENAI_API_KEY", base_url: nil, reasoning_effort: nil, zdr: false) ⇒ Executor

Returns a new instance of Executor.



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/claude_swarm/openai/executor.rb', line 30

def initialize(working_directory: Dir.pwd, model: nil, mcp_config: nil, vibe: false,
  instance_name: nil, instance_id: nil, calling_instance: nil, calling_instance_id: nil,
  claude_session_id: nil, additional_directories: [], debug: false,
  temperature: nil, api_version: "chat_completion", openai_token_env: "OPENAI_API_KEY",
  base_url: nil, reasoning_effort: nil, zdr: false)
  # Call parent initializer for common attributes
  super(
    working_directory: working_directory,
    model: model,
    mcp_config: mcp_config,
    vibe: vibe,
    instance_name: instance_name,
    instance_id: instance_id,
    calling_instance: calling_instance,
    calling_instance_id: calling_instance_id,
    claude_session_id: claude_session_id,
    additional_directories: additional_directories,
    debug: debug
  )

  # OpenAI-specific attributes
  @temperature = temperature
  @api_version = api_version
  @base_url = base_url
  @reasoning_effort = reasoning_effort
  @zdr = zdr

  # Conversation state for maintaining context
  @conversation_messages = []
  @previous_response_id = nil

  # Setup OpenAI client
  setup_openai_client(openai_token_env)

  # Setup MCP client for tools
  setup_mcp_client

  # Create API handler based on api_version
  @api_handler = create_api_handler
end

Instance Method Details

#execute(prompt, options = {}) ⇒ Object



71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/claude_swarm/openai/executor.rb', line 71

def execute(prompt, options = {})
  # Log the request
  log_request(prompt)

  # Start timing
  start_time = Time.now

  # Execute using the appropriate handler
  result = @api_handler.execute(prompt, options)

  # Calculate duration
  duration_ms = ((Time.now - start_time) * 1000).round

  # Build and return response
  build_response(result, duration_ms)
rescue StandardError => e
  logger.error { "Unexpected error for #{@instance_name}: #{e.class} - #{e.message}" }
  logger.error { "Backtrace: #{e.backtrace.join("\n")}" }
  raise
end

#log(event) ⇒ Object



102
103
104
# File 'lib/claude_swarm/openai/executor.rb', line 102

def log(event)
  append_to_session_json(event)
end

#reset_sessionObject



92
93
94
95
# File 'lib/claude_swarm/openai/executor.rb', line 92

def reset_session
  super
  @api_handler&.reset_session
end

#session_json_loggerObject

Session JSON logger for the API handlers



98
99
100
# File 'lib/claude_swarm/openai/executor.rb', line 98

def session_json_logger
  self
end