Skip to content

Commit 7aa45c8

Browse files
authored
Add back health check to ephemeral_server (#277)
1 parent a6014ea commit 7aa45c8

File tree

6 files changed

+40
-11
lines changed

6 files changed

+40
-11
lines changed

.github/workflows/unit-tests.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,12 @@ jobs:
2222
uses: ./.github/actions/setup-backend
2323
- name: Run ATS and Tests
2424
uses: ./.github/actions/run_ats
25-
timeout-minutes: 5
25+
timeout-minutes: 15
2626
with:
2727
default_tests: "tests/unit"
2828
codecov_static_token: ${{ secrets.CODECOV_STATIC_TOKEN }}
2929
codecov_token: ${{ secrets.CODECOV_TOKEN }}
30-
collect_args: "--timeout 5"
30+
collect_args: "--timeout 15"
3131
codecov_flags: unit-tests
3232
codemod-tests:
3333
# changing the following value will significantly affect github's cost. Be careful and consult with the team before changing it.
@@ -53,7 +53,7 @@ jobs:
5353
uses: ./.github/actions/setup-oss-repos
5454
- name: Run ATS and Tests
5555
uses: ./.github/actions/run_ats
56-
timeout-minutes: 10
56+
timeout-minutes: 15
5757
with:
5858
default_tests: "tests/integration/codemod/test_codemods.py"
5959
codecov_static_token: ${{ secrets.CODECOV_STATIC_TOKEN }}

pyproject.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ dependencies = [
6060
"starlette<1.0.0,>=0.16.0",
6161
"tqdm>=4.67.1",
6262
"tomlkit>=0.13.2",
63+
"uvicorn[standard]>=0.30.0",
6364
]
6465

6566
license = { text = "Apache-2.0" }
@@ -138,7 +139,7 @@ dev-dependencies = [
138139
"pytest-benchmark[histogram]>=5.1.0",
139140
"loguru>=0.7.3",
140141
]
141-
#skeyring-provider = "subprocess"
142+
142143

143144
[tool.uv.workspace]
144145
members = []

src/codegen/runner/models/apis.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,10 @@
1818

1919

2020
class ServerInfo(BaseModel):
21-
repo_id: int = 0
22-
container_id: str = ""
21+
repo_name: str | None = None
2322
is_running_codemod: bool = False
2423
is_shutting_down: bool = False
2524
warmup_state: WarmupState = WarmupState.PENDING
26-
label: str | None = ""
2725

2826

2927
class UtilizationMetrics(BaseModel):
Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,46 @@
11
import logging
22
import tempfile
3+
from contextlib import asynccontextmanager
34

45
from fastapi import FastAPI
56

7+
from codegen.runner.enums.warmup_state import WarmupState
68
from codegen.runner.models.apis import (
79
RUN_ON_STRING_ENDPOINT,
810
GetRunOnStringRequest,
911
GetRunOnStringResult,
12+
ServerInfo,
1013
)
1114
from codegen.runner.sandbox.executor import SandboxExecutor
1215
from codegen.sdk.codebase.factory.get_session import get_codebase_session
1316
from codegen.sdk.enums import ProgrammingLanguage
1417
from codegen.shared.compilation.string_to_code import create_execute_function_from_codeblock
1518

1619
logger = logging.getLogger(__name__)
17-
app = FastAPI()
20+
21+
server_info: ServerInfo
22+
23+
24+
@asynccontextmanager
25+
async def lifespan(server: FastAPI):
26+
global server_info
27+
server_info = ServerInfo(warmup_state=WarmupState.COMPLETED)
28+
logger.info("Ephemeral server is ready to accept requests")
29+
yield
30+
logger.info("Shutting down fastapi server")
31+
32+
33+
app = FastAPI(lifespan=lifespan)
34+
35+
36+
@app.get("/")
37+
def health() -> ServerInfo:
38+
return server_info
1839

1940

2041
@app.post(RUN_ON_STRING_ENDPOINT)
2142
async def run_on_string(request: GetRunOnStringRequest) -> GetRunOnStringResult:
43+
server_info.is_running_codemod = True
2244
logger.info(f"====[ run_on_string ]====\n> Codemod source: {request.codemod_source}\n> Input: {request.files}\n> Language: {request.language}\n")
2345
language = ProgrammingLanguage(request.language.upper())
2446
with get_codebase_session(tmpdir=tempfile.mkdtemp(), files=request.files, programming_language=language) as codebase:
@@ -27,3 +49,9 @@ async def run_on_string(request: GetRunOnStringRequest) -> GetRunOnStringResult:
2749
result = await executor.execute(code_to_exec)
2850
logger.info(f"Result: {result}")
2951
return GetRunOnStringResult(result=result)
52+
53+
54+
if __name__ == "__main__":
55+
import uvicorn
56+
57+
uvicorn.run(app, host="0.0.0.0", port=8000)

src/codegen/runner/sandbox/server.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import psutil
88
from fastapi import FastAPI
99

10-
from codegen.runner.constants.envvars import CUSTOMER_REPO_ID
1110
from codegen.runner.enums.warmup_state import WarmupState
1211
from codegen.runner.models.apis import (
1312
BRANCH_ENDPOINT,
@@ -38,10 +37,11 @@ async def lifespan(server: FastAPI):
3837
global runner
3938

4039
try:
41-
server_info = ServerInfo(repo_id=int(os.getenv(CUSTOMER_REPO_ID)), container_id=os.getenv("MODAL_TASK_ID"))
40+
repo_config = get_repo_config()
41+
server_info = ServerInfo(repo_name=repo_config.full_name)
4242
logger.info(f"Starting up sandbox fastapi server for repo_id={server_info.repo_id} in container ID={server_info.container_id}")
4343

44-
runner = SandboxRunner(container_id=server_info.container_id, repo_config=get_repo_config())
44+
runner = SandboxRunner(container_id=server_info.container_id, repo_config=repo_config)
4545
server_info.warmup_state = WarmupState.PENDING
4646
await runner.warmup()
4747
server_info.warmup_state = WarmupState.COMPLETED

uv.lock

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)