File size: 3,655 Bytes
58ac83f
 
 
ae8b149
2a95781
58ac83f
 
a274967
 
24715fe
 
812ff51
24715fe
 
 
 
 
a274967
58ac83f
 
 
 
 
 
 
 
 
567da63
58ac83f
 
 
 
 
c103376
 
58ac83f
c103376
 
 
a274967
 
 
 
 
 
 
 
58ac83f
01b94bb
 
d7d97f6
24715fe
 
 
 
 
13ba412
d7d97f6
 
 
24715fe
ae8b149
d7d97f6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24715fe
58ac83f
 
 
24715fe
 
498cc41
24715fe
498cc41
24715fe
 
498cc41
 
 
501992b
 
498cc41
 
24715fe
498cc41
 
58ac83f
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
import os
import requests


GROQ_API_URL = "https://api.groq.com/openai/v1/chat/completions"
GROQ_API_KEY = os.getenv("GROQ_API_KEY")  # Secure key from Hugging Face Secrets

if not GROQ_API_KEY:
    raise ValueError("GROQ_API_KEY is missing! Set it in Hugging Face Secrets.")


OPENAI_API_URL = "https://api.openai.com/v1/images/generations"
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")  # Set this in Hugging Face Secrets

if not OPENAI_API_KEY:
    raise ValueError("OPENAI_API_KEY is missing! Set it in Hugging Face Secrets.")

    
# Helper function to load system prompt from txt files
def load_prompt(filename):
    with open(f'config/system_prompts/{filename}', 'r') as file:
        return file.read()

# Function to call Groq API with system prompt and user input
def call_groq(system_prompt, user_input):
    headers = {"Authorization": f"Bearer {GROQ_API_KEY}"}
    payload = {
        "model": "deepseek-r1-distill-llama-70b",
        "messages": [
            {"role": "system", "content": system_prompt},
            {"role": "user", "content": user_input}
        ]
    }
    print("Sending payload to Groq API...")
    print(payload)
    response = requests.post(GROQ_API_URL, json=payload, headers=headers)
    print("Groq API response status:", response.status_code)
    print("Groq API response body:", response.text)

    if response.status_code != 200:
        raise Exception(f"Groq API error: {response.status_code} - {response.text}")
    
    data = response.json()
    if 'choices' not in data or not data['choices']:
        raise Exception("Groq API returned no choices.")

    return data['choices'][0]['message']['content']

import time

def generate_ad_image(prompt, n_images=1, size="1024x1024", model="dall-e-3"):
    headers = {
        "Authorization": f"Bearer {OPENAI_API_KEY}",
        "Content-Type": "application/json"
    }
    payload = {
        "model": model,
        "prompt": prompt,
        "n": n_images,
        "size": size
    }

    response = requests.post(OPENAI_API_URL, json=payload, headers=headers)
    if response.status_code != 200:
        raise Exception(f"OpenAI API error: {response.status_code} - {response.text}")

    data = response.json()
    print("OpenAI API raw response:", data)  # 👈 ADDED for debugging

    if 'data' not in data or not data['data']:
        raise Exception("OpenAI API returned no image data. Check prompt, model, or account limits.")

    image_urls = [item.get('url') for item in data['data'] if 'url' in item]
    if not image_urls:
        raise Exception("No valid image URLs found in OpenAI API response. Possible safety filter block or model issue.")

    return image_urls

def ad_copy_agent(product, description, audience, tone):
    system_prompt = load_prompt("ad_copy_prompt.txt")
    user_input = f"Product: {product}\nDescription: {description}\nAudience: {audience}\nTone: {tone}"
    output = call_groq(system_prompt, user_input)
    
    # Split out the image prompt section
    parts = output.split('Image Prompt:')
    ad_section = parts[0].strip()
    image_prompt = parts[1].strip() if len(parts) > 1 else ''
    
    # Extract clean ad copies
    ad_copies = []
    for line in ad_section.split('\n'):
        if line.strip():
            ad_copies.append(line.strip())

    ad_copy_text = '\n'.join(ad_copies)
    
    return ad_copy_text, image_prompt

def sentiment_agent(social_data):
    system_prompt = load_prompt("sentiment_prompt.txt")
    return call_groq(system_prompt, social_data)

def timing_agent(platform):
    system_prompt = load_prompt("timing_prompt.txt")
    return call_groq(system_prompt, f"Platform: {platform}")