mirror of
https://github.com/FoundationAgents/MetaGPT.git
synced 2026-05-24 14:15:17 +02:00
Merge branch 'feature/rfc258_editor' into 'mgx_ops'
feat: +Editor Index Repo search api See merge request pub/MetaGPT!366
This commit is contained in:
commit
fdf2a0edf6
5 changed files with 395 additions and 114 deletions
|
|
@ -1,7 +1,19 @@
|
|||
import os
|
||||
import shutil
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
|
||||
from metagpt.const import TEST_DATA_PATH
|
||||
from metagpt.tools.libs.editor import Editor
|
||||
from metagpt.tools.libs.index_repo import (
|
||||
CHATS_INDEX_ROOT,
|
||||
CHATS_ROOT,
|
||||
UPLOAD_ROOT,
|
||||
UPLOADS_INDEX_ROOT,
|
||||
IndexRepo,
|
||||
)
|
||||
from metagpt.utils.common import list_files
|
||||
|
||||
TEST_FILE_CONTENT = """
|
||||
# this is line one
|
||||
|
|
@ -645,5 +657,54 @@ def test_append_to_single_empty_line_file():
|
|||
assert n_added_lines == 1
|
||||
|
||||
|
||||
async def mock_index_repo():
|
||||
chat_id = "1"
|
||||
chat_path = Path(CHATS_ROOT) / chat_id
|
||||
chat_path.mkdir(parents=True, exist_ok=True)
|
||||
src_path = TEST_DATA_PATH / "requirements"
|
||||
command = f"cp -rf {str(src_path)} {str(chat_path)}"
|
||||
os.system(command)
|
||||
filenames = list_files(chat_path)
|
||||
chat_files = [i for i in filenames if Path(i).suffix in {".md", ".txt", ".json", ".pdf"}]
|
||||
chat_repo = IndexRepo(
|
||||
persist_path=str(Path(CHATS_INDEX_ROOT) / chat_id), root_path=str(chat_path), min_token_count=0
|
||||
)
|
||||
await chat_repo.add(chat_files)
|
||||
assert chat_files
|
||||
|
||||
Path(UPLOAD_ROOT).mkdir(parents=True, exist_ok=True)
|
||||
command = f"cp -rf {str(src_path)} {str(UPLOAD_ROOT)}"
|
||||
os.system(command)
|
||||
filenames = list_files(UPLOAD_ROOT)
|
||||
uploads_files = [i for i in filenames if Path(i).suffix in {".md", ".txt", ".json", ".pdf"}]
|
||||
uploads_repo = IndexRepo(persist_path=UPLOADS_INDEX_ROOT, root_path=UPLOAD_ROOT, min_token_count=0)
|
||||
await uploads_repo.add(uploads_files)
|
||||
assert uploads_files
|
||||
|
||||
filenames = list_files(src_path)
|
||||
other_files = [i for i in filenames if Path(i).suffix in {".md", ".txt", ".json", ".pdf"}]
|
||||
assert other_files
|
||||
|
||||
return chat_path, UPLOAD_ROOT, src_path
|
||||
|
||||
|
||||
@pytest.mark.skip
|
||||
@pytest.mark.asyncio
|
||||
async def test_index_repo():
|
||||
# mock data
|
||||
chat_path, UPLOAD_ROOT, src_path = await mock_index_repo()
|
||||
|
||||
editor = Editor()
|
||||
rsp = await editor.search_index_repo(query="业务线", file_or_path=chat_path)
|
||||
assert rsp
|
||||
rsp = await editor.search_index_repo(query="业务线", file_or_path=UPLOAD_ROOT)
|
||||
assert rsp
|
||||
rsp = await editor.search_index_repo(query="业务线", file_or_path=src_path)
|
||||
assert rsp
|
||||
|
||||
shutil.rmtree(CHATS_ROOT)
|
||||
shutil.rmtree(UPLOAD_ROOT)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
pytest.main([__file__, "-s"])
|
||||
|
|
|
|||
|
|
@ -1,11 +1,17 @@
|
|||
import shutil
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
|
||||
from metagpt.const import DEFAULT_WORKSPACE_ROOT, TEST_DATA_PATH
|
||||
from metagpt.tools.libs.index_repo import IndexRepo
|
||||
from metagpt.tools.libs.index_repo import (
|
||||
CHATS_INDEX_ROOT,
|
||||
UPLOADS_INDEX_ROOT,
|
||||
IndexRepo,
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.skip
|
||||
@pytest.mark.asyncio
|
||||
@pytest.mark.parametrize(("path", "query"), [(TEST_DATA_PATH / "requirements", "业务线")])
|
||||
async def test_index_repo(path, query):
|
||||
|
|
@ -28,5 +34,22 @@ async def test_index_repo(path, query):
|
|||
shutil.rmtree(index_path)
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
("paths", "path_type", "root"),
|
||||
[
|
||||
(["/data/uploads"], UPLOADS_INDEX_ROOT, "/data/uploads"),
|
||||
(["/data/uploads/"], UPLOADS_INDEX_ROOT, "/data/uploads"),
|
||||
(["/data/chats/1/1.txt"], str(Path(CHATS_INDEX_ROOT) / "1"), "/data/chats/1"),
|
||||
(["/data/chats/1/2.txt"], str(Path(CHATS_INDEX_ROOT) / "1"), "/data/chats/1"),
|
||||
(["/data/chats/2/2.txt", "/data/chats/2/2.txt"], str(Path(CHATS_INDEX_ROOT) / "2"), "/data/chats/2"),
|
||||
(["/data/chats.txt"], "other", ""),
|
||||
],
|
||||
)
|
||||
def test_classify_path(paths, path_type, root):
|
||||
result, result_root = IndexRepo.classify_path(paths)
|
||||
assert path_type in set(result.keys())
|
||||
assert root == result_root.get(path_type, "")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
pytest.main([__file__, "-s"])
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue