class AiService def initialize @client = OpenAI::Client.new( access_token: Rails.application.credentials.openai.token, uri_base: Rails.application.credentials.openai.uri, request_timeout: 240 ) end def generate_prompt(city, weather_data) response = @client.chat( parameters: { model: "gpt-4", messages: [ { role: "system", content: "You are a professional artist creating prompts for DALL-E 3. Create realistic, artistic weather scenes featuring iconic landmarks." }, { role: "user", content: generate_prompt_request(city, weather_data) } ], temperature: 0.7, max_tokens: 300 } ) response.dig("choices", 0, "message", "content") end def generate_image(prompt) response = @client.images.generate( parameters: { model: "dall-e-3", prompt: prompt, size: "1792x1024", quality: "standard", n: 1 } ) response.dig("data", 0, "url") end private def generate_prompt_request(city, weather_data) <<~PROMPT Create a DALL-E 3 prompt for a weather scene in #{city.name}, #{city.country.name}. Weather conditions: - Temperature: #{weather_data[:temperature]}°C - Weather: #{weather_data[:description]} - Cloud cover: #{weather_data[:cloud]}% - Time: #{weather_data[:time]} Requirements: - Feature iconic landmarks or architecture from #{city.name} - Realistic style - Weather conditions should be clearly visible - Atmospheric and artistic composition Generate a detailed, creative prompt that will produce a beautiful and realistic image. PROMPT end end