agno 1.8.1__py3-none-any.whl → 2.0.0rc1__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 +19 -27
- agno/agent/agent.py +3181 -4169
- agno/api/agent.py +11 -67
- agno/api/api.py +5 -46
- agno/api/evals.py +8 -19
- agno/api/os.py +17 -0
- agno/api/routes.py +6 -41
- agno/api/schemas/__init__.py +9 -0
- agno/api/schemas/agent.py +5 -21
- agno/api/schemas/evals.py +7 -16
- agno/api/schemas/os.py +14 -0
- agno/api/schemas/team.py +5 -21
- agno/api/schemas/utils.py +21 -0
- agno/api/schemas/workflows.py +11 -7
- agno/api/settings.py +53 -0
- agno/api/team.py +11 -66
- agno/api/workflow.py +28 -0
- agno/cloud/aws/base.py +214 -0
- agno/cloud/aws/s3/__init__.py +2 -0
- agno/cloud/aws/s3/api_client.py +43 -0
- agno/cloud/aws/s3/bucket.py +195 -0
- agno/cloud/aws/s3/object.py +57 -0
- agno/db/__init__.py +24 -0
- agno/db/base.py +245 -0
- agno/db/dynamo/__init__.py +3 -0
- agno/db/dynamo/dynamo.py +1743 -0
- agno/db/dynamo/schemas.py +278 -0
- agno/db/dynamo/utils.py +684 -0
- agno/db/firestore/__init__.py +3 -0
- agno/db/firestore/firestore.py +1432 -0
- agno/db/firestore/schemas.py +130 -0
- agno/db/firestore/utils.py +278 -0
- agno/db/gcs_json/__init__.py +3 -0
- agno/db/gcs_json/gcs_json_db.py +1001 -0
- agno/db/gcs_json/utils.py +194 -0
- agno/db/in_memory/__init__.py +3 -0
- agno/db/in_memory/in_memory_db.py +882 -0
- agno/db/in_memory/utils.py +172 -0
- agno/db/json/__init__.py +3 -0
- agno/db/json/json_db.py +1045 -0
- agno/db/json/utils.py +196 -0
- agno/db/migrations/v1_to_v2.py +162 -0
- agno/db/mongo/__init__.py +3 -0
- agno/db/mongo/mongo.py +1411 -0
- agno/db/mongo/schemas.py +77 -0
- agno/db/mongo/utils.py +204 -0
- agno/db/mysql/__init__.py +3 -0
- agno/db/mysql/mysql.py +1719 -0
- agno/db/mysql/schemas.py +124 -0
- agno/db/mysql/utils.py +297 -0
- agno/db/postgres/__init__.py +3 -0
- agno/db/postgres/postgres.py +1710 -0
- agno/db/postgres/schemas.py +124 -0
- agno/db/postgres/utils.py +280 -0
- agno/db/redis/__init__.py +3 -0
- agno/db/redis/redis.py +1367 -0
- agno/db/redis/schemas.py +109 -0
- agno/db/redis/utils.py +288 -0
- agno/db/schemas/__init__.py +3 -0
- agno/db/schemas/evals.py +33 -0
- agno/db/schemas/knowledge.py +40 -0
- agno/db/schemas/memory.py +46 -0
- agno/db/singlestore/__init__.py +3 -0
- agno/db/singlestore/schemas.py +116 -0
- agno/db/singlestore/singlestore.py +1712 -0
- agno/db/singlestore/utils.py +326 -0
- agno/db/sqlite/__init__.py +3 -0
- agno/db/sqlite/schemas.py +119 -0
- agno/db/sqlite/sqlite.py +1676 -0
- agno/db/sqlite/utils.py +268 -0
- agno/db/utils.py +88 -0
- agno/eval/__init__.py +14 -0
- agno/eval/accuracy.py +142 -43
- agno/eval/performance.py +88 -23
- agno/eval/reliability.py +73 -20
- agno/eval/utils.py +23 -13
- agno/integrations/discord/__init__.py +3 -0
- agno/{app → integrations}/discord/client.py +15 -11
- agno/knowledge/__init__.py +2 -2
- agno/{document → knowledge}/chunking/agentic.py +2 -2
- agno/{document → knowledge}/chunking/document.py +2 -2
- agno/{document → knowledge}/chunking/fixed.py +3 -3
- agno/{document → knowledge}/chunking/markdown.py +2 -2
- agno/{document → knowledge}/chunking/recursive.py +2 -2
- agno/{document → knowledge}/chunking/row.py +2 -2
- agno/knowledge/chunking/semantic.py +59 -0
- agno/knowledge/chunking/strategy.py +121 -0
- agno/knowledge/content.py +74 -0
- agno/knowledge/document/__init__.py +5 -0
- agno/{document → knowledge/document}/base.py +12 -2
- agno/knowledge/embedder/__init__.py +5 -0
- agno/{embedder → knowledge/embedder}/aws_bedrock.py +127 -1
- agno/{embedder → knowledge/embedder}/azure_openai.py +65 -1
- agno/{embedder → knowledge/embedder}/base.py +6 -0
- agno/{embedder → knowledge/embedder}/cohere.py +72 -1
- agno/{embedder → knowledge/embedder}/fastembed.py +17 -1
- agno/{embedder → knowledge/embedder}/fireworks.py +1 -1
- agno/{embedder → knowledge/embedder}/google.py +74 -1
- agno/{embedder → knowledge/embedder}/huggingface.py +36 -2
- agno/{embedder → knowledge/embedder}/jina.py +48 -2
- agno/knowledge/embedder/langdb.py +22 -0
- agno/knowledge/embedder/mistral.py +139 -0
- agno/{embedder → knowledge/embedder}/nebius.py +1 -1
- agno/{embedder → knowledge/embedder}/ollama.py +54 -3
- agno/knowledge/embedder/openai.py +223 -0
- agno/{embedder → knowledge/embedder}/sentence_transformer.py +16 -1
- agno/{embedder → knowledge/embedder}/together.py +1 -1
- agno/{embedder → knowledge/embedder}/voyageai.py +49 -1
- agno/knowledge/knowledge.py +1515 -0
- agno/knowledge/reader/__init__.py +7 -0
- agno/{document → knowledge}/reader/arxiv_reader.py +32 -4
- agno/knowledge/reader/base.py +88 -0
- agno/{document → knowledge}/reader/csv_reader.py +68 -15
- agno/knowledge/reader/docx_reader.py +83 -0
- agno/{document → knowledge}/reader/firecrawl_reader.py +42 -21
- agno/knowledge/reader/gcs_reader.py +67 -0
- agno/{document → knowledge}/reader/json_reader.py +30 -9
- agno/{document → knowledge}/reader/markdown_reader.py +36 -9
- agno/{document → knowledge}/reader/pdf_reader.py +79 -21
- agno/knowledge/reader/reader_factory.py +275 -0
- agno/knowledge/reader/s3_reader.py +171 -0
- agno/{document → knowledge}/reader/text_reader.py +31 -10
- agno/knowledge/reader/url_reader.py +84 -0
- agno/knowledge/reader/web_search_reader.py +389 -0
- agno/{document → knowledge}/reader/website_reader.py +37 -10
- agno/knowledge/reader/wikipedia_reader.py +59 -0
- agno/knowledge/reader/youtube_reader.py +78 -0
- agno/knowledge/remote_content/remote_content.py +88 -0
- agno/{reranker → knowledge/reranker}/base.py +1 -1
- agno/{reranker → knowledge/reranker}/cohere.py +2 -2
- agno/{reranker → knowledge/reranker}/infinity.py +2 -2
- agno/{reranker → knowledge/reranker}/sentence_transformer.py +2 -2
- agno/knowledge/types.py +30 -0
- agno/knowledge/utils.py +169 -0
- agno/memory/__init__.py +2 -10
- agno/memory/manager.py +1003 -148
- agno/models/aimlapi/__init__.py +2 -2
- agno/models/aimlapi/aimlapi.py +6 -6
- agno/models/anthropic/claude.py +131 -131
- agno/models/aws/bedrock.py +107 -175
- agno/models/aws/claude.py +64 -18
- agno/models/azure/ai_foundry.py +73 -23
- agno/models/base.py +347 -287
- agno/models/cerebras/cerebras.py +84 -27
- agno/models/cohere/chat.py +106 -98
- agno/models/google/gemini.py +100 -42
- agno/models/groq/groq.py +97 -35
- agno/models/huggingface/huggingface.py +92 -27
- agno/models/ibm/watsonx.py +72 -13
- agno/models/litellm/chat.py +85 -13
- agno/models/message.py +45 -150
- agno/models/meta/llama.py +85 -49
- agno/models/metrics.py +120 -0
- agno/models/mistral/mistral.py +90 -21
- agno/models/ollama/__init__.py +0 -2
- agno/models/ollama/chat.py +84 -46
- agno/models/openai/chat.py +121 -23
- agno/models/openai/responses.py +178 -105
- agno/models/perplexity/perplexity.py +26 -2
- agno/models/portkey/portkey.py +0 -7
- agno/models/response.py +14 -8
- agno/models/utils.py +20 -0
- agno/models/vercel/__init__.py +2 -2
- agno/models/vercel/v0.py +1 -1
- agno/models/vllm/__init__.py +2 -2
- agno/models/vllm/vllm.py +3 -3
- agno/models/xai/xai.py +10 -10
- agno/os/__init__.py +3 -0
- agno/os/app.py +489 -0
- agno/os/auth.py +47 -0
- agno/os/config.py +103 -0
- agno/os/interfaces/agui/__init__.py +3 -0
- agno/os/interfaces/agui/agui.py +31 -0
- agno/{app/agui/async_router.py → os/interfaces/agui/router.py} +16 -16
- agno/{app → os/interfaces}/agui/utils.py +77 -33
- agno/os/interfaces/base.py +21 -0
- agno/os/interfaces/slack/__init__.py +3 -0
- agno/{app/slack/async_router.py → os/interfaces/slack/router.py} +3 -5
- agno/os/interfaces/slack/slack.py +32 -0
- agno/os/interfaces/whatsapp/__init__.py +3 -0
- agno/{app/whatsapp/async_router.py → os/interfaces/whatsapp/router.py} +4 -7
- agno/os/interfaces/whatsapp/whatsapp.py +29 -0
- agno/os/mcp.py +255 -0
- agno/os/router.py +869 -0
- agno/os/routers/__init__.py +3 -0
- agno/os/routers/evals/__init__.py +3 -0
- agno/os/routers/evals/evals.py +208 -0
- agno/os/routers/evals/schemas.py +142 -0
- agno/os/routers/evals/utils.py +161 -0
- agno/os/routers/knowledge/__init__.py +3 -0
- agno/os/routers/knowledge/knowledge.py +436 -0
- agno/os/routers/knowledge/schemas.py +118 -0
- agno/os/routers/memory/__init__.py +3 -0
- agno/os/routers/memory/memory.py +188 -0
- agno/os/routers/memory/schemas.py +58 -0
- agno/os/routers/metrics/__init__.py +3 -0
- agno/os/routers/metrics/metrics.py +60 -0
- agno/os/routers/metrics/schemas.py +47 -0
- agno/os/routers/session/__init__.py +3 -0
- agno/os/routers/session/session.py +168 -0
- agno/os/schema.py +892 -0
- agno/{app/playground → os}/settings.py +7 -15
- agno/os/utils.py +270 -0
- agno/reasoning/azure_ai_foundry.py +4 -4
- agno/reasoning/deepseek.py +4 -4
- agno/reasoning/default.py +6 -11
- agno/reasoning/groq.py +4 -4
- agno/reasoning/helpers.py +4 -6
- agno/reasoning/ollama.py +4 -4
- agno/reasoning/openai.py +4 -4
- agno/run/{response.py → agent.py} +231 -74
- agno/run/base.py +44 -58
- agno/run/cancel.py +81 -0
- agno/run/team.py +133 -77
- agno/run/workflow.py +537 -12
- agno/session/__init__.py +10 -0
- agno/session/agent.py +244 -0
- agno/session/summary.py +225 -0
- agno/session/team.py +262 -0
- agno/{storage/session/v2 → session}/workflow.py +47 -24
- agno/team/__init__.py +15 -16
- agno/team/team.py +2960 -4252
- agno/tools/agentql.py +14 -5
- agno/tools/airflow.py +9 -4
- agno/tools/api.py +7 -3
- agno/tools/apify.py +2 -46
- agno/tools/arxiv.py +8 -3
- agno/tools/aws_lambda.py +7 -5
- agno/tools/aws_ses.py +7 -1
- agno/tools/baidusearch.py +4 -1
- agno/tools/bitbucket.py +4 -4
- agno/tools/brandfetch.py +14 -11
- agno/tools/bravesearch.py +4 -1
- agno/tools/brightdata.py +42 -22
- agno/tools/browserbase.py +13 -4
- agno/tools/calcom.py +12 -10
- agno/tools/calculator.py +10 -27
- agno/tools/cartesia.py +18 -13
- agno/tools/{clickup_tool.py → clickup.py} +12 -25
- agno/tools/confluence.py +8 -8
- agno/tools/crawl4ai.py +7 -1
- agno/tools/csv_toolkit.py +9 -8
- agno/tools/dalle.py +18 -11
- agno/tools/daytona.py +13 -16
- agno/tools/decorator.py +6 -3
- agno/tools/desi_vocal.py +16 -7
- agno/tools/discord.py +11 -8
- agno/tools/docker.py +30 -42
- agno/tools/duckdb.py +34 -53
- agno/tools/duckduckgo.py +8 -7
- agno/tools/e2b.py +61 -61
- agno/tools/eleven_labs.py +35 -28
- agno/tools/email.py +4 -1
- agno/tools/evm.py +7 -1
- agno/tools/exa.py +19 -14
- agno/tools/fal.py +29 -29
- agno/tools/file.py +9 -8
- agno/tools/financial_datasets.py +25 -44
- agno/tools/firecrawl.py +22 -22
- agno/tools/function.py +127 -18
- agno/tools/giphy.py +22 -10
- agno/tools/github.py +48 -126
- agno/tools/gmail.py +45 -61
- agno/tools/google_bigquery.py +7 -6
- agno/tools/google_maps.py +11 -26
- agno/tools/googlesearch.py +7 -2
- agno/tools/googlesheets.py +21 -17
- agno/tools/hackernews.py +9 -5
- agno/tools/jina.py +5 -4
- agno/tools/jira.py +18 -9
- agno/tools/knowledge.py +31 -32
- agno/tools/linear.py +19 -34
- agno/tools/linkup.py +5 -1
- agno/tools/local_file_system.py +8 -5
- agno/tools/lumalab.py +31 -19
- agno/tools/mem0.py +18 -12
- agno/tools/memori.py +14 -10
- agno/tools/mlx_transcribe.py +3 -2
- agno/tools/models/azure_openai.py +32 -14
- agno/tools/models/gemini.py +58 -31
- agno/tools/models/groq.py +29 -20
- agno/tools/models/nebius.py +27 -11
- agno/tools/models_labs.py +39 -15
- agno/tools/moviepy_video.py +7 -6
- agno/tools/neo4j.py +10 -8
- agno/tools/newspaper.py +7 -2
- agno/tools/newspaper4k.py +8 -3
- agno/tools/openai.py +57 -26
- agno/tools/openbb.py +12 -11
- agno/tools/opencv.py +62 -46
- agno/tools/openweather.py +14 -12
- agno/tools/pandas.py +11 -3
- agno/tools/postgres.py +4 -12
- agno/tools/pubmed.py +4 -1
- agno/tools/python.py +9 -22
- agno/tools/reasoning.py +35 -27
- agno/tools/reddit.py +11 -26
- agno/tools/replicate.py +54 -41
- agno/tools/resend.py +4 -1
- agno/tools/scrapegraph.py +15 -14
- agno/tools/searxng.py +10 -23
- agno/tools/serpapi.py +6 -3
- agno/tools/serper.py +13 -4
- agno/tools/shell.py +9 -2
- agno/tools/slack.py +12 -11
- agno/tools/sleep.py +3 -2
- agno/tools/spider.py +24 -4
- agno/tools/sql.py +7 -6
- agno/tools/tavily.py +6 -4
- agno/tools/telegram.py +12 -4
- agno/tools/todoist.py +11 -31
- agno/tools/toolkit.py +1 -1
- agno/tools/trafilatura.py +22 -6
- agno/tools/trello.py +9 -22
- agno/tools/twilio.py +10 -3
- agno/tools/user_control_flow.py +6 -1
- agno/tools/valyu.py +34 -5
- agno/tools/visualization.py +19 -28
- agno/tools/webbrowser.py +4 -3
- agno/tools/webex.py +11 -7
- agno/tools/website.py +15 -46
- agno/tools/webtools.py +12 -4
- agno/tools/whatsapp.py +5 -9
- agno/tools/wikipedia.py +20 -13
- agno/tools/x.py +14 -13
- agno/tools/yfinance.py +13 -40
- agno/tools/youtube.py +26 -20
- agno/tools/zendesk.py +7 -2
- agno/tools/zep.py +10 -7
- agno/tools/zoom.py +10 -9
- agno/utils/common.py +1 -19
- agno/utils/events.py +95 -118
- agno/utils/gemini.py +31 -1
- agno/utils/knowledge.py +29 -0
- agno/utils/log.py +2 -2
- agno/utils/mcp.py +11 -5
- agno/utils/media.py +39 -0
- agno/utils/message.py +12 -1
- agno/utils/models/claude.py +55 -4
- agno/utils/models/mistral.py +8 -7
- agno/utils/models/schema_utils.py +3 -3
- agno/utils/pprint.py +33 -32
- agno/utils/print_response/agent.py +779 -0
- agno/utils/print_response/team.py +1565 -0
- agno/utils/print_response/workflow.py +1451 -0
- agno/utils/prompts.py +14 -14
- agno/utils/reasoning.py +87 -0
- agno/utils/response.py +42 -42
- agno/utils/streamlit.py +454 -0
- agno/utils/string.py +8 -22
- agno/utils/team.py +50 -0
- agno/utils/timer.py +2 -2
- agno/vectordb/base.py +33 -21
- agno/vectordb/cassandra/cassandra.py +287 -23
- agno/vectordb/chroma/chromadb.py +482 -59
- agno/vectordb/clickhouse/clickhousedb.py +270 -63
- agno/vectordb/couchbase/couchbase.py +309 -29
- agno/vectordb/lancedb/lance_db.py +360 -21
- agno/vectordb/langchaindb/__init__.py +5 -0
- agno/vectordb/langchaindb/langchaindb.py +145 -0
- agno/vectordb/lightrag/__init__.py +5 -0
- agno/vectordb/lightrag/lightrag.py +374 -0
- agno/vectordb/llamaindex/llamaindexdb.py +127 -0
- agno/vectordb/milvus/milvus.py +242 -32
- agno/vectordb/mongodb/mongodb.py +200 -24
- agno/vectordb/pgvector/pgvector.py +319 -37
- agno/vectordb/pineconedb/pineconedb.py +221 -27
- agno/vectordb/qdrant/qdrant.py +334 -14
- agno/vectordb/singlestore/singlestore.py +286 -29
- agno/vectordb/surrealdb/surrealdb.py +187 -7
- agno/vectordb/upstashdb/upstashdb.py +342 -26
- agno/vectordb/weaviate/weaviate.py +227 -165
- agno/workflow/__init__.py +17 -13
- agno/workflow/{v2/condition.py → condition.py} +135 -32
- agno/workflow/{v2/loop.py → loop.py} +115 -28
- agno/workflow/{v2/parallel.py → parallel.py} +138 -108
- agno/workflow/{v2/router.py → router.py} +133 -32
- agno/workflow/{v2/step.py → step.py} +200 -42
- agno/workflow/{v2/steps.py → steps.py} +147 -66
- agno/workflow/types.py +482 -0
- agno/workflow/workflow.py +2401 -696
- agno-2.0.0rc1.dist-info/METADATA +355 -0
- agno-2.0.0rc1.dist-info/RECORD +516 -0
- agno/agent/metrics.py +0 -107
- agno/api/app.py +0 -35
- agno/api/playground.py +0 -92
- agno/api/schemas/app.py +0 -12
- agno/api/schemas/playground.py +0 -22
- agno/api/schemas/user.py +0 -35
- agno/api/schemas/workspace.py +0 -46
- agno/api/user.py +0 -160
- agno/api/workflows.py +0 -33
- agno/api/workspace.py +0 -175
- agno/app/agui/__init__.py +0 -3
- agno/app/agui/app.py +0 -17
- agno/app/agui/sync_router.py +0 -120
- agno/app/base.py +0 -186
- agno/app/discord/__init__.py +0 -3
- agno/app/fastapi/__init__.py +0 -3
- agno/app/fastapi/app.py +0 -107
- agno/app/fastapi/async_router.py +0 -457
- agno/app/fastapi/sync_router.py +0 -448
- agno/app/playground/app.py +0 -228
- agno/app/playground/async_router.py +0 -1050
- agno/app/playground/deploy.py +0 -249
- agno/app/playground/operator.py +0 -183
- agno/app/playground/schemas.py +0 -220
- agno/app/playground/serve.py +0 -55
- agno/app/playground/sync_router.py +0 -1042
- agno/app/playground/utils.py +0 -46
- agno/app/settings.py +0 -15
- agno/app/slack/__init__.py +0 -3
- agno/app/slack/app.py +0 -19
- agno/app/slack/sync_router.py +0 -92
- agno/app/utils.py +0 -54
- agno/app/whatsapp/__init__.py +0 -3
- agno/app/whatsapp/app.py +0 -15
- agno/app/whatsapp/sync_router.py +0 -197
- agno/cli/auth_server.py +0 -249
- agno/cli/config.py +0 -274
- agno/cli/console.py +0 -88
- agno/cli/credentials.py +0 -23
- agno/cli/entrypoint.py +0 -571
- agno/cli/operator.py +0 -357
- agno/cli/settings.py +0 -96
- agno/cli/ws/ws_cli.py +0 -817
- agno/constants.py +0 -13
- agno/document/__init__.py +0 -5
- agno/document/chunking/semantic.py +0 -45
- agno/document/chunking/strategy.py +0 -31
- agno/document/reader/__init__.py +0 -5
- agno/document/reader/base.py +0 -47
- agno/document/reader/docx_reader.py +0 -60
- agno/document/reader/gcs/pdf_reader.py +0 -44
- agno/document/reader/s3/pdf_reader.py +0 -59
- agno/document/reader/s3/text_reader.py +0 -63
- agno/document/reader/url_reader.py +0 -59
- agno/document/reader/youtube_reader.py +0 -58
- agno/embedder/__init__.py +0 -5
- agno/embedder/langdb.py +0 -80
- agno/embedder/mistral.py +0 -82
- agno/embedder/openai.py +0 -78
- agno/file/__init__.py +0 -5
- agno/file/file.py +0 -16
- agno/file/local/csv.py +0 -32
- agno/file/local/txt.py +0 -19
- agno/infra/app.py +0 -240
- agno/infra/base.py +0 -144
- agno/infra/context.py +0 -20
- agno/infra/db_app.py +0 -52
- agno/infra/resource.py +0 -205
- agno/infra/resources.py +0 -55
- agno/knowledge/agent.py +0 -702
- agno/knowledge/arxiv.py +0 -33
- agno/knowledge/combined.py +0 -36
- agno/knowledge/csv.py +0 -144
- agno/knowledge/csv_url.py +0 -124
- agno/knowledge/document.py +0 -223
- agno/knowledge/docx.py +0 -137
- agno/knowledge/firecrawl.py +0 -34
- agno/knowledge/gcs/__init__.py +0 -0
- agno/knowledge/gcs/base.py +0 -39
- agno/knowledge/gcs/pdf.py +0 -125
- agno/knowledge/json.py +0 -137
- agno/knowledge/langchain.py +0 -71
- agno/knowledge/light_rag.py +0 -273
- agno/knowledge/llamaindex.py +0 -66
- agno/knowledge/markdown.py +0 -154
- agno/knowledge/pdf.py +0 -164
- agno/knowledge/pdf_bytes.py +0 -42
- agno/knowledge/pdf_url.py +0 -148
- agno/knowledge/s3/__init__.py +0 -0
- agno/knowledge/s3/base.py +0 -64
- agno/knowledge/s3/pdf.py +0 -33
- agno/knowledge/s3/text.py +0 -34
- agno/knowledge/text.py +0 -141
- agno/knowledge/url.py +0 -46
- agno/knowledge/website.py +0 -179
- agno/knowledge/wikipedia.py +0 -32
- agno/knowledge/youtube.py +0 -35
- agno/memory/agent.py +0 -423
- agno/memory/classifier.py +0 -104
- agno/memory/db/__init__.py +0 -5
- agno/memory/db/base.py +0 -42
- agno/memory/db/mongodb.py +0 -189
- agno/memory/db/postgres.py +0 -203
- agno/memory/db/sqlite.py +0 -193
- agno/memory/memory.py +0 -22
- agno/memory/row.py +0 -36
- agno/memory/summarizer.py +0 -201
- agno/memory/summary.py +0 -19
- agno/memory/team.py +0 -415
- agno/memory/v2/__init__.py +0 -2
- agno/memory/v2/db/__init__.py +0 -1
- agno/memory/v2/db/base.py +0 -42
- agno/memory/v2/db/firestore.py +0 -339
- agno/memory/v2/db/mongodb.py +0 -196
- agno/memory/v2/db/postgres.py +0 -214
- agno/memory/v2/db/redis.py +0 -187
- agno/memory/v2/db/schema.py +0 -54
- agno/memory/v2/db/sqlite.py +0 -209
- agno/memory/v2/manager.py +0 -437
- agno/memory/v2/memory.py +0 -1097
- agno/memory/v2/schema.py +0 -55
- agno/memory/v2/summarizer.py +0 -215
- agno/memory/workflow.py +0 -38
- agno/models/ollama/tools.py +0 -430
- agno/models/qwen/__init__.py +0 -5
- agno/playground/__init__.py +0 -10
- agno/playground/deploy.py +0 -3
- agno/playground/playground.py +0 -3
- agno/playground/serve.py +0 -3
- agno/playground/settings.py +0 -3
- agno/reranker/__init__.py +0 -0
- agno/run/v2/__init__.py +0 -0
- agno/run/v2/workflow.py +0 -567
- agno/storage/__init__.py +0 -0
- agno/storage/agent/__init__.py +0 -0
- agno/storage/agent/dynamodb.py +0 -1
- agno/storage/agent/json.py +0 -1
- agno/storage/agent/mongodb.py +0 -1
- agno/storage/agent/postgres.py +0 -1
- agno/storage/agent/singlestore.py +0 -1
- agno/storage/agent/sqlite.py +0 -1
- agno/storage/agent/yaml.py +0 -1
- agno/storage/base.py +0 -60
- agno/storage/dynamodb.py +0 -673
- agno/storage/firestore.py +0 -297
- agno/storage/gcs_json.py +0 -261
- agno/storage/in_memory.py +0 -234
- agno/storage/json.py +0 -237
- agno/storage/mongodb.py +0 -328
- agno/storage/mysql.py +0 -685
- agno/storage/postgres.py +0 -682
- agno/storage/redis.py +0 -336
- agno/storage/session/__init__.py +0 -16
- agno/storage/session/agent.py +0 -64
- agno/storage/session/team.py +0 -63
- agno/storage/session/v2/__init__.py +0 -5
- agno/storage/session/workflow.py +0 -61
- agno/storage/singlestore.py +0 -606
- agno/storage/sqlite.py +0 -646
- agno/storage/workflow/__init__.py +0 -0
- agno/storage/workflow/mongodb.py +0 -1
- agno/storage/workflow/postgres.py +0 -1
- agno/storage/workflow/sqlite.py +0 -1
- agno/storage/yaml.py +0 -241
- agno/tools/thinking.py +0 -73
- agno/utils/defaults.py +0 -57
- agno/utils/filesystem.py +0 -39
- agno/utils/git.py +0 -52
- agno/utils/json_io.py +0 -30
- agno/utils/load_env.py +0 -19
- agno/utils/py_io.py +0 -19
- agno/utils/pyproject.py +0 -18
- agno/utils/resource_filter.py +0 -31
- agno/workflow/v2/__init__.py +0 -21
- agno/workflow/v2/types.py +0 -357
- agno/workflow/v2/workflow.py +0 -3312
- agno/workspace/__init__.py +0 -0
- agno/workspace/config.py +0 -325
- agno/workspace/enums.py +0 -6
- agno/workspace/helpers.py +0 -52
- agno/workspace/operator.py +0 -757
- agno/workspace/settings.py +0 -158
- agno-1.8.1.dist-info/METADATA +0 -982
- agno-1.8.1.dist-info/RECORD +0 -566
- agno-1.8.1.dist-info/entry_points.txt +0 -3
- /agno/{app → db/migrations}/__init__.py +0 -0
- /agno/{app/playground/__init__.py → db/schemas/metrics.py} +0 -0
- /agno/{cli → integrations}/__init__.py +0 -0
- /agno/{cli/ws → knowledge/chunking}/__init__.py +0 -0
- /agno/{document/chunking → knowledge/remote_content}/__init__.py +0 -0
- /agno/{document/reader/gcs → knowledge/reranker}/__init__.py +0 -0
- /agno/{document/reader/s3 → os/interfaces}/__init__.py +0 -0
- /agno/{app → os/interfaces}/slack/security.py +0 -0
- /agno/{app → os/interfaces}/whatsapp/security.py +0 -0
- /agno/{file/local → utils/print_response}/__init__.py +0 -0
- /agno/{infra → vectordb/llamaindex}/__init__.py +0 -0
- {agno-1.8.1.dist-info → agno-2.0.0rc1.dist-info}/WHEEL +0 -0
- {agno-1.8.1.dist-info → agno-2.0.0rc1.dist-info}/licenses/LICENSE +0 -0
- {agno-1.8.1.dist-info → agno-2.0.0rc1.dist-info}/top_level.txt +0 -0
agno/memory/v2/manager.py
DELETED
|
@@ -1,437 +0,0 @@
|
|
|
1
|
-
from copy import deepcopy
|
|
2
|
-
from dataclasses import dataclass
|
|
3
|
-
from textwrap import dedent
|
|
4
|
-
from typing import Any, Callable, Dict, List, Optional
|
|
5
|
-
|
|
6
|
-
from agno.memory.v2.db.base import MemoryDb
|
|
7
|
-
from agno.memory.v2.db.schema import MemoryRow
|
|
8
|
-
from agno.memory.v2.schema import UserMemory
|
|
9
|
-
from agno.models.base import Model
|
|
10
|
-
from agno.models.message import Message
|
|
11
|
-
from agno.tools.function import Function
|
|
12
|
-
from agno.utils.log import log_debug, log_error, log_warning
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
@dataclass
|
|
16
|
-
class MemoryManager:
|
|
17
|
-
"""Model for Memory Manager"""
|
|
18
|
-
|
|
19
|
-
# Model used for memory management
|
|
20
|
-
model: Optional[Model] = None
|
|
21
|
-
|
|
22
|
-
# Provide the system message for the manager as a string. If not provided, a default prompt will be used.
|
|
23
|
-
system_message: Optional[str] = None
|
|
24
|
-
|
|
25
|
-
# Provide the memory capture instructions for the manager as a string. If not provided, a default prompt will be used.
|
|
26
|
-
memory_capture_instructions: Optional[str] = None
|
|
27
|
-
|
|
28
|
-
# Additional instructions for the manager
|
|
29
|
-
additional_instructions: Optional[str] = None
|
|
30
|
-
|
|
31
|
-
# Whether memories were created in the last run
|
|
32
|
-
memories_updated: bool = False
|
|
33
|
-
|
|
34
|
-
def __init__(
|
|
35
|
-
self,
|
|
36
|
-
model: Optional[Model] = None,
|
|
37
|
-
system_message: Optional[str] = None,
|
|
38
|
-
memory_capture_instructions: Optional[str] = None,
|
|
39
|
-
additional_instructions: Optional[str] = None,
|
|
40
|
-
):
|
|
41
|
-
self.model = model
|
|
42
|
-
if self.model is not None and isinstance(self.model, str):
|
|
43
|
-
raise ValueError("Model must be a Model object, not a string")
|
|
44
|
-
self.system_message = system_message
|
|
45
|
-
self.memory_capture_instructions = memory_capture_instructions
|
|
46
|
-
self.additional_instructions = additional_instructions
|
|
47
|
-
self._tools_for_model: Optional[List[Dict[str, Any]]] = None
|
|
48
|
-
self._functions_for_model: Optional[Dict[str, Function]] = None
|
|
49
|
-
|
|
50
|
-
def determine_tools_for_model(self, tools: List[Callable]) -> None:
|
|
51
|
-
# Have to reset each time, because of different user IDs
|
|
52
|
-
self._tools_for_model = []
|
|
53
|
-
self._functions_for_model = {}
|
|
54
|
-
|
|
55
|
-
for tool in tools:
|
|
56
|
-
try:
|
|
57
|
-
function_name = tool.__name__
|
|
58
|
-
if function_name not in self._functions_for_model:
|
|
59
|
-
func = Function.from_callable(tool, strict=True) # type: ignore
|
|
60
|
-
func.strict = True
|
|
61
|
-
self._functions_for_model[func.name] = func
|
|
62
|
-
self._tools_for_model.append({"type": "function", "function": func.to_dict()})
|
|
63
|
-
log_debug(f"Added function {func.name}")
|
|
64
|
-
except Exception as e:
|
|
65
|
-
log_warning(f"Could not add function {tool}: {e}")
|
|
66
|
-
|
|
67
|
-
def get_system_message(
|
|
68
|
-
self,
|
|
69
|
-
existing_memories: Optional[List[Dict[str, Any]]] = None,
|
|
70
|
-
enable_delete_memory: bool = True,
|
|
71
|
-
enable_clear_memory: bool = True,
|
|
72
|
-
) -> Message:
|
|
73
|
-
if self.system_message is not None:
|
|
74
|
-
return Message(role="system", content=self.system_message)
|
|
75
|
-
|
|
76
|
-
memory_capture_instructions = self.memory_capture_instructions or dedent("""\
|
|
77
|
-
Memories should include details that could personalize ongoing interactions with the user, such as:
|
|
78
|
-
- Personal facts: name, age, occupation, location, interests, preferences, etc.
|
|
79
|
-
- Significant life events or experiences shared by the user
|
|
80
|
-
- Important context about the user's current situation, challenges or goals
|
|
81
|
-
- What the user likes or dislikes, their opinions, beliefs, values, etc.
|
|
82
|
-
- Any other details that provide valuable insights into the user's personality, perspective or needs\
|
|
83
|
-
""")
|
|
84
|
-
|
|
85
|
-
# -*- Return a system message for the memory manager
|
|
86
|
-
system_prompt_lines = [
|
|
87
|
-
"You are a MemoryManager that is responsible for manging key information about the user. "
|
|
88
|
-
"You will be provided with a criteria for memories to capture in the <memories_to_capture> section and a list of existing memories in the <existing_memories> section.",
|
|
89
|
-
"",
|
|
90
|
-
"## When to add or update memories",
|
|
91
|
-
"- Your first task is to decide if a memory needs to be added, updated, or deleted based on the user's message OR if no changes are needed.",
|
|
92
|
-
"- If the user's message meets the criteria in the <memories_to_capture> section and that information is not already captured in the <existing_memories> section, you should capture it as a memory.",
|
|
93
|
-
"- If the users messages does not meet the criteria in the <memories_to_capture> section, no memory updates are needed.",
|
|
94
|
-
"- If the existing memories in the <existing_memories> section capture all relevant information, no memory updates are needed.",
|
|
95
|
-
"",
|
|
96
|
-
"## How to add or update memories",
|
|
97
|
-
"- If you decide to add a new memory, create memories that captures key information, as if you were storing it for future reference.",
|
|
98
|
-
"- Memories should be a brief, third-person statements that encapsulate the most important aspect of the user's input, without adding any extraneous information.",
|
|
99
|
-
" - Example: If the user's message is 'I'm going to the gym', a memory could be `John Doe goes to the gym regularly`.",
|
|
100
|
-
" - Example: If the user's message is 'My name is John Doe', a memory could be `User's name is John Doe`.",
|
|
101
|
-
"- Don't make a single memory too long or complex, create multiple memories if needed to capture all the information.",
|
|
102
|
-
"- Don't repeat the same information in multiple memories. Rather update existing memories if needed.",
|
|
103
|
-
"- If a user asks for a memory to be updated or forgotten, remove all reference to the information that should be forgotten. Don't say 'The user used to like ...`",
|
|
104
|
-
"- When updating a memory, append the existing memory with new information rather than completely overwriting it.",
|
|
105
|
-
"- When a user's preferences change, update the relevant memories to reflect the new preferences but also capture what the user's preferences used to be and what has changed.",
|
|
106
|
-
"",
|
|
107
|
-
"## Criteria for creating memories",
|
|
108
|
-
"Use the following criteria to determine if a user's message should be captured as a memory.",
|
|
109
|
-
"",
|
|
110
|
-
"<memories_to_capture>",
|
|
111
|
-
memory_capture_instructions,
|
|
112
|
-
"</memories_to_capture>",
|
|
113
|
-
"",
|
|
114
|
-
"## Updating memories",
|
|
115
|
-
"You will also be provided with a list of existing memories in the <existing_memories> section. You can:",
|
|
116
|
-
" 1. Decide to make no changes.",
|
|
117
|
-
" 2. Decide to add a new memory, using the `add_memory` tool.",
|
|
118
|
-
" 3. Decide to update an existing memory, using the `update_memory` tool.",
|
|
119
|
-
]
|
|
120
|
-
if enable_delete_memory:
|
|
121
|
-
system_prompt_lines.append(" 4. Decide to delete an existing memory, using the `delete_memory` tool.")
|
|
122
|
-
if enable_clear_memory:
|
|
123
|
-
system_prompt_lines.append(" 5. Decide to clear all memories, using the `clear_memory` tool.")
|
|
124
|
-
system_prompt_lines += [
|
|
125
|
-
"You can call multiple tools in a single response if needed. ",
|
|
126
|
-
"Only add or update memories if it is necessary to capture key information provided by the user.",
|
|
127
|
-
]
|
|
128
|
-
|
|
129
|
-
if existing_memories and len(existing_memories) > 0:
|
|
130
|
-
system_prompt_lines.append("\n<existing_memories>")
|
|
131
|
-
for existing_memory in existing_memories:
|
|
132
|
-
system_prompt_lines.append(f"ID: {existing_memory['memory_id']}")
|
|
133
|
-
system_prompt_lines.append(f"Memory: {existing_memory['memory']}")
|
|
134
|
-
system_prompt_lines.append("")
|
|
135
|
-
system_prompt_lines.append("</existing_memories>")
|
|
136
|
-
|
|
137
|
-
if self.additional_instructions:
|
|
138
|
-
system_prompt_lines.append(self.additional_instructions)
|
|
139
|
-
|
|
140
|
-
return Message(role="system", content="\n".join(system_prompt_lines))
|
|
141
|
-
|
|
142
|
-
def create_or_update_memories(
|
|
143
|
-
self,
|
|
144
|
-
messages: List[Message],
|
|
145
|
-
existing_memories: List[Dict[str, Any]],
|
|
146
|
-
user_id: str,
|
|
147
|
-
db: MemoryDb,
|
|
148
|
-
delete_memories: bool = True,
|
|
149
|
-
clear_memories: bool = True,
|
|
150
|
-
) -> str:
|
|
151
|
-
if self.model is None:
|
|
152
|
-
log_error("No model provided for memory manager")
|
|
153
|
-
return "No model provided for memory manager"
|
|
154
|
-
|
|
155
|
-
log_debug("MemoryManager Start", center=True)
|
|
156
|
-
|
|
157
|
-
if len(messages) == 1:
|
|
158
|
-
input_string = messages[0].get_content_string()
|
|
159
|
-
else:
|
|
160
|
-
input_string = f"{', '.join([m.get_content_string() for m in messages if m.role == 'user' and m.content])}"
|
|
161
|
-
|
|
162
|
-
model_copy = deepcopy(self.model)
|
|
163
|
-
# Update the Model (set defaults, add logit etc.)
|
|
164
|
-
self.determine_tools_for_model(
|
|
165
|
-
self._get_db_tools(
|
|
166
|
-
user_id, db, input_string, enable_delete_memory=delete_memories, enable_clear_memory=clear_memories
|
|
167
|
-
),
|
|
168
|
-
)
|
|
169
|
-
|
|
170
|
-
# Prepare the List of messages to send to the Model
|
|
171
|
-
messages_for_model: List[Message] = [
|
|
172
|
-
self.get_system_message(
|
|
173
|
-
existing_memories=existing_memories,
|
|
174
|
-
enable_delete_memory=delete_memories,
|
|
175
|
-
enable_clear_memory=clear_memories,
|
|
176
|
-
),
|
|
177
|
-
*messages,
|
|
178
|
-
]
|
|
179
|
-
|
|
180
|
-
# Generate a response from the Model (includes running function calls)
|
|
181
|
-
response = model_copy.response(
|
|
182
|
-
messages=messages_for_model, tools=self._tools_for_model, functions=self._functions_for_model
|
|
183
|
-
)
|
|
184
|
-
|
|
185
|
-
if response.tool_calls is not None and len(response.tool_calls) > 0:
|
|
186
|
-
self.memories_updated = True
|
|
187
|
-
log_debug("MemoryManager End", center=True)
|
|
188
|
-
|
|
189
|
-
return response.content or "No response from model"
|
|
190
|
-
|
|
191
|
-
async def acreate_or_update_memories(
|
|
192
|
-
self,
|
|
193
|
-
messages: List[Message],
|
|
194
|
-
existing_memories: List[Dict[str, Any]],
|
|
195
|
-
user_id: str,
|
|
196
|
-
db: MemoryDb,
|
|
197
|
-
delete_memories: bool = True,
|
|
198
|
-
clear_memories: bool = True,
|
|
199
|
-
) -> str:
|
|
200
|
-
if self.model is None:
|
|
201
|
-
log_error("No model provided for memory manager")
|
|
202
|
-
return "No model provided for memory manager"
|
|
203
|
-
|
|
204
|
-
log_debug("MemoryManager Start", center=True)
|
|
205
|
-
|
|
206
|
-
if len(messages) == 1:
|
|
207
|
-
input_string = messages[0].get_content_string()
|
|
208
|
-
else:
|
|
209
|
-
input_string = f"{', '.join([m.get_content_string() for m in messages if m.role == 'user' and m.content])}"
|
|
210
|
-
|
|
211
|
-
model_copy = deepcopy(self.model)
|
|
212
|
-
# Update the Model (set defaults, add logit etc.)
|
|
213
|
-
self.determine_tools_for_model(
|
|
214
|
-
self._get_db_tools(
|
|
215
|
-
user_id, db, input_string, enable_delete_memory=delete_memories, enable_clear_memory=clear_memories
|
|
216
|
-
),
|
|
217
|
-
)
|
|
218
|
-
|
|
219
|
-
# Prepare the List of messages to send to the Model
|
|
220
|
-
messages_for_model: List[Message] = [
|
|
221
|
-
self.get_system_message(
|
|
222
|
-
existing_memories=existing_memories,
|
|
223
|
-
enable_delete_memory=delete_memories,
|
|
224
|
-
enable_clear_memory=clear_memories,
|
|
225
|
-
),
|
|
226
|
-
*messages,
|
|
227
|
-
]
|
|
228
|
-
|
|
229
|
-
# Generate a response from the Model (includes running function calls)
|
|
230
|
-
response = await model_copy.aresponse(
|
|
231
|
-
messages=messages_for_model, tools=self._tools_for_model, functions=self._functions_for_model
|
|
232
|
-
)
|
|
233
|
-
|
|
234
|
-
if response.tool_calls is not None and len(response.tool_calls) > 0:
|
|
235
|
-
self.memories_updated = True
|
|
236
|
-
log_debug("MemoryManager End", center=True)
|
|
237
|
-
|
|
238
|
-
return response.content or "No response from model"
|
|
239
|
-
|
|
240
|
-
def run_memory_task(
|
|
241
|
-
self,
|
|
242
|
-
task: str,
|
|
243
|
-
existing_memories: List[Dict[str, Any]],
|
|
244
|
-
user_id: str,
|
|
245
|
-
db: MemoryDb,
|
|
246
|
-
delete_memories: bool = True,
|
|
247
|
-
clear_memories: bool = True,
|
|
248
|
-
) -> str:
|
|
249
|
-
if self.model is None:
|
|
250
|
-
log_error("No model provided for memory manager")
|
|
251
|
-
return "No model provided for memory manager"
|
|
252
|
-
|
|
253
|
-
log_debug("MemoryManager Start", center=True)
|
|
254
|
-
|
|
255
|
-
model_copy = deepcopy(self.model)
|
|
256
|
-
# Update the Model (set defaults, add logit etc.)
|
|
257
|
-
self.determine_tools_for_model(
|
|
258
|
-
self._get_db_tools(
|
|
259
|
-
user_id, db, task, enable_delete_memory=delete_memories, enable_clear_memory=clear_memories
|
|
260
|
-
),
|
|
261
|
-
)
|
|
262
|
-
|
|
263
|
-
# Prepare the List of messages to send to the Model
|
|
264
|
-
messages_for_model: List[Message] = [
|
|
265
|
-
self.get_system_message(
|
|
266
|
-
existing_memories, enable_delete_memory=delete_memories, enable_clear_memory=clear_memories
|
|
267
|
-
),
|
|
268
|
-
# For models that require a non-system message
|
|
269
|
-
Message(role="user", content=task),
|
|
270
|
-
]
|
|
271
|
-
|
|
272
|
-
# Generate a response from the Model (includes running function calls)
|
|
273
|
-
response = model_copy.response(
|
|
274
|
-
messages=messages_for_model, tools=self._tools_for_model, functions=self._functions_for_model
|
|
275
|
-
)
|
|
276
|
-
|
|
277
|
-
if response.tool_calls is not None and len(response.tool_calls) > 0:
|
|
278
|
-
self.memories_updated = True
|
|
279
|
-
log_debug("MemoryManager End", center=True)
|
|
280
|
-
|
|
281
|
-
return response.content or "No response from model"
|
|
282
|
-
|
|
283
|
-
async def arun_memory_task(
|
|
284
|
-
self,
|
|
285
|
-
task: str,
|
|
286
|
-
existing_memories: List[Dict[str, Any]],
|
|
287
|
-
user_id: str,
|
|
288
|
-
db: MemoryDb,
|
|
289
|
-
delete_memories: bool = True,
|
|
290
|
-
clear_memories: bool = True,
|
|
291
|
-
) -> str:
|
|
292
|
-
if self.model is None:
|
|
293
|
-
log_error("No model provided for memory manager")
|
|
294
|
-
return "No model provided for memory manager"
|
|
295
|
-
|
|
296
|
-
log_debug("MemoryManager Start", center=True)
|
|
297
|
-
|
|
298
|
-
model_copy = deepcopy(self.model)
|
|
299
|
-
# Update the Model (set defaults, add logit etc.)
|
|
300
|
-
self.determine_tools_for_model(
|
|
301
|
-
self._get_db_tools(
|
|
302
|
-
user_id, db, task, enable_delete_memory=delete_memories, enable_clear_memory=clear_memories
|
|
303
|
-
),
|
|
304
|
-
)
|
|
305
|
-
|
|
306
|
-
# Prepare the List of messages to send to the Model
|
|
307
|
-
messages_for_model: List[Message] = [
|
|
308
|
-
self.get_system_message(
|
|
309
|
-
existing_memories, enable_delete_memory=delete_memories, enable_clear_memory=clear_memories
|
|
310
|
-
),
|
|
311
|
-
# For models that require a non-system message
|
|
312
|
-
Message(role="user", content=task),
|
|
313
|
-
]
|
|
314
|
-
|
|
315
|
-
# Generate a response from the Model (includes running function calls)
|
|
316
|
-
response = await model_copy.aresponse(
|
|
317
|
-
messages=messages_for_model, tools=self._tools_for_model, functions=self._functions_for_model
|
|
318
|
-
)
|
|
319
|
-
|
|
320
|
-
if response.tool_calls is not None and len(response.tool_calls) > 0:
|
|
321
|
-
self.memories_updated = True
|
|
322
|
-
log_debug("MemoryManager End", center=True)
|
|
323
|
-
|
|
324
|
-
return response.content or "No response from model"
|
|
325
|
-
|
|
326
|
-
# -*- DB Functions
|
|
327
|
-
def _get_db_tools(
|
|
328
|
-
self,
|
|
329
|
-
user_id: str,
|
|
330
|
-
db: MemoryDb,
|
|
331
|
-
input_string: str,
|
|
332
|
-
enable_add_memory: bool = True,
|
|
333
|
-
enable_update_memory: bool = True,
|
|
334
|
-
enable_delete_memory: bool = True,
|
|
335
|
-
enable_clear_memory: bool = True,
|
|
336
|
-
) -> List[Callable]:
|
|
337
|
-
from datetime import datetime
|
|
338
|
-
|
|
339
|
-
def add_memory(memory: str, topics: Optional[List[str]] = None) -> str:
|
|
340
|
-
"""Use this function to add a memory to the database.
|
|
341
|
-
Args:
|
|
342
|
-
memory (str): The memory to be added.
|
|
343
|
-
topics (Optional[List[str]]): The topics of the memory (e.g. ["name", "hobbies", "location"]).
|
|
344
|
-
Returns:
|
|
345
|
-
str: A message indicating if the memory was added successfully or not.
|
|
346
|
-
"""
|
|
347
|
-
from uuid import uuid4
|
|
348
|
-
|
|
349
|
-
try:
|
|
350
|
-
last_updated = datetime.now()
|
|
351
|
-
memory_id = str(uuid4())
|
|
352
|
-
db.upsert_memory(
|
|
353
|
-
MemoryRow(
|
|
354
|
-
id=memory_id,
|
|
355
|
-
user_id=user_id,
|
|
356
|
-
memory=UserMemory(
|
|
357
|
-
memory_id=memory_id,
|
|
358
|
-
memory=memory,
|
|
359
|
-
topics=topics,
|
|
360
|
-
last_updated=last_updated,
|
|
361
|
-
input=input_string,
|
|
362
|
-
).to_dict(),
|
|
363
|
-
last_updated=last_updated,
|
|
364
|
-
)
|
|
365
|
-
)
|
|
366
|
-
log_debug(f"Memory added: {memory_id}")
|
|
367
|
-
return "Memory added successfully"
|
|
368
|
-
except Exception as e:
|
|
369
|
-
log_warning(f"Error storing memory in db: {e}")
|
|
370
|
-
return f"Error adding memory: {e}"
|
|
371
|
-
|
|
372
|
-
def update_memory(memory_id: str, memory: str, topics: Optional[List[str]] = None) -> str:
|
|
373
|
-
"""Use this function to update an existing memory in the database.
|
|
374
|
-
Args:
|
|
375
|
-
memory_id (str): The id of the memory to be updated.
|
|
376
|
-
memory (str): The updated memory.
|
|
377
|
-
topics (Optional[List[str]]): The topics of the memory (e.g. ["name", "hobbies", "location"]).
|
|
378
|
-
Returns:
|
|
379
|
-
str: A message indicating if the memory was updated successfully or not.
|
|
380
|
-
"""
|
|
381
|
-
try:
|
|
382
|
-
last_updated = datetime.now()
|
|
383
|
-
db.upsert_memory(
|
|
384
|
-
MemoryRow(
|
|
385
|
-
id=memory_id,
|
|
386
|
-
user_id=user_id,
|
|
387
|
-
memory=UserMemory(
|
|
388
|
-
memory_id=memory_id,
|
|
389
|
-
memory=memory,
|
|
390
|
-
topics=topics,
|
|
391
|
-
last_updated=last_updated,
|
|
392
|
-
input=input_string,
|
|
393
|
-
).to_dict(),
|
|
394
|
-
last_updated=last_updated,
|
|
395
|
-
)
|
|
396
|
-
)
|
|
397
|
-
log_debug("Memory updated")
|
|
398
|
-
return "Memory updated successfully"
|
|
399
|
-
except Exception as e:
|
|
400
|
-
log_warning("Error storing memory in db: {e}")
|
|
401
|
-
return f"Error adding memory: {e}"
|
|
402
|
-
|
|
403
|
-
def delete_memory(memory_id: str) -> str:
|
|
404
|
-
"""Use this function to delete a single memory from the database.
|
|
405
|
-
Args:
|
|
406
|
-
memory_id (str): The id of the memory to be deleted.
|
|
407
|
-
Returns:
|
|
408
|
-
str: A message indicating if the memory was deleted successfully or not.
|
|
409
|
-
"""
|
|
410
|
-
try:
|
|
411
|
-
db.delete_memory(memory_id=memory_id)
|
|
412
|
-
log_debug("Memory deleted")
|
|
413
|
-
return "Memory deleted successfully"
|
|
414
|
-
except Exception as e:
|
|
415
|
-
log_warning(f"Error deleting memory in db: {e}")
|
|
416
|
-
return f"Error deleting memory: {e}"
|
|
417
|
-
|
|
418
|
-
def clear_memory() -> str:
|
|
419
|
-
"""Use this function to remove all (or clear all) memories from the database.
|
|
420
|
-
|
|
421
|
-
Returns:
|
|
422
|
-
str: A message indicating if the memory was cleared successfully or not.
|
|
423
|
-
"""
|
|
424
|
-
db.clear()
|
|
425
|
-
log_debug("Memory cleared")
|
|
426
|
-
return "Memory cleared successfully"
|
|
427
|
-
|
|
428
|
-
functions: List[Callable] = []
|
|
429
|
-
if enable_add_memory:
|
|
430
|
-
functions.append(add_memory)
|
|
431
|
-
if enable_update_memory:
|
|
432
|
-
functions.append(update_memory)
|
|
433
|
-
if enable_delete_memory:
|
|
434
|
-
functions.append(delete_memory)
|
|
435
|
-
if enable_clear_memory:
|
|
436
|
-
functions.append(clear_memory)
|
|
437
|
-
return functions
|