agno 2.3.8__py3-none-any.whl → 2.3.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 (66) hide show
  1. agno/agent/agent.py +134 -94
  2. agno/db/mysql/__init__.py +2 -1
  3. agno/db/mysql/async_mysql.py +2888 -0
  4. agno/db/mysql/mysql.py +17 -8
  5. agno/db/mysql/utils.py +139 -6
  6. agno/db/postgres/async_postgres.py +10 -5
  7. agno/db/postgres/postgres.py +7 -2
  8. agno/db/schemas/evals.py +1 -0
  9. agno/db/singlestore/singlestore.py +5 -1
  10. agno/db/sqlite/async_sqlite.py +3 -3
  11. agno/eval/__init__.py +10 -0
  12. agno/eval/accuracy.py +11 -8
  13. agno/eval/agent_as_judge.py +861 -0
  14. agno/eval/base.py +29 -0
  15. agno/eval/utils.py +2 -1
  16. agno/exceptions.py +7 -0
  17. agno/knowledge/embedder/openai.py +8 -8
  18. agno/knowledge/knowledge.py +1142 -176
  19. agno/media.py +22 -6
  20. agno/models/aws/claude.py +8 -7
  21. agno/models/base.py +61 -2
  22. agno/models/deepseek/deepseek.py +67 -0
  23. agno/models/google/gemini.py +134 -51
  24. agno/models/google/utils.py +22 -0
  25. agno/models/message.py +5 -0
  26. agno/models/openai/chat.py +4 -0
  27. agno/os/app.py +64 -74
  28. agno/os/interfaces/a2a/router.py +3 -4
  29. agno/os/interfaces/agui/router.py +2 -0
  30. agno/os/router.py +3 -1607
  31. agno/os/routers/agents/__init__.py +3 -0
  32. agno/os/routers/agents/router.py +581 -0
  33. agno/os/routers/agents/schema.py +261 -0
  34. agno/os/routers/evals/evals.py +26 -6
  35. agno/os/routers/evals/schemas.py +34 -2
  36. agno/os/routers/evals/utils.py +77 -18
  37. agno/os/routers/knowledge/knowledge.py +1 -1
  38. agno/os/routers/teams/__init__.py +3 -0
  39. agno/os/routers/teams/router.py +496 -0
  40. agno/os/routers/teams/schema.py +257 -0
  41. agno/os/routers/workflows/__init__.py +3 -0
  42. agno/os/routers/workflows/router.py +545 -0
  43. agno/os/routers/workflows/schema.py +75 -0
  44. agno/os/schema.py +1 -559
  45. agno/os/utils.py +139 -2
  46. agno/team/team.py +87 -24
  47. agno/tools/file_generation.py +12 -6
  48. agno/tools/firecrawl.py +15 -7
  49. agno/tools/function.py +37 -23
  50. agno/tools/shopify.py +1519 -0
  51. agno/tools/spotify.py +2 -5
  52. agno/utils/hooks.py +64 -5
  53. agno/utils/http.py +2 -2
  54. agno/utils/media.py +11 -1
  55. agno/utils/print_response/agent.py +8 -0
  56. agno/utils/print_response/team.py +8 -0
  57. agno/vectordb/pgvector/pgvector.py +88 -51
  58. agno/workflow/parallel.py +5 -3
  59. agno/workflow/step.py +14 -2
  60. agno/workflow/types.py +38 -2
  61. agno/workflow/workflow.py +12 -4
  62. {agno-2.3.8.dist-info → agno-2.3.10.dist-info}/METADATA +7 -2
  63. {agno-2.3.8.dist-info → agno-2.3.10.dist-info}/RECORD +66 -52
  64. {agno-2.3.8.dist-info → agno-2.3.10.dist-info}/WHEEL +0 -0
  65. {agno-2.3.8.dist-info → agno-2.3.10.dist-info}/licenses/LICENSE +0 -0
  66. {agno-2.3.8.dist-info → agno-2.3.10.dist-info}/top_level.txt +0 -0
agno/agent/agent.py CHANGED
@@ -9,6 +9,7 @@ from inspect import iscoroutinefunction
9
9
  from os import getenv
10
10
  from textwrap import dedent
11
11
  from typing import (
12
+ TYPE_CHECKING,
12
13
  Any,
13
14
  AsyncIterator,
14
15
  Callable,
@@ -30,6 +31,9 @@ from uuid import uuid4
30
31
 
31
32
  from pydantic import BaseModel
32
33
 
34
+ if TYPE_CHECKING:
35
+ from agno.eval.base import BaseEval
36
+
33
37
  from agno.compression.manager import CompressionManager
34
38
  from agno.culture.manager import CultureManager
35
39
  from agno.db.base import AsyncBaseDb, BaseDb, SessionType, UserMemory
@@ -131,7 +135,13 @@ from agno.utils.events import (
131
135
  create_tool_call_started_event,
132
136
  handle_event,
133
137
  )
134
- from agno.utils.hooks import copy_args_for_background, filter_hook_args, normalize_hooks, should_run_hook_in_background
138
+ from agno.utils.hooks import (
139
+ copy_args_for_background,
140
+ filter_hook_args,
141
+ normalize_post_hooks,
142
+ normalize_pre_hooks,
143
+ should_run_hook_in_background,
144
+ )
135
145
  from agno.utils.knowledge import get_agentic_or_user_search_filters
136
146
  from agno.utils.log import (
137
147
  log_debug,
@@ -270,9 +280,9 @@ class Agent:
270
280
 
271
281
  # --- Agent Hooks ---
272
282
  # Functions called right after agent-session is loaded, before processing starts
273
- pre_hooks: Optional[List[Union[Callable[..., Any], BaseGuardrail]]] = None
283
+ pre_hooks: Optional[List[Union[Callable[..., Any], BaseGuardrail, "BaseEval"]]] = None
274
284
  # Functions called after output is generated but before the response is returned
275
- post_hooks: Optional[List[Union[Callable[..., Any], BaseGuardrail]]] = None
285
+ post_hooks: Optional[List[Union[Callable[..., Any], BaseGuardrail, "BaseEval"]]] = None
276
286
  # If True, run hooks as FastAPI background tasks (non-blocking). Set by AgentOS.
277
287
  _run_hooks_in_background: Optional[bool] = None
278
288
 
@@ -308,6 +318,8 @@ class Agent:
308
318
  system_message: Optional[Union[str, Callable, Message]] = None
309
319
  # Role for the system message
310
320
  system_message_role: str = "system"
321
+ # Provide the introduction as the first message from the Agent
322
+ introduction: Optional[str] = None
311
323
  # Set to False to skip context building
312
324
  build_context: bool = True
313
325
 
@@ -436,7 +448,6 @@ class Agent:
436
448
  model: Optional[Union[Model, str]] = None,
437
449
  name: Optional[str] = None,
438
450
  id: Optional[str] = None,
439
- introduction: Optional[str] = None,
440
451
  user_id: Optional[str] = None,
441
452
  session_id: Optional[str] = None,
442
453
  session_state: Optional[Dict[str, Any]] = None,
@@ -476,8 +487,8 @@ class Agent:
476
487
  tool_call_limit: Optional[int] = None,
477
488
  tool_choice: Optional[Union[str, Dict[str, Any]]] = None,
478
489
  tool_hooks: Optional[List[Callable]] = None,
479
- pre_hooks: Optional[List[Union[Callable[..., Any], BaseGuardrail]]] = None,
480
- post_hooks: Optional[List[Union[Callable[..., Any], BaseGuardrail]]] = None,
490
+ pre_hooks: Optional[List[Union[Callable[..., Any], BaseGuardrail, "BaseEval"]]] = None,
491
+ post_hooks: Optional[List[Union[Callable[..., Any], BaseGuardrail, "BaseEval"]]] = None,
481
492
  reasoning: bool = False,
482
493
  reasoning_model: Optional[Union[Model, str]] = None,
483
494
  reasoning_agent: Optional[Agent] = None,
@@ -490,6 +501,7 @@ class Agent:
490
501
  send_media_to_model: bool = True,
491
502
  system_message: Optional[Union[str, Callable, Message]] = None,
492
503
  system_message_role: str = "system",
504
+ introduction: Optional[str] = None,
493
505
  build_context: bool = True,
494
506
  description: Optional[str] = None,
495
507
  instructions: Optional[Union[str, List[str], Callable]] = None,
@@ -1559,6 +1571,7 @@ class Agent:
1559
1571
  session_id: Optional[str] = None,
1560
1572
  session_state: Optional[Dict[str, Any]] = None,
1561
1573
  run_context: Optional[RunContext] = None,
1574
+ run_id: Optional[str] = None,
1562
1575
  audio: Optional[Sequence[Audio]] = None,
1563
1576
  images: Optional[Sequence[Image]] = None,
1564
1577
  videos: Optional[Sequence[Video]] = None,
@@ -1586,6 +1599,7 @@ class Agent:
1586
1599
  session_id: Optional[str] = None,
1587
1600
  session_state: Optional[Dict[str, Any]] = None,
1588
1601
  run_context: Optional[RunContext] = None,
1602
+ run_id: Optional[str] = None,
1589
1603
  audio: Optional[Sequence[Audio]] = None,
1590
1604
  images: Optional[Sequence[Image]] = None,
1591
1605
  videos: Optional[Sequence[Video]] = None,
@@ -1614,6 +1628,7 @@ class Agent:
1614
1628
  session_id: Optional[str] = None,
1615
1629
  session_state: Optional[Dict[str, Any]] = None,
1616
1630
  run_context: Optional[RunContext] = None,
1631
+ run_id: Optional[str] = None,
1617
1632
  audio: Optional[Sequence[Audio]] = None,
1618
1633
  images: Optional[Sequence[Image]] = None,
1619
1634
  videos: Optional[Sequence[Video]] = None,
@@ -1636,8 +1651,8 @@ class Agent:
1636
1651
  "`run` method is not supported with an async database. Please use `arun` method instead."
1637
1652
  )
1638
1653
 
1639
- # Create a run_id for this specific run and register immediately for cancellation tracking
1640
- run_id = str(uuid4())
1654
+ # Set the id for the run and register it immediately for cancellation tracking
1655
+ run_id = run_id or str(uuid4())
1641
1656
  register_run(run_id)
1642
1657
 
1643
1658
  if (add_history_to_context or self.add_history_to_context) and not self.db and not self.team_id:
@@ -1664,9 +1679,9 @@ class Agent:
1664
1679
  # Normalise hook & guardails
1665
1680
  if not self._hooks_normalised:
1666
1681
  if self.pre_hooks:
1667
- self.pre_hooks = normalize_hooks(self.pre_hooks) # type: ignore
1682
+ self.pre_hooks = normalize_pre_hooks(self.pre_hooks) # type: ignore
1668
1683
  if self.post_hooks:
1669
- self.post_hooks = normalize_hooks(self.post_hooks) # type: ignore
1684
+ self.post_hooks = normalize_post_hooks(self.post_hooks) # type: ignore
1670
1685
  self._hooks_normalised = True
1671
1686
 
1672
1687
  session_id, user_id = self._initialize_session(session_id=session_id, user_id=user_id)
@@ -1724,7 +1739,8 @@ class Agent:
1724
1739
  num_attempts = self.retries + 1
1725
1740
 
1726
1741
  for attempt in range(num_attempts):
1727
- log_debug(f"Retrying Agent run {run_id}. Attempt {attempt + 1} of {num_attempts}...")
1742
+ if attempt > 0:
1743
+ log_debug(f"Retrying Agent run {run_id}. Attempt {attempt + 1} of {num_attempts}...")
1728
1744
 
1729
1745
  try:
1730
1746
  # Resolve dependencies
@@ -1769,9 +1785,6 @@ class Agent:
1769
1785
  if stream_events is None:
1770
1786
  stream_events = False if self.stream_events is None else self.stream_events
1771
1787
 
1772
- self.stream = self.stream or stream
1773
- self.stream_events = self.stream_events or stream_events
1774
-
1775
1788
  # Prepare arguments for the model
1776
1789
  response_format = (
1777
1790
  self._get_response_format(run_context=run_context) if self.parser_model is None else None
@@ -1803,74 +1816,69 @@ class Agent:
1803
1816
 
1804
1817
  yield_run_output = yield_run_output or yield_run_response # For backwards compatibility
1805
1818
 
1806
- try:
1807
- if stream:
1808
- response_iterator = self._run_stream(
1809
- run_response=run_response,
1810
- run_context=run_context,
1811
- session=agent_session,
1812
- user_id=user_id,
1813
- add_history_to_context=add_history,
1814
- add_dependencies_to_context=add_dependencies,
1815
- add_session_state_to_context=add_session_state,
1816
- response_format=response_format,
1817
- stream_events=stream_events,
1818
- yield_run_output=yield_run_output,
1819
- debug_mode=debug_mode,
1820
- background_tasks=background_tasks,
1821
- **kwargs,
1822
- )
1823
- return response_iterator
1824
- else:
1825
- response = self._run(
1826
- run_response=run_response,
1827
- run_context=run_context,
1828
- session=agent_session,
1829
- user_id=user_id,
1830
- add_history_to_context=add_history,
1831
- add_dependencies_to_context=add_dependencies,
1832
- add_session_state_to_context=add_session_state,
1833
- response_format=response_format,
1834
- debug_mode=debug_mode,
1835
- background_tasks=background_tasks,
1836
- **kwargs,
1837
- )
1838
- return response
1839
- except (InputCheckError, OutputCheckError) as e:
1840
- log_error(f"Validation failed: {str(e)} | Check: {e.check_trigger}")
1841
- raise e
1842
- except KeyboardInterrupt:
1843
- run_response.content = "Operation cancelled by user"
1844
- run_response.status = RunStatus.cancelled
1819
+ if stream:
1820
+ response_iterator = self._run_stream(
1821
+ run_response=run_response,
1822
+ run_context=run_context,
1823
+ session=agent_session,
1824
+ user_id=user_id,
1825
+ add_history_to_context=add_history,
1826
+ add_dependencies_to_context=add_dependencies,
1827
+ add_session_state_to_context=add_session_state,
1828
+ response_format=response_format,
1829
+ stream_events=stream_events,
1830
+ yield_run_output=yield_run_output,
1831
+ debug_mode=debug_mode,
1832
+ background_tasks=background_tasks,
1833
+ **kwargs,
1834
+ )
1835
+ return response_iterator
1836
+ else:
1837
+ response = self._run(
1838
+ run_response=run_response,
1839
+ run_context=run_context,
1840
+ session=agent_session,
1841
+ user_id=user_id,
1842
+ add_history_to_context=add_history,
1843
+ add_dependencies_to_context=add_dependencies,
1844
+ add_session_state_to_context=add_session_state,
1845
+ response_format=response_format,
1846
+ debug_mode=debug_mode,
1847
+ background_tasks=background_tasks,
1848
+ **kwargs,
1849
+ )
1850
+ return response
1851
+ except (InputCheckError, OutputCheckError) as e:
1852
+ log_error(f"Validation failed: {str(e)} | Check: {e.check_trigger}")
1853
+ raise e
1854
+ except KeyboardInterrupt:
1855
+ run_response.content = "Operation cancelled by user"
1856
+ run_response.status = RunStatus.cancelled
1845
1857
 
1846
- if stream:
1847
- return generator_wrapper( # type: ignore
1848
- create_run_cancelled_event(
1849
- from_run_response=run_response,
1850
- reason="Operation cancelled by user",
1851
- )
1858
+ if stream:
1859
+ return generator_wrapper( # type: ignore
1860
+ create_run_cancelled_event(
1861
+ from_run_response=run_response,
1862
+ reason="Operation cancelled by user",
1852
1863
  )
1864
+ )
1865
+ else:
1866
+ return run_response
1867
+ except Exception as e:
1868
+ # Check if this is the last attempt
1869
+ if attempt < num_attempts - 1:
1870
+ # Calculate delay with exponential backoff if enabled
1871
+ if self.exponential_backoff:
1872
+ delay = self.delay_between_retries * (2**attempt)
1853
1873
  else:
1854
- return run_response
1855
- except Exception as e:
1856
- # Check if this is the last attempt
1857
- if attempt < num_attempts - 1:
1858
- # Calculate delay with exponential backoff if enabled
1859
- if self.exponential_backoff:
1860
- delay = self.delay_between_retries * (2**attempt)
1861
- else:
1862
- delay = self.delay_between_retries
1874
+ delay = self.delay_between_retries
1863
1875
 
1864
- log_warning(f"Attempt {attempt + 1}/{num_attempts} failed: {str(e)}. Retrying in {delay}s...")
1865
- time.sleep(delay)
1866
- continue
1867
- else:
1868
- # Final attempt failed - re-raise the exception
1869
- log_error(f"All {num_attempts} attempts failed. Final error: {str(e)}")
1870
- raise
1871
- except Exception as e:
1872
- log_error(f"Unexpected error: {str(e)}")
1873
- if attempt == num_attempts - 1:
1876
+ log_warning(f"Attempt {attempt + 1}/{num_attempts} failed: {str(e)}. Retrying in {delay}s...")
1877
+ time.sleep(delay)
1878
+ continue
1879
+ else:
1880
+ # Final attempt failed - re-raise the exception
1881
+ log_error(f"All {num_attempts} attempts failed. Final error: {str(e)}")
1874
1882
  if stream:
1875
1883
  return generator_wrapper(create_run_error_event(run_response, error=str(e))) # type: ignore
1876
1884
  raise e
@@ -2539,6 +2547,7 @@ class Agent:
2539
2547
  session_id: Optional[str] = None,
2540
2548
  session_state: Optional[Dict[str, Any]] = None,
2541
2549
  run_context: Optional[RunContext] = None,
2550
+ run_id: Optional[str] = None,
2542
2551
  audio: Optional[Sequence[Audio]] = None,
2543
2552
  images: Optional[Sequence[Image]] = None,
2544
2553
  videos: Optional[Sequence[Video]] = None,
@@ -2565,6 +2574,7 @@ class Agent:
2565
2574
  user_id: Optional[str] = None,
2566
2575
  session_id: Optional[str] = None,
2567
2576
  run_context: Optional[RunContext] = None,
2577
+ run_id: Optional[str] = None,
2568
2578
  audio: Optional[Sequence[Audio]] = None,
2569
2579
  images: Optional[Sequence[Image]] = None,
2570
2580
  videos: Optional[Sequence[Video]] = None,
@@ -2593,6 +2603,7 @@ class Agent:
2593
2603
  session_id: Optional[str] = None,
2594
2604
  session_state: Optional[Dict[str, Any]] = None,
2595
2605
  run_context: Optional[RunContext] = None,
2606
+ run_id: Optional[str] = None,
2596
2607
  audio: Optional[Sequence[Audio]] = None,
2597
2608
  images: Optional[Sequence[Image]] = None,
2598
2609
  videos: Optional[Sequence[Video]] = None,
@@ -2613,8 +2624,8 @@ class Agent:
2613
2624
  ) -> Union[RunOutput, AsyncIterator[RunOutputEvent]]:
2614
2625
  """Async Run the Agent and return the response."""
2615
2626
 
2616
- # Create a run_id for this specific run and register immediately for cancellation tracking
2617
- run_id = str(uuid4())
2627
+ # Set the id for the run and register it immediately for cancellation tracking
2628
+ run_id = run_id or str(uuid4())
2618
2629
  register_run(run_id)
2619
2630
 
2620
2631
  if (add_history_to_context or self.add_history_to_context) and not self.db and not self.team_id:
@@ -2641,9 +2652,9 @@ class Agent:
2641
2652
  # Normalise hooks & guardails
2642
2653
  if not self._hooks_normalised:
2643
2654
  if self.pre_hooks:
2644
- self.pre_hooks = normalize_hooks(self.pre_hooks, async_mode=True) # type: ignore
2655
+ self.pre_hooks = normalize_pre_hooks(self.pre_hooks, async_mode=True) # type: ignore
2645
2656
  if self.post_hooks:
2646
- self.post_hooks = normalize_hooks(self.post_hooks, async_mode=True) # type: ignore
2657
+ self.post_hooks = normalize_post_hooks(self.post_hooks, async_mode=True) # type: ignore
2647
2658
  self._hooks_normalised = True
2648
2659
 
2649
2660
  # Initialize session
@@ -2697,9 +2708,6 @@ class Agent:
2697
2708
  if stream_events is None:
2698
2709
  stream_events = False if self.stream_events is None else self.stream_events
2699
2710
 
2700
- self.stream = self.stream or stream
2701
- self.stream_events = self.stream_events or stream_events
2702
-
2703
2711
  self.model = cast(Model, self.model)
2704
2712
 
2705
2713
  # Get knowledge filters
@@ -2760,7 +2768,9 @@ class Agent:
2760
2768
  num_attempts = self.retries + 1
2761
2769
 
2762
2770
  for attempt in range(num_attempts):
2763
- log_debug(f"Retrying Agent run {run_id}. Attempt {attempt + 1} of {num_attempts}...")
2771
+ if attempt > 0:
2772
+ log_debug(f"Retrying Agent run {run_id}. Attempt {attempt + 1} of {num_attempts}...")
2773
+
2764
2774
  try:
2765
2775
  # Pass the new run_response to _arun
2766
2776
  if stream:
@@ -2960,7 +2970,8 @@ class Agent:
2960
2970
  num_attempts = self.retries + 1
2961
2971
 
2962
2972
  for attempt in range(num_attempts):
2963
- log_debug(f"Retrying Agent continue_run {run_id}. Attempt {attempt + 1} of {num_attempts}...")
2973
+ if attempt > 0:
2974
+ log_debug(f"Retrying Agent continue_run {run_id}. Attempt {attempt + 1} of {num_attempts}...")
2964
2975
 
2965
2976
  try:
2966
2977
  # Resolve dependencies
@@ -3003,9 +3014,6 @@ class Agent:
3003
3014
  if stream is False:
3004
3015
  stream_events = False
3005
3016
 
3006
- self.stream = self.stream or stream
3007
- self.stream_events = self.stream_events or stream_events
3008
-
3009
3017
  # Run can be continued from previous run response or from passed run_response context
3010
3018
  if run_response is not None:
3011
3019
  # The run is continued from a provided run_response. This contains the updated tools.
@@ -3572,9 +3580,6 @@ class Agent:
3572
3580
  if stream is False:
3573
3581
  stream_events = False
3574
3582
 
3575
- self.stream = self.stream or stream
3576
- self.stream_events = self.stream_events or stream_events
3577
-
3578
3583
  # Get knowledge filters
3579
3584
  knowledge_filters = knowledge_filters
3580
3585
  if self.knowledge_filters or knowledge_filters:
@@ -3606,7 +3611,8 @@ class Agent:
3606
3611
  )
3607
3612
 
3608
3613
  for attempt in range(num_attempts):
3609
- log_debug(f"Retrying Agent acontinue_run {run_id}. Attempt {attempt + 1} of {num_attempts}...")
3614
+ if attempt > 0:
3615
+ log_debug(f"Retrying Agent acontinue_run {run_id}. Attempt {attempt + 1} of {num_attempts}...")
3610
3616
 
3611
3617
  try:
3612
3618
  if stream:
@@ -6352,6 +6358,20 @@ class Agent:
6352
6358
  metadata=self.metadata,
6353
6359
  created_at=int(time()),
6354
6360
  )
6361
+ if self.introduction is not None:
6362
+ agent_session.upsert_run(
6363
+ RunOutput(
6364
+ run_id=str(uuid4()),
6365
+ session_id=session_id,
6366
+ agent_id=self.id,
6367
+ agent_name=self.name,
6368
+ user_id=user_id,
6369
+ content=self.introduction,
6370
+ messages=[
6371
+ Message(role=self.model.assistant_message_role, content=self.introduction) # type: ignore
6372
+ ],
6373
+ )
6374
+ )
6355
6375
 
6356
6376
  if self.cache_session:
6357
6377
  self._cached_session = agent_session
@@ -6395,6 +6415,20 @@ class Agent:
6395
6415
  metadata=self.metadata,
6396
6416
  created_at=int(time()),
6397
6417
  )
6418
+ if self.introduction is not None:
6419
+ agent_session.upsert_run(
6420
+ RunOutput(
6421
+ run_id=str(uuid4()),
6422
+ session_id=session_id,
6423
+ agent_id=self.id,
6424
+ agent_name=self.name,
6425
+ user_id=user_id,
6426
+ content=self.introduction,
6427
+ messages=[
6428
+ Message(role=self.model.assistant_message_role, content=self.introduction) # type: ignore
6429
+ ],
6430
+ )
6431
+ )
6398
6432
 
6399
6433
  if self.cache_session:
6400
6434
  self._cached_session = agent_session
@@ -10551,6 +10585,7 @@ class Agent:
10551
10585
  session_id: Optional[str] = None,
10552
10586
  session_state: Optional[Dict[str, Any]] = None,
10553
10587
  user_id: Optional[str] = None,
10588
+ run_id: Optional[str] = None,
10554
10589
  audio: Optional[Sequence[Audio]] = None,
10555
10590
  images: Optional[Sequence[Image]] = None,
10556
10591
  videos: Optional[Sequence[Video]] = None,
@@ -10600,6 +10635,7 @@ class Agent:
10600
10635
  session_id=session_id,
10601
10636
  session_state=session_state,
10602
10637
  user_id=user_id,
10638
+ run_id=run_id,
10603
10639
  audio=audio,
10604
10640
  images=images,
10605
10641
  videos=videos,
@@ -10628,6 +10664,7 @@ class Agent:
10628
10664
  session_id=session_id,
10629
10665
  session_state=session_state,
10630
10666
  user_id=user_id,
10667
+ run_id=run_id,
10631
10668
  audio=audio,
10632
10669
  images=images,
10633
10670
  videos=videos,
@@ -10655,6 +10692,7 @@ class Agent:
10655
10692
  session_id: Optional[str] = None,
10656
10693
  session_state: Optional[Dict[str, Any]] = None,
10657
10694
  user_id: Optional[str] = None,
10695
+ run_id: Optional[str] = None,
10658
10696
  audio: Optional[Sequence[Audio]] = None,
10659
10697
  images: Optional[Sequence[Image]] = None,
10660
10698
  videos: Optional[Sequence[Video]] = None,
@@ -10698,6 +10736,7 @@ class Agent:
10698
10736
  session_id=session_id,
10699
10737
  session_state=session_state,
10700
10738
  user_id=user_id,
10739
+ run_id=run_id,
10701
10740
  audio=audio,
10702
10741
  images=images,
10703
10742
  videos=videos,
@@ -10725,6 +10764,7 @@ class Agent:
10725
10764
  session_id=session_id,
10726
10765
  session_state=session_state,
10727
10766
  user_id=user_id,
10767
+ run_id=run_id,
10728
10768
  audio=audio,
10729
10769
  images=images,
10730
10770
  videos=videos,
agno/db/mysql/__init__.py CHANGED
@@ -1,3 +1,4 @@
1
+ from agno.db.mysql.async_mysql import AsyncMySQLDb
1
2
  from agno.db.mysql.mysql import MySQLDb
2
3
 
3
- __all__ = ["MySQLDb"]
4
+ __all__ = ["MySQLDb", "AsyncMySQLDb"]