agno 2.0.1__py3-none-any.whl → 2.3.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- agno/agent/agent.py +6015 -2823
- agno/api/api.py +2 -0
- agno/api/os.py +1 -1
- agno/culture/__init__.py +3 -0
- agno/culture/manager.py +956 -0
- agno/db/async_postgres/__init__.py +3 -0
- agno/db/base.py +385 -6
- agno/db/dynamo/dynamo.py +388 -81
- agno/db/dynamo/schemas.py +47 -10
- agno/db/dynamo/utils.py +63 -4
- agno/db/firestore/firestore.py +435 -64
- agno/db/firestore/schemas.py +11 -0
- agno/db/firestore/utils.py +102 -4
- agno/db/gcs_json/gcs_json_db.py +384 -42
- agno/db/gcs_json/utils.py +60 -26
- agno/db/in_memory/in_memory_db.py +351 -66
- agno/db/in_memory/utils.py +60 -2
- agno/db/json/json_db.py +339 -48
- agno/db/json/utils.py +60 -26
- agno/db/migrations/manager.py +199 -0
- agno/db/migrations/v1_to_v2.py +510 -37
- agno/db/migrations/versions/__init__.py +0 -0
- agno/db/migrations/versions/v2_3_0.py +938 -0
- agno/db/mongo/__init__.py +15 -1
- agno/db/mongo/async_mongo.py +2036 -0
- agno/db/mongo/mongo.py +653 -76
- agno/db/mongo/schemas.py +13 -0
- agno/db/mongo/utils.py +80 -8
- agno/db/mysql/mysql.py +687 -25
- agno/db/mysql/schemas.py +61 -37
- agno/db/mysql/utils.py +60 -2
- agno/db/postgres/__init__.py +2 -1
- agno/db/postgres/async_postgres.py +2001 -0
- agno/db/postgres/postgres.py +676 -57
- agno/db/postgres/schemas.py +43 -18
- agno/db/postgres/utils.py +164 -2
- agno/db/redis/redis.py +344 -38
- agno/db/redis/schemas.py +18 -0
- agno/db/redis/utils.py +60 -2
- agno/db/schemas/__init__.py +2 -1
- agno/db/schemas/culture.py +120 -0
- agno/db/schemas/memory.py +13 -0
- agno/db/singlestore/schemas.py +26 -1
- agno/db/singlestore/singlestore.py +687 -53
- agno/db/singlestore/utils.py +60 -2
- agno/db/sqlite/__init__.py +2 -1
- agno/db/sqlite/async_sqlite.py +2371 -0
- agno/db/sqlite/schemas.py +24 -0
- agno/db/sqlite/sqlite.py +774 -85
- agno/db/sqlite/utils.py +168 -5
- 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 +1361 -0
- agno/db/surrealdb/utils.py +147 -0
- agno/db/utils.py +50 -22
- agno/eval/accuracy.py +50 -43
- agno/eval/performance.py +6 -3
- agno/eval/reliability.py +6 -3
- agno/eval/utils.py +33 -16
- agno/exceptions.py +68 -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/integrations/discord/client.py +1 -0
- agno/knowledge/chunking/agentic.py +13 -10
- agno/knowledge/chunking/fixed.py +1 -1
- agno/knowledge/chunking/semantic.py +40 -8
- agno/knowledge/chunking/strategy.py +59 -15
- agno/knowledge/embedder/aws_bedrock.py +9 -4
- agno/knowledge/embedder/azure_openai.py +54 -0
- agno/knowledge/embedder/base.py +2 -0
- agno/knowledge/embedder/cohere.py +184 -5
- agno/knowledge/embedder/fastembed.py +1 -1
- agno/knowledge/embedder/google.py +79 -1
- agno/knowledge/embedder/huggingface.py +9 -4
- agno/knowledge/embedder/jina.py +63 -0
- agno/knowledge/embedder/mistral.py +78 -11
- agno/knowledge/embedder/nebius.py +1 -1
- agno/knowledge/embedder/ollama.py +13 -0
- agno/knowledge/embedder/openai.py +37 -65
- agno/knowledge/embedder/sentence_transformer.py +8 -4
- agno/knowledge/embedder/vllm.py +262 -0
- agno/knowledge/embedder/voyageai.py +69 -16
- agno/knowledge/knowledge.py +594 -186
- agno/knowledge/reader/base.py +9 -2
- agno/knowledge/reader/csv_reader.py +8 -10
- agno/knowledge/reader/docx_reader.py +5 -6
- agno/knowledge/reader/field_labeled_csv_reader.py +290 -0
- agno/knowledge/reader/json_reader.py +6 -5
- agno/knowledge/reader/markdown_reader.py +13 -13
- agno/knowledge/reader/pdf_reader.py +43 -68
- agno/knowledge/reader/pptx_reader.py +101 -0
- agno/knowledge/reader/reader_factory.py +51 -6
- agno/knowledge/reader/s3_reader.py +3 -15
- agno/knowledge/reader/tavily_reader.py +194 -0
- agno/knowledge/reader/text_reader.py +13 -13
- agno/knowledge/reader/web_search_reader.py +2 -43
- agno/knowledge/reader/website_reader.py +43 -25
- agno/knowledge/reranker/__init__.py +2 -8
- agno/knowledge/types.py +9 -0
- agno/knowledge/utils.py +20 -0
- agno/media.py +72 -0
- agno/memory/manager.py +336 -82
- agno/models/aimlapi/aimlapi.py +2 -2
- agno/models/anthropic/claude.py +183 -37
- agno/models/aws/bedrock.py +52 -112
- agno/models/aws/claude.py +33 -1
- agno/models/azure/ai_foundry.py +33 -15
- agno/models/azure/openai_chat.py +25 -8
- agno/models/base.py +999 -519
- agno/models/cerebras/cerebras.py +19 -13
- agno/models/cerebras/cerebras_openai.py +8 -5
- agno/models/cohere/chat.py +27 -1
- agno/models/cometapi/__init__.py +5 -0
- agno/models/cometapi/cometapi.py +57 -0
- agno/models/dashscope/dashscope.py +1 -0
- agno/models/deepinfra/deepinfra.py +2 -2
- agno/models/deepseek/deepseek.py +2 -2
- agno/models/fireworks/fireworks.py +2 -2
- agno/models/google/gemini.py +103 -31
- agno/models/groq/groq.py +28 -11
- agno/models/huggingface/huggingface.py +2 -1
- agno/models/internlm/internlm.py +2 -2
- agno/models/langdb/langdb.py +4 -4
- agno/models/litellm/chat.py +18 -1
- agno/models/litellm/litellm_openai.py +2 -2
- agno/models/llama_cpp/__init__.py +5 -0
- agno/models/llama_cpp/llama_cpp.py +22 -0
- agno/models/message.py +139 -0
- agno/models/meta/llama.py +27 -10
- agno/models/meta/llama_openai.py +5 -17
- agno/models/nebius/nebius.py +6 -6
- agno/models/nexus/__init__.py +3 -0
- agno/models/nexus/nexus.py +22 -0
- agno/models/nvidia/nvidia.py +2 -2
- agno/models/ollama/chat.py +59 -5
- agno/models/openai/chat.py +69 -29
- agno/models/openai/responses.py +103 -106
- agno/models/openrouter/openrouter.py +41 -3
- agno/models/perplexity/perplexity.py +4 -5
- agno/models/portkey/portkey.py +3 -3
- agno/models/requesty/__init__.py +5 -0
- agno/models/requesty/requesty.py +52 -0
- agno/models/response.py +77 -1
- agno/models/sambanova/sambanova.py +2 -2
- agno/models/siliconflow/__init__.py +5 -0
- agno/models/siliconflow/siliconflow.py +25 -0
- agno/models/together/together.py +2 -2
- agno/models/utils.py +254 -8
- agno/models/vercel/v0.py +2 -2
- agno/models/vertexai/__init__.py +0 -0
- agno/models/vertexai/claude.py +96 -0
- agno/models/vllm/vllm.py +1 -0
- agno/models/xai/xai.py +3 -2
- agno/os/app.py +543 -178
- agno/os/auth.py +24 -14
- agno/os/config.py +1 -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/agui.py +23 -7
- agno/os/interfaces/agui/router.py +27 -3
- agno/os/interfaces/agui/utils.py +242 -142
- agno/os/interfaces/base.py +6 -2
- agno/os/interfaces/slack/router.py +81 -23
- agno/os/interfaces/slack/slack.py +29 -14
- agno/os/interfaces/whatsapp/router.py +11 -4
- agno/os/interfaces/whatsapp/whatsapp.py +14 -7
- agno/os/mcp.py +111 -54
- agno/os/middleware/__init__.py +7 -0
- agno/os/middleware/jwt.py +233 -0
- agno/os/router.py +556 -139
- agno/os/routers/evals/evals.py +71 -34
- agno/os/routers/evals/schemas.py +31 -31
- agno/os/routers/evals/utils.py +6 -5
- agno/os/routers/health.py +31 -0
- agno/os/routers/home.py +52 -0
- agno/os/routers/knowledge/knowledge.py +185 -38
- agno/os/routers/knowledge/schemas.py +82 -22
- agno/os/routers/memory/memory.py +158 -53
- agno/os/routers/memory/schemas.py +20 -16
- agno/os/routers/metrics/metrics.py +20 -8
- agno/os/routers/metrics/schemas.py +16 -16
- agno/os/routers/session/session.py +499 -38
- agno/os/schema.py +308 -198
- agno/os/utils.py +401 -41
- agno/reasoning/anthropic.py +80 -0
- agno/reasoning/azure_ai_foundry.py +2 -2
- agno/reasoning/deepseek.py +2 -2
- agno/reasoning/default.py +3 -1
- agno/reasoning/gemini.py +73 -0
- agno/reasoning/groq.py +2 -2
- agno/reasoning/ollama.py +2 -2
- agno/reasoning/openai.py +7 -2
- agno/reasoning/vertexai.py +76 -0
- agno/run/__init__.py +6 -0
- agno/run/agent.py +248 -94
- agno/run/base.py +44 -5
- agno/run/team.py +238 -97
- agno/run/workflow.py +144 -33
- agno/session/agent.py +105 -89
- agno/session/summary.py +65 -25
- agno/session/team.py +176 -96
- agno/session/workflow.py +406 -40
- agno/team/team.py +3854 -1610
- agno/tools/dalle.py +2 -4
- agno/tools/decorator.py +4 -2
- agno/tools/duckduckgo.py +15 -11
- agno/tools/e2b.py +14 -7
- agno/tools/eleven_labs.py +23 -25
- agno/tools/exa.py +21 -16
- agno/tools/file.py +153 -23
- agno/tools/file_generation.py +350 -0
- agno/tools/firecrawl.py +4 -4
- agno/tools/function.py +250 -30
- agno/tools/gmail.py +238 -14
- agno/tools/google_drive.py +270 -0
- agno/tools/googlecalendar.py +36 -8
- agno/tools/googlesheets.py +20 -5
- agno/tools/jira.py +20 -0
- agno/tools/knowledge.py +3 -3
- 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 +11 -17
- agno/tools/memori.py +1 -53
- agno/tools/memory.py +419 -0
- agno/tools/models/nebius.py +5 -5
- agno/tools/models_labs.py +20 -10
- agno/tools/notion.py +204 -0
- agno/tools/parallel.py +314 -0
- agno/tools/scrapegraph.py +58 -31
- agno/tools/searxng.py +2 -2
- agno/tools/serper.py +2 -2
- agno/tools/slack.py +18 -3
- agno/tools/spider.py +2 -2
- agno/tools/tavily.py +146 -0
- agno/tools/whatsapp.py +1 -1
- agno/tools/workflow.py +278 -0
- agno/tools/yfinance.py +12 -11
- agno/utils/agent.py +820 -0
- agno/utils/audio.py +27 -0
- agno/utils/common.py +90 -1
- agno/utils/events.py +217 -2
- agno/utils/gemini.py +180 -22
- agno/utils/hooks.py +57 -0
- agno/utils/http.py +111 -0
- agno/utils/knowledge.py +12 -5
- agno/utils/log.py +1 -0
- agno/utils/mcp.py +92 -2
- agno/utils/media.py +188 -10
- agno/utils/merge_dict.py +22 -1
- agno/utils/message.py +60 -0
- agno/utils/models/claude.py +40 -11
- agno/utils/print_response/agent.py +105 -21
- agno/utils/print_response/team.py +103 -38
- agno/utils/print_response/workflow.py +251 -34
- agno/utils/reasoning.py +22 -1
- agno/utils/serialize.py +32 -0
- agno/utils/streamlit.py +16 -10
- agno/utils/string.py +41 -0
- agno/utils/team.py +98 -9
- agno/utils/tools.py +1 -1
- agno/vectordb/base.py +23 -4
- agno/vectordb/cassandra/cassandra.py +65 -9
- agno/vectordb/chroma/chromadb.py +182 -38
- agno/vectordb/clickhouse/clickhousedb.py +64 -11
- agno/vectordb/couchbase/couchbase.py +105 -10
- agno/vectordb/lancedb/lance_db.py +124 -133
- agno/vectordb/langchaindb/langchaindb.py +25 -7
- agno/vectordb/lightrag/lightrag.py +17 -3
- agno/vectordb/llamaindex/__init__.py +3 -0
- agno/vectordb/llamaindex/llamaindexdb.py +46 -7
- agno/vectordb/milvus/milvus.py +126 -9
- agno/vectordb/mongodb/__init__.py +7 -1
- agno/vectordb/mongodb/mongodb.py +112 -7
- agno/vectordb/pgvector/pgvector.py +142 -21
- agno/vectordb/pineconedb/pineconedb.py +80 -8
- agno/vectordb/qdrant/qdrant.py +125 -39
- agno/vectordb/redis/__init__.py +9 -0
- agno/vectordb/redis/redisdb.py +694 -0
- agno/vectordb/singlestore/singlestore.py +111 -25
- agno/vectordb/surrealdb/surrealdb.py +31 -5
- agno/vectordb/upstashdb/upstashdb.py +76 -8
- agno/vectordb/weaviate/weaviate.py +86 -15
- agno/workflow/__init__.py +2 -0
- agno/workflow/agent.py +299 -0
- agno/workflow/condition.py +112 -18
- agno/workflow/loop.py +69 -10
- agno/workflow/parallel.py +266 -118
- agno/workflow/router.py +110 -17
- agno/workflow/step.py +638 -129
- agno/workflow/steps.py +65 -6
- agno/workflow/types.py +61 -23
- agno/workflow/workflow.py +2085 -272
- {agno-2.0.1.dist-info → agno-2.3.0.dist-info}/METADATA +182 -58
- agno-2.3.0.dist-info/RECORD +577 -0
- agno/knowledge/reader/url_reader.py +0 -128
- agno/tools/googlesearch.py +0 -98
- agno/tools/mcp.py +0 -610
- agno/utils/models/aws_claude.py +0 -170
- agno-2.0.1.dist-info/RECORD +0 -515
- {agno-2.0.1.dist-info → agno-2.3.0.dist-info}/WHEEL +0 -0
- {agno-2.0.1.dist-info → agno-2.3.0.dist-info}/licenses/LICENSE +0 -0
- {agno-2.0.1.dist-info → agno-2.3.0.dist-info}/top_level.txt +0 -0
agno/utils/models/aws_claude.py
DELETED
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
import json
|
|
2
|
-
from typing import Any, Dict, List, Optional, Tuple
|
|
3
|
-
|
|
4
|
-
from agno.media import Image
|
|
5
|
-
from agno.models.message import Message
|
|
6
|
-
from agno.utils.log import log_error, log_warning
|
|
7
|
-
|
|
8
|
-
try:
|
|
9
|
-
from anthropic.types import (
|
|
10
|
-
TextBlock,
|
|
11
|
-
ToolUseBlock,
|
|
12
|
-
)
|
|
13
|
-
except ImportError:
|
|
14
|
-
log_error("`anthropic[bedrock]` not installed. Please install it via `pip install anthropic[bedrock]`.")
|
|
15
|
-
raise
|
|
16
|
-
|
|
17
|
-
ROLE_MAP = {
|
|
18
|
-
"system": "system",
|
|
19
|
-
"user": "user",
|
|
20
|
-
"assistant": "assistant",
|
|
21
|
-
"tool": "user",
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
def _format_image_for_message(image: Image) -> Optional[Dict[str, Any]]:
|
|
26
|
-
"""
|
|
27
|
-
Add an image to a message by converting it to base64 encoded format.
|
|
28
|
-
"""
|
|
29
|
-
using_filetype = False
|
|
30
|
-
|
|
31
|
-
import base64
|
|
32
|
-
|
|
33
|
-
# 'imghdr' was deprecated in Python 3.11: https://docs.python.org/3/library/imghdr.html
|
|
34
|
-
# 'filetype' used as a fallback
|
|
35
|
-
try:
|
|
36
|
-
import imghdr
|
|
37
|
-
except (ModuleNotFoundError, ImportError):
|
|
38
|
-
try:
|
|
39
|
-
import filetype
|
|
40
|
-
|
|
41
|
-
using_filetype = True
|
|
42
|
-
except (ModuleNotFoundError, ImportError):
|
|
43
|
-
raise ImportError("`filetype` not installed. Please install using `pip install filetype`")
|
|
44
|
-
|
|
45
|
-
type_mapping = {
|
|
46
|
-
"jpeg": "image/jpeg",
|
|
47
|
-
"jpg": "image/jpeg",
|
|
48
|
-
"png": "image/png",
|
|
49
|
-
"gif": "image/gif",
|
|
50
|
-
"webp": "image/webp",
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
try:
|
|
54
|
-
# Case 1: Image is a URL
|
|
55
|
-
if image.url is not None:
|
|
56
|
-
content_bytes = image.get_content_bytes() # type: ignore
|
|
57
|
-
|
|
58
|
-
# Case 2: Image is a local file path
|
|
59
|
-
elif image.filepath is not None:
|
|
60
|
-
from pathlib import Path
|
|
61
|
-
|
|
62
|
-
path = Path(image.filepath) if isinstance(image.filepath, str) else image.filepath
|
|
63
|
-
if path.exists() and path.is_file():
|
|
64
|
-
with open(image.filepath, "rb") as f:
|
|
65
|
-
content_bytes = f.read()
|
|
66
|
-
else:
|
|
67
|
-
log_error(f"Image file not found: {image}")
|
|
68
|
-
return None
|
|
69
|
-
|
|
70
|
-
# Case 3: Image is a bytes object
|
|
71
|
-
elif image.content is not None:
|
|
72
|
-
content_bytes = image.content
|
|
73
|
-
|
|
74
|
-
else:
|
|
75
|
-
log_error(f"Unsupported image type: {type(image)}")
|
|
76
|
-
return None
|
|
77
|
-
|
|
78
|
-
if using_filetype:
|
|
79
|
-
kind = filetype.guess(content_bytes)
|
|
80
|
-
if not kind:
|
|
81
|
-
log_error("Unable to determine image type")
|
|
82
|
-
return None
|
|
83
|
-
|
|
84
|
-
img_type = kind.extension
|
|
85
|
-
else:
|
|
86
|
-
img_type = imghdr.what(None, h=content_bytes) # type: ignore
|
|
87
|
-
|
|
88
|
-
if not img_type:
|
|
89
|
-
log_error("Unable to determine image type")
|
|
90
|
-
return None
|
|
91
|
-
|
|
92
|
-
media_type = type_mapping.get(img_type)
|
|
93
|
-
if not media_type:
|
|
94
|
-
log_error(f"Unsupported image type: {img_type}")
|
|
95
|
-
return None
|
|
96
|
-
|
|
97
|
-
return {
|
|
98
|
-
"type": "image",
|
|
99
|
-
"source": {
|
|
100
|
-
"type": "base64",
|
|
101
|
-
"media_type": media_type,
|
|
102
|
-
"data": base64.b64encode(content_bytes).decode("utf-8"), # type: ignore
|
|
103
|
-
},
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
except Exception as e:
|
|
107
|
-
log_error(f"Error processing image: {e}")
|
|
108
|
-
return None
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
def format_messages(messages: List[Message]) -> Tuple[List[Dict[str, str]], str]:
|
|
112
|
-
"""
|
|
113
|
-
Process the list of messages and separate them into API messages and system messages.
|
|
114
|
-
|
|
115
|
-
Args:
|
|
116
|
-
messages (List[Message]): The list of messages to process.
|
|
117
|
-
|
|
118
|
-
Returns:
|
|
119
|
-
Tuple[List[Dict[str, str]], str]: A tuple containing the list of API messages and the concatenated system messages.
|
|
120
|
-
"""
|
|
121
|
-
|
|
122
|
-
chat_messages: List[Dict[str, str]] = []
|
|
123
|
-
system_messages: List[str] = []
|
|
124
|
-
|
|
125
|
-
for message in messages:
|
|
126
|
-
content = message.content or ""
|
|
127
|
-
if message.role == "system":
|
|
128
|
-
if content is not None:
|
|
129
|
-
system_messages.append(content) # type: ignore
|
|
130
|
-
continue
|
|
131
|
-
elif message.role == "user":
|
|
132
|
-
if isinstance(content, str):
|
|
133
|
-
content = [{"type": "text", "text": content}]
|
|
134
|
-
|
|
135
|
-
if message.images is not None:
|
|
136
|
-
for image in message.images:
|
|
137
|
-
image_content = _format_image_for_message(image)
|
|
138
|
-
if image_content:
|
|
139
|
-
content.append(image_content)
|
|
140
|
-
|
|
141
|
-
if message.files is not None and len(message.files) > 0:
|
|
142
|
-
log_warning("Files are not supported for AWS Bedrock Claude")
|
|
143
|
-
|
|
144
|
-
if message.audio is not None and len(message.audio) > 0:
|
|
145
|
-
log_warning("Audio is not supported for AWS Bedrock Claude")
|
|
146
|
-
|
|
147
|
-
if message.videos is not None and len(message.videos) > 0:
|
|
148
|
-
log_warning("Video is not supported for AWS Bedrock Claude")
|
|
149
|
-
|
|
150
|
-
# Handle tool calls from history
|
|
151
|
-
elif message.role == "assistant":
|
|
152
|
-
content = []
|
|
153
|
-
|
|
154
|
-
if isinstance(message.content, str) and message.content and len(message.content.strip()) > 0:
|
|
155
|
-
content.append(TextBlock(text=message.content, type="text"))
|
|
156
|
-
|
|
157
|
-
if message.tool_calls:
|
|
158
|
-
for tool_call in message.tool_calls:
|
|
159
|
-
content.append(
|
|
160
|
-
ToolUseBlock(
|
|
161
|
-
id=tool_call["id"],
|
|
162
|
-
input=json.loads(tool_call["function"]["arguments"])
|
|
163
|
-
if "arguments" in tool_call["function"]
|
|
164
|
-
else {},
|
|
165
|
-
name=tool_call["function"]["name"],
|
|
166
|
-
type="tool_use",
|
|
167
|
-
)
|
|
168
|
-
)
|
|
169
|
-
chat_messages.append({"role": ROLE_MAP[message.role], "content": content}) # type: ignore
|
|
170
|
-
return chat_messages, " ".join(system_messages)
|