agno 2.3.7__py3-none-any.whl → 2.3.9__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 (71) hide show
  1. agno/agent/agent.py +391 -335
  2. agno/db/mongo/async_mongo.py +0 -24
  3. agno/db/mongo/mongo.py +0 -16
  4. agno/db/mysql/__init__.py +2 -1
  5. agno/db/mysql/async_mysql.py +2888 -0
  6. agno/db/mysql/mysql.py +17 -27
  7. agno/db/mysql/utils.py +139 -6
  8. agno/db/postgres/async_postgres.py +10 -26
  9. agno/db/postgres/postgres.py +7 -25
  10. agno/db/redis/redis.py +0 -4
  11. agno/db/schemas/evals.py +1 -0
  12. agno/db/singlestore/singlestore.py +5 -12
  13. agno/db/sqlite/async_sqlite.py +2 -26
  14. agno/db/sqlite/sqlite.py +0 -20
  15. agno/eval/__init__.py +10 -0
  16. agno/eval/agent_as_judge.py +860 -0
  17. agno/eval/base.py +29 -0
  18. agno/eval/utils.py +2 -1
  19. agno/exceptions.py +7 -0
  20. agno/knowledge/embedder/openai.py +8 -8
  21. agno/knowledge/knowledge.py +1142 -176
  22. agno/media.py +22 -6
  23. agno/models/aws/claude.py +8 -7
  24. agno/models/base.py +160 -11
  25. agno/models/deepseek/deepseek.py +67 -0
  26. agno/models/google/gemini.py +65 -11
  27. agno/models/google/utils.py +22 -0
  28. agno/models/message.py +2 -0
  29. agno/models/openai/chat.py +4 -0
  30. agno/models/openai/responses.py +3 -2
  31. agno/os/app.py +64 -74
  32. agno/os/interfaces/a2a/router.py +3 -4
  33. agno/os/interfaces/a2a/utils.py +1 -1
  34. agno/os/interfaces/agui/router.py +2 -0
  35. agno/os/middleware/jwt.py +8 -6
  36. agno/os/router.py +3 -1607
  37. agno/os/routers/agents/__init__.py +3 -0
  38. agno/os/routers/agents/router.py +581 -0
  39. agno/os/routers/agents/schema.py +261 -0
  40. agno/os/routers/evals/evals.py +26 -6
  41. agno/os/routers/evals/schemas.py +34 -2
  42. agno/os/routers/evals/utils.py +101 -20
  43. agno/os/routers/knowledge/knowledge.py +1 -1
  44. agno/os/routers/teams/__init__.py +3 -0
  45. agno/os/routers/teams/router.py +496 -0
  46. agno/os/routers/teams/schema.py +257 -0
  47. agno/os/routers/workflows/__init__.py +3 -0
  48. agno/os/routers/workflows/router.py +545 -0
  49. agno/os/routers/workflows/schema.py +75 -0
  50. agno/os/schema.py +1 -559
  51. agno/os/utils.py +139 -2
  52. agno/team/team.py +159 -100
  53. agno/tools/file_generation.py +12 -6
  54. agno/tools/firecrawl.py +15 -7
  55. agno/tools/workflow.py +8 -1
  56. agno/utils/hooks.py +64 -5
  57. agno/utils/http.py +2 -2
  58. agno/utils/media.py +11 -1
  59. agno/utils/print_response/agent.py +8 -0
  60. agno/utils/print_response/team.py +8 -0
  61. agno/vectordb/pgvector/pgvector.py +88 -51
  62. agno/workflow/parallel.py +11 -5
  63. agno/workflow/step.py +17 -5
  64. agno/workflow/types.py +38 -2
  65. agno/workflow/workflow.py +12 -4
  66. {agno-2.3.7.dist-info → agno-2.3.9.dist-info}/METADATA +8 -3
  67. {agno-2.3.7.dist-info → agno-2.3.9.dist-info}/RECORD +70 -58
  68. agno/tools/memori.py +0 -339
  69. {agno-2.3.7.dist-info → agno-2.3.9.dist-info}/WHEEL +0 -0
  70. {agno-2.3.7.dist-info → agno-2.3.9.dist-info}/licenses/LICENSE +0 -0
  71. {agno-2.3.7.dist-info → agno-2.3.9.dist-info}/top_level.txt +0 -0
@@ -2265,14 +2265,6 @@ class AsyncMongoDb(AsyncBaseDb):
2265
2265
  if trace.workflow_id is not None:
2266
2266
  update_values["workflow_id"] = trace.workflow_id
2267
2267
 
2268
- log_debug(
2269
- f" Updating trace with context: run_id={update_values.get('run_id', 'unchanged')}, "
2270
- f"session_id={update_values.get('session_id', 'unchanged')}, "
2271
- f"user_id={update_values.get('user_id', 'unchanged')}, "
2272
- f"agent_id={update_values.get('agent_id', 'unchanged')}, "
2273
- f"team_id={update_values.get('team_id', 'unchanged')}, "
2274
- )
2275
-
2276
2268
  await collection.update_one({"trace_id": trace.trace_id}, {"$set": update_values})
2277
2269
  else:
2278
2270
  trace_dict = trace.to_dict()
@@ -2380,11 +2372,6 @@ class AsyncMongoDb(AsyncBaseDb):
2380
2372
  try:
2381
2373
  from agno.tracing.schemas import Trace as TraceSchema
2382
2374
 
2383
- log_debug(
2384
- f"get_traces called with filters: run_id={run_id}, session_id={session_id}, "
2385
- f"user_id={user_id}, agent_id={agent_id}, page={page}, limit={limit}"
2386
- )
2387
-
2388
2375
  collection = await self._get_collection(table_type="traces")
2389
2376
  if collection is None:
2390
2377
  log_debug("Traces collection not found")
@@ -2398,7 +2385,6 @@ class AsyncMongoDb(AsyncBaseDb):
2398
2385
  if run_id:
2399
2386
  query["run_id"] = run_id
2400
2387
  if session_id:
2401
- log_debug(f"Filtering by session_id={session_id}")
2402
2388
  query["session_id"] = session_id
2403
2389
  if user_id:
2404
2390
  query["user_id"] = user_id
@@ -2420,14 +2406,12 @@ class AsyncMongoDb(AsyncBaseDb):
2420
2406
 
2421
2407
  # Get total count
2422
2408
  total_count = await collection.count_documents(query)
2423
- log_debug(f"Total matching traces: {total_count}")
2424
2409
 
2425
2410
  # Apply pagination
2426
2411
  skip = ((page or 1) - 1) * (limit or 20)
2427
2412
  cursor = collection.find(query).sort("start_time", -1).skip(skip).limit(limit or 20)
2428
2413
 
2429
2414
  results = await cursor.to_list(length=None)
2430
- log_debug(f"Returning page {page} with {len(results)} traces")
2431
2415
 
2432
2416
  traces = []
2433
2417
  for row in results:
@@ -2481,12 +2465,6 @@ class AsyncMongoDb(AsyncBaseDb):
2481
2465
  workflow_id, first_trace_at, last_trace_at.
2482
2466
  """
2483
2467
  try:
2484
- log_debug(
2485
- f"get_trace_stats called with filters: user_id={user_id}, agent_id={agent_id}, "
2486
- f"workflow_id={workflow_id}, team_id={team_id}, "
2487
- f"start_time={start_time}, end_time={end_time}, page={page}, limit={limit}"
2488
- )
2489
-
2490
2468
  collection = await self._get_collection(table_type="traces")
2491
2469
  if collection is None:
2492
2470
  log_debug("Traces collection not found")
@@ -2532,7 +2510,6 @@ class AsyncMongoDb(AsyncBaseDb):
2532
2510
  count_pipeline = pipeline + [{"$count": "total"}]
2533
2511
  count_result = await collection.aggregate(count_pipeline).to_list(length=1)
2534
2512
  total_count = count_result[0]["total"] if count_result else 0
2535
- log_debug(f"Total matching sessions: {total_count}")
2536
2513
 
2537
2514
  # Apply pagination
2538
2515
  skip = ((page or 1) - 1) * (limit or 20)
@@ -2540,7 +2517,6 @@ class AsyncMongoDb(AsyncBaseDb):
2540
2517
  pipeline.append({"$limit": limit or 20})
2541
2518
 
2542
2519
  results = await collection.aggregate(pipeline).to_list(length=None)
2543
- log_debug(f"Returning page {page} with {len(results)} session stats")
2544
2520
 
2545
2521
  # Convert to list of dicts with datetime objects
2546
2522
  stats_list = []
agno/db/mongo/mongo.py CHANGED
@@ -2217,11 +2217,6 @@ class MongoDb(BaseDb):
2217
2217
  try:
2218
2218
  from agno.tracing.schemas import Trace as TraceSchema
2219
2219
 
2220
- log_debug(
2221
- f"get_traces called with filters: run_id={run_id}, session_id={session_id}, "
2222
- f"user_id={user_id}, agent_id={agent_id}, page={page}, limit={limit}"
2223
- )
2224
-
2225
2220
  collection = self._get_collection(table_type="traces")
2226
2221
  if collection is None:
2227
2222
  log_debug("Traces collection not found")
@@ -2235,7 +2230,6 @@ class MongoDb(BaseDb):
2235
2230
  if run_id:
2236
2231
  query["run_id"] = run_id
2237
2232
  if session_id:
2238
- log_debug(f"Filtering by session_id={session_id}")
2239
2233
  query["session_id"] = session_id
2240
2234
  if user_id:
2241
2235
  query["user_id"] = user_id
@@ -2257,14 +2251,12 @@ class MongoDb(BaseDb):
2257
2251
 
2258
2252
  # Get total count
2259
2253
  total_count = collection.count_documents(query)
2260
- log_debug(f"Total matching traces: {total_count}")
2261
2254
 
2262
2255
  # Apply pagination
2263
2256
  skip = ((page or 1) - 1) * (limit or 20)
2264
2257
  cursor = collection.find(query).sort("start_time", -1).skip(skip).limit(limit or 20)
2265
2258
 
2266
2259
  results = list(cursor)
2267
- log_debug(f"Returning page {page} with {len(results)} traces")
2268
2260
 
2269
2261
  traces = []
2270
2262
  for row in results:
@@ -2318,12 +2310,6 @@ class MongoDb(BaseDb):
2318
2310
  workflow_id, first_trace_at, last_trace_at.
2319
2311
  """
2320
2312
  try:
2321
- log_debug(
2322
- f"get_trace_stats called with filters: user_id={user_id}, agent_id={agent_id}, "
2323
- f"workflow_id={workflow_id}, team_id={team_id}, "
2324
- f"start_time={start_time}, end_time={end_time}, page={page}, limit={limit}"
2325
- )
2326
-
2327
2313
  collection = self._get_collection(table_type="traces")
2328
2314
  if collection is None:
2329
2315
  log_debug("Traces collection not found")
@@ -2369,7 +2355,6 @@ class MongoDb(BaseDb):
2369
2355
  count_pipeline = pipeline + [{"$count": "total"}]
2370
2356
  count_result = list(collection.aggregate(count_pipeline))
2371
2357
  total_count = count_result[0]["total"] if count_result else 0
2372
- log_debug(f"Total matching sessions: {total_count}")
2373
2358
 
2374
2359
  # Apply pagination
2375
2360
  skip = ((page or 1) - 1) * (limit or 20)
@@ -2377,7 +2362,6 @@ class MongoDb(BaseDb):
2377
2362
  pipeline.append({"$limit": limit or 20})
2378
2363
 
2379
2364
  results = list(collection.aggregate(pipeline))
2380
- log_debug(f"Returning page {page} with {len(results)} session stats")
2381
2365
 
2382
2366
  # Convert to list of dicts with datetime objects
2383
2367
  stats_list = []
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"]