File size: 3,192 Bytes
3ac5f73
 
 
 
f8e4e5f
 
3ac5f73
f8e4e5f
 
 
 
 
3ac5f73
 
f8e4e5f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3ac5f73
f8e4e5f
 
 
 
 
 
 
 
3ac5f73
f8e4e5f
 
 
 
 
 
 
 
 
 
 
 
 
3ac5f73
f8e4e5f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3ac5f73
f8e4e5f
 
 
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
# utils/smart_naming.py

from datetime import datetime
import streamlit as st
import time
import json

def generate_chat_name(chat_history, claude_service, max_retries=3, retry_delay=2):
    """Generate a smart name based on chat content with retry logic"""
    
    def extract_basic_name():
        """Extract basic name from content if API fails"""
        for entry in chat_history:
            if entry.get('analysis'):
                # Look for patterns, tickers, or key terms
                analysis = entry['analysis'].lower()
                
                # Look for tickers (uppercase words 1-5 chars)
                words = analysis.split()
                tickers = [word.upper() for word in words 
                          if word.isupper() and 1 <= len(word) <= 5]
                
                # Look for common patterns
                patterns = ["bullish", "bearish", "trend", "support", "resistance",
                          "breakout", "breakdown", "reversal"]
                found_patterns = [p for p in patterns if p in analysis]
                
                if tickers and found_patterns:
                    return f"{tickers[0]} {found_patterns[0].title()} Analysis"
                elif tickers:
                    return f"{tickers[0]} Technical Analysis"
                elif found_patterns:
                    return f"{found_patterns[0].title()} Pattern Analysis"
        
        return None

    # First try API with retries
    for attempt in range(max_retries):
        try:
            # Combine all analyses into one text for summarization
            full_text = ""
            for entry in chat_history:
                if entry.get('analysis'):
                    full_text += entry['analysis'] + "\n"

            if not full_text:
                return None

            prompt = """Based on this trading analysis, create a very short (3-6 words) title that captures the key focus. 
            Make it specific but concise. Include any relevant tickers or patterns mentioned.
            Example formats:
            - "AAPL Bullish Breakout Analysis"
            - "SPY Multiple Timeframe Support"
            - "Crypto Markets Correlation Study"
            
            Analysis text:
            {text}
            """
            
            summary = claude_service.generate_educational_content(prompt.format(text=full_text))
            if summary:
                # Clean up the summary
                summary = summary.strip().strip('"').strip("'")
                # Add timestamp for uniqueness
                timestamp = datetime.now().strftime("%Y%m%d")
                return f"{summary}_{timestamp}"
                
        except Exception as e:
            if attempt < max_retries - 1:  # Don't sleep on last attempt
                time.sleep(retry_delay)
            continue
    
    # If API fails, try basic name extraction
    basic_name = extract_basic_name()
    if basic_name:
        timestamp = datetime.now().strftime("%Y%m%d")
        return f"{basic_name}_{timestamp}"
    
    # Final fallback
    timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
    return f"Trading_Analysis_{timestamp}"