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
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import json
|
|
2
|
+
import warnings
|
|
2
3
|
from collections.abc import Set
|
|
3
4
|
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Sequence, Union, cast, get_args
|
|
4
5
|
|
|
@@ -10,6 +11,7 @@ from rich.markdown import Markdown
|
|
|
10
11
|
from rich.status import Status
|
|
11
12
|
from rich.text import Text
|
|
12
13
|
|
|
14
|
+
from agno.filters import FilterExpr
|
|
13
15
|
from agno.media import Audio, File, Image, Video
|
|
14
16
|
from agno.models.message import Message
|
|
15
17
|
from agno.reasoning.step import ReasoningStep
|
|
@@ -33,8 +35,7 @@ def print_response_stream(
|
|
|
33
35
|
images: Optional[Sequence[Image]] = None,
|
|
34
36
|
videos: Optional[Sequence[Video]] = None,
|
|
35
37
|
files: Optional[Sequence[File]] = None,
|
|
36
|
-
|
|
37
|
-
knowledge_filters: Optional[Dict[str, Any]] = None,
|
|
38
|
+
knowledge_filters: Optional[Union[Dict[str, Any], List[FilterExpr]]] = None,
|
|
38
39
|
debug_mode: Optional[bool] = None,
|
|
39
40
|
markdown: bool = False,
|
|
40
41
|
show_message: bool = True,
|
|
@@ -44,6 +45,8 @@ def print_response_stream(
|
|
|
44
45
|
console: Optional[Any] = None,
|
|
45
46
|
add_history_to_context: Optional[bool] = None,
|
|
46
47
|
dependencies: Optional[Dict[str, Any]] = None,
|
|
48
|
+
add_dependencies_to_context: Optional[bool] = None,
|
|
49
|
+
add_session_state_to_context: Optional[bool] = None,
|
|
47
50
|
metadata: Optional[Dict[str, Any]] = None,
|
|
48
51
|
**kwargs: Any,
|
|
49
52
|
):
|
|
@@ -76,6 +79,8 @@ def print_response_stream(
|
|
|
76
79
|
if render:
|
|
77
80
|
live_log.update(Group(*panels))
|
|
78
81
|
|
|
82
|
+
input_content = get_text_from_message(input)
|
|
83
|
+
|
|
79
84
|
for response_event in agent.run(
|
|
80
85
|
input=input,
|
|
81
86
|
session_id=session_id,
|
|
@@ -86,10 +91,11 @@ def print_response_stream(
|
|
|
86
91
|
videos=videos,
|
|
87
92
|
files=files,
|
|
88
93
|
stream=True,
|
|
89
|
-
stream_intermediate_steps=stream_intermediate_steps,
|
|
90
94
|
knowledge_filters=knowledge_filters,
|
|
91
95
|
debug_mode=debug_mode,
|
|
92
96
|
add_history_to_context=add_history_to_context,
|
|
97
|
+
add_dependencies_to_context=add_dependencies_to_context,
|
|
98
|
+
add_session_state_to_context=add_session_state_to_context,
|
|
93
99
|
dependencies=dependencies,
|
|
94
100
|
metadata=metadata,
|
|
95
101
|
**kwargs,
|
|
@@ -102,6 +108,10 @@ def print_response_stream(
|
|
|
102
108
|
live_log.update(Group(*panels))
|
|
103
109
|
return
|
|
104
110
|
|
|
111
|
+
if response_event.event == RunEvent.pre_hook_completed: # type: ignore
|
|
112
|
+
if response_event.run_input is not None: # type: ignore
|
|
113
|
+
input_content = get_text_from_message(response_event.run_input.input_content) # type: ignore
|
|
114
|
+
|
|
105
115
|
if (
|
|
106
116
|
response_event.event == RunEvent.tool_call_started # type: ignore
|
|
107
117
|
and hasattr(response_event, "tool")
|
|
@@ -112,7 +122,9 @@ def print_response_stream(
|
|
|
112
122
|
if response_event.event == RunEvent.run_content: # type: ignore
|
|
113
123
|
if hasattr(response_event, "content"):
|
|
114
124
|
if isinstance(response_event.content, str):
|
|
115
|
-
|
|
125
|
+
# Don't accumulate text content, parser_model will replace it
|
|
126
|
+
if not (agent.parser_model is not None and agent.output_schema is not None):
|
|
127
|
+
_response_content += response_event.content
|
|
116
128
|
elif agent.output_schema is not None and isinstance(response_event.content, BaseModel):
|
|
117
129
|
try:
|
|
118
130
|
response_content_batch = JSON( # type: ignore
|
|
@@ -151,9 +163,8 @@ def print_response_stream(
|
|
|
151
163
|
panels = [status]
|
|
152
164
|
if show_message:
|
|
153
165
|
# Convert message to a panel
|
|
154
|
-
message_content = get_text_from_message(input)
|
|
155
166
|
message_panel = create_panel(
|
|
156
|
-
content=Text(
|
|
167
|
+
content=Text(input_content, style="green"),
|
|
157
168
|
title="Message",
|
|
158
169
|
border_style="cyan",
|
|
159
170
|
)
|
|
@@ -210,8 +221,7 @@ async def aprint_response_stream(
|
|
|
210
221
|
images: Optional[Sequence[Image]] = None,
|
|
211
222
|
videos: Optional[Sequence[Video]] = None,
|
|
212
223
|
files: Optional[Sequence[File]] = None,
|
|
213
|
-
|
|
214
|
-
knowledge_filters: Optional[Dict[str, Any]] = None,
|
|
224
|
+
knowledge_filters: Optional[Union[Dict[str, Any], List[FilterExpr]]] = None,
|
|
215
225
|
debug_mode: Optional[bool] = None,
|
|
216
226
|
markdown: bool = False,
|
|
217
227
|
show_message: bool = True,
|
|
@@ -221,6 +231,8 @@ async def aprint_response_stream(
|
|
|
221
231
|
console: Optional[Any] = None,
|
|
222
232
|
add_history_to_context: Optional[bool] = None,
|
|
223
233
|
dependencies: Optional[Dict[str, Any]] = None,
|
|
234
|
+
add_dependencies_to_context: Optional[bool] = None,
|
|
235
|
+
add_session_state_to_context: Optional[bool] = None,
|
|
224
236
|
metadata: Optional[Dict[str, Any]] = None,
|
|
225
237
|
**kwargs: Any,
|
|
226
238
|
):
|
|
@@ -263,15 +275,18 @@ async def aprint_response_stream(
|
|
|
263
275
|
videos=videos,
|
|
264
276
|
files=files,
|
|
265
277
|
stream=True,
|
|
266
|
-
stream_intermediate_steps=stream_intermediate_steps,
|
|
267
278
|
knowledge_filters=knowledge_filters,
|
|
268
279
|
debug_mode=debug_mode,
|
|
269
280
|
add_history_to_context=add_history_to_context,
|
|
281
|
+
add_dependencies_to_context=add_dependencies_to_context,
|
|
282
|
+
add_session_state_to_context=add_session_state_to_context,
|
|
270
283
|
dependencies=dependencies,
|
|
271
284
|
metadata=metadata,
|
|
272
285
|
**kwargs,
|
|
273
286
|
)
|
|
274
287
|
|
|
288
|
+
input_content = get_text_from_message(input)
|
|
289
|
+
|
|
275
290
|
async for resp in result: # type: ignore
|
|
276
291
|
if isinstance(resp, tuple(get_args(RunOutputEvent))):
|
|
277
292
|
if resp.is_paused:
|
|
@@ -287,9 +302,15 @@ async def aprint_response_stream(
|
|
|
287
302
|
):
|
|
288
303
|
accumulated_tool_calls.append(resp.tool)
|
|
289
304
|
|
|
305
|
+
if resp.event == RunEvent.pre_hook_completed: # type: ignore
|
|
306
|
+
if resp.run_input is not None: # type: ignore
|
|
307
|
+
input_content = get_text_from_message(resp.run_input.input_content) # type: ignore
|
|
308
|
+
|
|
290
309
|
if resp.event == RunEvent.run_content: # type: ignore
|
|
291
310
|
if isinstance(resp.content, str):
|
|
292
|
-
|
|
311
|
+
# Don't accumulate text content, parser_model will replace it
|
|
312
|
+
if not (agent.parser_model is not None and agent.output_schema is not None):
|
|
313
|
+
_response_content += resp.content
|
|
293
314
|
elif agent.output_schema is not None and isinstance(resp.content, BaseModel):
|
|
294
315
|
try:
|
|
295
316
|
response_content_batch = JSON(resp.content.model_dump_json(exclude_none=True), indent=2) # type: ignore
|
|
@@ -326,12 +347,11 @@ async def aprint_response_stream(
|
|
|
326
347
|
|
|
327
348
|
panels = [status]
|
|
328
349
|
|
|
329
|
-
if
|
|
350
|
+
if input_content and show_message:
|
|
330
351
|
render = True
|
|
331
352
|
# Convert message to a panel
|
|
332
|
-
message_content = get_text_from_message(input)
|
|
333
353
|
message_panel = create_panel(
|
|
334
|
-
content=Text(
|
|
354
|
+
content=Text(input_content, style="green"),
|
|
335
355
|
title="Message",
|
|
336
356
|
border_style="cyan",
|
|
337
357
|
)
|
|
@@ -411,7 +431,7 @@ def build_panels_stream(
|
|
|
411
431
|
reasoning_panel = create_panel(content=step_content, title=f"Reasoning step {i}", border_style="green")
|
|
412
432
|
panels.append(reasoning_panel)
|
|
413
433
|
|
|
414
|
-
if len(response_reasoning_content_buffer) > 0:
|
|
434
|
+
if len(response_reasoning_content_buffer) > 0 and show_reasoning:
|
|
415
435
|
# Create panel for thinking
|
|
416
436
|
thinking_panel = create_panel(
|
|
417
437
|
content=Text(response_reasoning_content_buffer),
|
|
@@ -475,8 +495,9 @@ def print_response(
|
|
|
475
495
|
images: Optional[Sequence[Image]] = None,
|
|
476
496
|
videos: Optional[Sequence[Video]] = None,
|
|
477
497
|
files: Optional[Sequence[File]] = None,
|
|
478
|
-
|
|
479
|
-
|
|
498
|
+
knowledge_filters: Optional[Union[Dict[str, Any], List[FilterExpr]]] = None,
|
|
499
|
+
stream_events: Optional[bool] = None,
|
|
500
|
+
stream_intermediate_steps: Optional[bool] = None,
|
|
480
501
|
debug_mode: Optional[bool] = None,
|
|
481
502
|
markdown: bool = False,
|
|
482
503
|
show_message: bool = True,
|
|
@@ -486,9 +507,24 @@ def print_response(
|
|
|
486
507
|
console: Optional[Any] = None,
|
|
487
508
|
add_history_to_context: Optional[bool] = None,
|
|
488
509
|
dependencies: Optional[Dict[str, Any]] = None,
|
|
510
|
+
add_dependencies_to_context: Optional[bool] = None,
|
|
511
|
+
add_session_state_to_context: Optional[bool] = None,
|
|
489
512
|
metadata: Optional[Dict[str, Any]] = None,
|
|
490
513
|
**kwargs: Any,
|
|
491
514
|
):
|
|
515
|
+
if stream_events is not None:
|
|
516
|
+
warnings.warn(
|
|
517
|
+
"The 'stream_events' parameter is deprecated and will be removed in future versions. Event streaming is always enabled using the print_response function.",
|
|
518
|
+
DeprecationWarning,
|
|
519
|
+
stacklevel=2,
|
|
520
|
+
)
|
|
521
|
+
if stream_intermediate_steps is not None:
|
|
522
|
+
warnings.warn(
|
|
523
|
+
"The 'stream_intermediate_steps' parameter is deprecated and will be removed in future versions. Event streaming is always enabled using the print_response function.",
|
|
524
|
+
DeprecationWarning,
|
|
525
|
+
stacklevel=2,
|
|
526
|
+
)
|
|
527
|
+
|
|
492
528
|
with Live(console=console) as live_log:
|
|
493
529
|
status = Status("Thinking...", spinner="aesthetic", speed=0.4, refresh_per_second=10)
|
|
494
530
|
live_log.update(status)
|
|
@@ -519,16 +555,32 @@ def print_response(
|
|
|
519
555
|
videos=videos,
|
|
520
556
|
files=files,
|
|
521
557
|
stream=False,
|
|
522
|
-
|
|
558
|
+
stream_events=True,
|
|
523
559
|
knowledge_filters=knowledge_filters,
|
|
524
560
|
debug_mode=debug_mode,
|
|
525
561
|
add_history_to_context=add_history_to_context,
|
|
562
|
+
add_dependencies_to_context=add_dependencies_to_context,
|
|
563
|
+
add_session_state_to_context=add_session_state_to_context,
|
|
526
564
|
dependencies=dependencies,
|
|
527
565
|
metadata=metadata,
|
|
528
566
|
**kwargs,
|
|
529
567
|
)
|
|
530
568
|
response_timer.stop()
|
|
531
569
|
|
|
570
|
+
if run_response.input is not None and run_response.input.input_content != input:
|
|
571
|
+
# Input was modified during the run
|
|
572
|
+
panels = [status]
|
|
573
|
+
if show_message:
|
|
574
|
+
# Convert message to a panel
|
|
575
|
+
message_content = get_text_from_message(run_response.input.input_content)
|
|
576
|
+
message_panel = create_panel(
|
|
577
|
+
content=Text(message_content, style="green"),
|
|
578
|
+
title="Message",
|
|
579
|
+
border_style="cyan",
|
|
580
|
+
)
|
|
581
|
+
panels.append(message_panel) # type: ignore
|
|
582
|
+
live_log.update(Group(*panels))
|
|
583
|
+
|
|
532
584
|
additional_panels = build_panels(
|
|
533
585
|
run_response=run_response,
|
|
534
586
|
output_schema=agent.output_schema, # type: ignore
|
|
@@ -575,20 +627,36 @@ async def aprint_response(
|
|
|
575
627
|
images: Optional[Sequence[Image]] = None,
|
|
576
628
|
videos: Optional[Sequence[Video]] = None,
|
|
577
629
|
files: Optional[Sequence[File]] = None,
|
|
578
|
-
|
|
579
|
-
knowledge_filters: Optional[Dict[str, Any]] = None,
|
|
630
|
+
knowledge_filters: Optional[Union[Dict[str, Any], List[FilterExpr]]] = None,
|
|
580
631
|
debug_mode: Optional[bool] = None,
|
|
581
632
|
markdown: bool = False,
|
|
582
633
|
show_message: bool = True,
|
|
583
634
|
show_reasoning: bool = True,
|
|
584
635
|
show_full_reasoning: bool = False,
|
|
636
|
+
stream_events: Optional[bool] = None,
|
|
637
|
+
stream_intermediate_steps: Optional[bool] = None,
|
|
585
638
|
tags_to_include_in_markdown: Set[str] = {"think", "thinking"},
|
|
586
639
|
console: Optional[Any] = None,
|
|
587
640
|
add_history_to_context: Optional[bool] = None,
|
|
588
641
|
dependencies: Optional[Dict[str, Any]] = None,
|
|
642
|
+
add_dependencies_to_context: Optional[bool] = None,
|
|
643
|
+
add_session_state_to_context: Optional[bool] = None,
|
|
589
644
|
metadata: Optional[Dict[str, Any]] = None,
|
|
590
645
|
**kwargs: Any,
|
|
591
646
|
):
|
|
647
|
+
if stream_events is not None:
|
|
648
|
+
warnings.warn(
|
|
649
|
+
"The 'stream_events' parameter is deprecated and will be removed in future versions. Event streaming is always enabled using the aprint_response function.",
|
|
650
|
+
DeprecationWarning,
|
|
651
|
+
stacklevel=2,
|
|
652
|
+
)
|
|
653
|
+
if stream_intermediate_steps is not None:
|
|
654
|
+
warnings.warn(
|
|
655
|
+
"The 'stream_intermediate_steps' parameter is deprecated and will be removed in future versions. Event streaming is always enabled using the aprint_response function.",
|
|
656
|
+
DeprecationWarning,
|
|
657
|
+
stacklevel=2,
|
|
658
|
+
)
|
|
659
|
+
|
|
592
660
|
with Live(console=console) as live_log:
|
|
593
661
|
status = Status("Thinking...", spinner="aesthetic", speed=0.4, refresh_per_second=10)
|
|
594
662
|
live_log.update(status)
|
|
@@ -619,16 +687,32 @@ async def aprint_response(
|
|
|
619
687
|
videos=videos,
|
|
620
688
|
files=files,
|
|
621
689
|
stream=False,
|
|
622
|
-
|
|
690
|
+
stream_events=True,
|
|
623
691
|
knowledge_filters=knowledge_filters,
|
|
624
692
|
debug_mode=debug_mode,
|
|
625
693
|
add_history_to_context=add_history_to_context,
|
|
694
|
+
add_dependencies_to_context=add_dependencies_to_context,
|
|
695
|
+
add_session_state_to_context=add_session_state_to_context,
|
|
626
696
|
dependencies=dependencies,
|
|
627
697
|
metadata=metadata,
|
|
628
698
|
**kwargs,
|
|
629
699
|
)
|
|
630
700
|
response_timer.stop()
|
|
631
701
|
|
|
702
|
+
if run_response.input is not None and run_response.input.input_content != input:
|
|
703
|
+
# Input was modified during the run
|
|
704
|
+
panels = [status]
|
|
705
|
+
if show_message:
|
|
706
|
+
# Convert message to a panel
|
|
707
|
+
message_content = get_text_from_message(run_response.input.input_content)
|
|
708
|
+
message_panel = create_panel(
|
|
709
|
+
content=Text(message_content, style="green"),
|
|
710
|
+
title="Message",
|
|
711
|
+
border_style="cyan",
|
|
712
|
+
)
|
|
713
|
+
panels.append(message_panel) # type: ignore
|
|
714
|
+
live_log.update(Group(*panels))
|
|
715
|
+
|
|
632
716
|
additional_panels = build_panels(
|
|
633
717
|
run_response=run_response,
|
|
634
718
|
output_schema=agent.output_schema, # type: ignore
|
|
@@ -707,7 +791,7 @@ def build_panels(
|
|
|
707
791
|
reasoning_panel = create_panel(content=step_content, title=f"Reasoning step {i}", border_style="green")
|
|
708
792
|
panels.append(reasoning_panel)
|
|
709
793
|
|
|
710
|
-
if isinstance(run_response, RunOutput) and run_response.reasoning_content is not None:
|
|
794
|
+
if isinstance(run_response, RunOutput) and run_response.reasoning_content is not None and show_reasoning:
|
|
711
795
|
# Create panel for thinking
|
|
712
796
|
thinking_panel = create_panel(
|
|
713
797
|
content=Text(run_response.reasoning_content),
|