songtianlun
853a1d03ce
- Adjust formatting for message parameters in the chat call - Eliminate unnecessary blank lines in generate_prompt_request method - Ensure consistent styles for arrays and block indentation These changes improve code readability and maintain consistency in formatting for better maintainability without altering functionality.
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: 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
|