|
|
|
|
|
from datetime import datetime |
|
|
from typing import List, Optional, Dict, Any |
|
|
from pydantic import BaseModel, Field, EmailStr |
|
|
|
|
|
class Company(BaseModel): |
|
|
id: Optional[str] = None |
|
|
name: str |
|
|
domain: str |
|
|
industry: str |
|
|
size: Optional[str] = None |
|
|
pains: List[str] = [] |
|
|
notes: List[str] = [] |
|
|
summary: Optional[str] = None |
|
|
|
|
|
class Contact(BaseModel): |
|
|
id: str |
|
|
name: str |
|
|
email: EmailStr |
|
|
title: str |
|
|
prospect_id: str |
|
|
|
|
|
class Fact(BaseModel): |
|
|
id: str |
|
|
source: str |
|
|
text: str |
|
|
collected_at: datetime |
|
|
ttl_hours: int |
|
|
confidence: float |
|
|
company_id: str |
|
|
|
|
|
class Prospect(BaseModel): |
|
|
id: str |
|
|
company: Company |
|
|
contacts: List[Contact] = [] |
|
|
facts: List[Fact] = [] |
|
|
fit_score: float = 0.0 |
|
|
status: str = "new" |
|
|
dropped_reason: Optional[str] = None |
|
|
summary: Optional[str] = None |
|
|
email_draft: Optional[Dict[str, str]] = None |
|
|
thread_id: Optional[str] = None |
|
|
|
|
|
class Message(BaseModel): |
|
|
id: str |
|
|
thread_id: str |
|
|
prospect_id: str |
|
|
direction: str |
|
|
subject: str |
|
|
body: str |
|
|
sent_at: datetime |
|
|
|
|
|
class Thread(BaseModel): |
|
|
id: str |
|
|
prospect_id: str |
|
|
messages: List[Message] = [] |
|
|
|
|
|
class Suppression(BaseModel): |
|
|
id: str |
|
|
type: str |
|
|
value: str |
|
|
reason: str |
|
|
expires_at: Optional[datetime] = None |
|
|
|
|
|
class HandoffPacket(BaseModel): |
|
|
prospect: Prospect |
|
|
thread: Optional[Thread] |
|
|
calendar_slots: List[Dict[str, str]] = [] |
|
|
generated_at: datetime |
|
|
|
|
|
class PipelineEvent(BaseModel): |
|
|
ts: datetime |
|
|
type: str |
|
|
agent: str |
|
|
message: str |
|
|
payload: Dict[str, Any] = {} |
|
|
|
|
|
class PipelineRequest(BaseModel): |
|
|
""" |
|
|
Pipeline request supporting both dynamic and static modes |
|
|
|
|
|
NEW: company_names - List of company names to discover dynamically |
|
|
LEGACY: company_ids - List of company IDs from seed file (backwards compatible) |
|
|
""" |
|
|
company_names: Optional[List[str]] = None |
|
|
company_ids: Optional[List[str]] = None |
|
|
use_seed_file: bool = False |
|
|
|
|
|
class WriterStreamRequest(BaseModel): |
|
|
company_id: str |