# Add this to the top of main.py after other imports import anthropic import re # Initialize Claude client (add this after the FastAPI app creation) try: claude_client = anthropic.Anthropic( api_key=os.getenv("ANTHROPIC_API_KEY", "your-api-key-here") ) logger.info("✅ Claude client initialized successfully") except Exception as e: logger.warning(f"⚠️ Claude client not initialized: {e}") claude_client = None @app.post("/api/v1/analyze-feature") async def analyze_custom_feature(request: Request): """Real AI-powered feature analysis using Claude""" try: data = await request.json() feature_description = data.get('description', '') project_type = data.get('project_type', '') feature_name = data.get('feature_name', '') requirements = data.get('requirements', []) logger.info(f"Analyzing feature: {feature_name} for {project_type}") logger.info(f"Requirements: {requirements}") # If Claude is not available, use intelligent fallback if not claude_client: logger.warning("Claude not available, using intelligent fallback") return await intelligent_fallback_analysis(feature_name, feature_description, requirements, project_type) # Build comprehensive prompt for Claude requirements_text = "\n".join([f"- {req}" for req in requirements if req.strip()]) claude_prompt = f""" Analyze this custom feature for a {project_type} project: Feature Name: {feature_name} Description: {feature_description} Detailed Requirements: {requirements_text} Based on these requirements, provide a detailed analysis in JSON format: {{ "feature_name": "Improved technical name", "complexity": "low|medium|high", "logic_rules": ["Business rule 1", "Business rule 2"], "implementation_details": ["Technical detail 1", "Technical detail 2"], "technical_requirements": ["Requirement 1", "Requirement 2"], "estimated_effort": "1-2 weeks|3-4 weeks|etc", "dependencies": ["Dependency 1", "Dependency 2"], "api_endpoints": ["POST /api/endpoint1", "GET /api/endpoint2"], "database_tables": ["table1", "table2"], "confidence_score": 0.85 }} For complexity assessment: - "low": Simple CRUD, basic features - "medium": Moderate business logic, some integrations - "high": Complex business rules, external integrations, security requirements For logic_rules, generate business rules based on the requirements like: - Access control rules - Data validation rules - Business process rules - Security requirements Return ONLY the JSON object, no other text. """ try: # Call Claude API message = claude_client.messages.create( model="claude-3-5-sonnet-20241022", max_tokens=2000, temperature=0.1, messages=[{"role": "user", "content": claude_prompt}] ) # Parse Claude's response response_text = message.content[0].text.strip() # Extract JSON from response json_match = re.search(r'\{.*\}', response_text, re.DOTALL) if json_match: analysis = json.loads(json_match.group()) else: analysis = json.loads(response_text) logger.info(f"✅ Claude analysis completed: {analysis.get('complexity')} complexity") return { "success": True, "analysis": analysis } except json.JSONDecodeError as e: logger.error(f"JSON parsing error: {e}") return await intelligent_fallback_analysis(feature_name, feature_description, requirements, project_type) except Exception as e: logger.error(f"Claude API error: {e}") return await intelligent_fallback_analysis(feature_name, feature_description, requirements, project_type) except Exception as e: logger.error(f"Feature analysis failed: {e}") return { "success": False, "error": str(e) } async def intelligent_fallback_analysis(feature_name: str, description: str, requirements: list, project_type: str): """Intelligent fallback analysis when Claude is not available""" # Analyze complexity based on keywords complexity_indicators = { "high": ["encryption", "hipaa", "compliance", "security", "integration", "real-time", "ai", "machine learning", "blockchain"], "medium": ["crud", "database", "api", "authentication", "validation", "search", "filter"], "low": ["display", "show", "view", "list", "basic"] } text_to_analyze = f"{feature_name} {description} {' '.join(requirements)}".lower() complexity = "medium" # default for level, keywords in complexity_indicators.items(): if any(keyword in text_to_analyze for keyword in keywords): complexity = level break # Generate logical business rules based on project type and requirements logic_rules = [] if project_type.lower() == "healthcare": logic_rules.extend([ "Only authorized caregivers can access patient data", "All patient data access must be logged for HIPAA compliance", "Patient data must be encrypted at rest and in transit" ]) if "crud" in text_to_analyze or "manage" in text_to_analyze: logic_rules.append("Users can only modify data they have created or been granted access to") if "patient" in text_to_analyze: logic_rules.extend([ "Patient information can only be accessed by assigned caregivers", "All patient data modifications require audit trail" ]) # Remove duplicates logic_rules = list(set(logic_rules)) analysis = { "feature_name": feature_name or "Enhanced Feature", "complexity": complexity, "logic_rules": logic_rules, "implementation_details": [ f"Implement {feature_name} with proper validation", "Add error handling and logging", "Include unit and integration tests" ], "technical_requirements": [ "Database schema design", "API endpoint implementation", "Frontend component development" ], "estimated_effort": "2-3 weeks" if complexity == "high" else "1-2 weeks", "dependencies": ["User authentication", "Database setup"], "api_endpoints": [f"POST /api/{feature_name.lower().replace(' ', '-')}", f"GET /api/{feature_name.lower().replace(' ', '-')}"], "database_tables": [f"{feature_name.lower().replace(' ', '_')}_table"], "confidence_score": 0.75 } logger.info(f"✅ Fallback analysis completed: {complexity} complexity with {len(logic_rules)} logic rules") return { "success": True, "analysis": analysis }