test_basic.py 2.7 KB

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