agno 1.8.1__py3-none-any.whl → 2.0.0a1__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.
- agno/__init__.py +8 -0
- agno/agent/__init__.py +19 -27
- agno/agent/agent.py +2778 -4123
- agno/api/agent.py +9 -65
- agno/api/api.py +5 -46
- agno/api/evals.py +6 -17
- agno/api/os.py +17 -0
- agno/api/routes.py +6 -41
- agno/api/schemas/__init__.py +9 -0
- agno/api/schemas/agent.py +5 -21
- agno/api/schemas/evals.py +7 -16
- agno/api/schemas/os.py +14 -0
- agno/api/schemas/team.py +5 -21
- agno/api/schemas/utils.py +21 -0
- agno/api/schemas/workflows.py +11 -7
- agno/api/settings.py +53 -0
- agno/api/team.py +9 -64
- agno/api/workflow.py +28 -0
- agno/cloud/aws/base.py +214 -0
- agno/cloud/aws/s3/__init__.py +2 -0
- agno/cloud/aws/s3/api_client.py +43 -0
- agno/cloud/aws/s3/bucket.py +195 -0
- agno/cloud/aws/s3/object.py +57 -0
- agno/db/__init__.py +24 -0
- agno/db/base.py +245 -0
- agno/db/dynamo/__init__.py +3 -0
- agno/db/dynamo/dynamo.py +1749 -0
- agno/db/dynamo/schemas.py +278 -0
- agno/db/dynamo/utils.py +684 -0
- agno/db/firestore/__init__.py +3 -0
- agno/db/firestore/firestore.py +1438 -0
- agno/db/firestore/schemas.py +130 -0
- agno/db/firestore/utils.py +278 -0
- agno/db/gcs_json/__init__.py +3 -0
- agno/db/gcs_json/gcs_json_db.py +1001 -0
- agno/db/gcs_json/utils.py +194 -0
- agno/db/in_memory/__init__.py +3 -0
- agno/db/in_memory/in_memory_db.py +888 -0
- agno/db/in_memory/utils.py +172 -0
- agno/db/json/__init__.py +3 -0
- agno/db/json/json_db.py +1051 -0
- agno/db/json/utils.py +196 -0
- agno/db/migrations/v1_to_v2.py +162 -0
- agno/db/mongo/__init__.py +3 -0
- agno/db/mongo/mongo.py +1417 -0
- agno/db/mongo/schemas.py +77 -0
- agno/db/mongo/utils.py +204 -0
- agno/db/mysql/__init__.py +3 -0
- agno/db/mysql/mysql.py +1719 -0
- agno/db/mysql/schemas.py +124 -0
- agno/db/mysql/utils.py +298 -0
- agno/db/postgres/__init__.py +3 -0
- agno/db/postgres/postgres.py +1720 -0
- agno/db/postgres/schemas.py +124 -0
- agno/db/postgres/utils.py +281 -0
- agno/db/redis/__init__.py +3 -0
- agno/db/redis/redis.py +1371 -0
- agno/db/redis/schemas.py +109 -0
- agno/db/redis/utils.py +288 -0
- agno/db/schemas/__init__.py +3 -0
- agno/db/schemas/evals.py +33 -0
- agno/db/schemas/knowledge.py +40 -0
- agno/db/schemas/memory.py +46 -0
- agno/db/singlestore/__init__.py +3 -0
- agno/db/singlestore/schemas.py +116 -0
- agno/db/singlestore/singlestore.py +1722 -0
- agno/db/singlestore/utils.py +327 -0
- agno/db/sqlite/__init__.py +3 -0
- agno/db/sqlite/schemas.py +119 -0
- agno/db/sqlite/sqlite.py +1680 -0
- agno/db/sqlite/utils.py +269 -0
- agno/db/utils.py +88 -0
- agno/eval/__init__.py +14 -0
- agno/eval/accuracy.py +142 -43
- agno/eval/performance.py +88 -23
- agno/eval/reliability.py +73 -20
- agno/eval/utils.py +23 -13
- agno/integrations/discord/__init__.py +3 -0
- agno/{app → integrations}/discord/client.py +10 -10
- agno/knowledge/__init__.py +2 -2
- agno/{document → knowledge}/chunking/agentic.py +2 -2
- agno/{document → knowledge}/chunking/document.py +2 -2
- agno/{document → knowledge}/chunking/fixed.py +3 -3
- agno/{document → knowledge}/chunking/markdown.py +2 -2
- agno/{document → knowledge}/chunking/recursive.py +2 -2
- agno/{document → knowledge}/chunking/row.py +2 -2
- agno/knowledge/chunking/semantic.py +59 -0
- agno/knowledge/chunking/strategy.py +121 -0
- agno/knowledge/content.py +74 -0
- agno/knowledge/document/__init__.py +5 -0
- agno/{document → knowledge/document}/base.py +12 -2
- agno/knowledge/embedder/__init__.py +5 -0
- agno/{embedder → knowledge/embedder}/aws_bedrock.py +127 -1
- agno/{embedder → knowledge/embedder}/azure_openai.py +65 -1
- agno/{embedder → knowledge/embedder}/base.py +6 -0
- agno/{embedder → knowledge/embedder}/cohere.py +72 -1
- agno/{embedder → knowledge/embedder}/fastembed.py +17 -1
- agno/{embedder → knowledge/embedder}/fireworks.py +1 -1
- agno/{embedder → knowledge/embedder}/google.py +74 -1
- agno/{embedder → knowledge/embedder}/huggingface.py +36 -2
- agno/{embedder → knowledge/embedder}/jina.py +48 -2
- agno/knowledge/embedder/langdb.py +22 -0
- agno/knowledge/embedder/mistral.py +139 -0
- agno/{embedder → knowledge/embedder}/nebius.py +1 -1
- agno/{embedder → knowledge/embedder}/ollama.py +54 -3
- agno/knowledge/embedder/openai.py +223 -0
- agno/{embedder → knowledge/embedder}/sentence_transformer.py +16 -1
- agno/{embedder → knowledge/embedder}/together.py +1 -1
- agno/{embedder → knowledge/embedder}/voyageai.py +49 -1
- agno/knowledge/knowledge.py +1515 -0
- agno/knowledge/reader/__init__.py +7 -0
- agno/{document → knowledge}/reader/arxiv_reader.py +32 -4
- agno/knowledge/reader/base.py +88 -0
- agno/{document → knowledge}/reader/csv_reader.py +68 -15
- agno/knowledge/reader/docx_reader.py +83 -0
- agno/{document → knowledge}/reader/firecrawl_reader.py +42 -21
- agno/knowledge/reader/gcs_reader.py +67 -0
- agno/{document → knowledge}/reader/json_reader.py +30 -9
- agno/{document → knowledge}/reader/markdown_reader.py +36 -9
- agno/{document → knowledge}/reader/pdf_reader.py +79 -21
- agno/knowledge/reader/reader_factory.py +275 -0
- agno/knowledge/reader/s3_reader.py +171 -0
- agno/{document → knowledge}/reader/text_reader.py +31 -10
- agno/knowledge/reader/url_reader.py +84 -0
- agno/knowledge/reader/web_search_reader.py +389 -0
- agno/{document → knowledge}/reader/website_reader.py +37 -10
- agno/knowledge/reader/wikipedia_reader.py +59 -0
- agno/knowledge/reader/youtube_reader.py +78 -0
- agno/knowledge/remote_content/remote_content.py +88 -0
- agno/{reranker → knowledge/reranker}/base.py +1 -1
- agno/{reranker → knowledge/reranker}/cohere.py +2 -2
- agno/{reranker → knowledge/reranker}/infinity.py +2 -2
- agno/{reranker → knowledge/reranker}/sentence_transformer.py +2 -2
- agno/knowledge/types.py +30 -0
- agno/knowledge/utils.py +169 -0
- agno/memory/__init__.py +2 -10
- agno/memory/manager.py +1003 -148
- agno/models/aimlapi/__init__.py +2 -2
- agno/models/aimlapi/aimlapi.py +6 -6
- agno/models/anthropic/claude.py +129 -82
- agno/models/aws/bedrock.py +107 -175
- agno/models/aws/claude.py +64 -18
- agno/models/azure/ai_foundry.py +73 -23
- agno/models/base.py +347 -287
- agno/models/cerebras/cerebras.py +84 -27
- agno/models/cohere/chat.py +106 -98
- agno/models/google/gemini.py +100 -42
- agno/models/groq/groq.py +97 -35
- agno/models/huggingface/huggingface.py +92 -27
- agno/models/ibm/watsonx.py +72 -13
- agno/models/litellm/chat.py +85 -13
- agno/models/message.py +38 -144
- agno/models/meta/llama.py +85 -49
- agno/models/metrics.py +120 -0
- agno/models/mistral/mistral.py +90 -21
- agno/models/ollama/__init__.py +0 -2
- agno/models/ollama/chat.py +84 -46
- agno/models/openai/chat.py +121 -23
- agno/models/openai/responses.py +178 -105
- agno/models/perplexity/perplexity.py +26 -2
- agno/models/portkey/portkey.py +0 -7
- agno/models/response.py +14 -8
- agno/models/utils.py +20 -0
- agno/models/vercel/__init__.py +2 -2
- agno/models/vercel/v0.py +1 -1
- agno/models/vllm/__init__.py +2 -2
- agno/models/vllm/vllm.py +3 -3
- agno/models/xai/xai.py +10 -10
- agno/os/__init__.py +3 -0
- agno/os/app.py +393 -0
- agno/os/auth.py +47 -0
- agno/os/config.py +103 -0
- agno/os/interfaces/agui/__init__.py +3 -0
- agno/os/interfaces/agui/agui.py +31 -0
- agno/{app/agui/async_router.py → os/interfaces/agui/router.py} +16 -16
- agno/{app → os/interfaces}/agui/utils.py +65 -28
- agno/os/interfaces/base.py +21 -0
- agno/os/interfaces/slack/__init__.py +3 -0
- agno/{app/slack/async_router.py → os/interfaces/slack/router.py} +3 -5
- agno/os/interfaces/slack/slack.py +33 -0
- agno/os/interfaces/whatsapp/__init__.py +3 -0
- agno/{app/whatsapp/async_router.py → os/interfaces/whatsapp/router.py} +4 -7
- agno/os/interfaces/whatsapp/whatsapp.py +30 -0
- agno/os/router.py +843 -0
- agno/os/routers/__init__.py +3 -0
- agno/os/routers/evals/__init__.py +3 -0
- agno/os/routers/evals/evals.py +204 -0
- agno/os/routers/evals/schemas.py +142 -0
- agno/os/routers/evals/utils.py +161 -0
- agno/os/routers/knowledge/__init__.py +3 -0
- agno/os/routers/knowledge/knowledge.py +413 -0
- agno/os/routers/knowledge/schemas.py +118 -0
- agno/os/routers/memory/__init__.py +3 -0
- agno/os/routers/memory/memory.py +179 -0
- agno/os/routers/memory/schemas.py +58 -0
- agno/os/routers/metrics/__init__.py +3 -0
- agno/os/routers/metrics/metrics.py +58 -0
- agno/os/routers/metrics/schemas.py +47 -0
- agno/os/routers/session/__init__.py +3 -0
- agno/os/routers/session/session.py +163 -0
- agno/os/schema.py +892 -0
- agno/{app/playground → os}/settings.py +8 -15
- agno/os/utils.py +270 -0
- agno/reasoning/azure_ai_foundry.py +4 -4
- agno/reasoning/deepseek.py +4 -4
- agno/reasoning/default.py +6 -11
- agno/reasoning/groq.py +4 -4
- agno/reasoning/helpers.py +4 -6
- agno/reasoning/ollama.py +4 -4
- agno/reasoning/openai.py +4 -4
- agno/run/{response.py → agent.py} +144 -72
- agno/run/base.py +44 -58
- agno/run/cancel.py +83 -0
- agno/run/team.py +133 -77
- agno/run/workflow.py +537 -12
- agno/session/__init__.py +10 -0
- agno/session/agent.py +244 -0
- agno/session/summary.py +225 -0
- agno/session/team.py +262 -0
- agno/{storage/session/v2 → session}/workflow.py +47 -24
- agno/team/__init__.py +15 -16
- agno/team/team.py +2961 -4253
- agno/tools/agentql.py +14 -5
- agno/tools/airflow.py +9 -4
- agno/tools/api.py +7 -3
- agno/tools/apify.py +2 -46
- agno/tools/arxiv.py +8 -3
- agno/tools/aws_lambda.py +7 -5
- agno/tools/aws_ses.py +7 -1
- agno/tools/baidusearch.py +4 -1
- agno/tools/bitbucket.py +4 -4
- agno/tools/brandfetch.py +14 -11
- agno/tools/bravesearch.py +4 -1
- agno/tools/brightdata.py +42 -22
- agno/tools/browserbase.py +13 -4
- agno/tools/calcom.py +12 -10
- agno/tools/calculator.py +10 -27
- agno/tools/cartesia.py +18 -13
- agno/tools/{clickup_tool.py → clickup.py} +12 -25
- agno/tools/confluence.py +8 -8
- agno/tools/crawl4ai.py +7 -1
- agno/tools/csv_toolkit.py +9 -8
- agno/tools/dalle.py +18 -11
- agno/tools/daytona.py +13 -16
- agno/tools/decorator.py +6 -3
- agno/tools/desi_vocal.py +16 -7
- agno/tools/discord.py +11 -8
- agno/tools/docker.py +30 -42
- agno/tools/duckdb.py +34 -53
- agno/tools/duckduckgo.py +8 -7
- agno/tools/e2b.py +61 -61
- agno/tools/eleven_labs.py +35 -28
- agno/tools/email.py +4 -1
- agno/tools/evm.py +7 -1
- agno/tools/exa.py +19 -14
- agno/tools/fal.py +29 -29
- agno/tools/file.py +9 -8
- agno/tools/financial_datasets.py +25 -44
- agno/tools/firecrawl.py +22 -22
- agno/tools/function.py +68 -17
- agno/tools/giphy.py +22 -10
- agno/tools/github.py +48 -126
- agno/tools/gmail.py +45 -61
- agno/tools/google_bigquery.py +7 -6
- agno/tools/google_maps.py +11 -26
- agno/tools/googlesearch.py +7 -2
- agno/tools/googlesheets.py +21 -17
- agno/tools/hackernews.py +9 -5
- agno/tools/jina.py +5 -4
- agno/tools/jira.py +18 -9
- agno/tools/knowledge.py +31 -32
- agno/tools/linear.py +18 -33
- agno/tools/linkup.py +5 -1
- agno/tools/local_file_system.py +8 -5
- agno/tools/lumalab.py +31 -19
- agno/tools/mem0.py +18 -12
- agno/tools/memori.py +14 -10
- agno/tools/mlx_transcribe.py +3 -2
- agno/tools/models/azure_openai.py +32 -14
- agno/tools/models/gemini.py +58 -31
- agno/tools/models/groq.py +29 -20
- agno/tools/models/nebius.py +27 -11
- agno/tools/models_labs.py +39 -15
- agno/tools/moviepy_video.py +7 -6
- agno/tools/neo4j.py +10 -8
- agno/tools/newspaper.py +7 -2
- agno/tools/newspaper4k.py +8 -3
- agno/tools/openai.py +57 -26
- agno/tools/openbb.py +12 -11
- agno/tools/opencv.py +62 -46
- agno/tools/openweather.py +14 -12
- agno/tools/pandas.py +11 -3
- agno/tools/postgres.py +4 -12
- agno/tools/pubmed.py +4 -1
- agno/tools/python.py +9 -22
- agno/tools/reasoning.py +35 -27
- agno/tools/reddit.py +11 -26
- agno/tools/replicate.py +54 -41
- agno/tools/resend.py +4 -1
- agno/tools/scrapegraph.py +15 -14
- agno/tools/searxng.py +10 -23
- agno/tools/serpapi.py +6 -3
- agno/tools/serper.py +13 -4
- agno/tools/shell.py +9 -2
- agno/tools/slack.py +12 -11
- agno/tools/sleep.py +3 -2
- agno/tools/spider.py +24 -4
- agno/tools/sql.py +7 -6
- agno/tools/tavily.py +6 -4
- agno/tools/telegram.py +12 -4
- agno/tools/todoist.py +11 -31
- agno/tools/toolkit.py +1 -1
- agno/tools/trafilatura.py +22 -6
- agno/tools/trello.py +9 -22
- agno/tools/twilio.py +10 -3
- agno/tools/user_control_flow.py +6 -1
- agno/tools/valyu.py +34 -5
- agno/tools/visualization.py +19 -28
- agno/tools/webbrowser.py +4 -3
- agno/tools/webex.py +11 -7
- agno/tools/website.py +15 -46
- agno/tools/webtools.py +12 -4
- agno/tools/whatsapp.py +5 -9
- agno/tools/wikipedia.py +20 -13
- agno/tools/x.py +14 -13
- agno/tools/yfinance.py +13 -40
- agno/tools/youtube.py +26 -20
- agno/tools/zendesk.py +7 -2
- agno/tools/zep.py +10 -7
- agno/tools/zoom.py +10 -9
- agno/utils/common.py +1 -19
- agno/utils/events.py +95 -118
- agno/utils/knowledge.py +29 -0
- agno/utils/log.py +2 -2
- agno/utils/mcp.py +11 -5
- agno/utils/media.py +39 -0
- agno/utils/message.py +12 -1
- agno/utils/models/claude.py +6 -4
- agno/utils/models/mistral.py +8 -7
- agno/utils/models/schema_utils.py +3 -3
- agno/utils/pprint.py +33 -32
- agno/utils/print_response/agent.py +779 -0
- agno/utils/print_response/team.py +1565 -0
- agno/utils/print_response/workflow.py +1451 -0
- agno/utils/prompts.py +14 -14
- agno/utils/reasoning.py +87 -0
- agno/utils/response.py +42 -42
- agno/utils/string.py +8 -22
- agno/utils/team.py +50 -0
- agno/utils/timer.py +2 -2
- agno/vectordb/base.py +33 -21
- agno/vectordb/cassandra/cassandra.py +287 -23
- agno/vectordb/chroma/chromadb.py +482 -59
- agno/vectordb/clickhouse/clickhousedb.py +270 -63
- agno/vectordb/couchbase/couchbase.py +309 -29
- agno/vectordb/lancedb/lance_db.py +360 -21
- agno/vectordb/langchaindb/__init__.py +5 -0
- agno/vectordb/langchaindb/langchaindb.py +145 -0
- agno/vectordb/lightrag/__init__.py +5 -0
- agno/vectordb/lightrag/lightrag.py +374 -0
- agno/vectordb/llamaindex/llamaindexdb.py +127 -0
- agno/vectordb/milvus/milvus.py +242 -32
- agno/vectordb/mongodb/mongodb.py +200 -24
- agno/vectordb/pgvector/pgvector.py +319 -37
- agno/vectordb/pineconedb/pineconedb.py +221 -27
- agno/vectordb/qdrant/qdrant.py +334 -14
- agno/vectordb/singlestore/singlestore.py +286 -29
- agno/vectordb/surrealdb/surrealdb.py +187 -7
- agno/vectordb/upstashdb/upstashdb.py +342 -26
- agno/vectordb/weaviate/weaviate.py +227 -165
- agno/workflow/__init__.py +17 -13
- agno/workflow/{v2/condition.py → condition.py} +135 -32
- agno/workflow/{v2/loop.py → loop.py} +115 -28
- agno/workflow/{v2/parallel.py → parallel.py} +138 -108
- agno/workflow/{v2/router.py → router.py} +133 -32
- agno/workflow/{v2/step.py → step.py} +200 -42
- agno/workflow/{v2/steps.py → steps.py} +147 -66
- agno/workflow/types.py +482 -0
- agno/workflow/workflow.py +2394 -696
- agno-2.0.0a1.dist-info/METADATA +355 -0
- agno-2.0.0a1.dist-info/RECORD +514 -0
- agno/agent/metrics.py +0 -107
- agno/api/app.py +0 -35
- agno/api/playground.py +0 -92
- agno/api/schemas/app.py +0 -12
- agno/api/schemas/playground.py +0 -22
- agno/api/schemas/user.py +0 -35
- agno/api/schemas/workspace.py +0 -46
- agno/api/user.py +0 -160
- agno/api/workflows.py +0 -33
- agno/api/workspace.py +0 -175
- agno/app/agui/__init__.py +0 -3
- agno/app/agui/app.py +0 -17
- agno/app/agui/sync_router.py +0 -120
- agno/app/base.py +0 -186
- agno/app/discord/__init__.py +0 -3
- agno/app/fastapi/__init__.py +0 -3
- agno/app/fastapi/app.py +0 -107
- agno/app/fastapi/async_router.py +0 -457
- agno/app/fastapi/sync_router.py +0 -448
- agno/app/playground/app.py +0 -228
- agno/app/playground/async_router.py +0 -1050
- agno/app/playground/deploy.py +0 -249
- agno/app/playground/operator.py +0 -183
- agno/app/playground/schemas.py +0 -220
- agno/app/playground/serve.py +0 -55
- agno/app/playground/sync_router.py +0 -1042
- agno/app/playground/utils.py +0 -46
- agno/app/settings.py +0 -15
- agno/app/slack/__init__.py +0 -3
- agno/app/slack/app.py +0 -19
- agno/app/slack/sync_router.py +0 -92
- agno/app/utils.py +0 -54
- agno/app/whatsapp/__init__.py +0 -3
- agno/app/whatsapp/app.py +0 -15
- agno/app/whatsapp/sync_router.py +0 -197
- agno/cli/auth_server.py +0 -249
- agno/cli/config.py +0 -274
- agno/cli/console.py +0 -88
- agno/cli/credentials.py +0 -23
- agno/cli/entrypoint.py +0 -571
- agno/cli/operator.py +0 -357
- agno/cli/settings.py +0 -96
- agno/cli/ws/ws_cli.py +0 -817
- agno/constants.py +0 -13
- agno/document/__init__.py +0 -5
- agno/document/chunking/semantic.py +0 -45
- agno/document/chunking/strategy.py +0 -31
- agno/document/reader/__init__.py +0 -5
- agno/document/reader/base.py +0 -47
- agno/document/reader/docx_reader.py +0 -60
- agno/document/reader/gcs/pdf_reader.py +0 -44
- agno/document/reader/s3/pdf_reader.py +0 -59
- agno/document/reader/s3/text_reader.py +0 -63
- agno/document/reader/url_reader.py +0 -59
- agno/document/reader/youtube_reader.py +0 -58
- agno/embedder/__init__.py +0 -5
- agno/embedder/langdb.py +0 -80
- agno/embedder/mistral.py +0 -82
- agno/embedder/openai.py +0 -78
- agno/file/__init__.py +0 -5
- agno/file/file.py +0 -16
- agno/file/local/csv.py +0 -32
- agno/file/local/txt.py +0 -19
- agno/infra/app.py +0 -240
- agno/infra/base.py +0 -144
- agno/infra/context.py +0 -20
- agno/infra/db_app.py +0 -52
- agno/infra/resource.py +0 -205
- agno/infra/resources.py +0 -55
- agno/knowledge/agent.py +0 -702
- agno/knowledge/arxiv.py +0 -33
- agno/knowledge/combined.py +0 -36
- agno/knowledge/csv.py +0 -144
- agno/knowledge/csv_url.py +0 -124
- agno/knowledge/document.py +0 -223
- agno/knowledge/docx.py +0 -137
- agno/knowledge/firecrawl.py +0 -34
- agno/knowledge/gcs/__init__.py +0 -0
- agno/knowledge/gcs/base.py +0 -39
- agno/knowledge/gcs/pdf.py +0 -125
- agno/knowledge/json.py +0 -137
- agno/knowledge/langchain.py +0 -71
- agno/knowledge/light_rag.py +0 -273
- agno/knowledge/llamaindex.py +0 -66
- agno/knowledge/markdown.py +0 -154
- agno/knowledge/pdf.py +0 -164
- agno/knowledge/pdf_bytes.py +0 -42
- agno/knowledge/pdf_url.py +0 -148
- agno/knowledge/s3/__init__.py +0 -0
- agno/knowledge/s3/base.py +0 -64
- agno/knowledge/s3/pdf.py +0 -33
- agno/knowledge/s3/text.py +0 -34
- agno/knowledge/text.py +0 -141
- agno/knowledge/url.py +0 -46
- agno/knowledge/website.py +0 -179
- agno/knowledge/wikipedia.py +0 -32
- agno/knowledge/youtube.py +0 -35
- agno/memory/agent.py +0 -423
- agno/memory/classifier.py +0 -104
- agno/memory/db/__init__.py +0 -5
- agno/memory/db/base.py +0 -42
- agno/memory/db/mongodb.py +0 -189
- agno/memory/db/postgres.py +0 -203
- agno/memory/db/sqlite.py +0 -193
- agno/memory/memory.py +0 -22
- agno/memory/row.py +0 -36
- agno/memory/summarizer.py +0 -201
- agno/memory/summary.py +0 -19
- agno/memory/team.py +0 -415
- agno/memory/v2/__init__.py +0 -2
- agno/memory/v2/db/__init__.py +0 -1
- agno/memory/v2/db/base.py +0 -42
- agno/memory/v2/db/firestore.py +0 -339
- agno/memory/v2/db/mongodb.py +0 -196
- agno/memory/v2/db/postgres.py +0 -214
- agno/memory/v2/db/redis.py +0 -187
- agno/memory/v2/db/schema.py +0 -54
- agno/memory/v2/db/sqlite.py +0 -209
- agno/memory/v2/manager.py +0 -437
- agno/memory/v2/memory.py +0 -1097
- agno/memory/v2/schema.py +0 -55
- agno/memory/v2/summarizer.py +0 -215
- agno/memory/workflow.py +0 -38
- agno/models/ollama/tools.py +0 -430
- agno/models/qwen/__init__.py +0 -5
- agno/playground/__init__.py +0 -10
- agno/playground/deploy.py +0 -3
- agno/playground/playground.py +0 -3
- agno/playground/serve.py +0 -3
- agno/playground/settings.py +0 -3
- agno/reranker/__init__.py +0 -0
- agno/run/v2/__init__.py +0 -0
- agno/run/v2/workflow.py +0 -567
- agno/storage/__init__.py +0 -0
- agno/storage/agent/__init__.py +0 -0
- agno/storage/agent/dynamodb.py +0 -1
- agno/storage/agent/json.py +0 -1
- agno/storage/agent/mongodb.py +0 -1
- agno/storage/agent/postgres.py +0 -1
- agno/storage/agent/singlestore.py +0 -1
- agno/storage/agent/sqlite.py +0 -1
- agno/storage/agent/yaml.py +0 -1
- agno/storage/base.py +0 -60
- agno/storage/dynamodb.py +0 -673
- agno/storage/firestore.py +0 -297
- agno/storage/gcs_json.py +0 -261
- agno/storage/in_memory.py +0 -234
- agno/storage/json.py +0 -237
- agno/storage/mongodb.py +0 -328
- agno/storage/mysql.py +0 -685
- agno/storage/postgres.py +0 -682
- agno/storage/redis.py +0 -336
- agno/storage/session/__init__.py +0 -16
- agno/storage/session/agent.py +0 -64
- agno/storage/session/team.py +0 -63
- agno/storage/session/v2/__init__.py +0 -5
- agno/storage/session/workflow.py +0 -61
- agno/storage/singlestore.py +0 -606
- agno/storage/sqlite.py +0 -646
- agno/storage/workflow/__init__.py +0 -0
- agno/storage/workflow/mongodb.py +0 -1
- agno/storage/workflow/postgres.py +0 -1
- agno/storage/workflow/sqlite.py +0 -1
- agno/storage/yaml.py +0 -241
- agno/tools/thinking.py +0 -73
- agno/utils/defaults.py +0 -57
- agno/utils/filesystem.py +0 -39
- agno/utils/git.py +0 -52
- agno/utils/json_io.py +0 -30
- agno/utils/load_env.py +0 -19
- agno/utils/py_io.py +0 -19
- agno/utils/pyproject.py +0 -18
- agno/utils/resource_filter.py +0 -31
- agno/workflow/v2/__init__.py +0 -21
- agno/workflow/v2/types.py +0 -357
- agno/workflow/v2/workflow.py +0 -3312
- agno/workspace/__init__.py +0 -0
- agno/workspace/config.py +0 -325
- agno/workspace/enums.py +0 -6
- agno/workspace/helpers.py +0 -52
- agno/workspace/operator.py +0 -757
- agno/workspace/settings.py +0 -158
- agno-1.8.1.dist-info/METADATA +0 -982
- agno-1.8.1.dist-info/RECORD +0 -566
- agno-1.8.1.dist-info/entry_points.txt +0 -3
- /agno/{app → db/migrations}/__init__.py +0 -0
- /agno/{app/playground/__init__.py → db/schemas/metrics.py} +0 -0
- /agno/{cli → integrations}/__init__.py +0 -0
- /agno/{cli/ws → knowledge/chunking}/__init__.py +0 -0
- /agno/{document/chunking → knowledge/remote_content}/__init__.py +0 -0
- /agno/{document/reader/gcs → knowledge/reranker}/__init__.py +0 -0
- /agno/{document/reader/s3 → os/interfaces}/__init__.py +0 -0
- /agno/{app → os/interfaces}/slack/security.py +0 -0
- /agno/{app → os/interfaces}/whatsapp/security.py +0 -0
- /agno/{file/local → utils/print_response}/__init__.py +0 -0
- /agno/{infra → vectordb/llamaindex}/__init__.py +0 -0
- {agno-1.8.1.dist-info → agno-2.0.0a1.dist-info}/WHEEL +0 -0
- {agno-1.8.1.dist-info → agno-2.0.0a1.dist-info}/licenses/LICENSE +0 -0
- {agno-1.8.1.dist-info → agno-2.0.0a1.dist-info}/top_level.txt +0 -0
|
@@ -6,32 +6,24 @@ from pydantic import Field, field_validator
|
|
|
6
6
|
from pydantic_settings import BaseSettings
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
class
|
|
10
|
-
"""
|
|
9
|
+
class AgnoAPISettings(BaseSettings):
|
|
10
|
+
"""App settings for API-based apps that can be set using environment variables.
|
|
11
11
|
|
|
12
12
|
Reference: https://pydantic-docs.helpmanual.io/usage/settings/
|
|
13
13
|
"""
|
|
14
14
|
|
|
15
15
|
env: str = "dev"
|
|
16
|
-
title: str = "
|
|
16
|
+
title: str = "Agno AgentOS"
|
|
17
17
|
|
|
18
18
|
# Set to False to disable docs server at /docs and /redoc
|
|
19
19
|
docs_enabled: bool = True
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
# Authentication settings
|
|
22
|
+
os_security_key: Optional[str] = Field(default=None, description="Bearer token for API authentication")
|
|
22
23
|
|
|
23
24
|
# Cors origin list to allow requests from.
|
|
24
25
|
# This list is set using the set_cors_origin_list validator
|
|
25
|
-
cors_origin_list: Optional[List[str]] = Field(None, validate_default=True)
|
|
26
|
-
|
|
27
|
-
@field_validator("env", mode="before")
|
|
28
|
-
def validate_playground_env(cls, env):
|
|
29
|
-
"""Validate playground_env."""
|
|
30
|
-
|
|
31
|
-
valid_runtime_envs = ["dev", "stg", "prd"]
|
|
32
|
-
if env not in valid_runtime_envs:
|
|
33
|
-
raise ValueError(f"Invalid Playground Env: {env}")
|
|
34
|
-
return env
|
|
26
|
+
cors_origin_list: Optional[List[str]] = Field(default=None, validate_default=True)
|
|
35
27
|
|
|
36
28
|
@field_validator("cors_origin_list", mode="before")
|
|
37
29
|
def set_cors_origin_list(cls, cors_origin_list):
|
|
@@ -44,7 +36,8 @@ class PlaygroundSettings(BaseSettings):
|
|
|
44
36
|
"https://agno.com",
|
|
45
37
|
"https://www.agno.com",
|
|
46
38
|
"https://app.agno.com",
|
|
47
|
-
"https://
|
|
39
|
+
"https://os-stg.agno.com",
|
|
40
|
+
"https://os.agno.com",
|
|
48
41
|
]
|
|
49
42
|
)
|
|
50
43
|
|
agno/os/utils.py
ADDED
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
from typing import Any, Callable, Dict, List, Optional, Union
|
|
2
|
+
from uuid import uuid4
|
|
3
|
+
|
|
4
|
+
from fastapi import HTTPException, UploadFile
|
|
5
|
+
|
|
6
|
+
from agno.agent.agent import Agent
|
|
7
|
+
from agno.db.base import BaseDb
|
|
8
|
+
from agno.knowledge.knowledge import Knowledge
|
|
9
|
+
from agno.media import Audio, Image, Video
|
|
10
|
+
from agno.media import File as FileMedia
|
|
11
|
+
from agno.team.team import Team
|
|
12
|
+
from agno.tools import Toolkit
|
|
13
|
+
from agno.tools.function import Function
|
|
14
|
+
from agno.utils.log import logger
|
|
15
|
+
from agno.workflow.workflow import Workflow
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def get_db(dbs: dict[str, BaseDb], db_id: Optional[str] = None) -> BaseDb:
|
|
19
|
+
"""Return the database with the given ID, or the first database if no ID is provided."""
|
|
20
|
+
|
|
21
|
+
# Raise if multiple databases are provided but no db_id is provided
|
|
22
|
+
if not db_id and len(dbs) > 1:
|
|
23
|
+
raise HTTPException(
|
|
24
|
+
status_code=400, detail="The db_id query parameter is required when using multiple databases"
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
# Get and return the database with the given ID, or raise if not found
|
|
28
|
+
if db_id:
|
|
29
|
+
db = dbs.get(db_id)
|
|
30
|
+
if not db:
|
|
31
|
+
raise HTTPException(status_code=404, detail=f"Database with id '{db_id}' not found")
|
|
32
|
+
else:
|
|
33
|
+
db = next(iter(dbs.values()))
|
|
34
|
+
return db
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def get_knowledge_instance_by_db_id(knowledge_instances: List[Knowledge], db_id: Optional[str] = None) -> Knowledge:
|
|
38
|
+
"""Return the knowledge instance with the given ID, or the first knowledge instance if no ID is provided."""
|
|
39
|
+
if not db_id and len(knowledge_instances) == 1:
|
|
40
|
+
return next(iter(knowledge_instances))
|
|
41
|
+
|
|
42
|
+
if not db_id:
|
|
43
|
+
raise HTTPException(
|
|
44
|
+
status_code=400, detail="The db_id query parameter is required when using multiple databases"
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
for knowledge in knowledge_instances:
|
|
48
|
+
if knowledge.contents_db and knowledge.contents_db.id == db_id:
|
|
49
|
+
return knowledge
|
|
50
|
+
|
|
51
|
+
raise HTTPException(status_code=404, detail=f"Knowledge instance with id '{db_id}' not found")
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def get_run_input(run_dict: Dict[str, Any], is_workflow_run: bool = False) -> str:
|
|
55
|
+
"""Get the run input from the given run dictionary"""
|
|
56
|
+
|
|
57
|
+
if is_workflow_run:
|
|
58
|
+
step_executor_runs = run_dict.get("step_executor_runs", [])
|
|
59
|
+
if step_executor_runs:
|
|
60
|
+
for message in step_executor_runs[0].get("messages", []):
|
|
61
|
+
if message.get("role") == "user":
|
|
62
|
+
return message.get("content", "")
|
|
63
|
+
|
|
64
|
+
if run_dict.get("messages") is not None:
|
|
65
|
+
for message in run_dict["messages"]:
|
|
66
|
+
if message.get("role") == "user":
|
|
67
|
+
return message.get("content", "")
|
|
68
|
+
|
|
69
|
+
return ""
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def get_session_name(session: Dict[str, Any]) -> str:
|
|
73
|
+
"""Get the session name from the given session dictionary"""
|
|
74
|
+
|
|
75
|
+
# If session_data.session_name is set, return that
|
|
76
|
+
session_data = session.get("session_data")
|
|
77
|
+
if session_data is not None and session_data.get("session_name") is not None:
|
|
78
|
+
return session_data["session_name"]
|
|
79
|
+
|
|
80
|
+
# Otherwise use the original user message
|
|
81
|
+
else:
|
|
82
|
+
runs = session.get("runs", [])
|
|
83
|
+
|
|
84
|
+
# For teams, identify the first Team run and avoid using the first member's run
|
|
85
|
+
if session.get("session_type") == "team":
|
|
86
|
+
run = runs[0] if not runs[0].get("agent_id") else runs[1]
|
|
87
|
+
|
|
88
|
+
# For workflows, pass along the first step_executor_run
|
|
89
|
+
elif session.get("session_type") == "workflow":
|
|
90
|
+
try:
|
|
91
|
+
run = session["runs"][0]["step_executor_runs"][0]
|
|
92
|
+
except (KeyError, IndexError, TypeError):
|
|
93
|
+
return ""
|
|
94
|
+
|
|
95
|
+
# For agents, use the first run
|
|
96
|
+
else:
|
|
97
|
+
run = runs[0]
|
|
98
|
+
|
|
99
|
+
if not isinstance(run, dict):
|
|
100
|
+
run = run.to_dict()
|
|
101
|
+
|
|
102
|
+
if run and run.get("messages"):
|
|
103
|
+
for message in run["messages"]:
|
|
104
|
+
if message["role"] == "user":
|
|
105
|
+
return message["content"]
|
|
106
|
+
return ""
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
def process_image(file: UploadFile) -> Image:
|
|
110
|
+
content = file.file.read()
|
|
111
|
+
if not content:
|
|
112
|
+
raise HTTPException(status_code=400, detail="Empty file")
|
|
113
|
+
return Image(content=content)
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
def process_audio(file: UploadFile) -> Audio:
|
|
117
|
+
content = file.file.read()
|
|
118
|
+
if not content:
|
|
119
|
+
raise HTTPException(status_code=400, detail="Empty file")
|
|
120
|
+
format = None
|
|
121
|
+
if file.filename and "." in file.filename:
|
|
122
|
+
format = file.filename.split(".")[-1].lower()
|
|
123
|
+
elif file.content_type:
|
|
124
|
+
format = file.content_type.split("/")[-1]
|
|
125
|
+
|
|
126
|
+
return Audio(content=content, format=format)
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
def process_video(file: UploadFile) -> Video:
|
|
130
|
+
content = file.file.read()
|
|
131
|
+
if not content:
|
|
132
|
+
raise HTTPException(status_code=400, detail="Empty file")
|
|
133
|
+
return Video(content=content, format=file.content_type)
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
def process_document(file: UploadFile) -> Optional[FileMedia]:
|
|
137
|
+
try:
|
|
138
|
+
content = file.file.read()
|
|
139
|
+
if not content:
|
|
140
|
+
raise HTTPException(status_code=400, detail="Empty file")
|
|
141
|
+
|
|
142
|
+
return FileMedia(content=content)
|
|
143
|
+
except Exception as e:
|
|
144
|
+
logger.error(f"Error processing document {file.filename}: {e}")
|
|
145
|
+
return None
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
def format_tools(agent_tools: List[Union[Dict[str, Any], Toolkit, Function, Callable]]):
|
|
149
|
+
formatted_tools = []
|
|
150
|
+
if agent_tools is not None:
|
|
151
|
+
for tool in agent_tools:
|
|
152
|
+
if isinstance(tool, dict):
|
|
153
|
+
formatted_tools.append(tool)
|
|
154
|
+
elif isinstance(tool, Toolkit):
|
|
155
|
+
for _, f in tool.functions.items():
|
|
156
|
+
formatted_tools.append(f.to_dict())
|
|
157
|
+
elif isinstance(tool, Function):
|
|
158
|
+
formatted_tools.append(tool.to_dict())
|
|
159
|
+
elif callable(tool):
|
|
160
|
+
func = Function.from_callable(tool)
|
|
161
|
+
formatted_tools.append(func.to_dict())
|
|
162
|
+
else:
|
|
163
|
+
logger.warning(f"Unknown tool type: {type(tool)}")
|
|
164
|
+
return formatted_tools
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
def format_team_tools(team_tools: List[Function]):
|
|
168
|
+
return [tool.to_dict() for tool in team_tools]
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
def get_agent_by_id(agent_id: str, agents: Optional[List[Agent]] = None) -> Optional[Agent]:
|
|
172
|
+
if agent_id is None or agents is None:
|
|
173
|
+
return None
|
|
174
|
+
|
|
175
|
+
for agent in agents:
|
|
176
|
+
if agent.id == agent_id:
|
|
177
|
+
return agent
|
|
178
|
+
return None
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
def get_team_by_id(team_id: str, teams: Optional[List[Team]] = None) -> Optional[Team]:
|
|
182
|
+
if team_id is None or teams is None:
|
|
183
|
+
return None
|
|
184
|
+
|
|
185
|
+
for team in teams:
|
|
186
|
+
if team.id == team_id:
|
|
187
|
+
return team
|
|
188
|
+
return None
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
def get_workflow_by_id(workflow_id: str, workflows: Optional[List[Workflow]] = None) -> Optional[Workflow]:
|
|
192
|
+
if workflow_id is None or workflows is None:
|
|
193
|
+
return None
|
|
194
|
+
|
|
195
|
+
for workflow in workflows:
|
|
196
|
+
if workflow.id == workflow_id:
|
|
197
|
+
return workflow
|
|
198
|
+
return None
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
def get_workflow_input_schema_dict(workflow: Workflow) -> Optional[Dict[str, Any]]:
|
|
202
|
+
"""Get input schema as dictionary for API responses"""
|
|
203
|
+
|
|
204
|
+
# Priority 1: Explicit input_schema (Pydantic model)
|
|
205
|
+
if workflow.input_schema is not None:
|
|
206
|
+
try:
|
|
207
|
+
return workflow.input_schema.model_json_schema()
|
|
208
|
+
except Exception:
|
|
209
|
+
return None
|
|
210
|
+
|
|
211
|
+
# Priority 2: Auto-generate from custom kwargs
|
|
212
|
+
if workflow.steps and callable(workflow.steps):
|
|
213
|
+
custom_params = workflow.run_parameters
|
|
214
|
+
if custom_params and len(custom_params) > 1: # More than just 'message'
|
|
215
|
+
return _generate_schema_from_params(custom_params)
|
|
216
|
+
|
|
217
|
+
# Priority 3: No schema (expects string message)
|
|
218
|
+
return None
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
def _generate_schema_from_params(params: Dict[str, Any]) -> Dict[str, Any]:
|
|
222
|
+
"""Convert function parameters to JSON schema"""
|
|
223
|
+
properties: Dict[str, Any] = {}
|
|
224
|
+
required: List[str] = []
|
|
225
|
+
|
|
226
|
+
for param_name, param_info in params.items():
|
|
227
|
+
# Skip the default 'message' parameter for custom kwargs workflows
|
|
228
|
+
if param_name == "message":
|
|
229
|
+
continue
|
|
230
|
+
|
|
231
|
+
# Map Python types to JSON schema types
|
|
232
|
+
param_type = param_info.get("annotation", "str")
|
|
233
|
+
default_value = param_info.get("default")
|
|
234
|
+
is_required = param_info.get("required", False)
|
|
235
|
+
|
|
236
|
+
# Convert Python type annotations to JSON schema types
|
|
237
|
+
if param_type == "str":
|
|
238
|
+
properties[param_name] = {"type": "string"}
|
|
239
|
+
elif param_type == "bool":
|
|
240
|
+
properties[param_name] = {"type": "boolean"}
|
|
241
|
+
elif param_type == "int":
|
|
242
|
+
properties[param_name] = {"type": "integer"}
|
|
243
|
+
elif param_type == "float":
|
|
244
|
+
properties[param_name] = {"type": "number"}
|
|
245
|
+
elif "List" in str(param_type):
|
|
246
|
+
properties[param_name] = {"type": "array", "items": {"type": "string"}}
|
|
247
|
+
else:
|
|
248
|
+
properties[param_name] = {"type": "string"} # fallback
|
|
249
|
+
|
|
250
|
+
# Add default value if present
|
|
251
|
+
if default_value is not None:
|
|
252
|
+
properties[param_name]["default"] = default_value
|
|
253
|
+
|
|
254
|
+
# Add to required if no default value
|
|
255
|
+
if is_required and default_value is None:
|
|
256
|
+
required.append(param_name)
|
|
257
|
+
|
|
258
|
+
schema = {"type": "object", "properties": properties}
|
|
259
|
+
|
|
260
|
+
if required:
|
|
261
|
+
schema["required"] = required
|
|
262
|
+
|
|
263
|
+
return schema
|
|
264
|
+
|
|
265
|
+
|
|
266
|
+
def generate_id(name: Optional[str] = None) -> str:
|
|
267
|
+
if name:
|
|
268
|
+
return name.lower().replace(" ", "-").replace("_", "-")
|
|
269
|
+
else:
|
|
270
|
+
return str(uuid4())
|
|
@@ -17,10 +17,10 @@ def is_ai_foundry_reasoning_model(reasoning_model: Model) -> bool:
|
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
def get_ai_foundry_reasoning(reasoning_agent: "Agent", messages: List[Message]) -> Optional[Message]: # type: ignore # noqa: F821
|
|
20
|
-
from agno.run.
|
|
20
|
+
from agno.run.agent import RunOutput
|
|
21
21
|
|
|
22
22
|
try:
|
|
23
|
-
reasoning_agent_response:
|
|
23
|
+
reasoning_agent_response: RunOutput = reasoning_agent.run(messages=messages)
|
|
24
24
|
except Exception as e:
|
|
25
25
|
logger.warning(f"Reasoning error: {e}")
|
|
26
26
|
return None
|
|
@@ -43,10 +43,10 @@ def get_ai_foundry_reasoning(reasoning_agent: "Agent", messages: List[Message])
|
|
|
43
43
|
|
|
44
44
|
|
|
45
45
|
async def aget_ai_foundry_reasoning(reasoning_agent: "Agent", messages: List[Message]) -> Optional[Message]: # type: ignore # noqa: F821
|
|
46
|
-
from agno.run.
|
|
46
|
+
from agno.run.agent import RunOutput
|
|
47
47
|
|
|
48
48
|
try:
|
|
49
|
-
reasoning_agent_response:
|
|
49
|
+
reasoning_agent_response: RunOutput = await reasoning_agent.arun(messages=messages)
|
|
50
50
|
except Exception as e:
|
|
51
51
|
logger.warning(f"Reasoning error: {e}")
|
|
52
52
|
return None
|
agno/reasoning/deepseek.py
CHANGED
|
@@ -12,7 +12,7 @@ def is_deepseek_reasoning_model(reasoning_model: Model) -> bool:
|
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
def get_deepseek_reasoning(reasoning_agent: "Agent", messages: List[Message]) -> Optional[Message]: # type: ignore # noqa: F821
|
|
15
|
-
from agno.run.
|
|
15
|
+
from agno.run.agent import RunOutput
|
|
16
16
|
|
|
17
17
|
# Update system message role to "system"
|
|
18
18
|
for message in messages:
|
|
@@ -20,7 +20,7 @@ def get_deepseek_reasoning(reasoning_agent: "Agent", messages: List[Message]) ->
|
|
|
20
20
|
message.role = "system"
|
|
21
21
|
|
|
22
22
|
try:
|
|
23
|
-
reasoning_agent_response:
|
|
23
|
+
reasoning_agent_response: RunOutput = reasoning_agent.run(messages=messages)
|
|
24
24
|
except Exception as e:
|
|
25
25
|
logger.warning(f"Reasoning error: {e}")
|
|
26
26
|
return None
|
|
@@ -38,7 +38,7 @@ def get_deepseek_reasoning(reasoning_agent: "Agent", messages: List[Message]) ->
|
|
|
38
38
|
|
|
39
39
|
|
|
40
40
|
async def aget_deepseek_reasoning(reasoning_agent: "Agent", messages: List[Message]) -> Optional[Message]: # type: ignore # noqa: F821
|
|
41
|
-
from agno.run.
|
|
41
|
+
from agno.run.agent import RunOutput
|
|
42
42
|
|
|
43
43
|
# Update system message role to "system"
|
|
44
44
|
for message in messages:
|
|
@@ -46,7 +46,7 @@ async def aget_deepseek_reasoning(reasoning_agent: "Agent", messages: List[Messa
|
|
|
46
46
|
message.role = "system"
|
|
47
47
|
|
|
48
48
|
try:
|
|
49
|
-
reasoning_agent_response:
|
|
49
|
+
reasoning_agent_response: RunOutput = await reasoning_agent.arun(messages=messages)
|
|
50
50
|
except Exception as e:
|
|
51
51
|
logger.warning(f"Reasoning error: {e}")
|
|
52
52
|
return None
|
agno/reasoning/default.py
CHANGED
|
@@ -5,8 +5,8 @@ from typing import Any, Callable, Dict, List, Literal, Optional, Union
|
|
|
5
5
|
|
|
6
6
|
from agno.models.base import Model
|
|
7
7
|
from agno.reasoning.step import ReasoningSteps
|
|
8
|
+
from agno.tools import Toolkit
|
|
8
9
|
from agno.tools.function import Function
|
|
9
|
-
from agno.tools.toolkit import Toolkit
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
def get_default_reasoning_agent(
|
|
@@ -15,13 +15,12 @@ def get_default_reasoning_agent(
|
|
|
15
15
|
max_steps: int,
|
|
16
16
|
tools: Optional[List[Union[Toolkit, Callable, Function, Dict]]] = None,
|
|
17
17
|
use_json_mode: bool = False,
|
|
18
|
-
monitoring: bool = False,
|
|
19
18
|
telemetry: bool = True,
|
|
20
19
|
debug_mode: bool = False,
|
|
21
20
|
debug_level: Literal[1, 2] = 1,
|
|
22
21
|
session_state: Optional[Dict[str, Any]] = None,
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
dependencies: Optional[Dict[str, Any]] = None,
|
|
23
|
+
metadata: Optional[Dict[str, Any]] = None,
|
|
25
24
|
) -> Optional["Agent"]: # type: ignore # noqa: F821
|
|
26
25
|
from agno.agent import Agent
|
|
27
26
|
|
|
@@ -83,18 +82,14 @@ def get_default_reasoning_agent(
|
|
|
83
82
|
- Only create a single instance of ReasoningSteps for your response.\
|
|
84
83
|
"""),
|
|
85
84
|
tools=tools,
|
|
86
|
-
|
|
87
|
-
response_model=ReasoningSteps,
|
|
85
|
+
output_schema=ReasoningSteps,
|
|
88
86
|
use_json_mode=use_json_mode,
|
|
89
|
-
monitoring=monitoring,
|
|
90
87
|
telemetry=telemetry,
|
|
91
88
|
debug_mode=debug_mode,
|
|
92
89
|
debug_level=debug_level,
|
|
93
90
|
session_state=session_state,
|
|
94
|
-
|
|
95
|
-
|
|
91
|
+
dependencies=dependencies,
|
|
92
|
+
metadata=metadata,
|
|
96
93
|
)
|
|
97
94
|
|
|
98
|
-
agent.model.show_tool_calls = False # type: ignore
|
|
99
|
-
|
|
100
95
|
return agent
|
agno/reasoning/groq.py
CHANGED
|
@@ -12,7 +12,7 @@ def is_groq_reasoning_model(reasoning_model: Model) -> bool:
|
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
def get_groq_reasoning(reasoning_agent: "Agent", messages: List[Message]) -> Optional[Message]: # type: ignore # noqa: F821
|
|
15
|
-
from agno.run.
|
|
15
|
+
from agno.run.agent import RunOutput
|
|
16
16
|
|
|
17
17
|
# Update system message role to "system"
|
|
18
18
|
for message in messages:
|
|
@@ -20,7 +20,7 @@ def get_groq_reasoning(reasoning_agent: "Agent", messages: List[Message]) -> Opt
|
|
|
20
20
|
message.role = "system"
|
|
21
21
|
|
|
22
22
|
try:
|
|
23
|
-
reasoning_agent_response:
|
|
23
|
+
reasoning_agent_response: RunOutput = reasoning_agent.run(messages=messages)
|
|
24
24
|
except Exception as e:
|
|
25
25
|
logger.warning(f"Reasoning error: {e}")
|
|
26
26
|
return None
|
|
@@ -42,7 +42,7 @@ def get_groq_reasoning(reasoning_agent: "Agent", messages: List[Message]) -> Opt
|
|
|
42
42
|
|
|
43
43
|
|
|
44
44
|
async def aget_groq_reasoning(reasoning_agent: "Agent", messages: List[Message]) -> Optional[Message]: # type: ignore # noqa: F821
|
|
45
|
-
from agno.run.
|
|
45
|
+
from agno.run.agent import RunOutput
|
|
46
46
|
|
|
47
47
|
# Update system message role to "system"
|
|
48
48
|
for message in messages:
|
|
@@ -50,7 +50,7 @@ async def aget_groq_reasoning(reasoning_agent: "Agent", messages: List[Message])
|
|
|
50
50
|
message.role = "system"
|
|
51
51
|
|
|
52
52
|
try:
|
|
53
|
-
reasoning_agent_response:
|
|
53
|
+
reasoning_agent_response: RunOutput = await reasoning_agent.arun(messages=messages)
|
|
54
54
|
except Exception as e:
|
|
55
55
|
logger.warning(f"Reasoning error: {e}")
|
|
56
56
|
return None
|
agno/reasoning/helpers.py
CHANGED
|
@@ -9,25 +9,23 @@ from agno.utils.log import logger
|
|
|
9
9
|
|
|
10
10
|
def get_reasoning_agent(
|
|
11
11
|
reasoning_model: Model,
|
|
12
|
-
monitoring: bool = False,
|
|
13
12
|
telemetry: bool = False,
|
|
14
13
|
debug_mode: bool = False,
|
|
15
14
|
debug_level: Literal[1, 2] = 1,
|
|
16
15
|
session_state: Optional[Dict[str, Any]] = None,
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
dependencies: Optional[Dict[str, Any]] = None,
|
|
17
|
+
metadata: Optional[Dict[str, Any]] = None,
|
|
19
18
|
) -> "Agent": # type: ignore # noqa: F821
|
|
20
19
|
from agno.agent import Agent
|
|
21
20
|
|
|
22
21
|
return Agent(
|
|
23
22
|
model=reasoning_model,
|
|
24
|
-
monitoring=monitoring,
|
|
25
23
|
telemetry=telemetry,
|
|
26
24
|
debug_mode=debug_mode,
|
|
27
25
|
debug_level=debug_level,
|
|
28
26
|
session_state=session_state,
|
|
29
|
-
|
|
30
|
-
|
|
27
|
+
dependencies=dependencies,
|
|
28
|
+
metadata=metadata,
|
|
31
29
|
)
|
|
32
30
|
|
|
33
31
|
|
agno/reasoning/ollama.py
CHANGED
|
@@ -17,10 +17,10 @@ def is_ollama_reasoning_model(reasoning_model: Model) -> bool:
|
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
def get_ollama_reasoning(reasoning_agent: "Agent", messages: List[Message]) -> Optional[Message]: # type: ignore # noqa: F821
|
|
20
|
-
from agno.run.
|
|
20
|
+
from agno.run.agent import RunOutput
|
|
21
21
|
|
|
22
22
|
try:
|
|
23
|
-
reasoning_agent_response:
|
|
23
|
+
reasoning_agent_response: RunOutput = reasoning_agent.run(messages=messages)
|
|
24
24
|
except Exception as e:
|
|
25
25
|
logger.warning(f"Reasoning error: {e}")
|
|
26
26
|
return None
|
|
@@ -43,10 +43,10 @@ def get_ollama_reasoning(reasoning_agent: "Agent", messages: List[Message]) -> O
|
|
|
43
43
|
|
|
44
44
|
|
|
45
45
|
async def aget_ollama_reasoning(reasoning_agent: "Agent", messages: List[Message]) -> Optional[Message]: # type: ignore # noqa: F821
|
|
46
|
-
from agno.run.
|
|
46
|
+
from agno.run.agent import RunOutput
|
|
47
47
|
|
|
48
48
|
try:
|
|
49
|
-
reasoning_agent_response:
|
|
49
|
+
reasoning_agent_response: RunOutput = await reasoning_agent.arun(messages=messages)
|
|
50
50
|
except Exception as e:
|
|
51
51
|
logger.warning(f"Reasoning error: {e}")
|
|
52
52
|
return None
|
agno/reasoning/openai.py
CHANGED
|
@@ -26,10 +26,10 @@ def is_openai_reasoning_model(reasoning_model: Model) -> bool:
|
|
|
26
26
|
|
|
27
27
|
|
|
28
28
|
def get_openai_reasoning(reasoning_agent: "Agent", messages: List[Message]) -> Optional[Message]: # type: ignore # noqa: F821
|
|
29
|
-
from agno.run.
|
|
29
|
+
from agno.run.agent import RunOutput
|
|
30
30
|
|
|
31
31
|
try:
|
|
32
|
-
reasoning_agent_response:
|
|
32
|
+
reasoning_agent_response: RunOutput = reasoning_agent.run(messages=messages)
|
|
33
33
|
except Exception as e:
|
|
34
34
|
logger.warning(f"Reasoning error: {e}")
|
|
35
35
|
return None
|
|
@@ -52,7 +52,7 @@ def get_openai_reasoning(reasoning_agent: "Agent", messages: List[Message]) -> O
|
|
|
52
52
|
|
|
53
53
|
|
|
54
54
|
async def aget_openai_reasoning(reasoning_agent: "Agent", messages: List[Message]) -> Optional[Message]: # type: ignore # noqa: F821
|
|
55
|
-
from agno.run.
|
|
55
|
+
from agno.run.agent import RunOutput
|
|
56
56
|
|
|
57
57
|
# Update system message role to "system"
|
|
58
58
|
for message in messages:
|
|
@@ -60,7 +60,7 @@ async def aget_openai_reasoning(reasoning_agent: "Agent", messages: List[Message
|
|
|
60
60
|
message.role = "system"
|
|
61
61
|
|
|
62
62
|
try:
|
|
63
|
-
reasoning_agent_response:
|
|
63
|
+
reasoning_agent_response: RunOutput = await reasoning_agent.arun(messages=messages)
|
|
64
64
|
except Exception as e:
|
|
65
65
|
logger.warning(f"Reasoning error: {e}")
|
|
66
66
|
return None
|