[project] name = "MoFox-Bot" version = "0.13.0" description = "MoFox-Bot 是一个基于大语言模型的可交互智能体" requires-python = ">=3.11,<=3.13" dependencies = [ "slowapi>=0.1.8", "aiohttp>=3.12.14", "aiohttp-cors>=0.8.1", "aiofiles>=23.1.0", "apscheduler>=3.11.0", "asyncio>=4.0.0", "beautifulsoup4>=4.13.4", "chromadb>=1.2.0", "colorama>=0.4.6", "cryptography>=46.0.3", "customtkinter>=5.2.2", "dotenv>=0.9.9", "exa-py>=1.14.20", "faiss-cpu>=1.11.0", "fastapi>=0.116.0", "google>=3.0.0", "filetype>=1.2.0", "google-genai>=1.29.0", "httpx>=0.28.1", "jieba>=0.42.1", "json-repair>=0.47.6", "json5>=0.12.1", "jsonlines>=4.0.0", "langfuse==3.7.0", "lunar-python>=1.4.4", "lxml>=6.0.0", "matplotlib>=3.10.3", "networkx>=3.4.2", "objgraph>=3.6.2", "orjson>=3.10", "numpy>=2.2.6", "openai>=2.5.0", "opencv-python>=4.11.0.86", "aioboto3>=13.3.0", "botocore>=1.35.0", "packaging>=25.0", "pandas>=2.3.1", "peewee>=3.18.2", "pillow>=12.0.0", "pip-check-reqs>=2.5.5", "psutil>=7.0.0", "pympler>=1.1", "pyarrow>=21.0.0", "pydantic>=2.12.3", "pygments>=2.19.2", "pymongo>=4.13.2", "pypinyin>=0.54.0", "PyYAML>=6.0", "python-dateutil>=2.9.0.post0", "python-dotenv>=1.1.1", "python-igraph>=0.11.9", "quick-algo>=0.1.3", "reportportal-client>=5.6.5", "requests>=2.32.4", "rich>=14.0.0", "ruff>=0.12.2", "scikit-learn>=1.7.0", "scipy>=1.15.3", "seaborn>=0.13.2", "setuptools>=80.9.0", "sqlalchemy>=2.0.42", "strawberry-graphql[fastapi]>=0.275.5", "structlog>=25.4.0", "tavily-python>=0.7.10", "toml>=0.10.2", "tomli>=2.2.1", "tomli-w>=1.2.0", "tomlkit>=0.13.3", "tqdm>=4.67.1", "urllib3>=2.5.0", "uvicorn>=0.35.0", "watchdog>=6.0.0", "websockets>=15.0.1", "aiosqlite>=0.21.0", "inkfox>=0.1.1", "rjieba>=0.1.13", "fastmcp>=2.13.0", "mofox-wire", "jinja2>=3.1.0", "psycopg2-binary", "redis>=7.1.0", "asyncpg>=0.31.0", ] [[tool.uv.index]] url = "https://pypi.tuna.tsinghua.edu.cn/simple" default = true [tool.uv.sources] amrita = { workspace = true } [tool.ruff] line-length = 120 target-version = "py310" [tool.ruff.lint] select = [ "F", # Pyflakes "W", # pycodestyle warnings "E", # pycodestyle errors "UP", # pyupgrade "ASYNC", # flake8-async "C4", # flake8-comprehensions "T10", # flake8-debugger "PYI", # flake8-pyi "PT", # flake8-pytest-style "Q", # flake8-quotes "RUF", # Ruff-specific rules "I", # isort "PERF", # pylint-performance ] ignore = [ "E402", # module-import-not-at-top-of-file "E501", # line-too-long "UP037", # quoted-annotation "RUF001", # ambiguous-unicode-character-string "RUF002", # ambiguous-unicode-character-docstring "RUF003", # ambiguous-unicode-character-comment "PERF203", # try-except-in-loop (我们需要单独处理每个项的错误) ] # 如果一个变量的名称以下划线开头,即使它未被使用,也不应该被视为错误或警告。 dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$" [tool.ruff.format] docstring-code-format = true indent-style = "space" # 使用双引号表示字符串 quote-style = "double" # 尊重魔法尾随逗号 # 例如: # items = [ # "apple", # "banana", # "cherry", # ] skip-magic-trailing-comma = false # 自动检测合适的换行符 line-ending = "auto" [dependency-groups] lint = ["loguru>=0.7.3"]