Files
infiniflow--ragflow/test/test_cajal_template_unit.py
wehub-resource-sync f36e2104d8
sep-tests / ragflow_preflight (push) Waiting to run
sep-tests / ragflow_tests_infinity (push) Blocked by required conditions
sep-tests / ragflow_tests_elasticsearch (push) Blocked by required conditions
tests / ragflow_preflight (push) Waiting to run
tests / ragflow_tests_infinity (push) Blocked by required conditions
tests / ragflow_tests_elasticsearch (push) Blocked by required conditions
chore: import upstream snapshot with attribution
2026-07-13 12:16:49 +08:00

80 lines
3.5 KiB
Python

#
# Copyright 2026 The InfiniFlow Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
import json
import importlib.util
from pathlib import Path
def _load_template_utils():
repo_root = Path(__file__).resolve().parents[1]
module_path = repo_root / "api" / "db" / "template_utils.py"
spec = importlib.util.spec_from_file_location("template_utils", module_path)
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
return module
def _load_cajal_template():
repo_root = Path(__file__).resolve().parents[1]
template_path = repo_root / "agent" / "templates" / "cajal_scientific_paper_agent.json"
with template_path.open(encoding="utf-8") as template_file:
return _load_template_utils().normalize_canvas_template_categories(json.load(template_file))
def test_cajal_template_exposes_local_ollama_model_and_agent_categories():
template = _load_cajal_template()
assert template["id"] == "41"
assert template["title"]["en"] == "CAJAL scientific paper agent"
assert template["canvas_type"] == "Agent"
assert template["canvas_types"] == ["Agent", "Recommended"]
agent_params = template["dsl"]["components"]["Agent:NewPumasLick"]["obj"]["params"]
assert agent_params["llm_id"] == "agnuxo/cajal-4b-p2pclaw@Ollama"
assert agent_params["max_tokens"] == 32768
assert "Agnuxo/CAJAL-4B-P2PCLAW" in agent_params["sys_prompt"]
assert "LaTeX" in agent_params["sys_prompt"]
def test_cajal_template_keeps_retrieval_grounding_and_graph_form_in_sync():
template = _load_cajal_template()
agent_params = template["dsl"]["components"]["Agent:NewPumasLick"]["obj"]["params"]
retrieval_tools = [tool for tool in agent_params["tools"] if tool["component_name"] == "Retrieval"]
assert len(retrieval_tools) == 1
assert retrieval_tools[0]["params"]["top_n"] == 10
assert "ground" in retrieval_tools[0]["params"]["description"].lower()
assert "{sys.query}" in agent_params["prompts"][0]["content"]
agent_node = next(node for node in template["dsl"]["graph"]["nodes"] if node["id"] == "Agent:NewPumasLick")
begin_node = next(node for node in template["dsl"]["graph"]["nodes"] if node["id"] == "begin")
assert agent_node["data"]["form"]["llm_id"] == agent_params["llm_id"]
assert agent_node["data"]["form"]["sys_prompt"] == agent_params["sys_prompt"]
assert "CAJAL" in begin_node["data"]["form"]["prologue"]
def test_cajal_is_registered_as_a_known_ollama_chat_model():
repo_root = Path(__file__).resolve().parents[1]
factories_path = repo_root / "conf" / "llm_factories.json"
factories = json.loads(factories_path.read_text(encoding="utf-8"))
ollama = next(factory for factory in factories["factory_llm_infos"] if factory["name"] == "Ollama")
cajal = next(model for model in ollama["llm"] if model["llm_name"] == "agnuxo/cajal-4b-p2pclaw")
assert cajal["model_type"] == "chat"
assert cajal["max_tokens"] == 32768
assert "SCIENTIFIC_WRITING" in cajal["tags"]