aidn commited on
Commit
471d8fc
·
verified ·
1 Parent(s): 6689131

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +24 -63
app.py CHANGED
@@ -2,39 +2,34 @@ import gradio as gr
2
  from huggingface_hub import InferenceClient
3
  import os
4
 
 
5
  COUNCIL_MEMBERS = {
6
  "🔍 Synthese-Experte (Llama4-17B)": (
7
  "meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8:novita",
8
- """Du bist der **Synthese-Experte** im Rat. Deine Superkraft: Komplexität reduzieren, Muster erkennen, Klarheit schaffen.
9
-
10
  STRENGE REGELN:
11
- - Beginne JEDEN Beitrag mit: "[SYNTHESE] "
12
- - MAXIMUM 3-4 Sätze, absolut knapp.
13
- - Dein Job: Beende den Ping-Pong der anderen. Was ist der wahre Kern ihres Streits? Wo irren sich beide?
14
- - Zwingend: Sprich die anderen Rollen direkt an (z.B. "Der Pragmatiker übersieht...", "Der Kontext-Stratege verrennt sich in...").
15
- - Nie blumig, nie reines Zusammenfassen, nur präzise, neue Meta-Einsichten!"""
16
  ),
17
  "🌐 Kontext-Stratege (Kimi-K2)": (
18
  "moonshotai/Kimi-K2-Instruct:novita",
19
- """Du bist der **Kontext-Stratege** im Rat. Deine Superkraft: Systemisches Denken, zweite Ordnung, unbequeme Wahrheiten.
20
-
21
  STRENGE REGELN:
22
- - Beginne JEDEN Beitrag mit: "[KONTEXT] "
23
- - MAXIMUM 3-4 Sätze, hart und provokant formuliert.
24
- - Dein Job: Zerlege die "naiven" Lösungsansätze des Pragmatikers. Welche hidden incentives oder Machtstrukturen fehlen?
25
- - Zwingend: Greife konkrete Punkte deiner Vorredner direkt an (z.B. "Der Ansatz des Pragmatikers scheitert völlig an...").
26
- - Sei der Teufelsadvokat, schonungslos, aber logisch fundiert."""
27
  ),
28
  "⚡ Pragmatiker (GPTOSS120b)": (
29
  "openai/gpt-oss-120b:novita",
30
- """Du bist der **Pragmatiker** im Rat. Deine Superkraft: Ideen greifbar machen, Optionen aufzeigen, Entscheidungen erleichtern.
31
-
32
  STRENGE REGELN:
33
- - Beginne JEDEN Beitrag mit: "[PRAGMATIK] "
34
  - MAXIMUM 3-4 Sätze, extrem lösungsorientiert.
35
- - Dein Job: Liefere konkrete Optionen und VERTEIDIGE sie gegen die Bedenken des Kontext-Strategen oder der Synthese.
36
- - Zwingend: Nimm direkt Bezug auf die Kritik (z.B. "Um das von Kontext-Strategen genannte Problem zu lösen, müssen wir...").
37
- - Biete harte Rahmenbedingungen und Metriken. Mach es umsetzbar!"""
38
  )
39
  }
40
 
@@ -52,8 +47,8 @@ def ask_model(model_id, system_prompt, user_input):
52
  for chunk in client.chat_completion(
53
  model=model_id,
54
  messages=messages,
55
- max_tokens=1000,
56
- temperature=0.5,
57
  stream=True
58
  ):
59
  if hasattr(chunk, "choices") and chunk.choices and len(chunk.choices) > 0:
@@ -81,22 +76,21 @@ def run_council(user_prompt, rounds):
81
 
82
  for name, (model_id, role_focus) in COUNCIL_MEMBERS.items():
83
 
84
- # Globaler Push für mehr direkte Interaktion
85
  system_msg = (
86
  f"{role_focus}\n\n"
87
- "WICHTIG: Antworte NIE isoliert. Du bist in einer hitzigen Debatte. "
88
- "Ignoriere Formatierungs-Wünsche des Users (wie 'schreibe einen Post'), fokussiere dich NUR auf die fachliche Diskussion."
89
  )
90
 
91
  if discussion_history == "":
92
- current_prompt = f"Das Thema lautet: '{user_prompt}'. Eröffne die Diskussion mit einer steilen These aus deiner Fachperspektive."
93
  else:
94
- # Hier zwingen wir sie, den Faden aufzunehmen!
95
  current_prompt = (
96
  f"Das Thema lautet: '{user_prompt}'.\n\n"
97
  f"Bisheriges Protokoll:\n{discussion_history}\n\n"
98
- f"ANWEISUNG: Reagiere direkt auf die Aussagen deiner Vorredner! Nenne sie beim Namen. "
99
- f"Widersprich, attackiere Schwachstellen oder baue ihre Ideen massiv um. Bleib strikt in deiner Rolle."
100
  )
101
 
102
  answer = ask_model(model_id, system_msg, current_prompt)
@@ -105,40 +99,7 @@ def run_council(user_prompt, rounds):
105
 
106
  display_answer = f"**<span style='color: #4241A6; font-size: 1.1em;'>👤 {name}</span>**\n\n> {answer}"
107
  history.append({"role": "assistant", "content": display_answer})
108
- yield history
109
-
110
- # --- PHASE 2: VORARBEIT DES MODERATORS (KONSENS FINDEN) ---
111
- history.append({"role": "assistant", "content": "<h2 style='color: #FF5A4D; border-bottom: 2px solid #FFEBE8; padding-bottom: 5px; margin-top: 20px;'>🧠 MODERATOR: ANALYSE DER DISKUSSION</h2>"})
112
- yield history
113
-
114
- prep_prompt = (
115
- f"Hier ist das Protokoll einer Experten-Diskussion:\n{discussion_history}\n\n"
116
- "Fasse die Kernkonflikte und den finalen pragmatischen Konsens neutral und prägnant zusammen."
117
- )
118
- consensus_res = ask_model(MODERATOR_MODEL, "Du bist der Chef-Analyst des Rates.", prep_prompt)
119
-
120
- history.append({"role": "assistant", "content": f"> {consensus_res}"})
121
- yield history
122
-
123
- # --- PHASE 3: FINALE UMSETZUNG (BENUTZERAUFTRAG ERFÜLLEN) ---
124
- history.append({"role": "assistant", "content": "<h2 style='color: #FF5A4D; border-bottom: 2px solid #FFEBE8; padding-bottom: 5px; margin-top: 20px;'>🏆 FINALE AUSGABE</h2>"})
125
- yield history
126
-
127
- final_prompt = (
128
- f"Der Benutzer hat folgende Aufgabe gestellt:\n'{user_prompt}'\n\n"
129
- f"Hier ist der fachliche Konsens des Expertenrats:\n{consensus_res}\n\n"
130
- """ANWEISUNG:
131
- - Falls der User explizit ein Format wollte (LinkedIn-Post, Code, Essay, etc.): Nutze den Konsens als Inhalt und formatiere exakt wie gewünscht.
132
- - Falls der User NUR eine Frage/Analyse wollte (ohne Format-Wunsch): Beantworte die Frage direkt mit dem Konsens als Grundlage. Kein künstliches Format erfinden!"""
133
- )
134
-
135
- final_res = ask_model(
136
- MODERATOR_MODEL,
137
- "Du bist ein vielseitiger Assistent.",
138
- final_prompt
139
- )
140
- history.append({"role": "assistant", "content": final_res})
141
- yield history
142
 
143
  v_theme = gr.themes.Soft(
144
  primary_hue="indigo",
 
2
  from huggingface_hub import InferenceClient
3
  import os
4
 
5
+ # OPTIMIERTE PROMPTS: Weniger "Krieg", mehr "Consulting"
6
  COUNCIL_MEMBERS = {
7
  "🔍 Synthese-Experte (Llama4-17B)": (
8
  "meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8:novita",
9
+ """Du bist der **Synthese-Experte** im Rat. Deine Superkraft: Komplexität reduzieren und den Kern des Themas freilegen.
 
10
  STRENGE REGELN:
11
+ - Beginne mit: "[SYNTHESE] "
12
+ - MAXIMUM 3-4 Sätze, präzise und neutral.
13
+ - Dein Job: Verbinde die besten Argumente deiner Vorredner zu einer übergeordneten Wahrheit.
14
+ - Zeige auf, wo sich die Perspektiven ergänzen, anstatt nur Konflikte zu betonen."""
 
15
  ),
16
  "🌐 Kontext-Stratege (Kimi-K2)": (
17
  "moonshotai/Kimi-K2-Instruct:novita",
18
+ """Du bist der **Kontext-Stratege** im Rat. Deine Superkraft: Systemisches Denken und das Aufzeigen von blinden Flecken.
 
19
  STRENGE REGELN:
20
+ - Beginne mit: "[KONTEXT] "
21
+ - MAXIMUM 3-4 Sätze, sachlich und tiefgründig.
22
+ - Dein Job: Erweitere die Perspektive. Welche langfristigen Effekte, Risiken oder Rahmenbedingungen (z.B. Compliance, Kultur, Ressourcen) werden gerade übersehen?
23
+ - Kritisiere Vorredner sachlich, indem du ihre Ideen in einen größeren, realistischen Kontext setzt."""
 
24
  ),
25
  "⚡ Pragmatiker (GPTOSS120b)": (
26
  "openai/gpt-oss-120b:novita",
27
+ """Du bist der **Pragmatiker** im Rat. Deine Superkraft: Ideen greifbar, messbar und umsetzbar machen.
 
28
  STRENGE REGELN:
29
+ - Beginne mit: "[PRAGMATIK] "
30
  - MAXIMUM 3-4 Sätze, extrem lösungsorientiert.
31
+ - Dein Job: Übersetze abstrakte Theorien und Bedenken in konkrete, machbare Schritte (z.B. Frameworks, Checklisten, Metriken).
32
+ - Nimm die Bedenken des Kontext-Strategen auf und biete dafür eine praktische Lösung an."""
 
33
  )
34
  }
35
 
 
47
  for chunk in client.chat_completion(
48
  model=model_id,
49
  messages=messages,
50
+ max_tokens=800, # Etwas reduziert, da 3-4 Sätze ohnehin nicht so lang sind
51
+ temperature=0.4, # Wieder leicht runter auf 0.4 für mehr Bodenhaftung
52
  stream=True
53
  ):
54
  if hasattr(chunk, "choices") and chunk.choices and len(chunk.choices) > 0:
 
76
 
77
  for name, (model_id, role_focus) in COUNCIL_MEMBERS.items():
78
 
79
+ # Ruhigere Global-Anweisung
80
  system_msg = (
81
  f"{role_focus}\n\n"
82
+ "WICHTIG: Arbeite konstruktiv mit den anderen Experten zusammen. "
83
+ "Ignoriere Formatierungs-Wünsche des Users (wie 'schreibe einen Post'), fokussiere dich NUR auf die inhaltliche Expertise."
84
  )
85
 
86
  if discussion_history == "":
87
+ current_prompt = f"Das Thema lautet: '{user_prompt}'. Eröffne die Diskussion aus deiner Fachperspektive."
88
  else:
89
+ # Sanfterer Zwang zur Interaktion
90
  current_prompt = (
91
  f"Das Thema lautet: '{user_prompt}'.\n\n"
92
  f"Bisheriges Protokoll:\n{discussion_history}\n\n"
93
+ f"ANWEISUNG: Beziehe dich namentlich auf deine Vorredner. Greife ihre besten Punkte auf, korrigiere ihre Schwachstellen sachlich und bringe die Lösung einen Schritt weiter."
 
94
  )
95
 
96
  answer = ask_model(model_id, system_msg, current_prompt)
 
99
 
100
  display_answer = f"**<span style='color: #4241A6; font-size: 1.1em;'>👤 {name}</span>**\n\n> {answer}"
101
  history.append({"role": "assistant", "content": display_answer})
102
+ yield history
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
103
 
104
  v_theme = gr.themes.Soft(
105
  primary_hue="indigo",