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""" 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. """ 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 section thinking = explanation if "" in explanation: try: thinking = explanation.split("")[1].split("")[0].strip() except: thinking = explanation # fallback # Display columns st.markdown("### โœจ Final Reading") st.write(thinking) if __name__ == "__main__": main()