1
0

test_basic.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. import pytest
  2. import requests
  3. from utils import *
  4. server = ServerPreset.tinyllama2()
  5. @pytest.fixture(scope="session", autouse=True)
  6. def do_something():
  7. # this will be run once per test session, before any tests
  8. ServerPreset.load_all()
  9. @pytest.fixture(autouse=True)
  10. def create_server():
  11. global server
  12. server = ServerPreset.tinyllama2()
  13. def test_server_start_simple():
  14. global server
  15. server.start()
  16. res = server.make_request("GET", "/health")
  17. assert res.status_code == 200
  18. def test_server_props():
  19. global server
  20. server.start()
  21. res = server.make_request("GET", "/props")
  22. assert res.status_code == 200
  23. assert ".gguf" in res.body["model_path"]
  24. assert res.body["total_slots"] == server.n_slots
  25. default_val = res.body["default_generation_settings"]
  26. assert server.n_ctx is not None and server.n_slots is not None
  27. assert default_val["n_ctx"] == server.n_ctx / server.n_slots
  28. assert default_val["params"]["seed"] == server.seed
  29. def test_server_models():
  30. global server
  31. server.start()
  32. res = server.make_request("GET", "/models")
  33. assert res.status_code == 200
  34. assert len(res.body["data"]) == 1
  35. assert res.body["data"][0]["id"] == server.model_alias
  36. def test_server_slots():
  37. global server
  38. # without slots endpoint enabled, this should return error
  39. server.server_slots = False
  40. server.start()
  41. res = server.make_request("GET", "/slots")
  42. assert res.status_code == 501 # ERROR_TYPE_NOT_SUPPORTED
  43. assert "error" in res.body
  44. server.stop()
  45. # with slots endpoint enabled, this should return slots info
  46. server.server_slots = True
  47. server.n_slots = 2
  48. server.start()
  49. res = server.make_request("GET", "/slots")
  50. assert res.status_code == 200
  51. assert len(res.body) == server.n_slots
  52. assert server.n_ctx is not None and server.n_slots is not None
  53. assert res.body[0]["n_ctx"] == server.n_ctx / server.n_slots
  54. assert "params" not in res.body[0]
  55. def test_load_split_model():
  56. global server
  57. server.model_hf_repo = "ggml-org/models"
  58. server.model_hf_file = "tinyllamas/split/stories15M-q8_0-00001-of-00003.gguf"
  59. server.model_alias = "tinyllama-split"
  60. server.start()
  61. res = server.make_request("POST", "/completion", data={
  62. "n_predict": 16,
  63. "prompt": "Hello",
  64. "temperature": 0.0,
  65. })
  66. assert res.status_code == 200
  67. assert match_regex("(little|girl)+", res.body["content"])
  68. def test_no_webui():
  69. global server
  70. # default: webui enabled
  71. server.start()
  72. url = f"http://{server.server_host}:{server.server_port}"
  73. res = requests.get(url)
  74. assert res.status_code == 200
  75. assert "<!doctype html>" in res.text
  76. server.stop()
  77. # with --no-webui
  78. server.no_webui = True
  79. server.start()
  80. res = requests.get(url)
  81. assert res.status_code == 404