File size: 3,183 Bytes
4a35942
4a7d211
4a35942
a9c0001
4a35942
54e32c3
a9c0001
1e24c34
 
 
 
 
4a7d211
1e24c34
f79c98e
a9c0001
4a35942
 
a9c0001
 
 
 
 
 
 
 
 
 
 
 
 
4a35942
074fe2f
a9c0001
f79c98e
074fe2f
1e24c34
4a7d211
a9c0001
4a35942
1e24c34
 
074fe2f
4a35942
 
1e24c34
4a35942
 
 
074fe2f
1e24c34
4a35942
a9c0001
 
4a35942
 
 
f79c98e
a9c0001
 
 
 
4a35942
a9c0001
 
 
4a7d211
a9c0001
 
 
 
1e24c34
 
 
 
 
4a35942
54e32c3
a9c0001
 
 
 
 
 
 
 
 
 
 
 
 
 
 
54e32c3
bf01995
4a35942
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import os
import requests
import gradio as gr
import sqlite3
from openai import OpenAI

# 🔑 API keys
openai_api_key = os.getenv("OPENAI_API_KEY")
gemini_api_key = os.getenv("GEMINI_API_KEY")

print("OPENAI_API_KEY =", openai_api_key)
print("GEMINI_API_KEY =", gemini_api_key)

if openai_api_key is None:
    raise ValueError("⚠️ OPENAI_API_KEY тохируулна уу!")

client = OpenAI(api_key=openai_api_key)

# SQLite db setup
conn = sqlite3.connect("chat_history.db", check_same_thread=False)
c = conn.cursor()
c.execute("""
CREATE TABLE IF NOT EXISTS history (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    user_input TEXT,
    fusion_output TEXT
)
""")
conn.commit()

# ChatGPT (gpt-5)
def chatgpt_response(prompt):
    try:
        response = client.responses.create(model="gpt-5", input=prompt)
        return response.output_text
    except Exception as e:
        return f"⚠️ ChatGPT error: {e}"

# Gemini
def gemini_response(prompt):
    if gemini_api_key is None:
        return "⚠️ GEMINI_API_KEY тохируулаагүй байна!"
    try:
        url = f"https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key={gemini_api_key}"
        headers = {"Content-Type": "application/json"}
        data = {"contents": [{"parts": [{"text": prompt}]}]}
        res = requests.post(url, headers=headers, json=data)
        res_json = res.json()
        return res_json["candidates"][0]["content"]["parts"][0]["text"]
    except Exception as e:
        return f"⚠️ Gemini error: {e}"

# Fusion + summary
def fusion_ai(prompt, chat_history=[]):
    gpt_reply = chatgpt_response(prompt)
    gemini_reply = gemini_response(prompt)

    if "ChatGPT error" in gpt_reply.lower():
        combined = f"⚠️ ChatGPT quota дууссан тул Gemini хариу:\n\n{gemini_reply}"
    else:
        # Fusion summary: урт хариултаас сонгох
        combined = f"ChatGPT 🧠: {gpt_reply}\nGemini 🌐: {gemini_reply}"

    # Update SQLite history
    c.execute("INSERT INTO history (user_input, fusion_output) VALUES (?, ?)", (prompt, combined))
    conn.commit()

    chat_history.append((prompt, combined))
    return chat_history, chat_history

# Gradio interface
css = """
.gradio-container {background-color: #0d1117 !important; color: #e6edf3;}
h1, h3, h4, label {color: #00d9ff !important;}
textarea, input {background-color:#161b22 !important; color:#fff !important; border-radius:10px;}
button {background-color:#00d9ff !important; color:#000 !important; font-weight:bold; border-radius:10px;}
"""

with gr.Blocks(css=css, theme=gr.themes.Soft()) as app:
    gr.Markdown("## 🚀 ZeppFusion AI — Persistent Fusion Chat")
    chatbot = gr.Chatbot()
    msg = gr.Textbox(placeholder="Таны асуулт...")
    clear = gr.Button("🗑️ Clear History")

    # Submit: add to history
    msg.submit(fusion_ai, [msg, chatbot], [chatbot, chatbot])
    
    # Clear button: delete SQLite history
    def clear_history():
        c.execute("DELETE FROM history")
        conn.commit()
        return []
    clear.click(clear_history, None, chatbot)

if __name__ == "__main__":
    app.launch()