ReMe/pyproject.toml
jinliyl a4efc0f776
refactor(reme4): restructure steps packages (#258)
* fix(bm25_index): 修正BM25索引计算中的文档长度归一化问题

修复了在计算BM25相似度时对文档长度进行不正确归一化的bug,确保所有查询都能得到准确的相关性评分。

* up

* up

* up

* up

* up

* up

* up

* up

* up

* up

* up

* up

* up

* up

* up

* up

* up

* refactor(steps): Rename and adjust indexing step logic

- Rename `scan_changes.py` and `reindex.py` to `clear_and_scan.py`
- Update implementation details of `ScanChangesStep` and `ClearAndScanStep`
- Modify the scheduling mechanism in `WatchChangesStep`
- Adjust step registration and parameter configuration in config files
- Update related tests to align with the new interface changes

* up

* feat(daily): replace daily CRUD operations with slug provisioning approach

* refactor(tests): migrate CRUD step tests from HTTP server to direct LocalFileStore

* up

* up

* up

* up

---------

Co-authored-by: huangsen <huangsen.huang@alibaba-inc.com>
2026-05-28 14:30:30 +08:00

159 lines
3.8 KiB
TOML

[build-system]
requires = ["setuptools", "wheel"]
build-backend = "setuptools.build_meta"
[project]
name = "reme_ai"
dynamic = ["version"]
description = "Remember Me, Refine Me."
authors = [
{ name = "jinli.yl", email = "jinli.yl@alibaba-inc.com" },
{ name = "dengjiaji.djj", email = "dengjiaji.djj@alibaba-inc.com" },
{ name = "caozouying.czy", email = "caozouying.czy@alibaba-inc.com" },
{ name = "weikangzhou.zwk", email = "weikangzhou.zwk@alibaba-inc.com" },
]
license = { file = "LICENSE" }
readme = "README.md"
requires-python = ">=3.10"
classifiers = [
"Development Status :: 4 - Beta",
"Intended Audience :: Developers",
"Intended Audience :: Science/Research",
"License :: OSI Approved :: Apache Software License",
"Operating System :: OS Independent",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.10",
"Topic :: Scientific/Engineering :: Artificial Intelligence",
"Topic :: Software Development :: Libraries :: Python Modules",
"Topic :: Software Development :: Libraries :: Application Frameworks",
"Typing :: Typed",
]
keywords = ["llm", "memory", "experience", "memoryscope", "ai", "mcp", "http", "reme", "personal"]
dependencies = [
"aiofiles>=24.1.0",
"asyncpg>=0.31.0",
"chromadb>=1.3.5",
# pyseekdb 1.2+ requires Python >=3.11 (no wheels on 3.10)
"pyseekdb>=1.2.0; python_version >= '3.11'",
"dashscope>=1.25.1",
"elasticsearch>=9.2.0",
"fastapi>=0.121.3",
"fastmcp>=2.14.1",
"httpx>=0.28.1",
"jieba>=0.42.1",
"rjieba>=0.1.11",
"loguru>=0.7.3",
"mcp>=1.25.0",
"networkx>=3.4",
"numpy>=2.2.6",
"openai>=2.8.1",
"pandas>=2.3.3",
"prompt_toolkit>=3.0.52",
"pydantic>=2.12.4",
"pyobvector>=0.1.20",
"pyyaml>=6.0.3",
"qdrant-client>=1.16.0",
"rich>=14.2.0",
"sqlite-vec>=0.1.6",
# pyobvector imports Expression from sqlglot; removed from sqlglot 30+ top-level API
"sqlglot>=25,<30",
"tavily-python>=0.7.13",
"tiktoken>=0.12.0",
"tqdm>=4.67.1",
"transformers>=4.57.3",
"uvicorn>=0.40.0",
"watchfiles>=1.1.1",
"pyyaml>=6.0.3",
"mistletoe",
"neo4j",
]
[project.optional-dependencies]
ray = [
"ray",
]
faiss = [
"faiss-cpu>=1.7.4",
]
dev = [
"jupyter-book",
"ghp-import",
"myst-nb",
"sphinxcontrib-bibtex",
"furo",
"sphinxcontrib-mermaid",
"pre-commit",
"pytest>=8.0",
"pytest-asyncio>=0.23",
]
full = [
"reme_ai[dev,ray,light]",
]
litellm = [
"litellm==1.80.0",
]
light = [
"agentscope==1.0.19",
"flowllm[reme]>=0.2.0.10",
]
core = [
"agentscope==1.0.19",
]
[tool.setuptools.packages.find]
where = ["."]
include = ["reme_ai*", "reme*", "reme4*"]
exclude = ["test*", "cookbook*", "doc*", "library*", "dist*"]
[tool.setuptools.package-data]
reme_ai = [
"**/*.yaml",
"**/*.py",
"**/*.json",
]
reme = [
"**/*.yaml",
"**/*.py",
"**/*.json",
]
reme4 = [
"**/*.yaml",
"**/*.py",
"**/*.json",
]
[tool.setuptools.dynamic]
version = { attr = "reme.__version__" }
[project.urls]
Homepage = "https://github.com/agentscope-ai/ReMe"
Documentation = "https://reme.agentscope.io/"
Repository = "https://github.com/agentscope-ai/ReMe"
[project.scripts]
reme = "reme_ai.main:main"
reme2 = "reme.reme:main"
remecli = "reme.reme_cli:main"
reme4 = "reme4.reme:main"
[tool.pytest.ini_options]
asyncio_default_fixture_loop_scope = "function"
# Script-style tests that need to be run with `python test_*.py`
testpaths = ["tests"]
python_files = ["test_*.py"]
python_functions = ["test_*"]
# Exclude script-style tests that require manual execution
addopts = "--ignore=tests/test_embedding.py --ignore=tests/test_embedding_cache.py --ignore=tests/test_embedding_sync.py --ignore=tests/test_file_store.py"
# python -m build && twine upload dist/*