mirror of
https://github.com/x1xhlol/system-prompts-and-models-of-ai-tools.git
synced 2026-06-18 15:29:36 +00:00
ADDED MODULES: - intelligence/icp.py: ICP Builder — 34 Saudi industries, Arabic+English queries - intelligence/discovery.py: Multi-source discovery — web search + 34 seed companies - intelligence/enrichment.py: Company/person enrichment — website data + news - intelligence/scoring.py: 5-dimension scoring — Fit/Intent/Access/Value/Urgency - intelligence/entity_resolution.py: Arabic/English dedup + fuzzy matching - intelligence/outreach.py: Arabic-first outreach — WhatsApp/Email/LinkedIn - intelligence/triggers.py: Trigger alerts — funding/hiring/expansion/IPO - intelligence/pipeline.py: End-to-end orchestrator — ICP→Discovery→Score→Brief - routes/intelligence.py: 15 REST endpoints + audit chain integration - DB: 5 new tables — intelligence_leads/runs/watchlist/triggers/entities ARCHITECTURE: - Layer 1: Signal collection (web + curated Saudi B2B DB of 34 companies) - Layer 2: Enrichment (website data, news, tech stack detection) - Layer 3: 5D scoring — Master = 0.30 Fit + 0.25 Intent + 0.15 Access + 0.20 Value + 0.10 Urgency - Layer 4: Entity resolution — Arabic/English fuzzy dedup - Layer 5: Outreach brief — signal-driven WhatsApp/Email/LinkedIn in Arabic MOTION SUPPORT: B2B sales | partnership | channel | tender
88 lines
4.5 KiB
Python
88 lines
4.5 KiB
Python
"""
|
|
ICP Builder — Ideal Customer Profile Engine
|
|
Defines and stores ICP configs per org. Drives all discovery logic.
|
|
"""
|
|
from dataclasses import dataclass, field, asdict
|
|
from typing import List, Optional, Dict, Any
|
|
import json
|
|
|
|
|
|
@dataclass
|
|
class ICPConfig:
|
|
"""Ideal Customer Profile — full definition per org"""
|
|
org_id: str
|
|
|
|
# Company attributes
|
|
industries: List[str] = field(default_factory=list) # e.g. ["tech", "healthcare", "banking"]
|
|
company_sizes: List[str] = field(default_factory=list) # e.g. ["50-200", "200-1000"]
|
|
regions: List[str] = field(default_factory=list) # e.g. ["Riyadh", "Jeddah", "KSA"]
|
|
revenue_range_sar: Dict[str, float] = field(default_factory=dict) # {"min": 1000000, "max": 50000000}
|
|
tech_signals: List[str] = field(default_factory=list) # e.g. ["Salesforce", "SAP", "HubSpot"]
|
|
growth_signals: List[str] = field(default_factory=list) # e.g. ["hiring", "funding", "expansion"]
|
|
languages: List[str] = field(default_factory=list) # e.g. ["ar", "en"]
|
|
|
|
# Person attributes (buying committee)
|
|
target_titles_ar: List[str] = field(default_factory=list) # Arabic titles
|
|
target_titles_en: List[str] = field(default_factory=list) # English titles
|
|
seniority_levels: List[str] = field(default_factory=list) # e.g. ["C-level", "VP", "Director"]
|
|
|
|
# Opportunity type
|
|
motion: str = "sales" # sales | partnership | channel | tender
|
|
segment: str = "B2B" # B2B | B2C | B2T
|
|
|
|
# Scoring weights (must sum to 1.0)
|
|
fit_weight: float = 0.30
|
|
intent_weight: float = 0.25
|
|
access_weight: float = 0.15
|
|
value_weight: float = 0.20
|
|
urgency_weight: float = 0.10
|
|
|
|
# Discovery sources
|
|
discovery_sources: List[str] = field(default_factory=lambda: [
|
|
"web_search", "linkedin_public", "news", "job_boards", "directories"
|
|
])
|
|
|
|
def to_dict(self) -> Dict[str, Any]:
|
|
return asdict(self)
|
|
|
|
def build_search_queries(self) -> List[str]:
|
|
"""Auto-generate search queries from ICP attributes — Arabic + English"""
|
|
queries = []
|
|
for industry in self.industries[:3]:
|
|
for region in self.regions[:2]:
|
|
queries.append(f"شركات {industry} في {region}")
|
|
queries.append(f"{industry} companies in {region} Saudi Arabia")
|
|
for signal in self.growth_signals[:2]:
|
|
for industry in self.industries[:2]:
|
|
queries.append(f"{industry} {signal} Saudi Arabia 2025 2026")
|
|
for title in self.target_titles_ar[:2]:
|
|
for industry in self.industries[:2]:
|
|
queries.append(f"{title} {industry} السعودية")
|
|
for title in self.target_titles_en[:2]:
|
|
for industry in self.industries[:2]:
|
|
queries.append(f"{title} {industry} Saudi Arabia LinkedIn")
|
|
return queries[:20] # cap at 20 queries
|
|
|
|
|
|
# Default Dealix ICP — B2B SaaS / Enterprise, Saudi-first
|
|
DEALIX_DEFAULT_ICP = ICPConfig(
|
|
org_id="dealix",
|
|
industries=["تقنية", "رعاية صحية", "مالية وبنوك", "عقارات", "تصنيع", "تجزئة", "لوجستيات",
|
|
"technology", "healthcare", "banking", "real estate", "manufacturing", "retail"],
|
|
company_sizes=["10-50", "50-200", "200-1000", "1000+"],
|
|
regions=["الرياض", "جدة", "الدمام", "المنطقة الشرقية", "Riyadh", "Jeddah", "Dammam", "KSA"],
|
|
revenue_range_sar={"min": 500_000, "max": 500_000_000},
|
|
tech_signals=["Salesforce", "SAP", "Oracle", "HubSpot", "Zoho", "Microsoft Dynamics", "Excel", "WhatsApp Business"],
|
|
growth_signals=["hiring", "expansion", "funding", "partnership", "IPO", "digital transformation",
|
|
"توظيف", "توسع", "تمويل", "شراكة", "تحول رقمي"],
|
|
languages=["ar", "en"],
|
|
target_titles_ar=["مدير تطوير الأعمال", "مدير المبيعات", "الرئيس التنفيذي", "المدير التجاري",
|
|
"مدير الشراكات", "مدير التسويق", "مدير المشتريات", "نائب الرئيس"],
|
|
target_titles_en=["CEO", "CCO", "VP Sales", "Head of Business Development", "Commercial Director",
|
|
"Chief Revenue Officer", "Sales Director", "Partnerships Manager"],
|
|
seniority_levels=["C-level", "VP", "Director", "Head of", "Manager"],
|
|
motion="sales",
|
|
segment="B2B",
|
|
discovery_sources=["web_search", "news", "job_boards", "directories", "linkedin_public"],
|
|
)
|