Kostya Lolinger commited on
Commit
acaeee8
·
unverified ·
1 Parent(s): 7f1f343

Add files via upload

Browse files
Files changed (4) hide show
  1. .dockerignore +3 -0
  2. Dockerfile +11 -0
  3. app.py +115 -0
  4. requirements.txt +5 -0
.dockerignore ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ __pycache__
2
+ *.pyc
3
+ .git
Dockerfile ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM python:3.11-slim
2
+
3
+ WORKDIR /app
4
+
5
+ COPY requirements.txt .
6
+ RUN pip install --no-cache-dir -r requirements.txt
7
+
8
+ COPY . .
9
+
10
+ EXPOSE 7860
11
+ CMD ["python", "app.py"]
app.py ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import sqlite3
3
+ import os
4
+ from huggingface_hub import InferenceClient
5
+ from gtts import gTTS
6
+ from PIL import Image
7
+ import io
8
+
9
+ # SQLite DB (ephemeral)
10
+ DB = "aio_ai.db"
11
+ conn = sqlite3.connect(DB, check_same_thread=False)
12
+ conn.execute("CREATE TABLE IF NOT EXISTS users (username TEXT PRIMARY KEY, password TEXT)")
13
+ conn.execute("CREATE TABLE IF NOT EXISTS characters (id INTEGER PRIMARY KEY, username TEXT, name TEXT, prompt TEXT)")
14
+
15
+ client = InferenceClient()
16
+
17
+ def register(username, password):
18
+ try:
19
+ conn.execute("INSERT INTO users VALUES (?, ?)", (username, password))
20
+ conn.commit()
21
+ return "✅ Registriert!"
22
+ except:
23
+ return "❌ Username existiert bereits"
24
+
25
+ def login(username, password):
26
+ res = conn.execute("SELECT * FROM users WHERE username=? AND password=?", (username, password)).fetchone()
27
+ return "✅ Willkommen!" if res else "❌ Falsche Daten"
28
+
29
+ def create_character(username, name, system_prompt):
30
+ conn.execute("INSERT INTO characters (username, name, prompt) VALUES (?, ?, ?)", (username, name, system_prompt))
31
+ conn.commit()
32
+ return f"✅ Charakter '{name}' erstellt!"
33
+
34
+ def get_characters(username):
35
+ return [row[1] for row in conn.execute("SELECT * FROM characters WHERE username=?", (username,)).fetchall()]
36
+
37
+ def chat(message, username, character_name):
38
+ chars = conn.execute("SELECT prompt FROM characters WHERE username=? AND name=?", (username, character_name)).fetchone()
39
+ prompt = chars[0] if chars else "Du bist ein hilfreicher Assistent."
40
+ full_prompt = f"{prompt}\nUser: {message}"
41
+ response = client.text_generation(full_prompt, model="microsoft/Phi-3-mini-4k-instruct", max_new_tokens=512)
42
+ return response
43
+
44
+ def generate_image(prompt):
45
+ img_bytes = client.text_to_image(prompt, model="stabilityai/stable-diffusion-2-1")
46
+ return Image.open(io.BytesIO(img_bytes))
47
+
48
+ def generate_code(prompt):
49
+ full = f"Schreibe sauberen Code für: {prompt}"
50
+ return client.text_generation(full, model="microsoft/Phi-3-mini-4k-instruct", max_new_tokens=1024)
51
+
52
+ def text_to_speech(text):
53
+ tts = gTTS(text, lang="de")
54
+ tts.save("output.mp3")
55
+ return "output.mp3"
56
+
57
+ # Gradio UI
58
+ with gr.Blocks(title="AIO AI") as demo:
59
+ gr.Markdown("# 🤖 AIO AI – All-in-One KI Plattform")
60
+
61
+ with gr.Tab("🔑 Login / Registrierung"):
62
+ with gr.Row():
63
+ with gr.Column():
64
+ gr.Markdown("### Registrieren")
65
+ u1 = gr.Textbox(label="Username")
66
+ p1 = gr.Textbox(label="Passwort", type="password")
67
+ reg_btn = gr.Button("Registrieren")
68
+ reg_out = gr.Textbox()
69
+ reg_btn.click(register, [u1, p1], reg_out)
70
+ with gr.Column():
71
+ gr.Markdown("### Anmelden")
72
+ u2 = gr.Textbox(label="Username")
73
+ p2 = gr.Textbox(label="Passwort", type="password")
74
+ login_btn = gr.Button("Anmelden")
75
+ login_out = gr.Textbox()
76
+ login_btn.click(login, [u2, p2], login_out)
77
+
78
+ with gr.Tab("👤 Charaktere"):
79
+ username = gr.Textbox(label="Dein Username", visible=True)
80
+ name = gr.Textbox(label="Charakter-Name")
81
+ prompt = gr.Textbox(label="System-Prompt", lines=5)
82
+ create_btn = gr.Button("Charakter erstellen")
83
+ create_out = gr.Textbox()
84
+ create_btn.click(create_character, [username, name, prompt], create_out)
85
+
86
+ char_list = gr.Dropdown(label="Deine Charaktere", choices=[])
87
+ refresh_btn = gr.Button("Liste aktualisieren")
88
+ refresh_btn.click(lambda u: get_characters(u), username, char_list)
89
+
90
+ with gr.Tab("💬 Chat"):
91
+ chat_char = gr.Dropdown(label="Charakter wählen")
92
+ msg = gr.Textbox(label="Deine Nachricht")
93
+ chat_btn = gr.Button("Senden")
94
+ chat_output = gr.Textbox(label="Antwort")
95
+ chat_btn.click(chat, [msg, username, chat_char], chat_output)
96
+
97
+ with gr.Tab("🖼️ Bildgenerierung"):
98
+ img_prompt = gr.Textbox(label="Beschreibe das Bild")
99
+ img_btn = gr.Button("Bild erzeugen")
100
+ img_output = gr.Image()
101
+ img_btn.click(generate_image, img_prompt, img_output)
102
+
103
+ with gr.Tab("💻 Code-Generator"):
104
+ code_prompt = gr.Textbox(label="Was soll der Code tun?")
105
+ code_btn = gr.Button("Code generieren")
106
+ code_output = gr.Code(language="python")
107
+ code_btn.click(generate_code, code_prompt, code_output)
108
+
109
+ with gr.Tab("🔊 Text-to-Speech"):
110
+ tts_text = gr.Textbox(label="Text zum Vorlesen")
111
+ tts_btn = gr.Button("Sprache erzeugen")
112
+ tts_output = gr.Audio()
113
+ tts_btn.click(text_to_speech, tts_text, tts_output)
114
+
115
+ demo.launch(server_name="0.0.0.0", server_port=7860)
requirements.txt ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ gradio>=4.0
2
+ huggingface_hub
3
+ gtts
4
+ pillow
5
+ sqlite3