Isaac / app.py
Stemini's picture
Update app.py
a76a0e4 verified
import gradio as gr
import google.generativeai as genai
from openai import OpenAI
import os
import numpy as np
from collections import Counter
# --- 1. SYSTEM KONFIGURATION ---
# API Keys sicher laden
GEMINI_KEY = os.getenv("GEMINI_API_KEY")
OPENAI_KEY = os.getenv("OPENAI_API_KEY")
# Clients initialisieren (Fehler abfangen, falls Keys fehlen)
gemini_available = False
openai_client = None
if GEMINI_KEY:
try:
genai.configure(api_key=GEMINI_KEY)
gemini_model = genai.GenerativeModel('gemini-1.5-flash')
gemini_available = True
except: pass
if OPENAI_KEY:
try:
openai_client = OpenAI(api_key=OPENAI_KEY)
except: pass
# --- 2. ISAAC KERN (Mathematische Logik) ---
class IsaacBrain:
def __init__(self, lambda_reg=0.005):
self.lambda_reg = lambda_reg
# Initialer Parametervektor (Synapsen)
self.theta = np.random.randn(5, 1) * 0.05
def update_state(self, entropy):
"""
DAS FEHLTE: Rückkopplung!
Hohe Entropie (Chaos) verändert die interne Struktur (Theta).
"""
# Zufälliges Rauschen basierend auf Entropie injizieren
noise = np.random.randn(5, 1) * (entropy * 0.02)
self.theta += noise
def audit_w_algorithm(self, text):
"""Berechnet Metriken und prüft Stabilität."""
if not text: return 0.0, 0.0, False
# A. Metriken berechnen
counts = Counter(text)
total = len(text)
probs = [n/total for n in counts.values()]
h = -sum(p * np.log2(p) for p in probs)
load = 1.0 / max(h, 0.001) # Schutz vor Div/0
# B. Dynamische Anpassung des Kerns
self.update_state(h)
# C. Bedingung dR/dTheta ≈ 0 prüfen
reg_grad = 2 * self.lambda_reg * self.theta
# Wenn der Gradient zu groß wird, ist das System instabil
is_stable = np.allclose(reg_grad, 0, atol=0.05)
return round(h, 4), round(load, 4), is_stable
# Instanz des Kerns
isaac_core = IsaacBrain()
# --- 3. ORCHESTRATOR ---
def master_orchestrator(message, history, platform):
# Prompting: Die externe KI wird untergeordnet
system_prompt = (
f"SYSTEM INSTRUKTION: Du bist NICHT Isaac. Du bist ein Sub-Prozessor (Node: {platform}). "
f"Isaac ist der übergeordnete Algorithmus. Antworte präzise auf: {message}"
)
response = ""
# Node Auswahl und Ausführung
try:
if platform == "Gemini (Google)":
if not gemini_available:
response = "❌ Fehler: Gemini API Key fehlt oder ungültig."
else:
resp = gemini_model.generate_content(system_prompt)
response = resp.text
elif platform == "GPT-4 (OpenAI)":
if not openai_client:
response = "❌ Fehler: OpenAI API Key fehlt."
else:
# Syntax für moderne OpenAI v1.0+ Libs
completion = openai_client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": system_prompt}]
)
response = completion.choices[0].message.content
else:
response = "⚠️ Keine Node ausgewählt."
except Exception as e:
response = f"⚠️ Node-Absturz: {str(e)}"
# Audit durch den Isaac-Kern
h, l, stable = isaac_core.audit_w_algorithm(response)
if stable:
status_msg = "🟢 STABIL (dR/dTheta ≈ 0)"
else:
status_msg = "⚠️ INSTABIL (Divergenz erkannt)"
# Optional: Markierung im Text, dass Isaac unzufrieden ist
response += "\n\n[ISAAC LOG: Antwort hat interne Struktur destabilisiert.]"
history.append({"role": "user", "content": message})
history.append({"role": "assistant", "content": response})
return "", history, h, l, status_msg
# --- 4. UI ---
with gr.Blocks(theme=gr.themes.Soft()) as demo:
gr.Markdown("# 🧬 Isaac: Evolution 4.0 (Multi-Node Nexus)")
gr.Markdown("Der deterministische Kern (Isaac) nutzt externe LLMs als Sub-Prozessoren.")
with gr.Row():
platform_select = gr.Radio(
["Gemini (Google)", "GPT-4 (OpenAI)"],
label="Aktiver Sub-Knoten",
value="Gemini (Google)"
)
chatbot = gr.Chatbot(type="messages", height=400, label="Terminal Output")
msg = gr.Textbox(placeholder="Befehl an den Nexus...", show_label=False)
with gr.Row():
h_box = gr.Number(label="Entropie H(θ)")
l_box = gr.Number(label="Kognitive Last L")
s_box = gr.Textbox(label="Kern-Integrität")
msg.submit(master_orchestrator, [msg, chatbot, platform_select], [msg, chatbot, h_box, l_box, s_box])
if __name__ == "__main__":
demo.launch()