2023-08-12 06:00:11 +00:00
|
|
|
from click.testing import CliRunner
|
|
|
|
|
from llm.cli import cli
|
2023-08-20 05:00:38 +00:00
|
|
|
import llm
|
2023-08-12 15:52:57 +00:00
|
|
|
import json
|
2023-08-20 03:04:14 +00:00
|
|
|
import pytest
|
2023-08-12 06:00:11 +00:00
|
|
|
|
|
|
|
|
|
2023-08-20 05:02:58 +00:00
|
|
|
@pytest.mark.parametrize("model_id_or_alias", ("gpt-3.5-turbo", "chatgpt"))
|
|
|
|
|
def test_set_alias(model_id_or_alias):
|
2023-08-20 05:00:38 +00:00
|
|
|
with pytest.raises(llm.UnknownModelError):
|
|
|
|
|
llm.get_model("this-is-a-new-alias")
|
2023-08-20 05:02:58 +00:00
|
|
|
llm.set_alias("this-is-a-new-alias", model_id_or_alias)
|
2023-08-20 05:00:38 +00:00
|
|
|
assert llm.get_model("this-is-a-new-alias").model_id == "gpt-3.5-turbo"
|
|
|
|
|
|
|
|
|
|
|
2023-08-20 05:06:51 +00:00
|
|
|
def test_remove_alias():
|
|
|
|
|
with pytest.raises(KeyError):
|
|
|
|
|
llm.remove_alias("some-other-alias")
|
|
|
|
|
llm.set_alias("some-other-alias", "gpt-3.5-turbo")
|
|
|
|
|
assert llm.get_model("some-other-alias").model_id == "gpt-3.5-turbo"
|
|
|
|
|
llm.remove_alias("some-other-alias")
|
|
|
|
|
with pytest.raises(llm.UnknownModelError):
|
|
|
|
|
llm.get_model("some-other-alias")
|
|
|
|
|
|
|
|
|
|
|
2023-08-20 04:48:20 +00:00
|
|
|
@pytest.mark.parametrize("args", (["aliases", "list"], ["aliases"]))
|
2023-08-20 05:00:38 +00:00
|
|
|
def test_cli_aliases_list(args):
|
2023-08-12 06:00:11 +00:00
|
|
|
runner = CliRunner()
|
2023-08-20 04:48:20 +00:00
|
|
|
result = runner.invoke(cli, args)
|
2023-08-12 06:00:11 +00:00
|
|
|
assert result.exit_code == 0
|
|
|
|
|
assert result.output == (
|
2023-08-12 06:18:46 +00:00
|
|
|
"3.5 : gpt-3.5-turbo\n"
|
|
|
|
|
"chatgpt : gpt-3.5-turbo\n"
|
|
|
|
|
"chatgpt-16k : gpt-3.5-turbo-16k\n"
|
|
|
|
|
"3.5-16k : gpt-3.5-turbo-16k\n"
|
|
|
|
|
"4 : gpt-4\n"
|
|
|
|
|
"gpt4 : gpt-4\n"
|
|
|
|
|
"4-32k : gpt-4-32k\n"
|
2023-08-12 06:00:11 +00:00
|
|
|
)
|
2023-08-12 15:52:57 +00:00
|
|
|
|
|
|
|
|
|
2023-08-20 04:48:20 +00:00
|
|
|
@pytest.mark.parametrize("args", (["aliases", "list"], ["aliases"]))
|
2023-08-20 05:00:38 +00:00
|
|
|
def test_cli_aliases_list_json(args):
|
2023-08-12 15:52:57 +00:00
|
|
|
runner = CliRunner()
|
2023-08-20 04:48:20 +00:00
|
|
|
result = runner.invoke(cli, args + ["--json"])
|
2023-08-12 15:52:57 +00:00
|
|
|
assert result.exit_code == 0
|
|
|
|
|
assert json.loads(result.output) == {
|
|
|
|
|
"3.5": "gpt-3.5-turbo",
|
|
|
|
|
"chatgpt": "gpt-3.5-turbo",
|
|
|
|
|
"chatgpt-16k": "gpt-3.5-turbo-16k",
|
|
|
|
|
"3.5-16k": "gpt-3.5-turbo-16k",
|
|
|
|
|
"4": "gpt-4",
|
|
|
|
|
"gpt4": "gpt-4",
|
|
|
|
|
"4-32k": "gpt-4-32k",
|
|
|
|
|
}
|
2023-08-12 16:01:12 +00:00
|
|
|
|
|
|
|
|
|
2023-08-20 05:00:38 +00:00
|
|
|
def test_cli_aliases_set(user_path):
|
2023-08-12 16:01:12 +00:00
|
|
|
# Should be not aliases.json at start
|
|
|
|
|
assert not (user_path / "aliases.json").exists()
|
|
|
|
|
runner = CliRunner()
|
|
|
|
|
result = runner.invoke(cli, ["aliases", "set", "foo", "bar"])
|
|
|
|
|
assert result.exit_code == 0
|
|
|
|
|
assert (user_path / "aliases.json").exists()
|
|
|
|
|
assert json.loads((user_path / "aliases.json").read_text("utf-8")) == {"foo": "bar"}
|
2023-08-12 16:01:51 +00:00
|
|
|
|
|
|
|
|
|
2023-08-20 05:00:38 +00:00
|
|
|
def test_cli_aliases_path(user_path):
|
2023-08-12 16:01:51 +00:00
|
|
|
runner = CliRunner()
|
|
|
|
|
result = runner.invoke(cli, ["aliases", "path"])
|
|
|
|
|
assert result.exit_code == 0
|
|
|
|
|
assert result.output.strip() == str(user_path / "aliases.json")
|
2023-08-12 16:05:02 +00:00
|
|
|
|
|
|
|
|
|
2023-08-20 05:00:38 +00:00
|
|
|
def test_cli_aliases_remove(user_path):
|
2023-08-12 16:05:02 +00:00
|
|
|
(user_path / "aliases.json").write_text(json.dumps({"foo": "bar"}), "utf-8")
|
|
|
|
|
runner = CliRunner()
|
|
|
|
|
result = runner.invoke(cli, ["aliases", "remove", "foo"])
|
|
|
|
|
assert result.exit_code == 0
|
|
|
|
|
assert json.loads((user_path / "aliases.json").read_text("utf-8")) == {}
|
2023-08-12 16:06:38 +00:00
|
|
|
|
|
|
|
|
|
2023-08-20 05:00:38 +00:00
|
|
|
def test_cli_aliases_remove_invalid(user_path):
|
2023-08-12 16:06:38 +00:00
|
|
|
(user_path / "aliases.json").write_text(json.dumps({"foo": "bar"}), "utf-8")
|
|
|
|
|
runner = CliRunner()
|
|
|
|
|
result = runner.invoke(cli, ["aliases", "remove", "invalid"])
|
|
|
|
|
assert result.exit_code == 1
|
2023-08-20 05:11:19 +00:00
|
|
|
assert result.output == "Error: No such alias: invalid\n"
|
2023-08-12 16:15:17 +00:00
|
|
|
|
|
|
|
|
|
2023-08-20 03:04:14 +00:00
|
|
|
@pytest.mark.parametrize("args", (["models"], ["models", "list"]))
|
2023-08-20 05:00:38 +00:00
|
|
|
def test_cli_aliases_are_registered(user_path, args):
|
2023-08-12 16:15:17 +00:00
|
|
|
(user_path / "aliases.json").write_text(
|
|
|
|
|
json.dumps({"foo": "bar", "turbo": "gpt-3.5-turbo"}), "utf-8"
|
|
|
|
|
)
|
|
|
|
|
runner = CliRunner()
|
2023-08-20 03:04:14 +00:00
|
|
|
result = runner.invoke(cli, args)
|
2023-08-12 16:15:17 +00:00
|
|
|
assert result.exit_code == 0
|
|
|
|
|
assert "gpt-3.5-turbo (aliases: 3.5, chatgpt, turbo)" in result.output
|