agno 0.1.2__py3-none-any.whl → 2.3.13__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 +44 -5
- agno/agent/agent.py +10531 -2975
- agno/api/agent.py +14 -53
- agno/api/api.py +7 -46
- agno/api/evals.py +22 -0
- agno/api/os.py +17 -0
- agno/api/routes.py +6 -25
- agno/api/schemas/__init__.py +9 -0
- agno/api/schemas/agent.py +6 -9
- agno/api/schemas/evals.py +16 -0
- agno/api/schemas/os.py +14 -0
- agno/api/schemas/team.py +10 -10
- agno/api/schemas/utils.py +21 -0
- agno/api/schemas/workflows.py +16 -0
- agno/api/settings.py +53 -0
- agno/api/team.py +22 -26
- 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/compression/__init__.py +3 -0
- agno/compression/manager.py +247 -0
- agno/culture/__init__.py +3 -0
- agno/culture/manager.py +956 -0
- agno/db/__init__.py +24 -0
- agno/db/async_postgres/__init__.py +3 -0
- agno/db/base.py +946 -0
- agno/db/dynamo/__init__.py +3 -0
- agno/db/dynamo/dynamo.py +2781 -0
- agno/db/dynamo/schemas.py +442 -0
- agno/db/dynamo/utils.py +743 -0
- agno/db/firestore/__init__.py +3 -0
- agno/db/firestore/firestore.py +2379 -0
- agno/db/firestore/schemas.py +181 -0
- agno/db/firestore/utils.py +376 -0
- agno/db/gcs_json/__init__.py +3 -0
- agno/db/gcs_json/gcs_json_db.py +1791 -0
- agno/db/gcs_json/utils.py +228 -0
- agno/db/in_memory/__init__.py +3 -0
- agno/db/in_memory/in_memory_db.py +1312 -0
- agno/db/in_memory/utils.py +230 -0
- agno/db/json/__init__.py +3 -0
- agno/db/json/json_db.py +1777 -0
- agno/db/json/utils.py +230 -0
- agno/db/migrations/manager.py +199 -0
- agno/db/migrations/v1_to_v2.py +635 -0
- agno/db/migrations/versions/v2_3_0.py +938 -0
- agno/db/mongo/__init__.py +17 -0
- agno/db/mongo/async_mongo.py +2760 -0
- agno/db/mongo/mongo.py +2597 -0
- agno/db/mongo/schemas.py +119 -0
- agno/db/mongo/utils.py +276 -0
- agno/db/mysql/__init__.py +4 -0
- agno/db/mysql/async_mysql.py +2912 -0
- agno/db/mysql/mysql.py +2923 -0
- agno/db/mysql/schemas.py +186 -0
- agno/db/mysql/utils.py +488 -0
- agno/db/postgres/__init__.py +4 -0
- agno/db/postgres/async_postgres.py +2579 -0
- agno/db/postgres/postgres.py +2870 -0
- agno/db/postgres/schemas.py +187 -0
- agno/db/postgres/utils.py +442 -0
- agno/db/redis/__init__.py +3 -0
- agno/db/redis/redis.py +2141 -0
- agno/db/redis/schemas.py +159 -0
- agno/db/redis/utils.py +346 -0
- agno/db/schemas/__init__.py +4 -0
- agno/db/schemas/culture.py +120 -0
- agno/db/schemas/evals.py +34 -0
- agno/db/schemas/knowledge.py +40 -0
- agno/db/schemas/memory.py +61 -0
- agno/db/singlestore/__init__.py +3 -0
- agno/db/singlestore/schemas.py +179 -0
- agno/db/singlestore/singlestore.py +2877 -0
- agno/db/singlestore/utils.py +384 -0
- agno/db/sqlite/__init__.py +4 -0
- agno/db/sqlite/async_sqlite.py +2911 -0
- agno/db/sqlite/schemas.py +181 -0
- agno/db/sqlite/sqlite.py +2908 -0
- agno/db/sqlite/utils.py +429 -0
- agno/db/surrealdb/__init__.py +3 -0
- agno/db/surrealdb/metrics.py +292 -0
- agno/db/surrealdb/models.py +334 -0
- agno/db/surrealdb/queries.py +71 -0
- agno/db/surrealdb/surrealdb.py +1908 -0
- agno/db/surrealdb/utils.py +147 -0
- agno/db/utils.py +118 -0
- agno/eval/__init__.py +24 -0
- agno/eval/accuracy.py +666 -276
- agno/eval/agent_as_judge.py +861 -0
- agno/eval/base.py +29 -0
- agno/eval/performance.py +779 -0
- agno/eval/reliability.py +241 -62
- agno/eval/utils.py +120 -0
- agno/exceptions.py +143 -1
- agno/filters.py +354 -0
- agno/guardrails/__init__.py +6 -0
- agno/guardrails/base.py +19 -0
- agno/guardrails/openai.py +144 -0
- agno/guardrails/pii.py +94 -0
- agno/guardrails/prompt_injection.py +52 -0
- agno/hooks/__init__.py +3 -0
- agno/hooks/decorator.py +164 -0
- agno/integrations/discord/__init__.py +3 -0
- agno/integrations/discord/client.py +203 -0
- agno/knowledge/__init__.py +5 -1
- agno/{document → knowledge}/chunking/agentic.py +22 -14
- agno/{document → knowledge}/chunking/document.py +2 -2
- agno/{document → knowledge}/chunking/fixed.py +7 -6
- agno/knowledge/chunking/markdown.py +151 -0
- agno/{document → knowledge}/chunking/recursive.py +15 -3
- agno/knowledge/chunking/row.py +39 -0
- agno/knowledge/chunking/semantic.py +91 -0
- agno/knowledge/chunking/strategy.py +165 -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/knowledge/embedder/aws_bedrock.py +343 -0
- agno/knowledge/embedder/azure_openai.py +210 -0
- agno/{embedder → knowledge/embedder}/base.py +8 -0
- agno/knowledge/embedder/cohere.py +323 -0
- agno/knowledge/embedder/fastembed.py +62 -0
- agno/{embedder → knowledge/embedder}/fireworks.py +1 -1
- agno/knowledge/embedder/google.py +258 -0
- agno/knowledge/embedder/huggingface.py +94 -0
- agno/knowledge/embedder/jina.py +182 -0
- agno/knowledge/embedder/langdb.py +22 -0
- agno/knowledge/embedder/mistral.py +206 -0
- agno/knowledge/embedder/nebius.py +13 -0
- agno/knowledge/embedder/ollama.py +154 -0
- agno/knowledge/embedder/openai.py +195 -0
- agno/knowledge/embedder/sentence_transformer.py +63 -0
- agno/{embedder → knowledge/embedder}/together.py +1 -1
- agno/knowledge/embedder/vllm.py +262 -0
- agno/knowledge/embedder/voyageai.py +165 -0
- agno/knowledge/knowledge.py +3006 -0
- agno/knowledge/reader/__init__.py +7 -0
- agno/knowledge/reader/arxiv_reader.py +81 -0
- agno/knowledge/reader/base.py +95 -0
- agno/knowledge/reader/csv_reader.py +164 -0
- agno/knowledge/reader/docx_reader.py +82 -0
- agno/knowledge/reader/field_labeled_csv_reader.py +290 -0
- agno/knowledge/reader/firecrawl_reader.py +201 -0
- agno/knowledge/reader/json_reader.py +88 -0
- agno/knowledge/reader/markdown_reader.py +137 -0
- agno/knowledge/reader/pdf_reader.py +431 -0
- agno/knowledge/reader/pptx_reader.py +101 -0
- agno/knowledge/reader/reader_factory.py +313 -0
- agno/knowledge/reader/s3_reader.py +89 -0
- agno/knowledge/reader/tavily_reader.py +193 -0
- agno/knowledge/reader/text_reader.py +127 -0
- agno/knowledge/reader/web_search_reader.py +325 -0
- agno/knowledge/reader/website_reader.py +455 -0
- agno/knowledge/reader/wikipedia_reader.py +91 -0
- agno/knowledge/reader/youtube_reader.py +78 -0
- agno/knowledge/remote_content/remote_content.py +88 -0
- agno/knowledge/reranker/__init__.py +3 -0
- agno/{reranker → knowledge/reranker}/base.py +1 -1
- agno/{reranker → knowledge/reranker}/cohere.py +2 -2
- agno/knowledge/reranker/infinity.py +195 -0
- agno/knowledge/reranker/sentence_transformer.py +54 -0
- agno/knowledge/types.py +39 -0
- agno/knowledge/utils.py +234 -0
- agno/media.py +439 -95
- agno/memory/__init__.py +16 -3
- agno/memory/manager.py +1474 -123
- agno/memory/strategies/__init__.py +15 -0
- agno/memory/strategies/base.py +66 -0
- agno/memory/strategies/summarize.py +196 -0
- agno/memory/strategies/types.py +37 -0
- agno/models/aimlapi/__init__.py +5 -0
- agno/models/aimlapi/aimlapi.py +62 -0
- agno/models/anthropic/__init__.py +4 -0
- agno/models/anthropic/claude.py +960 -496
- agno/models/aws/__init__.py +15 -0
- agno/models/aws/bedrock.py +686 -451
- agno/models/aws/claude.py +190 -183
- agno/models/azure/__init__.py +18 -1
- agno/models/azure/ai_foundry.py +489 -0
- agno/models/azure/openai_chat.py +89 -40
- agno/models/base.py +2477 -550
- agno/models/cerebras/__init__.py +12 -0
- agno/models/cerebras/cerebras.py +565 -0
- agno/models/cerebras/cerebras_openai.py +131 -0
- agno/models/cohere/__init__.py +4 -0
- agno/models/cohere/chat.py +306 -492
- agno/models/cometapi/__init__.py +5 -0
- agno/models/cometapi/cometapi.py +74 -0
- agno/models/dashscope/__init__.py +5 -0
- agno/models/dashscope/dashscope.py +90 -0
- agno/models/deepinfra/__init__.py +5 -0
- agno/models/deepinfra/deepinfra.py +45 -0
- agno/models/deepseek/__init__.py +4 -0
- agno/models/deepseek/deepseek.py +110 -9
- agno/models/fireworks/__init__.py +4 -0
- agno/models/fireworks/fireworks.py +19 -22
- agno/models/google/__init__.py +3 -7
- agno/models/google/gemini.py +1717 -662
- agno/models/google/utils.py +22 -0
- agno/models/groq/__init__.py +4 -0
- agno/models/groq/groq.py +391 -666
- agno/models/huggingface/__init__.py +4 -0
- agno/models/huggingface/huggingface.py +266 -538
- agno/models/ibm/__init__.py +5 -0
- agno/models/ibm/watsonx.py +432 -0
- agno/models/internlm/__init__.py +3 -0
- agno/models/internlm/internlm.py +20 -3
- agno/models/langdb/__init__.py +1 -0
- agno/models/langdb/langdb.py +60 -0
- agno/models/litellm/__init__.py +14 -0
- agno/models/litellm/chat.py +503 -0
- agno/models/litellm/litellm_openai.py +42 -0
- agno/models/llama_cpp/__init__.py +5 -0
- agno/models/llama_cpp/llama_cpp.py +22 -0
- agno/models/lmstudio/__init__.py +5 -0
- agno/models/lmstudio/lmstudio.py +25 -0
- agno/models/message.py +361 -39
- agno/models/meta/__init__.py +12 -0
- agno/models/meta/llama.py +502 -0
- agno/models/meta/llama_openai.py +79 -0
- agno/models/metrics.py +120 -0
- agno/models/mistral/__init__.py +4 -0
- agno/models/mistral/mistral.py +293 -393
- agno/models/nebius/__init__.py +3 -0
- agno/models/nebius/nebius.py +53 -0
- agno/models/nexus/__init__.py +3 -0
- agno/models/nexus/nexus.py +22 -0
- agno/models/nvidia/__init__.py +4 -0
- agno/models/nvidia/nvidia.py +22 -3
- agno/models/ollama/__init__.py +4 -2
- agno/models/ollama/chat.py +257 -492
- agno/models/openai/__init__.py +7 -0
- agno/models/openai/chat.py +725 -770
- agno/models/openai/like.py +16 -2
- agno/models/openai/responses.py +1121 -0
- agno/models/openrouter/__init__.py +4 -0
- agno/models/openrouter/openrouter.py +62 -5
- agno/models/perplexity/__init__.py +5 -0
- agno/models/perplexity/perplexity.py +203 -0
- agno/models/portkey/__init__.py +3 -0
- agno/models/portkey/portkey.py +82 -0
- agno/models/requesty/__init__.py +5 -0
- agno/models/requesty/requesty.py +69 -0
- agno/models/response.py +177 -7
- agno/models/sambanova/__init__.py +4 -0
- agno/models/sambanova/sambanova.py +23 -4
- agno/models/siliconflow/__init__.py +5 -0
- agno/models/siliconflow/siliconflow.py +42 -0
- agno/models/together/__init__.py +4 -0
- agno/models/together/together.py +21 -164
- agno/models/utils.py +266 -0
- agno/models/vercel/__init__.py +3 -0
- agno/models/vercel/v0.py +43 -0
- agno/models/vertexai/__init__.py +0 -1
- agno/models/vertexai/claude.py +190 -0
- agno/models/vllm/__init__.py +3 -0
- agno/models/vllm/vllm.py +83 -0
- agno/models/xai/__init__.py +2 -0
- agno/models/xai/xai.py +111 -7
- agno/os/__init__.py +3 -0
- agno/os/app.py +1027 -0
- agno/os/auth.py +244 -0
- agno/os/config.py +126 -0
- agno/os/interfaces/__init__.py +1 -0
- agno/os/interfaces/a2a/__init__.py +3 -0
- agno/os/interfaces/a2a/a2a.py +42 -0
- agno/os/interfaces/a2a/router.py +249 -0
- agno/os/interfaces/a2a/utils.py +924 -0
- agno/os/interfaces/agui/__init__.py +3 -0
- agno/os/interfaces/agui/agui.py +47 -0
- agno/os/interfaces/agui/router.py +147 -0
- agno/os/interfaces/agui/utils.py +574 -0
- agno/os/interfaces/base.py +25 -0
- agno/os/interfaces/slack/__init__.py +3 -0
- agno/os/interfaces/slack/router.py +148 -0
- agno/os/interfaces/slack/security.py +30 -0
- agno/os/interfaces/slack/slack.py +47 -0
- agno/os/interfaces/whatsapp/__init__.py +3 -0
- agno/os/interfaces/whatsapp/router.py +210 -0
- agno/os/interfaces/whatsapp/security.py +55 -0
- agno/os/interfaces/whatsapp/whatsapp.py +36 -0
- agno/os/mcp.py +293 -0
- agno/os/middleware/__init__.py +9 -0
- agno/os/middleware/jwt.py +797 -0
- agno/os/router.py +258 -0
- agno/os/routers/__init__.py +3 -0
- agno/os/routers/agents/__init__.py +3 -0
- agno/os/routers/agents/router.py +599 -0
- agno/os/routers/agents/schema.py +261 -0
- agno/os/routers/evals/__init__.py +3 -0
- agno/os/routers/evals/evals.py +450 -0
- agno/os/routers/evals/schemas.py +174 -0
- agno/os/routers/evals/utils.py +231 -0
- agno/os/routers/health.py +31 -0
- agno/os/routers/home.py +52 -0
- agno/os/routers/knowledge/__init__.py +3 -0
- agno/os/routers/knowledge/knowledge.py +1008 -0
- agno/os/routers/knowledge/schemas.py +178 -0
- agno/os/routers/memory/__init__.py +3 -0
- agno/os/routers/memory/memory.py +661 -0
- agno/os/routers/memory/schemas.py +88 -0
- agno/os/routers/metrics/__init__.py +3 -0
- agno/os/routers/metrics/metrics.py +190 -0
- agno/os/routers/metrics/schemas.py +47 -0
- agno/os/routers/session/__init__.py +3 -0
- agno/os/routers/session/session.py +997 -0
- agno/os/routers/teams/__init__.py +3 -0
- agno/os/routers/teams/router.py +512 -0
- agno/os/routers/teams/schema.py +257 -0
- agno/os/routers/traces/__init__.py +3 -0
- agno/os/routers/traces/schemas.py +414 -0
- agno/os/routers/traces/traces.py +499 -0
- agno/os/routers/workflows/__init__.py +3 -0
- agno/os/routers/workflows/router.py +624 -0
- agno/os/routers/workflows/schema.py +75 -0
- agno/os/schema.py +534 -0
- agno/os/scopes.py +469 -0
- agno/{playground → os}/settings.py +7 -15
- agno/os/utils.py +973 -0
- agno/reasoning/anthropic.py +80 -0
- agno/reasoning/azure_ai_foundry.py +67 -0
- agno/reasoning/deepseek.py +63 -0
- agno/reasoning/default.py +97 -0
- agno/reasoning/gemini.py +73 -0
- agno/reasoning/groq.py +71 -0
- agno/reasoning/helpers.py +24 -1
- agno/reasoning/ollama.py +67 -0
- agno/reasoning/openai.py +86 -0
- agno/reasoning/step.py +2 -1
- agno/reasoning/vertexai.py +76 -0
- agno/run/__init__.py +6 -0
- agno/run/agent.py +822 -0
- agno/run/base.py +247 -0
- agno/run/cancel.py +81 -0
- agno/run/requirement.py +181 -0
- agno/run/team.py +767 -0
- agno/run/workflow.py +708 -0
- agno/session/__init__.py +10 -0
- agno/session/agent.py +260 -0
- agno/session/summary.py +265 -0
- agno/session/team.py +342 -0
- agno/session/workflow.py +501 -0
- agno/table.py +10 -0
- agno/team/__init__.py +37 -0
- agno/team/team.py +9536 -0
- agno/tools/__init__.py +7 -0
- agno/tools/agentql.py +120 -0
- agno/tools/airflow.py +22 -12
- agno/tools/api.py +122 -0
- agno/tools/apify.py +276 -83
- agno/tools/{arxiv_toolkit.py → arxiv.py} +20 -12
- agno/tools/aws_lambda.py +28 -7
- agno/tools/aws_ses.py +66 -0
- agno/tools/baidusearch.py +11 -4
- agno/tools/bitbucket.py +292 -0
- agno/tools/brandfetch.py +213 -0
- agno/tools/bravesearch.py +106 -0
- agno/tools/brightdata.py +367 -0
- agno/tools/browserbase.py +209 -0
- agno/tools/calcom.py +32 -23
- agno/tools/calculator.py +24 -37
- agno/tools/cartesia.py +187 -0
- agno/tools/{clickup_tool.py → clickup.py} +17 -28
- agno/tools/confluence.py +91 -26
- agno/tools/crawl4ai.py +139 -43
- agno/tools/csv_toolkit.py +28 -22
- agno/tools/dalle.py +36 -22
- agno/tools/daytona.py +475 -0
- agno/tools/decorator.py +169 -14
- agno/tools/desi_vocal.py +23 -11
- agno/tools/discord.py +32 -29
- agno/tools/docker.py +716 -0
- agno/tools/duckdb.py +76 -81
- agno/tools/duckduckgo.py +43 -40
- agno/tools/e2b.py +703 -0
- agno/tools/eleven_labs.py +65 -54
- agno/tools/email.py +13 -5
- agno/tools/evm.py +129 -0
- agno/tools/exa.py +324 -42
- agno/tools/fal.py +39 -35
- agno/tools/file.py +196 -30
- agno/tools/file_generation.py +356 -0
- agno/tools/financial_datasets.py +288 -0
- agno/tools/firecrawl.py +108 -33
- agno/tools/function.py +960 -122
- agno/tools/giphy.py +34 -12
- agno/tools/github.py +1294 -97
- agno/tools/gmail.py +922 -0
- agno/tools/google_bigquery.py +117 -0
- agno/tools/google_drive.py +271 -0
- agno/tools/google_maps.py +253 -0
- agno/tools/googlecalendar.py +607 -107
- agno/tools/googlesheets.py +377 -0
- agno/tools/hackernews.py +20 -12
- agno/tools/jina.py +24 -14
- agno/tools/jira.py +48 -19
- agno/tools/knowledge.py +218 -0
- agno/tools/linear.py +82 -43
- agno/tools/linkup.py +58 -0
- agno/tools/local_file_system.py +15 -7
- agno/tools/lumalab.py +41 -26
- agno/tools/mcp/__init__.py +10 -0
- agno/tools/mcp/mcp.py +331 -0
- agno/tools/mcp/multi_mcp.py +347 -0
- agno/tools/mcp/params.py +24 -0
- agno/tools/mcp_toolbox.py +284 -0
- agno/tools/mem0.py +193 -0
- agno/tools/memory.py +419 -0
- agno/tools/mlx_transcribe.py +11 -9
- agno/tools/models/azure_openai.py +190 -0
- agno/tools/models/gemini.py +203 -0
- agno/tools/models/groq.py +158 -0
- agno/tools/models/morph.py +186 -0
- agno/tools/models/nebius.py +124 -0
- agno/tools/models_labs.py +163 -82
- agno/tools/moviepy_video.py +18 -13
- agno/tools/nano_banana.py +151 -0
- agno/tools/neo4j.py +134 -0
- agno/tools/newspaper.py +15 -4
- agno/tools/newspaper4k.py +19 -6
- agno/tools/notion.py +204 -0
- agno/tools/openai.py +181 -17
- agno/tools/openbb.py +27 -20
- agno/tools/opencv.py +321 -0
- agno/tools/openweather.py +233 -0
- agno/tools/oxylabs.py +385 -0
- agno/tools/pandas.py +25 -15
- agno/tools/parallel.py +314 -0
- agno/tools/postgres.py +238 -185
- agno/tools/pubmed.py +125 -13
- agno/tools/python.py +48 -35
- agno/tools/reasoning.py +283 -0
- agno/tools/reddit.py +207 -29
- agno/tools/redshift.py +406 -0
- agno/tools/replicate.py +69 -26
- agno/tools/resend.py +11 -6
- agno/tools/scrapegraph.py +179 -19
- agno/tools/searxng.py +23 -31
- agno/tools/serpapi.py +15 -10
- agno/tools/serper.py +255 -0
- agno/tools/shell.py +23 -12
- agno/tools/shopify.py +1519 -0
- agno/tools/slack.py +56 -14
- agno/tools/sleep.py +8 -6
- agno/tools/spider.py +35 -11
- agno/tools/spotify.py +919 -0
- agno/tools/sql.py +34 -19
- agno/tools/tavily.py +158 -8
- agno/tools/telegram.py +18 -8
- agno/tools/todoist.py +218 -0
- agno/tools/toolkit.py +134 -9
- agno/tools/trafilatura.py +388 -0
- agno/tools/trello.py +25 -28
- agno/tools/twilio.py +18 -9
- agno/tools/user_control_flow.py +78 -0
- agno/tools/valyu.py +228 -0
- agno/tools/visualization.py +467 -0
- agno/tools/webbrowser.py +28 -0
- agno/tools/webex.py +76 -0
- agno/tools/website.py +23 -19
- agno/tools/webtools.py +45 -0
- agno/tools/whatsapp.py +286 -0
- agno/tools/wikipedia.py +28 -19
- agno/tools/workflow.py +285 -0
- agno/tools/{twitter.py → x.py} +142 -46
- agno/tools/yfinance.py +41 -39
- agno/tools/youtube.py +34 -17
- agno/tools/zendesk.py +15 -5
- agno/tools/zep.py +454 -0
- agno/tools/zoom.py +86 -37
- agno/tracing/__init__.py +12 -0
- agno/tracing/exporter.py +157 -0
- agno/tracing/schemas.py +276 -0
- agno/tracing/setup.py +111 -0
- agno/utils/agent.py +938 -0
- agno/utils/audio.py +37 -1
- agno/utils/certs.py +27 -0
- agno/utils/code_execution.py +11 -0
- agno/utils/common.py +103 -20
- agno/utils/cryptography.py +22 -0
- agno/utils/dttm.py +33 -0
- agno/utils/events.py +700 -0
- agno/utils/functions.py +107 -37
- agno/utils/gemini.py +426 -0
- agno/utils/hooks.py +171 -0
- agno/utils/http.py +185 -0
- agno/utils/json_schema.py +159 -37
- agno/utils/knowledge.py +36 -0
- agno/utils/location.py +19 -0
- agno/utils/log.py +221 -8
- agno/utils/mcp.py +214 -0
- agno/utils/media.py +335 -14
- agno/utils/merge_dict.py +22 -1
- agno/utils/message.py +77 -2
- agno/utils/models/ai_foundry.py +50 -0
- agno/utils/models/claude.py +373 -0
- agno/utils/models/cohere.py +94 -0
- agno/utils/models/llama.py +85 -0
- agno/utils/models/mistral.py +100 -0
- agno/utils/models/openai_responses.py +140 -0
- agno/utils/models/schema_utils.py +153 -0
- agno/utils/models/watsonx.py +41 -0
- agno/utils/openai.py +257 -0
- agno/utils/pickle.py +1 -1
- agno/utils/pprint.py +124 -8
- agno/utils/print_response/agent.py +930 -0
- agno/utils/print_response/team.py +1914 -0
- agno/utils/print_response/workflow.py +1668 -0
- agno/utils/prompts.py +111 -0
- agno/utils/reasoning.py +108 -0
- agno/utils/response.py +163 -0
- agno/utils/serialize.py +32 -0
- agno/utils/shell.py +4 -4
- agno/utils/streamlit.py +487 -0
- agno/utils/string.py +204 -51
- agno/utils/team.py +139 -0
- agno/utils/timer.py +9 -2
- agno/utils/tokens.py +657 -0
- agno/utils/tools.py +19 -1
- agno/utils/whatsapp.py +305 -0
- agno/utils/yaml_io.py +3 -3
- agno/vectordb/__init__.py +2 -0
- agno/vectordb/base.py +87 -9
- agno/vectordb/cassandra/__init__.py +5 -1
- agno/vectordb/cassandra/cassandra.py +383 -27
- agno/vectordb/chroma/__init__.py +4 -0
- agno/vectordb/chroma/chromadb.py +748 -83
- agno/vectordb/clickhouse/__init__.py +7 -1
- agno/vectordb/clickhouse/clickhousedb.py +554 -53
- agno/vectordb/couchbase/__init__.py +3 -0
- agno/vectordb/couchbase/couchbase.py +1446 -0
- agno/vectordb/lancedb/__init__.py +5 -0
- agno/vectordb/lancedb/lance_db.py +730 -98
- agno/vectordb/langchaindb/__init__.py +5 -0
- agno/vectordb/langchaindb/langchaindb.py +163 -0
- agno/vectordb/lightrag/__init__.py +5 -0
- agno/vectordb/lightrag/lightrag.py +388 -0
- agno/vectordb/llamaindex/__init__.py +3 -0
- agno/vectordb/llamaindex/llamaindexdb.py +166 -0
- agno/vectordb/milvus/__init__.py +3 -0
- agno/vectordb/milvus/milvus.py +966 -78
- agno/vectordb/mongodb/__init__.py +9 -1
- agno/vectordb/mongodb/mongodb.py +1175 -172
- agno/vectordb/pgvector/__init__.py +8 -0
- agno/vectordb/pgvector/pgvector.py +599 -115
- agno/vectordb/pineconedb/__init__.py +5 -1
- agno/vectordb/pineconedb/pineconedb.py +406 -43
- agno/vectordb/qdrant/__init__.py +4 -0
- agno/vectordb/qdrant/qdrant.py +914 -61
- agno/vectordb/redis/__init__.py +9 -0
- agno/vectordb/redis/redisdb.py +682 -0
- agno/vectordb/singlestore/__init__.py +8 -1
- agno/vectordb/singlestore/singlestore.py +771 -0
- agno/vectordb/surrealdb/__init__.py +3 -0
- agno/vectordb/surrealdb/surrealdb.py +663 -0
- agno/vectordb/upstashdb/__init__.py +5 -0
- agno/vectordb/upstashdb/upstashdb.py +718 -0
- agno/vectordb/weaviate/__init__.py +8 -0
- agno/vectordb/weaviate/index.py +15 -0
- agno/vectordb/weaviate/weaviate.py +1009 -0
- agno/workflow/__init__.py +23 -1
- agno/workflow/agent.py +299 -0
- agno/workflow/condition.py +759 -0
- agno/workflow/loop.py +756 -0
- agno/workflow/parallel.py +853 -0
- agno/workflow/router.py +723 -0
- agno/workflow/step.py +1564 -0
- agno/workflow/steps.py +613 -0
- agno/workflow/types.py +556 -0
- agno/workflow/workflow.py +4327 -514
- agno-2.3.13.dist-info/METADATA +639 -0
- agno-2.3.13.dist-info/RECORD +613 -0
- {agno-0.1.2.dist-info → agno-2.3.13.dist-info}/WHEEL +1 -1
- agno-2.3.13.dist-info/licenses/LICENSE +201 -0
- agno/api/playground.py +0 -91
- agno/api/schemas/playground.py +0 -22
- agno/api/schemas/user.py +0 -22
- agno/api/schemas/workspace.py +0 -46
- agno/api/user.py +0 -160
- agno/api/workspace.py +0 -151
- agno/cli/auth_server.py +0 -118
- agno/cli/config.py +0 -275
- agno/cli/console.py +0 -88
- agno/cli/credentials.py +0 -23
- agno/cli/entrypoint.py +0 -571
- agno/cli/operator.py +0 -355
- agno/cli/settings.py +0 -85
- agno/cli/ws/ws_cli.py +0 -817
- agno/constants.py +0 -13
- agno/document/__init__.py +0 -1
- agno/document/chunking/semantic.py +0 -47
- agno/document/chunking/strategy.py +0 -31
- agno/document/reader/__init__.py +0 -1
- agno/document/reader/arxiv_reader.py +0 -41
- agno/document/reader/base.py +0 -22
- agno/document/reader/csv_reader.py +0 -84
- agno/document/reader/docx_reader.py +0 -46
- agno/document/reader/firecrawl_reader.py +0 -99
- agno/document/reader/json_reader.py +0 -43
- agno/document/reader/pdf_reader.py +0 -219
- agno/document/reader/s3/pdf_reader.py +0 -46
- agno/document/reader/s3/text_reader.py +0 -51
- agno/document/reader/text_reader.py +0 -41
- agno/document/reader/website_reader.py +0 -175
- agno/document/reader/youtube_reader.py +0 -50
- agno/embedder/__init__.py +0 -1
- agno/embedder/azure_openai.py +0 -86
- agno/embedder/cohere.py +0 -72
- agno/embedder/fastembed.py +0 -37
- agno/embedder/google.py +0 -73
- agno/embedder/huggingface.py +0 -54
- agno/embedder/mistral.py +0 -80
- agno/embedder/ollama.py +0 -57
- agno/embedder/openai.py +0 -74
- agno/embedder/sentence_transformer.py +0 -38
- agno/embedder/voyageai.py +0 -64
- agno/eval/perf.py +0 -201
- agno/file/__init__.py +0 -1
- 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 -230
- agno/knowledge/arxiv.py +0 -22
- agno/knowledge/combined.py +0 -22
- agno/knowledge/csv.py +0 -28
- agno/knowledge/csv_url.py +0 -19
- agno/knowledge/document.py +0 -20
- agno/knowledge/docx.py +0 -30
- agno/knowledge/json.py +0 -28
- agno/knowledge/langchain.py +0 -71
- agno/knowledge/llamaindex.py +0 -66
- agno/knowledge/pdf.py +0 -28
- agno/knowledge/pdf_url.py +0 -26
- agno/knowledge/s3/base.py +0 -60
- agno/knowledge/s3/pdf.py +0 -21
- agno/knowledge/s3/text.py +0 -23
- agno/knowledge/text.py +0 -30
- agno/knowledge/website.py +0 -88
- agno/knowledge/wikipedia.py +0 -31
- agno/knowledge/youtube.py +0 -22
- agno/memory/agent.py +0 -392
- agno/memory/classifier.py +0 -104
- agno/memory/db/__init__.py +0 -1
- 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 -15
- agno/memory/row.py +0 -36
- agno/memory/summarizer.py +0 -192
- agno/memory/summary.py +0 -19
- agno/memory/workflow.py +0 -38
- agno/models/google/gemini_openai.py +0 -26
- agno/models/ollama/hermes.py +0 -221
- agno/models/ollama/tools.py +0 -362
- agno/models/vertexai/gemini.py +0 -595
- agno/playground/__init__.py +0 -3
- agno/playground/async_router.py +0 -421
- agno/playground/deploy.py +0 -249
- agno/playground/operator.py +0 -92
- agno/playground/playground.py +0 -91
- agno/playground/schemas.py +0 -76
- agno/playground/serve.py +0 -55
- agno/playground/sync_router.py +0 -405
- agno/reasoning/agent.py +0 -68
- agno/run/response.py +0 -112
- agno/storage/agent/__init__.py +0 -0
- agno/storage/agent/base.py +0 -38
- agno/storage/agent/dynamodb.py +0 -350
- agno/storage/agent/json.py +0 -92
- agno/storage/agent/mongodb.py +0 -228
- agno/storage/agent/postgres.py +0 -367
- agno/storage/agent/session.py +0 -79
- agno/storage/agent/singlestore.py +0 -303
- agno/storage/agent/sqlite.py +0 -357
- agno/storage/agent/yaml.py +0 -93
- agno/storage/workflow/__init__.py +0 -0
- agno/storage/workflow/base.py +0 -40
- agno/storage/workflow/mongodb.py +0 -233
- agno/storage/workflow/postgres.py +0 -366
- agno/storage/workflow/session.py +0 -60
- agno/storage/workflow/sqlite.py +0 -359
- agno/tools/googlesearch.py +0 -88
- 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/vectordb/singlestore/s2vectordb.py +0 -390
- agno/vectordb/singlestore/s2vectordb2.py +0 -355
- agno/workspace/__init__.py +0 -0
- agno/workspace/config.py +0 -325
- agno/workspace/enums.py +0 -6
- agno/workspace/helpers.py +0 -48
- agno/workspace/operator.py +0 -758
- agno/workspace/settings.py +0 -63
- agno-0.1.2.dist-info/LICENSE +0 -375
- agno-0.1.2.dist-info/METADATA +0 -502
- agno-0.1.2.dist-info/RECORD +0 -352
- agno-0.1.2.dist-info/entry_points.txt +0 -3
- /agno/{cli → db/migrations}/__init__.py +0 -0
- /agno/{cli/ws → db/migrations/versions}/__init__.py +0 -0
- /agno/{document/chunking/__init__.py → db/schemas/metrics.py} +0 -0
- /agno/{document/reader/s3 → integrations}/__init__.py +0 -0
- /agno/{file/local → knowledge/chunking}/__init__.py +0 -0
- /agno/{infra → knowledge/remote_content}/__init__.py +0 -0
- /agno/{knowledge/s3 → tools/models}/__init__.py +0 -0
- /agno/{reranker → utils/models}/__init__.py +0 -0
- /agno/{storage → utils/print_response}/__init__.py +0 -0
- {agno-0.1.2.dist-info → agno-2.3.13.dist-info}/top_level.txt +0 -0
agno/cli/ws/ws_cli.py
DELETED
|
@@ -1,817 +0,0 @@
|
|
|
1
|
-
"""Agno Workspace Cli
|
|
2
|
-
|
|
3
|
-
This is the entrypoint for the `agno ws` application.
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
from pathlib import Path
|
|
7
|
-
from typing import List, Optional, cast
|
|
8
|
-
|
|
9
|
-
import typer
|
|
10
|
-
|
|
11
|
-
from agno.cli.console import (
|
|
12
|
-
log_active_workspace_not_available,
|
|
13
|
-
log_config_not_available_msg,
|
|
14
|
-
print_available_workspaces,
|
|
15
|
-
print_info,
|
|
16
|
-
)
|
|
17
|
-
from agno.utils.log import logger, set_log_level_to_debug
|
|
18
|
-
|
|
19
|
-
ws_cli = typer.Typer(
|
|
20
|
-
name="ws",
|
|
21
|
-
short_help="Manage workspaces",
|
|
22
|
-
help="""\b
|
|
23
|
-
Use `ag ws [COMMAND]` to create, setup, start or stop your workspace.
|
|
24
|
-
Run `ag ws [COMMAND] --help` for more info.
|
|
25
|
-
""",
|
|
26
|
-
no_args_is_help=True,
|
|
27
|
-
add_completion=False,
|
|
28
|
-
invoke_without_command=True,
|
|
29
|
-
options_metavar="",
|
|
30
|
-
subcommand_metavar="[COMMAND] [OPTIONS]",
|
|
31
|
-
)
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
@ws_cli.command(short_help="Create a new workspace in the current directory.")
|
|
35
|
-
def create(
|
|
36
|
-
name: Optional[str] = typer.Option(
|
|
37
|
-
None,
|
|
38
|
-
"-n",
|
|
39
|
-
"--name",
|
|
40
|
-
help="Name of the new workspace.",
|
|
41
|
-
show_default=False,
|
|
42
|
-
),
|
|
43
|
-
template: Optional[str] = typer.Option(
|
|
44
|
-
None,
|
|
45
|
-
"-t",
|
|
46
|
-
"--template",
|
|
47
|
-
help="Starter template for the workspace.",
|
|
48
|
-
show_default=False,
|
|
49
|
-
),
|
|
50
|
-
url: Optional[str] = typer.Option(
|
|
51
|
-
None,
|
|
52
|
-
"-u",
|
|
53
|
-
"--url",
|
|
54
|
-
help="URL of the starter template.",
|
|
55
|
-
show_default=False,
|
|
56
|
-
),
|
|
57
|
-
print_debug_log: bool = typer.Option(
|
|
58
|
-
False,
|
|
59
|
-
"-d",
|
|
60
|
-
"--debug",
|
|
61
|
-
help="Print debug logs.",
|
|
62
|
-
),
|
|
63
|
-
):
|
|
64
|
-
"""\b
|
|
65
|
-
Create a new workspace in the current directory using a starter template or url
|
|
66
|
-
\b
|
|
67
|
-
Examples:
|
|
68
|
-
> ag ws create -t ai-app -> Create an `ai-app` in the current directory
|
|
69
|
-
> ag ws create -t ai-app -n my-ai-app -> Create an `ai-app` named `my-ai-app` in the current directory
|
|
70
|
-
"""
|
|
71
|
-
if print_debug_log:
|
|
72
|
-
set_log_level_to_debug()
|
|
73
|
-
|
|
74
|
-
from agno.workspace.operator import create_workspace
|
|
75
|
-
|
|
76
|
-
create_workspace(name=name, template=template, url=url)
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
@ws_cli.command(short_help="Setup workspace from the current directory")
|
|
80
|
-
def setup(
|
|
81
|
-
path: Optional[str] = typer.Argument(
|
|
82
|
-
None,
|
|
83
|
-
help="Path to workspace [default: current directory]",
|
|
84
|
-
show_default=False,
|
|
85
|
-
),
|
|
86
|
-
print_debug_log: bool = typer.Option(
|
|
87
|
-
False,
|
|
88
|
-
"-d",
|
|
89
|
-
"--debug",
|
|
90
|
-
help="Print debug logs.",
|
|
91
|
-
),
|
|
92
|
-
):
|
|
93
|
-
"""\b
|
|
94
|
-
Setup a workspace. This command can be run from the workspace directory OR using the workspace path.
|
|
95
|
-
\b
|
|
96
|
-
Examples:
|
|
97
|
-
> `ag ws setup` -> Setup the current directory as a workspace
|
|
98
|
-
> `ag ws setup ai-app` -> Setup the `ai-app` folder as a workspace
|
|
99
|
-
"""
|
|
100
|
-
if print_debug_log:
|
|
101
|
-
set_log_level_to_debug()
|
|
102
|
-
|
|
103
|
-
from agno.workspace.operator import setup_workspace
|
|
104
|
-
|
|
105
|
-
# By default, we assume this command is run from the workspace directory
|
|
106
|
-
ws_root_path: Path = Path(".").resolve()
|
|
107
|
-
|
|
108
|
-
# If the user provides a path, use that to setup the workspace
|
|
109
|
-
if path is not None:
|
|
110
|
-
ws_root_path = Path(".").joinpath(path).resolve()
|
|
111
|
-
setup_workspace(ws_root_path=ws_root_path)
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
@ws_cli.command(short_help="Create resources for the active workspace")
|
|
115
|
-
def up(
|
|
116
|
-
resource_filter: Optional[str] = typer.Argument(
|
|
117
|
-
None,
|
|
118
|
-
help="Resource filter. Format - ENV:INFRA:GROUP:NAME:TYPE",
|
|
119
|
-
),
|
|
120
|
-
env_filter: Optional[str] = typer.Option(None, "-e", "--env", metavar="", help="Filter the environment to deploy."),
|
|
121
|
-
infra_filter: Optional[str] = typer.Option(None, "-i", "--infra", metavar="", help="Filter the infra to deploy."),
|
|
122
|
-
group_filter: Optional[str] = typer.Option(
|
|
123
|
-
None, "-g", "--group", metavar="", help="Filter resources using group name."
|
|
124
|
-
),
|
|
125
|
-
name_filter: Optional[str] = typer.Option(None, "-n", "--name", metavar="", help="Filter resource using name."),
|
|
126
|
-
type_filter: Optional[str] = typer.Option(
|
|
127
|
-
None,
|
|
128
|
-
"-t",
|
|
129
|
-
"--type",
|
|
130
|
-
metavar="",
|
|
131
|
-
help="Filter resource using type",
|
|
132
|
-
),
|
|
133
|
-
dry_run: bool = typer.Option(
|
|
134
|
-
False,
|
|
135
|
-
"-dr",
|
|
136
|
-
"--dry-run",
|
|
137
|
-
help="Print resources and exit.",
|
|
138
|
-
),
|
|
139
|
-
auto_confirm: bool = typer.Option(
|
|
140
|
-
False,
|
|
141
|
-
"-y",
|
|
142
|
-
"--yes",
|
|
143
|
-
help="Skip confirmation before deploying resources.",
|
|
144
|
-
),
|
|
145
|
-
print_debug_log: bool = typer.Option(
|
|
146
|
-
False,
|
|
147
|
-
"-d",
|
|
148
|
-
"--debug",
|
|
149
|
-
help="Print debug logs.",
|
|
150
|
-
),
|
|
151
|
-
force: Optional[bool] = typer.Option(
|
|
152
|
-
None,
|
|
153
|
-
"-f",
|
|
154
|
-
"--force",
|
|
155
|
-
help="Force create resources where applicable.",
|
|
156
|
-
),
|
|
157
|
-
pull: Optional[bool] = typer.Option(
|
|
158
|
-
None,
|
|
159
|
-
"-p",
|
|
160
|
-
"--pull",
|
|
161
|
-
help="Pull images where applicable.",
|
|
162
|
-
),
|
|
163
|
-
):
|
|
164
|
-
"""\b
|
|
165
|
-
Create resources for the active workspace
|
|
166
|
-
Options can be used to limit the resources to create.
|
|
167
|
-
--env : Env (dev, stg, prd)
|
|
168
|
-
--infra : Infra type (docker, aws)
|
|
169
|
-
--group : Group name
|
|
170
|
-
--name : Resource name
|
|
171
|
-
--type : Resource type
|
|
172
|
-
\b
|
|
173
|
-
Options can also be provided as a RESOURCE_FILTER in the format: ENV:INFRA:GROUP:NAME:TYPE
|
|
174
|
-
\b
|
|
175
|
-
Examples:
|
|
176
|
-
> `ag ws up` -> Deploy all resources
|
|
177
|
-
> `ag ws up dev` -> Deploy all dev resources
|
|
178
|
-
> `ag ws up prd` -> Deploy all prd resources
|
|
179
|
-
> `ag ws up prd:aws` -> Deploy all prd aws resources
|
|
180
|
-
> `ag ws up prd:::s3` -> Deploy prd resources matching name s3
|
|
181
|
-
"""
|
|
182
|
-
if print_debug_log:
|
|
183
|
-
set_log_level_to_debug()
|
|
184
|
-
|
|
185
|
-
from agno.cli.config import AgnoCliConfig
|
|
186
|
-
from agno.cli.operator import initialize_agno
|
|
187
|
-
from agno.utils.resource_filter import parse_resource_filter
|
|
188
|
-
from agno.workspace.config import WorkspaceConfig
|
|
189
|
-
from agno.workspace.helpers import get_workspace_dir_path
|
|
190
|
-
from agno.workspace.operator import setup_workspace, start_workspace
|
|
191
|
-
|
|
192
|
-
agno_config: Optional[AgnoCliConfig] = AgnoCliConfig.from_saved_config()
|
|
193
|
-
if not agno_config:
|
|
194
|
-
agno_config = initialize_agno()
|
|
195
|
-
if not agno_config:
|
|
196
|
-
log_config_not_available_msg()
|
|
197
|
-
return
|
|
198
|
-
agno_config = cast(AgnoCliConfig, agno_config)
|
|
199
|
-
|
|
200
|
-
# Workspace to start
|
|
201
|
-
ws_to_start: Optional[WorkspaceConfig] = None
|
|
202
|
-
|
|
203
|
-
# If there is an existing workspace at current path, use that workspace
|
|
204
|
-
current_path: Path = Path(".").resolve()
|
|
205
|
-
ws_at_current_path: Optional[WorkspaceConfig] = agno_config.get_ws_config_by_path(current_path)
|
|
206
|
-
if ws_at_current_path is not None:
|
|
207
|
-
logger.debug(f"Found workspace at: {ws_at_current_path.ws_root_path}")
|
|
208
|
-
if str(ws_at_current_path.ws_root_path) != agno_config.active_ws_dir:
|
|
209
|
-
logger.debug(f"Updating active workspace to {ws_at_current_path.ws_root_path}")
|
|
210
|
-
agno_config.set_active_ws_dir(ws_at_current_path.ws_root_path)
|
|
211
|
-
ws_to_start = ws_at_current_path
|
|
212
|
-
|
|
213
|
-
# If there's no existing workspace at current path, check if there's a `workspace` dir in the current path
|
|
214
|
-
# In that case setup the workspace
|
|
215
|
-
if ws_to_start is None:
|
|
216
|
-
workspace_ws_dir_path = get_workspace_dir_path(current_path)
|
|
217
|
-
if workspace_ws_dir_path is not None:
|
|
218
|
-
logger.debug(f"Found workspace directory: {workspace_ws_dir_path}")
|
|
219
|
-
logger.debug(f"Setting up a workspace at: {current_path}")
|
|
220
|
-
ws_to_start = setup_workspace(ws_root_path=current_path)
|
|
221
|
-
print_info("")
|
|
222
|
-
|
|
223
|
-
# If there's no workspace at current path, check if an active workspace exists
|
|
224
|
-
if ws_to_start is None:
|
|
225
|
-
active_ws_config: Optional[WorkspaceConfig] = agno_config.get_active_ws_config()
|
|
226
|
-
# If there's an active workspace, use that workspace
|
|
227
|
-
if active_ws_config is not None:
|
|
228
|
-
ws_to_start = active_ws_config
|
|
229
|
-
|
|
230
|
-
# If there's no workspace to start, raise an error showing available workspaces
|
|
231
|
-
if ws_to_start is None:
|
|
232
|
-
log_active_workspace_not_available()
|
|
233
|
-
avl_ws = agno_config.available_ws
|
|
234
|
-
if avl_ws:
|
|
235
|
-
print_available_workspaces(avl_ws)
|
|
236
|
-
return
|
|
237
|
-
|
|
238
|
-
target_env: Optional[str] = None
|
|
239
|
-
target_infra: Optional[str] = None
|
|
240
|
-
target_group: Optional[str] = None
|
|
241
|
-
target_name: Optional[str] = None
|
|
242
|
-
target_type: Optional[str] = None
|
|
243
|
-
|
|
244
|
-
# derive env:infra:name:type:group from ws_filter
|
|
245
|
-
if resource_filter is not None:
|
|
246
|
-
if not isinstance(resource_filter, str):
|
|
247
|
-
raise TypeError(f"Invalid resource_filter. Expected: str, Received: {type(resource_filter)}")
|
|
248
|
-
(
|
|
249
|
-
target_env,
|
|
250
|
-
target_infra,
|
|
251
|
-
target_group,
|
|
252
|
-
target_name,
|
|
253
|
-
target_type,
|
|
254
|
-
) = parse_resource_filter(resource_filter)
|
|
255
|
-
|
|
256
|
-
# derive env:infra:name:type:group from command options
|
|
257
|
-
if target_env is None and env_filter is not None and isinstance(env_filter, str):
|
|
258
|
-
target_env = env_filter
|
|
259
|
-
if target_infra is None and infra_filter is not None and isinstance(infra_filter, str):
|
|
260
|
-
target_infra = infra_filter
|
|
261
|
-
if target_group is None and group_filter is not None and isinstance(group_filter, str):
|
|
262
|
-
target_group = group_filter
|
|
263
|
-
if target_name is None and name_filter is not None and isinstance(name_filter, str):
|
|
264
|
-
target_name = name_filter
|
|
265
|
-
if target_type is None and type_filter is not None and isinstance(type_filter, str):
|
|
266
|
-
target_type = type_filter
|
|
267
|
-
|
|
268
|
-
# derive env:infra:name:type:group from defaults
|
|
269
|
-
if target_env is None:
|
|
270
|
-
target_env = ws_to_start.workspace_settings.default_env if ws_to_start.workspace_settings else None
|
|
271
|
-
if target_infra is None:
|
|
272
|
-
target_infra = ws_to_start.workspace_settings.default_infra if ws_to_start.workspace_settings else None
|
|
273
|
-
|
|
274
|
-
start_workspace(
|
|
275
|
-
agno_config=agno_config,
|
|
276
|
-
ws_config=ws_to_start,
|
|
277
|
-
target_env=target_env,
|
|
278
|
-
target_infra=target_infra,
|
|
279
|
-
target_group=target_group,
|
|
280
|
-
target_name=target_name,
|
|
281
|
-
target_type=target_type,
|
|
282
|
-
dry_run=dry_run,
|
|
283
|
-
auto_confirm=auto_confirm,
|
|
284
|
-
force=force,
|
|
285
|
-
pull=pull,
|
|
286
|
-
)
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
@ws_cli.command(short_help="Delete resources for active workspace")
|
|
290
|
-
def down(
|
|
291
|
-
resource_filter: Optional[str] = typer.Argument(
|
|
292
|
-
None,
|
|
293
|
-
help="Resource filter. Format - ENV:INFRA:GROUP:NAME:TYPE",
|
|
294
|
-
),
|
|
295
|
-
env_filter: str = typer.Option(None, "-e", "--env", metavar="", help="Filter the environment to shut down."),
|
|
296
|
-
infra_filter: Optional[str] = typer.Option(
|
|
297
|
-
None, "-i", "--infra", metavar="", help="Filter the infra to shut down."
|
|
298
|
-
),
|
|
299
|
-
group_filter: Optional[str] = typer.Option(
|
|
300
|
-
None, "-g", "--group", metavar="", help="Filter resources using group name."
|
|
301
|
-
),
|
|
302
|
-
name_filter: Optional[str] = typer.Option(None, "-n", "--name", metavar="", help="Filter resource using name."),
|
|
303
|
-
type_filter: Optional[str] = typer.Option(
|
|
304
|
-
None,
|
|
305
|
-
"-t",
|
|
306
|
-
"--type",
|
|
307
|
-
metavar="",
|
|
308
|
-
help="Filter resource using type",
|
|
309
|
-
),
|
|
310
|
-
dry_run: bool = typer.Option(
|
|
311
|
-
False,
|
|
312
|
-
"-dr",
|
|
313
|
-
"--dry-run",
|
|
314
|
-
help="Print resources and exit.",
|
|
315
|
-
),
|
|
316
|
-
auto_confirm: bool = typer.Option(
|
|
317
|
-
False,
|
|
318
|
-
"-y",
|
|
319
|
-
"--yes",
|
|
320
|
-
help="Skip the confirmation before deleting resources.",
|
|
321
|
-
),
|
|
322
|
-
print_debug_log: bool = typer.Option(
|
|
323
|
-
False,
|
|
324
|
-
"-d",
|
|
325
|
-
"--debug",
|
|
326
|
-
help="Print debug logs.",
|
|
327
|
-
),
|
|
328
|
-
force: bool = typer.Option(
|
|
329
|
-
None,
|
|
330
|
-
"-f",
|
|
331
|
-
"--force",
|
|
332
|
-
help="Force",
|
|
333
|
-
),
|
|
334
|
-
):
|
|
335
|
-
"""\b
|
|
336
|
-
Delete resources for the active workspace.
|
|
337
|
-
Options can be used to limit the resources to delete.
|
|
338
|
-
--env : Env (dev, stg, prd)
|
|
339
|
-
--infra : Infra type (docker, aws)
|
|
340
|
-
--group : Group name
|
|
341
|
-
--name : Resource name
|
|
342
|
-
--type : Resource type
|
|
343
|
-
\b
|
|
344
|
-
Options can also be provided as a RESOURCE_FILTER in the format: ENV:INFRA:GROUP:NAME:TYPE
|
|
345
|
-
\b
|
|
346
|
-
Examples:
|
|
347
|
-
> `ag ws down` -> Delete all resources
|
|
348
|
-
"""
|
|
349
|
-
if print_debug_log:
|
|
350
|
-
set_log_level_to_debug()
|
|
351
|
-
|
|
352
|
-
from agno.cli.config import AgnoCliConfig
|
|
353
|
-
from agno.cli.operator import initialize_agno
|
|
354
|
-
from agno.utils.resource_filter import parse_resource_filter
|
|
355
|
-
from agno.workspace.config import WorkspaceConfig
|
|
356
|
-
from agno.workspace.helpers import get_workspace_dir_path
|
|
357
|
-
from agno.workspace.operator import setup_workspace, stop_workspace
|
|
358
|
-
|
|
359
|
-
agno_config: Optional[AgnoCliConfig] = AgnoCliConfig.from_saved_config()
|
|
360
|
-
if not agno_config:
|
|
361
|
-
agno_config = initialize_agno()
|
|
362
|
-
if not agno_config:
|
|
363
|
-
log_config_not_available_msg()
|
|
364
|
-
return
|
|
365
|
-
|
|
366
|
-
# Workspace to stop
|
|
367
|
-
ws_to_stop: Optional[WorkspaceConfig] = None
|
|
368
|
-
|
|
369
|
-
# If there is an existing workspace at current path, use that workspace
|
|
370
|
-
current_path: Path = Path(".").resolve()
|
|
371
|
-
ws_at_current_path: Optional[WorkspaceConfig] = agno_config.get_ws_config_by_path(current_path)
|
|
372
|
-
if ws_at_current_path is not None:
|
|
373
|
-
logger.debug(f"Found workspace at: {ws_at_current_path.ws_root_path}")
|
|
374
|
-
if str(ws_at_current_path.ws_root_path) != agno_config.active_ws_dir:
|
|
375
|
-
logger.debug(f"Updating active workspace to {ws_at_current_path.ws_root_path}")
|
|
376
|
-
agno_config.set_active_ws_dir(ws_at_current_path.ws_root_path)
|
|
377
|
-
ws_to_stop = ws_at_current_path
|
|
378
|
-
|
|
379
|
-
# If there's no existing workspace at current path, check if there's a `workspace` dir in the current path
|
|
380
|
-
# In that case setup the workspace
|
|
381
|
-
if ws_to_stop is None:
|
|
382
|
-
workspace_ws_dir_path = get_workspace_dir_path(current_path)
|
|
383
|
-
if workspace_ws_dir_path is not None:
|
|
384
|
-
logger.debug(f"Found workspace directory: {workspace_ws_dir_path}")
|
|
385
|
-
logger.debug(f"Setting up a workspace at: {current_path}")
|
|
386
|
-
ws_to_stop = setup_workspace(ws_root_path=current_path)
|
|
387
|
-
print_info("")
|
|
388
|
-
|
|
389
|
-
# If there's no workspace at current path, check if an active workspace exists
|
|
390
|
-
if ws_to_stop is None:
|
|
391
|
-
active_ws_config: Optional[WorkspaceConfig] = agno_config.get_active_ws_config()
|
|
392
|
-
# If there's an active workspace, use that workspace
|
|
393
|
-
if active_ws_config is not None:
|
|
394
|
-
ws_to_stop = active_ws_config
|
|
395
|
-
|
|
396
|
-
# If there's no workspace to stop, raise an error showing available workspaces
|
|
397
|
-
if ws_to_stop is None:
|
|
398
|
-
log_active_workspace_not_available()
|
|
399
|
-
avl_ws = agno_config.available_ws
|
|
400
|
-
if avl_ws:
|
|
401
|
-
print_available_workspaces(avl_ws)
|
|
402
|
-
return
|
|
403
|
-
|
|
404
|
-
target_env: Optional[str] = None
|
|
405
|
-
target_infra: Optional[str] = None
|
|
406
|
-
target_group: Optional[str] = None
|
|
407
|
-
target_name: Optional[str] = None
|
|
408
|
-
target_type: Optional[str] = None
|
|
409
|
-
|
|
410
|
-
# derive env:infra:name:type:group from ws_filter
|
|
411
|
-
if resource_filter is not None:
|
|
412
|
-
if not isinstance(resource_filter, str):
|
|
413
|
-
raise TypeError(f"Invalid resource_filter. Expected: str, Received: {type(resource_filter)}")
|
|
414
|
-
(
|
|
415
|
-
target_env,
|
|
416
|
-
target_infra,
|
|
417
|
-
target_group,
|
|
418
|
-
target_name,
|
|
419
|
-
target_type,
|
|
420
|
-
) = parse_resource_filter(resource_filter)
|
|
421
|
-
|
|
422
|
-
# derive env:infra:name:type:group from command options
|
|
423
|
-
if target_env is None and env_filter is not None and isinstance(env_filter, str):
|
|
424
|
-
target_env = env_filter
|
|
425
|
-
if target_infra is None and infra_filter is not None and isinstance(infra_filter, str):
|
|
426
|
-
target_infra = infra_filter
|
|
427
|
-
if target_group is None and group_filter is not None and isinstance(group_filter, str):
|
|
428
|
-
target_group = group_filter
|
|
429
|
-
if target_name is None and name_filter is not None and isinstance(name_filter, str):
|
|
430
|
-
target_name = name_filter
|
|
431
|
-
if target_type is None and type_filter is not None and isinstance(type_filter, str):
|
|
432
|
-
target_type = type_filter
|
|
433
|
-
|
|
434
|
-
# derive env:infra:name:type:group from defaults
|
|
435
|
-
if target_env is None:
|
|
436
|
-
target_env = ws_to_stop.workspace_settings.default_env if ws_to_stop.workspace_settings else None
|
|
437
|
-
if target_infra is None:
|
|
438
|
-
target_infra = ws_to_stop.workspace_settings.default_infra if ws_to_stop.workspace_settings else None
|
|
439
|
-
|
|
440
|
-
stop_workspace(
|
|
441
|
-
agno_config=agno_config,
|
|
442
|
-
ws_config=ws_to_stop,
|
|
443
|
-
target_env=target_env,
|
|
444
|
-
target_infra=target_infra,
|
|
445
|
-
target_group=target_group,
|
|
446
|
-
target_name=target_name,
|
|
447
|
-
target_type=target_type,
|
|
448
|
-
dry_run=dry_run,
|
|
449
|
-
auto_confirm=auto_confirm,
|
|
450
|
-
force=force,
|
|
451
|
-
)
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
@ws_cli.command(short_help="Update resources for active workspace")
|
|
455
|
-
def patch(
|
|
456
|
-
resource_filter: Optional[str] = typer.Argument(
|
|
457
|
-
None,
|
|
458
|
-
help="Resource filter. Format - ENV:INFRA:GROUP:NAME:TYPE",
|
|
459
|
-
),
|
|
460
|
-
env_filter: str = typer.Option(None, "-e", "--env", metavar="", help="Filter the environment to patch."),
|
|
461
|
-
infra_filter: Optional[str] = typer.Option(None, "-i", "--infra", metavar="", help="Filter the infra to patch."),
|
|
462
|
-
group_filter: Optional[str] = typer.Option(
|
|
463
|
-
None, "-g", "--group", metavar="", help="Filter resources using group name."
|
|
464
|
-
),
|
|
465
|
-
name_filter: Optional[str] = typer.Option(None, "-n", "--name", metavar="", help="Filter resource using name."),
|
|
466
|
-
type_filter: Optional[str] = typer.Option(
|
|
467
|
-
None,
|
|
468
|
-
"-t",
|
|
469
|
-
"--type",
|
|
470
|
-
metavar="",
|
|
471
|
-
help="Filter resource using type",
|
|
472
|
-
),
|
|
473
|
-
dry_run: bool = typer.Option(
|
|
474
|
-
False,
|
|
475
|
-
"-dr",
|
|
476
|
-
"--dry-run",
|
|
477
|
-
help="Print resources and exit.",
|
|
478
|
-
),
|
|
479
|
-
auto_confirm: bool = typer.Option(
|
|
480
|
-
False,
|
|
481
|
-
"-y",
|
|
482
|
-
"--yes",
|
|
483
|
-
help="Skip the confirmation before patching resources.",
|
|
484
|
-
),
|
|
485
|
-
print_debug_log: bool = typer.Option(
|
|
486
|
-
False,
|
|
487
|
-
"-d",
|
|
488
|
-
"--debug",
|
|
489
|
-
help="Print debug logs.",
|
|
490
|
-
),
|
|
491
|
-
force: bool = typer.Option(
|
|
492
|
-
None,
|
|
493
|
-
"-f",
|
|
494
|
-
"--force",
|
|
495
|
-
help="Force",
|
|
496
|
-
),
|
|
497
|
-
pull: Optional[bool] = typer.Option(
|
|
498
|
-
None,
|
|
499
|
-
"-p",
|
|
500
|
-
"--pull",
|
|
501
|
-
help="Pull images where applicable.",
|
|
502
|
-
),
|
|
503
|
-
):
|
|
504
|
-
"""\b
|
|
505
|
-
Update resources for the active workspace.
|
|
506
|
-
Options can be used to limit the resources to update.
|
|
507
|
-
--env : Env (dev, stg, prd)
|
|
508
|
-
--infra : Infra type (docker, aws)
|
|
509
|
-
--group : Group name
|
|
510
|
-
--name : Resource name
|
|
511
|
-
--type : Resource type
|
|
512
|
-
\b
|
|
513
|
-
Options can also be provided as a RESOURCE_FILTER in the format: ENV:INFRA:GROUP:NAME:TYPE
|
|
514
|
-
Examples:
|
|
515
|
-
\b
|
|
516
|
-
> `ag ws patch` -> Patch all resources
|
|
517
|
-
"""
|
|
518
|
-
if print_debug_log:
|
|
519
|
-
set_log_level_to_debug()
|
|
520
|
-
|
|
521
|
-
from agno.cli.config import AgnoCliConfig
|
|
522
|
-
from agno.cli.operator import initialize_agno
|
|
523
|
-
from agno.utils.resource_filter import parse_resource_filter
|
|
524
|
-
from agno.workspace.config import WorkspaceConfig
|
|
525
|
-
from agno.workspace.helpers import get_workspace_dir_path
|
|
526
|
-
from agno.workspace.operator import setup_workspace, update_workspace
|
|
527
|
-
|
|
528
|
-
agno_config: Optional[AgnoCliConfig] = AgnoCliConfig.from_saved_config()
|
|
529
|
-
if not agno_config:
|
|
530
|
-
agno_config = initialize_agno()
|
|
531
|
-
if not agno_config:
|
|
532
|
-
log_config_not_available_msg()
|
|
533
|
-
return
|
|
534
|
-
|
|
535
|
-
# Workspace to patch
|
|
536
|
-
ws_to_patch: Optional[WorkspaceConfig] = None
|
|
537
|
-
|
|
538
|
-
# If there is an existing workspace at current path, use that workspace
|
|
539
|
-
current_path: Path = Path(".").resolve()
|
|
540
|
-
ws_at_current_path: Optional[WorkspaceConfig] = agno_config.get_ws_config_by_path(current_path)
|
|
541
|
-
if ws_at_current_path is not None:
|
|
542
|
-
logger.debug(f"Found workspace at: {ws_at_current_path.ws_root_path}")
|
|
543
|
-
if str(ws_at_current_path.ws_root_path) != agno_config.active_ws_dir:
|
|
544
|
-
logger.debug(f"Updating active workspace to {ws_at_current_path.ws_root_path}")
|
|
545
|
-
agno_config.set_active_ws_dir(ws_at_current_path.ws_root_path)
|
|
546
|
-
ws_to_patch = ws_at_current_path
|
|
547
|
-
|
|
548
|
-
# If there's no existing workspace at current path, check if there's a `workspace` dir in the current path
|
|
549
|
-
# In that case setup the workspace
|
|
550
|
-
if ws_to_patch is None:
|
|
551
|
-
workspace_ws_dir_path = get_workspace_dir_path(current_path)
|
|
552
|
-
if workspace_ws_dir_path is not None:
|
|
553
|
-
logger.debug(f"Found workspace directory: {workspace_ws_dir_path}")
|
|
554
|
-
logger.debug(f"Setting up a workspace at: {current_path}")
|
|
555
|
-
ws_to_patch = setup_workspace(ws_root_path=current_path)
|
|
556
|
-
print_info("")
|
|
557
|
-
|
|
558
|
-
# If there's no workspace at current path, check if an active workspace exists
|
|
559
|
-
if ws_to_patch is None:
|
|
560
|
-
active_ws_config: Optional[WorkspaceConfig] = agno_config.get_active_ws_config()
|
|
561
|
-
# If there's an active workspace, use that workspace
|
|
562
|
-
if active_ws_config is not None:
|
|
563
|
-
ws_to_patch = active_ws_config
|
|
564
|
-
|
|
565
|
-
# If there's no workspace to patch, raise an error showing available workspaces
|
|
566
|
-
if ws_to_patch is None:
|
|
567
|
-
log_active_workspace_not_available()
|
|
568
|
-
avl_ws = agno_config.available_ws
|
|
569
|
-
if avl_ws:
|
|
570
|
-
print_available_workspaces(avl_ws)
|
|
571
|
-
return
|
|
572
|
-
|
|
573
|
-
target_env: Optional[str] = None
|
|
574
|
-
target_infra: Optional[str] = None
|
|
575
|
-
target_group: Optional[str] = None
|
|
576
|
-
target_name: Optional[str] = None
|
|
577
|
-
target_type: Optional[str] = None
|
|
578
|
-
|
|
579
|
-
# derive env:infra:name:type:group from ws_filter
|
|
580
|
-
if resource_filter is not None:
|
|
581
|
-
if not isinstance(resource_filter, str):
|
|
582
|
-
raise TypeError(f"Invalid resource_filter. Expected: str, Received: {type(resource_filter)}")
|
|
583
|
-
(
|
|
584
|
-
target_env,
|
|
585
|
-
target_infra,
|
|
586
|
-
target_group,
|
|
587
|
-
target_name,
|
|
588
|
-
target_type,
|
|
589
|
-
) = parse_resource_filter(resource_filter)
|
|
590
|
-
|
|
591
|
-
# derive env:infra:name:type:group from command options
|
|
592
|
-
if target_env is None and env_filter is not None and isinstance(env_filter, str):
|
|
593
|
-
target_env = env_filter
|
|
594
|
-
if target_infra is None and infra_filter is not None and isinstance(infra_filter, str):
|
|
595
|
-
target_infra = infra_filter
|
|
596
|
-
if target_group is None and group_filter is not None and isinstance(group_filter, str):
|
|
597
|
-
target_group = group_filter
|
|
598
|
-
if target_name is None and name_filter is not None and isinstance(name_filter, str):
|
|
599
|
-
target_name = name_filter
|
|
600
|
-
if target_type is None and type_filter is not None and isinstance(type_filter, str):
|
|
601
|
-
target_type = type_filter
|
|
602
|
-
|
|
603
|
-
# derive env:infra:name:type:group from defaults
|
|
604
|
-
if target_env is None:
|
|
605
|
-
target_env = ws_to_patch.workspace_settings.default_env if ws_to_patch.workspace_settings else None
|
|
606
|
-
if target_infra is None:
|
|
607
|
-
target_infra = ws_to_patch.workspace_settings.default_infra if ws_to_patch.workspace_settings else None
|
|
608
|
-
|
|
609
|
-
update_workspace(
|
|
610
|
-
agno_config=agno_config,
|
|
611
|
-
ws_config=ws_to_patch,
|
|
612
|
-
target_env=target_env,
|
|
613
|
-
target_infra=target_infra,
|
|
614
|
-
target_group=target_group,
|
|
615
|
-
target_name=target_name,
|
|
616
|
-
target_type=target_type,
|
|
617
|
-
dry_run=dry_run,
|
|
618
|
-
auto_confirm=auto_confirm,
|
|
619
|
-
force=force,
|
|
620
|
-
pull=pull,
|
|
621
|
-
)
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
@ws_cli.command(short_help="Restart resources for active workspace")
|
|
625
|
-
def restart(
|
|
626
|
-
resource_filter: Optional[str] = typer.Argument(
|
|
627
|
-
None,
|
|
628
|
-
help="Resource filter. Format - ENV:INFRA:GROUP:NAME:TYPE",
|
|
629
|
-
),
|
|
630
|
-
env_filter: str = typer.Option(None, "-e", "--env", metavar="", help="Filter the environment to restart."),
|
|
631
|
-
infra_filter: Optional[str] = typer.Option(None, "-i", "--infra", metavar="", help="Filter the infra to restart."),
|
|
632
|
-
group_filter: Optional[str] = typer.Option(
|
|
633
|
-
None, "-g", "--group", metavar="", help="Filter resources using group name."
|
|
634
|
-
),
|
|
635
|
-
name_filter: Optional[str] = typer.Option(None, "-n", "--name", metavar="", help="Filter resource using name."),
|
|
636
|
-
type_filter: Optional[str] = typer.Option(
|
|
637
|
-
None,
|
|
638
|
-
"-t",
|
|
639
|
-
"--type",
|
|
640
|
-
metavar="",
|
|
641
|
-
help="Filter resource using type",
|
|
642
|
-
),
|
|
643
|
-
dry_run: bool = typer.Option(
|
|
644
|
-
False,
|
|
645
|
-
"-dr",
|
|
646
|
-
"--dry-run",
|
|
647
|
-
help="Print resources and exit.",
|
|
648
|
-
),
|
|
649
|
-
auto_confirm: bool = typer.Option(
|
|
650
|
-
False,
|
|
651
|
-
"-y",
|
|
652
|
-
"--yes",
|
|
653
|
-
help="Skip the confirmation before restarting resources.",
|
|
654
|
-
),
|
|
655
|
-
print_debug_log: bool = typer.Option(
|
|
656
|
-
False,
|
|
657
|
-
"-d",
|
|
658
|
-
"--debug",
|
|
659
|
-
help="Print debug logs.",
|
|
660
|
-
),
|
|
661
|
-
force: bool = typer.Option(
|
|
662
|
-
None,
|
|
663
|
-
"-f",
|
|
664
|
-
"--force",
|
|
665
|
-
help="Force",
|
|
666
|
-
),
|
|
667
|
-
pull: Optional[bool] = typer.Option(
|
|
668
|
-
None,
|
|
669
|
-
"-p",
|
|
670
|
-
"--pull",
|
|
671
|
-
help="Pull images where applicable.",
|
|
672
|
-
),
|
|
673
|
-
):
|
|
674
|
-
"""\b
|
|
675
|
-
Restarts the active workspace. i.e. runs `ag ws down` and then `ag ws up`.
|
|
676
|
-
|
|
677
|
-
\b
|
|
678
|
-
Examples:
|
|
679
|
-
> `ag ws restart`
|
|
680
|
-
"""
|
|
681
|
-
if print_debug_log:
|
|
682
|
-
set_log_level_to_debug()
|
|
683
|
-
|
|
684
|
-
from time import sleep
|
|
685
|
-
|
|
686
|
-
down(
|
|
687
|
-
resource_filter=resource_filter,
|
|
688
|
-
env_filter=env_filter,
|
|
689
|
-
group_filter=group_filter,
|
|
690
|
-
infra_filter=infra_filter,
|
|
691
|
-
name_filter=name_filter,
|
|
692
|
-
type_filter=type_filter,
|
|
693
|
-
dry_run=dry_run,
|
|
694
|
-
auto_confirm=auto_confirm,
|
|
695
|
-
print_debug_log=print_debug_log,
|
|
696
|
-
force=force,
|
|
697
|
-
)
|
|
698
|
-
print_info("Sleeping for 2 seconds..")
|
|
699
|
-
sleep(2)
|
|
700
|
-
up(
|
|
701
|
-
resource_filter=resource_filter,
|
|
702
|
-
env_filter=env_filter,
|
|
703
|
-
infra_filter=infra_filter,
|
|
704
|
-
group_filter=group_filter,
|
|
705
|
-
name_filter=name_filter,
|
|
706
|
-
type_filter=type_filter,
|
|
707
|
-
dry_run=dry_run,
|
|
708
|
-
auto_confirm=auto_confirm,
|
|
709
|
-
print_debug_log=print_debug_log,
|
|
710
|
-
force=force,
|
|
711
|
-
pull=pull,
|
|
712
|
-
)
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
@ws_cli.command(short_help="Prints active workspace config")
|
|
716
|
-
def config(
|
|
717
|
-
print_debug_log: bool = typer.Option(
|
|
718
|
-
False,
|
|
719
|
-
"-d",
|
|
720
|
-
"--debug",
|
|
721
|
-
help="Print debug logs.",
|
|
722
|
-
),
|
|
723
|
-
):
|
|
724
|
-
"""\b
|
|
725
|
-
Prints the active workspace config
|
|
726
|
-
|
|
727
|
-
\b
|
|
728
|
-
Examples:
|
|
729
|
-
$ `ag ws config` -> Print the active workspace config
|
|
730
|
-
"""
|
|
731
|
-
if print_debug_log:
|
|
732
|
-
set_log_level_to_debug()
|
|
733
|
-
|
|
734
|
-
from agno.cli.config import AgnoCliConfig
|
|
735
|
-
from agno.cli.operator import initialize_agno
|
|
736
|
-
from agno.utils.load_env import load_env
|
|
737
|
-
from agno.workspace.config import WorkspaceConfig
|
|
738
|
-
|
|
739
|
-
agno_config: Optional[AgnoCliConfig] = AgnoCliConfig.from_saved_config()
|
|
740
|
-
if not agno_config:
|
|
741
|
-
agno_config = initialize_agno()
|
|
742
|
-
if not agno_config:
|
|
743
|
-
log_config_not_available_msg()
|
|
744
|
-
return
|
|
745
|
-
|
|
746
|
-
active_ws_config: Optional[WorkspaceConfig] = agno_config.get_active_ws_config()
|
|
747
|
-
if active_ws_config is None:
|
|
748
|
-
log_active_workspace_not_available()
|
|
749
|
-
avl_ws = agno_config.available_ws
|
|
750
|
-
if avl_ws:
|
|
751
|
-
print_available_workspaces(avl_ws)
|
|
752
|
-
return
|
|
753
|
-
|
|
754
|
-
# Load environment from .env
|
|
755
|
-
load_env(
|
|
756
|
-
dotenv_dir=active_ws_config.ws_root_path,
|
|
757
|
-
)
|
|
758
|
-
print_info(active_ws_config.model_dump_json(include={"ws_name", "ws_root_path"}, indent=2))
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
@ws_cli.command(short_help="Delete workspace record")
|
|
762
|
-
def delete(
|
|
763
|
-
ws_name: Optional[str] = typer.Option(None, "-ws", help="Name of the workspace to delete"),
|
|
764
|
-
all_workspaces: bool = typer.Option(
|
|
765
|
-
False,
|
|
766
|
-
"-a",
|
|
767
|
-
"--all",
|
|
768
|
-
help="Delete all workspaces from Agno",
|
|
769
|
-
),
|
|
770
|
-
print_debug_log: bool = typer.Option(
|
|
771
|
-
False,
|
|
772
|
-
"-d",
|
|
773
|
-
"--debug",
|
|
774
|
-
help="Print debug logs.",
|
|
775
|
-
),
|
|
776
|
-
):
|
|
777
|
-
"""\b
|
|
778
|
-
Deletes the workspace record from agno.
|
|
779
|
-
NOTE: Does not delete any physical files.
|
|
780
|
-
|
|
781
|
-
\b
|
|
782
|
-
Examples:
|
|
783
|
-
$ `ag ws delete` -> Delete the active workspace from Agno
|
|
784
|
-
$ `ag ws delete -a` -> Delete all workspaces from Agno
|
|
785
|
-
"""
|
|
786
|
-
if print_debug_log:
|
|
787
|
-
set_log_level_to_debug()
|
|
788
|
-
|
|
789
|
-
from agno.cli.config import AgnoCliConfig
|
|
790
|
-
from agno.cli.operator import initialize_agno
|
|
791
|
-
from agno.workspace.operator import delete_workspace
|
|
792
|
-
|
|
793
|
-
agno_config: Optional[AgnoCliConfig] = AgnoCliConfig.from_saved_config()
|
|
794
|
-
if not agno_config:
|
|
795
|
-
agno_config = initialize_agno()
|
|
796
|
-
if not agno_config:
|
|
797
|
-
log_config_not_available_msg()
|
|
798
|
-
return
|
|
799
|
-
|
|
800
|
-
ws_to_delete: List[Path] = []
|
|
801
|
-
# Delete workspace by name if provided
|
|
802
|
-
if ws_name is not None:
|
|
803
|
-
ws_config = agno_config.get_ws_config_by_dir_name(ws_name)
|
|
804
|
-
if ws_config is None:
|
|
805
|
-
logger.error(f"Workspace {ws_name} not found")
|
|
806
|
-
return
|
|
807
|
-
ws_to_delete.append(ws_config.ws_root_path)
|
|
808
|
-
else:
|
|
809
|
-
# Delete all workspaces if flag is set
|
|
810
|
-
if all_workspaces:
|
|
811
|
-
ws_to_delete = [ws.ws_root_path for ws in agno_config.available_ws if ws.ws_root_path is not None]
|
|
812
|
-
else:
|
|
813
|
-
# By default, we assume this command is run for the active workspace
|
|
814
|
-
if agno_config.active_ws_dir is not None:
|
|
815
|
-
ws_to_delete.append(Path(agno_config.active_ws_dir))
|
|
816
|
-
|
|
817
|
-
delete_workspace(agno_config, ws_to_delete)
|