test_basic.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  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.model_hf_repo = "ggml-org/models"
  54. server.model_hf_file = "tinyllamas/split/stories15M-q8_0-00001-of-00003.gguf"
  55. server.model_alias = "tinyllama-split"
  56. server.start()
  57. res = server.make_request("POST", "/completion", data={
  58. "n_predict": 16,
  59. "prompt": "Hello",
  60. "temperature": 0.0,
  61. })
  62. assert res.status_code == 200
  63. assert match_regex("(little|girl)+", res.body["content"])
  64. def test_no_webui():
  65. global server
  66. # default: webui enabled
  67. server.start()
  68. url = f"http://{server.server_host}:{server.server_port}"
  69. res = requests.get(url)
  70. assert res.status_code == 200
  71. assert "<!doctype html>" in res.text
  72. server.stop()
  73. # with --no-webui
  74. server.no_webui = True
  75. server.start()
  76. res = requests.get(url)
  77. assert res.status_code == 404