|
|
[project] |
|
|
name = "dungeonmaster-ai" |
|
|
version = "1.0.0" |
|
|
description = "AI-powered D&D 5e Game Master with voice narration, powered by TTRPG Toolkit MCP" |
|
|
readme = "README.md" |
|
|
license = { text = "MIT" } |
|
|
requires-python = ">=3.10" |
|
|
authors = [ |
|
|
{ name = "DungeonMaster AI Team" } |
|
|
] |
|
|
keywords = [ |
|
|
"dnd", |
|
|
"dungeon-master", |
|
|
"ai", |
|
|
"mcp", |
|
|
"gradio", |
|
|
"voice", |
|
|
"ttrpg", |
|
|
"game-master", |
|
|
"elevenlabs", |
|
|
"gemini", |
|
|
"llama-index" |
|
|
] |
|
|
classifiers = [ |
|
|
"Development Status :: 4 - Beta", |
|
|
"Intended Audience :: End Users/Desktop", |
|
|
"License :: OSI Approved :: MIT License", |
|
|
"Programming Language :: Python :: 3", |
|
|
"Programming Language :: Python :: 3.10", |
|
|
"Programming Language :: Python :: 3.11", |
|
|
"Programming Language :: Python :: 3.12", |
|
|
"Topic :: Games/Entertainment :: Role-Playing", |
|
|
] |
|
|
|
|
|
dependencies = [ |
|
|
|
|
|
"gradio>=6.0.0", |
|
|
|
|
|
|
|
|
"llama-index>=0.14.0", |
|
|
"llama-index-tools-mcp", |
|
|
"llama-index-llms-gemini", |
|
|
|
|
|
|
|
|
"google-generativeai>=0.8.0", |
|
|
"openai>=1.50.0", |
|
|
"google-genai", |
|
|
|
|
|
|
|
|
"elevenlabs>=1.0.0", |
|
|
|
|
|
|
|
|
"mcp>=1.0.0", |
|
|
|
|
|
|
|
|
"pydantic>=2.9.0", |
|
|
"pydantic-settings>=2.5.0", |
|
|
"python-dotenv>=1.0.0", |
|
|
"aiohttp>=3.10.0", |
|
|
"httpx>=0.27.0", |
|
|
] |
|
|
|
|
|
[project.optional-dependencies] |
|
|
dev = [ |
|
|
"pytest>=8.0.0", |
|
|
"pytest-asyncio>=0.24.0", |
|
|
"ruff>=0.6.0", |
|
|
"mypy>=1.11.0", |
|
|
] |
|
|
|
|
|
[project.scripts] |
|
|
dungeonmaster = "ui.app:main" |
|
|
|
|
|
[project.urls] |
|
|
Homepage = "https://huggingface.co/spaces/dungeonmaster-ai/dungeonmaster-ai" |
|
|
Repository = "https://github.com/dungeonmaster-ai/dungeonmaster-ai" |
|
|
Issues = "https://github.com/dungeonmaster-ai/dungeonmaster-ai/issues" |
|
|
|
|
|
[build-system] |
|
|
requires = ["hatchling"] |
|
|
build-backend = "hatchling.build" |
|
|
|
|
|
[tool.hatch.build.targets.wheel] |
|
|
packages = ["src", "ui"] |
|
|
|
|
|
[tool.ruff] |
|
|
target-version = "py310" |
|
|
line-length = 100 |
|
|
|
|
|
[tool.ruff.lint] |
|
|
select = [ |
|
|
"E", |
|
|
"W", |
|
|
"F", |
|
|
"I", |
|
|
"B", |
|
|
"C4", |
|
|
"UP", |
|
|
"ARG", |
|
|
"SIM", |
|
|
] |
|
|
ignore = [ |
|
|
"E501", |
|
|
"B008", |
|
|
] |
|
|
|
|
|
[tool.ruff.lint.isort] |
|
|
known-first-party = ["src", "ui"] |
|
|
|
|
|
[tool.mypy] |
|
|
python_version = "3.10" |
|
|
warn_return_any = true |
|
|
warn_unused_configs = true |
|
|
disallow_untyped_defs = true |
|
|
disallow_incomplete_defs = true |
|
|
check_untyped_defs = true |
|
|
strict_optional = true |
|
|
warn_redundant_casts = true |
|
|
warn_unused_ignores = true |
|
|
|
|
|
[[tool.mypy.overrides]] |
|
|
module = [ |
|
|
"llama_index.*", |
|
|
"google.generativeai.*", |
|
|
"gradio.*", |
|
|
"elevenlabs.*", |
|
|
"mcp.*", |
|
|
] |
|
|
ignore_missing_imports = true |
|
|
|
|
|
[tool.pytest.ini_options] |
|
|
asyncio_mode = "auto" |
|
|
testpaths = ["tests"] |
|
|
python_files = ["test_*.py"] |
|
|
python_functions = ["test_*"] |
|
|
addopts = "-v --tb=short" |
|
|
|