fix: Outreach speedup (Switch to Flash) & Robust MD Export
This commit is contained in:
@@ -43,35 +43,34 @@ export const StepReport: React.FC<StepReportProps> = ({ results, strategy, onRes
|
|||||||
};
|
};
|
||||||
|
|
||||||
const downloadMarkdown = () => {
|
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 headers = ["Company", "Prio", "Rev/Emp", "Status", ...signalHeaders, "Recommendation"];
|
||||||
|
|
||||||
const rows = sortedResults.map(r => {
|
const rows = sortedResults.map(r => {
|
||||||
const signalValues = strategy.signals.map(s => {
|
const signalValues = (strategy.signals || []).map(s => {
|
||||||
const data = r.dynamicAnalysis[s.id];
|
const data = r.dynamicAnalysis ? r.dynamicAnalysis[s.id] : null;
|
||||||
if (!data) return '-';
|
if (!data) return '-';
|
||||||
|
|
||||||
let content = data.value || '-';
|
let content = data.value || '-';
|
||||||
// Sanitize content pipes
|
|
||||||
content = content.replace(/\|/g, '\\|');
|
content = content.replace(/\|/g, '\\|');
|
||||||
|
|
||||||
if (data.proof) {
|
if (data.proof) {
|
||||||
// Sanitize proof pipes and newlines
|
|
||||||
const safeProof = data.proof.replace(/\|/g, '\\|').replace(/(\r\n|\n|\r)/gm, ' ');
|
const safeProof = data.proof.replace(/\|/g, '\\|').replace(/(\r\n|\n|\r)/gm, ' ');
|
||||||
content += `<br><sub>*Proof: ${safeProof}*</sub>`;
|
content += `<br><sub>*Proof: ${safeProof}*</sub>`;
|
||||||
}
|
}
|
||||||
return content;
|
return content;
|
||||||
});
|
});
|
||||||
|
|
||||||
// Helper to sanitize other fields
|
|
||||||
const safe = (str: string) => (str || '').replace(/\|/g, '\\|').replace(/(\r\n|\n|\r)/gm, ' ');
|
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)} |`;
|
return `| ${safe(r.companyName)} | ${r.tier} | ${safe(r.revenue)} / ${safe(r.employees)} | ${r.status} | ${signalValues.join(" | ")} | ${safe(r.recommendation)} |`;
|
||||||
});
|
});
|
||||||
|
|
||||||
const content = `
|
const content = `
|
||||||
# Market Intelligence Report: ${strategy.productContext}
|
# Market Intelligence Report: ${strategy.productContext || 'N/A'}
|
||||||
**Context:** ${strategy.idealCustomerProfile}
|
**Context:** ${strategy.idealCustomerProfile || 'N/A'}
|
||||||
|
|
||||||
**Search Strategy ICP:** ${strategy.searchStrategyICP || 'N/A'}
|
**Search Strategy ICP:** ${strategy.searchStrategyICP || 'N/A'}
|
||||||
**Digital Signals:** ${strategy.digitalSignals || 'N/A'}
|
**Digital Signals:** ${strategy.digitalSignals || 'N/A'}
|
||||||
|
|||||||
@@ -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):
|
def generate_outreach_campaign(company_data_json, knowledge_base_content, reference_url, specific_role=None):
|
||||||
"""
|
"""
|
||||||
Erstellt personalisierte E-Mail-Kampagnen.
|
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')
|
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'}) ---")
|
logger.info(f"--- STARTING OUTREACH GENERATION FOR: {company_name} (Role: {specific_role if specific_role else 'Top 5'}) ---")
|
||||||
|
|
||||||
api_key = load_gemini_api_key()
|
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:
|
if specific_role:
|
||||||
# --- MODE B: SINGLE ROLE GENERATION ---
|
# --- MODE B: SINGLE ROLE GENERATION ---
|
||||||
|
|||||||
Reference in New Issue
Block a user