agno 2.4.7__py3-none-any.whl → 2.4.8__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 (45) hide show
  1. agno/agent/agent.py +5 -1
  2. agno/db/base.py +2 -0
  3. agno/db/postgres/postgres.py +5 -5
  4. agno/db/sqlite/sqlite.py +4 -4
  5. agno/knowledge/knowledge.py +83 -1853
  6. agno/knowledge/loaders/__init__.py +29 -0
  7. agno/knowledge/loaders/azure_blob.py +423 -0
  8. agno/knowledge/loaders/base.py +187 -0
  9. agno/knowledge/loaders/gcs.py +267 -0
  10. agno/knowledge/loaders/github.py +415 -0
  11. agno/knowledge/loaders/s3.py +281 -0
  12. agno/knowledge/loaders/sharepoint.py +439 -0
  13. agno/knowledge/reader/website_reader.py +2 -2
  14. agno/knowledge/remote_knowledge.py +151 -0
  15. agno/learn/stores/session_context.py +10 -2
  16. agno/models/azure/openai_chat.py +6 -11
  17. agno/models/neosantara/__init__.py +5 -0
  18. agno/models/neosantara/neosantara.py +42 -0
  19. agno/models/utils.py +5 -0
  20. agno/os/app.py +4 -1
  21. agno/os/interfaces/agui/router.py +1 -1
  22. agno/os/routers/components/components.py +2 -0
  23. agno/os/routers/knowledge/knowledge.py +0 -1
  24. agno/os/routers/registry/registry.py +340 -192
  25. agno/os/routers/workflows/router.py +7 -1
  26. agno/os/schema.py +104 -0
  27. agno/registry/registry.py +4 -0
  28. agno/session/workflow.py +1 -1
  29. agno/skills/utils.py +100 -2
  30. agno/team/team.py +6 -3
  31. agno/vectordb/lancedb/lance_db.py +22 -7
  32. agno/workflow/__init__.py +4 -0
  33. agno/workflow/cel.py +299 -0
  34. agno/workflow/condition.py +145 -2
  35. agno/workflow/loop.py +177 -46
  36. agno/workflow/parallel.py +75 -4
  37. agno/workflow/router.py +260 -44
  38. agno/workflow/step.py +14 -7
  39. agno/workflow/steps.py +43 -0
  40. agno/workflow/workflow.py +104 -46
  41. {agno-2.4.7.dist-info → agno-2.4.8.dist-info}/METADATA +24 -36
  42. {agno-2.4.7.dist-info → agno-2.4.8.dist-info}/RECORD +45 -34
  43. {agno-2.4.7.dist-info → agno-2.4.8.dist-info}/WHEEL +0 -0
  44. {agno-2.4.7.dist-info → agno-2.4.8.dist-info}/licenses/LICENSE +0 -0
  45. {agno-2.4.7.dist-info → agno-2.4.8.dist-info}/top_level.txt +0 -0
agno/agent/agent.py CHANGED
@@ -11493,7 +11493,7 @@ class Agent:
11493
11493
 
11494
11494
  return get_tool_call_history
11495
11495
 
11496
- def _update_session_state_tool(self, session_state, session_state_updates: dict) -> str:
11496
+ def _update_session_state_tool(self, run_context: RunContext, session_state_updates: dict) -> str:
11497
11497
  """
11498
11498
  Update the shared session state. Provide any updates as a dictionary of key-value pairs.
11499
11499
  Example:
@@ -11502,6 +11502,10 @@ class Agent:
11502
11502
  Args:
11503
11503
  session_state_updates (dict): The updates to apply to the shared session state. Should be a dictionary of key-value pairs.
11504
11504
  """
11505
+
11506
+ if run_context.session_state is None:
11507
+ run_context.session_state = {}
11508
+ session_state = run_context.session_state
11505
11509
  for key, value in session_state_updates.items():
11506
11510
  session_state[key] = value
11507
11511
 
agno/db/base.py CHANGED
@@ -576,6 +576,7 @@ class BaseDb(ABC):
576
576
  component_type: Optional[ComponentType] = None,
577
577
  name: Optional[str] = None,
578
578
  description: Optional[str] = None,
579
+ current_version: Optional[int] = None,
579
580
  metadata: Optional[Dict[str, Any]] = None,
580
581
  ) -> Dict[str, Any]:
581
582
  """Create or update a component.
@@ -585,6 +586,7 @@ class BaseDb(ABC):
585
586
  component_type: Type (agent|team|workflow). Required for create, optional for update.
586
587
  name: Display name.
587
588
  description: Optional description.
589
+ current_version: Optional current version.
588
590
  metadata: Optional metadata dict.
589
591
 
590
592
  Returns:
@@ -3241,6 +3241,7 @@ class PostgresDb(BaseDb):
3241
3241
  component_type: Optional[ComponentType] = None,
3242
3242
  name: Optional[str] = None,
3243
3243
  description: Optional[str] = None,
3244
+ current_version: Optional[int] = None,
3244
3245
  metadata: Optional[Dict[str, Any]] = None,
3245
3246
  ) -> Dict[str, Any]:
3246
3247
  """Create or update a component.
@@ -3250,6 +3251,7 @@ class PostgresDb(BaseDb):
3250
3251
  component_type: Type (agent|team|workflow). Required for create, optional for update.
3251
3252
  name: Display name.
3252
3253
  description: Optional description.
3254
+ current_version: Optional current version.
3253
3255
  metadata: Optional metadata dict.
3254
3256
 
3255
3257
  Returns:
@@ -3317,6 +3319,8 @@ class PostgresDb(BaseDb):
3317
3319
  updates["name"] = name
3318
3320
  if description is not None:
3319
3321
  updates["description"] = description
3322
+ if current_version is not None:
3323
+ updates["current_version"] = current_version
3320
3324
  if metadata is not None:
3321
3325
  updates["metadata"] = metadata
3322
3326
 
@@ -3693,8 +3697,8 @@ class PostgresDb(BaseDb):
3693
3697
  raise ValueError(f"Invalid stage: {stage}")
3694
3698
 
3695
3699
  try:
3696
- configs_table = self._get_table(table_type="component_configs", create_table_if_not_found=True)
3697
3700
  components_table = self._get_table(table_type="components")
3701
+ configs_table = self._get_table(table_type="component_configs", create_table_if_not_found=True)
3698
3702
  links_table = self._get_table(table_type="component_links", create_table_if_not_found=True)
3699
3703
 
3700
3704
  if components_table is None:
@@ -3881,10 +3885,6 @@ class PostgresDb(BaseDb):
3881
3885
  if config_row is None:
3882
3886
  return False
3883
3887
 
3884
- # Cannot delete published configs
3885
- if config_row == "published":
3886
- raise ValueError(f"Cannot delete published config {component_id} v{version}")
3887
-
3888
3888
  # Check if it's current version
3889
3889
  current = sess.execute(
3890
3890
  select(components_table.c.current_version).where(components_table.c.component_id == component_id)
agno/db/sqlite/sqlite.py CHANGED
@@ -3139,6 +3139,7 @@ class SqliteDb(BaseDb):
3139
3139
  component_type: Optional[ComponentType] = None,
3140
3140
  name: Optional[str] = None,
3141
3141
  description: Optional[str] = None,
3142
+ current_version: Optional[int] = None,
3142
3143
  metadata: Optional[Dict[str, Any]] = None,
3143
3144
  ) -> Dict[str, Any]:
3144
3145
  """Create or update a component.
@@ -3148,6 +3149,7 @@ class SqliteDb(BaseDb):
3148
3149
  component_type: Type (agent|team|workflow). Required for create, optional for update.
3149
3150
  name: Display name.
3150
3151
  description: Optional description.
3152
+ current_version: Optional current version.
3151
3153
  metadata: Optional metadata dict.
3152
3154
 
3153
3155
  Returns:
@@ -3213,6 +3215,8 @@ class SqliteDb(BaseDb):
3213
3215
  updates["name"] = name
3214
3216
  if description is not None:
3215
3217
  updates["description"] = description
3218
+ if current_version is not None:
3219
+ updates["current_version"] = current_version
3216
3220
  if metadata is not None:
3217
3221
  updates["metadata"] = metadata
3218
3222
 
@@ -3759,10 +3763,6 @@ class SqliteDb(BaseDb):
3759
3763
  if config_row is None:
3760
3764
  return False
3761
3765
 
3762
- # Cannot delete published configs
3763
- if config_row.stage == "published":
3764
- raise ValueError(f"Cannot delete published config {component_id} v{version}")
3765
-
3766
3766
  # Check if it's current version
3767
3767
  current = sess.execute(
3768
3768
  select(components_table.c.current_version).where(components_table.c.component_id == component_id)