agno 2.0.8__py3-none-any.whl → 2.0.10__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. agno/agent/agent.py +13 -8
  2. agno/db/base.py +14 -0
  3. agno/db/dynamo/dynamo.py +107 -27
  4. agno/db/firestore/firestore.py +109 -33
  5. agno/db/gcs_json/gcs_json_db.py +100 -20
  6. agno/db/in_memory/in_memory_db.py +95 -20
  7. agno/db/json/json_db.py +101 -21
  8. agno/db/migrations/v1_to_v2.py +181 -35
  9. agno/db/mongo/mongo.py +251 -26
  10. agno/db/mysql/mysql.py +307 -6
  11. agno/db/postgres/postgres.py +279 -33
  12. agno/db/redis/redis.py +99 -22
  13. agno/db/singlestore/singlestore.py +319 -38
  14. agno/db/sqlite/sqlite.py +339 -23
  15. agno/models/anthropic/claude.py +0 -20
  16. agno/models/aws/claude.py +1 -1
  17. agno/models/huggingface/huggingface.py +2 -1
  18. agno/models/ollama/chat.py +28 -2
  19. agno/models/openai/chat.py +7 -0
  20. agno/models/openai/responses.py +8 -8
  21. agno/os/interfaces/base.py +2 -0
  22. agno/os/interfaces/slack/router.py +50 -10
  23. agno/os/interfaces/slack/slack.py +6 -4
  24. agno/os/interfaces/whatsapp/router.py +7 -4
  25. agno/os/router.py +18 -0
  26. agno/os/utils.py +2 -2
  27. agno/reasoning/azure_ai_foundry.py +2 -2
  28. agno/reasoning/deepseek.py +2 -2
  29. agno/reasoning/groq.py +2 -2
  30. agno/reasoning/ollama.py +2 -2
  31. agno/reasoning/openai.py +2 -2
  32. agno/run/base.py +15 -2
  33. agno/team/team.py +10 -12
  34. agno/tools/mcp_toolbox.py +284 -0
  35. agno/tools/scrapegraph.py +58 -31
  36. agno/tools/whatsapp.py +1 -1
  37. agno/utils/models/claude.py +2 -2
  38. agno/utils/print_response/agent.py +2 -2
  39. agno/utils/print_response/team.py +6 -6
  40. agno/utils/reasoning.py +22 -1
  41. agno/utils/string.py +9 -0
  42. agno/workflow/workflow.py +11 -7
  43. {agno-2.0.8.dist-info → agno-2.0.10.dist-info}/METADATA +4 -1
  44. {agno-2.0.8.dist-info → agno-2.0.10.dist-info}/RECORD +47 -47
  45. agno/utils/models/aws_claude.py +0 -170
  46. {agno-2.0.8.dist-info → agno-2.0.10.dist-info}/WHEEL +0 -0
  47. {agno-2.0.8.dist-info → agno-2.0.10.dist-info}/licenses/LICENSE +0 -0
  48. {agno-2.0.8.dist-info → agno-2.0.10.dist-info}/top_level.txt +0 -0
@@ -56,7 +56,7 @@ class InMemoryDb(BaseDb):
56
56
 
57
57
  except Exception as e:
58
58
  log_error(f"Error deleting session: {e}")
59
- return False
59
+ raise e
60
60
 
61
61
  def delete_sessions(self, session_ids: List[str]) -> None:
62
62
  """Delete multiple sessions from in-memory storage.
@@ -73,6 +73,7 @@ class InMemoryDb(BaseDb):
73
73
 
74
74
  except Exception as e:
75
75
  log_error(f"Error deleting sessions: {e}")
76
+ raise e
76
77
 
77
78
  def get_session(
78
79
  self,
@@ -123,7 +124,7 @@ class InMemoryDb(BaseDb):
123
124
 
124
125
  traceback.print_exc()
125
126
  log_error(f"Exception reading session: {e}")
126
- return None
127
+ raise e
127
128
 
128
129
  def get_sessions(
129
130
  self,
@@ -215,7 +216,7 @@ class InMemoryDb(BaseDb):
215
216
 
216
217
  except Exception as e:
217
218
  log_error(f"Exception reading sessions: {e}")
218
- return [] if deserialize else ([], 0)
219
+ raise e
219
220
 
220
221
  def rename_session(
221
222
  self, session_id: str, session_type: SessionType, session_name: str, deserialize: Optional[bool] = True
@@ -246,7 +247,7 @@ class InMemoryDb(BaseDb):
246
247
 
247
248
  except Exception as e:
248
249
  log_error(f"Exception renaming session: {e}")
249
- return None
250
+ raise e
250
251
 
251
252
  def upsert_session(
252
253
  self, session: Session, deserialize: Optional[bool] = True
@@ -287,7 +288,7 @@ class InMemoryDb(BaseDb):
287
288
 
288
289
  except Exception as e:
289
290
  log_error(f"Exception upserting session: {e}")
290
- return None
291
+ raise e
291
292
 
292
293
  def _matches_session_key(self, existing_session: Dict[str, Any], session: Session) -> bool:
293
294
  """Check if existing session matches the key for the session type."""
@@ -299,6 +300,40 @@ class InMemoryDb(BaseDb):
299
300
  return existing_session.get("workflow_id") == session.workflow_id
300
301
  return False
301
302
 
303
+ def upsert_sessions(
304
+ self, sessions: List[Session], deserialize: Optional[bool] = True
305
+ ) -> List[Union[Session, Dict[str, Any]]]:
306
+ """
307
+ Bulk upsert multiple sessions for improved performance on large datasets.
308
+
309
+ Args:
310
+ sessions (List[Session]): List of sessions to upsert.
311
+ deserialize (Optional[bool]): Whether to deserialize the sessions. Defaults to True.
312
+
313
+ Returns:
314
+ List[Union[Session, Dict[str, Any]]]: List of upserted sessions.
315
+
316
+ Raises:
317
+ Exception: If an error occurs during bulk upsert.
318
+ """
319
+ if not sessions:
320
+ return []
321
+
322
+ try:
323
+ log_info(f"In-memory database: processing {len(sessions)} sessions with individual upsert operations")
324
+
325
+ results = []
326
+ for session in sessions:
327
+ if session is not None:
328
+ result = self.upsert_session(session, deserialize=deserialize)
329
+ if result is not None:
330
+ results.append(result)
331
+ return results
332
+
333
+ except Exception as e:
334
+ log_error(f"Exception during bulk session upsert: {e}")
335
+ return []
336
+
302
337
  # -- Memory methods --
303
338
  def delete_user_memory(self, memory_id: str):
304
339
  try:
@@ -312,6 +347,7 @@ class InMemoryDb(BaseDb):
312
347
 
313
348
  except Exception as e:
314
349
  log_error(f"Error deleting memory: {e}")
350
+ raise e
315
351
 
316
352
  def delete_user_memories(self, memory_ids: List[str]) -> None:
317
353
  """Delete multiple user memories from in-memory storage."""
@@ -321,6 +357,7 @@ class InMemoryDb(BaseDb):
321
357
 
322
358
  except Exception as e:
323
359
  log_error(f"Error deleting memories: {e}")
360
+ raise e
324
361
 
325
362
  def get_all_memory_topics(self) -> List[str]:
326
363
  try:
@@ -333,7 +370,7 @@ class InMemoryDb(BaseDb):
333
370
 
334
371
  except Exception as e:
335
372
  log_error(f"Exception reading from memory storage: {e}")
336
- return []
373
+ raise e
337
374
 
338
375
  def get_user_memory(
339
376
  self, memory_id: str, deserialize: Optional[bool] = True
@@ -349,7 +386,7 @@ class InMemoryDb(BaseDb):
349
386
 
350
387
  except Exception as e:
351
388
  log_error(f"Exception reading from memory storage: {e}")
352
- return None
389
+ raise e
353
390
 
354
391
  def get_user_memories(
355
392
  self,
@@ -404,7 +441,7 @@ class InMemoryDb(BaseDb):
404
441
 
405
442
  except Exception as e:
406
443
  log_error(f"Exception reading from memory storage: {e}")
407
- return [] if deserialize else ([], 0)
444
+ raise e
408
445
 
409
446
  def get_user_memory_stats(
410
447
  self, limit: Optional[int] = None, page: Optional[int] = None
@@ -439,7 +476,7 @@ class InMemoryDb(BaseDb):
439
476
 
440
477
  except Exception as e:
441
478
  log_error(f"Exception getting user memory stats: {e}")
442
- return [], 0
479
+ raise e
443
480
 
444
481
  def upsert_user_memory(
445
482
  self, memory: UserMemory, deserialize: Optional[bool] = True
@@ -468,7 +505,42 @@ class InMemoryDb(BaseDb):
468
505
 
469
506
  except Exception as e:
470
507
  log_warning(f"Exception upserting user memory: {e}")
471
- return None
508
+ raise e
509
+
510
+ def upsert_memories(
511
+ self, memories: List[UserMemory], deserialize: Optional[bool] = True
512
+ ) -> List[Union[UserMemory, Dict[str, Any]]]:
513
+ """
514
+ Bulk upsert multiple user memories for improved performance on large datasets.
515
+
516
+ Args:
517
+ memories (List[UserMemory]): List of memories to upsert.
518
+ deserialize (Optional[bool]): Whether to deserialize the memories. Defaults to True.
519
+
520
+ Returns:
521
+ List[Union[UserMemory, Dict[str, Any]]]: List of upserted memories.
522
+
523
+ Raises:
524
+ Exception: If an error occurs during bulk upsert.
525
+ """
526
+ if not memories:
527
+ return []
528
+
529
+ try:
530
+ log_info(f"In-memory database: processing {len(memories)} memories with individual upsert operations")
531
+ # For in-memory database, individual upserts are actually efficient
532
+ # since we're just manipulating Python lists and dictionaries
533
+ results = []
534
+ for memory in memories:
535
+ if memory is not None:
536
+ result = self.upsert_user_memory(memory, deserialize=deserialize)
537
+ if result is not None:
538
+ results.append(result)
539
+ return results
540
+
541
+ except Exception as e:
542
+ log_error(f"Exception during bulk memory upsert: {e}")
543
+ return []
472
544
 
473
545
  def clear_memories(self) -> None:
474
546
  """Delete all memories.
@@ -481,6 +553,7 @@ class InMemoryDb(BaseDb):
481
553
 
482
554
  except Exception as e:
483
555
  log_warning(f"Exception deleting all memories: {e}")
556
+ raise e
484
557
 
485
558
  # -- Metrics methods --
486
559
  def calculate_metrics(self) -> Optional[list[dict]]:
@@ -544,7 +617,7 @@ class InMemoryDb(BaseDb):
544
617
 
545
618
  except Exception as e:
546
619
  log_warning(f"Exception refreshing metrics: {e}")
547
- return None
620
+ raise e
548
621
 
549
622
  def _get_metrics_calculation_starting_date(self, metrics: List[Dict[str, Any]]) -> Optional[date]:
550
623
  """Get the first date for which metrics calculation is needed."""
@@ -595,7 +668,7 @@ class InMemoryDb(BaseDb):
595
668
 
596
669
  except Exception as e:
597
670
  log_error(f"Exception reading sessions for metrics: {e}")
598
- return []
671
+ raise e
599
672
 
600
673
  def get_metrics(
601
674
  self,
@@ -625,7 +698,7 @@ class InMemoryDb(BaseDb):
625
698
 
626
699
  except Exception as e:
627
700
  log_error(f"Exception getting metrics: {e}")
628
- return [], None
701
+ raise e
629
702
 
630
703
  # -- Knowledge methods --
631
704
 
@@ -643,6 +716,7 @@ class InMemoryDb(BaseDb):
643
716
 
644
717
  except Exception as e:
645
718
  log_error(f"Error deleting knowledge content: {e}")
719
+ raise e
646
720
 
647
721
  def get_knowledge_content(self, id: str) -> Optional[KnowledgeRow]:
648
722
  """Get a knowledge row from in-memory storage.
@@ -665,7 +739,7 @@ class InMemoryDb(BaseDb):
665
739
 
666
740
  except Exception as e:
667
741
  log_error(f"Error getting knowledge content: {e}")
668
- return None
742
+ raise e
669
743
 
670
744
  def get_knowledge_contents(
671
745
  self,
@@ -707,7 +781,7 @@ class InMemoryDb(BaseDb):
707
781
 
708
782
  except Exception as e:
709
783
  log_error(f"Error getting knowledge contents: {e}")
710
- return [], 0
784
+ raise e
711
785
 
712
786
  def upsert_knowledge_content(self, knowledge_row: KnowledgeRow):
713
787
  """Upsert knowledge content.
@@ -739,7 +813,7 @@ class InMemoryDb(BaseDb):
739
813
 
740
814
  except Exception as e:
741
815
  log_error(f"Error upserting knowledge row: {e}")
742
- return None
816
+ raise e
743
817
 
744
818
  # -- Eval methods --
745
819
 
@@ -759,7 +833,7 @@ class InMemoryDb(BaseDb):
759
833
 
760
834
  except Exception as e:
761
835
  log_error(f"Error creating eval run: {e}")
762
- return None
836
+ raise e
763
837
 
764
838
  def delete_eval_runs(self, eval_run_ids: List[str]) -> None:
765
839
  """Delete multiple eval runs from in-memory storage."""
@@ -775,6 +849,7 @@ class InMemoryDb(BaseDb):
775
849
 
776
850
  except Exception as e:
777
851
  log_error(f"Error deleting eval runs {eval_run_ids}: {e}")
852
+ raise e
778
853
 
779
854
  def get_eval_run(
780
855
  self, eval_run_id: str, deserialize: Optional[bool] = True
@@ -791,7 +866,7 @@ class InMemoryDb(BaseDb):
791
866
 
792
867
  except Exception as e:
793
868
  log_error(f"Exception getting eval run {eval_run_id}: {e}")
794
- return None
869
+ raise e
795
870
 
796
871
  def get_eval_runs(
797
872
  self,
@@ -855,7 +930,7 @@ class InMemoryDb(BaseDb):
855
930
 
856
931
  except Exception as e:
857
932
  log_error(f"Exception getting eval runs: {e}")
858
- return [] if deserialize else ([], 0)
933
+ raise e
859
934
 
860
935
  def rename_eval_run(
861
936
  self, eval_run_id: str, name: str, deserialize: Optional[bool] = True
@@ -879,4 +954,4 @@ class InMemoryDb(BaseDb):
879
954
 
880
955
  except Exception as e:
881
956
  log_error(f"Error renaming eval run {eval_run_id}: {e}")
882
- return None
957
+ raise e
agno/db/json/json_db.py CHANGED
@@ -113,7 +113,7 @@ class JsonDb(BaseDb):
113
113
 
114
114
  except Exception as e:
115
115
  log_error(f"Error writing to the {file_path} JSON file: {e}")
116
- return
116
+ raise e
117
117
 
118
118
  # -- Session methods --
119
119
 
@@ -145,7 +145,7 @@ class JsonDb(BaseDb):
145
145
 
146
146
  except Exception as e:
147
147
  log_error(f"Error deleting session: {e}")
148
- return False
148
+ raise e
149
149
 
150
150
  def delete_sessions(self, session_ids: List[str]) -> None:
151
151
  """Delete multiple sessions from the JSON file.
@@ -164,6 +164,7 @@ class JsonDb(BaseDb):
164
164
 
165
165
  except Exception as e:
166
166
  log_error(f"Error deleting sessions: {e}")
167
+ raise e
167
168
 
168
169
  def get_session(
169
170
  self,
@@ -217,7 +218,7 @@ class JsonDb(BaseDb):
217
218
 
218
219
  except Exception as e:
219
220
  log_error(f"Exception reading from session file: {e}")
220
- return None
221
+ raise e
221
222
 
222
223
  def get_sessions(
223
224
  self,
@@ -312,7 +313,7 @@ class JsonDb(BaseDb):
312
313
 
313
314
  except Exception as e:
314
315
  log_error(f"Exception reading from session file: {e}")
315
- return [] if deserialize else ([], 0)
316
+ raise e
316
317
 
317
318
  def rename_session(
318
319
  self, session_id: str, session_type: SessionType, session_name: str, deserialize: Optional[bool] = True
@@ -349,7 +350,7 @@ class JsonDb(BaseDb):
349
350
 
350
351
  except Exception as e:
351
352
  log_error(f"Exception renaming session: {e}")
352
- return None
353
+ raise e
353
354
 
354
355
  def upsert_session(
355
356
  self, session: Session, deserialize: Optional[bool] = True
@@ -394,7 +395,44 @@ class JsonDb(BaseDb):
394
395
 
395
396
  except Exception as e:
396
397
  log_error(f"Exception upserting session: {e}")
397
- return None
398
+ raise e
399
+
400
+ def upsert_sessions(
401
+ self, sessions: List[Session], deserialize: Optional[bool] = True
402
+ ) -> List[Union[Session, Dict[str, Any]]]:
403
+ """
404
+ Bulk upsert multiple sessions for improved performance on large datasets.
405
+
406
+ Args:
407
+ sessions (List[Session]): List of sessions to upsert.
408
+ deserialize (Optional[bool]): Whether to deserialize the sessions. Defaults to True.
409
+
410
+ Returns:
411
+ List[Union[Session, Dict[str, Any]]]: List of upserted sessions.
412
+
413
+ Raises:
414
+ Exception: If an error occurs during bulk upsert.
415
+ """
416
+ if not sessions:
417
+ return []
418
+
419
+ try:
420
+ log_info(
421
+ f"JsonDb doesn't support efficient bulk operations, falling back to individual upserts for {len(sessions)} sessions"
422
+ )
423
+
424
+ # Fall back to individual upserts
425
+ results = []
426
+ for session in sessions:
427
+ if session is not None:
428
+ result = self.upsert_session(session, deserialize=deserialize)
429
+ if result is not None:
430
+ results.append(result)
431
+ return results
432
+
433
+ except Exception as e:
434
+ log_error(f"Exception during bulk session upsert: {e}")
435
+ return []
398
436
 
399
437
  def _matches_session_key(self, existing_session: Dict[str, Any], session: Session) -> bool:
400
438
  """Check if existing session matches the key for the session type."""
@@ -422,6 +460,7 @@ class JsonDb(BaseDb):
422
460
 
423
461
  except Exception as e:
424
462
  log_error(f"Error deleting memory: {e}")
463
+ raise e
425
464
 
426
465
  def delete_user_memories(self, memory_ids: List[str]) -> None:
427
466
  """Delete multiple user memories from the JSON file."""
@@ -434,6 +473,7 @@ class JsonDb(BaseDb):
434
473
 
435
474
  except Exception as e:
436
475
  log_error(f"Error deleting memories: {e}")
476
+ raise e
437
477
 
438
478
  def get_all_memory_topics(self) -> List[str]:
439
479
  """Get all memory topics from the JSON file."""
@@ -449,7 +489,7 @@ class JsonDb(BaseDb):
449
489
 
450
490
  except Exception as e:
451
491
  log_error(f"Exception reading from memory file: {e}")
452
- return []
492
+ raise e
453
493
 
454
494
  def get_user_memory(
455
495
  self, memory_id: str, deserialize: Optional[bool] = True
@@ -468,7 +508,7 @@ class JsonDb(BaseDb):
468
508
 
469
509
  except Exception as e:
470
510
  log_error(f"Exception reading from memory file: {e}")
471
- return None
511
+ raise e
472
512
 
473
513
  def get_user_memories(
474
514
  self,
@@ -526,7 +566,7 @@ class JsonDb(BaseDb):
526
566
 
527
567
  except Exception as e:
528
568
  log_error(f"Exception reading from memory file: {e}")
529
- return [] if deserialize else ([], 0)
569
+ raise e
530
570
 
531
571
  def get_user_memory_stats(
532
572
  self, limit: Optional[int] = None, page: Optional[int] = None
@@ -562,7 +602,7 @@ class JsonDb(BaseDb):
562
602
 
563
603
  except Exception as e:
564
604
  log_error(f"Exception getting user memory stats: {e}")
565
- return [], 0
605
+ raise e
566
606
 
567
607
  def upsert_user_memory(
568
608
  self, memory: UserMemory, deserialize: Optional[bool] = True
@@ -596,7 +636,43 @@ class JsonDb(BaseDb):
596
636
 
597
637
  except Exception as e:
598
638
  log_warning(f"Exception upserting user memory: {e}")
599
- return None
639
+ raise e
640
+
641
+ def upsert_memories(
642
+ self, memories: List[UserMemory], deserialize: Optional[bool] = True
643
+ ) -> List[Union[UserMemory, Dict[str, Any]]]:
644
+ """
645
+ Bulk upsert multiple user memories for improved performance on large datasets.
646
+
647
+ Args:
648
+ memories (List[UserMemory]): List of memories to upsert.
649
+ deserialize (Optional[bool]): Whether to deserialize the memories. Defaults to True.
650
+
651
+ Returns:
652
+ List[Union[UserMemory, Dict[str, Any]]]: List of upserted memories.
653
+
654
+ Raises:
655
+ Exception: If an error occurs during bulk upsert.
656
+ """
657
+ if not memories:
658
+ return []
659
+
660
+ try:
661
+ log_info(
662
+ f"JsonDb doesn't support efficient bulk operations, falling back to individual upserts for {len(memories)} memories"
663
+ )
664
+ # Fall back to individual upserts
665
+ results = []
666
+ for memory in memories:
667
+ if memory is not None:
668
+ result = self.upsert_user_memory(memory, deserialize=deserialize)
669
+ if result is not None:
670
+ results.append(result)
671
+ return results
672
+
673
+ except Exception as e:
674
+ log_error(f"Exception during bulk memory upsert: {e}")
675
+ return []
600
676
 
601
677
  def clear_memories(self) -> None:
602
678
  """Delete all memories from the database.
@@ -610,6 +686,7 @@ class JsonDb(BaseDb):
610
686
 
611
687
  except Exception as e:
612
688
  log_warning(f"Exception deleting all memories: {e}")
689
+ raise e
613
690
 
614
691
  # -- Metrics methods --
615
692
  def calculate_metrics(self) -> Optional[list[dict]]:
@@ -678,7 +755,7 @@ class JsonDb(BaseDb):
678
755
 
679
756
  except Exception as e:
680
757
  log_warning(f"Exception refreshing metrics: {e}")
681
- return None
758
+ raise e
682
759
 
683
760
  def _get_metrics_calculation_starting_date(self, metrics: List[Dict[str, Any]]) -> Optional[date]:
684
761
  """Get the first date for which metrics calculation is needed."""
@@ -733,7 +810,7 @@ class JsonDb(BaseDb):
733
810
 
734
811
  except Exception as e:
735
812
  log_error(f"Exception reading sessions for metrics: {e}")
736
- return []
813
+ raise e
737
814
 
738
815
  def get_metrics(
739
816
  self,
@@ -765,7 +842,7 @@ class JsonDb(BaseDb):
765
842
 
766
843
  except Exception as e:
767
844
  log_error(f"Exception getting metrics: {e}")
768
- return [], None
845
+ raise e
769
846
 
770
847
  # -- Knowledge methods --
771
848
 
@@ -785,6 +862,7 @@ class JsonDb(BaseDb):
785
862
 
786
863
  except Exception as e:
787
864
  log_error(f"Error deleting knowledge content: {e}")
865
+ raise e
788
866
 
789
867
  def get_knowledge_content(self, id: str) -> Optional[KnowledgeRow]:
790
868
  """Get a knowledge row from the database.
@@ -809,7 +887,7 @@ class JsonDb(BaseDb):
809
887
 
810
888
  except Exception as e:
811
889
  log_error(f"Error getting knowledge content: {e}")
812
- return None
890
+ raise e
813
891
 
814
892
  def get_knowledge_contents(
815
893
  self,
@@ -851,7 +929,7 @@ class JsonDb(BaseDb):
851
929
 
852
930
  except Exception as e:
853
931
  log_error(f"Error getting knowledge contents: {e}")
854
- return [], 0
932
+ raise e
855
933
 
856
934
  def upsert_knowledge_content(self, knowledge_row: KnowledgeRow):
857
935
  """Upsert knowledge content in the database.
@@ -886,7 +964,7 @@ class JsonDb(BaseDb):
886
964
 
887
965
  except Exception as e:
888
966
  log_error(f"Error upserting knowledge row: {e}")
889
- return None
967
+ raise e
890
968
 
891
969
  # -- Eval methods --
892
970
 
@@ -909,7 +987,7 @@ class JsonDb(BaseDb):
909
987
 
910
988
  except Exception as e:
911
989
  log_error(f"Error creating eval run: {e}")
912
- return None
990
+ raise e
913
991
 
914
992
  def delete_eval_run(self, eval_run_id: str) -> None:
915
993
  """Delete an eval run from the JSON file."""
@@ -926,6 +1004,7 @@ class JsonDb(BaseDb):
926
1004
 
927
1005
  except Exception as e:
928
1006
  log_error(f"Error deleting eval run {eval_run_id}: {e}")
1007
+ raise e
929
1008
 
930
1009
  def delete_eval_runs(self, eval_run_ids: List[str]) -> None:
931
1010
  """Delete multiple eval runs from the JSON file."""
@@ -943,6 +1022,7 @@ class JsonDb(BaseDb):
943
1022
 
944
1023
  except Exception as e:
945
1024
  log_error(f"Error deleting eval runs {eval_run_ids}: {e}")
1025
+ raise e
946
1026
 
947
1027
  def get_eval_run(
948
1028
  self, eval_run_id: str, deserialize: Optional[bool] = True
@@ -961,7 +1041,7 @@ class JsonDb(BaseDb):
961
1041
 
962
1042
  except Exception as e:
963
1043
  log_error(f"Exception getting eval run {eval_run_id}: {e}")
964
- return None
1044
+ raise e
965
1045
 
966
1046
  def get_eval_runs(
967
1047
  self,
@@ -1027,7 +1107,7 @@ class JsonDb(BaseDb):
1027
1107
 
1028
1108
  except Exception as e:
1029
1109
  log_error(f"Exception getting eval runs: {e}")
1030
- return [] if deserialize else ([], 0)
1110
+ raise e
1031
1111
 
1032
1112
  def rename_eval_run(
1033
1113
  self, eval_run_id: str, name: str, deserialize: Optional[bool] = True
@@ -1054,4 +1134,4 @@ class JsonDb(BaseDb):
1054
1134
 
1055
1135
  except Exception as e:
1056
1136
  log_error(f"Error renaming eval run {eval_run_id}: {e}")
1057
- return None
1137
+ raise e