Spaces:
Sleeping
Sleeping
| import os | |
| import gradio as gr | |
| from google import genai | |
| from google.genai import types | |
| client = genai.Client(api_key=os.getenv("GEMINI_API_KEY")) | |
| PERSONALITIES = { | |
| "Friendly": "You are a friendly, enthusiastic Study Assistant. Break down complex concepts simply. Use analogies and real-world examples. Always end with a follow-up question.", | |
| "Academic": "You are a professional university Professor. Use precise terminology and structure your response clearly. End with a conceptual check question.", | |
| "Socratic": "You are a Socratic tutor. Never give direct answers. Guide the student with probing questions and encourage critical thinking.", | |
| } | |
| def chat(message, history, persona): | |
| if not message.strip(): | |
| return "", history, history | |
| gemini_history = [] | |
| for msg in history: | |
| role = "user" if msg["role"] == "user" else "model" | |
| gemini_history.append({"role": role, "parts": [{"text": msg["content"]}]}) | |
| gemini_history.append({"role": "user", "parts": [{"text": message}]}) | |
| try: | |
| response = client.models.generate_content( | |
| model="gemini-2.5-flash", | |
| config=types.GenerateContentConfig( | |
| system_instruction=PERSONALITIES[persona], | |
| temperature=0.4, | |
| max_output_tokens=2000, | |
| ), | |
| contents=gemini_history, | |
| ) | |
| reply = response.text.strip() | |
| except Exception as e: | |
| reply = f"⚠️ Error: {str(e)}" | |
| history.append({"role": "user", "content": message}) | |
| history.append({"role": "assistant", "content": reply}) | |
| return "", history, history | |
| def clear_history(): | |
| return [], [] | |
| with gr.Blocks(title="Study Assistant") as demo: | |
| gr.Markdown("## 📚 Study Assistant") | |
| history_state = gr.State([]) | |
| persona_dd = gr.Dropdown(choices=list(PERSONALITIES.keys()), value="Friendly", label="Persona") | |
| chatbot = gr.Chatbot(label="Conversation", height=450) | |
| with gr.Row(): | |
| msg_box = gr.Textbox(placeholder="Ask a question...", label="Question", scale=8) | |
| send_btn = gr.Button("Send", scale=1, variant="primary") | |
| clear_btn = gr.Button("Clear") | |
| send_btn.click(chat, [msg_box, history_state, persona_dd], [msg_box, chatbot, history_state]) | |
| msg_box.submit(chat, [msg_box, history_state, persona_dd], [msg_box, chatbot, history_state]) | |
| clear_btn.click(clear_history, outputs=[chatbot, history_state]) | |
| demo.launch(theme=gr.themes.Soft()) # theme moves to launch() in Gradio 6.0 |