File size: 6,054 Bytes
96de966
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
"""

Competitor analysis for investor relations.

Uses free HuggingFace models with rule-based fallback.

"""
import re
from transformers import pipeline

_analyzer = None


def get_analyzer(model_name="google/flan-t5-base"):
    """Load text2text generation pipeline with fallback."""
    global _analyzer
    if _analyzer is None:
        try:
            _analyzer = pipeline(
                "text2text-generation",
                model=model_name,
                device=-1  # CPU only for free deployment
            )
        except Exception:
            _analyzer = None
    return _analyzer


def extract_competitor_info(competitors_data):
    """Parse competitor data into structured format."""
    lines = [l.strip() for l in competitors_data.split('\n') if l.strip()]
    
    competitors = []
    for line in lines:
        # Try to extract competitor name and key facts
        if ':' in line:
            parts = line.split(':', 1)
            name = parts[0].strip()
            details = parts[1].strip()
            competitors.append({'name': name, 'details': details})
        else:
            competitors.append({'name': f"Competitor {len(competitors)+1}", 'details': line})
    
    return competitors


def rule_based_analysis(company_name, competitors_data, market_context):
    """Fallback: Structure competitor analysis using rules."""
    competitors = extract_competitor_info(competitors_data)
    
    analysis_parts = [f"## Competitive Landscape Analysis for {company_name}\n"]
    
    # Market overview
    analysis_parts.append("### Market Context\n")
    analysis_parts.append(f"{market_context}\n")
    
    # Competitor breakdown
    analysis_parts.append("\n### Competitive Position\n")
    
    for comp in competitors:
        analysis_parts.append(f"\n**{comp['name']}**")
        analysis_parts.append(f"- {comp['details']}")
        
        # Identify strengths/threats
        details_lower = comp['details'].lower()
        
        if any(word in details_lower for word in ['launch', 'new', 'expand', 'grow', 'acqui']):
            analysis_parts.append(f"- *Threat Level*: Active expansion and innovation")
        
        if any(word in details_lower for word in ['revenue', 'billion', 'million', '$']):
            # Try to extract revenue
            import re
            revenue_match = re.search(r'\$?(\d+(?:\.\d+)?)\s*([BM])', comp['details'], re.I)
            if revenue_match:
                val = revenue_match.group(1)
                unit = revenue_match.group(2).upper()
                analysis_parts.append(f"- *Scale*: ${val}{unit} revenue")
    
    # Strategic implications
    analysis_parts.append("\n### Strategic Implications for " + company_name + "\n")
    
    if 'ai' in competitors_data.lower() or 'ml' in competitors_data.lower():
        analysis_parts.append("- **Technology Focus**: Multiple competitors investing in AI/ML capabilities - maintain competitive technology roadmap")
    
    if 'expansion' in competitors_data.lower() or 'market' in competitors_data.lower():
        analysis_parts.append("- **Market Expansion**: Competitive pressure in geographic/market segment expansion")
    
    if 'acqui' in competitors_data.lower():
        analysis_parts.append("- **M&A Activity**: Active acquisition landscape - identify strategic targets")
    
    if 'pricing' in competitors_data.lower() or 'price' in competitors_data.lower():
        analysis_parts.append("- **Pricing Pressure**: Monitor competitive pricing dynamics and value proposition")
    
    # Recommendations
    analysis_parts.append("\n### Recommendations\n")
    analysis_parts.append(f"- Maintain differentiation through unique value propositions")
    analysis_parts.append(f"- Monitor competitor product launches and market positioning")
    analysis_parts.append(f"- Leverage strengths in areas where competitors show weakness")
    analysis_parts.append(f"- Consider strategic partnerships or acquisitions to strengthen market position")
    
    return "\n".join(analysis_parts)


def analyze_competitors(company_name, competitors_data, market_context, model_name="google/flan-t5-base"):
    """

    Analyze competitive landscape for investor communications.

    

    Args:

        company_name: Name of the company

        competitors_data: Text containing competitor information

        market_context: Industry trends and market conditions

        model_name: HuggingFace model to use

    

    Returns:

        Formatted competitive analysis report

    """
    analyzer = get_analyzer(model_name)
    
    if analyzer is None:
        # Use rule-based fallback
        return rule_based_analysis(company_name, competitors_data, market_context)
    
    # Use AI model
    prompt = f"""Analyze the competitive landscape for {company_name}.



Market Context:

{market_context}



Competitor Information:

{competitors_data[:1500]}



Provide a competitive analysis with:

1. Market positioning overview

2. Key competitor strengths and threats

3. Strategic implications for {company_name}

4. Recommendations for maintaining competitive advantage



Analysis:"""
    
    try:
        result = analyzer(
            prompt,
            max_length=512,
            min_length=150,
            do_sample=False,
            temperature=0.7
        )
        analysis = result[0]['generated_text']
        
        # Format the output
        formatted = f"""## Competitive Landscape Analysis for {company_name}



### Market Context

{market_context}



### Competitive Analysis

{analysis}



### Competitor Overview

{competitors_data}



---

*Note: This analysis should be supplemented with detailed market research and verified competitive intelligence.*

"""
        return formatted
    
    except Exception as e:
        # Fallback to rule-based on any error
        return rule_based_analysis(company_name, competitors_data, market_context)