class Captain::Llm::FaqGeneratorService < Llm::BaseOpenAiService def initialize(content) super() @content = content end def generate response = @client.chat(parameters: chat_parameters) parse_response(response) rescue OpenAI::Error => e Rails.logger.error "OpenAI API Error: #{e.message}" [] end private attr_reader :content def chat_parameters prompt = Captain::Llm::SystemPromptsService.faq_generator { model: @model, response_format: { type: 'json_object' }, messages: [ { role: 'system', content: prompt }, { role: 'user', content: content } ] } end def parse_response(response) content = response.dig('choices', 0, 'message', 'content') return [] if content.nil? JSON.parse(content.strip).fetch('faqs', []) rescue JSON::ParserError => e Rails.logger.error "Error in parsing GPT processed response: #{e.message}" [] end end