forked from VectifyAI/OpenKB
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpyproject.toml
More file actions
159 lines (142 loc) · 5.56 KB
/
Copy pathpyproject.toml
File metadata and controls
159 lines (142 loc) · 5.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
[build-system]
requires = ["hatchling", "hatch-vcs"]
build-backend = "hatchling.build"
[project]
name = "openkb"
dynamic = ["version"]
description = "OpenKB: Open LLM Knowledge Base, powered by PageIndex"
readme = "README.md"
requires-python = ">=3.10"
license = {text = "Apache-2.0"}
authors = [
{name = "Kylin", email = "quanqi@pageindex.ai"},
{name = "Ray", email = "ray@vectify.ai"},
]
classifiers = [
"Development Status :: 3 - Alpha",
"Intended Audience :: Developers",
"License :: OSI Approved :: Apache Software License",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Topic :: Scientific/Engineering :: Artificial Intelligence",
]
keywords = ["ai", "rag", "retrieval", "knowledge-base", "llm", "pageindex", "agents", "document"]
# All dependencies are pinned exactly (supply-chain caution — e.g. the
# litellm package-poisoning incident). Bump deliberately after vetting
# each release.
# litellm 1.87.2 fixes the chatgpt/* (ChatGPT subscription) provider
# returning empty Responses output (BerriAI/litellm#25429) and
# auto-injects GitHub Copilot IDE-auth headers.
dependencies = [
"pageindex==0.3.0.dev1",
"markitdown[docx,pptx,xlsx,xls]==0.1.5",
"trafilatura==2.0.0",
"click==8.4.0",
"watchdog==6.0.0",
"litellm==1.87.2",
"openai-agents==0.17.3",
"pyyaml==6.0.3",
"python-dotenv==1.2.2",
"json-repair==0.59.10",
"prompt_toolkit==3.0.52",
"rich==15.0.0",
"portalocker==3.2.0",
]
[project.urls]
Repository = "https://github.com/VectifyAI/OpenKB"
Homepage = "https://github.com/VectifyAI/OpenKB"
Issues = "https://github.com/VectifyAI/OpenKB/issues"
[project.scripts]
openkb = "openkb.cli:cli"
[tool.pytest.ini_options]
testpaths = ["tests"]
[project.optional-dependencies]
dev = [
"pytest==9.0.3",
"pytest-asyncio==1.3.0",
"ruff==0.9.7",
"mypy==1.15.0",
"types-PyYAML==6.0.12.20260518",
]
[tool.hatch.version]
source = "vcs"
[tool.hatch.build.targets.wheel]
packages = ["openkb"]
# Bundle the built-in deck themes + html critic into the wheel so
# `openkb deck new` / `--critique` / chat `/deck` work right after
# `pip install` (scan_local_skills also looks under openkb/_skills/).
[tool.hatch.build.targets.wheel.force-include]
"skills/openkb-deck-neon" = "openkb/_skills/openkb-deck-neon"
"skills/openkb-deck-editorial" = "openkb/_skills/openkb-deck-editorial"
"skills/openkb-html-critic" = "openkb/_skills/openkb-html-critic"
[tool.ruff]
target-version = "py310"
line-length = 100
[tool.ruff.lint]
# Start conservative (pyflakes + pycodestyle errors + isort); ratchet up later.
select = ["E", "F", "I"]
[tool.ruff.lint.per-file-ignores]
# cli.py deliberately interleaves imports with side-effecting setup code
# (warning filters that must apply before `markitdown`/`litellm` import,
# `set_tracing_disabled()` before other agents-SDK usage, an
# `os.environ.setdefault(...)` that must run before `import litellm`).
# Reordering to satisfy E402/I001 would risk changing import-time behavior,
# so both are ignored here rather than fixed.
#
# E501 (line-too-long) is scoped to the files whose remaining violations are
# long string literals (docstrings, CLI help text, prompt templates) that
# reflowing would either fail to shorten or would alter user-facing text.
# Everywhere else the 100-column limit is enforced. Shrink this list by
# rewrapping the literals (or adding targeted `# noqa: E501`) over time.
"openkb/cli.py" = ["E402", "I001", "E501"]
"openkb/agent/chat.py" = ["E501"]
"openkb/agent/compiler.py" = ["E501"]
"openkb/lint.py" = ["E501"]
"openkb/schema.py" = ["E501"]
# Test fixtures asserting exact file contents (frontmatter/index literals);
# rewrapping the strings would change the data under test.
"tests/test_cli.py" = ["E501"]
"tests/test_compiler.py" = ["E501"]
"tests/test_remove.py" = ["E501"]
[tool.mypy]
python_version = "3.10"
files = ["openkb"]
# Lenient to start (codebase not previously type-checked); ratchet up over time.
ignore_missing_imports = true
# numpy's bundled stubs (reached transitively via litellm/openai-agents ->
# pydantic, not imported by openkb directly) use `type X = ...` alias
# statements requiring Python 3.12+ parser support — fatal to the whole run
# (a [syntax] error, not a suppressible diagnostic) when they get parsed. A
# per-module `follow_imports = "skip"` override was experimentally confirmed
# NOT to prevent the parse; only the global default reliably avoids reaching
# that stub, so it stays global rather than scoped narrower.
follow_imports = "skip"
# Pre-existing untyped-data debt is suppressed PER MODULE below (not
# globally), so every other module gets full checking for these error codes.
# Ratchet: fix a module's errors (mostly by giving LLM-JSON payloads proper
# TypedDict/dataclass shapes), then delete its override block.
[[tool.mypy.overrides]]
# Loosely-shaped dict/list data parsed from LLM JSON output flows through
# `Any`-typed helpers: union-attr on Any|None, unannotated accumulator lists,
# argument/return mismatches against str-typed signatures.
module = "openkb.agent.compiler"
disable_error_code = [
"arg-type",
"dict-item",
"operator",
"return-value",
"union-attr",
"var-annotated",
]
[[tool.mypy.overrides]]
module = "openkb.cli"
disable_error_code = ["return-value"]
[[tool.mypy.overrides]]
module = ["openkb.lint", "openkb.indexer"]
disable_error_code = ["arg-type"]
[[tool.mypy.overrides]]
module = "openkb.skill.workspace"
disable_error_code = ["type-var"]