Files
khoj/pyproject.toml
Debanjum 181332dcb8 Improve Claude context caching to improve response cost, intelligence
Old thought messages are dropped by default by the Anthropic API. This
change ensures old thoughts are kept. This should improve cache
utilization to reduce costs. And keeping old thoughts may also improve
model intelligence.
2025-12-07 20:23:58 -08:00

185 lines
4.6 KiB
TOML

[build-system]
requires = ["hatchling", "hatch-vcs"]
build-backend = "hatchling.build"
[project]
name = "khoj"
description = "Your Second Brain"
readme = "README.md"
license = "AGPL-3.0-or-later"
requires-python = ">=3.10, <3.13"
authors = [
{ name = "Debanjum Singh Solanky, Saba Imran" },
]
keywords = [
"search",
"semantic-search",
"productivity",
"NLP",
"AI",
"org-mode",
"markdown",
"images",
"pdf",
]
classifiers = [
"Development Status :: 5 - Production/Stable",
"License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)",
"Operating System :: OS Independent",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Topic :: Internet :: WWW/HTTP :: Indexing/Search",
"Topic :: Scientific/Engineering :: Artificial Intelligence",
"Topic :: Scientific/Engineering :: Human Machine Interfaces",
"Intended Audience :: Information Technology",
]
dependencies = [
"beautifulsoup4 ~= 4.12.3",
"dateparser >= 1.1.1",
"defusedxml == 0.7.1",
"fastapi >= 0.110.0",
"python-multipart >= 0.0.7",
"jinja2 == 3.1.6",
"openai >= 2.0.0, < 3.0.0",
"tiktoken >= 0.3.2",
"tenacity >= 9.0.0",
"magika ~= 0.5.1",
"pillow ~= 10.0.0",
"pydantic[email] >= 2.0.0",
"pyyaml ~= 6.0",
"rich >= 13.3.1",
"click < 8.2.2",
"schedule == 1.1.0",
"sentence-transformers == 3.4.1",
"einops == 0.8.0",
"transformers >= 4.51.0",
"torch == 2.6.0",
"uvicorn == 0.30.6",
"aiohttp ~= 3.9.0",
"langchain-text-splitters == 0.3.11",
"langchain-community == 0.3.27",
"requests >= 2.26.0",
"anyio ~= 4.8.0",
"pymupdf == 1.24.11",
"django == 5.1.14",
"django-unfold == 0.42.0",
"authlib == 1.6.5",
"itsdangerous == 2.1.2",
"httpx == 0.28.1",
"pgvector == 0.2.4",
"psycopg2-binary == 2.9.9",
"lxml == 4.9.3",
"tzdata == 2023.3",
"rapidocr-onnxruntime == 1.4.4",
"openai-whisper >= 20231117",
"django-phonenumber-field == 7.3.0",
"phonenumbers == 8.13.27",
"markdownify ~= 0.11.6",
"markdown-it-py ~= 3.0.0",
"websockets == 13.0",
"psutil >= 5.8.0",
"huggingface-hub[hf_xet] >= 0.22.2",
"apscheduler ~= 3.10.0",
"pytz ~= 2024.1",
"cron-descriptor == 1.4.3",
"django_apscheduler == 0.7.0",
"anthropic == 0.75.0",
"docx2txt == 0.8",
"google-genai == 1.52.0",
"google-auth ~= 2.23.3",
"pyjson5 == 1.6.7",
"resend == 1.0.1",
"email-validator == 2.2.0",
"e2b-code-interpreter ~= 1.0.0",
"mcp >= 1.12.4",
]
dynamic = ["version"]
[project.urls]
Homepage = "https://khoj.dev"
Documentation = "https://docs.khoj.dev"
Code = "https://github.com/khoj-ai/khoj"
[project.scripts]
khoj = "khoj.main:run"
[project.optional-dependencies]
prod = [
"gunicorn == 22.0.0",
"stripe == 7.3.0",
"twilio == 8.11",
"boto3 >= 1.34.57",
]
local = [
"pgserver == 0.1.4",
]
dev = [
"khoj[prod,local]",
"pytest >= 7.1.2",
"pytest-xdist[psutil]",
"pytest-django == 4.5.2",
"pytest-asyncio == 0.21.1",
"freezegun >= 1.2.0",
"factory-boy >= 3.2.1",
"mypy >= 1.0.1",
"ruff >= 0.12.0",
"pre-commit >= 3.0.4",
"gitpython ~= 3.1.43",
"datasets",
"pandas",
]
[tool.hatch.version]
source = "vcs"
raw-options.local_scheme = "no-local-version" # PEP440 compliant version for PyPi
[tool.hatch.build.targets.sdist]
include = ["src/khoj"]
[tool.hatch.build.targets.wheel]
packages = ["src/khoj"]
[tool.mypy]
files = "src/khoj"
pretty = true
strict_optional = false
install_types = true
ignore_missing_imports = true
non_interactive = true
show_error_codes = true
warn_unused_ignores = false
[tool.ruff]
line-length = 120
[tool.ruff.lint]
select = ["E", "F", "I"] # Enable error, warning, and import checks
ignore = [
"E501", # Ignore line length
"F405", # Ignore name not defined (e.g., from imports)
"E402", # Ignore module level import not at top of file
]
unfixable = ["F841"] # Don't auto-remove unused variables
exclude = [ "tests/*.py" ]
[tool.ruff.lint.per-file-ignores]
"src/khoj/main.py" = [
"I001", # Ignore Import order
"I002", # Ignore Import not at top of file
"E402", # Ignore module level import not at top of file
]
[tool.ruff.format]
quote-style = "double"
indent-style = "space"
[tool.ruff.lint.isort]
known-first-party = ["khoj"]
[tool.pytest.ini_options]
addopts = "--strict-markers"
markers = [
"chatquality: Evaluate chatbot capabilities and quality",
]