aidn commited on
Commit
af188af
·
verified ·
1 Parent(s): 94e51e7

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +20 -5
app.py CHANGED
@@ -7,7 +7,8 @@ import json
7
  # 1. KONFIGURATION & AUFGABEN-PROFILE
8
  # ==========================================
9
 
10
- MODERATOR_MODEL = "meta-llama/Llama-3.3-70B-Instruct"
 
11
 
12
  # Jedes Profil definiert, wie Experten denken und was am Ende rauskommt
13
  TASK_PROFILES = {
@@ -79,7 +80,7 @@ COUNCIL_MEMBERS = [
79
  },
80
  {
81
  "name": "🧐 Experte II",
82
- "model": "deepseek-ai/DeepSeek-V3.2",
83
  "tag": "KRITIK",
84
  "color": "#7c3aed",
85
  "role_hint": (
@@ -89,7 +90,8 @@ COUNCIL_MEMBERS = [
89
  },
90
  {
91
  "name": "🛠️ Experte III",
92
- "model": "meta-llama/Llama-4-Maverick-17B-128E-Instruct",
 
93
  "tag": "UMSETZUNG",
94
  "color": "#b45309",
95
  "role_hint": (
@@ -224,11 +226,12 @@ class LLMService:
224
  api_key=os.getenv("HF_TOKEN"),
225
  )
226
 
227
- def ask(self, model_id, system_prompt, user_input):
228
  messages = [
229
  {"role": "system", "content": system_prompt},
230
  {"role": "user", "content": user_input},
231
  ]
 
232
  try:
233
  response = self.client.chat.completions.create(
234
  model=model_id,
@@ -236,6 +239,7 @@ class LLMService:
236
  max_tokens=4000,
237
  temperature=0.4,
238
  stream=False,
 
239
  )
240
  return response.choices[0].message.content or ""
241
  except Exception as e:
@@ -274,6 +278,7 @@ class PlenumOrchestrator:
274
  MODERATOR_MODEL,
275
  self.pm.task_detection_sys(),
276
  self.pm.task_detection_user(user_prompt),
 
277
  )
278
  try:
279
  clean = raw.strip().removeprefix("```json").removeprefix("```").removesuffix("```").strip()
@@ -317,6 +322,7 @@ class PlenumOrchestrator:
317
  MODERATOR_MODEL,
318
  self.pm.moderator_kickoff_sys(task_profile),
319
  self.pm.moderator_kickoff_user(user_prompt, task_info),
 
320
  )
321
  history.append({"role": "assistant", "content": self.ui.message("🎤 Moderator", kickoff, "#FF5A4D")})
322
  yield history
@@ -335,6 +341,7 @@ class PlenumOrchestrator:
335
  MODERATOR_MODEL,
336
  self.pm.moderator_steering_sys(),
337
  self.pm.moderator_steering_user(current_draft, r),
 
338
  )
339
  history.append({
340
  "role": "assistant",
@@ -352,10 +359,17 @@ class PlenumOrchestrator:
352
  for idx, expert in enumerate(COUNCIL_MEMBERS):
353
  focus = task_profile["expert_focuses"][idx]
354
 
 
 
 
 
 
 
 
355
  sys_msg = self.pm.expert_sys(expert, task_profile, focus, r + 1)
356
  usr_msg = self.pm.expert_user(user_prompt, round_draft, steering_instruction if r > 0 else "", expert["tag"])
357
 
358
- answer = self.llm.ask(expert["model"], sys_msg, usr_msg)
359
 
360
  # Dieser Experte liefert den Entwurf für den Nächsten
361
  round_draft = answer
@@ -380,6 +394,7 @@ class PlenumOrchestrator:
380
  MODERATOR_MODEL,
381
  self.pm.final_sys(task_profile),
382
  self.pm.final_user(user_prompt, current_draft, task_info),
 
383
  )
384
  history.append({"role": "assistant", "content": final})
385
  yield history
 
7
  # 1. KONFIGURATION & AUFGABEN-PROFILE
8
  # ==========================================
9
 
10
+ MODERATOR_MODEL = "openai/gpt-oss-120b"
11
+ MODERATOR_PROVIDER = "groq" # 435 tok/s — wird oft aufgerufen, Geschwindigkeit summiert sich
12
 
13
  # Jedes Profil definiert, wie Experten denken und was am Ende rauskommt
14
  TASK_PROFILES = {
 
80
  },
81
  {
82
  "name": "🧐 Experte II",
83
+ "model": "deepseek-ai/DeepSeek-R1", # Reasoning-Modell — ideal für Kritik & Fehlersuche
84
  "tag": "KRITIK",
85
  "color": "#7c3aed",
86
  "role_hint": (
 
90
  },
91
  {
92
  "name": "🛠️ Experte III",
93
+ "model": "moonshotai/Kimi-K2.5", # andere Trainings-Lineage → echte Diversität im Council
94
+ "code_model": "Qwen/Qwen3-Coder-480B-A35B-Instruct", # Swap für CODE-Tasks
95
  "tag": "UMSETZUNG",
96
  "color": "#b45309",
97
  "role_hint": (
 
226
  api_key=os.getenv("HF_TOKEN"),
227
  )
228
 
229
+ def ask(self, model_id, system_prompt, user_input, provider=None):
230
  messages = [
231
  {"role": "system", "content": system_prompt},
232
  {"role": "user", "content": user_input},
233
  ]
234
+ extra_headers = {"x-provider": provider} if provider else {}
235
  try:
236
  response = self.client.chat.completions.create(
237
  model=model_id,
 
239
  max_tokens=4000,
240
  temperature=0.4,
241
  stream=False,
242
+ extra_headers=extra_headers,
243
  )
244
  return response.choices[0].message.content or ""
245
  except Exception as e:
 
278
  MODERATOR_MODEL,
279
  self.pm.task_detection_sys(),
280
  self.pm.task_detection_user(user_prompt),
281
+ provider=MODERATOR_PROVIDER,
282
  )
283
  try:
284
  clean = raw.strip().removeprefix("```json").removeprefix("```").removesuffix("```").strip()
 
322
  MODERATOR_MODEL,
323
  self.pm.moderator_kickoff_sys(task_profile),
324
  self.pm.moderator_kickoff_user(user_prompt, task_info),
325
+ provider=MODERATOR_PROVIDER,
326
  )
327
  history.append({"role": "assistant", "content": self.ui.message("🎤 Moderator", kickoff, "#FF5A4D")})
328
  yield history
 
341
  MODERATOR_MODEL,
342
  self.pm.moderator_steering_sys(),
343
  self.pm.moderator_steering_user(current_draft, r),
344
+ provider=MODERATOR_PROVIDER,
345
  )
346
  history.append({
347
  "role": "assistant",
 
359
  for idx, expert in enumerate(COUNCIL_MEMBERS):
360
  focus = task_profile["expert_focuses"][idx]
361
 
362
+ # Task-aware Model Swap: Experte III nutzt Coder-Modell bei CODE-Tasks
363
+ model_id = (
364
+ expert.get("code_model", expert["model"])
365
+ if task_type == "CODE" and expert["tag"] == "UMSETZUNG"
366
+ else expert["model"]
367
+ )
368
+
369
  sys_msg = self.pm.expert_sys(expert, task_profile, focus, r + 1)
370
  usr_msg = self.pm.expert_user(user_prompt, round_draft, steering_instruction if r > 0 else "", expert["tag"])
371
 
372
+ answer = self.llm.ask(model_id, sys_msg, usr_msg, provider=expert.get("provider"))
373
 
374
  # Dieser Experte liefert den Entwurf für den Nächsten
375
  round_draft = answer
 
394
  MODERATOR_MODEL,
395
  self.pm.final_sys(task_profile),
396
  self.pm.final_user(user_prompt, current_draft, task_info),
397
+ provider=MODERATOR_PROVIDER,
398
  )
399
  history.append({"role": "assistant", "content": final})
400
  yield history