fix: Outreach speedup (Switch to Flash) & Robust MD Export

This commit is contained in:
2025-12-29 15:01:28 +00:00
parent d013e9d45e
commit 3f3330309d
2 changed files with 9 additions and 11 deletions

View File

@@ -43,35 +43,34 @@ export const StepReport: React.FC<StepReportProps> = ({ results, strategy, onRes
};
const downloadMarkdown = () => {
const signalHeaders = strategy.signals.map(s => s.name);
if (!strategy || !results) return;
const signalHeaders = (strategy.signals || []).map(s => s.name);
const headers = ["Company", "Prio", "Rev/Emp", "Status", ...signalHeaders, "Recommendation"];
const rows = sortedResults.map(r => {
const signalValues = strategy.signals.map(s => {
const data = r.dynamicAnalysis[s.id];
const signalValues = (strategy.signals || []).map(s => {
const data = r.dynamicAnalysis ? r.dynamicAnalysis[s.id] : null;
if (!data) return '-';
let content = data.value || '-';
// Sanitize content pipes
content = content.replace(/\|/g, '\\|');
if (data.proof) {
// Sanitize proof pipes and newlines
const safeProof = data.proof.replace(/\|/g, '\\|').replace(/(\r\n|\n|\r)/gm, ' ');
content += `<br><sub>*Proof: ${safeProof}*</sub>`;
}
return content;
});
// Helper to sanitize other fields
const safe = (str: string) => (str || '').replace(/\|/g, '\\|').replace(/(\r\n|\n|\r)/gm, ' ');
return `| ${safe(r.companyName)} | ${r.tier} | ${safe(r.revenue)} / ${safe(r.employees)} | ${r.status} | ${signalValues.join(" | ")} | ${safe(r.recommendation)} |`;
});
const content = `
# Market Intelligence Report: ${strategy.productContext}
**Context:** ${strategy.idealCustomerProfile}
# Market Intelligence Report: ${strategy.productContext || 'N/A'}
**Context:** ${strategy.idealCustomerProfile || 'N/A'}
**Search Strategy ICP:** ${strategy.searchStrategyICP || 'N/A'}
**Digital Signals:** ${strategy.digitalSignals || 'N/A'}

View File

@@ -547,14 +547,13 @@ def analyze_company(company_name, strategy, target_market):
def generate_outreach_campaign(company_data_json, knowledge_base_content, reference_url, specific_role=None):
"""
Erstellt personalisierte E-Mail-Kampagnen.
Modus A (Default): Generiert Top 5 Kampagnen + Liste weiterer relevanter Rollen.
Modus B (specific_role): Generiert nur Kampagne für diese eine Rolle.
"""
company_name = company_data_json.get('companyName', 'Unknown')
logger.info(f"--- STARTING OUTREACH GENERATION FOR: {company_name} (Role: {specific_role if specific_role else 'Top 5'}) ---")
api_key = load_gemini_api_key()
GEMINI_API_URL = f"https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-pro:generateContent?key={api_key}"
# Use gemini-2.5-flash for SPEED in outreach generation
GEMINI_API_URL = f"https://generativelanguage.googleapis.com/v1/models/gemini-2.5-flash:generateContent?key={api_key}"
if specific_role:
# --- MODE B: SINGLE ROLE GENERATION ---