Files
fulloch/pyproject.toml
T

166 lines
3.7 KiB
TOML

[build-system]
requires = ["setuptools>=61.0", "wheel"]
build-backend = "setuptools.build_meta"
[project]
name = "fulloch"
version = "0.1.0"
description = "A fully local, privacy-focused AI voice home assistant"
readme = "readme.md"
license = {text = "MIT"}
requires-python = ">=3.10"
authors = [
{name = "Fulloch Contributors"}
]
keywords = [
"voice-assistant",
"home-automation",
"speech-recognition",
"text-to-speech",
"local-ai",
"privacy",
]
classifiers = [
"Development Status :: 4 - Beta",
"Environment :: Console",
"Intended Audience :: Developers",
"Intended Audience :: End Users/Desktop",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Topic :: Home Automation",
"Topic :: Multimedia :: Sound/Audio :: Speech",
"Topic :: Scientific/Engineering :: Artificial Intelligence",
]
# Core dependencies required for basic operation
# Note: qwen-tts and flash-attn require special install flags, see requirements.txt
dependencies = [
"numpy>=1.24.0",
"setuptools>=80.0.0",
"pyyaml>=6.0",
"python-dotenv>=1.0.0",
# Audio
"sounddevice>=0.5.0",
"soundfile>=0.13.0",
"torchaudio>=2.0.0",
# AI/ML Core
"torch>=2.0.0",
"transformers>=4.40.0",
"kokoro>=0.9.0",
"accelerate>=1.0.0",
"llama-cpp-python>=0.3.0",
"qwen-asr>=0.0.6",
]
[project.optional-dependencies]
# Smart home integrations
smart-home = [
"phue>=1.1.0", # Philips Hue
"spotipy>=2.25.0", # Spotify
"pyairtouch>=3.0.0", # Airtouch HVAC
"thinqconnect>=1.0.0", # LG ThinQ
"bscpylgtv>=0.5.0", # LG WebOS TV
]
# Google services
google = [
"google-auth>=2.0.0",
"google-auth-oauthlib>=0.4.0",
"google-api-python-client>=2.0.0",
]
# Web search
search = [
"beautifulsoup4>=4.12.0",
"requests>=2.31.0",
]
# Utilities
utils = [
"xmltodict>=0.13.0", # Weather XML parsing
"word2number>=1.1", # Timer duration parsing
]
# Development tools
dev = [
"pytest>=8.0.0",
"pytest-asyncio>=0.23.0",
"pytest-cov>=4.0.0",
"ruff>=0.4.0",
"mypy>=1.10.0",
]
# All optional dependencies
all = [
"fulloch[smart-home,google,search,utils]",
]
[project.scripts]
fulloch = "app:main"
[project.urls]
Homepage = "https://github.com/yourusername/fulloch"
Documentation = "https://github.com/yourusername/fulloch#readme"
Repository = "https://github.com/yourusername/fulloch"
Issues = "https://github.com/yourusername/fulloch/issues"
[tool.setuptools.packages.find]
where = ["."]
include = ["core*", "tools*", "utils*", "audio*"]
[tool.setuptools.package-data]
"*" = ["*.txt", "*.yml", "*.yaml"]
# Pytest configuration
[tool.pytest.ini_options]
testpaths = ["tests"]
asyncio_mode = "auto"
addopts = [
"-v",
"--tb=short",
]
filterwarnings = [
"ignore::DeprecationWarning",
]
# Ruff linter configuration
[tool.ruff]
line-length = 100
target-version = "py310"
[tool.ruff.lint]
select = [
"E", # pycodestyle errors
"W", # pycodestyle warnings
"F", # Pyflakes
"I", # isort
"B", # flake8-bugbear
"C4", # flake8-comprehensions
]
ignore = [
"E501", # line too long (handled by formatter)
]
# MyPy configuration
[tool.mypy]
python_version = "3.10"
warn_return_any = true
warn_unused_ignores = true
ignore_missing_imports = true
# Coverage configuration
[tool.coverage.run]
source = ["core", "tools", "utils"]
omit = ["tests/*"]
[tool.coverage.report]
exclude_lines = [
"pragma: no cover",
"if __name__ == .__main__.:",
"raise NotImplementedError",
]