Spaces:
Running
Running
| import gradio as gr | |
| import google.generativeai as genai | |
| import os | |
| # ----------------- ТОХИРГОО ----------------- | |
| # ЧУХАЛ: API түлхүүрээ орчны хувьсагч (environment variable) болгож тохируулна уу. | |
| # Google AI Studio-с API түлхүүрээ авна уу: https://aistudio.google.com/app/apikey | |
| # | |
| # Терминал дээрээ дараах байдлаар тохируулж болно: | |
| # export GOOGLE_API_KEY="ЭНД_API_ТҮЛХҮҮРЭЭ_ОРУУЛНА_УУ" | |
| try: | |
| genai.configure(api_key=os.environ["GOOGLE_API_KEY"]) | |
| except KeyError: | |
| print("АЛДАА: GOOGLE_API_KEY орчны хувьсагч тохируулагдаагүй байна.") | |
| # Хэрэв түлхүүр байхгүй бол Gradio интерфэйс дээр алдаа харуулна | |
| api_key_set = False | |
| else: | |
| api_key_set = True | |
| # Аюулгүй байдлын тохиргоог зөөлрүүлэх (зарим тохиолдолд хариулт блоклогдохоос сэргийлнэ) | |
| safety_settings = [ | |
| {"category": "HARM_CATEGORY_HARASSMENT", "threshold": "BLOCK_NONE"}, | |
| {"category": "HARM_CATEGORY_HATE_SPEECH", "threshold": "BLOCK_NONE"}, | |
| {"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", "threshold": "BLOCK_NONE"}, | |
| {"category": "HARM_CATEGORY_DANGEROUS_CONTENT", "threshold": "BLOCK_NONE"}, | |
| ] | |
| # Gemini Pro загварыг сонгох | |
| model = genai.GenerativeModel('gemini-pro', safety_settings=safety_settings) | |
| # Чатны түүхийг хадгалах (Gradio-ийн session state) | |
| chat = model.start_chat(history=[]) | |
| # ----------------- GRADIO ФУНКЦ ----------------- | |
| def gemini_chat(message, history): | |
| """ | |
| Gradio чатны интерфэйст зориулсан функц. | |
| Хэрэглэгчийн зурвасыг Gemini API руу илгээж, хариултыг нь буцаана. | |
| """ | |
| if not api_key_set: | |
| yield "АЛДАА: Google API түлхүүр тохируулагдаагүй байна. Програмыг унтрааж, API түлхүүрээ тохируулаад дахин ажиллуулна уу." | |
| return | |
| try: | |
| # Mesasge-ийг загвар луу илгээнэ | |
| response = chat.send_message(message, stream=True) | |
| # Хариултыг хэсэгчлэн (stream) авах | |
| full_response = "" | |
| for chunk in response: | |
| full_response += chunk.text | |
| yield full_response | |
| except Exception as e: | |
| yield f"Алдаа гарлаа: {e}" | |
| # ----------------- GRADIO ИНТЕРФЕЙС ----------------- | |
| with gr.Blocks(theme=gr.themes.Soft(), title="Gemini Chat") as demo: | |
| gr.Markdown( | |
| """ | |
| # Gemini Chat 🤖 | |
| Энэ бол Google-ийн Gemini Pro загварыг ашигласан чатбот юм. | |
| """ | |
| ) | |
| # ChatGPT-тэй ижил дизайнтай чат интерфэйс | |
| chatbot = gr.ChatInterface( | |
| fn=gemini_chat, | |
| chatbot=gr.Chatbot( | |
| height=600, | |
| show_label=False, | |
| avatar_images=(None, "https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png"), | |
| ), | |
| textbox=gr.Textbox( | |
| placeholder="Энд бичнэ үү...", | |
| container=False, | |
| scale=7, | |
| ), | |
| title=None, | |
| submit_btn="Илгээх", | |
| retry_btn=None, | |
| undo_btn="Буцаах", | |
| clear_btn="Цэвэрлэх", | |
| ) | |
| # ----------------- АЖИЛЛУУЛАХ ----------------- | |
| if __name__ == "__main__": | |
| # Gradio аппликейшнийг ажиллуулах | |
| demo.launch(debug=True) |