89 lines
3.5 KiB
Python
89 lines
3.5 KiB
Python
from typing import List, Dict, Any
|
|
import requests
|
|
import json
|
|
from config import settings
|
|
from brand_style import BrandStyleManager
|
|
|
|
# Initialize brand style manager
|
|
brand_style_manager = BrandStyleManager()
|
|
|
|
class MarketingCopywriter:
|
|
def __init__(self):
|
|
self.settings = settings
|
|
self.api_key = self.settings.DEEPSEEK_API_KEY
|
|
self.api_url = "https://api.deepseek.com/v1/chat/completions"
|
|
|
|
def _build_prompt(self, prompt: str, context: List[Dict], content_type: str, tone: str,
|
|
brand_voice: Dict[str, Any], sample_campaigns: List[Dict[str, Any]]) -> str:
|
|
"""Build a prompt for the LLM using context and parameters."""
|
|
# Format context from book excerpts
|
|
context_text = "\n".join([f"Reference {i+1}: {ctx['text']}" for i, ctx in enumerate(context)])
|
|
|
|
# Format brand voice guidelines
|
|
brand_voice_text = json.dumps(brand_voice, indent=2)
|
|
|
|
# Format sample campaigns
|
|
sample_campaigns_text = ""
|
|
for i, campaign in enumerate(sample_campaigns):
|
|
sample_campaigns_text += f"\nExample Campaign {i+1}:\n"
|
|
sample_campaigns_text += f"Title: {campaign.get('title', '')}\n"
|
|
sample_campaigns_text += f"Subject: {campaign.get('subject', '')}\n"
|
|
sample_campaigns_text += f"Content:\n{campaign.get('content', '')}\n"
|
|
|
|
return f"""You are a professional marketing copywriter for {self.settings.BRAND_VOICE}.
|
|
Your task is to create {content_type} content that matches the following request: {prompt}
|
|
|
|
BRAND VOICE GUIDELINES:
|
|
{brand_voice_text}
|
|
|
|
SAMPLE CAMPAIGNS:
|
|
{sample_campaigns_text}
|
|
|
|
RELEVANT BOOK EXCERPTS:
|
|
{context_text}
|
|
|
|
Guidelines:
|
|
1. Maintain a {tone} tone throughout
|
|
2. Follow {self.settings.BRAND_VOICE}'s brand voice guidelines
|
|
3. Be persuasive and engaging
|
|
4. Include a clear call-to-action
|
|
5. Keep the content concise and impactful
|
|
|
|
Generate the marketing copy:"""
|
|
|
|
def generate_copy(self, prompt: str, context: List[Dict], content_type: str, tone: str,
|
|
brand_voice: Dict[str, Any], sample_campaigns: List[Dict[str, Any]]) -> str:
|
|
"""Generate marketing copy using DeepSeek."""
|
|
full_prompt = self._build_prompt(prompt, context, content_type, tone, brand_voice, sample_campaigns)
|
|
|
|
headers = {
|
|
"Authorization": f"Bearer {self.api_key}",
|
|
"Content-Type": "application/json"
|
|
}
|
|
|
|
data = {
|
|
"model": self.settings.DEFAULT_MODEL,
|
|
"messages": [
|
|
{"role": "system", "content": "You are a professional marketing copywriter."},
|
|
{"role": "user", "content": full_prompt}
|
|
],
|
|
"temperature": 0.7,
|
|
"max_tokens": 1000
|
|
}
|
|
|
|
response = requests.post(self.api_url, headers=headers, json=data)
|
|
response.raise_for_status()
|
|
|
|
return response.json()["choices"][0]["message"]["content"].strip()
|
|
|
|
def generate_marketing_copy(prompt: str) -> str:
|
|
"""Helper function to generate marketing copy."""
|
|
copywriter = MarketingCopywriter()
|
|
context = brand_style_manager.get_relevant_context(prompt)
|
|
content_type = "email"
|
|
tone = "professional and empathetic"
|
|
brand_voice = brand_style_manager.get_brand_voice()
|
|
sample_campaigns = brand_style_manager.get_sample_campaigns()
|
|
return copywriter.generate_copy(prompt, context, content_type, tone, brand_voice, sample_campaigns)
|
|
|
|
print(generate_marketing_copy("Generate a marketing campaign for our new comers")) |