aidn commited on
Commit
ef6a028
·
verified ·
1 Parent(s): 7a08c00

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +74 -32
app.py CHANGED
@@ -76,42 +76,91 @@ def run_council(user_prompt, rounds):
76
  history.append({"role": "assistant", "content": round_header})
77
  yield history
78
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
79
  for name, (model_id, role_focus) in COUNCIL_MEMBERS.items():
80
 
81
  system_msg = (
82
  f"{role_focus}\n\n"
83
- "WICHTIG: Diskutiere konstruktiv und kollegial. "
84
- "Euer gemeinsames Ziel ist es, EXAKT das vom User geforderte Endprodukt (z.B. einen LinkedIn-Post, Code, einen Projektplan) zu erschaffen. "
85
- "Diskutiert nicht nur abstrakt über das Thema, sondern arbeitet ITERATIV am Entwurf. Schlagt konkrete Textpassagen vor und schleift das Endprodukt gemeinsam ab."
86
  )
87
 
88
- if discussion_history == "":
89
- current_prompt = f"Der Auftrag des Users lautet: '{user_prompt}'.\nEröffne die Sitzung, indem du einen ersten Entwurf, eine konkrete Struktur oder einen starken inhaltlichen 'Angle' für das geforderte Endprodukt pitchst."
90
  else:
91
- # Kollegialer, aber progressiver Interaktions-Prompt (Redaktions-Modus)
92
  current_prompt = (
93
- f"Der Auftrag des Users lautet: '{user_prompt}'.\n\n"
94
  f"Bisheriges Protokoll:\n{discussion_history}\n\n"
95
  f"ANWEISUNG FÜR DICH ({name}):\n"
96
- f"1. Analysiere den bisherigen Entwurfs-Stand der Kollegen.\n"
97
- f"2. ABSOLUTES VERBOT: Fasse die Vorredner NICHT zusammen. Wiederhole nichts.\n"
98
- f"3. Bringe das Endprodukt ZWINGEND voran: Sag klar, ob du dem aktuellen Entwurf zustimmst oder was geändert werden muss. Liefere GANZ KONKRETE Verbesserungsvorschläge (z.B. 'Wir sollten Formulierung X in Y ändern', 'Es fehlt noch ein Call-to-Action' oder liefere eine umgeschriebene Passage).\n"
99
- f"4. Verzichte auf Höflichkeitsfloskeln. Arbeite direkt am Text/Ergebnis."
100
  )
101
 
102
- answer = ask_model(model_id, system_msg, current_prompt)
103
-
104
-
105
-
106
  answer = ask_model(model_id, system_msg, current_prompt)
107
 
108
  discussion_history += f"{name}: {answer}\n\n"
109
-
110
  display_answer = f"**<span style='color: #4241A6; font-size: 1.1em;'>👤 {name}</span>**\n\n> {answer}"
111
  history.append({"role": "assistant", "content": display_answer})
112
  yield history
113
 
114
- # --- PHASE 2: VORARBEIT DES MODERATORS (KONSENS FINDEN) ---
 
 
 
115
  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>"})
116
  yield history
117
 
@@ -119,7 +168,7 @@ def run_council(user_prompt, rounds):
119
  f"Hier ist das Protokoll einer Experten-Diskussion:\n{discussion_history}\n\n"
120
  "Fasse die wichtigsten Argumente und den finalen pragmatischen Konsens zusammen. "
121
  "WICHTIG: Erhalte ZWINGEND alle konkreten Zahlen, Metriken, Mengenangaben (z.B. ml, bpm), "
122
- "Zutaten (wie Tee, Salz, Brühe) und spezifischen Handlungsschritte aus dem Protokoll. "
123
  "Vermeide abstrakte Verallgemeinerungen!"
124
  )
125
  consensus_res = ask_model(MODERATOR_MODEL, "Du bist der Chef-Analyst des Rates.", prep_prompt)
@@ -127,7 +176,6 @@ def run_council(user_prompt, rounds):
127
  history.append({"role": "assistant", "content": f"> {consensus_res}"})
128
  yield history
129
 
130
- # --- PHASE 3: FINALE UMSETZUNG (BENUTZERAUFTRAG ERFÜLLEN) ---
131
  history.append({"role": "assistant", "content": "<h2 style='color: #FF5A4D; border-bottom: 2px solid #FFEBE8; padding-bottom: 5px; margin-top: 20px;'>🏆 FINALE AUSGABE</h2>"})
132
  yield history
133
 
@@ -137,29 +185,22 @@ def run_council(user_prompt, rounds):
137
  f"Hier ist der destillierte Konsens:\n{consensus_res}\n\n"
138
  """ANWEISUNG:
139
  - Erfülle die Aufgabe des Users präzise basierend auf dem Konsens UND greife auf die konkreten Details aus dem Roh-Protokoll zurück.
140
- - Übernimm ZWINGEND alle spezifischen Vorgaben (wie exakte Flüssigkeitsmengen, Zutaten wie Elektrolyte/Salz, Puls-Grenzwerte).
141
  - Wenn der User ein Format wünscht (z.B. Post, Code, Tabelle), halte dich strikt daran.
142
- - Wenn der User nach einem 'Plan', 'Schritten' oder einer 'Anleitung' fragt, strukturiere die Antwort zwingend chronologisch (z.B. Tag 1, Tag 2) oder in klaren Aufzählungen.
143
- - Schreibe kein überflüssiges Intro, sondern liefere direkt das fertige, anwendbare Endprodukt!"""
144
  )
145
 
146
  moderator_system_prompt = (
147
  "Du bist ein brillanter Redakteur und Executive Consultant. "
148
- "Deine Aufgabe ist es, den fachlichen Konsens eines Expertenrates in ein perfekt "
149
- "formatiertes, hochprofessionelles Endprodukt für den User zu verwandeln. "
150
  "Liefere AUSSCHLIESSLICH das finale, direkt nutzbare Endprodukt ohne KI-Geschwafel."
151
  )
152
 
153
- final_res = ask_model(
154
- MODERATOR_MODEL,
155
- moderator_system_prompt,
156
- final_prompt
157
- )
158
  history.append({"role": "assistant", "content": final_res})
159
  yield history
160
 
161
- # --- THEME ---
162
- v_theme = gr.themes.Soft(
163
  primary_hue="indigo",
164
  font=[gr.themes.GoogleFont("Inter"), "ui-sans-serif", "system-ui", "sans-serif"],
165
  ).set(
@@ -210,4 +251,5 @@ with gr.Blocks() as demo:
210
  start_btn.click(run_council, inputs=[input_text, rounds_slider], outputs=[chatbot])
211
 
212
  if __name__ == "__main__":
213
- demo.launch(theme=v_theme)
 
 
76
  history.append({"role": "assistant", "content": round_header})
77
  yield history
78
 
79
+ def run_council(user_prompt, rounds):
80
+ if not user_prompt:
81
+ yield [{"role": "assistant", "content": "Bitte gib ein Thema oder eine Frage ein, um die Sitzung zu starten."}]
82
+ return
83
+
84
+ history = [{"role": "user", "content": user_prompt}]
85
+ yield history
86
+
87
+ discussion_history = ""
88
+
89
+ # ==========================================
90
+ # NEU: MODERATOR KICK-OFF
91
+ # ==========================================
92
+ history.append({"role": "assistant", "content": "<h2 style='color: #FF5A4D; border-bottom: 2px solid #FFEBE8; padding-bottom: 5px; margin-top: 20px;'>🎤 MODERATOR: SITZUNGSERÖFFNUNG</h2>"})
93
+ yield history
94
+
95
+ kickoff_sys = (
96
+ "Du bist der Lead-Moderator eines 3-köpfigen Expertenrates (Struktur, Details, Praxis). "
97
+ "Deine Aufgabe: Übersetze die eher generische User-Anfrage in ein messerscharfes Briefing für dein Team. "
98
+ "Gib in 3-4 Sätzen das klare Ziel vor und weise den Experten ihren initialen Fokus zu. Keine langen Floskeln, sei ein pragmatischer Leader."
99
+ )
100
+ kickoff_prompt = f"User-Anfrage lautet: '{user_prompt}'\nBitte eröffne die Sitzung und briefe das Team."
101
+ kickoff_res = ask_model(MODERATOR_MODEL, kickoff_sys, kickoff_prompt)
102
+
103
+ discussion_history += f"Moderator (Sitzungseröffnung): {kickoff_res}\n\n"
104
+ display_kickoff = f"**<span style='color: #FF5A4D; font-size: 1.1em;'>🎤 Moderator</span>**\n\n> {kickoff_res}"
105
+ history.append({"role": "assistant", "content": display_kickoff})
106
+ yield history
107
+
108
+ # --- PHASE 1: DAS PLENUM DISKUTIERT ---
109
+ for r in range(int(rounds)):
110
+ round_header = f"<h2 style='color: #4241A6; border-bottom: 2px solid #FFEBE8; padding-bottom: 5px; margin-top: 20px;'>🔄 ZYKLUS {r+1} - EXPERTENDEBATTE</h2>"
111
+ history.append({"role": "assistant", "content": round_header})
112
+ yield history
113
+
114
+ # ==========================================
115
+ # NEU: MODERATOR STEUERT ZWISCHEN DEN RUNDEN (Ab Zyklus 2)
116
+ # ==========================================
117
+ if r > 0:
118
+ mid_sys = (
119
+ "Du bist der Lead-Moderator. Deine Aufgabe ist es, die Debatte zu steuern. "
120
+ "Analysiere in 1-2 Sätzen den bisherigen Stand der Experten. Was ist schon gut? Was fehlt noch völlig? Wo verrennen sie sich? "
121
+ "Gib eine harte, klare Anweisung für diese neue Runde, worauf sie sich jetzt fokussieren müssen."
122
+ )
123
+ mid_prompt = f"Bisheriges Protokoll:\n{discussion_history}\n\nGib dem Team die Anweisung für die nächste Runde."
124
+ mid_res = ask_model(MODERATOR_MODEL, mid_sys, mid_prompt)
125
+
126
+ discussion_history += f"Moderator (Kurskorrektur): {mid_res}\n\n"
127
+ display_mid = f"**<span style='color: #FF5A4D; font-size: 1.1em;'>🎤 Moderator (Steuerung)</span>**\n\n> {mid_res}"
128
+ history.append({"role": "assistant", "content": display_mid})
129
+ yield history
130
+
131
+ # --- DIE EXPERTEN ANTWORTEN ---
132
  for name, (model_id, role_focus) in COUNCIL_MEMBERS.items():
133
 
134
  system_msg = (
135
  f"{role_focus}\n\n"
136
+ "WICHTIG: Diskutiere konstruktiv. Euer Ziel ist EXAKT das vom User geforderte Endprodukt. "
137
+ "Arbeitet ITERATIV am Entwurf und hört zwingend auf die Anweisungen des Moderators."
 
138
  )
139
 
140
+ if discussion_history == "": # Fallback, wird durch Kickoff meist umgangen
141
+ current_prompt = f"Auftrag: '{user_prompt}'"
142
  else:
 
143
  current_prompt = (
144
+ f"Der ursprüngliche Auftrag lautet: '{user_prompt}'.\n\n"
145
  f"Bisheriges Protokoll:\n{discussion_history}\n\n"
146
  f"ANWEISUNG FÜR DICH ({name}):\n"
147
+ f"1. Richte dich nach der letzten Anweisung des Moderators!\n"
148
+ f"2. Fasse Vorredner NICHT zusammen. Wiederhole nichts.\n"
149
+ f"3. Bringe den Entwurf konkret voran (z.B. durch Textvorschläge, das Schließen von Lücken oder Formatierungen).\n"
150
+ f"4. Komm direkt zum Punkt."
151
  )
152
 
 
 
 
 
153
  answer = ask_model(model_id, system_msg, current_prompt)
154
 
155
  discussion_history += f"{name}: {answer}\n\n"
 
156
  display_answer = f"**<span style='color: #4241A6; font-size: 1.1em;'>👤 {name}</span>**\n\n> {answer}"
157
  history.append({"role": "assistant", "content": display_answer})
158
  yield history
159
 
160
+ # ==========================================
161
+ # PHASE 2 & 3: MODERATOR ZIEHT KONSENS UND BAUT ENDPRODUKT
162
+ # (Bleibt identisch wie in deinem Code)
163
+ # ==========================================
164
  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>"})
165
  yield history
166
 
 
168
  f"Hier ist das Protokoll einer Experten-Diskussion:\n{discussion_history}\n\n"
169
  "Fasse die wichtigsten Argumente und den finalen pragmatischen Konsens zusammen. "
170
  "WICHTIG: Erhalte ZWINGEND alle konkreten Zahlen, Metriken, Mengenangaben (z.B. ml, bpm), "
171
+ "Zutaten und spezifischen Handlungsschritte aus dem Protokoll. "
172
  "Vermeide abstrakte Verallgemeinerungen!"
173
  )
174
  consensus_res = ask_model(MODERATOR_MODEL, "Du bist der Chef-Analyst des Rates.", prep_prompt)
 
176
  history.append({"role": "assistant", "content": f"> {consensus_res}"})
177
  yield history
178
 
 
179
  history.append({"role": "assistant", "content": "<h2 style='color: #FF5A4D; border-bottom: 2px solid #FFEBE8; padding-bottom: 5px; margin-top: 20px;'>🏆 FINALE AUSGABE</h2>"})
180
  yield history
181
 
 
185
  f"Hier ist der destillierte Konsens:\n{consensus_res}\n\n"
186
  """ANWEISUNG:
187
  - Erfülle die Aufgabe des Users präzise basierend auf dem Konsens UND greife auf die konkreten Details aus dem Roh-Protokoll zurück.
188
+ - Übernimm ZWINGEND alle spezifischen Vorgaben (wie exakte Mengen, Zahlen).
189
  - Wenn der User ein Format wünscht (z.B. Post, Code, Tabelle), halte dich strikt daran.
190
+ - Strukturiere Pläne zwingend chronologisch.
191
+ - Liefere direkt das fertige, anwendbare Endprodukt ohne Intro!"""
192
  )
193
 
194
  moderator_system_prompt = (
195
  "Du bist ein brillanter Redakteur und Executive Consultant. "
 
 
196
  "Liefere AUSSCHLIESSLICH das finale, direkt nutzbare Endprodukt ohne KI-Geschwafel."
197
  )
198
 
199
+ final_res = ask_model(MODERATOR_MODEL, moderator_system_prompt, final_prompt)
 
 
 
 
200
  history.append({"role": "assistant", "content": final_res})
201
  yield history
202
 
203
+ Soft(
 
204
  primary_hue="indigo",
205
  font=[gr.themes.GoogleFont("Inter"), "ui-sans-serif", "system-ui", "sans-serif"],
206
  ).set(
 
251
  start_btn.click(run_council, inputs=[input_text, rounds_slider], outputs=[chatbot])
252
 
253
  if __name__ == "__main__":
254
+ demo.launch(theme=v_theme)
255
+