Seed Assistent personas from a shelf folder instead of yaml prompts.
Push assistent-personas/ JSON overlays without wiping VM clones or exact.controls. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -6,8 +6,6 @@ import json
|
||||
from pathlib import Path
|
||||
from unittest.mock import MagicMock
|
||||
|
||||
import pytest
|
||||
|
||||
from gpu_rent.provision import _safe_persona_id, count_wanted_models_on_vm, seed_assistent_personas
|
||||
|
||||
|
||||
@@ -20,19 +18,22 @@ def test_safe_persona_id():
|
||||
|
||||
|
||||
def test_seed_assistent_personas_writes_overlay(tmp_path: Path, monkeypatch):
|
||||
yaml_path = tmp_path / "assistent-personas.yaml"
|
||||
yaml_path.write_text(
|
||||
"default: cinema\n"
|
||||
"personas:\n"
|
||||
" - id: cinema\n"
|
||||
" title: Кино\n"
|
||||
" prompt: |\n"
|
||||
" You are a DP.\n"
|
||||
" - id: neutral\n"
|
||||
" title: Нейтральный\n"
|
||||
" prompt: Calm.\n",
|
||||
encoding="utf-8",
|
||||
root = tmp_path / "assistent-personas"
|
||||
(root / "_base").mkdir(parents=True)
|
||||
(root / "personas" / "cinema").mkdir(parents=True)
|
||||
(root / "_base" / "assistant.json").write_text(
|
||||
json.dumps({"default_persona": "cinema"}), encoding="utf-8"
|
||||
)
|
||||
(root / "personas" / "cinema" / "persona.json").write_text(
|
||||
json.dumps({"title": "Кино", "accent": "#7aa2f7"}), encoding="utf-8"
|
||||
)
|
||||
(root / "personas" / "cinema" / "bio.json").write_text(
|
||||
json.dumps({"role": "DP"}), encoding="utf-8"
|
||||
)
|
||||
(root / "personas" / "cinema" / "humor.json").write_text(
|
||||
json.dumps({"frequency": "rare"}), encoding="utf-8"
|
||||
)
|
||||
|
||||
puts: dict[str, str] = {}
|
||||
ssh_cmds: list[str] = []
|
||||
|
||||
@@ -47,28 +48,67 @@ def test_seed_assistent_personas_writes_overlay(tmp_path: Path, monkeypatch):
|
||||
|
||||
monkeypatch.setattr("gpu_rent.provision.put_text", fake_put)
|
||||
monkeypatch.setattr("gpu_rent.provision.run_ssh", fake_ssh)
|
||||
monkeypatch.setattr("gpu_rent.paths.assistent_personas_dir", lambda: root)
|
||||
monkeypatch.setattr(
|
||||
"gpu_rent.paths.assistent_personas_manifest_path", lambda: yaml_path
|
||||
"gpu_rent.paths.assistent_personas_example_dir", lambda: tmp_path / "missing"
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
"gpu_rent.paths.assistent_personas_example_path", lambda: tmp_path / "missing"
|
||||
"gpu_rent.paths.assistent_personas_manifest_path", lambda: tmp_path / "no.yaml"
|
||||
)
|
||||
|
||||
cfg = MagicMock()
|
||||
cfg.assistent_personas_manifest = str(yaml_path)
|
||||
cfg.assistent_personas_dir = str(root)
|
||||
logs: list[str] = []
|
||||
seed_assistent_personas(cfg, "1.2.3.4", logs.append)
|
||||
|
||||
assert any("personas/cinema/persona.json" in p for p in puts)
|
||||
assert any("personas/cinema/extra.md" in p for p in puts)
|
||||
assert any(p.endswith("personas/cinema/persona.json") for p in puts)
|
||||
assert any(p.endswith("personas/cinema/bio.json") for p in puts)
|
||||
assert any(p.endswith("personas/cinema/humor.json") for p in puts)
|
||||
assert not any(p.endswith("extra.md") for p in puts)
|
||||
assert "/mnt/swarm_data/Assistent/_base/assistant.json" in puts
|
||||
asst = json.loads(puts["/mnt/swarm_data/Assistent/_base/assistant.json"])
|
||||
assert asst["default_persona"] == "cinema"
|
||||
assert asst["num_ctx"] == 16384
|
||||
assert any("rm -f" in c and "personas.json" in c for c in ssh_cmds)
|
||||
assert not any(p.endswith("personas.yaml") for p in puts)
|
||||
assert not any(p.endswith("personas.json") for p in puts)
|
||||
assert any("overlay personas/2" in m for m in logs)
|
||||
assert any("overlay personas/1" in m for m in logs)
|
||||
|
||||
|
||||
def test_seed_skips_exact_if_remote_exists(tmp_path: Path, monkeypatch):
|
||||
root = tmp_path / "assistent-personas"
|
||||
(root / "personas" / "leonid").mkdir(parents=True)
|
||||
(root / "personas" / "leonid" / "persona.json").write_text(
|
||||
'{"title":"L"}', encoding="utf-8"
|
||||
)
|
||||
(root / "personas" / "leonid" / "exact.json").write_text(
|
||||
'{"controls":{"preference_bias":0.9}}', encoding="utf-8"
|
||||
)
|
||||
puts: dict[str, str] = {}
|
||||
|
||||
def fake_put(cfg, host, remote, text, mode=0o644):
|
||||
puts[remote] = text
|
||||
|
||||
def fake_ssh(cfg, host, cmd, check=False, timeout=60):
|
||||
if "exact.json" in cmd and "test -f" in cmd:
|
||||
return "yes"
|
||||
if ".gpu-rent-gpu.json" in cmd:
|
||||
return "{}"
|
||||
return ""
|
||||
|
||||
monkeypatch.setattr("gpu_rent.provision.put_text", fake_put)
|
||||
monkeypatch.setattr("gpu_rent.provision.run_ssh", fake_ssh)
|
||||
monkeypatch.setattr("gpu_rent.paths.assistent_personas_dir", lambda: root)
|
||||
monkeypatch.setattr(
|
||||
"gpu_rent.paths.assistent_personas_example_dir", lambda: tmp_path / "missing"
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
"gpu_rent.paths.assistent_personas_manifest_path", lambda: tmp_path / "no.yaml"
|
||||
)
|
||||
|
||||
cfg = MagicMock()
|
||||
cfg.assistent_personas_dir = str(root)
|
||||
seed_assistent_personas(cfg, "h", lambda *_: None)
|
||||
assert not any(p.endswith("exact.json") for p in puts)
|
||||
assert any(p.endswith("persona.json") for p in puts)
|
||||
|
||||
|
||||
def test_count_wanted_models(monkeypatch):
|
||||
|
||||
Reference in New Issue
Block a user