saad-sust commited on
Commit
7534f44
Β·
verified Β·
1 Parent(s): 9d2ba79

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +54 -39
app.py CHANGED
@@ -1,75 +1,90 @@
1
  import streamlit as st
2
  import requests
3
 
4
- # 1. Page Configuration
5
- st.set_page_config(page_title="SAAD AI ACADEMY: Math Engine", page_icon="πŸ“", layout="centered")
6
 
7
- # SECURE TOKEN ACCESS (This pulls from the Settings/Secrets you just saved)
8
  try:
9
  HF_TOKEN = st.secrets["HF_TOKEN"]
10
  except:
11
- st.error("Error: HF_TOKEN not found in Space Secrets. Please add it in Settings.")
12
  st.stop()
13
 
14
  API_URL = "https://api-inference.huggingface.co/models/HuggingFaceTB/SmolLM2-1.7B-Instruct"
15
  headers = {"Authorization": f"Bearer {HF_TOKEN}"}
16
 
 
17
  st.markdown("""
18
  <style>
19
- .stApp { background-color: #f0f2f6; }
20
- .stChatMessage { border-radius: 15px; border: 1px solid #d1d5db; box-shadow: 2px 2px 5px rgba(0,0,0,0.05); }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
  </style>
22
  """, unsafe_allow_html=True)
23
 
 
24
  st.title("πŸ“ SAAD AI ACADEMY")
25
- st.caption("High-Speed Mathematics Engine | SUST Department of Mathematics")
26
 
27
- # 2. MASTER LOGIC PROMPT
 
28
  system_instruction = (
29
- "You are a Senior Mathematics Professor. You must follow a 'Verify-then-Solve' protocol.\n\n"
30
- "RULE 1 (DIVISIBILITY): For ax ≑ b (mod n), you MUST check if d = gcd(a, n) divides b. "
31
- "If it divides, divide the entire congruence by d: (a/d)x ≑ (b/d) (mod n/d) BEFORE finding the inverse.\n\n"
32
- "RULE 2 (GROUPS): To prove H is normal where [G:H]=2, use the fact that gH and Hg are both "
33
- "the complement G\\H when g is not in H. Do not assume gh=hg.\n\n"
34
- "RULE 3 (REASONING): Think step-by-step. State the theorem you are using before applying it.\n\n"
35
- "RULE 4 (FORMAT): Use LaTeX ($...$ or $$...$$) for all math. Never skip algebraic steps."
36
  )
37
 
38
  def query_api(prompt_text):
39
- full_prompt = f"<|im_start|>system\n{system_instruction}<|im_end|>\n<|im_start|>user\n{prompt_text}\nLet's think step by step.<|im_end|>\n<|im_start|>assistant\n"
40
-
41
  payload = {
42
  "inputs": full_prompt,
43
- "parameters": {
44
- "max_new_tokens": 800,
45
- "temperature": 0.1,
46
- "return_full_text": False
47
- }
48
  }
49
-
50
  response = requests.post(API_URL, headers=headers, json=payload)
51
  return response.json()
52
 
53
- # 3. User Interface
54
- user_query = st.chat_input("Enter your problem (e.g., Solve 14x ≑ 30 mod 44)")
55
 
56
  if user_query:
57
  with st.chat_message("user"):
58
  st.write(user_query)
59
 
60
  with st.chat_message("assistant"):
61
- with st.spinner("πŸš€ Cloud API is solving..."):
62
- try:
63
- data = query_api(user_query)
64
-
65
- if isinstance(data, dict) and "error" in data:
66
- st.warning("Model is starting up. Please wait 10-20 seconds and try again.")
67
- else:
68
- response = data[0]['generated_text']
69
- st.markdown(response)
70
- st.download_button("πŸ“© Download Proof", response, file_name="math_solution.txt")
71
- except Exception as e:
72
- st.error("Connection error. Ensure your HF_TOKEN is correctly set in Secrets.")
73
 
74
- st.sidebar.markdown(f"### πŸŽ“ Student Profile\n**Name:** Almuyed Saad\n**Inst:** SUST\n**Major:** Mathematics")
75
- st.sidebar.info("Module: B.Sc. Math Engine V5 (API Edition)")
 
 
 
 
 
 
1
  import streamlit as st
2
  import requests
3
 
4
+ # STEP 1: PAGE CONFIG
5
+ st.set_page_config(page_title="SAAD AI ACADEMY", page_icon="πŸ“", layout="centered")
6
 
7
+ # STEP 2: SECURE TOKEN ACCESS
8
  try:
9
  HF_TOKEN = st.secrets["HF_TOKEN"]
10
  except:
11
+ st.error("Error: HF_TOKEN not found in Space Secrets.")
12
  st.stop()
13
 
14
  API_URL = "https://api-inference.huggingface.co/models/HuggingFaceTB/SmolLM2-1.7B-Instruct"
15
  headers = {"Authorization": f"Bearer {HF_TOKEN}"}
16
 
17
+ # STEP 3: UI UPGRADE (Dark/Neon Glassmorphism)
18
  st.markdown("""
19
  <style>
20
+ .stApp {
21
+ background: linear-gradient(135deg, #0f172a 0%, #1e293b 100%);
22
+ color: #ffffff;
23
+ }
24
+ .stChatMessage {
25
+ background: rgba(255, 255, 255, 0.05) !important;
26
+ backdrop-filter: blur(10px);
27
+ border-radius: 15px !important;
28
+ border: 1px solid rgba(255, 255, 255, 0.1) !important;
29
+ margin-bottom: 15px;
30
+ }
31
+ section[data-testid="stSidebar"] {
32
+ background-color: #0f172a !important;
33
+ }
34
+ h1, h2, h3, p, span {
35
+ color: #ffffff !important;
36
+ }
37
+ .stCaption {
38
+ color: #3b82f6 !important;
39
+ }
40
  </style>
41
  """, unsafe_allow_html=True)
42
 
43
+ # STEP 4: APP TITLES
44
  st.title("πŸ“ SAAD AI ACADEMY")
45
+ st.caption("Universal B.Sc. Mathematics Engine | SUST Department of Mathematics")
46
 
47
+ # STEP 5: UNIVERSAL LOGIC ENGINE (The New Instructions)
48
+ # These rules apply to ANY math problem you type.
49
  system_instruction = (
50
+ "You are a Senior Mathematics Professor. You must solve every problem with absolute rigor.\n\n"
51
+ "RULE 1 (DEFINITION): Before solving, explicitly state the mathematical domain and the key theorem or definition involved (e.g., 'In Abstract Algebra, we use the First Isomorphism Theorem...').\n"
52
+ "RULE 2 (VALIDATION): Check for necessary conditions or constraints before performing operations (e.g., check if a group is finite, if a function is continuous, or if a divisor is non-zero).\n"
53
+ "RULE 3 (DERIVATION): Show every algebraic step clearly. Do not skip intermediate simplifications. Explain the logic of each transition.\n"
54
+ "RULE 4 (FORMATTING): Use LaTeX ($...$ or $$...$$) for all mathematical expressions. Use bold text for final results."
 
 
55
  )
56
 
57
  def query_api(prompt_text):
58
+ full_prompt = f"<|im_start|>system\n{system_instruction}<|im_end|>\n<|im_start|>user\n{prompt_text}\nLet's derive the solution step-by-step.<|im_end|>\n<|im_start|>assistant\n"
 
59
  payload = {
60
  "inputs": full_prompt,
61
+ "parameters": {"max_new_tokens": 1000, "temperature": 0.1, "return_full_text": False},
62
+ "options": {"wait_for_model": True}
 
 
 
63
  }
 
64
  response = requests.post(API_URL, headers=headers, json=payload)
65
  return response.json()
66
 
67
+ # STEP 6: CHAT INTERFACE
68
+ user_query = st.chat_input("Ask a B.Sc. level math question (Analysis, Algebra, Calculus...)")
69
 
70
  if user_query:
71
  with st.chat_message("user"):
72
  st.write(user_query)
73
 
74
  with st.chat_message("assistant"):
75
+ with st.spinner("πŸš€ Cloud API is analyzing mathematical logic..."):
76
+ data = query_api(user_query)
77
+ if isinstance(data, list) and len(data) > 0:
78
+ response = data[0]['generated_text']
79
+ st.markdown(response)
80
+ st.download_button("πŸ“© Download Proof", response, file_name="math_solution.txt")
81
+ else:
82
+ st.error("API error or timeout. Please check your internet or try again in 10 seconds.")
 
 
 
 
83
 
84
+ # STEP 7: SIDEBAR
85
+ st.sidebar.markdown(f"### πŸŽ“ Student Profile")
86
+ st.sidebar.write("**Name:** Almuyed Saad")
87
+ st.sidebar.write("**Inst:** SUST")
88
+ st.sidebar.write("**Major:** Mathematics")
89
+ st.sidebar.divider()
90
+ st.sidebar.info("Module: Universal Logic Engine V5.1")