File size: 3,312 Bytes
eeb9453
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import streamlit as st
import requests
import re
import time

# APIs
TOGETHER_API_KEY = "tgp_v1_ZytvDbMu9PMwIlnBZEfYSq9nzJAYwS0MecjY9Kt7RxE"
SERPER_API_KEY = "75f06519187851ad63486c3012b34c5e0e6501f1"

# Genrate Ideas
def generate_startup_ideas(prompt, retries=3, delay=2):
    url = "https://api.together.xyz/v1/completions"
    headers = {
        "Authorization": f"Bearer {TOGETHER_API_KEY}",
        "Content-Type": "application/json"
    }
    data = {
        "model": "mistralai/Mistral-7B-Instruct-v0.1",
        "prompt": f"""
Suggest 3 unique startup ideas based on this interest: \"{prompt}\".
Each idea should be short, clear, and numbered like this:
1. [Idea Title]: [One-sentence description]
2. ...
""",
        "max_tokens": 300,
        "temperature": 0.7,
        "top_p": 0.95
    }

    for attempt in range(retries):
        try:
            response = requests.post(url, headers=headers, json=data)
            result = response.json()

            if "choices" in result and result["choices"]:
                raw_text = result["choices"][0].get("text", "").strip()
                ideas = re.findall(r"\d+\.\s*(.*?):\s*(.*)", raw_text)
                if ideas:
                    return [f"{i+1}. {title.strip()}: {desc.strip()}" for i, (title, desc) in enumerate(ideas)]
                else:
                    print("⚠️ No valid ideas format. Raw output:", raw_text)

            else:
                print("⚠️ Unexpected API response:", result)

        except Exception as e:
            print(f"[Attempt {attempt+1}] Error: {e}")

        time.sleep(delay)

    return []

# For working on URLs
def market_research(query):
    url = "https://google.serper.dev/search"
    headers = {"X-API-KEY": SERPER_API_KEY}
    data = {"q": query}
    try:
        res = requests.post(url, headers=headers, json=data)
        results = res.json()
        return [r["title"] + " - " + r["link"] for r in results.get("organic", [])[:5]]
    except Exception as e:
        print("Market research error:", e)
        return ["❌ Market research failed."]

# Streamlit UI 
st.set_page_config(page_title="Startup Co-Founder Agent", layout="centered")
st.title("πŸš€ Startup Co-Founder Agent")
st.write("Get startup ideas + instant market research. Free & AI-powered.")

user_prompt = st.text_input("What are you interested in building a startup around?", "AI for education")

if st.button("Generate Startup Ideas"):
    if not TOGETHER_API_KEY or not SERPER_API_KEY:
        st.error("API keys are missing. Set them in environment or Hugging Face Secrets.")
    else:
        with st.spinner("Brewing ideas with GPUs and coffee... β˜•πŸ€–"):
            ideas = generate_startup_ideas(user_prompt)

            if not ideas:
                st.error("Still no ideas. Maybe try again in a few seconds.")
            else:
                st.subheader("πŸ’‘ Startup Ideas")
                for idea in ideas:
                    st.markdown(f"- {idea}")

                st.subheader("πŸ” Market Research")
                for idea in ideas:
                    title = idea.split(":")[0].strip()
                    st.markdown(f"**πŸ“Œ {title}**")
                    results = market_research(title)
                    for r in results:
                        st.markdown(f"- {r}")