charesz commited on
Commit
0509d9b
·
verified ·
1 Parent(s): 2656dec

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +119 -0
app.py CHANGED
@@ -70,3 +70,122 @@ elif provider == "Gemini":
70
  model = st.sidebar.selectbox("Model", available_models, index=0)
71
 
72
  # Initialize Gemini chat if model changes or not initialized
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
70
  model = st.sidebar.selectbox("Model", available_models, index=0)
71
 
72
  # Initialize Gemini chat if model changes or not initialized
73
+ if "gemini_chat" not in st.session_state or st.session_state.get("model") != model:
74
+ st.session_state.model = model
75
+ try:
76
+ gemini_model = genai.GenerativeModel(model)
77
+ st.session_state.gemini_chat = gemini_model.start_chat(history=[])
78
+ except Exception as e:
79
+ st.error(f"⚠️ Could not initialize Gemini model: {e}")
80
+ st.stop()
81
+
82
+ # -------------------
83
+ # System Prompt
84
+ # -------------------
85
+ system_prompt = st.sidebar.text_area(
86
+ "System Prompt",
87
+ "You are a helpful AI assistant. Provide concise and accurate answers."
88
+ )
89
+
90
+ # -------------------
91
+ # Chat History State
92
+ # -------------------
93
+ if "messages" not in st.session_state:
94
+ st.session_state.messages = []
95
+
96
+ # Reset conversation button
97
+ if st.sidebar.button("Reset Conversation"):
98
+ st.session_state.messages = []
99
+ if provider == "Gemini" and model:
100
+ gemini_model = genai.GenerativeModel(model)
101
+ st.session_state.gemini_chat = gemini_model.start_chat(history=[])
102
+ st.rerun()
103
+
104
+ # -------------------
105
+ # Display Chat Messages
106
+ # -------------------
107
+ for msg in st.session_state.messages:
108
+ with st.chat_message(msg["role"]):
109
+ st.markdown(msg["content"])
110
+
111
+ # -------------------
112
+ # User Input
113
+ # -------------------
114
+ if user_input := st.chat_input("Type your message..."):
115
+ st.chat_message("user").markdown(user_input)
116
+ st.session_state.messages.append({"role": "user", "content": user_input})
117
+
118
+ # -------------------
119
+ # Hugging Face Logic
120
+ # -------------------
121
+ if provider == "Hugging Face":
122
+ for m in selected_models:
123
+ with st.chat_message("assistant"):
124
+ message_placeholder = st.empty()
125
+ message_placeholder.markdown(f"**{m}** is generating...")
126
+
127
+ try:
128
+ conv = "\n".join(
129
+ [f"{msg['role']}: {msg['content']}" for msg in st.session_state.messages]
130
+ )
131
+
132
+ if "flan-t5" in m or "t5" in m:
133
+ # ✅ Use text2text for T5 models
134
+ prompt_text = f"{system_prompt}\n\nUser asked:\n{conv}\n\nAnswer:"
135
+ resp = client.text2text_generation(
136
+ model=m,
137
+ inputs=prompt_text,
138
+ max_new_tokens=256,
139
+ temperature=0.7,
140
+ )
141
+ else:
142
+ # ✅ Use text_generation for GPT-style models
143
+ stop_sequences = ["assistant:", "user:"]
144
+ prompt_text = f"{system_prompt}\n\n{conv}\nassistant:"
145
+ resp = client.text_generation(
146
+ model=m,
147
+ prompt=prompt_text,
148
+ max_new_tokens=256,
149
+ temperature=0.7,
150
+ stop_sequences=stop_sequences,
151
+ stream=False,
152
+ )
153
+
154
+ # Parse response safely
155
+ if isinstance(resp, str):
156
+ bot_text = resp
157
+ elif isinstance(resp, dict) and "generated_text" in resp:
158
+ bot_text = resp["generated_text"]
159
+ elif isinstance(resp, list) and resp and "generated_text" in resp[0]:
160
+ bot_text = resp[0]["generated_text"]
161
+ else:
162
+ bot_text = "⚠️ Model returned an unexpected format."
163
+
164
+ except Exception as e:
165
+ bot_text = f"⚠️ Error with **{m}**: {type(e).__name__}: {e}"
166
+
167
+ final_response = f"**{m}**\n\n{bot_text}"
168
+ message_placeholder.markdown(final_response)
169
+ st.session_state.messages.append({"role": "assistant", "content": final_response})
170
+
171
+ st.rerun()
172
+
173
+ # -------------------
174
+ # Gemini Logic
175
+ # -------------------
176
+ elif provider == "Gemini":
177
+ try:
178
+ if user_input.strip():
179
+ with st.spinner("Gemini is thinking..."):
180
+ resp = st.session_state.gemini_chat.send_message(user_input)
181
+ bot_text = resp.text
182
+ else:
183
+ bot_text = "⚠️ Please enter a message before sending."
184
+ except Exception as e:
185
+ bot_text = f"⚠️ Gemini could not respond right now. Please try again. ({e})"
186
+
187
+ with st.chat_message("assistant"):
188
+ st.markdown(bot_text)
189
+
190
+ st.session_state.messages.append({"role": "assistant", "content": bot_text})
191
+ st.rerun()