Co-authored-by: Clément Drouin <clement.drouin@mistral.ai> Co-authored-by: Clément Sirieix <clement.sirieix@mistral.ai> Co-authored-by: Guillaume LE GOFF <guillaume.lgf@gmail.com> Co-authored-by: Mathias Gesbert <mathias.gesbert@mistral.ai> Co-authored-by: Michel Thomazo <51709227+michelTho@users.noreply.github.com> Co-authored-by: Pierre Rossinès <pierre.rossines@mistral.ai> Co-authored-by: Vincent G <10739306+VinceOPS@users.noreply.github.com> Co-authored-by: Mistral Vibe <vibe@mistral.ai>
148 lines
4.8 KiB
Python
148 lines
4.8 KiB
Python
from __future__ import annotations
|
|
|
|
from datetime import date
|
|
import sys
|
|
|
|
import pytest
|
|
|
|
from tests.conftest import build_test_vibe_config
|
|
from vibe.core.agents import AgentManager
|
|
from vibe.core.scratchpad import init_scratchpad
|
|
from vibe.core.skills.manager import SkillManager
|
|
from vibe.core.system_prompt import get_universal_system_prompt
|
|
from vibe.core.tools.manager import ToolManager
|
|
|
|
|
|
def test_get_universal_system_prompt_includes_windows_prompt_on_windows(
|
|
monkeypatch: pytest.MonkeyPatch,
|
|
) -> None:
|
|
monkeypatch.setattr(sys, "platform", "win32")
|
|
monkeypatch.setenv("COMSPEC", "C:\\Windows\\System32\\cmd.exe")
|
|
|
|
config = build_test_vibe_config(
|
|
system_prompt_id="tests",
|
|
include_project_context=False,
|
|
include_prompt_detail=True,
|
|
include_model_info=False,
|
|
include_commit_signature=False,
|
|
)
|
|
tool_manager = ToolManager(lambda: config)
|
|
skill_manager = SkillManager(lambda: config)
|
|
agent_manager = AgentManager(lambda: config)
|
|
|
|
prompt = get_universal_system_prompt(
|
|
tool_manager, config, skill_manager, agent_manager
|
|
)
|
|
|
|
assert "You are Vibe, a super useful programming assistant." in prompt
|
|
assert (
|
|
"The operating system is Windows with shell `C:\\Windows\\System32\\cmd.exe`"
|
|
in prompt
|
|
)
|
|
assert "DO NOT use Unix commands like `ls`, `grep`, `cat`" in prompt
|
|
assert "Use: `dir` (Windows) for directory listings" in prompt
|
|
assert "Use: backslashes (\\\\) for paths" in prompt
|
|
assert "Check command availability with: `where command` (Windows)" in prompt
|
|
assert "Script shebang: Not applicable on Windows" in prompt
|
|
|
|
|
|
def test_scratchpad_section_included_when_passed() -> None:
|
|
sp = init_scratchpad("test-session")
|
|
config = build_test_vibe_config(
|
|
system_prompt_id="tests",
|
|
include_project_context=False,
|
|
include_prompt_detail=True,
|
|
include_model_info=False,
|
|
include_commit_signature=False,
|
|
)
|
|
tool_manager = ToolManager(lambda: config)
|
|
skill_manager = SkillManager(lambda: config)
|
|
agent_manager = AgentManager(lambda: config)
|
|
|
|
prompt = get_universal_system_prompt(
|
|
tool_manager, config, skill_manager, agent_manager, scratchpad_dir=sp
|
|
)
|
|
|
|
assert "# Scratchpad Directory" in prompt
|
|
assert sp is not None
|
|
assert str(sp) in prompt
|
|
|
|
|
|
def test_scratchpad_section_absent_when_not_passed() -> None:
|
|
config = build_test_vibe_config(
|
|
system_prompt_id="tests",
|
|
include_project_context=False,
|
|
include_prompt_detail=True,
|
|
include_model_info=False,
|
|
include_commit_signature=False,
|
|
)
|
|
tool_manager = ToolManager(lambda: config)
|
|
skill_manager = SkillManager(lambda: config)
|
|
agent_manager = AgentManager(lambda: config)
|
|
|
|
prompt = get_universal_system_prompt(
|
|
tool_manager, config, skill_manager, agent_manager
|
|
)
|
|
|
|
assert "Scratchpad Directory" not in prompt
|
|
|
|
|
|
def test_headless_section_included_when_enabled() -> None:
|
|
config = build_test_vibe_config(
|
|
system_prompt_id="tests",
|
|
include_project_context=False,
|
|
include_prompt_detail=False,
|
|
include_model_info=False,
|
|
include_commit_signature=False,
|
|
)
|
|
tool_manager = ToolManager(lambda: config)
|
|
skill_manager = SkillManager(lambda: config)
|
|
agent_manager = AgentManager(lambda: config)
|
|
|
|
prompt = get_universal_system_prompt(
|
|
tool_manager, config, skill_manager, agent_manager, headless=True
|
|
)
|
|
|
|
assert "# Headless Mode" in prompt
|
|
assert "no human is available to respond" in prompt
|
|
|
|
|
|
def test_headless_section_absent_by_default() -> None:
|
|
config = build_test_vibe_config(
|
|
system_prompt_id="tests",
|
|
include_project_context=False,
|
|
include_prompt_detail=False,
|
|
include_model_info=False,
|
|
include_commit_signature=False,
|
|
)
|
|
tool_manager = ToolManager(lambda: config)
|
|
skill_manager = SkillManager(lambda: config)
|
|
agent_manager = AgentManager(lambda: config)
|
|
|
|
prompt = get_universal_system_prompt(
|
|
tool_manager, config, skill_manager, agent_manager
|
|
)
|
|
|
|
assert "Headless Mode" not in prompt
|
|
|
|
|
|
def test_current_date_placeholder_substituted_in_prompt() -> None:
|
|
config = build_test_vibe_config(
|
|
system_prompt_id="cli",
|
|
include_project_context=False,
|
|
include_prompt_detail=False,
|
|
include_model_info=False,
|
|
include_commit_signature=False,
|
|
)
|
|
tool_manager = ToolManager(lambda: config)
|
|
skill_manager = SkillManager(lambda: config)
|
|
agent_manager = AgentManager(lambda: config)
|
|
|
|
prompt = get_universal_system_prompt(
|
|
tool_manager, config, skill_manager, agent_manager
|
|
)
|
|
|
|
today = date.today()
|
|
expected = f"Today's date is {today.isoformat()} ({today.strftime('%A')})."
|
|
assert expected in prompt
|
|
assert "$current_date" not in prompt
|