agno 2.2.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 +51 -0
- agno/agent/agent.py +10405 -0
- agno/api/__init__.py +0 -0
- agno/api/agent.py +28 -0
- agno/api/api.py +40 -0
- agno/api/evals.py +22 -0
- agno/api/os.py +17 -0
- agno/api/routes.py +13 -0
- agno/api/schemas/__init__.py +9 -0
- agno/api/schemas/agent.py +16 -0
- agno/api/schemas/evals.py +16 -0
- agno/api/schemas/os.py +14 -0
- agno/api/schemas/response.py +6 -0
- agno/api/schemas/team.py +16 -0
- agno/api/schemas/utils.py +21 -0
- agno/api/schemas/workflows.py +16 -0
- agno/api/settings.py +53 -0
- agno/api/team.py +30 -0
- 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/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 +598 -0
- agno/db/dynamo/__init__.py +3 -0
- agno/db/dynamo/dynamo.py +2042 -0
- agno/db/dynamo/schemas.py +314 -0
- agno/db/dynamo/utils.py +743 -0
- agno/db/firestore/__init__.py +3 -0
- agno/db/firestore/firestore.py +1795 -0
- agno/db/firestore/schemas.py +140 -0
- agno/db/firestore/utils.py +376 -0
- agno/db/gcs_json/__init__.py +3 -0
- agno/db/gcs_json/gcs_json_db.py +1335 -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 +1160 -0
- agno/db/in_memory/utils.py +230 -0
- agno/db/json/__init__.py +3 -0
- agno/db/json/json_db.py +1328 -0
- agno/db/json/utils.py +230 -0
- agno/db/migrations/__init__.py +0 -0
- agno/db/migrations/v1_to_v2.py +635 -0
- agno/db/mongo/__init__.py +17 -0
- agno/db/mongo/async_mongo.py +2026 -0
- agno/db/mongo/mongo.py +1982 -0
- agno/db/mongo/schemas.py +87 -0
- agno/db/mongo/utils.py +259 -0
- agno/db/mysql/__init__.py +3 -0
- agno/db/mysql/mysql.py +2308 -0
- agno/db/mysql/schemas.py +138 -0
- agno/db/mysql/utils.py +355 -0
- agno/db/postgres/__init__.py +4 -0
- agno/db/postgres/async_postgres.py +1927 -0
- agno/db/postgres/postgres.py +2260 -0
- agno/db/postgres/schemas.py +139 -0
- agno/db/postgres/utils.py +442 -0
- agno/db/redis/__init__.py +3 -0
- agno/db/redis/redis.py +1660 -0
- agno/db/redis/schemas.py +123 -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 +33 -0
- agno/db/schemas/knowledge.py +40 -0
- agno/db/schemas/memory.py +46 -0
- agno/db/schemas/metrics.py +0 -0
- agno/db/singlestore/__init__.py +3 -0
- agno/db/singlestore/schemas.py +130 -0
- agno/db/singlestore/singlestore.py +2272 -0
- agno/db/singlestore/utils.py +384 -0
- agno/db/sqlite/__init__.py +4 -0
- agno/db/sqlite/async_sqlite.py +2293 -0
- agno/db/sqlite/schemas.py +133 -0
- agno/db/sqlite/sqlite.py +2288 -0
- agno/db/sqlite/utils.py +431 -0
- agno/db/surrealdb/__init__.py +3 -0
- agno/db/surrealdb/metrics.py +292 -0
- agno/db/surrealdb/models.py +309 -0
- agno/db/surrealdb/queries.py +71 -0
- agno/db/surrealdb/surrealdb.py +1353 -0
- agno/db/surrealdb/utils.py +147 -0
- agno/db/utils.py +116 -0
- agno/debug.py +18 -0
- agno/eval/__init__.py +14 -0
- agno/eval/accuracy.py +834 -0
- agno/eval/performance.py +773 -0
- agno/eval/reliability.py +306 -0
- agno/eval/utils.py +119 -0
- agno/exceptions.py +161 -0
- 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/integrations/__init__.py +0 -0
- agno/integrations/discord/__init__.py +3 -0
- agno/integrations/discord/client.py +203 -0
- agno/knowledge/__init__.py +5 -0
- agno/knowledge/chunking/__init__.py +0 -0
- agno/knowledge/chunking/agentic.py +79 -0
- agno/knowledge/chunking/document.py +91 -0
- agno/knowledge/chunking/fixed.py +57 -0
- agno/knowledge/chunking/markdown.py +151 -0
- agno/knowledge/chunking/recursive.py +63 -0
- agno/knowledge/chunking/row.py +39 -0
- agno/knowledge/chunking/semantic.py +86 -0
- agno/knowledge/chunking/strategy.py +165 -0
- agno/knowledge/content.py +74 -0
- agno/knowledge/document/__init__.py +5 -0
- agno/knowledge/document/base.py +58 -0
- agno/knowledge/embedder/__init__.py +5 -0
- agno/knowledge/embedder/aws_bedrock.py +343 -0
- agno/knowledge/embedder/azure_openai.py +210 -0
- agno/knowledge/embedder/base.py +23 -0
- agno/knowledge/embedder/cohere.py +323 -0
- agno/knowledge/embedder/fastembed.py +62 -0
- agno/knowledge/embedder/fireworks.py +13 -0
- 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/knowledge/embedder/together.py +13 -0
- agno/knowledge/embedder/vllm.py +262 -0
- agno/knowledge/embedder/voyageai.py +165 -0
- agno/knowledge/knowledge.py +1988 -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 +166 -0
- agno/knowledge/reader/docx_reader.py +82 -0
- agno/knowledge/reader/field_labeled_csv_reader.py +292 -0
- agno/knowledge/reader/firecrawl_reader.py +201 -0
- agno/knowledge/reader/json_reader.py +87 -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 +194 -0
- agno/knowledge/reader/text_reader.py +115 -0
- agno/knowledge/reader/web_search_reader.py +372 -0
- agno/knowledge/reader/website_reader.py +455 -0
- agno/knowledge/reader/wikipedia_reader.py +59 -0
- agno/knowledge/reader/youtube_reader.py +78 -0
- agno/knowledge/remote_content/__init__.py +0 -0
- agno/knowledge/remote_content/remote_content.py +88 -0
- agno/knowledge/reranker/__init__.py +3 -0
- agno/knowledge/reranker/base.py +14 -0
- agno/knowledge/reranker/cohere.py +64 -0
- 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 +189 -0
- agno/media.py +462 -0
- agno/memory/__init__.py +3 -0
- agno/memory/manager.py +1327 -0
- agno/models/__init__.py +0 -0
- agno/models/aimlapi/__init__.py +5 -0
- agno/models/aimlapi/aimlapi.py +45 -0
- agno/models/anthropic/__init__.py +5 -0
- agno/models/anthropic/claude.py +757 -0
- agno/models/aws/__init__.py +15 -0
- agno/models/aws/bedrock.py +701 -0
- agno/models/aws/claude.py +378 -0
- agno/models/azure/__init__.py +18 -0
- agno/models/azure/ai_foundry.py +485 -0
- agno/models/azure/openai_chat.py +131 -0
- agno/models/base.py +2175 -0
- agno/models/cerebras/__init__.py +12 -0
- agno/models/cerebras/cerebras.py +501 -0
- agno/models/cerebras/cerebras_openai.py +112 -0
- agno/models/cohere/__init__.py +5 -0
- agno/models/cohere/chat.py +389 -0
- agno/models/cometapi/__init__.py +5 -0
- agno/models/cometapi/cometapi.py +57 -0
- agno/models/dashscope/__init__.py +5 -0
- agno/models/dashscope/dashscope.py +91 -0
- agno/models/deepinfra/__init__.py +5 -0
- agno/models/deepinfra/deepinfra.py +28 -0
- agno/models/deepseek/__init__.py +5 -0
- agno/models/deepseek/deepseek.py +61 -0
- agno/models/defaults.py +1 -0
- agno/models/fireworks/__init__.py +5 -0
- agno/models/fireworks/fireworks.py +26 -0
- agno/models/google/__init__.py +5 -0
- agno/models/google/gemini.py +1085 -0
- agno/models/groq/__init__.py +5 -0
- agno/models/groq/groq.py +556 -0
- agno/models/huggingface/__init__.py +5 -0
- agno/models/huggingface/huggingface.py +491 -0
- agno/models/ibm/__init__.py +5 -0
- agno/models/ibm/watsonx.py +422 -0
- agno/models/internlm/__init__.py +3 -0
- agno/models/internlm/internlm.py +26 -0
- agno/models/langdb/__init__.py +1 -0
- agno/models/langdb/langdb.py +48 -0
- agno/models/litellm/__init__.py +14 -0
- agno/models/litellm/chat.py +468 -0
- agno/models/litellm/litellm_openai.py +25 -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 +434 -0
- agno/models/meta/__init__.py +12 -0
- agno/models/meta/llama.py +475 -0
- agno/models/meta/llama_openai.py +78 -0
- agno/models/metrics.py +120 -0
- agno/models/mistral/__init__.py +5 -0
- agno/models/mistral/mistral.py +432 -0
- agno/models/nebius/__init__.py +3 -0
- agno/models/nebius/nebius.py +54 -0
- agno/models/nexus/__init__.py +3 -0
- agno/models/nexus/nexus.py +22 -0
- agno/models/nvidia/__init__.py +5 -0
- agno/models/nvidia/nvidia.py +28 -0
- agno/models/ollama/__init__.py +5 -0
- agno/models/ollama/chat.py +441 -0
- agno/models/openai/__init__.py +9 -0
- agno/models/openai/chat.py +883 -0
- agno/models/openai/like.py +27 -0
- agno/models/openai/responses.py +1050 -0
- agno/models/openrouter/__init__.py +5 -0
- agno/models/openrouter/openrouter.py +66 -0
- agno/models/perplexity/__init__.py +5 -0
- agno/models/perplexity/perplexity.py +187 -0
- agno/models/portkey/__init__.py +3 -0
- agno/models/portkey/portkey.py +81 -0
- agno/models/requesty/__init__.py +5 -0
- agno/models/requesty/requesty.py +52 -0
- agno/models/response.py +199 -0
- agno/models/sambanova/__init__.py +5 -0
- agno/models/sambanova/sambanova.py +28 -0
- agno/models/siliconflow/__init__.py +5 -0
- agno/models/siliconflow/siliconflow.py +25 -0
- agno/models/together/__init__.py +5 -0
- agno/models/together/together.py +25 -0
- agno/models/utils.py +266 -0
- agno/models/vercel/__init__.py +3 -0
- agno/models/vercel/v0.py +26 -0
- agno/models/vertexai/__init__.py +0 -0
- agno/models/vertexai/claude.py +70 -0
- agno/models/vllm/__init__.py +3 -0
- agno/models/vllm/vllm.py +78 -0
- agno/models/xai/__init__.py +3 -0
- agno/models/xai/xai.py +113 -0
- agno/os/__init__.py +3 -0
- agno/os/app.py +876 -0
- agno/os/auth.py +57 -0
- agno/os/config.py +104 -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 +250 -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 +144 -0
- agno/os/interfaces/agui/utils.py +534 -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 +211 -0
- agno/os/interfaces/whatsapp/security.py +53 -0
- agno/os/interfaces/whatsapp/whatsapp.py +36 -0
- agno/os/mcp.py +292 -0
- agno/os/middleware/__init__.py +7 -0
- agno/os/middleware/jwt.py +233 -0
- agno/os/router.py +1763 -0
- agno/os/routers/__init__.py +3 -0
- agno/os/routers/evals/__init__.py +3 -0
- agno/os/routers/evals/evals.py +430 -0
- agno/os/routers/evals/schemas.py +142 -0
- agno/os/routers/evals/utils.py +162 -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 +997 -0
- agno/os/routers/knowledge/schemas.py +178 -0
- agno/os/routers/memory/__init__.py +3 -0
- agno/os/routers/memory/memory.py +515 -0
- agno/os/routers/memory/schemas.py +62 -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/schema.py +1055 -0
- agno/os/settings.py +43 -0
- agno/os/utils.py +630 -0
- agno/py.typed +0 -0
- agno/reasoning/__init__.py +0 -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 +63 -0
- agno/reasoning/ollama.py +67 -0
- agno/reasoning/openai.py +86 -0
- agno/reasoning/step.py +31 -0
- agno/reasoning/vertexai.py +76 -0
- agno/run/__init__.py +6 -0
- agno/run/agent.py +787 -0
- agno/run/base.py +229 -0
- agno/run/cancel.py +81 -0
- agno/run/messages.py +32 -0
- agno/run/team.py +753 -0
- agno/run/workflow.py +708 -0
- agno/session/__init__.py +10 -0
- agno/session/agent.py +295 -0
- agno/session/summary.py +265 -0
- agno/session/team.py +392 -0
- agno/session/workflow.py +205 -0
- agno/team/__init__.py +37 -0
- agno/team/team.py +8793 -0
- agno/tools/__init__.py +10 -0
- agno/tools/agentql.py +120 -0
- agno/tools/airflow.py +69 -0
- agno/tools/api.py +122 -0
- agno/tools/apify.py +314 -0
- agno/tools/arxiv.py +127 -0
- agno/tools/aws_lambda.py +53 -0
- agno/tools/aws_ses.py +66 -0
- agno/tools/baidusearch.py +89 -0
- 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 +255 -0
- agno/tools/calculator.py +151 -0
- agno/tools/cartesia.py +187 -0
- agno/tools/clickup.py +244 -0
- agno/tools/confluence.py +240 -0
- agno/tools/crawl4ai.py +158 -0
- agno/tools/csv_toolkit.py +185 -0
- agno/tools/dalle.py +110 -0
- agno/tools/daytona.py +475 -0
- agno/tools/decorator.py +262 -0
- agno/tools/desi_vocal.py +108 -0
- agno/tools/discord.py +161 -0
- agno/tools/docker.py +716 -0
- agno/tools/duckdb.py +379 -0
- agno/tools/duckduckgo.py +91 -0
- agno/tools/e2b.py +703 -0
- agno/tools/eleven_labs.py +196 -0
- agno/tools/email.py +67 -0
- agno/tools/evm.py +129 -0
- agno/tools/exa.py +396 -0
- agno/tools/fal.py +127 -0
- agno/tools/file.py +240 -0
- agno/tools/file_generation.py +350 -0
- agno/tools/financial_datasets.py +288 -0
- agno/tools/firecrawl.py +143 -0
- agno/tools/function.py +1187 -0
- agno/tools/giphy.py +93 -0
- agno/tools/github.py +1760 -0
- agno/tools/gmail.py +922 -0
- agno/tools/google_bigquery.py +117 -0
- agno/tools/google_drive.py +270 -0
- agno/tools/google_maps.py +253 -0
- agno/tools/googlecalendar.py +674 -0
- agno/tools/googlesearch.py +98 -0
- agno/tools/googlesheets.py +377 -0
- agno/tools/hackernews.py +77 -0
- agno/tools/jina.py +101 -0
- agno/tools/jira.py +170 -0
- agno/tools/knowledge.py +218 -0
- agno/tools/linear.py +426 -0
- agno/tools/linkup.py +58 -0
- agno/tools/local_file_system.py +90 -0
- agno/tools/lumalab.py +183 -0
- 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/memori.py +339 -0
- agno/tools/memory.py +419 -0
- agno/tools/mlx_transcribe.py +139 -0
- agno/tools/models/__init__.py +0 -0
- 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 +195 -0
- agno/tools/moviepy_video.py +349 -0
- agno/tools/neo4j.py +134 -0
- agno/tools/newspaper.py +46 -0
- agno/tools/newspaper4k.py +93 -0
- agno/tools/notion.py +204 -0
- agno/tools/openai.py +202 -0
- agno/tools/openbb.py +160 -0
- agno/tools/opencv.py +321 -0
- agno/tools/openweather.py +233 -0
- agno/tools/oxylabs.py +385 -0
- agno/tools/pandas.py +102 -0
- agno/tools/parallel.py +314 -0
- agno/tools/postgres.py +257 -0
- agno/tools/pubmed.py +188 -0
- agno/tools/python.py +205 -0
- agno/tools/reasoning.py +283 -0
- agno/tools/reddit.py +467 -0
- agno/tools/replicate.py +117 -0
- agno/tools/resend.py +62 -0
- agno/tools/scrapegraph.py +222 -0
- agno/tools/searxng.py +152 -0
- agno/tools/serpapi.py +116 -0
- agno/tools/serper.py +255 -0
- agno/tools/shell.py +53 -0
- agno/tools/slack.py +136 -0
- agno/tools/sleep.py +20 -0
- agno/tools/spider.py +116 -0
- agno/tools/sql.py +154 -0
- agno/tools/streamlit/__init__.py +0 -0
- agno/tools/streamlit/components.py +113 -0
- agno/tools/tavily.py +254 -0
- agno/tools/telegram.py +48 -0
- agno/tools/todoist.py +218 -0
- agno/tools/tool_registry.py +1 -0
- agno/tools/toolkit.py +146 -0
- agno/tools/trafilatura.py +388 -0
- agno/tools/trello.py +274 -0
- agno/tools/twilio.py +186 -0
- 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 +54 -0
- agno/tools/webtools.py +45 -0
- agno/tools/whatsapp.py +286 -0
- agno/tools/wikipedia.py +63 -0
- agno/tools/workflow.py +278 -0
- agno/tools/x.py +335 -0
- agno/tools/yfinance.py +257 -0
- agno/tools/youtube.py +184 -0
- agno/tools/zendesk.py +82 -0
- agno/tools/zep.py +454 -0
- agno/tools/zoom.py +382 -0
- agno/utils/__init__.py +0 -0
- agno/utils/agent.py +820 -0
- agno/utils/audio.py +49 -0
- agno/utils/certs.py +27 -0
- agno/utils/code_execution.py +11 -0
- agno/utils/common.py +132 -0
- agno/utils/dttm.py +13 -0
- agno/utils/enum.py +22 -0
- agno/utils/env.py +11 -0
- agno/utils/events.py +696 -0
- agno/utils/format_str.py +16 -0
- agno/utils/functions.py +166 -0
- agno/utils/gemini.py +426 -0
- agno/utils/hooks.py +57 -0
- agno/utils/http.py +74 -0
- agno/utils/json_schema.py +234 -0
- agno/utils/knowledge.py +36 -0
- agno/utils/location.py +19 -0
- agno/utils/log.py +255 -0
- agno/utils/mcp.py +214 -0
- agno/utils/media.py +352 -0
- agno/utils/merge_dict.py +41 -0
- agno/utils/message.py +118 -0
- agno/utils/models/__init__.py +0 -0
- agno/utils/models/ai_foundry.py +43 -0
- agno/utils/models/claude.py +358 -0
- agno/utils/models/cohere.py +87 -0
- agno/utils/models/llama.py +78 -0
- agno/utils/models/mistral.py +98 -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 +32 -0
- agno/utils/pprint.py +178 -0
- agno/utils/print_response/__init__.py +0 -0
- agno/utils/print_response/agent.py +842 -0
- agno/utils/print_response/team.py +1724 -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/response_iterator.py +17 -0
- agno/utils/safe_formatter.py +24 -0
- agno/utils/serialize.py +32 -0
- agno/utils/shell.py +22 -0
- agno/utils/streamlit.py +487 -0
- agno/utils/string.py +231 -0
- agno/utils/team.py +139 -0
- agno/utils/timer.py +41 -0
- agno/utils/tools.py +102 -0
- agno/utils/web.py +23 -0
- agno/utils/whatsapp.py +305 -0
- agno/utils/yaml_io.py +25 -0
- agno/vectordb/__init__.py +3 -0
- agno/vectordb/base.py +127 -0
- agno/vectordb/cassandra/__init__.py +5 -0
- agno/vectordb/cassandra/cassandra.py +501 -0
- agno/vectordb/cassandra/extra_param_mixin.py +11 -0
- agno/vectordb/cassandra/index.py +13 -0
- agno/vectordb/chroma/__init__.py +5 -0
- agno/vectordb/chroma/chromadb.py +929 -0
- agno/vectordb/clickhouse/__init__.py +9 -0
- agno/vectordb/clickhouse/clickhousedb.py +835 -0
- agno/vectordb/clickhouse/index.py +9 -0
- agno/vectordb/couchbase/__init__.py +3 -0
- agno/vectordb/couchbase/couchbase.py +1442 -0
- agno/vectordb/distance.py +7 -0
- agno/vectordb/lancedb/__init__.py +6 -0
- agno/vectordb/lancedb/lance_db.py +995 -0
- 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 +4 -0
- agno/vectordb/milvus/milvus.py +1182 -0
- agno/vectordb/mongodb/__init__.py +9 -0
- agno/vectordb/mongodb/mongodb.py +1417 -0
- agno/vectordb/pgvector/__init__.py +12 -0
- agno/vectordb/pgvector/index.py +23 -0
- agno/vectordb/pgvector/pgvector.py +1462 -0
- agno/vectordb/pineconedb/__init__.py +5 -0
- agno/vectordb/pineconedb/pineconedb.py +747 -0
- agno/vectordb/qdrant/__init__.py +5 -0
- agno/vectordb/qdrant/qdrant.py +1134 -0
- agno/vectordb/redis/__init__.py +9 -0
- agno/vectordb/redis/redisdb.py +694 -0
- agno/vectordb/search.py +7 -0
- agno/vectordb/singlestore/__init__.py +10 -0
- agno/vectordb/singlestore/index.py +41 -0
- agno/vectordb/singlestore/singlestore.py +763 -0
- agno/vectordb/surrealdb/__init__.py +3 -0
- agno/vectordb/surrealdb/surrealdb.py +699 -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 +1005 -0
- agno/workflow/__init__.py +23 -0
- agno/workflow/agent.py +299 -0
- agno/workflow/condition.py +738 -0
- agno/workflow/loop.py +735 -0
- agno/workflow/parallel.py +824 -0
- agno/workflow/router.py +702 -0
- agno/workflow/step.py +1432 -0
- agno/workflow/steps.py +592 -0
- agno/workflow/types.py +520 -0
- agno/workflow/workflow.py +4321 -0
- agno-2.2.13.dist-info/METADATA +614 -0
- agno-2.2.13.dist-info/RECORD +575 -0
- agno-2.2.13.dist-info/WHEEL +5 -0
- agno-2.2.13.dist-info/licenses/LICENSE +201 -0
- agno-2.2.13.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,378 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
from os import getenv
|
|
3
|
+
from typing import Any, AsyncIterator, Dict, Iterator, List, Optional, Type, Union
|
|
4
|
+
|
|
5
|
+
from pydantic import BaseModel
|
|
6
|
+
|
|
7
|
+
from agno.exceptions import ModelProviderError, ModelRateLimitError
|
|
8
|
+
from agno.models.anthropic import Claude as AnthropicClaude
|
|
9
|
+
from agno.models.message import Message
|
|
10
|
+
from agno.models.response import ModelResponse
|
|
11
|
+
from agno.run.agent import RunOutput
|
|
12
|
+
from agno.utils.log import log_debug, log_error, log_warning
|
|
13
|
+
from agno.utils.models.claude import format_messages
|
|
14
|
+
|
|
15
|
+
try:
|
|
16
|
+
from anthropic import AnthropicBedrock, APIConnectionError, APIStatusError, AsyncAnthropicBedrock, RateLimitError
|
|
17
|
+
except ImportError:
|
|
18
|
+
raise ImportError("`anthropic[bedrock]` not installed. Please install using `pip install anthropic[bedrock]`")
|
|
19
|
+
|
|
20
|
+
try:
|
|
21
|
+
from boto3.session import Session
|
|
22
|
+
except ImportError:
|
|
23
|
+
raise ImportError("`boto3` not installed. Please install using `pip install boto3`")
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
@dataclass
|
|
27
|
+
class Claude(AnthropicClaude):
|
|
28
|
+
"""
|
|
29
|
+
AWS Bedrock Claude model.
|
|
30
|
+
|
|
31
|
+
For more information, see: https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-anthropic.html
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
id: str = "anthropic.claude-3-5-sonnet-20240620-v1:0"
|
|
35
|
+
name: str = "AwsBedrockAnthropicClaude"
|
|
36
|
+
provider: str = "AwsBedrock"
|
|
37
|
+
|
|
38
|
+
aws_access_key: Optional[str] = None
|
|
39
|
+
aws_secret_key: Optional[str] = None
|
|
40
|
+
aws_region: Optional[str] = None
|
|
41
|
+
session: Optional[Session] = None
|
|
42
|
+
|
|
43
|
+
# -*- Request parameters
|
|
44
|
+
max_tokens: int = 4096
|
|
45
|
+
temperature: Optional[float] = None
|
|
46
|
+
top_p: Optional[float] = None
|
|
47
|
+
top_k: Optional[int] = None
|
|
48
|
+
stop_sequences: Optional[List[str]] = None
|
|
49
|
+
|
|
50
|
+
# -*- Request parameters
|
|
51
|
+
request_params: Optional[Dict[str, Any]] = None
|
|
52
|
+
# -*- Client parameters
|
|
53
|
+
client_params: Optional[Dict[str, Any]] = None
|
|
54
|
+
|
|
55
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
56
|
+
"""
|
|
57
|
+
Convert the model to a dictionary.
|
|
58
|
+
|
|
59
|
+
Returns:
|
|
60
|
+
Dict[str, Any]: The dictionary representation of the model.
|
|
61
|
+
"""
|
|
62
|
+
_dict = super().to_dict()
|
|
63
|
+
_dict["max_tokens"] = self.max_tokens
|
|
64
|
+
_dict["temperature"] = self.temperature
|
|
65
|
+
_dict["top_p"] = self.top_p
|
|
66
|
+
_dict["top_k"] = self.top_k
|
|
67
|
+
_dict["stop_sequences"] = self.stop_sequences
|
|
68
|
+
return _dict
|
|
69
|
+
|
|
70
|
+
client: Optional[AnthropicBedrock] = None # type: ignore
|
|
71
|
+
async_client: Optional[AsyncAnthropicBedrock] = None # type: ignore
|
|
72
|
+
|
|
73
|
+
def get_client(self):
|
|
74
|
+
"""
|
|
75
|
+
Get the Bedrock client.
|
|
76
|
+
|
|
77
|
+
Returns:
|
|
78
|
+
AnthropicBedrock: The Bedrock client.
|
|
79
|
+
"""
|
|
80
|
+
if self.client is not None and not self.client.is_closed():
|
|
81
|
+
return self.client
|
|
82
|
+
|
|
83
|
+
if self.session:
|
|
84
|
+
credentials = self.session.get_credentials()
|
|
85
|
+
client_params = {
|
|
86
|
+
"aws_access_key": credentials.access_key,
|
|
87
|
+
"aws_secret_key": credentials.secret_key,
|
|
88
|
+
"aws_session_token": credentials.token,
|
|
89
|
+
"aws_region": self.session.region_name,
|
|
90
|
+
}
|
|
91
|
+
else:
|
|
92
|
+
self.aws_access_key = self.aws_access_key or getenv("AWS_ACCESS_KEY")
|
|
93
|
+
self.aws_secret_key = self.aws_secret_key or getenv("AWS_SECRET_KEY")
|
|
94
|
+
self.aws_region = self.aws_region or getenv("AWS_REGION")
|
|
95
|
+
|
|
96
|
+
client_params = {
|
|
97
|
+
"aws_secret_key": self.aws_secret_key,
|
|
98
|
+
"aws_access_key": self.aws_access_key,
|
|
99
|
+
"aws_region": self.aws_region,
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
if self.client_params:
|
|
103
|
+
client_params.update(self.client_params)
|
|
104
|
+
|
|
105
|
+
self.client = AnthropicBedrock(
|
|
106
|
+
**client_params, # type: ignore
|
|
107
|
+
)
|
|
108
|
+
return self.client
|
|
109
|
+
|
|
110
|
+
def get_async_client(self):
|
|
111
|
+
"""
|
|
112
|
+
Get the Bedrock async client.
|
|
113
|
+
|
|
114
|
+
Returns:
|
|
115
|
+
AsyncAnthropicBedrock: The Bedrock async client.
|
|
116
|
+
"""
|
|
117
|
+
if self.async_client is not None:
|
|
118
|
+
return self.async_client
|
|
119
|
+
|
|
120
|
+
if self.session:
|
|
121
|
+
credentials = self.session.get_credentials()
|
|
122
|
+
client_params = {
|
|
123
|
+
"aws_access_key": credentials.access_key,
|
|
124
|
+
"aws_secret_key": credentials.secret_key,
|
|
125
|
+
"aws_session_token": credentials.token,
|
|
126
|
+
"aws_region": self.session.region_name,
|
|
127
|
+
}
|
|
128
|
+
else:
|
|
129
|
+
client_params = {
|
|
130
|
+
"aws_secret_key": self.aws_secret_key,
|
|
131
|
+
"aws_access_key": self.aws_access_key,
|
|
132
|
+
"aws_region": self.aws_region,
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
if self.client_params:
|
|
136
|
+
client_params.update(self.client_params)
|
|
137
|
+
|
|
138
|
+
self.async_client = AsyncAnthropicBedrock(
|
|
139
|
+
**client_params, # type: ignore
|
|
140
|
+
)
|
|
141
|
+
return self.async_client
|
|
142
|
+
|
|
143
|
+
def get_request_params(self) -> Dict[str, Any]:
|
|
144
|
+
"""
|
|
145
|
+
Generate keyword arguments for API requests.
|
|
146
|
+
|
|
147
|
+
Returns:
|
|
148
|
+
Dict[str, Any]: The keyword arguments for API requests.
|
|
149
|
+
"""
|
|
150
|
+
_request_params: Dict[str, Any] = {}
|
|
151
|
+
if self.max_tokens:
|
|
152
|
+
_request_params["max_tokens"] = self.max_tokens
|
|
153
|
+
if self.temperature:
|
|
154
|
+
_request_params["temperature"] = self.temperature
|
|
155
|
+
if self.stop_sequences:
|
|
156
|
+
_request_params["stop_sequences"] = self.stop_sequences
|
|
157
|
+
if self.top_p:
|
|
158
|
+
_request_params["top_p"] = self.top_p
|
|
159
|
+
if self.top_k:
|
|
160
|
+
_request_params["top_k"] = self.top_k
|
|
161
|
+
if self.request_params:
|
|
162
|
+
_request_params.update(self.request_params)
|
|
163
|
+
|
|
164
|
+
if _request_params:
|
|
165
|
+
log_debug(f"Calling {self.provider} with request parameters: {_request_params}", log_level=2)
|
|
166
|
+
return _request_params
|
|
167
|
+
|
|
168
|
+
def invoke(
|
|
169
|
+
self,
|
|
170
|
+
messages: List[Message],
|
|
171
|
+
assistant_message: Message,
|
|
172
|
+
response_format: Optional[Union[Dict, Type[BaseModel]]] = None,
|
|
173
|
+
tools: Optional[List[Dict[str, Any]]] = None,
|
|
174
|
+
tool_choice: Optional[Union[str, Dict[str, Any]]] = None,
|
|
175
|
+
run_response: Optional[RunOutput] = None,
|
|
176
|
+
) -> ModelResponse:
|
|
177
|
+
"""
|
|
178
|
+
Send a request to the Anthropic API to generate a response.
|
|
179
|
+
"""
|
|
180
|
+
|
|
181
|
+
try:
|
|
182
|
+
chat_messages, system_message = format_messages(messages)
|
|
183
|
+
request_kwargs = self._prepare_request_kwargs(system_message, tools)
|
|
184
|
+
|
|
185
|
+
if run_response and run_response.metrics:
|
|
186
|
+
run_response.metrics.set_time_to_first_token()
|
|
187
|
+
|
|
188
|
+
assistant_message.metrics.start_timer()
|
|
189
|
+
response = self.get_client().messages.create(
|
|
190
|
+
model=self.id,
|
|
191
|
+
messages=chat_messages, # type: ignore
|
|
192
|
+
**request_kwargs,
|
|
193
|
+
)
|
|
194
|
+
assistant_message.metrics.stop_timer()
|
|
195
|
+
|
|
196
|
+
model_response = self._parse_provider_response(response, response_format=response_format)
|
|
197
|
+
|
|
198
|
+
return model_response
|
|
199
|
+
|
|
200
|
+
except APIConnectionError as e:
|
|
201
|
+
log_error(f"Connection error while calling Claude API: {str(e)}")
|
|
202
|
+
raise ModelProviderError(message=e.message, model_name=self.name, model_id=self.id) from e
|
|
203
|
+
except RateLimitError as e:
|
|
204
|
+
log_warning(f"Rate limit exceeded: {str(e)}")
|
|
205
|
+
raise ModelRateLimitError(message=e.message, model_name=self.name, model_id=self.id) from e
|
|
206
|
+
except APIStatusError as e:
|
|
207
|
+
log_error(f"Claude API error (status {e.status_code}): {str(e)}")
|
|
208
|
+
raise ModelProviderError(
|
|
209
|
+
message=e.message, status_code=e.status_code, model_name=self.name, model_id=self.id
|
|
210
|
+
) from e
|
|
211
|
+
except Exception as e:
|
|
212
|
+
log_error(f"Unexpected error calling Claude API: {str(e)}")
|
|
213
|
+
raise ModelProviderError(message=str(e), model_name=self.name, model_id=self.id) from e
|
|
214
|
+
|
|
215
|
+
def invoke_stream(
|
|
216
|
+
self,
|
|
217
|
+
messages: List[Message],
|
|
218
|
+
assistant_message: Message,
|
|
219
|
+
response_format: Optional[Union[Dict, Type[BaseModel]]] = None,
|
|
220
|
+
tools: Optional[List[Dict[str, Any]]] = None,
|
|
221
|
+
tool_choice: Optional[Union[str, Dict[str, Any]]] = None,
|
|
222
|
+
run_response: Optional[RunOutput] = None,
|
|
223
|
+
) -> Iterator[ModelResponse]:
|
|
224
|
+
"""
|
|
225
|
+
Stream a response from the Anthropic API.
|
|
226
|
+
|
|
227
|
+
Args:
|
|
228
|
+
messages (List[Message]): A list of messages to send to the model.
|
|
229
|
+
|
|
230
|
+
Returns:
|
|
231
|
+
Any: The streamed response from the model.
|
|
232
|
+
|
|
233
|
+
Raises:
|
|
234
|
+
APIConnectionError: If there are network connectivity issues
|
|
235
|
+
RateLimitError: If the API rate limit is exceeded
|
|
236
|
+
APIStatusError: For other API-related errors
|
|
237
|
+
"""
|
|
238
|
+
|
|
239
|
+
chat_messages, system_message = format_messages(messages)
|
|
240
|
+
request_kwargs = self._prepare_request_kwargs(system_message, tools)
|
|
241
|
+
|
|
242
|
+
try:
|
|
243
|
+
if run_response and run_response.metrics:
|
|
244
|
+
run_response.metrics.set_time_to_first_token()
|
|
245
|
+
|
|
246
|
+
assistant_message.metrics.start_timer()
|
|
247
|
+
|
|
248
|
+
with self.get_client().messages.stream(
|
|
249
|
+
model=self.id,
|
|
250
|
+
messages=chat_messages, # type: ignore
|
|
251
|
+
**request_kwargs,
|
|
252
|
+
) as stream:
|
|
253
|
+
for chunk in stream:
|
|
254
|
+
yield self._parse_provider_response_delta(chunk)
|
|
255
|
+
|
|
256
|
+
assistant_message.metrics.stop_timer()
|
|
257
|
+
|
|
258
|
+
except APIConnectionError as e:
|
|
259
|
+
log_error(f"Connection error while calling Claude API: {str(e)}")
|
|
260
|
+
raise ModelProviderError(message=e.message, model_name=self.name, model_id=self.id) from e
|
|
261
|
+
except RateLimitError as e:
|
|
262
|
+
log_warning(f"Rate limit exceeded: {str(e)}")
|
|
263
|
+
raise ModelRateLimitError(message=e.message, model_name=self.name, model_id=self.id) from e
|
|
264
|
+
except APIStatusError as e:
|
|
265
|
+
log_error(f"Claude API error (status {e.status_code}): {str(e)}")
|
|
266
|
+
raise ModelProviderError(
|
|
267
|
+
message=e.message, status_code=e.status_code, model_name=self.name, model_id=self.id
|
|
268
|
+
) from e
|
|
269
|
+
except Exception as e:
|
|
270
|
+
log_error(f"Unexpected error calling Claude API: {str(e)}")
|
|
271
|
+
raise ModelProviderError(message=str(e), model_name=self.name, model_id=self.id) from e
|
|
272
|
+
|
|
273
|
+
async def ainvoke(
|
|
274
|
+
self,
|
|
275
|
+
messages: List[Message],
|
|
276
|
+
assistant_message: Message,
|
|
277
|
+
response_format: Optional[Union[Dict, Type[BaseModel]]] = None,
|
|
278
|
+
tools: Optional[List[Dict[str, Any]]] = None,
|
|
279
|
+
tool_choice: Optional[Union[str, Dict[str, Any]]] = None,
|
|
280
|
+
run_response: Optional[RunOutput] = None,
|
|
281
|
+
) -> ModelResponse:
|
|
282
|
+
"""
|
|
283
|
+
Send an asynchronous request to the Anthropic API to generate a response.
|
|
284
|
+
"""
|
|
285
|
+
|
|
286
|
+
try:
|
|
287
|
+
chat_messages, system_message = format_messages(messages)
|
|
288
|
+
request_kwargs = self._prepare_request_kwargs(system_message, tools)
|
|
289
|
+
|
|
290
|
+
if run_response and run_response.metrics:
|
|
291
|
+
run_response.metrics.set_time_to_first_token()
|
|
292
|
+
|
|
293
|
+
assistant_message.metrics.start_timer()
|
|
294
|
+
|
|
295
|
+
response = await self.get_async_client().messages.create(
|
|
296
|
+
model=self.id,
|
|
297
|
+
messages=chat_messages, # type: ignore
|
|
298
|
+
**request_kwargs,
|
|
299
|
+
)
|
|
300
|
+
|
|
301
|
+
assistant_message.metrics.stop_timer()
|
|
302
|
+
|
|
303
|
+
model_response = self._parse_provider_response(response, response_format=response_format)
|
|
304
|
+
|
|
305
|
+
return model_response
|
|
306
|
+
|
|
307
|
+
except APIConnectionError as e:
|
|
308
|
+
log_error(f"Connection error while calling Claude API: {str(e)}")
|
|
309
|
+
raise ModelProviderError(message=e.message, model_name=self.name, model_id=self.id) from e
|
|
310
|
+
except RateLimitError as e:
|
|
311
|
+
log_warning(f"Rate limit exceeded: {str(e)}")
|
|
312
|
+
raise ModelRateLimitError(message=e.message, model_name=self.name, model_id=self.id) from e
|
|
313
|
+
except APIStatusError as e:
|
|
314
|
+
log_error(f"Claude API error (status {e.status_code}): {str(e)}")
|
|
315
|
+
raise ModelProviderError(
|
|
316
|
+
message=e.message, status_code=e.status_code, model_name=self.name, model_id=self.id
|
|
317
|
+
) from e
|
|
318
|
+
except Exception as e:
|
|
319
|
+
log_error(f"Unexpected error calling Claude API: {str(e)}")
|
|
320
|
+
raise ModelProviderError(message=str(e), model_name=self.name, model_id=self.id) from e
|
|
321
|
+
|
|
322
|
+
async def ainvoke_stream(
|
|
323
|
+
self,
|
|
324
|
+
messages: List[Message],
|
|
325
|
+
assistant_message: Message,
|
|
326
|
+
response_format: Optional[Union[Dict, Type[BaseModel]]] = None,
|
|
327
|
+
tools: Optional[List[Dict[str, Any]]] = None,
|
|
328
|
+
tool_choice: Optional[Union[str, Dict[str, Any]]] = None,
|
|
329
|
+
run_response: Optional[RunOutput] = None,
|
|
330
|
+
) -> AsyncIterator[ModelResponse]:
|
|
331
|
+
"""
|
|
332
|
+
Stream an asynchronous response from the Anthropic API.
|
|
333
|
+
|
|
334
|
+
Args:
|
|
335
|
+
messages (List[Message]): A list of messages to send to the model.
|
|
336
|
+
|
|
337
|
+
Returns:
|
|
338
|
+
Any: The streamed response from the model.
|
|
339
|
+
|
|
340
|
+
Raises:
|
|
341
|
+
APIConnectionError: If there are network connectivity issues
|
|
342
|
+
RateLimitError: If the API rate limit is exceeded
|
|
343
|
+
APIStatusError: For other API-related errors
|
|
344
|
+
"""
|
|
345
|
+
|
|
346
|
+
try:
|
|
347
|
+
chat_messages, system_message = format_messages(messages)
|
|
348
|
+
request_kwargs = self._prepare_request_kwargs(system_message, tools)
|
|
349
|
+
|
|
350
|
+
if run_response and run_response.metrics:
|
|
351
|
+
run_response.metrics.set_time_to_first_token()
|
|
352
|
+
|
|
353
|
+
assistant_message.metrics.start_timer()
|
|
354
|
+
|
|
355
|
+
async with self.get_async_client().messages.stream(
|
|
356
|
+
model=self.id,
|
|
357
|
+
messages=chat_messages, # type: ignore
|
|
358
|
+
**request_kwargs,
|
|
359
|
+
) as stream:
|
|
360
|
+
async for chunk in stream:
|
|
361
|
+
yield self._parse_provider_response_delta(chunk)
|
|
362
|
+
|
|
363
|
+
assistant_message.metrics.stop_timer()
|
|
364
|
+
|
|
365
|
+
except APIConnectionError as e:
|
|
366
|
+
log_error(f"Connection error while calling Claude API: {str(e)}")
|
|
367
|
+
raise ModelProviderError(message=e.message, model_name=self.name, model_id=self.id) from e
|
|
368
|
+
except RateLimitError as e:
|
|
369
|
+
log_warning(f"Rate limit exceeded: {str(e)}")
|
|
370
|
+
raise ModelRateLimitError(message=e.message, model_name=self.name, model_id=self.id) from e
|
|
371
|
+
except APIStatusError as e:
|
|
372
|
+
log_error(f"Claude API error (status {e.status_code}): {str(e)}")
|
|
373
|
+
raise ModelProviderError(
|
|
374
|
+
message=e.message, status_code=e.status_code, model_name=self.name, model_id=self.id
|
|
375
|
+
) from e
|
|
376
|
+
except Exception as e:
|
|
377
|
+
log_error(f"Unexpected error calling Claude API: {str(e)}")
|
|
378
|
+
raise ModelProviderError(message=str(e), model_name=self.name, model_id=self.id) from e
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
try:
|
|
2
|
+
from agno.models.azure.ai_foundry import AzureAIFoundry
|
|
3
|
+
except ImportError:
|
|
4
|
+
|
|
5
|
+
class AzureAIFoundry: # type: ignore
|
|
6
|
+
def __init__(self, *args, **kwargs):
|
|
7
|
+
raise ImportError(
|
|
8
|
+
"`azure-ai-inference` not installed. Please install it via `pip install azure-ai-inference aiohttp`"
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
try:
|
|
13
|
+
from agno.models.azure.openai_chat import AzureOpenAI
|
|
14
|
+
except ImportError:
|
|
15
|
+
|
|
16
|
+
class AzureOpenAI: # type: ignore
|
|
17
|
+
def __init__(self, *args, **kwargs):
|
|
18
|
+
raise ImportError("`openai` not installed. Please install it via `pip install openai`")
|