Some checks are pending
Docker / docker (push) Waiting to run
- Include actual update time in weather report - Rename watermark worker file for clarity This commit enhances the weather data report by updating the format to include the actual update time retrieved from the weather service API. Additionally, the watermark worker file has been renamed to improve readability and consistency in the naming convention.
65 lines
1.8 KiB
Ruby
65 lines
1.8 KiB
Ruby
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
|