[project] name = "scientific-content-agent" version = "0.1.0" description = "AI-powered multi-agent system for generating research-backed content" readme = "README.md" requires-python = ">=3.11" license = { text = "MIT" } authors = [ { name = "Christophe Bourgoin", email = "chris@example.com" } ] keywords = [ "ai", "agents", "content-generation", "multi-agent", "google-adk", "gradio", "research", ] classifiers = [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Topic :: Scientific/Engineering :: Artificial Intelligence", ] dependencies = [ "google-adk>=0.1.0", "google-genai>=0.1.0", "google-cloud-aiplatform>=1.38.0", "gradio>=6.0.1", "python-dotenv>=1.0.0", "requests>=2.31.0", "duckduckgo-search>=6.0.0", "pyyaml>=6.0", "pandas>=2.0.0", "aiosqlite>=0.19.0", ] [project.optional-dependencies] dev = [ "pytest>=8.0.0", "pytest-asyncio>=0.23.0", "pytest-cov>=4.1.0", "ruff>=0.1.0", "mypy>=1.8.0", "types-requests>=2.31.0", "types-PyYAML>=6.0.0", ] [project.urls] Homepage = "https://github.com/ChrisBg/scientific-content-agent-interface" Repository = "https://github.com/ChrisBg/scientific-content-agent-interface" "Bug Tracker" = "https://github.com/ChrisBg/scientific-content-agent-interface/issues" "Hugging Face Space" = "https://huggingface.co/spaces/Chris30/scientific-content-agent" [project.scripts] scientific-content-agent = "main:main" [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.hatch.build.targets.wheel] packages = ["src"] # Ruff configuration [tool.ruff] line-length = 100 target-version = "py311" exclude = [ ".git", ".venv", "__pycache__", "build", "dist", "output", "logs", ".pytest_cache", ] [tool.ruff.lint] select = [ "E", # pycodestyle errors "W", # pycodestyle warnings "F", # pyflakes "I", # isort "B", # flake8-bugbear "C4", # flake8-comprehensions "UP", # pyupgrade "ARG", # flake8-unused-arguments "SIM", # flake8-simplify ] ignore = [ "E501", # line too long (handled by formatter) "B008", # do not perform function calls in argument defaults "B905", # zip without strict parameter ] [tool.ruff.lint.per-file-ignores] "__init__.py" = ["F401"] # unused imports "tests/**/*.py" = ["ARG"] # unused arguments in tests [tool.ruff.format] quote-style = "double" indent-style = "space" line-ending = "auto" # Mypy configuration [tool.mypy] python_version = "3.11" warn_return_any = true warn_unused_configs = true disallow_untyped_defs = false disallow_incomplete_defs = false check_untyped_defs = true disallow_untyped_decorators = false no_implicit_optional = true warn_redundant_casts = true warn_unused_ignores = true warn_no_return = true strict_equality = true ignore_missing_imports = true [[tool.mypy.overrides]] module = [ "google.adk.*", "google.genai.*", "duckduckgo_search.*", ] ignore_missing_imports = true # Pytest configuration [tool.pytest.ini_options] minversion = "8.0" testpaths = ["tests"] python_files = ["test_*.py"] python_classes = ["Test*"] python_functions = ["test_*"] addopts = [ "-v", "--strict-markers", "--tb=short", "--cov=src", "--cov-report=term-missing", "--cov-report=html", "--cov-report=xml", ] asyncio_mode = "auto" markers = [ "slow: marks tests as slow (deselect with '-m \"not slow\"')", "integration: marks tests as integration tests", "unit: marks tests as unit tests", ] # Coverage configuration [tool.coverage.run] source = ["src"] omit = [ "*/tests/*", "*/__pycache__/*", "*/site-packages/*", ] [tool.coverage.report] precision = 2 show_missing = true skip_covered = false exclude_lines = [ "pragma: no cover", "def __repr__", "raise AssertionError", "raise NotImplementedError", "if __name__ == .__main__.:", "if TYPE_CHECKING:", "class .*\\bProtocol\\):", "@(abc\\.)?abstractmethod", ]