Spaces:
Running
Running
from formulas import offer_formulas | |
from sophistication.generator import create_sophistication_instruction | |
from avatar_analysis import analyze_avatar | |
# Modify the offer_system_prompt to specify the correct format for PUV | |
offer_system_prompt = """You are a world-class expert copywriter, experienced in creating compelling offers that connect emotionally with the target audience. | |
OBJECTIVE: | |
- Generate 3 COMPLETELY DIFFERENT versions of a convincing offer in Spanish | |
- Each version must be CLEAR, CONCISE and FOCUSED on a SINGLE transformation | |
- Connect emotionally with the audience's core desire | |
- Use natural and conversational language | |
CRITICAL OUTPUT RULES: | |
- Create 3 DISTINCT versions with different angles and emotional appeals | |
- Each version must focus on ONE problem/vision, ONE transformation, and ONE proof element | |
- Number each version clearly as "VERSIÓN 1:", "VERSIÓN 2:", and "VERSIÓN 3:" | |
- Output ONLY the offers themselves with NO explanations or commentary | |
- Start each version directly with its corresponding formula structure | |
- Present all 3 versions one after another, clearly separated | |
FORMULA-SPECIFIC FOCUS: | |
1. Oferta Dorada: ONE specific problem, ONE clear transformation, ONE proof element | |
2. Contraste Revelador: ONE inspiring vision, ONE transformative solution, ONE emotional result | |
3. Propuesta Única de Valor: ONE powerful transformation, ONE emotional objection handler | |
""" | |
def create_offer_instruction(target_audience=None, product_service=None, selected_formula_name=None, file_content=None, skills=None, sophistication_level=None): | |
""" | |
Creates the instruction for generating an offer based on the selected formula. | |
Args: | |
target_audience: Description of the target audience | |
product_service: Product/service information | |
selected_formula_name: Name of the selected formula | |
file_content: Content from uploaded files (if any) | |
skills: User's skills and expertise | |
sophistication_level: String key for the market sophistication level | |
Returns: | |
str: The complete instruction for generating the offer | |
""" | |
# Get the selected formula | |
selected_formula = offer_formulas[selected_formula_name] | |
# Get formula-specific instructions | |
additional_instructions = selected_formula.get("instructions", "") | |
# Process avatar analysis if target_audience is provided | |
avatar_insights = "" | |
if target_audience: | |
avatar_insights = analyze_avatar(target_audience) # This would call your avatar analysis function | |
# Create the base instruction with avatar insights | |
instruction = f"""{offer_system_prompt} | |
FORMULA TO USE: | |
{selected_formula["description"]} | |
{additional_instructions} | |
PRODUCT/SERVICE: | |
{product_service} | |
TARGET AUDIENCE: | |
{target_audience} | |
AVATAR ANALYSIS: | |
{avatar_insights} | |
ADDITIONAL INFORMATION: | |
{file_content} | |
Create a compelling offer following the formula structure exactly, adapting it to the sophistication level provided. | |
""" | |
# Add examples if available | |
if selected_formula.get("sophistication_examples") and sophistication_level: | |
# Extract the sophistication level key (e.g., "nivel_1", "nivel_2", etc.) | |
sophistication_key = sophistication_level.split(":")[0].lower().replace(" ", "_") | |
# Map to the correct key format used in the examples | |
if "nivel" not in sophistication_key: | |
sophistication_key = f"nivel_{sophistication_key[0]}" | |
# Get all examples for the specific sophistication level | |
examples = [] | |
for key, example in selected_formula["sophistication_examples"].items(): | |
# Check if the key starts with the sophistication level (to include nivel_1, nivel_1_ejemplo2, etc.) | |
if key.startswith(sophistication_key): | |
examples.append(example) | |
# Format all examples based on the formula type | |
if examples: | |
instruction += "\n\n### EXAMPLES FOR YOUR REFERENCE:\n" | |
for i, example in enumerate(examples): | |
instruction += f"\n#### Example {i+1}:\n" | |
# Format based on formula type | |
if selected_formula_name == "Oferta Dorada": | |
instruction += f"Headline: {example.get('headline', '')}\n" | |
instruction += f"Promise: {example.get('promise', '')}\n" | |
instruction += f"Subtitle: {example.get('subtitle', '')}\n" | |
elif selected_formula_name == "Contraste Revelador": | |
instruction += f"Situación: {example.get('situation', '')}\n" | |
instruction += f"Solución: {example.get('solution', '')}\n" | |
instruction += f"Resultado: {example.get('result', '')}\n" | |
elif selected_formula_name == "Propuesta Única de Valor": | |
instruction += f"Transformación: {example.get('transformation', '')}\n" | |
instruction += f"Objeciones: {example.get('objections', '')}\n" | |
# Add more formula types as needed | |
# Original code for general examples (keep as fallback) | |
elif selected_formula.get("examples") and len(selected_formula["examples"]) > 0: | |
examples_text = "\n\n".join([f"Example {i+1}:\n{example}" for i, example in enumerate(selected_formula["examples"])]) | |
instruction += f"\n\nGet inspired by these examples:\n{examples_text}" | |
# Add sophistication level guidance using the dedicated function | |
if sophistication_level: | |
# Get basic sophistication guidance | |
base_sophistication_guidance = create_sophistication_instruction(sophistication_level) | |
# Create concise formula-specific guidance based on sophistication level | |
formula_specific_guidance = "" | |
level_num = sophistication_level.split(":")[0].replace("Nivel ", "") | |
if selected_formula_name == "Oferta Dorada": | |
# Guidance dictionaries for Oferta Dorada | |
headline_guidance = { | |
"1": "Educational, introduce the concept as new", | |
"2": "Differentiate from competitors, add specific benefits", | |
"3": "Highlight unique mechanism or approach", | |
"4": "Use data, research or challenge beliefs", | |
"5": "Focus on identity and emotional transformation" | |
} | |
promise_guidance = { | |
"1": "Direct and clear benefit without comparisons", | |
"2": "Quantified benefit with specific advantage", | |
"3": "Unique mechanism or proprietary method", | |
"4": "Evidence-backed transformation with specifics", | |
"5": "Identity shift and deeper meaning beyond results" | |
} | |
subtitle_guidance = { | |
"1": "Simple proof with basic numbers", | |
"2": "Comparative results with timeframes", | |
"3": "Specific mechanism results with details", | |
"4": "Research-backed evidence and guarantees", | |
"5": "Community and movement-based validation" | |
} | |
formula_specific_guidance = f""" | |
For Oferta Dorada (Nivel {level_num}): | |
- Headline: {headline_guidance.get(level_num, "Match market awareness level")} | |
- Promise: {promise_guidance.get(level_num, "Focus on transformation")} | |
- Subtitle: {subtitle_guidance.get(level_num, "Provide appropriate proof")}""" | |
elif selected_formula_name == "Contraste Revelador": | |
# Guidance dictionaries for Contraste Revelador | |
vision_guidance = { | |
"1": "Simple, aspirational future state", | |
"2": "Specific vision with clear advantages", | |
"3": "Unique approach to achieving desires", | |
"4": "Evidence-based optimal state", | |
"5": "Transcendent vision beyond conventional goals" | |
} | |
solution_guidance = { | |
"1": "Clear, straightforward solution", | |
"2": "Solution with specific advantages", | |
"3": "Unique mechanism or proprietary method", | |
"4": "Validated solution with research backing", | |
"5": "Paradigm-shifting approach" | |
} | |
result_guidance = { | |
"1": "Simple emotional outcome with basic proof", | |
"2": "Specific results with comparative advantages", | |
"3": "Detailed outcomes from unique approach", | |
"4": "Evidence-backed results with specifics", | |
"5": "Identity-level transformation stories" | |
} | |
formula_specific_guidance = f""" | |
For Contraste Revelador (Nivel {level_num}): | |
- Visión: {vision_guidance.get(level_num, "Create inspiring vision")} | |
- Solución: {solution_guidance.get(level_num, "Offer transformative solution")} | |
- Resultado: {result_guidance.get(level_num, "Show emotional transformation")}""" | |
elif selected_formula_name == "Propuesta Única de Valor": | |
# Guidance dictionaries for Propuesta Única de Valor | |
transformation_guidance = { | |
"1": "Clear, direct transformation", | |
"2": "Specific, quantified transformation", | |
"3": "Unique mechanism transformation", | |
"4": "Evidence-backed, validated transformation", | |
"5": "Identity-level, paradigm-shifting transformation" | |
} | |
objection_guidance = { | |
"1": "Address basic concerns simply", | |
"2": "Counter specific objections with advantages", | |
"3": "Handle objections with unique approach", | |
"4": "Evidence-based objection handling", | |
"5": "Transform objections into strengths" | |
} | |
formula_specific_guidance = f""" | |
For Propuesta Única de Valor (Nivel {level_num}): | |
- Transformación: {transformation_guidance.get(level_num, "Focus on key transformation")} | |
- Objeciones: {objection_guidance.get(level_num, "Handle emotional objections")}""" | |
# Add the concise guidance to the instruction | |
instruction += f"\n\nSOPHISTICATION GUIDANCE (NIVEL {level_num}):{formula_specific_guidance}" | |
return instruction | |
def create_integrated_instruction(target_audience=None, product_service=None, selected_formula_name=None, | |
file_content=None, bullet_content=None, bonus_content=None, skills=None, | |
sophistication_level=None): | |
""" | |
Crea una instrucción integrada que combina la oferta principal, los beneficios y los bonos | |
con un formato consistente para todas las fórmulas. | |
Args: | |
target_audience: Descripción del público objetivo | |
product_service: Información del producto/servicio | |
selected_formula_name: Nombre de la fórmula seleccionada | |
file_content: Contenido de archivos subidos para la oferta principal | |
bullet_content: Contenido de archivos subidos para los beneficios | |
bonus_content: Contenido de archivos subidos para los bonos | |
skills: Habilidades y experiencia del usuario | |
sophistication_level: Nivel de sofisticación del mercado | |
Returns: | |
str: Instrucción completa e integrada | |
""" | |
from bullets.generator import create_bullet_instruction | |
from bonuses.generator import create_bonus_instruction | |
# Crear la instrucción base para la oferta principal | |
offer_instruction = create_offer_instruction( | |
target_audience=target_audience, | |
product_service=product_service, | |
selected_formula_name=selected_formula_name, | |
file_content=file_content, | |
skills=skills, | |
sophistication_level=sophistication_level | |
) | |
# Crear instrucciones para los beneficios | |
try: | |
bullet_instruction = create_bullet_instruction( | |
target_audience=target_audience, | |
product_service=product_service, | |
selected_formula_name=selected_formula_name, | |
uploaded_content=bullet_content or file_content, # Priorizar bullet_content si existe | |
skills=skills | |
) | |
except TypeError: | |
# Si la función no acepta selected_formula_name, llamarla sin ese parámetro | |
bullet_instruction = create_bullet_instruction( | |
target_audience=target_audience, | |
product_service=product_service, | |
uploaded_content=bullet_content or file_content, # Priorizar bullet_content si existe | |
skills=skills | |
) | |
# Crear instrucciones para los bonos | |
try: | |
bonus_instruction = create_bonus_instruction( | |
target_audience=target_audience, | |
product_service=product_service, | |
selected_formula_name=selected_formula_name, | |
uploaded_content=bonus_content or file_content, # Priorizar bonus_content si existe | |
skills=skills | |
) | |
except TypeError: | |
# Si la función no acepta selected_formula_name, llamarla sin ese parámetro | |
bonus_instruction = create_bonus_instruction( | |
target_audience=target_audience, | |
product_service=product_service, | |
uploaded_content=bonus_content or file_content, # Priorizar bonus_content si existe | |
skills=skills | |
) | |
# Instrucción de integración que especifica el formato exacto para todas las fórmulas | |
integration_instruction = f""" | |
INSTRUCCIÓN DE INTEGRACIÓN IMPORTANTE: | |
Para cada una de las 3 versiones de oferta que generes, sigue EXACTAMENTE esta estructura: | |
VERSIÓN X: | |
[Promesa principal según la fórmula {selected_formula_name}] | |
BENEFICIOS: | |
• [Beneficio específico 1] | |
• [Beneficio específico 2] | |
• [Beneficio específico 3] | |
• [Beneficio específico 4] | |
• [Beneficio específico 5] | |
BONOS: | |
• BONO #1: [NOMBRE ATRACTIVO] - [Descripción breve] - Valor: $X | |
• BONO #2: [NOMBRE ATRACTIVO] - [Descripción breve] - Valor: $X | |
• BONO #3: [NOMBRE ATRACTIVO] - [Descripción breve] - Valor: $X | |
Valor total de bonos: $XXX - Todo incluido con tu inversión hoy. | |
IMPORTANTE: | |
- Mantén esta estructura exacta para TODAS las fórmulas, incluyendo Propuesta Única de Valor | |
- Cada versión debe tener su propia sección de BENEFICIOS y BONOS | |
- Presenta las 3 versiones completas una tras otra | |
- No incluyas explicaciones o comentarios adicionales | |
""" | |
# Combinar todas las instrucciones | |
complete_instruction = offer_instruction + "\n\n" + bullet_instruction + "\n\n" + bonus_instruction + "\n\n" + integration_instruction | |
return complete_instruction |