feat(feedback): Add content improvement feedback system
Frontend (frontend/app.js): - Add textarea for improvement feedback - Add submit button with loading state - Handle API response and display improved content Backend (backend/copywriter.py): - Add improve_copy() method using Cohere API - Integrate retry mechanism for API calls Backend (backend/main.py): - Add /improve-content POST endpoint - Implement error handling and return improved content with metadata Testing: - Verified feedback submission flow - Confirmed improved content generation - Tested error scenarios and loading states
This commit is contained in:
@@ -38,6 +38,11 @@ data/past_campaigns/*
|
|||||||
data/user_queries/*
|
data/user_queries/*
|
||||||
!data/past_campaigns/.gitkeep
|
!data/past_campaigns/.gitkeep
|
||||||
!data/user_queries/.gitkeep
|
!data/user_queries/.gitkeep
|
||||||
|
backend/data/vector_store/*
|
||||||
|
!backend/data/vector_store/.gitkeep
|
||||||
|
|
||||||
|
# Logs
|
||||||
|
logs/*
|
||||||
|
|
||||||
# OS specific
|
# OS specific
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
|||||||
+135
-45
@@ -18,6 +18,104 @@ class BrandStyleManager:
|
|||||||
"""Initialize the BrandStyleManager with default or stored style guidelines."""
|
"""Initialize the BrandStyleManager with default or stored style guidelines."""
|
||||||
self.style_path = Path(config.DATA_DIR) / "style_guidelines" / "brand_style.json"
|
self.style_path = Path(config.DATA_DIR) / "style_guidelines" / "brand_style.json"
|
||||||
self.style_guidelines = self._load_or_create_style()
|
self.style_guidelines = self._load_or_create_style()
|
||||||
|
self.content_formats = {
|
||||||
|
"website_copy": """
|
||||||
|
Generate engaging website copy for a brand or business.
|
||||||
|
- Start with a strong headline and supporting subheadline
|
||||||
|
- Write in a clear, benefit-driven tone
|
||||||
|
- Use SEO-friendly keywords naturally
|
||||||
|
- Structure content with short paragraphs and bullet points
|
||||||
|
- Include a clear call-to-action at the end
|
||||||
|
""",
|
||||||
|
"email": """
|
||||||
|
Create a marketing or sales email for a target audience.
|
||||||
|
- Start with a compelling subject line
|
||||||
|
- Use a warm, conversational tone
|
||||||
|
- Keep the message focused and value-driven
|
||||||
|
- Personalize where possible (name, context)
|
||||||
|
- End with a clear and persuasive CTA
|
||||||
|
""",
|
||||||
|
"social_media": """
|
||||||
|
Write social media content tailored to a specific platform.
|
||||||
|
- Hook the reader within the first sentence
|
||||||
|
- Keep the message concise and engaging
|
||||||
|
- Use platform-appropriate tone and emojis (if applicable)
|
||||||
|
- Add relevant hashtags and tag accounts when needed
|
||||||
|
- Include a prompt or CTA to drive interaction
|
||||||
|
""",
|
||||||
|
"blog_post": """
|
||||||
|
Generate a blog article on a given topic or keyword.
|
||||||
|
- Begin with a strong hook or introduction
|
||||||
|
- Organize content with subheadings and logical flow
|
||||||
|
- Use examples, data, and storytelling
|
||||||
|
- Optimize for SEO with keywords and meta description
|
||||||
|
- Conclude with a summary or actionable insight
|
||||||
|
""",
|
||||||
|
"sales_copy": """
|
||||||
|
Write persuasive sales copy for a product or service.
|
||||||
|
- Lead with a strong value proposition
|
||||||
|
- Address specific pain points and offer solutions
|
||||||
|
- Highlight features, benefits, and outcomes
|
||||||
|
- Include social proof (testimonials, stats, etc.)
|
||||||
|
- End with a direct and compelling CTA
|
||||||
|
""",
|
||||||
|
"ad_copy": """
|
||||||
|
Create short, punchy ad copy for digital or print campaigns.
|
||||||
|
- Capture attention in the first line
|
||||||
|
- Use emotional or benefit-driven language
|
||||||
|
- Keep it brief and persuasive
|
||||||
|
- Align copy with the target audience
|
||||||
|
- Include a CTA or promotional message
|
||||||
|
""",
|
||||||
|
"video_script": """
|
||||||
|
Generate a short video script for a marketing video.
|
||||||
|
- Hook the viewer in the first few seconds
|
||||||
|
- Introduce the problem and present the solution
|
||||||
|
- Keep the tone conversational and natural
|
||||||
|
- Include visual cues and on-screen text ideas
|
||||||
|
- Wrap up with a strong CTA
|
||||||
|
""",
|
||||||
|
"case_study": """
|
||||||
|
Write a case study that highlights a customer success story.
|
||||||
|
- Start with a quick summary of the results
|
||||||
|
- Describe the client and their initial problem
|
||||||
|
- Explain how the product/service helped
|
||||||
|
- Include measurable outcomes or metrics
|
||||||
|
- End with a quote and a CTA to learn more
|
||||||
|
""",
|
||||||
|
"product_description": """
|
||||||
|
Generate a product description that drives interest and conversions.
|
||||||
|
- Begin with the most attractive benefit
|
||||||
|
- Mention key features and what makes the product unique
|
||||||
|
- Use sensory and persuasive language
|
||||||
|
- Include important specs or FAQs
|
||||||
|
- End with a micro-CTA (e.g., "Shop now", "View details")
|
||||||
|
""",
|
||||||
|
"landing_page": """
|
||||||
|
Write copy for a focused landing page.
|
||||||
|
- Use a bold, attention-grabbing headline
|
||||||
|
- Describe the offer clearly and simply
|
||||||
|
- Include supporting details that reinforce value
|
||||||
|
- Remove distractions and focus on a single goal
|
||||||
|
- Add a CTA above the fold and at the end
|
||||||
|
""",
|
||||||
|
"press_release": """
|
||||||
|
Create a professional press release for an announcement.
|
||||||
|
- Begin with a headline that summarizes the news
|
||||||
|
- Use a journalistic tone and structure
|
||||||
|
- Provide key facts in the first paragraph
|
||||||
|
- Add quotes from relevant leaders or stakeholders
|
||||||
|
- End with boilerplate company info and contact details
|
||||||
|
""",
|
||||||
|
"newsletter": """
|
||||||
|
Write a newsletter update for subscribers.
|
||||||
|
- Start with a warm greeting or short intro
|
||||||
|
- Highlight the most important news or offer first
|
||||||
|
- Use engaging sub-sections or article teasers
|
||||||
|
- Maintain consistent tone with the brand
|
||||||
|
- Include CTAs to drive clicks or traffic
|
||||||
|
"""
|
||||||
|
}
|
||||||
logger.info("BrandStyleManager initialized successfully")
|
logger.info("BrandStyleManager initialized successfully")
|
||||||
|
|
||||||
def _load_or_create_style(self) -> Dict[str, Any]:
|
def _load_or_create_style(self) -> Dict[str, Any]:
|
||||||
@@ -84,55 +182,29 @@ class BrandStyleManager:
|
|||||||
raise
|
raise
|
||||||
|
|
||||||
def format_prompt_with_brand_style(self, user_prompt: str, content_type: Optional[str] = None) -> str:
|
def format_prompt_with_brand_style(self, user_prompt: str, content_type: Optional[str] = None) -> str:
|
||||||
"""
|
"""Format user prompt to match the established writing style."""
|
||||||
Format user prompt with brand style guidelines for the LLM.
|
|
||||||
|
|
||||||
Args:
|
style_instructions = [
|
||||||
user_prompt: Original user prompt
|
"Follow these writing style guidelines:",
|
||||||
content_type: Type of content being generated
|
"- Use direct commands that empower the reader",
|
||||||
|
"- Address the reader directly using 'you' and 'your'",
|
||||||
Returns:
|
"- Create rhythmic, repetitive patterns in key messages",
|
||||||
Formatted prompt with brand style instructions
|
"- Maintain a clear, confident, and authoritative tone",
|
||||||
"""
|
"- Use simple, practical language without jargon",
|
||||||
style = self.style_guidelines
|
"- Acknowledge challenges while focusing on solutions",
|
||||||
|
"- Include empowering phrases that emphasize reader's control and choice"
|
||||||
# Create a formatted prompt with brand style instructions
|
|
||||||
prompt_parts = [
|
|
||||||
f"Generate marketing content for {style['brand_name']} based on the following request:",
|
|
||||||
f"\"{user_prompt}\"",
|
|
||||||
"\nFollow these brand style guidelines:",
|
|
||||||
f"- Brand Name: {style['brand_name']}",
|
|
||||||
f"- Tone: {', '.join(style.get('tone', []))}",
|
|
||||||
f"- Voice Characteristics: {', '.join(style.get('voice_characteristics', []))}",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
# Add taboo words if any
|
# Content type specific formatting
|
||||||
if 'taboo_words' in style and style['taboo_words']:
|
content_format = self._get_content_format(content_type) if content_type else ""
|
||||||
prompt_parts.append(f"- Avoid these words: {', '.join(style['taboo_words'])}")
|
|
||||||
|
|
||||||
# Add preferred terms if any
|
return "\n".join([
|
||||||
if 'preferred_terms' in style and style['preferred_terms']:
|
f"Generate content based on this request:",
|
||||||
terms = [f"use '{value}' instead of '{key}'" for key, value in style['preferred_terms'].items()]
|
f"\"{user_prompt}\"",
|
||||||
prompt_parts.append(f"- Preferred terminology: {'; '.join(terms)}")
|
"",
|
||||||
|
"\n".join(style_instructions),
|
||||||
# Add content type specific instructions
|
content_format
|
||||||
if content_type:
|
])
|
||||||
if content_type == "email_campaign":
|
|
||||||
prompt_parts.append("- Format as a professional email with subject line, greeting, body, and signature")
|
|
||||||
elif content_type == "social_media":
|
|
||||||
prompt_parts.append("- Format as a concise social media post with appropriate hashtags")
|
|
||||||
elif content_type == "blog_post":
|
|
||||||
prompt_parts.append("- Format as a blog post with title, introduction, body with subheadings, and conclusion")
|
|
||||||
elif content_type == "website_copy":
|
|
||||||
prompt_parts.append("- Format as website copy with clear headings and concise paragraphs")
|
|
||||||
elif content_type == "ad_copy":
|
|
||||||
prompt_parts.append("- Format as advertising copy with headline, body, and clear call to action")
|
|
||||||
|
|
||||||
# Combine all parts
|
|
||||||
formatted_prompt = "\n".join(prompt_parts)
|
|
||||||
|
|
||||||
logger.debug("Created formatted prompt with brand style")
|
|
||||||
return formatted_prompt
|
|
||||||
|
|
||||||
def check_content_alignment(self, content: str) -> Dict[str, Any]:
|
def check_content_alignment(self, content: str) -> Dict[str, Any]:
|
||||||
"""
|
"""
|
||||||
@@ -171,5 +243,23 @@ class BrandStyleManager:
|
|||||||
'aligned': alignment_score >= 80 # Consider aligned if score is 80% or higher
|
'aligned': alignment_score >= 80 # Consider aligned if score is 80% or higher
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def _get_content_format(self, content_type: str) -> str:
|
||||||
|
"""
|
||||||
|
Get formatting instructions for specific content type.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
content_type: Type of content to generate
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Formatting instructions as string
|
||||||
|
"""
|
||||||
|
if not content_type:
|
||||||
|
return ""
|
||||||
|
|
||||||
|
format_instructions = self.content_formats.get(content_type, "")
|
||||||
|
if format_instructions:
|
||||||
|
return f"\nContent type specific instructions:\n{format_instructions.strip()}"
|
||||||
|
return ""
|
||||||
|
|
||||||
# Create a singleton instance
|
# Create a singleton instance
|
||||||
brand_style_manager = BrandStyleManager()
|
brand_style_manager = BrandStyleManager()
|
||||||
+23
-19
@@ -38,26 +38,26 @@ BRAND_NAME = os.getenv("BRAND_NAME", "Adriana James")
|
|||||||
|
|
||||||
# Content types
|
# Content types
|
||||||
CONTENT_TYPES = [
|
CONTENT_TYPES = [
|
||||||
"email_campaign",
|
"website_copy",
|
||||||
|
"email",
|
||||||
"social_media",
|
"social_media",
|
||||||
"blog_post",
|
"blog_post",
|
||||||
"website_copy",
|
"sales_copy",
|
||||||
"ad_copy",
|
"ad_copy",
|
||||||
"funnel_page",
|
"video_script",
|
||||||
|
"case_study",
|
||||||
"product_description",
|
"product_description",
|
||||||
"press_release"
|
"landing_page",
|
||||||
|
"press_release",
|
||||||
|
"newsletter"
|
||||||
]
|
]
|
||||||
|
|
||||||
# Tone options
|
# Tone options - simplified to match the core style
|
||||||
TONE_OPTIONS = [
|
TONE_OPTIONS = [
|
||||||
"professional",
|
"direct",
|
||||||
"friendly",
|
"empowering",
|
||||||
"excited",
|
"confident",
|
||||||
"authoritative",
|
"practical"
|
||||||
"casual",
|
|
||||||
"inspirational",
|
|
||||||
"empathetic",
|
|
||||||
"humorous"
|
|
||||||
]
|
]
|
||||||
|
|
||||||
# Content length options
|
# Content length options
|
||||||
@@ -69,13 +69,17 @@ LENGTH_OPTIONS = [
|
|||||||
|
|
||||||
# Default brand style guidelines
|
# Default brand style guidelines
|
||||||
DEFAULT_BRAND_STYLE = {
|
DEFAULT_BRAND_STYLE = {
|
||||||
"brand_name": BRAND_NAME,
|
"tone": ["direct", "empowering", "confident", "practical"],
|
||||||
"tone": ["professional", "friendly", "inspirational"],
|
"voice_characteristics": ["clear", "authoritative", "steady", "rhythmic"],
|
||||||
"voice_characteristics": ["clear", "direct", "empowering"],
|
"writing_patterns": ["direct commands", "personal pronouns", "repetitive rhythms"],
|
||||||
"taboo_words": ["cheap", "discount", "bargain"],
|
"taboo_words": ["cheap", "discount", "bargain", "failure", "impossible", "difficult"],
|
||||||
"preferred_terms": {
|
"preferred_terms": {
|
||||||
"customers": "clients",
|
"problems": "challenges",
|
||||||
"products": "solutions"
|
"try": "take action",
|
||||||
|
"difficult": "ready for growth",
|
||||||
|
"failure": "learning opportunity",
|
||||||
|
"hope": "know",
|
||||||
|
"maybe": "will"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+45
-42
@@ -28,7 +28,6 @@ class Copywriter:
|
|||||||
self,
|
self,
|
||||||
prompt: str,
|
prompt: str,
|
||||||
content_type: Optional[str] = None,
|
content_type: Optional[str] = None,
|
||||||
tone: Optional[str] = None,
|
|
||||||
length: Optional[str] = None,
|
length: Optional[str] = None,
|
||||||
include_cta: bool = False,
|
include_cta: bool = False,
|
||||||
reference_similar_content: bool = True,
|
reference_similar_content: bool = True,
|
||||||
@@ -36,18 +35,7 @@ class Copywriter:
|
|||||||
) -> Dict[str, Any]:
|
) -> Dict[str, Any]:
|
||||||
"""
|
"""
|
||||||
Generate marketing copy based on the user prompt and parameters.
|
Generate marketing copy based on the user prompt and parameters.
|
||||||
|
Note: Removed tone parameter as we always use the established style
|
||||||
Args:
|
|
||||||
prompt: User prompt for content generation
|
|
||||||
content_type: Type of content to generate
|
|
||||||
tone: Desired tone of the content
|
|
||||||
length: Desired length of the content
|
|
||||||
include_cta: Whether to include a call to action
|
|
||||||
reference_similar_content: Whether to fetch and reference similar content
|
|
||||||
max_tokens: Maximum tokens for the generated response
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
Dictionary with generated content and metadata
|
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
# Step 1: Format prompt with brand style guidelines
|
# Step 1: Format prompt with brand style guidelines
|
||||||
@@ -60,35 +48,19 @@ class Copywriter:
|
|||||||
if search_results:
|
if search_results:
|
||||||
reference_content = [result['text'] for result in search_results]
|
reference_content = [result['text'] for result in search_results]
|
||||||
|
|
||||||
# Step 3: Add additional instructions based on parameters
|
# Step 3: Add length and CTA instructions if needed
|
||||||
full_prompt = branded_prompt
|
|
||||||
|
|
||||||
if tone:
|
|
||||||
full_prompt += f"\n- Use a {tone} tone"
|
|
||||||
|
|
||||||
if length:
|
if length:
|
||||||
length_instructions = {
|
branded_prompt += f"\n- Generate {length} content"
|
||||||
"short": "Keep the content brief and to the point (under 100 words).",
|
|
||||||
"medium": "Write a moderate amount of content (100-300 words).",
|
|
||||||
"long": "Create comprehensive content with depth (over 300 words)."
|
|
||||||
}
|
|
||||||
full_prompt += f"\n- {length_instructions.get(length, '')}"
|
|
||||||
|
|
||||||
if include_cta:
|
if include_cta:
|
||||||
full_prompt += "\n- Include a strong call to action at the end"
|
branded_prompt += "\n- Include a direct, empowering call to action"
|
||||||
|
|
||||||
# Step 4: Add reference content if available
|
# Step 4: Add reference content if available
|
||||||
if reference_content:
|
if reference_content:
|
||||||
full_prompt += "\n\nFor reference, here are some similar pieces of content that have performed well in the past:"
|
branded_prompt += "\n\nReference these successful examples for tone and style:\n"
|
||||||
for i, content in enumerate(reference_content, 1):
|
branded_prompt += "\n---\n".join(reference_content)
|
||||||
# Truncate reference content if it's too long
|
|
||||||
preview = content[:300] + "..." if len(content) > 300 else content
|
|
||||||
full_prompt += f"\n\nReference {i}:\n{preview}"
|
|
||||||
|
|
||||||
full_prompt += "\n\nUse these references for inspiration, but create original content."
|
|
||||||
|
|
||||||
# Step 5: Generate content using the LLM
|
# Step 5: Generate content using the LLM
|
||||||
generated_content = await self._call_llm_api(full_prompt, max_tokens)
|
generated_content = await self._call_llm_api(branded_prompt, max_tokens)
|
||||||
|
|
||||||
# Step 6: Check content alignment with brand style
|
# Step 6: Check content alignment with brand style
|
||||||
alignment_check = brand_style_manager.check_content_alignment(generated_content)
|
alignment_check = brand_style_manager.check_content_alignment(generated_content)
|
||||||
@@ -102,7 +74,7 @@ class Copywriter:
|
|||||||
"suggestions": headline_suggestions,
|
"suggestions": headline_suggestions,
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"content_type": content_type,
|
"content_type": content_type,
|
||||||
"tone": tone,
|
"tone": None, # Removed tone parameter
|
||||||
"alignment_score": alignment_check['alignment_score'],
|
"alignment_score": alignment_check['alignment_score'],
|
||||||
"generated_at": None # Will be added by the API
|
"generated_at": None # Will be added by the API
|
||||||
}
|
}
|
||||||
@@ -179,15 +151,46 @@ class Copywriter:
|
|||||||
List of headline suggestions
|
List of headline suggestions
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
# This would call the LLM to generate headlines
|
# Create a prompt for headline generation
|
||||||
# Simplified mock response for demonstration
|
headline_prompt = f"""
|
||||||
return [
|
Generate 3 alternative marketing headlines for the following content.
|
||||||
"Alternative Headline 1: Discover the Power of Adriana James' Solutions",
|
Make headlines compelling, concise, and aligned with the content's message.
|
||||||
"Alternative Headline 2: Transform Your Results with Adriana James",
|
Each headline should be unique and capture attention.
|
||||||
"Alternative Headline 3: The Adriana James Approach: Excellence Redefined"
|
|
||||||
|
ORIGINAL PROMPT:
|
||||||
|
{original_prompt}
|
||||||
|
|
||||||
|
CONTENT:
|
||||||
|
{generated_content}
|
||||||
|
|
||||||
|
Generate exactly 3 headlines, one per line, without numbering or prefixes.
|
||||||
|
"""
|
||||||
|
|
||||||
|
# Call LLM to generate headlines
|
||||||
|
response = await self._call_llm_api(
|
||||||
|
prompt=headline_prompt,
|
||||||
|
max_tokens=100 # Shorter limit for headlines
|
||||||
|
)
|
||||||
|
|
||||||
|
# Process the response into a list of headlines
|
||||||
|
headlines = [
|
||||||
|
headline.strip()
|
||||||
|
for headline in response.split('\n')
|
||||||
|
if headline.strip() and not headline.lower().startswith(('headline', 'title', '-', '*', '•'))
|
||||||
]
|
]
|
||||||
|
|
||||||
|
# Ensure we have exactly 3 headlines
|
||||||
|
if len(headlines) > 3:
|
||||||
|
headlines = headlines[:3]
|
||||||
|
while len(headlines) < 3:
|
||||||
|
headlines.append(f"Headline Option {len(headlines) + 1}")
|
||||||
|
|
||||||
|
logger.info(f"Generated {len(headlines)} headline suggestions")
|
||||||
|
return headlines
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"Error generating headline suggestions: {str(e)}")
|
logger.error(f"Error generating headline suggestions: {str(e)}")
|
||||||
|
# Return empty list instead of mock response on error
|
||||||
return []
|
return []
|
||||||
|
|
||||||
async def improve_copy(self, content: str, feedback: str) -> str:
|
async def improve_copy(self, content: str, feedback: str) -> str:
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
@@ -43,7 +43,6 @@ app.add_middleware(
|
|||||||
class GenerateCopyRequest(BaseModel):
|
class GenerateCopyRequest(BaseModel):
|
||||||
prompt: str = Field(..., description="The main instruction for generating content")
|
prompt: str = Field(..., description="The main instruction for generating content")
|
||||||
content_type: Optional[str] = Field(None, description="Type of content to generate")
|
content_type: Optional[str] = Field(None, description="Type of content to generate")
|
||||||
tone: Optional[str] = Field(None, description="Desired tone of the content")
|
|
||||||
length: Optional[str] = Field(None, description="Desired length of the content")
|
length: Optional[str] = Field(None, description="Desired length of the content")
|
||||||
include_cta: Optional[bool] = Field(False, description="Whether to include a call to action")
|
include_cta: Optional[bool] = Field(False, description="Whether to include a call to action")
|
||||||
reference_similar_content: Optional[bool] = Field(True, description="Whether to reference similar content")
|
reference_similar_content: Optional[bool] = Field(True, description="Whether to reference similar content")
|
||||||
@@ -88,31 +87,10 @@ async def generate_copy(request: GenerateCopyRequest):
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
# Validate tone if provided
|
|
||||||
if request.tone and request.tone not in config.TONE_OPTIONS:
|
|
||||||
return JSONResponse(
|
|
||||||
status_code=status.HTTP_400_BAD_REQUEST,
|
|
||||||
content={
|
|
||||||
"status": "error",
|
|
||||||
"message": f"Invalid tone. Must be one of: {', '.join(config.TONE_OPTIONS)}"
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
# Validate length if provided
|
|
||||||
if request.length and request.length not in config.LENGTH_OPTIONS:
|
|
||||||
return JSONResponse(
|
|
||||||
status_code=status.HTTP_400_BAD_REQUEST,
|
|
||||||
content={
|
|
||||||
"status": "error",
|
|
||||||
"message": f"Invalid length. Must be one of: {', '.join(config.LENGTH_OPTIONS)}"
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
# Generate copy
|
# Generate copy
|
||||||
result = await copywriter.generate_copy(
|
result = await copywriter.generate_copy(
|
||||||
prompt=request.prompt,
|
prompt=request.prompt,
|
||||||
content_type=request.content_type,
|
content_type=request.content_type,
|
||||||
tone=request.tone,
|
|
||||||
length=request.length,
|
length=request.length,
|
||||||
include_cta=request.include_cta,
|
include_cta=request.include_cta,
|
||||||
reference_similar_content=request.reference_similar_content,
|
reference_similar_content=request.reference_similar_content,
|
||||||
@@ -126,7 +104,6 @@ async def generate_copy(request: GenerateCopyRequest):
|
|||||||
if result["content"]:
|
if result["content"]:
|
||||||
metadata = {
|
metadata = {
|
||||||
"content_type": request.content_type,
|
"content_type": request.content_type,
|
||||||
"tone": request.tone,
|
|
||||||
"prompt": request.prompt,
|
"prompt": request.prompt,
|
||||||
"generated": True
|
"generated": True
|
||||||
}
|
}
|
||||||
@@ -139,7 +116,6 @@ async def generate_copy(request: GenerateCopyRequest):
|
|||||||
"prompt": request.prompt,
|
"prompt": request.prompt,
|
||||||
"parameters": {
|
"parameters": {
|
||||||
"content_type": request.content_type,
|
"content_type": request.content_type,
|
||||||
"tone": request.tone,
|
|
||||||
"length": request.length,
|
"length": request.length,
|
||||||
"include_cta": request.include_cta
|
"include_cta": request.include_cta
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,12 +1,9 @@
|
|||||||
{
|
{
|
||||||
"brand_name": "Adriana James",
|
|
||||||
"tone": [
|
"tone": [
|
||||||
"professional",
|
"professional",
|
||||||
"friendly",
|
"friendly",
|
||||||
"inspirational",
|
"inspirational",
|
||||||
"empowering",
|
"empowering"
|
||||||
"excited",
|
|
||||||
"authoritative"
|
|
||||||
],
|
],
|
||||||
"voice_characteristics": [
|
"voice_characteristics": [
|
||||||
"clear",
|
"clear",
|
||||||
@@ -14,9 +11,13 @@
|
|||||||
"empowering",
|
"empowering",
|
||||||
"confident",
|
"confident",
|
||||||
"authentic",
|
"authentic",
|
||||||
"innovative",
|
"innovative"
|
||||||
"visionary",
|
],
|
||||||
"approachable"
|
"writing_patterns": [
|
||||||
|
"direct commands",
|
||||||
|
"personal pronouns",
|
||||||
|
"repetitive rhythms",
|
||||||
|
"empowering phrases"
|
||||||
],
|
],
|
||||||
"taboo_words": [
|
"taboo_words": [
|
||||||
"cheap",
|
"cheap",
|
||||||
@@ -32,5 +33,6 @@
|
|||||||
"problems": "challenges",
|
"problems": "challenges",
|
||||||
"services": "experiences",
|
"services": "experiences",
|
||||||
"training": "transformation"
|
"training": "transformation"
|
||||||
}
|
},
|
||||||
|
"brand_name": "Adriana James"
|
||||||
}
|
}
|
||||||
@@ -15,7 +15,6 @@ Generates marketing copy based on the provided prompt and optional parameters.
|
|||||||
{
|
{
|
||||||
"prompt": "Write a social media post for our new product launch",
|
"prompt": "Write a social media post for our new product launch",
|
||||||
"content_type": "social_media",
|
"content_type": "social_media",
|
||||||
"tone": "excited",
|
|
||||||
"length": "medium",
|
"length": "medium",
|
||||||
"include_cta": true
|
"include_cta": true
|
||||||
}
|
}
|
||||||
@@ -24,7 +23,6 @@ Generates marketing copy based on the provided prompt and optional parameters.
|
|||||||
**Parameters**:
|
**Parameters**:
|
||||||
- `prompt` (string, required): The main instruction for generating content
|
- `prompt` (string, required): The main instruction for generating content
|
||||||
- `content_type` (string, optional): Type of content to generate (social_media, email, blog, website, etc.)
|
- `content_type` (string, optional): Type of content to generate (social_media, email, blog, website, etc.)
|
||||||
- `tone` (string, optional): Desired tone (excited, professional, casual, etc.)
|
|
||||||
- `length` (string, optional): Content length (short, medium, long)
|
- `length` (string, optional): Content length (short, medium, long)
|
||||||
- `include_cta` (boolean, optional): Whether to include a call to action
|
- `include_cta` (boolean, optional): Whether to include a call to action
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ document.addEventListener('DOMContentLoaded', function() {
|
|||||||
const generateBtn = document.getElementById('generate-btn');
|
const generateBtn = document.getElementById('generate-btn');
|
||||||
const promptInput = document.getElementById('prompt');
|
const promptInput = document.getElementById('prompt');
|
||||||
const contentTypeSelect = document.getElementById('content-type');
|
const contentTypeSelect = document.getElementById('content-type');
|
||||||
const toneSelect = document.getElementById('tone');
|
|
||||||
const lengthSelect = document.getElementById('length');
|
const lengthSelect = document.getElementById('length');
|
||||||
const includeCTACheckbox = document.getElementById('include-cta');
|
const includeCTACheckbox = document.getElementById('include-cta');
|
||||||
const referenceSimilarCheckbox = document.getElementById('reference-similar');
|
const referenceSimilarCheckbox = document.getElementById('reference-similar');
|
||||||
@@ -86,7 +85,6 @@ document.addEventListener('DOMContentLoaded', function() {
|
|||||||
const requestData = {
|
const requestData = {
|
||||||
prompt: promptInput.value,
|
prompt: promptInput.value,
|
||||||
content_type: contentTypeSelect.value || null,
|
content_type: contentTypeSelect.value || null,
|
||||||
tone: toneSelect.value || null,
|
|
||||||
length: lengthSelect.value || null,
|
length: lengthSelect.value || null,
|
||||||
include_cta: includeCTACheckbox.checked,
|
include_cta: includeCTACheckbox.checked,
|
||||||
reference_similar_content: referenceSimilarCheckbox.checked
|
reference_similar_content: referenceSimilarCheckbox.checked
|
||||||
|
|||||||
+9
-18
@@ -56,30 +56,21 @@
|
|||||||
<label for="content-type">Content Type</label>
|
<label for="content-type">Content Type</label>
|
||||||
<select id="content-type">
|
<select id="content-type">
|
||||||
<option value="">Select Type</option>
|
<option value="">Select Type</option>
|
||||||
<option value="email_campaign">Email Campaign</option>
|
|
||||||
<option value="social_media">Social Media</option>
|
|
||||||
<option value="blog_post">Blog Post</option>
|
|
||||||
<option value="website_copy">Website Copy</option>
|
<option value="website_copy">Website Copy</option>
|
||||||
|
<option value="email">Email Campaign</option>
|
||||||
|
<option value="social_media">Social Media Post</option>
|
||||||
|
<option value="blog_post">Blog Post</option>
|
||||||
|
<option value="sales_copy">Sales Copy</option>
|
||||||
<option value="ad_copy">Ad Copy</option>
|
<option value="ad_copy">Ad Copy</option>
|
||||||
<option value="funnel_page">Funnel Page</option>
|
<option value="video_script">Video Script</option>
|
||||||
|
<option value="case_study">Case Study</option>
|
||||||
<option value="product_description">Product Description</option>
|
<option value="product_description">Product Description</option>
|
||||||
|
<option value="landing_page">Landing Page</option>
|
||||||
<option value="press_release">Press Release</option>
|
<option value="press_release">Press Release</option>
|
||||||
|
<option value="newsletter">Newsletter</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
|
||||||
<label for="tone">Tone</label>
|
|
||||||
<select id="tone">
|
|
||||||
<option value="">Select Tone</option>
|
|
||||||
<option value="professional">Professional</option>
|
|
||||||
<option value="friendly">Friendly</option>
|
|
||||||
<option value="excited">Excited</option>
|
|
||||||
<option value="authoritative">Authoritative</option>
|
|
||||||
<option value="casual">Casual</option>
|
|
||||||
<option value="inspirational">Inspirational</option>
|
|
||||||
<option value="empathetic">Empathetic</option>
|
|
||||||
<option value="humorous">Humorous</option>
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="length">Length</label>
|
<label for="length">Length</label>
|
||||||
<select id="length">
|
<select id="length">
|
||||||
|
|||||||
+316
@@ -458,3 +458,319 @@
|
|||||||
2025-04-17 08:08:22.724 | INFO | brand_style:update_style_guidelines:80 - Updated brand style guidelines
|
2025-04-17 08:08:22.724 | INFO | brand_style:update_style_guidelines:80 - Updated brand style guidelines
|
||||||
2025-04-17 08:10:36.577 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
2025-04-17 08:10:36.577 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
2025-04-17 08:10:36.577 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
2025-04-17 08:10:36.577 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-17 09:14:52.646 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-17 09:14:52.646 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-17 09:15:06.876 | INFO | copywriter:generate_copy:118 - Generated content with 775 characters
|
||||||
|
2025-04-17 09:15:06.876 | INFO | copywriter:generate_copy:118 - Generated content with 775 characters
|
||||||
|
2025-04-17 09:15:07.331 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-17 09:15:07.331 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-17 09:15:45.897 | INFO | copywriter:improve_copy:221 - Improved content based on feedback
|
||||||
|
2025-04-17 09:15:45.897 | INFO | copywriter:improve_copy:221 - Improved content based on feedback
|
||||||
|
2025-04-17 09:21:39.757 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-17 09:21:39.757 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-17 09:21:55.770 | INFO | copywriter:generate_copy:118 - Generated content with 1778 characters
|
||||||
|
2025-04-17 09:21:55.770 | INFO | copywriter:generate_copy:118 - Generated content with 1778 characters
|
||||||
|
2025-04-17 09:21:56.229 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-17 09:21:56.229 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-17 09:23:23.199 | INFO | copywriter:improve_copy:221 - Improved content based on feedback
|
||||||
|
2025-04-17 09:23:23.199 | INFO | copywriter:improve_copy:221 - Improved content based on feedback
|
||||||
|
2025-04-17 09:24:27.186 | INFO | copywriter:generate_copy:118 - Generated content with 1353 characters
|
||||||
|
2025-04-17 09:24:27.186 | INFO | copywriter:generate_copy:118 - Generated content with 1353 characters
|
||||||
|
2025-04-17 09:24:33.304 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-17 09:24:33.304 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-17 09:25:18.277 | INFO | copywriter:improve_copy:221 - Improved content based on feedback
|
||||||
|
2025-04-17 09:25:18.277 | INFO | copywriter:improve_copy:221 - Improved content based on feedback
|
||||||
|
2025-04-17 09:27:47.580 | INFO | copywriter:generate_copy:118 - Generated content with 1316 characters
|
||||||
|
2025-04-17 09:27:47.580 | INFO | copywriter:generate_copy:118 - Generated content with 1316 characters
|
||||||
|
2025-04-17 09:27:48.175 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-17 09:27:48.175 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-17 09:28:28.798 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-17 09:28:28.798 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 00:48:00.063 | INFO | brand_style:update_style_guidelines:80 - Updated brand style guidelines
|
||||||
|
2025-04-18 00:48:00.063 | INFO | brand_style:update_style_guidelines:80 - Updated brand style guidelines
|
||||||
|
2025-04-18 01:00:14.884 | ERROR | copywriter:generate_copy:122 - Error generating copy: 'BrandStyleManager' object has no attribute '_get_content_format'
|
||||||
|
2025-04-18 01:00:14.884 | ERROR | copywriter:generate_copy:122 - Error generating copy: 'BrandStyleManager' object has no attribute '_get_content_format'
|
||||||
|
2025-04-18 01:00:18.898 | ERROR | copywriter:generate_copy:122 - Error generating copy: 'BrandStyleManager' object has no attribute '_get_content_format'
|
||||||
|
2025-04-18 01:00:18.898 | ERROR | copywriter:generate_copy:122 - Error generating copy: 'BrandStyleManager' object has no attribute '_get_content_format'
|
||||||
|
2025-04-18 01:00:22.903 | ERROR | copywriter:generate_copy:122 - Error generating copy: 'BrandStyleManager' object has no attribute '_get_content_format'
|
||||||
|
2025-04-18 01:00:22.903 | ERROR | copywriter:generate_copy:122 - Error generating copy: 'BrandStyleManager' object has no attribute '_get_content_format'
|
||||||
|
2025-04-18 01:00:22.904 | ERROR | main:generate_copy:157 - Error generating copy: RetryError[<Future at 0x115ae8a70 state=finished raised AttributeError>]
|
||||||
|
2025-04-18 01:00:22.904 | ERROR | main:generate_copy:157 - Error generating copy: RetryError[<Future at 0x115ae8a70 state=finished raised AttributeError>]
|
||||||
|
2025-04-18 01:02:05.000 | ERROR | copywriter:generate_copy:122 - Error generating copy: 'BrandStyleManager' object has no attribute '_get_content_format'
|
||||||
|
2025-04-18 01:02:05.000 | ERROR | copywriter:generate_copy:122 - Error generating copy: 'BrandStyleManager' object has no attribute '_get_content_format'
|
||||||
|
2025-04-18 01:02:09.006 | ERROR | copywriter:generate_copy:122 - Error generating copy: 'BrandStyleManager' object has no attribute '_get_content_format'
|
||||||
|
2025-04-18 01:02:09.006 | ERROR | copywriter:generate_copy:122 - Error generating copy: 'BrandStyleManager' object has no attribute '_get_content_format'
|
||||||
|
2025-04-18 01:02:13.014 | ERROR | copywriter:generate_copy:122 - Error generating copy: 'BrandStyleManager' object has no attribute '_get_content_format'
|
||||||
|
2025-04-18 01:02:13.014 | ERROR | copywriter:generate_copy:122 - Error generating copy: 'BrandStyleManager' object has no attribute '_get_content_format'
|
||||||
|
2025-04-18 01:02:13.015 | ERROR | main:generate_copy:157 - Error generating copy: RetryError[<Future at 0x115cd30e0 state=finished raised AttributeError>]
|
||||||
|
2025-04-18 01:02:13.015 | ERROR | main:generate_copy:157 - Error generating copy: RetryError[<Future at 0x115cd30e0 state=finished raised AttributeError>]
|
||||||
|
2025-04-18 01:14:27.689 | ERROR | copywriter:generate_copy:94 - Error generating copy: 'BrandStyleManager' object has no attribute '_get_content_format'
|
||||||
|
2025-04-18 01:14:27.689 | ERROR | copywriter:generate_copy:94 - Error generating copy: 'BrandStyleManager' object has no attribute '_get_content_format'
|
||||||
|
2025-04-18 01:14:31.699 | ERROR | copywriter:generate_copy:94 - Error generating copy: 'BrandStyleManager' object has no attribute '_get_content_format'
|
||||||
|
2025-04-18 01:14:31.699 | ERROR | copywriter:generate_copy:94 - Error generating copy: 'BrandStyleManager' object has no attribute '_get_content_format'
|
||||||
|
2025-04-18 01:14:35.702 | ERROR | copywriter:generate_copy:94 - Error generating copy: 'BrandStyleManager' object has no attribute '_get_content_format'
|
||||||
|
2025-04-18 01:14:35.702 | ERROR | copywriter:generate_copy:94 - Error generating copy: 'BrandStyleManager' object has no attribute '_get_content_format'
|
||||||
|
2025-04-18 01:14:35.703 | ERROR | main:generate_copy:133 - Error generating copy: RetryError[<Future at 0x114e7b5c0 state=finished raised AttributeError>]
|
||||||
|
2025-04-18 01:14:35.703 | ERROR | main:generate_copy:133 - Error generating copy: RetryError[<Future at 0x114e7b5c0 state=finished raised AttributeError>]
|
||||||
|
2025-04-18 01:17:10.288 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-18 01:17:10.288 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-18 01:17:16.813 | INFO | copywriter:generate_copy:90 - Generated content with 770 characters
|
||||||
|
2025-04-18 01:17:16.813 | INFO | copywriter:generate_copy:90 - Generated content with 770 characters
|
||||||
|
2025-04-18 01:17:17.285 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 01:17:17.285 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 01:18:21.877 | INFO | copywriter:generate_copy:90 - Generated content with 583 characters
|
||||||
|
2025-04-18 01:18:21.877 | INFO | copywriter:generate_copy:90 - Generated content with 583 characters
|
||||||
|
2025-04-18 01:18:22.645 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 01:18:22.645 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 01:18:52.465 | INFO | copywriter:generate_copy:90 - Generated content with 791 characters
|
||||||
|
2025-04-18 01:18:52.465 | INFO | copywriter:generate_copy:90 - Generated content with 791 characters
|
||||||
|
2025-04-18 01:18:52.905 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 01:18:52.905 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 01:20:01.008 | INFO | copywriter:generate_copy:90 - Generated content with 1695 characters
|
||||||
|
2025-04-18 01:20:01.008 | INFO | copywriter:generate_copy:90 - Generated content with 1695 characters
|
||||||
|
2025-04-18 01:20:01.566 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 01:20:01.566 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 01:20:26.004 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 01:20:26.004 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 01:34:03.153 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-18 01:34:03.153 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-18 01:34:22.102 | INFO | copywriter:generate_copy:90 - Generated content with 2004 characters
|
||||||
|
2025-04-18 01:34:22.102 | INFO | copywriter:generate_copy:90 - Generated content with 2004 characters
|
||||||
|
2025-04-18 01:34:22.524 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 01:34:22.524 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 01:35:24.984 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-18 01:35:24.984 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-18 01:35:41.564 | INFO | copywriter:generate_copy:90 - Generated content with 1635 characters
|
||||||
|
2025-04-18 01:35:41.564 | INFO | copywriter:generate_copy:90 - Generated content with 1635 characters
|
||||||
|
2025-04-18 01:35:42.025 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 01:35:42.025 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 01:36:43.029 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-18 01:36:43.029 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-18 01:36:51.487 | INFO | copywriter:generate_copy:90 - Generated content with 1163 characters
|
||||||
|
2025-04-18 01:36:51.487 | INFO | copywriter:generate_copy:90 - Generated content with 1163 characters
|
||||||
|
2025-04-18 01:36:51.866 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 01:36:51.866 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 01:37:35.913 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-18 01:37:35.913 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-18 01:38:04.403 | INFO | copywriter:generate_copy:90 - Generated content with 1374 characters
|
||||||
|
2025-04-18 01:38:04.403 | INFO | copywriter:generate_copy:90 - Generated content with 1374 characters
|
||||||
|
2025-04-18 01:38:05.011 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 01:38:05.011 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 01:38:44.318 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-18 01:38:44.318 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-18 01:39:14.512 | ERROR | copywriter:_call_llm_api:139 - Error calling Cohere API:
|
||||||
|
2025-04-18 01:39:14.512 | ERROR | copywriter:_call_llm_api:139 - Error calling Cohere API:
|
||||||
|
2025-04-18 01:39:48.781 | ERROR | copywriter:_call_llm_api:139 - Error calling Cohere API:
|
||||||
|
2025-04-18 01:39:48.781 | ERROR | copywriter:_call_llm_api:139 - Error calling Cohere API:
|
||||||
|
2025-04-18 01:40:08.963 | INFO | copywriter:generate_copy:90 - Generated content with 1831 characters
|
||||||
|
2025-04-18 01:40:08.963 | INFO | copywriter:generate_copy:90 - Generated content with 1831 characters
|
||||||
|
2025-04-18 01:40:09.921 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 01:40:09.921 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 01:44:03.287 | INFO | copywriter:improve_copy:193 - Improved content based on feedback
|
||||||
|
2025-04-18 01:44:03.287 | INFO | copywriter:improve_copy:193 - Improved content based on feedback
|
||||||
|
2025-04-18 01:44:55.624 | INFO | copywriter:improve_copy:193 - Improved content based on feedback
|
||||||
|
2025-04-18 01:44:55.624 | INFO | copywriter:improve_copy:193 - Improved content based on feedback
|
||||||
|
2025-04-18 02:07:19.823 | ERROR | copywriter:_call_llm_api:139 - Error calling Cohere API:
|
||||||
|
2025-04-18 02:07:19.823 | ERROR | copywriter:_call_llm_api:139 - Error calling Cohere API:
|
||||||
|
2025-04-18 02:07:27.541 | INFO | copywriter:generate_copy:90 - Generated content with 226 characters
|
||||||
|
2025-04-18 02:07:27.541 | INFO | copywriter:generate_copy:90 - Generated content with 226 characters
|
||||||
|
2025-04-18 02:07:28.463 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 02:07:28.463 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 02:08:38.495 | INFO | copywriter:generate_copy:90 - Generated content with 239 characters
|
||||||
|
2025-04-18 02:08:38.495 | INFO | copywriter:generate_copy:90 - Generated content with 239 characters
|
||||||
|
2025-04-18 02:08:38.965 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 02:08:38.965 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 02:09:04.045 | INFO | copywriter:generate_copy:90 - Generated content with 229 characters
|
||||||
|
2025-04-18 02:09:04.045 | INFO | copywriter:generate_copy:90 - Generated content with 229 characters
|
||||||
|
2025-04-18 02:09:04.476 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 02:09:04.476 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 02:09:33.639 | INFO | copywriter:generate_copy:90 - Generated content with 686 characters
|
||||||
|
2025-04-18 02:09:33.639 | INFO | copywriter:generate_copy:90 - Generated content with 686 characters
|
||||||
|
2025-04-18 02:09:34.290 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 02:09:34.290 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 02:10:29.627 | INFO | copywriter:generate_copy:90 - Generated content with 383 characters
|
||||||
|
2025-04-18 02:10:29.627 | INFO | copywriter:generate_copy:90 - Generated content with 383 characters
|
||||||
|
2025-04-18 02:10:30.087 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 02:10:30.087 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 02:19:13.085 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-18 02:19:13.085 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-18 02:19:22.542 | INFO | copywriter:_generate_headline_suggestions:188 - Generated 3 headline suggestions
|
||||||
|
2025-04-18 02:19:22.542 | INFO | copywriter:_generate_headline_suggestions:188 - Generated 3 headline suggestions
|
||||||
|
2025-04-18 02:19:22.543 | INFO | copywriter:generate_copy:90 - Generated content with 963 characters
|
||||||
|
2025-04-18 02:19:22.543 | INFO | copywriter:generate_copy:90 - Generated content with 963 characters
|
||||||
|
2025-04-18 02:20:37.281 | INFO | copywriter:_generate_headline_suggestions:188 - Generated 3 headline suggestions
|
||||||
|
2025-04-18 02:20:37.281 | INFO | copywriter:_generate_headline_suggestions:188 - Generated 3 headline suggestions
|
||||||
|
2025-04-18 02:20:37.283 | INFO | copywriter:generate_copy:90 - Generated content with 1278 characters
|
||||||
|
2025-04-18 02:20:37.283 | INFO | copywriter:generate_copy:90 - Generated content with 1278 characters
|
||||||
|
2025-04-18 02:21:03.210 | INFO | copywriter:_generate_headline_suggestions:188 - Generated 3 headline suggestions
|
||||||
|
2025-04-18 02:21:03.210 | INFO | copywriter:_generate_headline_suggestions:188 - Generated 3 headline suggestions
|
||||||
|
2025-04-18 02:21:03.212 | INFO | copywriter:generate_copy:90 - Generated content with 1099 characters
|
||||||
|
2025-04-18 02:21:03.212 | INFO | copywriter:generate_copy:90 - Generated content with 1099 characters
|
||||||
|
2025-04-18 02:26:17.803 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-18 02:26:17.803 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-18 02:26:25.385 | INFO | copywriter:generate_copy:90 - Generated content with 1128 characters
|
||||||
|
2025-04-18 02:26:25.385 | INFO | copywriter:generate_copy:90 - Generated content with 1128 characters
|
||||||
|
2025-04-18 02:26:25.823 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 02:26:25.823 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 02:28:15.335 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-18 02:28:15.335 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-18 02:28:24.861 | INFO | copywriter:generate_copy:90 - Generated content with 1197 characters
|
||||||
|
2025-04-18 02:28:24.861 | INFO | copywriter:generate_copy:90 - Generated content with 1197 characters
|
||||||
|
2025-04-18 02:28:25.253 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 02:28:25.253 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 02:29:27.025 | INFO | copywriter:generate_copy:90 - Generated content with 852 characters
|
||||||
|
2025-04-18 02:29:27.025 | INFO | copywriter:generate_copy:90 - Generated content with 852 characters
|
||||||
|
2025-04-18 02:29:27.561 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 02:29:27.561 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 02:30:18.629 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-18 02:30:18.629 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-18 02:30:31.984 | INFO | copywriter:generate_copy:90 - Generated content with 1280 characters
|
||||||
|
2025-04-18 02:30:31.984 | INFO | copywriter:generate_copy:90 - Generated content with 1280 characters
|
||||||
|
2025-04-18 02:30:32.533 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 02:30:32.533 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 02:50:52.050 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-18 02:50:52.050 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-18 02:51:08.753 | INFO | copywriter:generate_copy:90 - Generated content with 1621 characters
|
||||||
|
2025-04-18 02:51:08.753 | INFO | copywriter:generate_copy:90 - Generated content with 1621 characters
|
||||||
|
2025-04-18 02:51:09.188 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 02:51:09.188 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 02:54:25.384 | INFO | copywriter:generate_copy:90 - Generated content with 1304 characters
|
||||||
|
2025-04-18 02:54:25.384 | INFO | copywriter:generate_copy:90 - Generated content with 1304 characters
|
||||||
|
2025-04-18 02:54:26.186 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 02:54:26.186 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 02:54:46.982 | INFO | copywriter:generate_copy:90 - Generated content with 815 characters
|
||||||
|
2025-04-18 02:54:46.982 | INFO | copywriter:generate_copy:90 - Generated content with 815 characters
|
||||||
|
2025-04-18 02:54:47.508 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 02:54:47.508 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 02:55:50.883 | INFO | copywriter:generate_copy:90 - Generated content with 1827 characters
|
||||||
|
2025-04-18 02:55:50.883 | INFO | copywriter:generate_copy:90 - Generated content with 1827 characters
|
||||||
|
2025-04-18 02:55:51.314 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 02:55:51.314 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 03:02:34.882 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-18 03:02:34.882 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-18 03:02:55.595 | INFO | copywriter:generate_copy:90 - Generated content with 1571 characters
|
||||||
|
2025-04-18 03:02:55.595 | INFO | copywriter:generate_copy:90 - Generated content with 1571 characters
|
||||||
|
2025-04-18 03:02:57.531 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 03:02:57.531 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 03:11:46.772 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-18 03:11:46.772 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-18 03:12:00.197 | INFO | copywriter:generate_copy:90 - Generated content with 971 characters
|
||||||
|
2025-04-18 03:12:00.197 | INFO | copywriter:generate_copy:90 - Generated content with 971 characters
|
||||||
|
2025-04-18 03:12:00.621 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 03:12:00.621 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 03:14:42.619 | INFO | copywriter:generate_copy:90 - Generated content with 1146 characters
|
||||||
|
2025-04-18 03:14:42.619 | INFO | copywriter:generate_copy:90 - Generated content with 1146 characters
|
||||||
|
2025-04-18 03:14:43.225 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 03:14:43.225 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 03:29:08.562 | INFO | copywriter:generate_copy:90 - Generated content with 1423 characters
|
||||||
|
2025-04-18 03:29:08.562 | INFO | copywriter:generate_copy:90 - Generated content with 1423 characters
|
||||||
|
2025-04-18 03:29:09.128 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 03:29:09.128 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 03:30:04.797 | INFO | copywriter:generate_copy:90 - Generated content with 1475 characters
|
||||||
|
2025-04-18 03:30:04.797 | INFO | copywriter:generate_copy:90 - Generated content with 1475 characters
|
||||||
|
2025-04-18 03:30:05.244 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 03:30:05.244 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 03:43:52.883 | INFO | copywriter:generate_copy:90 - Generated content with 1123 characters
|
||||||
|
2025-04-18 03:43:52.883 | INFO | copywriter:generate_copy:90 - Generated content with 1123 characters
|
||||||
|
2025-04-18 03:44:41.387 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 03:44:41.387 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 03:45:23.813 | INFO | copywriter:generate_copy:90 - Generated content with 2004 characters
|
||||||
|
2025-04-18 03:45:23.813 | INFO | copywriter:generate_copy:90 - Generated content with 2004 characters
|
||||||
|
2025-04-18 03:45:24.224 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 03:45:24.224 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 03:46:06.815 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-18 03:46:06.815 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-18 03:46:23.745 | INFO | copywriter:generate_copy:90 - Generated content with 1750 characters
|
||||||
|
2025-04-18 03:46:23.745 | INFO | copywriter:generate_copy:90 - Generated content with 1750 characters
|
||||||
|
2025-04-18 03:46:50.243 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 03:46:50.243 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 03:49:53.371 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-18 03:49:53.371 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-18 03:50:01.024 | INFO | copywriter:generate_copy:90 - Generated content with 1182 characters
|
||||||
|
2025-04-18 03:50:01.024 | INFO | copywriter:generate_copy:90 - Generated content with 1182 characters
|
||||||
|
2025-04-18 03:50:01.557 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 03:50:01.557 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 03:52:18.453 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-18 03:52:18.453 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-18 03:52:25.589 | INFO | copywriter:generate_copy:90 - Generated content with 1040 characters
|
||||||
|
2025-04-18 03:52:25.589 | INFO | copywriter:generate_copy:90 - Generated content with 1040 characters
|
||||||
|
2025-04-18 03:52:26.378 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 03:52:26.378 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 03:53:03.190 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-18 03:53:03.190 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-18 03:53:09.327 | INFO | copywriter:generate_copy:90 - Generated content with 883 characters
|
||||||
|
2025-04-18 03:53:09.327 | INFO | copywriter:generate_copy:90 - Generated content with 883 characters
|
||||||
|
2025-04-18 03:53:09.798 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 03:53:09.798 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 03:54:12.575 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-18 03:54:12.575 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-18 03:54:29.054 | INFO | copywriter:generate_copy:90 - Generated content with 1439 characters
|
||||||
|
2025-04-18 03:54:29.054 | INFO | copywriter:generate_copy:90 - Generated content with 1439 characters
|
||||||
|
2025-04-18 03:54:29.441 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 03:54:29.441 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 03:55:16.974 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-18 03:55:16.974 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-18 03:55:26.092 | INFO | copywriter:generate_copy:90 - Generated content with 1243 characters
|
||||||
|
2025-04-18 03:55:26.092 | INFO | copywriter:generate_copy:90 - Generated content with 1243 characters
|
||||||
|
2025-04-18 03:55:26.505 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 03:55:26.505 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 03:56:15.753 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-18 03:56:15.753 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-18 03:56:24.050 | INFO | copywriter:generate_copy:90 - Generated content with 1189 characters
|
||||||
|
2025-04-18 03:56:24.050 | INFO | copywriter:generate_copy:90 - Generated content with 1189 characters
|
||||||
|
2025-04-18 03:56:53.669 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 03:56:53.669 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 03:59:44.352 | INFO | copywriter:_generate_headline_suggestions:188 - Generated 3 headline suggestions
|
||||||
|
2025-04-18 03:59:44.352 | INFO | copywriter:_generate_headline_suggestions:188 - Generated 3 headline suggestions
|
||||||
|
2025-04-18 03:59:44.355 | INFO | copywriter:generate_copy:90 - Generated content with 906 characters
|
||||||
|
2025-04-18 03:59:44.355 | INFO | copywriter:generate_copy:90 - Generated content with 906 characters
|
||||||
|
2025-04-18 03:59:45.100 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 03:59:45.100 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 04:00:08.827 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-18 04:00:08.827 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-18 04:00:21.413 | INFO | copywriter:_generate_headline_suggestions:188 - Generated 3 headline suggestions
|
||||||
|
2025-04-18 04:00:21.413 | INFO | copywriter:_generate_headline_suggestions:188 - Generated 3 headline suggestions
|
||||||
|
2025-04-18 04:00:21.413 | INFO | copywriter:generate_copy:90 - Generated content with 1350 characters
|
||||||
|
2025-04-18 04:00:21.413 | INFO | copywriter:generate_copy:90 - Generated content with 1350 characters
|
||||||
|
2025-04-18 04:00:21.848 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 04:00:21.848 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 04:01:23.133 | INFO | copywriter:_generate_headline_suggestions:188 - Generated 3 headline suggestions
|
||||||
|
2025-04-18 04:01:23.133 | INFO | copywriter:_generate_headline_suggestions:188 - Generated 3 headline suggestions
|
||||||
|
2025-04-18 04:01:23.138 | INFO | copywriter:generate_copy:90 - Generated content with 1525 characters
|
||||||
|
2025-04-18 04:01:23.138 | INFO | copywriter:generate_copy:90 - Generated content with 1525 characters
|
||||||
|
2025-04-18 04:01:23.727 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 04:01:23.727 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 04:02:32.346 | INFO | brand_style:update_style_guidelines:178 - Updated brand style guidelines
|
||||||
|
2025-04-18 04:02:32.346 | INFO | brand_style:update_style_guidelines:178 - Updated brand style guidelines
|
||||||
|
2025-04-18 04:03:46.372 | INFO | brand_style:update_style_guidelines:178 - Updated brand style guidelines
|
||||||
|
2025-04-18 04:03:46.372 | INFO | brand_style:update_style_guidelines:178 - Updated brand style guidelines
|
||||||
|
2025-04-18 04:05:53.862 | INFO | brand_style:update_style_guidelines:178 - Updated brand style guidelines
|
||||||
|
2025-04-18 04:05:53.862 | INFO | brand_style:update_style_guidelines:178 - Updated brand style guidelines
|
||||||
|
2025-04-18 04:06:28.073 | INFO | brand_style:update_style_guidelines:178 - Updated brand style guidelines
|
||||||
|
2025-04-18 04:06:28.073 | INFO | brand_style:update_style_guidelines:178 - Updated brand style guidelines
|
||||||
|
2025-04-18 04:10:51.448 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-18 04:10:51.448 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-18 04:11:15.704 | INFO | copywriter:_generate_headline_suggestions:188 - Generated 3 headline suggestions
|
||||||
|
2025-04-18 04:11:15.704 | INFO | copywriter:_generate_headline_suggestions:188 - Generated 3 headline suggestions
|
||||||
|
2025-04-18 04:11:15.705 | INFO | copywriter:generate_copy:90 - Generated content with 1647 characters
|
||||||
|
2025-04-18 04:11:15.705 | INFO | copywriter:generate_copy:90 - Generated content with 1647 characters
|
||||||
|
2025-04-18 04:11:16.128 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 04:11:16.128 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 04:19:51.595 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-18 04:19:51.595 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-18 04:20:10.910 | INFO | copywriter:_generate_headline_suggestions:188 - Generated 3 headline suggestions
|
||||||
|
2025-04-18 04:20:10.910 | INFO | copywriter:_generate_headline_suggestions:188 - Generated 3 headline suggestions
|
||||||
|
2025-04-18 04:20:10.910 | INFO | copywriter:generate_copy:90 - Generated content with 1248 characters
|
||||||
|
2025-04-18 04:20:10.910 | INFO | copywriter:generate_copy:90 - Generated content with 1248 characters
|
||||||
|
2025-04-18 04:20:11.454 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 04:20:11.454 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 04:21:29.147 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-18 04:21:29.147 | INFO | vector_store:search:212 - Found 3 matching documents for query
|
||||||
|
2025-04-18 04:21:59.320 | ERROR | copywriter:_call_llm_api:139 - Error calling Cohere API:
|
||||||
|
2025-04-18 04:21:59.320 | ERROR | copywriter:_call_llm_api:139 - Error calling Cohere API:
|
||||||
|
2025-04-18 04:22:36.137 | INFO | copywriter:_generate_headline_suggestions:188 - Generated 3 headline suggestions
|
||||||
|
2025-04-18 04:22:36.137 | INFO | copywriter:_generate_headline_suggestions:188 - Generated 3 headline suggestions
|
||||||
|
2025-04-18 04:22:36.139 | INFO | copywriter:generate_copy:90 - Generated content with 3409 characters
|
||||||
|
2025-04-18 04:22:36.139 | INFO | copywriter:generate_copy:90 - Generated content with 3409 characters
|
||||||
|
2025-04-18 04:22:36.945 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
2025-04-18 04:22:36.945 | INFO | vector_store:add_documents:131 - Added 1 documents to vector store
|
||||||
|
|||||||
Reference in New Issue
Block a user