mirror of
https://github.com/agentscope-ai/ReMe.git
synced 2026-11-06 07:51:11 +00:00
60 lines
2.5 KiB
Python
60 lines
2.5 KiB
Python
"""Plugin manifest, schema and lifecycle integration."""
|
|
|
|
# pylint: disable=missing-function-docstring,protected-access
|
|
|
|
import json
|
|
import tomllib
|
|
from pathlib import Path
|
|
|
|
import pytest
|
|
|
|
from reme_procedure_memory.schema import ProcedureMemory
|
|
|
|
from reme.components.component_registry import R
|
|
from reme.enumeration import ComponentEnum
|
|
from reme.plugin import PluginManager
|
|
|
|
|
|
def test_manifest_and_package(plugin):
|
|
package = Path(__file__).parents[1]
|
|
config = tomllib.loads((package / "pyproject.toml").read_text())
|
|
assert config["project"]["entry-points"]["reme.plugins"] == {"procedure-memory": "reme_procedure_memory"}
|
|
assert len(plugin.backends) == 7
|
|
assert R.get(ComponentEnum.STEP, "procedure_auto_memory_step") is None
|
|
merged = PluginManager([plugin]).merge_config(
|
|
{"components": {"procedure_memory": {"default": {"procedure_dir": "custom"}}}},
|
|
)
|
|
assert merged["components"]["procedure_memory"]["default"]["procedure_dir"] == "custom"
|
|
|
|
|
|
def test_four_field_contract():
|
|
document = {"description": "d", "when-to-use": "w", "content": "c", "sources": ["session/trajectories/a.log"]}
|
|
assert ProcedureMemory.model_validate(document).document() == document
|
|
with pytest.raises(ValueError):
|
|
ProcedureMemory.model_validate({**document, "experience_id": "no"})
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_lifecycle_tools_and_json_answers(runtime, experience):
|
|
app, store, scope = runtime
|
|
assert store.is_started
|
|
assert not app.context.jobs["procedure_auto_memory"].enable_serve
|
|
assert not app.context.jobs["procedure_create"].enable_serve
|
|
assert app.context.jobs["procedure_search"].enable_serve
|
|
rejected = await app.context.jobs["procedure_create"](**experience)
|
|
assert not rejected.success
|
|
created = await app.context.jobs["procedure_create"](**experience, _procedure_scope=scope)
|
|
assert created.success
|
|
result = await app.context.jobs["procedure_read"](path=created.metadata["path"])
|
|
assert json.loads(result.answer) == result.metadata
|
|
assert set(result.metadata["experience"]) == {"description", "when-to-use", "content", "sources"}
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_configured_directories(app_factory, tmp_path):
|
|
_, store = await app_factory(procedure_dir="knowledge/procedures", trajectory_subdir="raw")
|
|
source = tmp_path / "a.txt"
|
|
source.write_text("a")
|
|
imported = store.import_trajectory(str(source), "a.txt", "custom")
|
|
assert imported["source"] == "session/raw/a.txt"
|
|
assert store.procedure_root.name == "procedures"
|