Co-Authored-By: Quentin Torroba <quentin.torroba@mistral.ai> Co-Authored-By: Laure Hugo <laure.hugo@mistral.ai> Co-Authored-By: Benjamin Trom <benjamin.trom@mistral.ai> Co-Authored-By: Mathias Gesbert <mathias.gesbert@ext.mistral.ai> Co-Authored-By: Michel Thomazo <michel.thomazo@mistral.ai> Co-Authored-By: Clément Drouin <clement.drouin@mistral.ai> Co-Authored-By: Vincent Guilloux <vincent.guilloux@mistral.ai> Co-Authored-By: Valentin Berard <val@mistral.ai> Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
142 lines
4 KiB
Python
142 lines
4 KiB
Python
from __future__ import annotations
|
|
|
|
from pathlib import Path
|
|
|
|
from vibe.core.autocompletion.path_prompt_adapter import (
|
|
DEFAULT_MAX_EMBED_BYTES,
|
|
render_path_prompt,
|
|
)
|
|
|
|
|
|
def test_treats_paths_to_files_as_embedded_resources(tmp_path: Path) -> None:
|
|
readme = tmp_path / "README.md"
|
|
readme.write_text("hello", encoding="utf-8")
|
|
src_dir = tmp_path / "src"
|
|
src_dir.mkdir()
|
|
main_py = src_dir / "main.py"
|
|
main_py.write_text("print('hi')", encoding="utf-8")
|
|
|
|
rendered = render_path_prompt(
|
|
"Please review @README.md and @src/main.py",
|
|
base_dir=tmp_path,
|
|
max_embed_bytes=DEFAULT_MAX_EMBED_BYTES,
|
|
)
|
|
|
|
expected = (
|
|
f"Please review README.md and src/main.py\n\n"
|
|
f"{readme.as_uri()}\n```\nhello\n```\n\n"
|
|
f"{main_py.as_uri()}\n```\nprint('hi')\n```"
|
|
)
|
|
assert rendered == expected
|
|
|
|
|
|
def test_treats_path_to_directory_as_resource_links(tmp_path: Path) -> None:
|
|
docs_dir = tmp_path / "docs"
|
|
docs_dir.mkdir()
|
|
|
|
rendered = render_path_prompt(
|
|
"See @docs/ for details",
|
|
base_dir=tmp_path,
|
|
max_embed_bytes=DEFAULT_MAX_EMBED_BYTES,
|
|
)
|
|
|
|
expected = f"See docs/ for details\n\nuri: {docs_dir.as_uri()}\nname: docs/"
|
|
assert rendered == expected
|
|
|
|
|
|
def test_keeps_emails_and_embeds_paths(tmp_path: Path) -> None:
|
|
readme = tmp_path / "README.md"
|
|
readme.write_text("hello", encoding="utf-8")
|
|
|
|
rendered = render_path_prompt(
|
|
"Contact user@example.com about @README.md",
|
|
base_dir=tmp_path,
|
|
max_embed_bytes=DEFAULT_MAX_EMBED_BYTES,
|
|
)
|
|
|
|
expected = (
|
|
f"Contact user@example.com about README.md\n\n"
|
|
f"{readme.as_uri()}\n```\nhello\n```"
|
|
)
|
|
assert rendered == expected
|
|
|
|
|
|
def test_ignores_nonexistent_paths(tmp_path: Path) -> None:
|
|
rendered = render_path_prompt(
|
|
"Missing @nope.txt here",
|
|
base_dir=tmp_path,
|
|
max_embed_bytes=DEFAULT_MAX_EMBED_BYTES,
|
|
)
|
|
|
|
assert rendered == "Missing @nope.txt here"
|
|
|
|
|
|
def test_falls_back_to_link_for_binary_files(tmp_path: Path) -> None:
|
|
binary_path = tmp_path / "image.bin"
|
|
binary_path.write_bytes(b"\x00\x01\x02")
|
|
|
|
rendered = render_path_prompt(
|
|
"Inspect @image.bin", base_dir=tmp_path, max_embed_bytes=DEFAULT_MAX_EMBED_BYTES
|
|
)
|
|
|
|
assert (
|
|
rendered == f"Inspect image.bin\n\nuri: {binary_path.as_uri()}\nname: image.bin"
|
|
)
|
|
|
|
|
|
def test_excludes_supposed_binary_files_quickly_before_reading_content(
|
|
tmp_path: Path,
|
|
) -> None:
|
|
zip_like = tmp_path / "archive.zip"
|
|
zip_like.write_text("text content inside but treated as binary", encoding="utf-8")
|
|
|
|
rendered = render_path_prompt(
|
|
"Inspect @archive.zip",
|
|
base_dir=tmp_path,
|
|
max_embed_bytes=DEFAULT_MAX_EMBED_BYTES,
|
|
)
|
|
|
|
assert (
|
|
rendered
|
|
== f"Inspect archive.zip\n\nuri: {zip_like.as_uri()}\nname: archive.zip"
|
|
)
|
|
|
|
|
|
def test_applies_max_embed_size_guard(tmp_path: Path) -> None:
|
|
large_file = tmp_path / "big.txt"
|
|
large_file.write_text("a" * 50, encoding="utf-8")
|
|
|
|
rendered = render_path_prompt(
|
|
"Review @big.txt", base_dir=tmp_path, max_embed_bytes=10
|
|
)
|
|
|
|
assert rendered == f"Review big.txt\n\nuri: {large_file.as_uri()}\nname: big.txt"
|
|
|
|
|
|
def test_parses_paths_with_special_characters_when_quoted(tmp_path: Path) -> None:
|
|
weird = tmp_path / "weird name(1).txt"
|
|
weird.write_text("odd", encoding="utf-8")
|
|
|
|
rendered = render_path_prompt(
|
|
'Open @"weird name(1).txt"',
|
|
base_dir=tmp_path,
|
|
max_embed_bytes=DEFAULT_MAX_EMBED_BYTES,
|
|
)
|
|
|
|
assert rendered == f"Open weird name(1).txt\n\n{weird.as_uri()}\n```\nodd\n```"
|
|
|
|
|
|
def test_deduplicates_identical_paths(tmp_path: Path) -> None:
|
|
readme = tmp_path / "README.md"
|
|
readme.write_text("hello", encoding="utf-8")
|
|
|
|
rendered = render_path_prompt(
|
|
"See @README.md and again @README.md",
|
|
base_dir=tmp_path,
|
|
max_embed_bytes=DEFAULT_MAX_EMBED_BYTES,
|
|
)
|
|
|
|
assert (
|
|
rendered
|
|
== f"See README.md and again README.md\n\n{readme.as_uri()}\n```\nhello\n```"
|
|
)
|