Skip to content

Commit fe25fd9

Browse files
Merge pull request #50 from agentevals-dev/fix/startup-cleanup
Cleanup server startup
2 parents 788ec6d + 71ce163 commit fe25fd9

1 file changed

Lines changed: 30 additions & 68 deletions

File tree

src/agentevals/cli.py

Lines changed: 30 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -500,6 +500,32 @@ def _shared_exit(sig, frame):
500500
s.handle_exit = _shared_exit
501501

502502

503+
async def _run_servers(
504+
host: str,
505+
port: int,
506+
otlp_port: int,
507+
*,
508+
reload: bool = False,
509+
reload_dirs: list[str] | None = None,
510+
log_level: str = "warning",
511+
) -> None:
512+
"""Start the main API and OTLP HTTP servers."""
513+
import uvicorn
514+
515+
shared_kwargs: dict = {
516+
"host": host,
517+
"reload": reload,
518+
"log_level": log_level,
519+
}
520+
if reload_dirs:
521+
shared_kwargs["reload_dirs"] = reload_dirs
522+
523+
main_server = uvicorn.Server(uvicorn.Config("agentevals.api.app:app", port=port, **shared_kwargs))
524+
otlp_server = uvicorn.Server(uvicorn.Config("agentevals.api.otlp_app:otlp_app", port=otlp_port, **shared_kwargs))
525+
_link_server_shutdown(main_server, otlp_server)
526+
await asyncio.gather(main_server.serve(), otlp_server.serve())
527+
528+
503529
@main.command("serve")
504530
@click.option(
505531
"--dev",
@@ -546,8 +572,6 @@ def serve(dev: bool, host: str, port: int, otlp_port: int, eval_sets: str | None
546572
"""
547573
from pathlib import Path
548574

549-
import uvicorn
550-
551575
level = logging.WARNING
552576
if verbose == 1:
553577
level = logging.INFO
@@ -582,82 +606,20 @@ def serve(dev: bool, host: str, port: int, otlp_port: int, eval_sets: str | None
582606
click.echo()
583607

584608
src_path = Path(__file__).parent.parent
585-
586-
async def _run_dev_servers():
587-
main_config = uvicorn.Config(
588-
"agentevals.api.app:app",
589-
host=host,
590-
port=port,
591-
reload=True,
592-
reload_dirs=[str(src_path)],
593-
log_level="info",
594-
)
595-
otlp_config = uvicorn.Config(
596-
"agentevals.api.otlp_app:otlp_app",
597-
host=host,
598-
port=otlp_port,
599-
reload=True,
600-
reload_dirs=[str(src_path)],
601-
log_level="info",
602-
)
603-
main_server = uvicorn.Server(main_config)
604-
otlp_server = uvicorn.Server(otlp_config)
605-
_link_server_shutdown(main_server, otlp_server)
606-
await asyncio.gather(main_server.serve(), otlp_server.serve())
607-
608-
asyncio.run(_run_dev_servers())
609+
reload_dirs = [str(src_path)]
610+
asyncio.run(_run_servers(host, port, otlp_port, reload=True, reload_dirs=reload_dirs, log_level="info"))
609611
elif has_ui and not headless:
610612
click.echo(f"agentevals: http://{host}:{port}")
611613
click.echo(f" OTLP HTTP: http://{host}:{otlp_port}")
612614
click.echo()
613615

614-
async def _run_ui_servers():
615-
main_config = uvicorn.Config(
616-
"agentevals.api.app:app",
617-
host=host,
618-
port=port,
619-
reload=False,
620-
log_level="warning",
621-
)
622-
otlp_config = uvicorn.Config(
623-
"agentevals.api.otlp_app:otlp_app",
624-
host=host,
625-
port=otlp_port,
626-
reload=False,
627-
log_level="warning",
628-
)
629-
main_server = uvicorn.Server(main_config)
630-
otlp_server = uvicorn.Server(otlp_config)
631-
_link_server_shutdown(main_server, otlp_server)
632-
await asyncio.gather(main_server.serve(), otlp_server.serve())
633-
634-
asyncio.run(_run_ui_servers())
616+
asyncio.run(_run_servers(host, port, otlp_port))
635617
else:
636618
click.echo(f"agentevals API: http://{host}:{port}/api")
637619
click.echo(f" OTLP HTTP: http://{host}:{otlp_port}")
638620
click.echo()
639621

640-
async def _run_headless_servers():
641-
main_config = uvicorn.Config(
642-
"agentevals.api.app:app",
643-
host=host,
644-
port=port,
645-
reload=False,
646-
log_level="warning",
647-
)
648-
otlp_config = uvicorn.Config(
649-
"agentevals.api.otlp_app:otlp_app",
650-
host=host,
651-
port=otlp_port,
652-
reload=False,
653-
log_level="warning",
654-
)
655-
main_server = uvicorn.Server(main_config)
656-
otlp_server = uvicorn.Server(otlp_config)
657-
_link_server_shutdown(main_server, otlp_server)
658-
await asyncio.gather(main_server.serve(), otlp_server.serve())
659-
660-
asyncio.run(_run_headless_servers())
622+
asyncio.run(_run_servers(host, port, otlp_port))
661623

662624

663625
@main.command("mcp")

0 commit comments

Comments
 (0)