|
43 | 43 | "outputs": [], |
44 | 44 | "source": [ |
45 | 45 | "import sys; sys.path.insert(0, \".\")\n", |
46 | | - "import dspy, pandas as pd, ipywidgets as widgets\n", |
| 46 | + "import dspy, pandas as pd\n", |
| 47 | + "from dspy_tasks.config import configure_dspy\n", |
47 | 48 | "from dspy_tasks.tasks import get_task\n", |
48 | 49 | "from dspy_tasks.actions import run_baseline, run_optimization\n", |
49 | 50 | "from dspy_tasks.visualize import *\n", |
50 | 51 | "\n", |
51 | | - "# Show the real ticket data\n", |
52 | | - "df = pd.read_csv(\"../csv/data.csv\", encoding=\"latin-1\")\n", |
53 | | - "print(f\"📊 Echte Ticket-Daten: {len(df)} Tickets\")\n", |
54 | | - "display(df[[\"Summary*\", \"Priority*\", \"Status*\", \"Assigned Group*+\"]].head(5))" |
| 52 | + "MODEL = \"github_copilot/gpt-5.1\"\n", |
| 53 | + "configure_dspy(MODEL)\n" |
55 | 54 | ] |
56 | 55 | }, |
57 | 56 | { |
|
192 | 191 | "metadata": {}, |
193 | 192 | "outputs": [], |
194 | 193 | "source": [ |
195 | | - "from dspy_tasks.config import get_available_models, get_default_model, configure_dspy\n", |
196 | | - "MODELS = get_available_models()\n", |
197 | | - "btn = run_button(\"Generic vs. Tuned\")\n", |
198 | | - "out = widgets.Output()\n", |
199 | | - "\n", |
200 | | - "def on_run(b):\n", |
201 | | - " with out:\n", |
202 | | - " out.clear_output()\n", |
203 | | - " print(f\"⏳ Running ticket routing: generic vs. domain-tuned on {MODEL}...\")\n", |
204 | | - "\n", |
205 | | - " result = run_optimization(\"ticket_routing\", \"BootstrapFewShot\", max_eval=10)\n", |
206 | | - "\n", |
207 | | - " display_improvement(result.baseline_score, result.optimized_score)\n", |
208 | | - " display_prompt_diff(result.prompt_before, result.prompt_after,\n", |
209 | | - " title=\"Generic Prompt vs. Domain-Tuned Prompt\")\n", |
210 | | - "\n", |
211 | | - " display_insight(\"Der Burggraben\",\n", |
212 | | - " f\"Ein generischer Prompt erreicht {result.baseline_score:.0%}. \"\n", |
213 | | - " f\"Getuned mit DEINEN Ticket-Daten: {result.optimized_score:.0%}. \"\n", |
214 | | - " \"Das Modell ist gemietet, deine Daten gehören dir. \"\n", |
215 | | - " \"Dieses Tuning ist DEIN Wettbewerbsvorteil — kein Konkurrent kann das kopieren.\")\n", |
216 | | - "\n", |
217 | | - "btn.on_click(on_run)\n", |
218 | | - "display(btn, out)" |
| 194 | + "print(f\"⏳ Ticket Routing: generisch vs. domain-getuned auf {MODEL}...\")\n", |
| 195 | + "\n", |
| 196 | + "result = run_optimization(\"ticket_routing\", \"BootstrapFewShot\", max_eval=10)\n", |
| 197 | + "\n", |
| 198 | + "display_improvement(result.baseline_score, result.optimized_score)\n", |
| 199 | + "display_prompt_diff(result.prompt_before, result.prompt_after)\n", |
| 200 | + "\n", |
| 201 | + "display_insight(\"Der Burggraben\",\n", |
| 202 | + " f\"Generischer Prompt: {result.baseline_score:.0%}. \"\n", |
| 203 | + " f\"Getuned mit DEINEN Daten: {result.optimized_score:.0%}. \"\n", |
| 204 | + " \"Dieses Domain-Wissen ist DEIN Wettbewerbsvorteil.\")\n" |
219 | 205 | ] |
220 | 206 | }, |
221 | 207 | { |
|
244 | 230 | "metadata": {}, |
245 | 231 | "outputs": [], |
246 | 232 | "source": [ |
247 | | - "compare_btn = run_button(\"Compare Models on Domain Tasks\")\n", |
248 | | - "compare_out = widgets.Output()\n", |
249 | | - "\n", |
250 | | - "def on_compare(b):\n", |
251 | | - " with compare_out:\n", |
252 | | - " compare_out.clear_output()\n", |
253 | | - " result = compare_models(\"ticket_routing\", MODELS, max_eval=8)\n", |
254 | | - "\n", |
255 | | - " model_scores = {}\n", |
256 | | - " for m in MODELS:\n", |
257 | | - " short = m.split(\"/\")[-1]\n", |
258 | | - " model_scores[short] = {\n", |
259 | | - " \"baseline\": result.baseline_scores[m],\n", |
260 | | - " \"optimized\": result.optimized_scores[m],\n", |
261 | | - " }\n", |
262 | | - " fig = bar_comparison(\"Ticket Routing: Model Comparison\", model_scores)\n", |
263 | | - " fig.show()\n", |
264 | | - "\n", |
265 | | - " # Check if small model + tuning beats big model\n", |
266 | | - " if len(MODELS) >= 2:\n", |
267 | | - " small_opt = result.optimized_scores.get(MODELS[1], 0)\n", |
268 | | - " big_base = result.baseline_scores.get(MODELS[0], 0)\n", |
269 | | - " if small_opt > big_base:\n", |
270 | | - " display_insight(\"💰 Der Kosten-Insight\",\n", |
271 | | - " f\"{MODELS[1].split('/')[-1]} optimiert ({small_opt:.0%}) schlägt \"\n", |
272 | | - " f\"{MODELS[0].split('/')[-1]} unoptimiert ({big_base:.0%})! \"\n", |
273 | | - " \"Ein getuntes kleines Modell schlägt ein ungetuntes grosses — und kostet 10x weniger.\")\n", |
274 | | - "\n", |
275 | | - "compare_btn.on_click(on_compare)\n", |
276 | | - "display(compare_btn, compare_out)" |
| 233 | + "# Baseline vs. Optimiert auf dem aktuellen Modell\n", |
| 234 | + "print(f\"📊 Ergebnisse auf {MODEL}:\")\n", |
| 235 | + "print(f\" Baseline: {result.baseline_score:.0%}\")\n", |
| 236 | + "print(f\" Optimiert: {result.optimized_score:.0%}\")\n", |
| 237 | + "print(f\" Verbesserung: +{result.improvement:.0%}\")\n", |
| 238 | + "\n", |
| 239 | + "scores = {\n", |
| 240 | + " MODEL.split('/')[-1]: {\n", |
| 241 | + " \"baseline\": result.baseline_score,\n", |
| 242 | + " \"optimized\": result.optimized_score,\n", |
| 243 | + " }\n", |
| 244 | + "}\n", |
| 245 | + "fig = bar_comparison(\"Ticket Routing: Baseline vs. Optimiert\", scores)\n", |
| 246 | + "fig.show()\n" |
277 | 247 | ] |
278 | 248 | }, |
279 | 249 | { |
|
289 | 259 | "metadata": {}, |
290 | 260 | "outputs": [], |
291 | 261 | "source": [ |
292 | | - "task_dd = widgets.Dropdown(\n", |
293 | | - " options=[(t.name, t.id) for t in [get_task(\"comparative_analysis\"), get_task(\"instruction_constraints\")]],\n", |
294 | | - " description=\"Task:\")\n", |
295 | | - "run_btn = run_button(\"Run & Optimize\")\n", |
296 | | - "run_out = widgets.Output()\n", |
297 | | - "\n", |
298 | | - "def on_run_extra(b):\n", |
299 | | - " with run_out:\n", |
300 | | - " run_out.clear_output()\n", |
301 | | - " result = run_optimization(task_dd.value, max_eval=8)\n", |
302 | | - " display_improvement(result.baseline_score, result.optimized_score)\n", |
303 | | - " display_results_table(result.individual_scores if hasattr(result, 'individual_scores') else [])\n", |
304 | | - "\n", |
305 | | - "run_btn.on_click(on_run_extra)\n", |
306 | | - "display(widgets.HBox([task_dd, run_btn]), run_out)" |
| 262 | + "# Weitere Aufgaben zum Ausprobieren:\n", |
| 263 | + "print(\"Verfügbare Tasks:\")\n", |
| 264 | + "for tid in [\"comparative_analysis\", \"instruction_constraints\"]:\n", |
| 265 | + " t = get_task(tid)\n", |
| 266 | + " print(f\" • {tid}: {t.name}\")\n", |
| 267 | + "\n", |
| 268 | + "# Wähle einen Task (ändere den String):\n", |
| 269 | + "TASK = \"comparative_analysis\"\n", |
| 270 | + "\n", |
| 271 | + "print(f\"\\n⏳ Optimiere {TASK}...\")\n", |
| 272 | + "result = run_optimization(TASK, max_eval=8)\n", |
| 273 | + "display_improvement(result.baseline_score, result.optimized_score)\n" |
307 | 274 | ] |
308 | 275 | }, |
309 | 276 | { |
|
0 commit comments