HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
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 []