|
378 | 378 | " if name_prefix:\n", |
379 | 379 | " name = f\"{name_prefix}-{name}\"\n", |
380 | 380 | "\n", |
381 | | - " # Create tasks for all items\n", |
382 | | - " tasks = []\n", |
383 | | - " for item in dataset:\n", |
384 | | - " tasks.append(wrapped_experiment(item))\n", |
385 | | - "\n", |
386 | | - " # Use as_completed with tqdm for progress tracking\n", |
387 | | - " results = []\n", |
388 | | - " for future in tqdm(asyncio.as_completed(tasks), total=len(tasks)):\n", |
389 | | - " result = await future\n", |
390 | | - " # Add each result to experiment view as it completes\n", |
391 | | - " if result is not None:\n", |
392 | | - " results.append(result)\n", |
393 | | - "\n", |
394 | | - " # upload results to experiment view\n", |
395 | | - " experiment_view = self.create_experiment(name=name, model=experiment_model)\n", |
396 | | - " for result in results:\n", |
397 | | - " experiment_view.append(result)\n", |
398 | | - "\n", |
399 | | - " return experiment_view\n", |
| 381 | + " experiment_view = None\n", |
| 382 | + " try:\n", |
| 383 | + " # Create the experiment view upfront\n", |
| 384 | + " experiment_view = self.create_experiment(name=name, model=experiment_model)\n", |
| 385 | + " \n", |
| 386 | + " # Create tasks for all items\n", |
| 387 | + " tasks = []\n", |
| 388 | + " for item in dataset:\n", |
| 389 | + " tasks.append(wrapped_experiment(item))\n", |
| 390 | + "\n", |
| 391 | + " # Calculate total operations (processing + appending)\n", |
| 392 | + " total_operations = len(tasks) * 2 # Each item requires processing and appending\n", |
| 393 | + " \n", |
| 394 | + " # Use tqdm for combined progress tracking\n", |
| 395 | + " results = []\n", |
| 396 | + " progress_bar = tqdm(total=total_operations, desc=\"Running experiment\")\n", |
| 397 | + " \n", |
| 398 | + " # Process all items\n", |
| 399 | + " for future in asyncio.as_completed(tasks):\n", |
| 400 | + " result = await future\n", |
| 401 | + " if result is not None:\n", |
| 402 | + " results.append(result)\n", |
| 403 | + " progress_bar.update(1) # Update for task completion\n", |
| 404 | + " \n", |
| 405 | + " # Append results to experiment view\n", |
| 406 | + " for result in results:\n", |
| 407 | + " experiment_view.append(result)\n", |
| 408 | + " progress_bar.update(1) # Update for append operation\n", |
| 409 | + " \n", |
| 410 | + " progress_bar.close()\n", |
| 411 | + " return experiment_view\n", |
| 412 | + " \n", |
| 413 | + " except Exception as e:\n", |
| 414 | + " # Clean up the experiment if there was an error and it was created\n", |
| 415 | + " if experiment_view is not None:\n", |
| 416 | + " try:\n", |
| 417 | + " # Delete the experiment (you might need to implement this method)\n", |
| 418 | + " sync_version = async_to_sync(self._ragas_api_client.delete_experiment)\n", |
| 419 | + " sync_version(project_id=self.project_id, experiment_id=experiment_view.experiment_id)\n", |
| 420 | + " except Exception as cleanup_error:\n", |
| 421 | + " print(f\"Failed to clean up experiment after error: {cleanup_error}\")\n", |
| 422 | + " \n", |
| 423 | + " # Re-raise the original exception\n", |
| 424 | + " raise e\n", |
400 | 425 | "\n", |
401 | 426 | " wrapped_experiment.__setattr__(\"run_async\", run_async)\n", |
402 | 427 | " return t.cast(ExperimentProtocol, wrapped_experiment)\n", |
|
431 | 456 | "# create a test experiment function\n", |
432 | 457 | "@p.experiment(TextExperimentModel)\n", |
433 | 458 | "async def test_experiment(item: TestModel):\n", |
434 | | - " print(item)\n", |
435 | 459 | " return TextExperimentModel(**item.model_dump(), response=\"test response\", is_correct=\"yes\")\n" |
436 | 460 | ] |
437 | 461 | }, |
|
444 | 468 | "name": "stderr", |
445 | 469 | "output_type": "stream", |
446 | 470 | "text": [ |
447 | | - "100%|██████████| 3/3 [00:00<00:00, 7752.87it/s]\n" |
448 | | - ] |
449 | | - }, |
450 | | - { |
451 | | - "name": "stdout", |
452 | | - "output_type": "stream", |
453 | | - "text": [ |
454 | | - "name='test item 2' description='test item 2 description' price=200.0\n", |
455 | | - "name='test item 1' description='test item 1 description' price=100.0\n", |
456 | | - "name='test item 3' description='test item 3 description' price=300.0\n" |
| 471 | + "Running experiment: 100%|██████████| 6/6 [00:01<00:00, 3.84it/s]\n" |
457 | 472 | ] |
458 | 473 | }, |
459 | 474 | { |
460 | 475 | "data": { |
461 | 476 | "text/plain": [ |
462 | | - "Experiment(name=keen_backus, model=TextExperimentModel)" |
| 477 | + "Experiment(name=gallant_torvalds, model=TextExperimentModel)" |
463 | 478 | ] |
464 | 479 | }, |
465 | 480 | "execution_count": null, |
|
0 commit comments