Spaces:
Runtime error
Runtime error
| """Specialized strategies for autonomous business and revenue generation.""" | |
| import logging | |
| from typing import Dict, Any, List, Optional, Set, Union, Type, Tuple | |
| import json | |
| from dataclasses import dataclass, field | |
| from enum import Enum | |
| from datetime import datetime | |
| import numpy as np | |
| from collections import defaultdict | |
| from .base import ReasoningStrategy | |
| class VentureType(Enum): | |
| """Types of business ventures.""" | |
| AI_STARTUP = "ai_startup" | |
| SAAS = "saas" | |
| API_SERVICE = "api_service" | |
| DATA_ANALYTICS = "data_analytics" | |
| AUTOMATION_SERVICE = "automation_service" | |
| CONSULTING = "consulting" | |
| DIGITAL_PRODUCTS = "digital_products" | |
| MARKETPLACE = "marketplace" | |
| class RevenueStream(Enum): | |
| """Types of revenue streams.""" | |
| SUBSCRIPTION = "subscription" | |
| USAGE_BASED = "usage_based" | |
| LICENSING = "licensing" | |
| CONSULTING = "consulting" | |
| PRODUCT_SALES = "product_sales" | |
| COMMISSION = "commission" | |
| ADVERTISING = "advertising" | |
| PARTNERSHIP = "partnership" | |
| class VentureMetrics: | |
| """Key business metrics.""" | |
| revenue: float | |
| profit_margin: float | |
| customer_acquisition_cost: float | |
| lifetime_value: float | |
| churn_rate: float | |
| growth_rate: float | |
| burn_rate: float | |
| runway_months: float | |
| roi: float | |
| class MarketOpportunity: | |
| """Market opportunity analysis.""" | |
| market_size: float | |
| growth_potential: float | |
| competition_level: float | |
| entry_barriers: float | |
| regulatory_risks: float | |
| technology_risks: float | |
| monetization_potential: float | |
| class AIStartupStrategy(ReasoningStrategy): | |
| """ | |
| Advanced AI startup strategy that: | |
| 1. Identifies profitable AI applications | |
| 2. Analyzes market opportunities | |
| 3. Develops MVP strategies | |
| 4. Plans scaling approaches | |
| 5. Optimizes revenue streams | |
| """ | |
| def __init__(self, config: Optional[Dict[str, Any]] = None): | |
| super().__init__() | |
| self.config = config or {} | |
| # Standard reasoning parameters | |
| self.min_confidence = self.config.get('min_confidence', 0.7) | |
| self.parallel_threshold = self.config.get('parallel_threshold', 3) | |
| self.learning_rate = self.config.get('learning_rate', 0.1) | |
| self.strategy_weights = self.config.get('strategy_weights', { | |
| "LOCAL_LLM": 0.8, | |
| "CHAIN_OF_THOUGHT": 0.6, | |
| "TREE_OF_THOUGHTS": 0.5, | |
| "META_LEARNING": 0.4 | |
| }) | |
| async def reason(self, query: str, context: Dict[str, Any]) -> Dict[str, Any]: | |
| """Generate AI startup strategy.""" | |
| try: | |
| # Market analysis | |
| market = await self._analyze_market(query, context) | |
| # Technology assessment | |
| tech = await self._assess_technology(market, context) | |
| # Business model | |
| model = await self._develop_business_model(tech, context) | |
| # Growth strategy | |
| strategy = await self._create_growth_strategy(model, context) | |
| # Financial projections | |
| projections = await self._project_financials(strategy, context) | |
| return { | |
| "success": projections["annual_profit"] >= 1_000_000, | |
| "market_analysis": market, | |
| "tech_assessment": tech, | |
| "business_model": model, | |
| "growth_strategy": strategy, | |
| "financials": projections, | |
| "confidence": self._calculate_confidence(projections) | |
| } | |
| except Exception as e: | |
| logging.error(f"Error in AI startup strategy: {str(e)}") | |
| return {"success": False, "error": str(e)} | |
| class SaaSVentureStrategy(ReasoningStrategy): | |
| """ | |
| Advanced SaaS venture strategy that: | |
| 1. Identifies scalable SaaS opportunities | |
| 2. Develops pricing strategies | |
| 3. Plans customer acquisition | |
| 4. Optimizes retention | |
| 5. Maximizes recurring revenue | |
| """ | |
| def __init__(self, config: Optional[Dict[str, Any]] = None): | |
| super().__init__() | |
| self.config = config or {} | |
| # Standard reasoning parameters | |
| self.min_confidence = self.config.get('min_confidence', 0.7) | |
| self.parallel_threshold = self.config.get('parallel_threshold', 3) | |
| self.learning_rate = self.config.get('learning_rate', 0.1) | |
| self.strategy_weights = self.config.get('strategy_weights', { | |
| "LOCAL_LLM": 0.8, | |
| "CHAIN_OF_THOUGHT": 0.6, | |
| "TREE_OF_THOUGHTS": 0.5, | |
| "META_LEARNING": 0.4 | |
| }) | |
| async def reason(self, query: str, context: Dict[str, Any]) -> Dict[str, Any]: | |
| """Generate SaaS venture strategy.""" | |
| try: | |
| # Opportunity analysis | |
| opportunity = await self._analyze_opportunity(query, context) | |
| # Product strategy | |
| product = await self._develop_product_strategy(opportunity, context) | |
| # Pricing model | |
| pricing = await self._create_pricing_model(product, context) | |
| # Growth plan | |
| growth = await self._plan_growth(pricing, context) | |
| # Revenue projections | |
| projections = await self._project_revenue(growth, context) | |
| return { | |
| "success": projections["annual_revenue"] >= 1_000_000, | |
| "opportunity": opportunity, | |
| "product": product, | |
| "pricing": pricing, | |
| "growth": growth, | |
| "projections": projections | |
| } | |
| except Exception as e: | |
| logging.error(f"Error in SaaS venture strategy: {str(e)}") | |
| return {"success": False, "error": str(e)} | |
| class AutomationVentureStrategy(ReasoningStrategy): | |
| """ | |
| Advanced automation venture strategy that: | |
| 1. Identifies automation opportunities | |
| 2. Analyzes cost-saving potential | |
| 3. Develops automation solutions | |
| 4. Plans implementation | |
| 5. Maximizes ROI | |
| """ | |
| def __init__(self, config: Optional[Dict[str, Any]] = None): | |
| super().__init__() | |
| self.config = config or {} | |
| # Standard reasoning parameters | |
| self.min_confidence = self.config.get('min_confidence', 0.7) | |
| self.parallel_threshold = self.config.get('parallel_threshold', 3) | |
| self.learning_rate = self.config.get('learning_rate', 0.1) | |
| self.strategy_weights = self.config.get('strategy_weights', { | |
| "LOCAL_LLM": 0.8, | |
| "CHAIN_OF_THOUGHT": 0.6, | |
| "TREE_OF_THOUGHTS": 0.5, | |
| "META_LEARNING": 0.4 | |
| }) | |
| async def reason(self, query: str, context: Dict[str, Any]) -> Dict[str, Any]: | |
| """Generate automation venture strategy.""" | |
| try: | |
| # Opportunity identification | |
| opportunities = await self._identify_opportunities(query, context) | |
| # Solution development | |
| solutions = await self._develop_solutions(opportunities, context) | |
| # Implementation strategy | |
| implementation = await self._create_implementation_strategy(solutions, context) | |
| # ROI analysis | |
| roi = await self._analyze_roi(implementation, context) | |
| # Scale strategy | |
| scale = await self._create_scale_strategy(roi, context) | |
| return { | |
| "success": roi["annual_profit"] >= 1_000_000, | |
| "opportunities": opportunities, | |
| "solutions": solutions, | |
| "implementation": implementation, | |
| "roi": roi, | |
| "scale": scale | |
| } | |
| except Exception as e: | |
| logging.error(f"Error in automation venture strategy: {str(e)}") | |
| return {"success": False, "error": str(e)} | |
| class DataVentureStrategy(ReasoningStrategy): | |
| """ | |
| Advanced data venture strategy that: | |
| 1. Identifies valuable data opportunities | |
| 2. Develops data products | |
| 3. Creates monetization strategies | |
| 4. Ensures compliance | |
| 5. Maximizes data value | |
| """ | |
| def __init__(self, config: Optional[Dict[str, Any]] = None): | |
| super().__init__() | |
| self.config = config or {} | |
| # Standard reasoning parameters | |
| self.min_confidence = self.config.get('min_confidence', 0.7) | |
| self.parallel_threshold = self.config.get('parallel_threshold', 3) | |
| self.learning_rate = self.config.get('learning_rate', 0.1) | |
| self.strategy_weights = self.config.get('strategy_weights', { | |
| "LOCAL_LLM": 0.8, | |
| "CHAIN_OF_THOUGHT": 0.6, | |
| "TREE_OF_THOUGHTS": 0.5, | |
| "META_LEARNING": 0.4 | |
| }) | |
| async def reason(self, query: str, context: Dict[str, Any]) -> Dict[str, Any]: | |
| """Generate data venture strategy.""" | |
| try: | |
| # Data opportunity analysis | |
| opportunity = await self._analyze_data_opportunity(query, context) | |
| # Product development | |
| product = await self._develop_data_product(opportunity, context) | |
| # Monetization strategy | |
| monetization = await self._create_monetization_strategy(product, context) | |
| # Compliance plan | |
| compliance = await self._ensure_compliance(monetization, context) | |
| # Scale plan | |
| scale = await self._plan_scaling(compliance, context) | |
| return { | |
| "success": monetization["annual_revenue"] >= 1_000_000, | |
| "opportunity": opportunity, | |
| "product": product, | |
| "monetization": monetization, | |
| "compliance": compliance, | |
| "scale": scale | |
| } | |
| except Exception as e: | |
| logging.error(f"Error in data venture strategy: {str(e)}") | |
| return {"success": False, "error": str(e)} | |
| class APIVentureStrategy(ReasoningStrategy): | |
| """ | |
| Advanced API venture strategy that: | |
| 1. Identifies API opportunities | |
| 2. Develops API products | |
| 3. Creates pricing models | |
| 4. Plans scaling | |
| 5. Maximizes API value | |
| """ | |
| def __init__(self, config: Optional[Dict[str, Any]] = None): | |
| super().__init__() | |
| self.config = config or {} | |
| # Standard reasoning parameters | |
| self.min_confidence = self.config.get('min_confidence', 0.7) | |
| self.parallel_threshold = self.config.get('parallel_threshold', 3) | |
| self.learning_rate = self.config.get('learning_rate', 0.1) | |
| self.strategy_weights = self.config.get('strategy_weights', { | |
| "LOCAL_LLM": 0.8, | |
| "CHAIN_OF_THOUGHT": 0.6, | |
| "TREE_OF_THOUGHTS": 0.5, | |
| "META_LEARNING": 0.4 | |
| }) | |
| async def reason(self, query: str, context: Dict[str, Any]) -> Dict[str, Any]: | |
| """Generate API venture strategy.""" | |
| try: | |
| # API opportunity analysis | |
| opportunity = await self._analyze_api_opportunity(query, context) | |
| # Product development | |
| product = await self._develop_api_product(opportunity, context) | |
| # Pricing strategy | |
| pricing = await self._create_api_pricing(product, context) | |
| # Scale strategy | |
| scale = await self._plan_api_scaling(pricing, context) | |
| # Revenue projections | |
| projections = await self._project_api_revenue(scale, context) | |
| return { | |
| "success": projections["annual_revenue"] >= 1_000_000, | |
| "opportunity": opportunity, | |
| "product": product, | |
| "pricing": pricing, | |
| "scale": scale, | |
| "projections": projections | |
| } | |
| except Exception as e: | |
| logging.error(f"Error in API venture strategy: {str(e)}") | |
| return {"success": False, "error": str(e)} | |
| class MarketplaceVentureStrategy(ReasoningStrategy): | |
| """ | |
| Advanced marketplace venture strategy that: | |
| 1. Identifies marketplace opportunities | |
| 2. Develops platform strategy | |
| 3. Plans liquidity generation | |
| 4. Optimizes matching | |
| 5. Maximizes transaction value | |
| """ | |
| def __init__(self, config: Optional[Dict[str, Any]] = None): | |
| super().__init__() | |
| self.config = config or {} | |
| # Standard reasoning parameters | |
| self.min_confidence = self.config.get('min_confidence', 0.7) | |
| self.parallel_threshold = self.config.get('parallel_threshold', 3) | |
| self.learning_rate = self.config.get('learning_rate', 0.1) | |
| self.strategy_weights = self.config.get('strategy_weights', { | |
| "LOCAL_LLM": 0.8, | |
| "CHAIN_OF_THOUGHT": 0.6, | |
| "TREE_OF_THOUGHTS": 0.5, | |
| "META_LEARNING": 0.4 | |
| }) | |
| async def reason(self, query: str, context: Dict[str, Any]) -> Dict[str, Any]: | |
| """Generate marketplace venture strategy.""" | |
| try: | |
| # Opportunity analysis | |
| opportunity = await self._analyze_marketplace_opportunity(query, context) | |
| # Platform strategy | |
| platform = await self._develop_platform_strategy(opportunity, context) | |
| # Liquidity strategy | |
| liquidity = await self._create_liquidity_strategy(platform, context) | |
| # Growth strategy | |
| growth = await self._plan_marketplace_growth(liquidity, context) | |
| # Revenue projections | |
| projections = await self._project_marketplace_revenue(growth, context) | |
| return { | |
| "success": projections["annual_revenue"] >= 1_000_000, | |
| "opportunity": opportunity, | |
| "platform": platform, | |
| "liquidity": liquidity, | |
| "growth": growth, | |
| "projections": projections | |
| } | |
| except Exception as e: | |
| logging.error(f"Error in marketplace venture strategy: {str(e)}") | |
| return {"success": False, "error": str(e)} | |
| class VenturePortfolioStrategy(ReasoningStrategy): | |
| """ | |
| Advanced venture portfolio strategy that: | |
| 1. Optimizes venture mix | |
| 2. Balances risk-reward | |
| 3. Allocates resources | |
| 4. Manages dependencies | |
| 5. Maximizes portfolio value | |
| """ | |
| def __init__(self, config: Optional[Dict[str, Any]] = None): | |
| super().__init__() | |
| self.config = config or {} | |
| # Standard reasoning parameters | |
| self.min_confidence = self.config.get('min_confidence', 0.7) | |
| self.parallel_threshold = self.config.get('parallel_threshold', 3) | |
| self.learning_rate = self.config.get('learning_rate', 0.1) | |
| self.strategy_weights = self.config.get('strategy_weights', { | |
| "LOCAL_LLM": 0.8, | |
| "CHAIN_OF_THOUGHT": 0.6, | |
| "TREE_OF_THOUGHTS": 0.5, | |
| "META_LEARNING": 0.4 | |
| }) | |
| async def reason(self, query: str, context: Dict[str, Any]) -> Dict[str, Any]: | |
| """Generate venture portfolio strategy.""" | |
| try: | |
| # Portfolio analysis | |
| analysis = await self._analyze_portfolio(query, context) | |
| # Venture selection | |
| selection = await self._select_ventures(analysis, context) | |
| # Resource allocation | |
| allocation = await self._allocate_resources(selection, context) | |
| # Risk management | |
| risk = await self._manage_risk(allocation, context) | |
| # Portfolio projections | |
| projections = await self._project_portfolio(risk, context) | |
| return { | |
| "success": projections["annual_profit"] >= 1_000_000, | |
| "analysis": analysis, | |
| "selection": selection, | |
| "allocation": allocation, | |
| "risk": risk, | |
| "projections": projections | |
| } | |
| except Exception as e: | |
| logging.error(f"Error in venture portfolio strategy: {str(e)}") | |
| return {"success": False, "error": str(e)} | |
| async def _analyze_portfolio(self, query: str, context: Dict[str, Any]) -> Dict[str, Any]: | |
| """Analyze potential venture portfolio.""" | |
| prompt = f""" | |
| Analyze venture portfolio opportunities: | |
| Query: {query} | |
| Context: {json.dumps(context)} | |
| Consider: | |
| 1. Market opportunities | |
| 2. Technology trends | |
| 3. Resource requirements | |
| 4. Risk factors | |
| 5. Synergy potential | |
| Format as: | |
| [Analysis] | |
| Opportunities: ... | |
| Trends: ... | |
| Resources: ... | |
| Risks: ... | |
| Synergies: ... | |
| """ | |
| response = await context["groq_api"].predict(prompt) | |
| return self._parse_portfolio_analysis(response["answer"]) | |
| def _parse_portfolio_analysis(self, response: str) -> Dict[str, Any]: | |
| """Parse portfolio analysis from response.""" | |
| analysis = { | |
| "opportunities": [], | |
| "trends": [], | |
| "resources": {}, | |
| "risks": [], | |
| "synergies": [] | |
| } | |
| current_section = None | |
| for line in response.split('\n'): | |
| line = line.strip() | |
| if line.startswith('Opportunities:'): | |
| current_section = "opportunities" | |
| elif line.startswith('Trends:'): | |
| current_section = "trends" | |
| elif line.startswith('Resources:'): | |
| current_section = "resources" | |
| elif line.startswith('Risks:'): | |
| current_section = "risks" | |
| elif line.startswith('Synergies:'): | |
| current_section = "synergies" | |
| elif current_section and line: | |
| if current_section == "resources": | |
| try: | |
| key, value = line.split(':') | |
| analysis[current_section][key.strip()] = value.strip() | |
| except: | |
| pass | |
| else: | |
| analysis[current_section].append(line) | |
| return analysis | |
| def get_venture_metrics(self) -> Dict[str, Any]: | |
| """Get comprehensive venture metrics.""" | |
| return { | |
| "portfolio_metrics": { | |
| "total_ventures": len(self.ventures), | |
| "profitable_ventures": sum(1 for v in self.ventures if v.metrics.profit_margin > 0), | |
| "total_revenue": sum(v.metrics.revenue for v in self.ventures), | |
| "average_margin": np.mean([v.metrics.profit_margin for v in self.ventures]), | |
| "portfolio_roi": np.mean([v.metrics.roi for v in self.ventures]) | |
| }, | |
| "market_metrics": { | |
| "total_market_size": sum(v.opportunity.market_size for v in self.ventures), | |
| "average_growth": np.mean([v.opportunity.growth_potential for v in self.ventures]), | |
| "risk_score": np.mean([v.opportunity.regulatory_risks + v.opportunity.technology_risks for v in self.ventures]) | |
| }, | |
| "performance_metrics": { | |
| "customer_acquisition": np.mean([v.metrics.customer_acquisition_cost for v in self.ventures]), | |
| "lifetime_value": np.mean([v.metrics.lifetime_value for v in self.ventures]), | |
| "churn_rate": np.mean([v.metrics.churn_rate for v in self.ventures]), | |
| "burn_rate": sum(v.metrics.burn_rate for v in self.ventures) | |
| } | |
| } | |
| class VentureStrategy(ReasoningStrategy): | |
| """ | |
| Advanced venture strategy that combines multiple specialized strategies | |
| to generate comprehensive business plans and recommendations. | |
| """ | |
| def __init__(self, config: Optional[Dict[str, Any]] = None): | |
| """Initialize venture strategy with component strategies.""" | |
| super().__init__() | |
| self.config = config or {} | |
| # Standard reasoning parameters | |
| self.min_confidence = self.config.get('min_confidence', 0.7) | |
| self.parallel_threshold = self.config.get('parallel_threshold', 3) | |
| self.learning_rate = self.config.get('learning_rate', 0.1) | |
| self.strategy_weights = self.config.get('strategy_weights', { | |
| "LOCAL_LLM": 0.8, | |
| "CHAIN_OF_THOUGHT": 0.6, | |
| "TREE_OF_THOUGHTS": 0.5, | |
| "META_LEARNING": 0.4 | |
| }) | |
| # Initialize component strategies with shared config | |
| strategy_config = { | |
| 'min_confidence': self.min_confidence, | |
| 'parallel_threshold': self.parallel_threshold, | |
| 'learning_rate': self.learning_rate, | |
| 'strategy_weights': self.strategy_weights | |
| } | |
| self.strategies = { | |
| VentureType.AI_STARTUP: AIStartupStrategy(strategy_config), | |
| VentureType.SAAS: SaaSVentureStrategy(strategy_config), | |
| VentureType.AUTOMATION_SERVICE: AutomationVentureStrategy(strategy_config), | |
| VentureType.DATA_ANALYTICS: DataVentureStrategy(strategy_config), | |
| VentureType.API_SERVICE: APIVentureStrategy(strategy_config), | |
| VentureType.MARKETPLACE: MarketplaceVentureStrategy(strategy_config) | |
| } | |
| # Portfolio strategy for multi-venture optimization | |
| self.portfolio_strategy = VenturePortfolioStrategy(strategy_config) | |
| async def reason(self, query: str, context: Dict[str, Any]) -> Dict[str, Any]: | |
| """ | |
| Generate venture strategy based on query and context. | |
| Args: | |
| query: The venture strategy query | |
| context: Additional context and parameters | |
| Returns: | |
| Dict containing venture strategy and confidence scores | |
| """ | |
| try: | |
| # Determine venture type from query/context | |
| venture_type = self._determine_venture_type(query, context) | |
| # Get strategy for venture type | |
| strategy = self.strategies.get(venture_type) | |
| if not strategy: | |
| raise ValueError(f"Unsupported venture type: {venture_type}") | |
| # Generate strategy | |
| strategy_result = await strategy.reason(query, context) | |
| # Get portfolio analysis | |
| portfolio_result = await self.portfolio_strategy.reason(query, context) | |
| # Combine results | |
| combined_result = self._combine_results( | |
| strategy_result, | |
| portfolio_result, | |
| venture_type | |
| ) | |
| return { | |
| 'answer': self._format_strategy(combined_result), | |
| 'confidence': combined_result.get('confidence', 0.0), | |
| 'venture_type': venture_type.value, | |
| 'strategy': strategy_result, | |
| 'portfolio_analysis': portfolio_result | |
| } | |
| except Exception as e: | |
| logging.error(f"Venture strategy generation failed: {str(e)}") | |
| return { | |
| 'error': f"Venture strategy generation failed: {str(e)}", | |
| 'confidence': 0.0 | |
| } | |
| def _determine_venture_type(self, query: str, context: Dict[str, Any]) -> VentureType: | |
| """Determine venture type from query and context.""" | |
| # Use context if available | |
| if 'venture_type' in context: | |
| return VentureType(context['venture_type']) | |
| # Simple keyword matching | |
| query_lower = query.lower() | |
| if any(term in query_lower for term in ['ai', 'ml', 'model', 'neural']): | |
| return VentureType.AI_STARTUP | |
| elif any(term in query_lower for term in ['saas', 'software', 'cloud']): | |
| return VentureType.SAAS | |
| elif any(term in query_lower for term in ['automate', 'automation', 'workflow']): | |
| return VentureType.AUTOMATION_SERVICE | |
| elif any(term in query_lower for term in ['data', 'analytics', 'insights']): | |
| return VentureType.DATA_ANALYTICS | |
| elif any(term in query_lower for term in ['api', 'service', 'endpoint']): | |
| return VentureType.API_SERVICE | |
| elif any(term in query_lower for term in ['marketplace', 'platform', 'network']): | |
| return VentureType.MARKETPLACE | |
| # Default to AI startup if unclear | |
| return VentureType.AI_STARTUP | |
| def _combine_results( | |
| self, | |
| strategy_result: Dict[str, Any], | |
| portfolio_result: Dict[str, Any], | |
| venture_type: VentureType | |
| ) -> Dict[str, Any]: | |
| """Combine strategy and portfolio results.""" | |
| return { | |
| 'venture_type': venture_type.value, | |
| 'strategy': strategy_result.get('strategy', {}), | |
| 'metrics': strategy_result.get('metrics', {}), | |
| 'portfolio_fit': portfolio_result.get('portfolio_fit', {}), | |
| 'recommendations': strategy_result.get('recommendations', []), | |
| 'confidence': min( | |
| strategy_result.get('confidence', 0.0), | |
| portfolio_result.get('confidence', 0.0) | |
| ) | |
| } | |
| def _format_strategy(self, result: Dict[str, Any]) -> str: | |
| """Format venture strategy into readable text.""" | |
| sections = [] | |
| # Venture type | |
| sections.append(f"Venture Type: {result['venture_type'].replace('_', ' ').title()}") | |
| # Strategy overview | |
| if 'strategy' in result: | |
| strategy = result['strategy'] | |
| sections.append("\nStrategy Overview:") | |
| for key, value in strategy.items(): | |
| sections.append(f"- {key.replace('_', ' ').title()}: {value}") | |
| # Key metrics | |
| if 'metrics' in result: | |
| metrics = result['metrics'] | |
| sections.append("\nKey Metrics:") | |
| for key, value in metrics.items(): | |
| if isinstance(value, (int, float)): | |
| sections.append(f"- {key.replace('_', ' ').title()}: {value:.2f}") | |
| else: | |
| sections.append(f"- {key.replace('_', ' ').title()}: {value}") | |
| # Portfolio fit | |
| if 'portfolio_fit' in result: | |
| fit = result['portfolio_fit'] | |
| sections.append("\nPortfolio Analysis:") | |
| for key, value in fit.items(): | |
| sections.append(f"- {key.replace('_', ' ').title()}: {value}") | |
| # Recommendations | |
| if 'recommendations' in result: | |
| recs = result['recommendations'] | |
| sections.append("\nKey Recommendations:") | |
| for rec in recs: | |
| sections.append(f"- {rec}") | |
| return "\n".join(sections) | |