songtianlun
d728d7f50e
- Created BatchGenerateWeatherArtsJob to process eligible cities and generate weather art. - Introduced GenerateWeatherArtJob for generating weather art and image attachment. - Added AiService for obtaining prompts and generating images with OpenAI API. - Implemented WeatherService to fetch current weather data from the QWeather API. - Updated Gemfile with necessary gems (whenever, ruby-openai, httparty, down, aws-sdk-s3). This commit introduces a system to create and store weather art images for various cities based on current weather conditions, leveraging external APIs for data and image generation.
64 lines
1.8 KiB
Ruby
64 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: Early morning
|
|
|
|
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 |