99 lines
2.8 KiB
Python
99 lines
2.8 KiB
Python
|
|
from transformers import pipeline
|
||
|
|
from typing import List, Optional
|
||
|
|
import torch
|
||
|
|
from finetuned_model import finetuned_model
|
||
|
|
|
||
|
|
class MarketingCopywriter:
|
||
|
|
def __init__(self):
|
||
|
|
# Use the finetuned model instead of the default GPT-2
|
||
|
|
self.model = finetuned_model
|
||
|
|
|
||
|
|
def generate(
|
||
|
|
self,
|
||
|
|
prompt: str,
|
||
|
|
content_type: str,
|
||
|
|
similar_content: List[str],
|
||
|
|
tone: Optional[str] = None,
|
||
|
|
) -> str:
|
||
|
|
# Generate the marketing copy using the finetuned model
|
||
|
|
generated_texts = self.model.generate_with_context(
|
||
|
|
prompt=prompt,
|
||
|
|
content_type=content_type,
|
||
|
|
similar_content=similar_content,
|
||
|
|
tone=tone,
|
||
|
|
max_length=500,
|
||
|
|
num_return_sequences=1,
|
||
|
|
temperature=0.7,
|
||
|
|
top_p=0.9
|
||
|
|
)
|
||
|
|
|
||
|
|
# Return the first generated text
|
||
|
|
return generated_texts[0] if generated_texts else ""
|
||
|
|
|
||
|
|
def _build_context(
|
||
|
|
self,
|
||
|
|
prompt: str,
|
||
|
|
content_type: str,
|
||
|
|
similar_content: List[str],
|
||
|
|
tone: Optional[str],
|
||
|
|
target_audience: Optional[str]
|
||
|
|
) -> str:
|
||
|
|
context = f"Content Type: {content_type}\n"
|
||
|
|
if tone:
|
||
|
|
context += f"Tone: {tone}\n"
|
||
|
|
if target_audience:
|
||
|
|
context += f"Target Audience: {target_audience}\n"
|
||
|
|
|
||
|
|
context += "\nSimilar Content Examples:\n"
|
||
|
|
for content in similar_content[:3]: # Use top 3 similar content pieces
|
||
|
|
context += f"- {content}\n"
|
||
|
|
|
||
|
|
context += f"\nGenerate marketing copy for: {prompt}\n"
|
||
|
|
return context
|
||
|
|
|
||
|
|
def _post_process(self, text: str) -> str:
|
||
|
|
# Clean up the generated text
|
||
|
|
text = text.strip()
|
||
|
|
# Add any additional post-processing steps here
|
||
|
|
return text
|
||
|
|
|
||
|
|
# Initialize the copywriter
|
||
|
|
copywriter = MarketingCopywriter()
|
||
|
|
|
||
|
|
def generate_marketing_copy(
|
||
|
|
prompt: str,
|
||
|
|
content_type: str,
|
||
|
|
similar_content: List[str],
|
||
|
|
tone: Optional[str] = None,
|
||
|
|
target_audience: Optional[str] = None
|
||
|
|
) -> str:
|
||
|
|
"""
|
||
|
|
Generate marketing copy based on the given parameters.
|
||
|
|
|
||
|
|
Args:
|
||
|
|
prompt: The main prompt for content generation
|
||
|
|
content_type: Type of content (email, social media, etc.)
|
||
|
|
similar_content: List of similar content for context
|
||
|
|
tone: Optional tone specification
|
||
|
|
target_audience: Optional target audience specification
|
||
|
|
|
||
|
|
Returns:
|
||
|
|
Generated marketing copy
|
||
|
|
"""
|
||
|
|
return copywriter.generate(
|
||
|
|
prompt=prompt,
|
||
|
|
content_type=content_type,
|
||
|
|
similar_content=similar_content,
|
||
|
|
tone=tone,
|
||
|
|
target_audience=target_audience
|
||
|
|
)
|
||
|
|
|
||
|
|
|
||
|
|
generate_marketing_copy(
|
||
|
|
prompt="Help me write a blog post about the benefits of using our product",
|
||
|
|
content_type="blog post",
|
||
|
|
similar_content=[],
|
||
|
|
tone="",
|
||
|
|
target_audience=""
|
||
|
|
)
|