Group2255 commited on
Commit
0b3c1f0
Β·
verified Β·
1 Parent(s): 75598ce

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +92 -65
app.py CHANGED
@@ -1,90 +1,117 @@
1
  # app.py
2
- # PromptPilot: Multi-Model AI Chatbot for AML-3304
 
3
  import streamlit as st
4
- from transformers import (AutoTokenizer, AutoModelForCausalLM,
5
- AutoModelForSeq2SeqLM, RagTokenizer, RagRetriever, RagSequenceForGeneration)
 
 
 
6
  import torch
7
 
8
- st.set_page_config(page_title="PromptPilot: Unified AI Chatbot", layout="centered")
9
- st.title("πŸ€– PromptPilot: Unified AI Chatbot")
10
 
11
- st.markdown("""
12
- **MVP Chatbot Demo for AML-3304**
13
- Supports:
14
- - Basic Code Generation
15
- - General Q&A
16
- - Bayesian-style Q&A
17
- - Creative Writing
18
- - DeepSeek‑R1 RAG (Retrieval-Augmented Q&A)
19
- """)
20
 
21
- if 'mode' not in st.session_state:
22
- st.session_state.mode = 'Code Generator'
 
23
 
 
24
  cols = st.columns(5)
25
- labels = [
26
- ("πŸ§‘β€πŸ’» Basic Code", 'Code Generator'),
27
- ("πŸ“˜ General Q&A", 'General Q&A'),
28
- ("πŸ“Š Bayesian Q&A", 'Bayesian Q&A'),
29
- ("✍️ Creative Writing", 'Creative Writing'),
30
- ("πŸ” RAG Q&A", 'RAG Q&A'),
31
  ]
32
- for col, (emoji, mode_name) in zip(cols, labels):
33
- if col.button(emoji):
34
- st.session_state.mode = mode_name
 
35
 
36
  st.markdown(f"### πŸ”„ Current Mode: **{st.session_state.mode}**")
37
- user_input = st.text_input("Enter your prompt/question:")
38
 
 
 
 
 
39
  @st.cache_resource
40
  def load_codegen():
41
- return (AutoTokenizer.from_pretrained("Salesforce/codegen-350M-mono"),
42
- AutoModelForCausalLM.from_pretrained("Salesforce/codegen-350M-mono"))
 
43
 
44
  @st.cache_resource
45
  def load_flan():
46
- return (AutoTokenizer.from_pretrained("google/flan-t5-base"),
47
- AutoModelForSeq2SeqLM.from_pretrained("google/flan-t5-base"))
48
-
49
- @st.cache_resource
50
- def load_falcon():
51
- return (AutoTokenizer.from_pretrained("tiiuae/falcon-rw-1b"),
52
- AutoModelForCausalLM.from_pretrained("tiiuae/falcon-rw-1b"))
53
 
54
  @st.cache_resource
55
- def load_rag():
56
- tokenizer = RagTokenizer.from_pretrained("deepseek-ai/deepseek-r1-rag")
57
- retriever = RagRetriever.from_pretrained("deepseek-ai/deepseek-r1-rag", index_name="custom")
58
- model = RagSequenceForGeneration.from_pretrained("deepseek-ai/deepseek-r1-rag", retriever=retriever)
59
- return tokenizer, model
60
 
 
61
  if user_input:
62
  with st.spinner("Generating response..."):
63
- mode = st.session_state.mode
64
-
65
- if mode == 'Code Generator':
66
  tok, mod = load_codegen()
67
- inp = tok(user_input, return_tensors="pt")
68
- out = mod.generate(inp.input_ids, max_new_tokens=128, temperature=0.7, do_sample=True)
69
- st.code(tok.decode(out[0], skip_special_tokens=True), language="python")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
70
 
71
- elif mode in ('General Q&A', 'Bayesian Q&A'):
72
  tok, mod = load_flan()
73
- inp = tok(user_input, return_tensors="pt")
74
- if mode == 'General Q&A':
75
- out = mod.generate(inp.input_ids, max_new_tokens=100)
76
- else:
77
- out = mod.generate(inp.input_ids, max_new_tokens=100, do_sample=True, temperature=0.9, top_k=50)
78
- st.write(tok.decode(out[0], skip_special_tokens=True))
79
-
80
- elif mode == 'Creative Writing':
81
- tok, mod = load_falcon()
82
- inp = tok(user_input, return_tensors="pt")
83
- out = mod.generate(inp.input_ids, max_new_tokens=150, do_sample=True, top_p=0.95, temperature=1.0)
84
- st.write(tok.decode(out[0], skip_special_tokens=True))
85
-
86
- elif mode == 'RAG Q&A':
87
- tok, mod = load_rag()
88
- inp = tok(user_input, return_tensors="pt")
89
- out = mod.generate(input_ids=inp["input_ids"], context_input_ids=inp["context_input_ids"], max_new_tokens=100)
90
- st.write(tok.batch_decode(out, skip_special_tokens=True)[0])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  # app.py
2
+ # PromptPilot: Unified Multi-Model Chatbot (AML-3304 Final Submission)
3
+
4
  import streamlit as st
5
+ from transformers import (
6
+ AutoTokenizer,
7
+ AutoModelForCausalLM,
8
+ AutoModelForSeq2SeqLM
9
+ )
10
  import torch
11
 
12
+ st.set_page_config(page_title="PromptPilot", layout="centered")
13
+ st.title("πŸ€– PromptPilot - Unified AI Chatbot")
14
 
15
+ st.markdown("AML-3304 Assignment: From Tokens to Transformers")
 
 
 
 
 
 
 
 
16
 
17
+ # Track current mode
18
+ if "mode" not in st.session_state:
19
+ st.session_state.mode = "Code Generator"
20
 
21
+ # Mode selection buttons
22
  cols = st.columns(5)
23
+ mode_labels = [
24
+ ("πŸ‘¨β€πŸ’» Code Generator", "Code Generator"),
25
+ ("πŸ“˜ General Q&A", "General Q&A"),
26
+ ("πŸ“Š Bayesian Q&A", "Bayesian Q&A"),
27
+ ("🌐 DeepSeek Coder", "DeepSeek"),
28
+ ("πŸ” Tokenizer Introspector", "Tokenizer")
29
  ]
30
+
31
+ for i, (label, mode) in enumerate(mode_labels):
32
+ if cols[i].button(label):
33
+ st.session_state.mode = mode
34
 
35
  st.markdown(f"### πŸ”„ Current Mode: **{st.session_state.mode}**")
 
36
 
37
+ # Input field
38
+ user_input = st.text_area("Enter your prompt/question:", height=100)
39
+
40
+ # Cached model loaders
41
  @st.cache_resource
42
  def load_codegen():
43
+ tok = AutoTokenizer.from_pretrained("Salesforce/codegen-350M-mono")
44
+ mod = AutoModelForCausalLM.from_pretrained("Salesforce/codegen-350M-mono")
45
+ return tok, mod
46
 
47
  @st.cache_resource
48
  def load_flan():
49
+ tok = AutoTokenizer.from_pretrained("google/flan-t5-base")
50
+ mod = AutoModelForSeq2SeqLM.from_pretrained("google/flan-t5-base")
51
+ return tok, mod
 
 
 
 
52
 
53
  @st.cache_resource
54
+ def load_deepseek():
55
+ tok = AutoTokenizer.from_pretrained("deepseek-ai/deepseek-coder-1.3b-instruct")
56
+ mod = AutoModelForCausalLM.from_pretrained("deepseek-ai/deepseek-coder-1.3b-instruct")
57
+ return tok, mod
 
58
 
59
+ # Run selected model logic
60
  if user_input:
61
  with st.spinner("Generating response..."):
62
+ if st.session_state.mode == "Code Generator":
 
 
63
  tok, mod = load_codegen()
64
+ inputs = tok(user_input, return_tensors="pt")
65
+ outputs = mod.generate(
66
+ inputs.input_ids,
67
+ max_new_tokens=128,
68
+ do_sample=True,
69
+ temperature=0.7,
70
+ pad_token_id=tok.eos_token_id
71
+ )
72
+ res = tok.decode(outputs[0], skip_special_tokens=True)
73
+ st.subheader("πŸ’» Code Output")
74
+ st.code(res, language="python")
75
+
76
+ elif st.session_state.mode == "General Q&A":
77
+ tok, mod = load_flan()
78
+ inputs = tok(user_input, return_tensors="pt")
79
+ outputs = mod.generate(inputs.input_ids, max_new_tokens=100)
80
+ res = tok.decode(outputs[0], skip_special_tokens=True)
81
+ st.subheader("πŸ“˜ Answer")
82
+ st.write(res)
83
 
84
+ elif st.session_state.mode == "Bayesian Q&A":
85
  tok, mod = load_flan()
86
+ inputs = tok(user_input, return_tensors="pt")
87
+ outputs = mod.generate(
88
+ inputs.input_ids,
89
+ do_sample=True,
90
+ top_k=50,
91
+ temperature=0.9,
92
+ max_new_tokens=100
93
+ )
94
+ res = tok.decode(outputs[0], skip_special_tokens=True)
95
+ st.subheader("πŸ“Š Bayesian-style Sampled Answer")
96
+ st.write(res)
97
+
98
+ elif st.session_state.mode == "DeepSeek":
99
+ tok, mod = load_deepseek()
100
+ inputs = tok(user_input, return_tensors="pt")
101
+ outputs = mod.generate(
102
+ inputs.input_ids,
103
+ max_new_tokens=128,
104
+ temperature=0.7,
105
+ do_sample=True,
106
+ pad_token_id=tok.eos_token_id
107
+ )
108
+ res = tok.decode(outputs[0], skip_special_tokens=True)
109
+ st.subheader("🌐 DeepSeek Coder Output")
110
+ st.code(res, language="python")
111
+
112
+ elif st.session_state.mode == "Tokenizer":
113
+ tok, _ = load_flan()
114
+ tokens = tok.tokenize(user_input)
115
+ ids = tok.convert_tokens_to_ids(tokens)
116
+ st.subheader("πŸ” Tokenization Breakdown")
117
+ st.write({"Tokens": tokens, "Token IDs": ids})