File: //home/arjun/projects/aigenerator/AI-LG-backend/Ai_logo_generation/utils/slogan_generator.py
from openai import OpenAI
import os
from django.conf import settings
from pydantic import BaseModel, Field
from typing import List, Optional
from enum import Enum
client = OpenAI(api_key=settings.OPENAI_API_KEY)
class PromptCategory(str, Enum):
related_to_slogan_generation = "related_to_slogan_generation"
not_related_to_slogan_generation = "not_related_to_slogan_generation"
class PromptRelevance(BaseModel):
category: PromptCategory
is_prompt_relevant_to_slogan_generation: bool
class SloganResponse(BaseModel):
count: Optional[int] = Field(description="Number of slogans to generate. Defaults to 10 if not mentioned by the user. If the user provided value is greater than 10 ignore user count and use 10 only.")
slogan: List[str] = Field(..., description="List of generated slogans.")
def generate_slogan(user_prompt:str, model:str = "gpt-4o-mini") -> List[str]:
completion = client.beta.chat.completions.parse(
model=model,
messages=[
{"role": "system", "content": "Determine if the user input is related to slogan generation."},
{"role": "user", "content": user_prompt}
],
response_format=PromptRelevance,
max_tokens= 2048
)
prompt_relevance = completion.choices[0].message
if prompt_relevance.parsed:
# Check if the user prompt is relevant or not
if prompt_relevance.parsed.is_prompt_relevant_to_slogan_generation:
print('Relevant Prompt')
additional_instructions = "Provide a mix of slogan styles (e.g., catchy, descriptive, aspirational) that reflect the brand's essence and resonate with the target audience."
completion = client.beta.chat.completions.parse(
model=model,
messages=[
{"role": "system", "content": "Generate a list of creative, memorable slogans for a business based on the details provided below. Tailor the slogans to highlight the unique value, target audience, and brand tone described. Keep each slogan concise, engaging, and aligned with the brand's personality."},
{"role": "user", "content": f"{user_prompt}\n{additional_instructions}"}
],
response_format=SloganResponse,
max_tokens=2048
)
slogan_response = completion.choices[0].message
if slogan_response.parsed:
result = slogan_response.parsed.slogan
return result[:10] # List of generated responses atmost 10 results only
else:
print('Not a Relevant Prompt')
return []
elif prompt_relevance.refusal:
print(f"Invalid input : {prompt_relevance.refusal}")
return []