class CapabilityGenerator
def generate_capabilities(existing_code) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
def generate_capabilities(existing_code) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength max_retries = 3 retries = 0 loop do # rubocop:disable Metrics/BlockLength puts " Attempt #{retries + 1}/#{max_retries}..." begin gemini = RubyLLM.chat(model: 'gemini-1.5-pro-latest') .with_temperature(0.1) docs_json = JSON.pretty_generate(@processed_html) prompt = <<~PROMPT Update RubyLLM::Providers::#{@provider_name.capitalize}::Capabilities module. Only use the provided HTML content and existing code structure. Focus on updating values while preserving the module structure. Existing code to maintain structure: ```ruby #{existing_code} ``` HTML content to extract new values from: ```json #{docs_json} ``` Return ONLY the complete Ruby code within ```ruby ``` tags. PROMPT response = gemini.ask(prompt) generated_code = CodeValidator.extract_code_from_response(response.content) return generated_code if generated_code && CodeValidator.validate_syntax(generated_code) rescue RubyLLM::BadRequestError => e puts " Error: #{e.message}" # Try with even less content if we hit token limits @processed_html = @processed_html.transform_values { |html| html[0..10_000] } rescue StandardError => e puts " Error: #{e.class} - #{e.message}" end retries += 1 break if retries >= max_retries end nil end