agno 1.8.1__py3-none-any.whl → 2.0.0__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 +3143 -4170
- agno/api/agent.py +11 -67
- agno/api/api.py +5 -46
- agno/api/evals.py +8 -19
- 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 +11 -66
- 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 +1743 -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 +1432 -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 +882 -0
- agno/db/in_memory/utils.py +172 -0
- agno/db/json/__init__.py +3 -0
- agno/db/json/json_db.py +1045 -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 +1416 -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 +297 -0
- agno/db/postgres/__init__.py +3 -0
- agno/db/postgres/postgres.py +1710 -0
- agno/db/postgres/schemas.py +124 -0
- agno/db/postgres/utils.py +280 -0
- agno/db/redis/__init__.py +3 -0
- agno/db/redis/redis.py +1367 -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 +1712 -0
- agno/db/singlestore/utils.py +326 -0
- agno/db/sqlite/__init__.py +3 -0
- agno/db/sqlite/schemas.py +119 -0
- agno/db/sqlite/sqlite.py +1676 -0
- agno/db/sqlite/utils.py +268 -0
- agno/db/utils.py +88 -0
- agno/eval/__init__.py +14 -0
- agno/eval/accuracy.py +154 -48
- 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 +15 -11
- 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 +1551 -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 +47 -65
- agno/knowledge/reader/docx_reader.py +83 -0
- agno/{document → knowledge}/reader/firecrawl_reader.py +42 -21
- agno/{document → knowledge}/reader/json_reader.py +30 -9
- agno/{document → knowledge}/reader/markdown_reader.py +58 -9
- agno/{document → knowledge}/reader/pdf_reader.py +71 -126
- agno/knowledge/reader/reader_factory.py +268 -0
- agno/knowledge/reader/s3_reader.py +101 -0
- agno/{document → knowledge}/reader/text_reader.py +31 -10
- agno/knowledge/reader/url_reader.py +128 -0
- agno/knowledge/reader/web_search_reader.py +366 -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/media.py +269 -268
- 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 +131 -131
- agno/models/aws/bedrock.py +110 -182
- agno/models/aws/claude.py +64 -18
- agno/models/azure/ai_foundry.py +73 -23
- agno/models/base.py +346 -290
- agno/models/cerebras/cerebras.py +84 -27
- agno/models/cohere/chat.py +106 -98
- agno/models/google/gemini.py +105 -46
- 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 +46 -151
- 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 +85 -47
- agno/models/openai/chat.py +154 -37
- 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 +15 -9
- 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 +497 -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 +77 -33
- 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 +32 -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 +29 -0
- agno/os/mcp.py +235 -0
- agno/os/router.py +1400 -0
- agno/os/routers/__init__.py +3 -0
- agno/os/routers/evals/__init__.py +3 -0
- agno/os/routers/evals/evals.py +393 -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 +850 -0
- agno/os/routers/knowledge/schemas.py +118 -0
- agno/os/routers/memory/__init__.py +3 -0
- agno/os/routers/memory/memory.py +410 -0
- agno/os/routers/memory/schemas.py +58 -0
- agno/os/routers/metrics/__init__.py +3 -0
- agno/os/routers/metrics/metrics.py +178 -0
- agno/os/routers/metrics/schemas.py +47 -0
- agno/os/routers/session/__init__.py +3 -0
- agno/os/routers/session/session.py +536 -0
- agno/os/schema.py +945 -0
- agno/{app/playground → os}/settings.py +7 -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/agent.py +633 -0
- agno/run/base.py +53 -77
- agno/run/cancel.py +81 -0
- agno/run/team.py +243 -96
- agno/run/workflow.py +550 -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 +3260 -4824
- 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 +43 -23
- agno/tools/browserbase.py +13 -4
- agno/tools/calcom.py +12 -10
- agno/tools/calculator.py +10 -27
- agno/tools/cartesia.py +20 -17
- 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 +22 -12
- agno/tools/daytona.py +13 -16
- agno/tools/decorator.py +6 -3
- agno/tools/desi_vocal.py +17 -8
- 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 +62 -62
- agno/tools/eleven_labs.py +36 -29
- agno/tools/email.py +4 -1
- agno/tools/evm.py +7 -1
- agno/tools/exa.py +19 -14
- agno/tools/fal.py +30 -30
- agno/tools/file.py +9 -8
- agno/tools/financial_datasets.py +25 -44
- agno/tools/firecrawl.py +22 -22
- agno/tools/function.py +127 -18
- agno/tools/giphy.py +23 -11
- 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 +19 -34
- agno/tools/linkup.py +5 -1
- agno/tools/local_file_system.py +8 -5
- agno/tools/lumalab.py +32 -20
- agno/tools/mcp.py +1 -2
- 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 +33 -15
- agno/tools/models/gemini.py +59 -32
- agno/tools/models/groq.py +30 -23
- agno/tools/models/nebius.py +28 -12
- agno/tools/models_labs.py +40 -16
- 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 +58 -32
- agno/tools/openbb.py +12 -11
- agno/tools/opencv.py +63 -47
- 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 +55 -42
- 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 +100 -123
- agno/utils/gemini.py +32 -2
- agno/utils/knowledge.py +29 -0
- agno/utils/log.py +54 -4
- agno/utils/mcp.py +68 -10
- agno/utils/media.py +39 -0
- agno/utils/message.py +12 -1
- agno/utils/models/aws_claude.py +1 -1
- agno/utils/models/claude.py +47 -4
- agno/utils/models/cohere.py +1 -1
- agno/utils/models/mistral.py +8 -7
- agno/utils/models/schema_utils.py +3 -3
- agno/utils/models/watsonx.py +1 -1
- agno/utils/openai.py +1 -1
- agno/utils/pprint.py +33 -32
- agno/utils/print_response/agent.py +779 -0
- agno/utils/print_response/team.py +1669 -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/streamlit.py +481 -0
- 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} +207 -49
- agno/workflow/{v2/steps.py → steps.py} +147 -66
- agno/workflow/types.py +482 -0
- agno/workflow/workflow.py +2410 -696
- agno-2.0.0.dist-info/METADATA +494 -0
- agno-2.0.0.dist-info/RECORD +515 -0
- agno-2.0.0.dist-info/licenses/LICENSE +201 -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/response.py +0 -467
- 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-1.8.1.dist-info/licenses/LICENSE +0 -375
- /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.0.dist-info}/WHEEL +0 -0
- {agno-1.8.1.dist-info → agno-2.0.0.dist-info}/top_level.txt +0 -0
agno/api/agent.py
CHANGED
|
@@ -1,84 +1,28 @@
|
|
|
1
1
|
from agno.api.api import api
|
|
2
2
|
from agno.api.routes import ApiRoutes
|
|
3
|
-
from agno.api.schemas.agent import
|
|
4
|
-
from agno.cli.settings import agno_cli_settings
|
|
3
|
+
from agno.api.schemas.agent import AgentRunCreate
|
|
5
4
|
from agno.utils.log import log_debug
|
|
6
5
|
|
|
7
6
|
|
|
8
|
-
def
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
log_debug("Logging Agent Session")
|
|
13
|
-
with api.AuthenticatedClient() as api_client:
|
|
14
|
-
try:
|
|
15
|
-
api_client.post(
|
|
16
|
-
ApiRoutes.AGENT_SESSION_CREATE if monitor else ApiRoutes.AGENT_TELEMETRY_SESSION_CREATE,
|
|
17
|
-
json={"session": session.model_dump(exclude_none=True)},
|
|
18
|
-
)
|
|
19
|
-
except Exception as e:
|
|
20
|
-
log_debug(f"Could not create Agent session: {e}")
|
|
21
|
-
return
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
def create_agent_run(run: AgentRunCreate, monitor: bool = False) -> None:
|
|
25
|
-
if not agno_cli_settings.api_enabled:
|
|
26
|
-
return
|
|
27
|
-
|
|
28
|
-
with api.AuthenticatedClient() as api_client:
|
|
7
|
+
def create_agent_run(run: AgentRunCreate) -> None:
|
|
8
|
+
"""Telemetry recording for Agent runs"""
|
|
9
|
+
with api.Client() as api_client:
|
|
29
10
|
try:
|
|
30
11
|
api_client.post(
|
|
31
|
-
ApiRoutes.
|
|
32
|
-
json=
|
|
12
|
+
ApiRoutes.RUN_CREATE,
|
|
13
|
+
json=run.model_dump(exclude_none=True),
|
|
33
14
|
)
|
|
34
15
|
except Exception as e:
|
|
35
16
|
log_debug(f"Could not create Agent run: {e}")
|
|
36
|
-
return
|
|
37
|
-
|
|
38
17
|
|
|
39
|
-
async def acreate_agent_run(run: AgentRunCreate, monitor: bool = False) -> None:
|
|
40
|
-
if not agno_cli_settings.api_enabled:
|
|
41
|
-
return
|
|
42
18
|
|
|
43
|
-
|
|
19
|
+
async def acreate_agent_run(run: AgentRunCreate) -> None:
|
|
20
|
+
"""Telemetry recording for async Agent runs"""
|
|
21
|
+
async with api.AsyncClient() as api_client:
|
|
44
22
|
try:
|
|
45
23
|
await api_client.post(
|
|
46
|
-
ApiRoutes.
|
|
47
|
-
json=
|
|
24
|
+
ApiRoutes.RUN_CREATE,
|
|
25
|
+
json=run.model_dump(exclude_none=True),
|
|
48
26
|
)
|
|
49
27
|
except Exception as e:
|
|
50
28
|
log_debug(f"Could not create Agent run: {e}")
|
|
51
|
-
return
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
def create_agent(agent: AgentCreate) -> None:
|
|
55
|
-
if not agno_cli_settings.api_enabled:
|
|
56
|
-
return
|
|
57
|
-
|
|
58
|
-
with api.AuthenticatedClient() as api_client:
|
|
59
|
-
try:
|
|
60
|
-
api_client.post(
|
|
61
|
-
ApiRoutes.AGENT_CREATE,
|
|
62
|
-
json=agent.model_dump(exclude_none=True),
|
|
63
|
-
)
|
|
64
|
-
|
|
65
|
-
log_debug(f"Created Agent on Platform. ID: {agent.agent_id}")
|
|
66
|
-
except Exception as e:
|
|
67
|
-
log_debug(f"Could not create Agent: {e}")
|
|
68
|
-
return
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
async def acreate_agent(agent: AgentCreate) -> None:
|
|
72
|
-
if not agno_cli_settings.api_enabled:
|
|
73
|
-
return
|
|
74
|
-
|
|
75
|
-
async with api.AuthenticatedAsyncClient() as api_client:
|
|
76
|
-
try:
|
|
77
|
-
await api_client.post(
|
|
78
|
-
ApiRoutes.AGENT_CREATE,
|
|
79
|
-
json=agent.model_dump(exclude_none=True),
|
|
80
|
-
)
|
|
81
|
-
log_debug(f"Created Agent on Platform. ID: {agent.agent_id}")
|
|
82
|
-
except Exception as e:
|
|
83
|
-
log_debug(f"Could not create Agent: {e}")
|
|
84
|
-
return
|
agno/api/api.py
CHANGED
|
@@ -1,74 +1,33 @@
|
|
|
1
|
-
from
|
|
2
|
-
from typing import Dict, Optional
|
|
1
|
+
from typing import Dict
|
|
3
2
|
|
|
4
3
|
from httpx import AsyncClient as HttpxAsyncClient
|
|
5
4
|
from httpx import Client as HttpxClient
|
|
6
5
|
from httpx import Response
|
|
7
6
|
|
|
8
|
-
from agno.
|
|
9
|
-
from agno.cli.settings import agno_cli_settings
|
|
10
|
-
from agno.constants import AGNO_API_KEY_ENV_VAR
|
|
11
|
-
from agno.utils.log import logger
|
|
7
|
+
from agno.api.settings import agno_api_settings
|
|
12
8
|
|
|
13
9
|
|
|
14
10
|
class Api:
|
|
15
11
|
def __init__(self):
|
|
16
12
|
self.headers: Dict[str, str] = {
|
|
17
|
-
"user-agent": f"{
|
|
13
|
+
"user-agent": f"{agno_api_settings.app_name}/{agno_api_settings.app_version}",
|
|
18
14
|
"Content-Type": "application/json",
|
|
19
15
|
}
|
|
20
|
-
self._auth_token: Optional[str] = None
|
|
21
|
-
self._authenticated_headers = None
|
|
22
|
-
|
|
23
|
-
@property
|
|
24
|
-
def auth_token(self) -> Optional[str]:
|
|
25
|
-
if self._auth_token is None:
|
|
26
|
-
try:
|
|
27
|
-
self._auth_token = read_auth_token()
|
|
28
|
-
except Exception as e:
|
|
29
|
-
logger.debug(f"Failed to read auth token: {e}")
|
|
30
|
-
return self._auth_token
|
|
31
|
-
|
|
32
|
-
@property
|
|
33
|
-
def authenticated_headers(self) -> Dict[str, str]:
|
|
34
|
-
if self._authenticated_headers is None:
|
|
35
|
-
self._authenticated_headers = self.headers.copy()
|
|
36
|
-
token = self.auth_token
|
|
37
|
-
if token is not None:
|
|
38
|
-
self._authenticated_headers[agno_cli_settings.auth_token_header] = token
|
|
39
|
-
agno_api_key = getenv(AGNO_API_KEY_ENV_VAR)
|
|
40
|
-
if agno_api_key is not None:
|
|
41
|
-
self._authenticated_headers["Authorization"] = f"Bearer {agno_api_key}"
|
|
42
|
-
return self._authenticated_headers
|
|
43
16
|
|
|
44
17
|
def Client(self) -> HttpxClient:
|
|
45
18
|
return HttpxClient(
|
|
46
|
-
base_url=
|
|
19
|
+
base_url=agno_api_settings.api_url,
|
|
47
20
|
headers=self.headers,
|
|
48
21
|
timeout=60,
|
|
49
22
|
)
|
|
50
23
|
|
|
51
|
-
def AuthenticatedClient(self) -> HttpxClient:
|
|
52
|
-
return HttpxClient(
|
|
53
|
-
base_url=agno_cli_settings.api_url,
|
|
54
|
-
headers=self.authenticated_headers,
|
|
55
|
-
timeout=60,
|
|
56
|
-
)
|
|
57
|
-
|
|
58
24
|
def AsyncClient(self) -> HttpxAsyncClient:
|
|
59
25
|
return HttpxAsyncClient(
|
|
60
|
-
base_url=
|
|
26
|
+
base_url=agno_api_settings.api_url,
|
|
61
27
|
headers=self.headers,
|
|
62
28
|
timeout=60,
|
|
63
29
|
)
|
|
64
30
|
|
|
65
|
-
def AuthenticatedAsyncClient(self) -> HttpxAsyncClient:
|
|
66
|
-
return HttpxAsyncClient(
|
|
67
|
-
base_url=agno_cli_settings.api_url,
|
|
68
|
-
headers=self.authenticated_headers,
|
|
69
|
-
timeout=60,
|
|
70
|
-
)
|
|
71
|
-
|
|
72
31
|
|
|
73
32
|
api = Api()
|
|
74
33
|
|
agno/api/evals.py
CHANGED
|
@@ -1,33 +1,22 @@
|
|
|
1
1
|
from agno.api.api import api
|
|
2
2
|
from agno.api.routes import ApiRoutes
|
|
3
3
|
from agno.api.schemas.evals import EvalRunCreate
|
|
4
|
-
from agno.cli.settings import agno_cli_settings
|
|
5
4
|
from agno.utils.log import log_debug
|
|
6
5
|
|
|
7
6
|
|
|
8
|
-
def
|
|
9
|
-
"""
|
|
10
|
-
|
|
11
|
-
return
|
|
12
|
-
|
|
13
|
-
log_debug("Calling the API to create an evaluation run")
|
|
14
|
-
with api.AuthenticatedClient() as api_client:
|
|
7
|
+
def create_eval_run_telemetry(eval_run: EvalRunCreate) -> None:
|
|
8
|
+
"""Telemetry recording for Eval runs"""
|
|
9
|
+
with api.Client() as api_client:
|
|
15
10
|
try:
|
|
16
|
-
api_client.post(ApiRoutes.EVAL_RUN_CREATE, json=
|
|
11
|
+
api_client.post(ApiRoutes.EVAL_RUN_CREATE, json=eval_run.model_dump(exclude_none=True))
|
|
17
12
|
except Exception as e:
|
|
18
13
|
log_debug(f"Could not create evaluation run: {e}")
|
|
19
|
-
return
|
|
20
|
-
|
|
21
14
|
|
|
22
|
-
async def async_create_eval_run(eval_run: EvalRunCreate) -> None:
|
|
23
|
-
"""Call the API to create an evaluation run."""
|
|
24
|
-
if not agno_cli_settings.api_enabled:
|
|
25
|
-
return
|
|
26
15
|
|
|
27
|
-
|
|
28
|
-
|
|
16
|
+
async def async_create_eval_run_telemetry(eval_run: EvalRunCreate) -> None:
|
|
17
|
+
"""Telemetry recording for async Eval runs"""
|
|
18
|
+
async with api.AsyncClient() as api_client:
|
|
29
19
|
try:
|
|
30
|
-
await api_client.post(ApiRoutes.EVAL_RUN_CREATE, json=
|
|
20
|
+
await api_client.post(ApiRoutes.EVAL_RUN_CREATE, json=eval_run.model_dump(exclude_none=True))
|
|
31
21
|
except Exception as e:
|
|
32
22
|
log_debug(f"Could not create evaluation run: {e}")
|
|
33
|
-
return
|
agno/api/os.py
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
from agno.api.api import api
|
|
2
|
+
from agno.api.routes import ApiRoutes
|
|
3
|
+
from agno.api.schemas.os import OSLaunch
|
|
4
|
+
from agno.utils.log import log_debug
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def log_os_telemetry(launch: OSLaunch) -> None:
|
|
8
|
+
"""Telemetry recording for OS launches"""
|
|
9
|
+
with api.Client() as api_client:
|
|
10
|
+
try:
|
|
11
|
+
response = api_client.post(
|
|
12
|
+
ApiRoutes.AGENT_OS_LAUNCH,
|
|
13
|
+
json=launch.model_dump(exclude_none=True),
|
|
14
|
+
)
|
|
15
|
+
response.raise_for_status()
|
|
16
|
+
except Exception as e:
|
|
17
|
+
log_debug(f"Could not create OS launch: {e}")
|
agno/api/routes.py
CHANGED
|
@@ -3,46 +3,11 @@ from dataclasses import dataclass
|
|
|
3
3
|
|
|
4
4
|
@dataclass
|
|
5
5
|
class ApiRoutes:
|
|
6
|
-
|
|
7
|
-
USER_HEALTH: str = "/v1/user/health"
|
|
8
|
-
USER_SIGN_IN: str = "/v1/user/signin"
|
|
9
|
-
USER_CLI_AUTH: str = "/v1/user/cliauth"
|
|
10
|
-
USER_AUTHENTICATE: str = "/v1/user/authenticate"
|
|
11
|
-
USER_CREATE_ANON: str = "/v1/user/create/anon"
|
|
6
|
+
"""API routes for telemetry recordings"""
|
|
12
7
|
|
|
13
|
-
#
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
WORKSPACE_DELETE: str = "/v1/workspace/delete"
|
|
17
|
-
WORKSPACE_EVENT_CREATE: str = "/v1/workspace/event/create"
|
|
8
|
+
# Runs
|
|
9
|
+
RUN_CREATE: str = "/telemetry/runs"
|
|
10
|
+
EVAL_RUN_CREATE: str = "/telemetry/evals"
|
|
18
11
|
|
|
19
|
-
#
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
# Agent paths
|
|
23
|
-
AGENT_SESSION_CREATE: str = "/v1/agent-sessions"
|
|
24
|
-
AGENT_RUN_CREATE: str = "/v1/agent-runs"
|
|
25
|
-
AGENT_CREATE: str = "/v2/agents"
|
|
26
|
-
|
|
27
|
-
# App paths
|
|
28
|
-
APP_CREATE: str = "/v2/apps"
|
|
29
|
-
# Team paths
|
|
30
|
-
TEAM_RUN_CREATE: str = "/v1/team-runs"
|
|
31
|
-
TEAM_SESSION_CREATE: str = "/v1/team-sessions"
|
|
32
|
-
TEAM_CREATE: str = "/v2/teams"
|
|
33
|
-
|
|
34
|
-
# Workflow paths
|
|
35
|
-
WORKFLOW_CREATE: str = "/v2/workflows"
|
|
36
|
-
# Telemetry paths
|
|
37
|
-
# TODO: Update to use the new telemetry paths
|
|
38
|
-
AGENT_TELEMETRY_SESSION_CREATE: str = "/v1/telemetry/agent/session/create"
|
|
39
|
-
AGENT_TELEMETRY_RUN_CREATE: str = "/v1/telemetry/agent/run/create"
|
|
40
|
-
|
|
41
|
-
TEAM_TELEMETRY_RUN_CREATE: str = "/v1/telemetry/team-runs"
|
|
42
|
-
|
|
43
|
-
# Playground paths
|
|
44
|
-
PLAYGROUND_ENDPOINT_CREATE: str = "/v1/playground/endpoint/create"
|
|
45
|
-
PLAYGROUND_APP_DEPLOY: str = "/v1/playground/app/deploy"
|
|
46
|
-
|
|
47
|
-
# Eval paths
|
|
48
|
-
EVAL_RUN_CREATE: str = "/v2/eval-runs"
|
|
12
|
+
# OS launch
|
|
13
|
+
AGENT_OS_LAUNCH: str = "/telemetry/os"
|
agno/api/schemas/__init__.py
CHANGED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
from enum import Enum
|
|
2
|
+
|
|
3
|
+
from agno.api.schemas.agent import AgentRunCreate
|
|
4
|
+
from agno.api.schemas.evals import EvalRunCreate
|
|
5
|
+
from agno.api.schemas.os import OSLaunch
|
|
6
|
+
from agno.api.schemas.team import TeamRunCreate
|
|
7
|
+
from agno.api.schemas.workflows import WorkflowRunCreate
|
|
8
|
+
|
|
9
|
+
__all__ = ["AgentRunCreate", "OSLaunch", "EvalRunCreate", "TeamRunCreate", "WorkflowRunCreate"]
|
agno/api/schemas/agent.py
CHANGED
|
@@ -1,32 +1,16 @@
|
|
|
1
1
|
from typing import Any, Dict, Optional
|
|
2
2
|
|
|
3
|
-
from pydantic import BaseModel
|
|
3
|
+
from pydantic import BaseModel, Field
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
class AgentSessionCreate(BaseModel):
|
|
7
|
-
"""Data sent to API to create an Agent Session"""
|
|
8
|
-
|
|
9
|
-
session_id: str
|
|
10
|
-
agent_data: Optional[Dict[str, Any]] = None
|
|
5
|
+
from agno.api.schemas.utils import TelemetryRunEventType, get_sdk_version
|
|
11
6
|
|
|
12
7
|
|
|
13
8
|
class AgentRunCreate(BaseModel):
|
|
14
9
|
"""Data sent to API to create an Agent Run"""
|
|
15
10
|
|
|
16
11
|
session_id: str
|
|
17
|
-
team_session_id: Optional[str] = None
|
|
18
|
-
workflow_session_id: Optional[str] = None
|
|
19
12
|
run_id: Optional[str] = None
|
|
20
|
-
|
|
21
|
-
agent_data: Optional[Dict[str, Any]] = None
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
class AgentCreate(BaseModel):
|
|
25
|
-
"""Data sent to API to create an Agent"""
|
|
13
|
+
data: Optional[Dict[Any, Any]] = None
|
|
26
14
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
app_id: Optional[str] = None
|
|
30
|
-
workflow_id: Optional[str] = None
|
|
31
|
-
name: Optional[str] = None
|
|
32
|
-
config: Dict[str, Any]
|
|
15
|
+
sdk_version: str = Field(default_factory=get_sdk_version)
|
|
16
|
+
type: TelemetryRunEventType = TelemetryRunEventType.AGENT
|
agno/api/schemas/evals.py
CHANGED
|
@@ -1,25 +1,16 @@
|
|
|
1
|
-
from enum import Enum
|
|
2
1
|
from typing import Any, Dict, Optional
|
|
3
2
|
|
|
4
|
-
from pydantic import BaseModel
|
|
3
|
+
from pydantic import BaseModel, Field
|
|
5
4
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
ACCURACY = "accuracy"
|
|
9
|
-
PERFORMANCE = "performance"
|
|
10
|
-
RELIABILITY = "reliability"
|
|
5
|
+
from agno.api.schemas.utils import get_sdk_version
|
|
6
|
+
from agno.db.schemas.evals import EvalType
|
|
11
7
|
|
|
12
8
|
|
|
13
9
|
class EvalRunCreate(BaseModel):
|
|
14
|
-
"""Data sent to the API to create an
|
|
15
|
-
|
|
16
|
-
agent_id: Optional[str] = None
|
|
17
|
-
model_id: Optional[str] = None
|
|
18
|
-
model_provider: Optional[str] = None
|
|
19
|
-
team_id: Optional[str] = None
|
|
20
|
-
name: Optional[str] = None
|
|
21
|
-
evaluated_entity_name: Optional[str] = None
|
|
10
|
+
"""Data sent to the telemetry API to create an Eval run event"""
|
|
22
11
|
|
|
23
12
|
run_id: str
|
|
24
13
|
eval_type: EvalType
|
|
25
|
-
|
|
14
|
+
data: Optional[Dict[Any, Any]] = None
|
|
15
|
+
|
|
16
|
+
sdk_version: str = Field(default_factory=get_sdk_version)
|
agno/api/schemas/os.py
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
from typing import Any, Dict, Optional
|
|
2
|
+
|
|
3
|
+
from pydantic import BaseModel, Field
|
|
4
|
+
|
|
5
|
+
from agno.api.schemas.utils import get_sdk_version
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class OSLaunch(BaseModel):
|
|
9
|
+
"""Data sent to API to create an OS Launch"""
|
|
10
|
+
|
|
11
|
+
os_id: Optional[str] = None
|
|
12
|
+
data: Optional[Dict[Any, Any]] = None
|
|
13
|
+
|
|
14
|
+
sdk_version: str = Field(default_factory=get_sdk_version)
|
agno/api/schemas/team.py
CHANGED
|
@@ -1,32 +1,16 @@
|
|
|
1
1
|
from typing import Any, Dict, Optional
|
|
2
2
|
|
|
3
|
-
from pydantic import BaseModel
|
|
3
|
+
from pydantic import BaseModel, Field
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
class TeamSessionCreate(BaseModel):
|
|
7
|
-
"""Data sent to API to create a Team Session"""
|
|
8
|
-
|
|
9
|
-
session_id: str
|
|
10
|
-
team_data: Optional[Dict[str, Any]] = None
|
|
5
|
+
from agno.api.schemas.utils import TelemetryRunEventType, get_sdk_version
|
|
11
6
|
|
|
12
7
|
|
|
13
8
|
class TeamRunCreate(BaseModel):
|
|
14
9
|
"""Data sent to API to create a Team Run"""
|
|
15
10
|
|
|
16
11
|
session_id: str
|
|
17
|
-
team_session_id: Optional[str] = None
|
|
18
|
-
workflow_session_id: Optional[str] = None
|
|
19
12
|
run_id: Optional[str] = None
|
|
20
|
-
|
|
21
|
-
team_data: Optional[Dict[str, Any]] = None
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
class TeamCreate(BaseModel):
|
|
25
|
-
"""Data sent to API to create aTeam"""
|
|
13
|
+
data: Optional[Dict[Any, Any]] = None
|
|
26
14
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
app_id: Optional[str] = None
|
|
30
|
-
workflow_id: Optional[str] = None
|
|
31
|
-
name: Optional[str] = None
|
|
32
|
-
config: Dict[str, Any]
|
|
15
|
+
sdk_version: str = Field(default_factory=get_sdk_version)
|
|
16
|
+
type: TelemetryRunEventType = TelemetryRunEventType.TEAM
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
from enum import Enum
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class TelemetryRunEventType(str, Enum):
|
|
5
|
+
AGENT = "agent"
|
|
6
|
+
EVAL = "eval"
|
|
7
|
+
TEAM = "team"
|
|
8
|
+
WORKFLOW = "workflow"
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def get_sdk_version() -> str:
|
|
12
|
+
"""Return the installed agno SDK version from package metadata.
|
|
13
|
+
|
|
14
|
+
Falls back to "unknown" if the package metadata isn't available.
|
|
15
|
+
"""
|
|
16
|
+
from importlib.metadata import version as pkg_version
|
|
17
|
+
|
|
18
|
+
try:
|
|
19
|
+
return pkg_version("agno")
|
|
20
|
+
except Exception:
|
|
21
|
+
return "unknown"
|
agno/api/schemas/workflows.py
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
from typing import Any, Dict, Optional
|
|
2
2
|
|
|
3
|
-
from pydantic import BaseModel
|
|
3
|
+
from pydantic import BaseModel, Field
|
|
4
4
|
|
|
5
|
+
from agno.api.schemas.utils import TelemetryRunEventType, get_sdk_version
|
|
5
6
|
|
|
6
|
-
class WorkflowCreate(BaseModel):
|
|
7
|
-
"""Data sent to API to create aWorkflow"""
|
|
8
7
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
class WorkflowRunCreate(BaseModel):
|
|
9
|
+
"""Data sent to API to create a Workflow Run"""
|
|
10
|
+
|
|
11
|
+
session_id: str
|
|
12
|
+
run_id: Optional[str] = None
|
|
13
|
+
data: Optional[Dict[Any, Any]] = None
|
|
14
|
+
|
|
15
|
+
sdk_version: str = Field(default_factory=get_sdk_version)
|
|
16
|
+
type: TelemetryRunEventType = TelemetryRunEventType.WORKFLOW
|
agno/api/settings.py
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from importlib import metadata
|
|
4
|
+
|
|
5
|
+
from pydantic import field_validator
|
|
6
|
+
from pydantic_core.core_schema import ValidationInfo
|
|
7
|
+
from pydantic_settings import BaseSettings, SettingsConfigDict
|
|
8
|
+
|
|
9
|
+
from agno.utils.log import logger
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class AgnoAPISettings(BaseSettings):
|
|
13
|
+
app_name: str = "agno"
|
|
14
|
+
app_version: str = metadata.version("agno")
|
|
15
|
+
|
|
16
|
+
api_runtime: str = "prd"
|
|
17
|
+
alpha_features: bool = False
|
|
18
|
+
|
|
19
|
+
api_url: str = "https://os-api.agno.com"
|
|
20
|
+
|
|
21
|
+
model_config = SettingsConfigDict(env_prefix="AGNO_")
|
|
22
|
+
|
|
23
|
+
@field_validator("api_runtime", mode="before")
|
|
24
|
+
def validate_runtime_env(cls, v):
|
|
25
|
+
"""Validate api_runtime."""
|
|
26
|
+
|
|
27
|
+
valid_api_runtimes = ["dev", "stg", "prd"]
|
|
28
|
+
if v.lower() not in valid_api_runtimes:
|
|
29
|
+
raise ValueError(f"Invalid api_runtime: {v}")
|
|
30
|
+
|
|
31
|
+
return v.lower()
|
|
32
|
+
|
|
33
|
+
@field_validator("api_url", mode="before")
|
|
34
|
+
def update_api_url(cls, v, info: ValidationInfo):
|
|
35
|
+
api_runtime = info.data["api_runtime"]
|
|
36
|
+
if api_runtime == "dev":
|
|
37
|
+
from os import getenv
|
|
38
|
+
|
|
39
|
+
if getenv("AGNO_RUNTIME") == "docker":
|
|
40
|
+
return "http://host.docker.internal:7070"
|
|
41
|
+
return "http://localhost:7070"
|
|
42
|
+
elif api_runtime == "stg":
|
|
43
|
+
return "https://api-stg.agno.com"
|
|
44
|
+
else:
|
|
45
|
+
return "https://os-api.agno.com"
|
|
46
|
+
|
|
47
|
+
def gate_alpha_feature(self):
|
|
48
|
+
if not self.alpha_features:
|
|
49
|
+
logger.error("This is an Alpha feature not for general use.\nPlease message the Agno team for access.")
|
|
50
|
+
exit(1)
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
agno_api_settings = AgnoAPISettings()
|
agno/api/team.py
CHANGED
|
@@ -1,85 +1,30 @@
|
|
|
1
1
|
from agno.api.api import api
|
|
2
2
|
from agno.api.routes import ApiRoutes
|
|
3
|
-
from agno.api.schemas.team import
|
|
4
|
-
from agno.cli.settings import agno_cli_settings
|
|
3
|
+
from agno.api.schemas.team import TeamRunCreate
|
|
5
4
|
from agno.utils.log import log_debug
|
|
6
5
|
|
|
7
6
|
|
|
8
|
-
def create_team_run(run: TeamRunCreate
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
log_debug("--**-- Logging Team Run")
|
|
13
|
-
with api.AuthenticatedClient() as api_client:
|
|
7
|
+
def create_team_run(run: TeamRunCreate) -> None:
|
|
8
|
+
"""Telemetry recording for Team runs"""
|
|
9
|
+
with api.Client() as api_client:
|
|
14
10
|
try:
|
|
15
11
|
response = api_client.post(
|
|
16
|
-
ApiRoutes.
|
|
17
|
-
json=
|
|
12
|
+
ApiRoutes.RUN_CREATE,
|
|
13
|
+
json=run.model_dump(exclude_none=True),
|
|
18
14
|
)
|
|
19
15
|
response.raise_for_status()
|
|
20
16
|
except Exception as e:
|
|
21
17
|
log_debug(f"Could not create Team run: {e}")
|
|
22
|
-
return
|
|
23
|
-
|
|
24
18
|
|
|
25
|
-
async def acreate_team_run(run: TeamRunCreate, monitor: bool = False) -> None:
|
|
26
|
-
if not agno_cli_settings.api_enabled:
|
|
27
|
-
return
|
|
28
19
|
|
|
29
|
-
|
|
30
|
-
|
|
20
|
+
async def acreate_team_run(run: TeamRunCreate) -> None:
|
|
21
|
+
"""Telemetry recording for async Team runs"""
|
|
22
|
+
async with api.AsyncClient() as api_client:
|
|
31
23
|
try:
|
|
32
24
|
response = await api_client.post(
|
|
33
|
-
ApiRoutes.
|
|
34
|
-
json=
|
|
25
|
+
ApiRoutes.RUN_CREATE,
|
|
26
|
+
json=run.model_dump(exclude_none=True),
|
|
35
27
|
)
|
|
36
28
|
response.raise_for_status()
|
|
37
29
|
except Exception as e:
|
|
38
30
|
log_debug(f"Could not create Team run: {e}")
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
def upsert_team_session(session: TeamSessionCreate, monitor: bool = False) -> None:
|
|
42
|
-
if not agno_cli_settings.api_enabled:
|
|
43
|
-
return
|
|
44
|
-
|
|
45
|
-
log_debug("--**-- Logging Team Session")
|
|
46
|
-
with api.AuthenticatedClient() as api_client:
|
|
47
|
-
try:
|
|
48
|
-
if monitor:
|
|
49
|
-
api_client.post(
|
|
50
|
-
ApiRoutes.TEAM_SESSION_CREATE,
|
|
51
|
-
json={"session": session.model_dump(exclude_none=True)},
|
|
52
|
-
)
|
|
53
|
-
except Exception as e:
|
|
54
|
-
log_debug(f"Could not create Agent session: {e}")
|
|
55
|
-
return
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
def create_team(team: TeamCreate) -> None:
|
|
59
|
-
if not agno_cli_settings.api_enabled:
|
|
60
|
-
return
|
|
61
|
-
|
|
62
|
-
with api.AuthenticatedClient() as api_client:
|
|
63
|
-
try:
|
|
64
|
-
api_client.post(
|
|
65
|
-
ApiRoutes.TEAM_CREATE,
|
|
66
|
-
json=team.model_dump(exclude_none=True),
|
|
67
|
-
)
|
|
68
|
-
except Exception as e:
|
|
69
|
-
log_debug(f"Could not create Team: {e}")
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
async def acreate_team(team: TeamCreate) -> None:
|
|
73
|
-
if not agno_cli_settings.api_enabled:
|
|
74
|
-
return
|
|
75
|
-
|
|
76
|
-
async with api.AuthenticatedAsyncClient() as api_client:
|
|
77
|
-
try:
|
|
78
|
-
await api_client.post(
|
|
79
|
-
ApiRoutes.TEAM_CREATE,
|
|
80
|
-
json=team.model_dump(exclude_none=True),
|
|
81
|
-
)
|
|
82
|
-
except Exception as e:
|
|
83
|
-
print(f"Could not create Team: {e}")
|
|
84
|
-
|
|
85
|
-
log_debug(f"Could not create Team: {e}")
|
agno/api/workflow.py
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
from agno.api.api import api
|
|
2
|
+
from agno.api.routes import ApiRoutes
|
|
3
|
+
from agno.api.schemas.workflows import WorkflowRunCreate
|
|
4
|
+
from agno.utils.log import log_debug
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def create_workflow_run(workflow: WorkflowRunCreate) -> None:
|
|
8
|
+
"""Telemetry recording for Workflow runs"""
|
|
9
|
+
with api.Client() as api_client:
|
|
10
|
+
try:
|
|
11
|
+
api_client.post(
|
|
12
|
+
ApiRoutes.RUN_CREATE,
|
|
13
|
+
json=workflow.model_dump(exclude_none=True),
|
|
14
|
+
)
|
|
15
|
+
except Exception as e:
|
|
16
|
+
log_debug(f"Could not create Workflow: {e}")
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
async def acreate_workflow_run(workflow: WorkflowRunCreate) -> None:
|
|
20
|
+
"""Telemetry recording for async Workflow runs"""
|
|
21
|
+
async with api.AsyncClient() as api_client:
|
|
22
|
+
try:
|
|
23
|
+
await api_client.post(
|
|
24
|
+
ApiRoutes.RUN_CREATE,
|
|
25
|
+
json=workflow.model_dump(exclude_none=True),
|
|
26
|
+
)
|
|
27
|
+
except Exception as e:
|
|
28
|
+
log_debug(f"Could not create Team: {e}")
|