diff --git a/core_requirements.txt b/core_requirements.txt index 95e658c..0223b1d 100644 --- a/core_requirements.txt +++ b/core_requirements.txt @@ -83,13 +83,13 @@ eval-type-backport==0.2.2 # via # mistralai # pydantic-ai-slim -executing==2.1.0 +executing==2.2.0 # via # devtools # logfire fake-useragent==2.0.3 # via httpx-html -fastapi==0.115.6 +fastapi==0.115.7 # via # -r core_requirements.in # fastapi-restful @@ -122,7 +122,7 @@ h11==0.14.0 # wsproto h2==4.1.0 # via hypercorn -hpack==4.0.0 +hpack==4.1.0 # via h2 html5lib==1.1 # via -r core_requirements.in @@ -143,7 +143,7 @@ humanize==4.11.0 # via flower hypercorn==0.17.3 # via -r core_requirements.in -hyperframe==6.0.1 +hyperframe==6.1.0 # via h2 idna==3.10 # via @@ -291,6 +291,7 @@ pydantic==2.10.5 # mistralai # openai # pydantic-ai-slim + # pydantic-settings # sqlmodel # sqlmodel-crud-utilities pydantic-ai==0.0.18 @@ -305,6 +306,8 @@ pydantic-core==2.27.2 # via # pydantic # sqlmodel-crud-utilities +pydantic-settings==2.7.1 + # via -r core_requirements.in pyee==11.1.1 # via pyppeteer pygments==2.19.1 @@ -326,7 +329,9 @@ python-dateutil==2.9.0.post0 python-decouple==3.8 # via -r core_requirements.in python-dotenv==1.0.1 - # via sqlmodel-crud-utilities + # via + # pydantic-settings + # sqlmodel-crud-utilities python-multipart==0.0.20 # via pydantic-ai-examples python-slugify==8.0.4 @@ -385,7 +390,7 @@ sqlmodel==0.0.22 # sqlmodel-crud-utilities sqlmodel-crud-utilities @ git+https://github.com/fsecada01/SQLModel-CRUD-Utilities@83e964f6e7b633e339e45ddcaaa49cd8617fa105 # via -r core_requirements.in -starlette==0.41.3 +starlette==0.45.2 # via fastapi text-unidecode==1.3 # via python-slugify diff --git a/dev_requirements.txt b/dev_requirements.txt index af04c34..5478c30 100644 --- a/dev_requirements.txt +++ b/dev_requirements.txt @@ -72,11 +72,11 @@ defusedxml==0.7.1 # via nbconvert distlib==0.3.9 # via virtualenv -executing==2.1.0 +executing==2.2.0 # via # -c core_requirements.txt # stack-data -fastapi==0.115.6 +fastapi==0.115.7 # via # -c core_requirements.txt # fastapi-debug-toolbar @@ -265,7 +265,9 @@ pydantic-core==2.27.2 pydantic-extra-types==2.10.2 # via fastapi-debug-toolbar pydantic-settings==2.7.1 - # via fastapi-debug-toolbar + # via + # -c core_requirements.txt + # fastapi-debug-toolbar pygments==2.19.1 # via # -c core_requirements.txt @@ -349,7 +351,7 @@ sqlparse==0.5.3 # via fastapi-debug-toolbar stack-data==0.6.3 # via ipython -starlette==0.41.3 +starlette==0.45.2 # via # -c core_requirements.txt # fastapi diff --git a/pyproject.toml b/pyproject.toml index 6f2eb5c..d6dfd71 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -102,10 +102,10 @@ dependencies = [ "devtools==0.12.2", "distro==1.9.0", "eval-type-backport==0.2.2", - "executing==2.1.0", + "executing==2.2.0", "fake-useragent==2.0.3", "fastapi-restful==0.6.0", - "fastapi==0.115.6", + "fastapi==0.115.7", "fastcrud==0.15.5", "flower==2.0.1", "google-auth==2.37.0", @@ -115,14 +115,14 @@ dependencies = [ "groq==0.15.0", "h11==0.14.0", "h2==4.1.0", - "hpack==4.0.0", + "hpack==4.1.0", "html5lib==1.1", "httpcore==1.0.7", "httpx-html==0.11.0.dev0", "httpx==0.28.1", "humanize==4.11.0", "hypercorn==0.17.3", - "hyperframe==6.0.1", + "hyperframe==6.1.0", "idna==3.10", "importlib-metadata==8.5.0", "itsdangerous==2.2.0", @@ -171,6 +171,7 @@ dependencies = [ "pydantic-ai-slim==0.0.18", "pydantic-ai==0.0.18", "pydantic-core==2.27.2", + "pydantic-settings==2.7.1", "pydantic==2.10.5", "pyee==11.1.1", "pygments==2.19.1", @@ -197,7 +198,7 @@ dependencies = [ "sqlalchemy==2.0.37", "sqlmodel-crud-utilities", "sqlmodel==0.0.22", - "starlette==0.41.3", + "starlette==0.45.2", "text-unidecode==1.3", "tornado==6.4.2", "tqdm==4.67.1", @@ -223,7 +224,6 @@ dependencies = [ [dependency-groups] dev = [ - "aiofiles==24.1.0", "alembic==1.14.1", "annotated-types==0.7.0", "anyio==4.8.0", @@ -248,9 +248,9 @@ dev = [ "decorator==5.1.1", "defusedxml==0.7.1", "distlib==0.3.9", - "executing==2.1.0", - "fastapi-debug-toolbar==0.6.3", - "fastapi==0.115.6", + "executing==2.2.0", + "fastapi-debug-toolbar", + "fastapi==0.115.7", "fastjsonschema==2.21.1", "filelock==3.17.0", "fqdn==1.5.1", @@ -330,7 +330,7 @@ dev = [ "sqlalchemy==2.0.37", "sqlparse==0.5.3", "stack-data==0.6.3", - "starlette==0.41.3", + "starlette==0.45.2", "terminado==0.18.1", "tinycss2==1.4.0", "tornado==6.4.2", @@ -345,3 +345,4 @@ dev = [ "webencodings==0.5.1", "websocket-client==1.8.0", ] + diff --git a/src/backend/core/tools.py b/src/backend/core/tools.py index 68a8051..460d307 100644 --- a/src/backend/core/tools.py +++ b/src/backend/core/tools.py @@ -6,6 +6,7 @@ from backend.core.consts import AI_MODEL from backend.core.core import SwotAgentDeps, SwotAnalysis, swot_agent from backend.core.utils import report_tool_usage from backend.logger import logger +from backend.utils import get_val @swot_agent.tool(prepare=report_tool_usage) @@ -75,7 +76,7 @@ async def analyze_competition( async def get_reddit_insights( ctx: RunContext[SwotAgentDeps], query: str, - subreddit_name: str = "python", + subreddit_name: str | None = None, ): """ A tool to gain insights from a subreddit. Data is returned as string @@ -86,6 +87,8 @@ async def get_reddit_insights( :param subreddit_name: str :return: str """ + if not subreddit_name: + subreddit_name = get_val("REDDIT_SUBREDDIT", "python") subreddit = ctx.deps.reddit_client.subreddit(subreddit_name) search_results = subreddit.search(query) diff --git a/uv.lock b/uv.lock index 69ae30a..732d698 100644 --- a/uv.lock +++ b/uv.lock @@ -102,6 +102,7 @@ dependencies = [ { name = "pydantic-ai-examples" }, { name = "pydantic-ai-slim" }, { name = "pydantic-core" }, + { name = "pydantic-settings" }, { name = "pyee" }, { name = "pygments" }, { name = "pymysql" }, @@ -153,7 +154,6 @@ dependencies = [ [package.dev-dependencies] dev = [ - { name = "aiofiles" }, { name = "alembic" }, { name = "annotated-types" }, { name = "anyio" }, @@ -304,9 +304,9 @@ requires-dist = [ { name = "devtools", specifier = "==0.12.2" }, { name = "distro", specifier = "==1.9.0" }, { name = "eval-type-backport", specifier = "==0.2.2" }, - { name = "executing", specifier = "==2.1.0" }, + { name = "executing", specifier = "==2.2.0" }, { name = "fake-useragent", specifier = "==2.0.3" }, - { name = "fastapi", specifier = "==0.115.6" }, + { name = "fastapi", specifier = "==0.115.7" }, { name = "fastapi-restful", specifier = "==0.6.0" }, { name = "fastcrud", specifier = "==0.15.5" }, { name = "flower", specifier = "==2.0.1" }, @@ -317,14 +317,14 @@ requires-dist = [ { name = "groq", specifier = "==0.15.0" }, { name = "h11", specifier = "==0.14.0" }, { name = "h2", specifier = "==4.1.0" }, - { name = "hpack", specifier = "==4.0.0" }, + { name = "hpack", specifier = "==4.1.0" }, { name = "html5lib", specifier = "==1.1" }, { name = "httpcore", specifier = "==1.0.7" }, { name = "httpx", specifier = "==0.28.1" }, { name = "httpx-html", specifier = "==0.11.0.dev0" }, { name = "humanize", specifier = "==4.11.0" }, { name = "hypercorn", specifier = "==0.17.3" }, - { name = "hyperframe", specifier = "==6.0.1" }, + { name = "hyperframe", specifier = "==6.1.0" }, { name = "idna", specifier = "==3.10" }, { name = "importlib-metadata", specifier = "==8.5.0" }, { name = "itsdangerous", specifier = "==2.2.0" }, @@ -374,6 +374,7 @@ requires-dist = [ { name = "pydantic-ai-examples", specifier = "==0.0.18" }, { name = "pydantic-ai-slim", specifier = "==0.0.18" }, { name = "pydantic-core", specifier = "==2.27.2" }, + { name = "pydantic-settings", specifier = "==2.7.1" }, { name = "pyee", specifier = "==11.1.1" }, { name = "pygments", specifier = "==2.19.1" }, { name = "pymysql", specifier = "==1.1.1" }, @@ -399,7 +400,7 @@ requires-dist = [ { name = "sqlalchemy-utils", specifier = "==0.41.2" }, { name = "sqlmodel", specifier = "==0.0.22" }, { name = "sqlmodel-crud-utilities", git = "https://github.com/fsecada01/SQLModel-CRUD-Utilities?rev=83e964f6e7b633e339e45ddcaaa49cd8617fa105" }, - { name = "starlette", specifier = "==0.41.3" }, + { name = "starlette", specifier = "==0.45.2" }, { name = "text-unidecode", specifier = "==1.3" }, { name = "tornado", specifier = "==6.4.2" }, { name = "tqdm", specifier = "==4.67.1" }, @@ -425,7 +426,6 @@ requires-dist = [ [package.metadata.requires-dev] dev = [ - { name = "aiofiles", specifier = "==24.1.0" }, { name = "alembic", specifier = "==1.14.1" }, { name = "annotated-types", specifier = "==0.7.0" }, { name = "anyio", specifier = "==4.8.0" }, @@ -450,8 +450,8 @@ dev = [ { name = "decorator", specifier = "==5.1.1" }, { name = "defusedxml", specifier = "==0.7.1" }, { name = "distlib", specifier = "==0.3.9" }, - { name = "executing", specifier = "==2.1.0" }, - { name = "fastapi", specifier = "==0.115.6" }, + { name = "executing", specifier = "==2.2.0" }, + { name = "fastapi", specifier = "==0.115.7" }, { name = "fastapi-debug-toolbar", git = "https://github.com/fsecada01/fastapi-debug-toolbar.git?rev=2da9f1e724d1d7ca56990ba7a8e72598fa3e1cf4" }, { name = "fastjsonschema", specifier = "==2.21.1" }, { name = "filelock", specifier = "==3.17.0" }, @@ -532,7 +532,7 @@ dev = [ { name = "sqlalchemy", specifier = "==2.0.37" }, { name = "sqlparse", specifier = "==0.5.3" }, { name = "stack-data", specifier = "==0.6.3" }, - { name = "starlette", specifier = "==0.41.3" }, + { name = "starlette", specifier = "==0.45.2" }, { name = "terminado", specifier = "==0.18.1" }, { name = "tinycss2", specifier = "==1.4.0" }, { name = "tornado", specifier = "==6.4.2" }, @@ -1077,11 +1077,11 @@ wheels = [ [[package]] name = "executing" -version = "2.1.0" +version = "2.2.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8c/e3/7d45f492c2c4a0e8e0fad57d081a7c8a0286cdd86372b070cca1ec0caa1e/executing-2.1.0.tar.gz", hash = "sha256:8ea27ddd260da8150fa5a708269c4a10e76161e2496ec3e587da9e3c0fe4b9ab", size = 977485 } +sdist = { url = "https://files.pythonhosted.org/packages/91/50/a9d80c47ff289c611ff12e63f7c5d13942c65d68125160cefd768c73e6e4/executing-2.2.0.tar.gz", hash = "sha256:5d108c028108fe2551d1a7b2e8b713341e2cb4fc0aa7dcf966fa4327a5226755", size = 978693 } wheels = [ - { url = "https://files.pythonhosted.org/packages/b5/fd/afcd0496feca3276f509df3dbd5dae726fcc756f1a08d9e25abe1733f962/executing-2.1.0-py2.py3-none-any.whl", hash = "sha256:8d63781349375b5ebccc3142f4b30350c0cd9c79f921cde38be2be4637e98eaf", size = 25805 }, + { url = "https://files.pythonhosted.org/packages/7b/8f/c4d9bafc34ad7ad5d8dc16dd1347ee0e507a52c3adb6bfa8887e1c6a26ba/executing-2.2.0-py2.py3-none-any.whl", hash = "sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa", size = 26702 }, ] [[package]] @@ -1095,16 +1095,16 @@ wheels = [ [[package]] name = "fastapi" -version = "0.115.6" +version = "0.115.7" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pydantic" }, { name = "starlette" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/93/72/d83b98cd106541e8f5e5bfab8ef2974ab45a62e8a6c5b5e6940f26d2ed4b/fastapi-0.115.6.tar.gz", hash = "sha256:9ec46f7addc14ea472958a96aae5b5de65f39721a46aaf5705c480d9a8b76654", size = 301336 } +sdist = { url = "https://files.pythonhosted.org/packages/a2/f5/3f921e59f189e513adb9aef826e2841672d50a399fead4e69afdeb808ff4/fastapi-0.115.7.tar.gz", hash = "sha256:0f106da6c01d88a6786b3248fb4d7a940d071f6f488488898ad5d354b25ed015", size = 293177 } wheels = [ - { url = "https://files.pythonhosted.org/packages/52/b3/7e4df40e585df024fac2f80d1a2d579c854ac37109675db2b0cc22c0bb9e/fastapi-0.115.6-py3-none-any.whl", hash = "sha256:e9240b29e36fa8f4bb7290316988e90c381e5092e0cbe84e7818cc3713bcf305", size = 94843 }, + { url = "https://files.pythonhosted.org/packages/e6/7f/bbd4dcf0faf61bc68a01939256e2ed02d681e9334c1a3cef24d5f77aba9f/fastapi-0.115.7-py3-none-any.whl", hash = "sha256:eb6a8c8bf7f26009e8147111ff15b5177a0e19bb4a45bc3486ab14804539d21e", size = 94777 }, ] [[package]] @@ -1297,11 +1297,11 @@ wheels = [ [[package]] name = "hpack" -version = "4.0.0" +version = "4.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/3e/9b/fda93fb4d957db19b0f6b370e79d586b3e8528b20252c729c476a2c02954/hpack-4.0.0.tar.gz", hash = "sha256:fc41de0c63e687ebffde81187a948221294896f6bdc0ae2312708df339430095", size = 49117 } +sdist = { url = "https://files.pythonhosted.org/packages/2c/48/71de9ed269fdae9c8057e5a4c0aa7402e8bb16f2c6e90b3aa53327b113f8/hpack-4.1.0.tar.gz", hash = "sha256:ec5eca154f7056aa06f196a557655c5b009b382873ac8d1e66e79e87535f1dca", size = 51276 } wheels = [ - { url = "https://files.pythonhosted.org/packages/d5/34/e8b383f35b77c402d28563d2b8f83159319b509bc5f760b15d60b0abf165/hpack-4.0.0-py3-none-any.whl", hash = "sha256:84a076fad3dc9a9f8063ccb8041ef100867b1878b25ef0ee63847a5d53818a6c", size = 32611 }, + { url = "https://files.pythonhosted.org/packages/07/c6/80c95b1b2b94682a72cbdbfb85b81ae2daffa4291fbfa1b1464502ede10d/hpack-4.1.0-py3-none-any.whl", hash = "sha256:157ac792668d995c657d93111f46b4535ed114f0c9c8d672271bbec7eae1b496", size = 34357 }, ] [[package]] @@ -1390,11 +1390,11 @@ wheels = [ [[package]] name = "hyperframe" -version = "6.0.1" +version = "6.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5a/2a/4747bff0a17f7281abe73e955d60d80aae537a5d203f417fa1c2e7578ebb/hyperframe-6.0.1.tar.gz", hash = "sha256:ae510046231dc8e9ecb1a6586f63d2347bf4c8905914aa84ba585ae85f28a914", size = 25008 } +sdist = { url = "https://files.pythonhosted.org/packages/02/e7/94f8232d4a74cc99514c13a9f995811485a6903d48e5d952771ef6322e30/hyperframe-6.1.0.tar.gz", hash = "sha256:f630908a00854a7adeabd6382b43923a4c4cd4b821fcb527e6ab9e15382a3b08", size = 26566 } wheels = [ - { url = "https://files.pythonhosted.org/packages/d7/de/85a784bcc4a3779d1753a7ec2dee5de90e18c7bcf402e71b51fcf150b129/hyperframe-6.0.1-py3-none-any.whl", hash = "sha256:0ec6bafd80d8ad2195c4f03aacba3a8265e57bc4cff261e802bf39970ed02a15", size = 12389 }, + { url = "https://files.pythonhosted.org/packages/48/30/47d0bf6072f7252e6521f3447ccfa40b421b6824517f82854703d0f5a98b/hyperframe-6.1.0-py3-none-any.whl", hash = "sha256:b03380493a519fce58ea5af42e4a42317bf9bd425596f7a0835ffce80f1a42e5", size = 13007 }, ] [[package]] @@ -3192,14 +3192,14 @@ wheels = [ [[package]] name = "starlette" -version = "0.41.3" +version = "0.45.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/1a/4c/9b5764bd22eec91c4039ef4c55334e9187085da2d8a2df7bd570869aae18/starlette-0.41.3.tar.gz", hash = "sha256:0e4ab3d16522a255be6b28260b938eae2482f98ce5cc934cb08dce8dc3ba5835", size = 2574159 } +sdist = { url = "https://files.pythonhosted.org/packages/90/4f/e1c9f4ec3dae67a94c9285ed275355d5f7cf0f3a5c34538c8ae5412af550/starlette-0.45.2.tar.gz", hash = "sha256:bba1831d15ae5212b22feab2f218bab6ed3cd0fc2dc1d4442443bb1ee52260e0", size = 2574026 } wheels = [ - { url = "https://files.pythonhosted.org/packages/96/00/2b325970b3060c7cecebab6d295afe763365822b1306a12eeab198f74323/starlette-0.41.3-py3-none-any.whl", hash = "sha256:44cedb2b7c77a9de33a8b74b2b90e9f50d11fcf25d8270ea525ad71a25374ff7", size = 73225 }, + { url = "https://files.pythonhosted.org/packages/aa/ab/fe4f57c83620b39dfc9e7687ebad59129ff05170b99422105019d9a65eec/starlette-0.45.2-py3-none-any.whl", hash = "sha256:4daec3356fb0cb1e723a5235e5beaf375d2259af27532958e2d79df549dad9da", size = 71505 }, ] [[package]]