Initial commit — Mek-Tech AI Consultancy Framework v2.0
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
"""Pydantic v2 data models for AI-driven Lead Generation & Tech Scoping."""
|
||||
from __future__ import annotations
|
||||
from pydantic import BaseModel, Field
|
||||
from typing import List, Optional
|
||||
|
||||
|
||||
class CompanyTechProfile(BaseModel):
|
||||
company_name: str = Field(
|
||||
...,
|
||||
description="Official company name as detected from the page content",
|
||||
min_length=1,
|
||||
)
|
||||
detected_technologies: List[str] = Field(
|
||||
default_factory=list,
|
||||
description="Detected technologies: Spark, Kafka, AWS, Kubernetes, Snowflake, Airflow, dbt, etc.",
|
||||
)
|
||||
current_pain_points: List[str] = Field(
|
||||
default_factory=list,
|
||||
description="Inferred pain points: legacy migration, data quality, scalability, missing AI/ML, etc.",
|
||||
)
|
||||
estimated_data_maturity: Optional[str] = Field(
|
||||
default="Medium",
|
||||
description="Estimated data maturity level: Low, Medium, or High",
|
||||
)
|
||||
outreach_hook: Optional[str] = Field(
|
||||
default="",
|
||||
description="Concrete reason why a Forward Deployed Engineer can help this company right now",
|
||||
)
|
||||
industry: Optional[str] = Field(
|
||||
default=None,
|
||||
description="Detected industry or sector",
|
||||
)
|
||||
company_size_hint: Optional[str] = Field(
|
||||
default=None,
|
||||
description="Estimated company size: Startup, Scale-up, Mid-market, Enterprise",
|
||||
)
|
||||
tech_blog_posts: Optional[str] = Field(
|
||||
default=None,
|
||||
description="URL to engineering/tech blog if detected",
|
||||
)
|
||||
hiring_roles: List[str] = Field(
|
||||
default_factory=list,
|
||||
description="Job titles/roles detected from careers page: Data Engineer, ML Engineer, DevOps, etc.",
|
||||
)
|
||||
desired_skills: List[str] = Field(
|
||||
default_factory=list,
|
||||
description="Specific skills/technologies they are hiring for: Python, Spark, Terraform, dbt, etc.",
|
||||
)
|
||||
job_listings_url: Optional[str] = Field(
|
||||
default=None,
|
||||
description="URL to careers/jobs page if detected on the site",
|
||||
)
|
||||
extracted_at: Optional[str] = Field(
|
||||
default=None,
|
||||
description="ISO timestamp of extraction",
|
||||
)
|
||||
source_url: Optional[str] = Field(
|
||||
default=None,
|
||||
description="Original URL that was scraped",
|
||||
)
|
||||
|
||||
|
||||
class ScrapeResult(BaseModel):
|
||||
url: str
|
||||
title: str
|
||||
text_content: str
|
||||
text_length: int
|
||||
status_code: Optional[int] = None
|
||||
error: Optional[str] = None
|
||||
|
||||
|
||||
class LeadGenRequest(BaseModel):
|
||||
url: str = Field(..., description="URL of the target company page to analyze")
|
||||
force_refresh: bool = Field(default=False, description="Skip cache and force fresh scrape")
|
||||
|
||||
|
||||
class LeadGenResponse(BaseModel):
|
||||
success: bool
|
||||
profile: Optional[CompanyTechProfile] = None
|
||||
error: Optional[str] = None
|
||||
elapsed_ms: Optional[float] = None
|
||||
Reference in New Issue
Block a user