[project] name = "agent-service-toolkit" version = "0.1.0" description = "Full toolkit for running an AI agent service built with LangGraph, FastAPI and Streamlit" readme = "README.md" authors = [{ name = "Joshua Carroll", email = "carroll.joshk@gmail.com" }] classifiers = [ "Development Status :: 4 - Beta", "License :: OSI Approved :: MIT License", "Framework :: FastAPI", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", ] requires-python = ">=3.11,<3.14" dependencies = [ "docx2txt ~=0.8", "duckduckgo-search>=7.3.0", "fastapi ~=0.115.5", "grpcio >=1.68.0", "httpx ~=0.28.0", "jiter ~=0.8.2", "langchain ~=1.0.5", "langchain-core ~=1.0.0", "langchain-community ~=0.4.1", "langchain-anthropic ~=1.0.0", "langchain-aws ~=1.0.0", "langchain-chroma ~=1.0.0", "langchain-google-genai ~=3.0.0", "langchain-google-vertexai>=3.0.3", "langchain-groq ~=1.0.1", "langchain-ollama ~=1.0.0", "langchain-openai ~=1.0.2", "langfuse >=2.65.0", "langgraph ~=1.0.0", "langgraph-checkpoint-mongodb ~=0.1.3", "langgraph-checkpoint-postgres ~=2.0.13", "langgraph-checkpoint-sqlite ~=2.0.1", "langgraph-supervisor ~=0.0.31", "langsmith ~=0.4.0", "numexpr ~=2.10.1", "numpy ~=2.3.4", "onnxruntime ~= 1.21.1", "pandas ~=2.2.3", "psycopg[binary,pool] ~=3.2.4", "pyarrow >=18.1.0", "pydantic ~=2.10.1", "pydantic-settings ~=2.12.0", "pypdf ~=5.3.0", "pyowm ~=3.3.0", "python-dotenv ~=1.0.1", "setuptools ~=75.6.0", "streamlit ~=1.52.0", "tiktoken >=0.8.0", "uvicorn ~=0.32.1", "langchain-mcp-adapters>=0.1.10", "ddgs>=9.9.1", ] [dependency-groups] dev = [ "langgraph-cli[inmem]", "pre-commit", "pytest", "pytest-cov", "pytest-env", "pytest-asyncio", "ruff", "mypy", ] # Group for the minimal dependencies to run just the client and Streamlit app. # These are also installed in the default dependencies. # To install run: `uv sync --frozen --only-group client` client = [ "httpx~=0.28.0", "pydantic ~=2.10.1", "python-dotenv ~=1.0.1", "streamlit~=1.52.0", ] [tool.ruff] line-length = 100 target-version = "py311" [tool.ruff.lint] extend-select = ["I", "U"] [tool.pytest.ini_options] pythonpath = ["src"] asyncio_default_fixture_loop_scope = "function" [tool.pytest_env] OPENAI_API_KEY = "sk-fake-openai-key" [tool.mypy] plugins = "pydantic.mypy" exclude = "src/streamlit_app.py" [[tool.mypy.overrides]] module = ["numexpr.*"] follow_untyped_imports = true [[tool.mypy.overrides]] module = ["langchain_mcp_adapters.*"] ignore_missing_imports = true