agno 1.8.2__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/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 +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 +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 +128 -72
- 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 +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 +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 +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 +17 -18
- 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 +18 -33
- 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 +1 -1
- 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 +6 -12
- 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 -110
- 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 -1053
- agno/app/playground/deploy.py +0 -249
- agno/app/playground/operator.py +0 -183
- agno/app/playground/schemas.py +0 -223
- agno/app/playground/serve.py +0 -55
- agno/app/playground/sync_router.py +0 -1045
- 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 -3313
- 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.2.dist-info/METADATA +0 -982
- agno-1.8.2.dist-info/RECORD +0 -566
- agno-1.8.2.dist-info/entry_points.txt +0 -3
- agno-1.8.2.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.2.dist-info → agno-2.0.0.dist-info}/WHEEL +0 -0
- {agno-1.8.2.dist-info → agno-2.0.0.dist-info}/top_level.txt +0 -0
agno/workspace/__init__.py
DELETED
|
File without changes
|
agno/workspace/config.py
DELETED
|
@@ -1,325 +0,0 @@
|
|
|
1
|
-
from pathlib import Path
|
|
2
|
-
from typing import Any, Dict, List, Optional
|
|
3
|
-
|
|
4
|
-
from pydantic import BaseModel, ConfigDict
|
|
5
|
-
|
|
6
|
-
from agno.api.schemas.user import TeamSchema
|
|
7
|
-
from agno.api.schemas.workspace import WorkspaceSchema
|
|
8
|
-
from agno.infra.base import InfraBase
|
|
9
|
-
from agno.infra.resources import InfraResources
|
|
10
|
-
from agno.utils.log import logger
|
|
11
|
-
from agno.workspace.settings import WorkspaceSettings
|
|
12
|
-
|
|
13
|
-
# List of directories to ignore when loading the workspace
|
|
14
|
-
ignored_dirs = ["ignore", "test", "tests", "config"]
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
class WorkspaceConfig(BaseModel):
|
|
18
|
-
"""The WorkspaceConfig holds the configuration for an Agno workspace."""
|
|
19
|
-
|
|
20
|
-
# Root directory of the workspace.
|
|
21
|
-
ws_root_path: Path
|
|
22
|
-
# WorkspaceSchema: This field indicates that the workspace is synced with the api
|
|
23
|
-
ws_schema: Optional[WorkspaceSchema] = None
|
|
24
|
-
# The Team for this workspace
|
|
25
|
-
ws_team: Optional[TeamSchema] = None
|
|
26
|
-
# The API key for this workspace
|
|
27
|
-
ws_api_key: Optional[str] = None
|
|
28
|
-
|
|
29
|
-
# Path to the "workspace" directory inside the workspace root
|
|
30
|
-
_workspace_dir_path: Optional[Path] = None
|
|
31
|
-
# WorkspaceSettings
|
|
32
|
-
_workspace_settings: Optional[WorkspaceSettings] = None
|
|
33
|
-
|
|
34
|
-
model_config = ConfigDict(arbitrary_types_allowed=True)
|
|
35
|
-
|
|
36
|
-
def to_dict(self) -> dict:
|
|
37
|
-
return self.model_dump(include={"ws_root_path", "ws_schema", "ws_team", "ws_api_key"})
|
|
38
|
-
|
|
39
|
-
@property
|
|
40
|
-
def workspace_dir_path(self) -> Optional[Path]:
|
|
41
|
-
if self._workspace_dir_path is None:
|
|
42
|
-
if self.ws_root_path is not None:
|
|
43
|
-
from agno.workspace.helpers import get_workspace_dir_path
|
|
44
|
-
|
|
45
|
-
self._workspace_dir_path = get_workspace_dir_path(self.ws_root_path)
|
|
46
|
-
return self._workspace_dir_path
|
|
47
|
-
|
|
48
|
-
def validate_workspace_settings(self, obj: Any) -> bool:
|
|
49
|
-
if not isinstance(obj, WorkspaceSettings):
|
|
50
|
-
raise Exception("WorkspaceSettings must be of type WorkspaceSettings")
|
|
51
|
-
|
|
52
|
-
if self.ws_root_path is not None and obj.ws_root is not None:
|
|
53
|
-
if obj.ws_root != self.ws_root_path:
|
|
54
|
-
raise Exception(f"WorkspaceSettings.ws_root ({obj.ws_root}) must match {self.ws_root_path}")
|
|
55
|
-
return True
|
|
56
|
-
|
|
57
|
-
@property
|
|
58
|
-
def workspace_settings(self) -> Optional[WorkspaceSettings]:
|
|
59
|
-
if self._workspace_settings is not None:
|
|
60
|
-
return self._workspace_settings
|
|
61
|
-
|
|
62
|
-
ws_settings_file: Optional[Path] = None
|
|
63
|
-
if self.workspace_dir_path is not None:
|
|
64
|
-
_ws_settings_file = self.workspace_dir_path.joinpath("settings.py")
|
|
65
|
-
if _ws_settings_file.exists() and _ws_settings_file.is_file():
|
|
66
|
-
ws_settings_file = _ws_settings_file
|
|
67
|
-
if ws_settings_file is None:
|
|
68
|
-
logger.debug("workspace_settings file not found")
|
|
69
|
-
return None
|
|
70
|
-
|
|
71
|
-
logger.debug(f"Loading workspace_settings from {ws_settings_file}")
|
|
72
|
-
try:
|
|
73
|
-
from agno.utils.py_io import get_python_objects_from_module
|
|
74
|
-
|
|
75
|
-
python_objects = get_python_objects_from_module(ws_settings_file)
|
|
76
|
-
for obj_name, obj in python_objects.items():
|
|
77
|
-
if isinstance(obj, WorkspaceSettings):
|
|
78
|
-
if self.validate_workspace_settings(obj):
|
|
79
|
-
self._workspace_settings = obj
|
|
80
|
-
if self.ws_schema is not None and self._workspace_settings is not None:
|
|
81
|
-
self._workspace_settings.ws_schema = self.ws_schema
|
|
82
|
-
logger.debug("Added WorkspaceSchema to WorkspaceSettings")
|
|
83
|
-
except Exception:
|
|
84
|
-
logger.warning(f"Error in {ws_settings_file}")
|
|
85
|
-
raise
|
|
86
|
-
return self._workspace_settings
|
|
87
|
-
|
|
88
|
-
def set_local_env(self) -> None:
|
|
89
|
-
from os import environ
|
|
90
|
-
|
|
91
|
-
from agno.constants import (
|
|
92
|
-
AWS_REGION_ENV_VAR,
|
|
93
|
-
WORKSPACE_DIR_ENV_VAR,
|
|
94
|
-
WORKSPACE_ID_ENV_VAR,
|
|
95
|
-
WORKSPACE_NAME_ENV_VAR,
|
|
96
|
-
WORKSPACE_ROOT_ENV_VAR,
|
|
97
|
-
)
|
|
98
|
-
|
|
99
|
-
if self.ws_root_path is not None:
|
|
100
|
-
environ[WORKSPACE_ROOT_ENV_VAR] = str(self.ws_root_path)
|
|
101
|
-
|
|
102
|
-
workspace_dir_path: Optional[Path] = self.workspace_dir_path
|
|
103
|
-
if workspace_dir_path is not None:
|
|
104
|
-
environ[WORKSPACE_DIR_ENV_VAR] = str(workspace_dir_path)
|
|
105
|
-
|
|
106
|
-
if self.workspace_settings is not None:
|
|
107
|
-
environ[WORKSPACE_NAME_ENV_VAR] = str(self.workspace_settings.ws_name)
|
|
108
|
-
|
|
109
|
-
if self.ws_schema is not None and self.ws_schema.id_workspace is not None:
|
|
110
|
-
environ[WORKSPACE_ID_ENV_VAR] = str(self.ws_schema.id_workspace)
|
|
111
|
-
|
|
112
|
-
if (
|
|
113
|
-
environ.get(AWS_REGION_ENV_VAR) is None
|
|
114
|
-
and self.workspace_settings is not None
|
|
115
|
-
and self.workspace_settings.aws_region is not None
|
|
116
|
-
):
|
|
117
|
-
environ[AWS_REGION_ENV_VAR] = self.workspace_settings.aws_region
|
|
118
|
-
|
|
119
|
-
def get_resources(
|
|
120
|
-
self,
|
|
121
|
-
env: Optional[str] = None,
|
|
122
|
-
infra: Optional[str] = None,
|
|
123
|
-
order: str = "create",
|
|
124
|
-
) -> List[InfraResources]:
|
|
125
|
-
if self.ws_root_path is None:
|
|
126
|
-
logger.warning("WorkspaceConfig.ws_root_path is None")
|
|
127
|
-
return []
|
|
128
|
-
|
|
129
|
-
from sys import path as sys_path
|
|
130
|
-
|
|
131
|
-
from agno.utils.load_env import load_env
|
|
132
|
-
from agno.utils.py_io import get_python_objects_from_module
|
|
133
|
-
|
|
134
|
-
logger.debug("**--> Loading WorkspaceConfig")
|
|
135
|
-
logger.debug(f"Loading .env from {self.ws_root_path}")
|
|
136
|
-
load_env(dotenv_dir=self.ws_root_path)
|
|
137
|
-
|
|
138
|
-
# NOTE: When loading a workspace, relative imports or package imports do not work.
|
|
139
|
-
# This is a known problem in python
|
|
140
|
-
# eg: https://stackoverflow.com/questions/6323860/sibling-package-imports/50193944#50193944
|
|
141
|
-
# To make them work, we add workspace_root to sys.path so is treated as a module
|
|
142
|
-
logger.debug(f"Adding {self.ws_root_path} to path")
|
|
143
|
-
sys_path.insert(0, str(self.ws_root_path))
|
|
144
|
-
|
|
145
|
-
workspace_dir_path: Optional[Path] = self.workspace_dir_path
|
|
146
|
-
if workspace_dir_path is not None:
|
|
147
|
-
logger.debug(f"--^^-- Loading workspace from: {workspace_dir_path}")
|
|
148
|
-
# Create a dict of objects in the workspace directory
|
|
149
|
-
workspace_objects: Dict[str, InfraResources] = {}
|
|
150
|
-
resource_files = workspace_dir_path.rglob("*.py")
|
|
151
|
-
for resource_file in resource_files:
|
|
152
|
-
if resource_file.name == "__init__.py":
|
|
153
|
-
continue
|
|
154
|
-
|
|
155
|
-
resource_file_parts = resource_file.parts
|
|
156
|
-
workspace_dir_path_parts = workspace_dir_path.parts
|
|
157
|
-
resource_file_parts_after_ws = resource_file_parts[len(workspace_dir_path_parts) :]
|
|
158
|
-
# Check if file in ignored directory
|
|
159
|
-
if any([ignored_dir in resource_file_parts_after_ws for ignored_dir in ignored_dirs]):
|
|
160
|
-
logger.debug(f"Skipping file in ignored directory: {resource_file}")
|
|
161
|
-
continue
|
|
162
|
-
logger.debug(f"Reading file: {resource_file}")
|
|
163
|
-
try:
|
|
164
|
-
python_objects = get_python_objects_from_module(resource_file)
|
|
165
|
-
# logger.debug(f"python_objects: {python_objects}")
|
|
166
|
-
for obj_name, obj in python_objects.items():
|
|
167
|
-
if isinstance(obj, WorkspaceSettings):
|
|
168
|
-
logger.debug(f"Found: {obj.__class__.__module__}: {obj_name}")
|
|
169
|
-
if self.validate_workspace_settings(obj):
|
|
170
|
-
self._workspace_settings = obj
|
|
171
|
-
if self.ws_schema is not None and self._workspace_settings is not None:
|
|
172
|
-
self._workspace_settings.ws_schema = self.ws_schema
|
|
173
|
-
logger.debug("Added WorkspaceSchema to WorkspaceSettings")
|
|
174
|
-
elif isinstance(obj, InfraResources):
|
|
175
|
-
logger.debug(f"Found: {obj.__class__.__module__}: {obj_name}")
|
|
176
|
-
if not obj.enabled:
|
|
177
|
-
logger.debug(f"Skipping {obj_name}: disabled")
|
|
178
|
-
continue
|
|
179
|
-
workspace_objects[obj_name] = obj
|
|
180
|
-
except Exception:
|
|
181
|
-
logger.warning(f"Error in {resource_file}")
|
|
182
|
-
raise
|
|
183
|
-
logger.debug(f"workspace_objects: {workspace_objects}")
|
|
184
|
-
logger.debug("**--> WorkspaceConfig loaded")
|
|
185
|
-
logger.debug(f"Removing {self.ws_root_path} from path")
|
|
186
|
-
sys_path.remove(str(self.ws_root_path))
|
|
187
|
-
|
|
188
|
-
# Filter resources by infra
|
|
189
|
-
filtered_ws_objects_by_infra_type: Dict[str, InfraResources] = {}
|
|
190
|
-
logger.debug(f"Filtering resources for env: {env} | infra: {infra} | order: {order}")
|
|
191
|
-
if infra is None:
|
|
192
|
-
filtered_ws_objects_by_infra_type = workspace_objects
|
|
193
|
-
else:
|
|
194
|
-
for resource_name, resource in workspace_objects.items():
|
|
195
|
-
if resource.infra == infra:
|
|
196
|
-
filtered_ws_objects_by_infra_type[resource_name] = resource
|
|
197
|
-
|
|
198
|
-
# Filter resources by env
|
|
199
|
-
filtered_infra_objects_by_env: Dict[str, InfraResources] = {}
|
|
200
|
-
if env is None:
|
|
201
|
-
filtered_infra_objects_by_env = filtered_ws_objects_by_infra_type
|
|
202
|
-
else:
|
|
203
|
-
for resource_name, resource in filtered_ws_objects_by_infra_type.items():
|
|
204
|
-
if resource.env == env:
|
|
205
|
-
filtered_infra_objects_by_env[resource_name] = resource
|
|
206
|
-
|
|
207
|
-
# Updated resources with the workspace settings
|
|
208
|
-
# Create a temporary workspace settings object if it does not exist
|
|
209
|
-
if self._workspace_settings is None:
|
|
210
|
-
self._workspace_settings = WorkspaceSettings(
|
|
211
|
-
ws_root=self.ws_root_path,
|
|
212
|
-
ws_name=self.ws_root_path.stem,
|
|
213
|
-
)
|
|
214
|
-
logger.debug(f"Created WorkspaceSettings: {self._workspace_settings}")
|
|
215
|
-
# Update the resources with the workspace settings
|
|
216
|
-
if self._workspace_settings is not None:
|
|
217
|
-
for resource_name, resource in filtered_infra_objects_by_env.items():
|
|
218
|
-
logger.debug(f"Setting workspace settings for {resource.__class__.__name__}")
|
|
219
|
-
resource.set_workspace_settings(self._workspace_settings)
|
|
220
|
-
|
|
221
|
-
# Create a list of InfraResources from the filtered resources
|
|
222
|
-
infra_resources_list: List[InfraResources] = []
|
|
223
|
-
for resource_name, resource in filtered_infra_objects_by_env.items():
|
|
224
|
-
# If the resource is an InfraResources object, add it to the list
|
|
225
|
-
if isinstance(resource, InfraResources):
|
|
226
|
-
infra_resources_list.append(resource)
|
|
227
|
-
|
|
228
|
-
return infra_resources_list
|
|
229
|
-
|
|
230
|
-
@staticmethod
|
|
231
|
-
def get_resources_from_file(
|
|
232
|
-
resource_file: Path,
|
|
233
|
-
env: Optional[str] = None,
|
|
234
|
-
infra: Optional[str] = None,
|
|
235
|
-
order: str = "create",
|
|
236
|
-
) -> List[InfraResources]:
|
|
237
|
-
if not resource_file.exists():
|
|
238
|
-
raise FileNotFoundError(f"File {resource_file} does not exist")
|
|
239
|
-
if not resource_file.is_file():
|
|
240
|
-
raise ValueError(f"Path {resource_file} is not a file")
|
|
241
|
-
if not resource_file.suffix == ".py":
|
|
242
|
-
raise ValueError(f"File {resource_file} is not a python file")
|
|
243
|
-
|
|
244
|
-
from sys import path as sys_path
|
|
245
|
-
|
|
246
|
-
from agno.utils.load_env import load_env
|
|
247
|
-
from agno.utils.py_io import get_python_objects_from_module
|
|
248
|
-
|
|
249
|
-
resource_file_parent_dir = resource_file.parent.resolve()
|
|
250
|
-
logger.debug(f"Loading .env from {resource_file_parent_dir}")
|
|
251
|
-
load_env(dotenv_dir=resource_file_parent_dir)
|
|
252
|
-
|
|
253
|
-
temporary_ws_config = WorkspaceConfig(ws_root_path=resource_file_parent_dir)
|
|
254
|
-
|
|
255
|
-
# NOTE: When loading a directory, relative imports or package imports do not work.
|
|
256
|
-
# This is a known problem in python
|
|
257
|
-
# eg: https://stackoverflow.com/questions/6323860/sibling-package-imports/50193944#50193944
|
|
258
|
-
# To make them work, we add the resource_file_parent_dir to sys.path so it can be treated as a module
|
|
259
|
-
logger.debug(f"Adding {resource_file_parent_dir} to path")
|
|
260
|
-
sys_path.insert(0, str(resource_file_parent_dir))
|
|
261
|
-
|
|
262
|
-
logger.debug(f"**--> Reading Infra resources from {resource_file}")
|
|
263
|
-
|
|
264
|
-
# Get all infra resources from the file
|
|
265
|
-
infra_objects: Dict[str, InfraBase] = {}
|
|
266
|
-
try:
|
|
267
|
-
# Get all python objects from the file
|
|
268
|
-
python_objects = get_python_objects_from_module(resource_file)
|
|
269
|
-
# Filter out the objects that are subclasses of InfraBase
|
|
270
|
-
for obj_name, obj in python_objects.items():
|
|
271
|
-
if isinstance(obj, InfraBase):
|
|
272
|
-
logger.debug(f"Found: {obj.__class__.__module__}: {obj_name}")
|
|
273
|
-
if not obj.enabled:
|
|
274
|
-
logger.debug(f"Skipping {obj_name}: disabled")
|
|
275
|
-
continue
|
|
276
|
-
infra_objects[obj_name] = obj
|
|
277
|
-
except Exception:
|
|
278
|
-
logger.error(f"Error reading: {resource_file}")
|
|
279
|
-
raise
|
|
280
|
-
|
|
281
|
-
# Filter resources by infra
|
|
282
|
-
filtered_infra_objects_by_infra_type: Dict[str, InfraBase] = {}
|
|
283
|
-
logger.debug(f"Filtering resources for env: {env} | infra: {infra} | order: {order}")
|
|
284
|
-
if infra is None:
|
|
285
|
-
filtered_infra_objects_by_infra_type = infra_objects
|
|
286
|
-
else:
|
|
287
|
-
for resource_name, resource in infra_objects.items():
|
|
288
|
-
if resource.infra == infra:
|
|
289
|
-
filtered_infra_objects_by_infra_type[resource_name] = resource
|
|
290
|
-
|
|
291
|
-
# Filter resources by env
|
|
292
|
-
filtered_infra_objects_by_env: Dict[str, InfraBase] = {}
|
|
293
|
-
if env is None:
|
|
294
|
-
filtered_infra_objects_by_env = filtered_infra_objects_by_infra_type
|
|
295
|
-
else:
|
|
296
|
-
for resource_name, resource in filtered_infra_objects_by_infra_type.items():
|
|
297
|
-
if resource.env == env:
|
|
298
|
-
filtered_infra_objects_by_env[resource_name] = resource
|
|
299
|
-
|
|
300
|
-
# Updated resources with the workspace settings
|
|
301
|
-
# Create a temporary workspace settings object if it does not exist
|
|
302
|
-
if temporary_ws_config._workspace_settings is None:
|
|
303
|
-
temporary_ws_config._workspace_settings = WorkspaceSettings(
|
|
304
|
-
ws_root=temporary_ws_config.ws_root_path,
|
|
305
|
-
ws_name=temporary_ws_config.ws_root_path.stem,
|
|
306
|
-
)
|
|
307
|
-
# Update the resources with the workspace settings
|
|
308
|
-
if temporary_ws_config._workspace_settings is not None:
|
|
309
|
-
for resource_name, resource in filtered_infra_objects_by_env.items():
|
|
310
|
-
logger.debug(f"Setting workspace settings for {resource.__class__.__name__}")
|
|
311
|
-
resource.set_workspace_settings(temporary_ws_config._workspace_settings)
|
|
312
|
-
|
|
313
|
-
# Create a list of InfraResources from the filtered resources
|
|
314
|
-
infra_resources_list: List[InfraResources] = []
|
|
315
|
-
for resource_name, resource in filtered_infra_objects_by_env.items():
|
|
316
|
-
# If the resource is an InfraResources object, add it to the list
|
|
317
|
-
if isinstance(resource, InfraResources):
|
|
318
|
-
infra_resources_list.append(resource)
|
|
319
|
-
# Otherwise, get the InfraResources object from the resource
|
|
320
|
-
else:
|
|
321
|
-
_infra_resources = resource.get_infra_resources()
|
|
322
|
-
if _infra_resources is not None and isinstance(_infra_resources, InfraResources):
|
|
323
|
-
infra_resources_list.append(_infra_resources)
|
|
324
|
-
|
|
325
|
-
return infra_resources_list
|
agno/workspace/enums.py
DELETED
agno/workspace/helpers.py
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
from pathlib import Path
|
|
2
|
-
from typing import Optional
|
|
3
|
-
|
|
4
|
-
from agno.utils.log import logger
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
def get_workspace_dir_from_env() -> Optional[Path]:
|
|
8
|
-
from os import getenv
|
|
9
|
-
|
|
10
|
-
from agno.constants import WORKSPACE_DIR_ENV_VAR
|
|
11
|
-
|
|
12
|
-
logger.debug(f"Reading {WORKSPACE_DIR_ENV_VAR} from environment variables")
|
|
13
|
-
workspace_dir = getenv(WORKSPACE_DIR_ENV_VAR, None)
|
|
14
|
-
if workspace_dir is not None:
|
|
15
|
-
return Path(workspace_dir)
|
|
16
|
-
return None
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
def get_workspace_dir_path(ws_root_path: Path) -> Path:
|
|
20
|
-
"""
|
|
21
|
-
Get the workspace directory path from the given workspace root path.
|
|
22
|
-
Agno workspace dir can be found at:
|
|
23
|
-
1. subdirectory: workspace
|
|
24
|
-
2. In a folder defined by the pyproject.toml file
|
|
25
|
-
"""
|
|
26
|
-
from agno.utils.pyproject import read_pyproject_agno
|
|
27
|
-
|
|
28
|
-
logger.debug(f"Searching for a workspace directory in {ws_root_path}")
|
|
29
|
-
|
|
30
|
-
# Case 1: Look for a subdirectory with name: workspace
|
|
31
|
-
ws_workspace_dir = ws_root_path.joinpath("workspace")
|
|
32
|
-
logger.debug(f"Searching {ws_workspace_dir}")
|
|
33
|
-
if ws_workspace_dir.exists() and ws_workspace_dir.is_dir():
|
|
34
|
-
return ws_workspace_dir
|
|
35
|
-
|
|
36
|
-
# Case 2: Look for a folder defined by the pyproject.toml file
|
|
37
|
-
ws_pyproject_toml = ws_root_path.joinpath("pyproject.toml")
|
|
38
|
-
if ws_pyproject_toml.exists() and ws_pyproject_toml.is_file():
|
|
39
|
-
agno_conf = read_pyproject_agno(ws_pyproject_toml)
|
|
40
|
-
if agno_conf is not None:
|
|
41
|
-
agno_conf_workspace_dir_str = agno_conf.get("workspace", None)
|
|
42
|
-
if agno_conf_workspace_dir_str is not None:
|
|
43
|
-
agno_conf_workspace_dir_path = ws_root_path.joinpath(agno_conf_workspace_dir_str)
|
|
44
|
-
else:
|
|
45
|
-
logger.error("Workspace directory not specified in pyproject.toml")
|
|
46
|
-
exit(0)
|
|
47
|
-
logger.debug(f"Searching {agno_conf_workspace_dir_path}")
|
|
48
|
-
if agno_conf_workspace_dir_path.exists() and agno_conf_workspace_dir_path.is_dir():
|
|
49
|
-
return agno_conf_workspace_dir_path
|
|
50
|
-
|
|
51
|
-
logger.error(f"Could not find a workspace at: {ws_root_path}")
|
|
52
|
-
exit(0)
|