File size: 5,352 Bytes
2fae531
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1f1ddc6
2fae531
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
62feba6
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
import os
import re
import streamlit as st
from datetime import datetime
from groq import Groq

# --- Helper Functions ---

def numerology_value(name: str, use_vowels=None):
    values = {
        'A': 1, 'B': 2, 'C': 3, 'D': 4, 'E': 5, 'F': 6, 'G': 7, 'H': 8, 'I': 9,
        'J': 1, 'K': 2, 'L': 3, 'M': 4, 'N': 5, 'O': 6, 'P': 7, 'Q': 8, 'R': 9,
        'S': 1, 'T': 2, 'U': 3, 'V': 4, 'W': 5, 'X': 6, 'Y': 7, 'Z': 8
    }
    vowels = "AEIOU"
    name = re.sub(r'[^A-Z]', '', name.upper())

    if use_vowels is None:
        selected = [values[ch] for ch in name]
    else:
        selected = [values[ch] for ch in name if (ch in vowels) == use_vowels]

    total = sum(selected)
    while total > 9 and total not in {11, 22, 33}:
        total = sum(int(d) for d in str(total))
    return total

def calculate_life_path_number(birthdate_str):
    mm, dd, yyyy = map(int, birthdate_str.split('/'))
    total = 0
    for num in [mm, dd, yyyy]:
        while num > 0:
            total += num % 10
            num //= 10
    while total > 9 and total not in {11, 22, 33}:
        total = sum(int(d) for d in str(total))
    return total

# --- Groq API Call Using the SDK ---
def get_numerology_explanation(name, birthdate, life_path, expression, soul_urge, personality, birthday, groq_client):
    prompt = f"""
    <think>
    Analyze the numerology for the following:
    - Name: {name}
    - Birthdate: {birthdate}
    - Life Path: {life_path}
    - Expression: {expression}
    - Soul Urge: {soul_urge}
    - Personality: {personality}
    - Birthday: {birthday}

    Think step-by-step through the personality, contradictions, traits, and possible growth paths. Structure your thoughts clearly.
    </think>
    """
    try:
        response = groq_client.chat.completions.create(
            model="deepseek-r1-distill-llama-70b",
            messages=[{"role": "user", "content": prompt}],
            temperature=0.7,
            max_tokens=2048
        )
        return response.choices[0].message.content
    except Exception as e:
        return f"Error: {str(e)}"

# --- Streamlit App ---

def main():
    st.title("🔢 Numerology Magic!")
    st.markdown("""

Unlock the secrets of your **name** and **birthdate** with *Numerology Magic*—your personal guide to the hidden numbers that shape your life!  
Whether you're a **master number 22** destined for greatness or a **soulful 9** on a mission of compassion, our app reveals your unique **cosmic blueprint**.

---

### ✨ Discover Your Core Numbers:

- **Life Path**: Your destiny’s roadmap  
- **Expression**: Your true potential  
- **Soul Urge**: Your deepest desires  
- **Personality**: How the world sees you  

---

Enter your **name** and **birthdate**, and let the numbers tell your story.  
Are you ready to **decode your destiny**? 🔮

#### 👉 Calculate Your Custom Analysis Now✨
---
""")
    # Securely load API key (use environment variables or Streamlit secrets)
    groq_api_key = os.getenv("GROQ_API_KEY")
    
    if not groq_api_key:
        st.error("GROQ_API_KEY not found in environment variables or secrets. Please set it and restart the app.")
        st.stop()
    
    # Initialize the Groq client using the SDK
    groq_client = Groq(api_key=groq_api_key)
    
    st.sidebar.image("1.PNG")
    st.info("build by dw")
    name = st.sidebar.text_input("📝 Full Name")
    birthdate = st.sidebar.date_input("📅 Birthdate", datetime.now())
    
    if st.sidebar.button("Calculate Numerology"):
        if not name:
            st.error("Please enter a name.")
            return
        
        birth_str = birthdate.strftime("%m/%d/%Y")
        life_path = calculate_life_path_number(birth_str)
        expression = numerology_value(name)
        soul_urge = numerology_value(name, use_vowels=True)
        personality = numerology_value(name, use_vowels=False)
        
        # Calculate Birthday Number with reduction as needed
        birthday_num = birthdate.day
        while birthday_num > 9 and birthday_num not in {11, 22, 33}:
            birthday_num = sum(int(d) for d in str(birthday_num))
        
        st.subheader("🔍 Your Core Numbers")
        cols = st.columns(2)
        cols[0].write(f"**Life Path Number:** {life_path}")
        cols[1].write(f"**Expression Number:** {expression}")
        cols[0].write(f"**Soul Urge Number:** {soul_urge}")
        cols[1].write(f"**Personality Number:** {personality}")
        cols[0].write(f"**Birthday Number:** {birthday_num}")
        
        with st.spinner("Generating reading..."):
            explanation = get_numerology_explanation(
                name, birth_str, life_path, expression, 
                soul_urge, personality, birthday_num, groq_client
            )
            st.markdown("---")
            st.subheader("📖 Numerology Reading")
            st.text(" * for entertainment use only")

            # Extract <think> section
            thinking = explanation
            if "<think>" in explanation:
                try:
                    thinking = explanation.split("<think>")[1].split("</think>")[0].strip()
                except:
                    thinking = explanation  # fallback

            # Display columns
            st.markdown("### ✨ Final Reading")
            st.write(thinking)


if __name__ == "__main__":
    main()