47 lines
1.4 KiB
Python
47 lines
1.4 KiB
Python
import os
|
|
import sys
|
|
|
|
import structlog
|
|
import uvicorn
|
|
from dotenv import load_dotenv
|
|
|
|
from skyvern import analytics
|
|
from skyvern.config import settings
|
|
|
|
LOG = structlog.stdlib.get_logger()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
analytics.capture("skyvern-oss-run-server")
|
|
port = settings.PORT
|
|
LOG.info("Agent server starting.", host="0.0.0.0", port=port)
|
|
load_dotenv()
|
|
|
|
# Disable reload on Windows - uvicorn forces WindowsSelectorEventLoopPolicy when reload=True,
|
|
# but Windows needs WindowsProactorEventLoopPolicy for async subprocess operations
|
|
reload = settings.ENV == "local" and sys.platform != "win32"
|
|
|
|
# Configure reload settings
|
|
# Convert TEMP_PATH to relative path if it's absolute to avoid pathlib.glob() issues
|
|
temp_path_for_excludes = (
|
|
os.path.relpath(settings.TEMP_PATH) if os.path.isabs(settings.TEMP_PATH) else settings.TEMP_PATH
|
|
)
|
|
artifact_path_for_excludes = (
|
|
os.path.relpath(settings.ARTIFACT_STORAGE_PATH)
|
|
if os.path.isabs(settings.ARTIFACT_STORAGE_PATH)
|
|
else settings.ARTIFACT_STORAGE_PATH
|
|
)
|
|
|
|
uvicorn.run(
|
|
"skyvern.forge.api_app:create_api_app",
|
|
host="0.0.0.0",
|
|
port=port,
|
|
log_level="info",
|
|
reload=reload,
|
|
reload_excludes=[
|
|
f"{temp_path_for_excludes}/**/*.py",
|
|
f"{artifact_path_for_excludes}/{settings.ENV}/**/scripts/**/**/*.py",
|
|
],
|
|
factory=True,
|
|
)
|