[project] name = "haiku.rag" description = "Opinionated agentic RAG powered by LanceDB, Pydantic AI, and Docling" version = "0.29.0" authors = [{ name = "Yiorgis Gozadinos", email = "ggozadinos@gmail.com" }] license = { text = "MIT" } readme = { file = "README.md", content-type = "text/markdown" } requires-python = ">=3.12" keywords = [ "RAG", "lancedb", "vector-database", "ml", "mcp", "pydantic-ai", "docling", ] classifiers = [ "Development Status :: 4 - Beta", "Environment :: Console", "Intended Audience :: Developers", "Operating System :: Microsoft :: Windows :: Windows 10", "Operating System :: Microsoft :: Windows :: Windows 11", "Operating System :: MacOS", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Typing :: Typed", ] dependencies = [ "haiku.rag-slim[docling,voyageai,mxbai,cohere,zeroentropy,tui]==0.29.0", ] [project.scripts] haiku-rag = "haiku.rag.cli:cli" [project.optional-dependencies] tui = ["textual>=1.0.0"] [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.hatch.build] exclude = [ "/docs", "/examples", "/tests", "/docker", "/.github", "/haiku_rag_slim", "/evaluations", ] [tool.hatch.build.targets.wheel] only-include = ["/README.md"] [tool.uv.workspace] members = ["haiku_rag_slim", "evaluations"] [tool.uv.sources] "haiku.rag-slim" = { workspace = true } "haiku.rag-evals" = { workspace = true } [dependency-groups] dev = [ "haiku.rag-evals", "datasets>=4.5.0", "mkdocs>=1.6.1", "mkdocs-material>=9.7.1", "pre-commit>=4.5.1", "pydantic-ai-slim[anthropic]", "pydantic-ai-slim[bedrock]", "pydantic-ai-slim[google]", "pydantic-ai-slim[groq]", "ty>=0.0.14", "pytest>=9.0.2", "pytest-asyncio>=1.3.0", "pytest-cov>=7.0.0", "pytest-recording>=0.13.4", "ruff>=0.14.13", ] [tool.ruff] line-length = 88 src = ["haiku_rag_slim"] # Enable Flake's "E" and "F" codes by default and "I" for sorting imports. # Exclude a variety of commonly ignored directories. [tool.ruff.lint] select = [ "E", "F", "UP", "I", ] # Enable Flake's "E" and "F" codes by default and "I" for sorting imports ignore = ["E501"] per-file-ignores = { "__init__.py" = ["F401", "F403"] } # Allow unused variables when underscore-prefixed. dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$" [tool.ruff.lint.isort] known-first-party = ["haiku"] [tool.ruff.format] quote-style = "double" indent-style = "space" skip-magic-trailing-comma = false line-ending = "auto" [tool.ty.src] exclude = ["examples/**"] [tool.ty.environment] python-version = "3.12" python = ".venv" [tool.pytest.ini_options] asyncio_default_fixture_loop_scope = "session" asyncio_mode = "auto" testpaths = ["tests"] norecursedirs = ["examples", "docs", "evaluations", ".git", ".venv"] markers = [ "integration: marks tests as integration tests (require external services)", ] # pyproject.toml filterwarnings = ["error", "ignore::UserWarning", "ignore::DeprecationWarning"]