Skip to content
This repository was archived by the owner on Jul 4, 2025. It is now read-only.

task: organize the API folder follow the swagger API #2006

Merged
merged 18 commits into from
Feb 24, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 8 additions & 8 deletions .github/workflows/cortex-cpp-quality-gate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@ jobs:
cp build/cortex build/cortex-beta
python -m pip install --upgrade pip
python -m pip install -r e2e-test/requirements.txt
python e2e-test/main.py
python e2e-test/runner/main.py
rm build/cortex-nightly
rm build/cortex-beta
env:
Expand All @@ -182,7 +182,7 @@ jobs:
cp build/cortex.exe build/cortex-beta.exe
python -m pip install --upgrade pip
python -m pip install -r e2e-test/requirements.txt
python e2e-test/main.py
python e2e-test/runner/main.py
rm build/cortex-nightly.exe
rm build/cortex-beta.exe
env:
Expand All @@ -196,7 +196,7 @@ jobs:
cp build/cortex build/cortex-beta
python -m pip install --upgrade pip
python -m pip install -r e2e-test/requirements.txt
python e2e-test/cortex-llamacpp-e2e-nightly.py
python e2e-test/runner/cortex-llamacpp-e2e-nightly.py
rm build/cortex-nightly
rm build/cortex-beta
env:
Expand All @@ -210,7 +210,7 @@ jobs:
cp build/cortex.exe build/cortex-beta.exe
python -m pip install --upgrade pip
python -m pip install -r e2e-test/requirements.txt
python e2e-test/cortex-llamacpp-e2e-nightly.py
python e2e-test/runner/cortex-llamacpp-e2e-nightly.py
rm build/cortex-nightly.exe
rm build/cortex-beta.exe
env:
Expand Down Expand Up @@ -443,7 +443,7 @@ jobs:
cp build/cortex build/cortex-beta
python -m pip install --upgrade pip
python -m pip install -r e2e-test/requirements.txt
python e2e-test/main.py
python e2e-test/runner/main.py
rm build/cortex-nightly
rm build/cortex-beta
env:
Expand All @@ -457,7 +457,7 @@ jobs:
cp build/cortex.exe build/cortex-beta.exe
python -m pip install --upgrade pip
python -m pip install -r e2e-test/requirements.txt
python e2e-test/main.py
python e2e-test/runner/main.py
rm build/cortex-nightly.exe
rm build/cortex-beta.exe
env:
Expand All @@ -471,7 +471,7 @@ jobs:
cp build/cortex build/cortex-beta
python -m pip install --upgrade pip
python -m pip install -r e2e-test/requirements.txt
python e2e-test/cortex-llamacpp-e2e-nightly.py
python e2e-test/runner/cortex-llamacpp-e2e-nightly.py
rm build/cortex-nightly
rm build/cortex-beta
env:
Expand All @@ -485,7 +485,7 @@ jobs:
cp build/cortex.exe build/cortex-beta.exe
python -m pip install --upgrade pip
python -m pip install -r e2e-test/requirements.txt
python e2e-test/cortex-llamacpp-e2e-nightly.py
python e2e-test/runner/cortex-llamacpp-e2e-nightly.py
rm build/cortex-nightly.exe
rm build/cortex-beta.exe
env:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import pytest
import requests
import time
from test_runner import (
from utils.test_runner import (
start_server,
stop_server,
wait_for_websocket_download_success_event,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import pytest
import requests
from test_runner import start_server, stop_server, get_latest_pre_release_tag
from utils.test_runner import start_server, stop_server, get_latest_pre_release_tag

latest_pre_release_tag = get_latest_pre_release_tag("janhq", "cortex.llamacpp")

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import pytest
import requests
from test_runner import (
from utils.test_runner import (
start_server,
stop_server,
wait_for_websocket_download_success_event,
Expand Down
82 changes: 82 additions & 0 deletions engine/e2e-test/api/engines/test_api_get_default_engine.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
import pytest
import requests
from utils.test_runner import start_server, stop_server
import jsonschema
from tenacity import retry, wait_exponential, stop_after_attempt
from utils.logger import log_response
from utils.assertion import assert_equal


class TestApiDefaultEngine:

@pytest.fixture(autouse=True)
def setup_and_teardown(self):
# Setup
success = start_server()
if not success:
raise Exception("Failed to start server")

yield

# Teardown
stop_server()

def test_api_get_default_engine_successfully(self):
# Data test
engine= "llama-cpp"
name= "linux-amd64-avx-cuda-11-7"
version= "v0.1.35-27.10.24"

data = {"version": version, "variant": name}
post_install_url = f"http://localhost:3928/v1/engines/{engine}/install"
response = requests.post(
post_install_url, json=data
)
assert_equal(response.status_code,200)
log_response(response.json(), "test_api_get_default_engine_successfully")

get_list_url = f"http://localhost:3928/v1/engines/{engine}"
get_default_url = f"http://localhost:3928/v1/engines/{engine}/default"

@retry(
wait=wait_exponential(multiplier=2, min=2, max=30),
stop=stop_after_attempt(5)
)
def get_request(url):
response = requests.get(url)
assert len(response.json()) > 0

get_request(get_list_url)

response_default_engine = requests.get(get_default_url)
json_data = response_default_engine.json()

log_response(json_data, "test_api_get_default_engine_successfully")
assert_equal(response_default_engine.status_code, 200)

schema = {
"type": "object",
"properties": {
"engine": {"type": "string"},
"variant": {"type": "string"},
"version": {"type": "string"}
},
"required": ["engine", "variant", "version"]
}

# Validate response schema
jsonschema.validate(instance=json_data, schema=schema)

def test_api_get_default_engine_failed_invalid_engine(self):
# Data test
engine= "invalid"

get_default_url = f"http://localhost:3928/v1/engines/{engine}/default"

response_default_engine = requests.get(get_default_url)
json_data_get_default = response_default_engine.json()

log_response(json_data_get_default, "test_api_get_default_engine_failed_invalid_engine")
assert_equal(response_default_engine.status_code, 400)

assert_equal(json_data_get_default["message"], f"Engine {engine} is not supported yet!")
76 changes: 76 additions & 0 deletions engine/e2e-test/api/engines/test_api_get_engine_release.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
import pytest
import requests
from utils.test_runner import start_server, stop_server
import jsonschema
from tenacity import retry, wait_exponential, stop_after_attempt
from utils.logger import log_response
from utils.assertion import assert_equal, assert_contains


class TestApiEngineRelease:

@pytest.fixture(autouse=True)
def setup_and_teardown(self):
# Setup
success = start_server()
if not success:
raise Exception("Failed to start server")

yield

# Teardown
stop_server()

def test_api_get_engine_release_successfully(self):
# Data test
engine= "llama-cpp"
get_release_url = f"http://localhost:3928/v1/engines/{engine}/releases"

@retry(
wait=wait_exponential(multiplier=2, min=2, max=30),
stop=stop_after_attempt(5)
)
def get_request(url):
response = requests.get(url)
assert len(response.json()) > 0

get_request(get_release_url)

response_engine_release = requests.get(get_release_url)
json_data = response_engine_release.json()

log_response(json_data, "test_api_get_engine_release_successfully")
assert_equal(response_engine_release.status_code, 200)

schema = {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "array",
"items": {
"type": "object",
"properties": {
"draft": { "type": "boolean" },
"name": { "type": "string" },
"prerelease": { "type": "boolean" },
"published_at": { "type": "string", "format": "date-time" },
"url": { "type": "string", "format": "uri" }
},
"required": ["draft", "name", "prerelease", "published_at", "url"]
}
}

# Validate response schema
jsonschema.validate(instance=json_data, schema=schema)

def test_api_ge_engine_release_failed_invalid_engine(self):
# Data test
engine= "invalid"

get_default_url = f"http://localhost:3928/v1/engines/{engine}/releases"

response_default_engine = requests.get(get_default_url)
json_data_get_default = response_default_engine.json()

log_response(json_data_get_default, "test_api_ge_engine_release_failed_invalid_engine")
assert_equal(response_default_engine.status_code, 400)

assert_contains(json_data_get_default["message"], "Not Found")
73 changes: 73 additions & 0 deletions engine/e2e-test/api/engines/test_api_get_engine_release_latest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
import pytest
import requests
from utils.test_runner import start_server, stop_server
import jsonschema
from tenacity import retry, wait_exponential, stop_after_attempt
from utils.logger import log_response
from utils.assertion import assert_equal, assert_contains


class TestApiEngineReleaseLatest:

@pytest.fixture(autouse=True)
def setup_and_teardown(self):
# Setup
success = start_server()
if not success:
raise Exception("Failed to start server")

yield

# Teardown
stop_server()

def test_api_get_engine_release_latest_successfully(self):
# Data test
engine= "llama-cpp"
get_release_url = f"http://localhost:3928/v1/engines/{engine}/releases/latest"

@retry(
wait=wait_exponential(multiplier=2, min=2, max=30),
stop=stop_after_attempt(5)
)
def get_request(url):
response = requests.get(url)
assert len(response.json()) > 0

get_request(get_release_url)

response_engine_release = requests.get(get_release_url)
json_data = response_engine_release.json()

log_response(json_data, "test_api_get_engine_release_latest_successfully")
assert_equal(response_engine_release.status_code, 200)

schema = {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "array",
"items": {
"type": "object",
"properties": {
"created_at": {
"type": "string",
"format": "date-time"
},
"download_count": {
"type": "integer",
"minimum": 0
},
"name": {
"type": "string"
},
"size": {
"type": "integer",
"minimum": 0
}
},
"required": ["created_at", "download_count", "name", "size"]
}
}


# Validate response schema
jsonschema.validate(instance=json_data, schema=schema)
Loading
Loading