Files
wehub-resource-sync a203934033
Lint test / lint (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:34:58 +08:00

48 lines
1.8 KiB
Python

#!/usr/bin/env python3
"""Start the TextArena Sudoku server with configurable concurrent sessions.
The default OpenEnv server only allows 1 concurrent session because
TextArenaEnvironment is not marked as SUPPORTS_CONCURRENT_SESSIONS.
Since each WebSocket session creates an independent game instance,
it is safe to enable concurrent sessions.
Usage:
TEXTARENA_ENV_ID=Sudoku-v0 python start_sudoku_server.py
TEXTARENA_ENV_ID=Sudoku-v0 MAX_CONCURRENT_ENVS=8 python start_sudoku_server.py
"""
import os
import uvicorn
from openenv.core.env_server.http_server import create_app
from textarena_env.server.app import (TextArenaAction, TextArenaObservation, build_textarena_gradio_app,
create_textarena_environment)
from textarena_env.server.environment import TextArenaEnvironment
# Read config from environment
# Note: TEXTARENA_ENV_ID is read by create_textarena_environment factory,
# not by this script directly.
max_concurrent_envs = int(os.getenv('MAX_CONCURRENT_ENVS', '8'))
host = os.getenv('HOST', '0.0.0.0')
port = int(os.getenv('PORT', '8000'))
# Mark TextArenaEnvironment as supporting concurrent sessions.
# Each WebSocket session creates an independent game instance via the factory,
# so concurrent sessions are safe.
TextArenaEnvironment.SUPPORTS_CONCURRENT_SESSIONS = True
# Build the app with custom max_concurrent_envs
app = create_app(
create_textarena_environment,
TextArenaAction,
TextArenaObservation,
env_name='textarena_env',
max_concurrent_envs=max_concurrent_envs,
gradio_builder=build_textarena_gradio_app,
)
if __name__ == '__main__':
env_id = os.getenv('TEXTARENA_ENV_ID', 'Sudoku-v0')
print(f'Starting server: env={env_id}, max_concurrent_envs={max_concurrent_envs}')
uvicorn.run(app, host=host, port=port)