nemo_gym.base_resources_server

View as Markdown

Module Contents

Classes

NameDescription
BaseResourcesServer-
BaseResourcesServerConfig-
BaseRunRequest-
BaseSeedSessionRequest-
BaseSeedSessionResponse-
BaseVerifyRequest-
BaseVerifyResponse-
MCPResourcesServerSimpleResourcesServer variant that also exposes Gym-owned MCP tools.
MCPServerMetadataMetadata returned from /seed_session for per-rollout Gym MCP access.
MCPSessionErrorA Gym MCP tool call lacked a valid per-rollout session token.
SimpleResourcesServer-
_MCPHeaderSessionMiddleware-

Functions

NameDescription
gym_toolMark a resources-server method as a tool to auto-expose over MCP.

Data

NEMO_GYM_MCP_METADATA_KEY

NEMO_GYM_MCP_SESSION_TOKEN_HEADER

RESERVED_MCP_TOOL_NAMES

_MCP_SESSION_TOKEN

_MCP_TOKEN_SALT

API

class nemo_gym.base_resources_server.BaseResourcesServer()

Bases: BaseServer

config
BaseResourcesServerConfig
class nemo_gym.base_resources_server.BaseResourcesServerConfig()
class nemo_gym.base_resources_server.BaseRunRequest()

Bases: BaseModel

responses_create_params
NeMoGymResponseCreateParamsNonStreaming
class nemo_gym.base_resources_server.BaseSeedSessionRequest()

Bases: BaseModel

class nemo_gym.base_resources_server.BaseSeedSessionResponse()

Bases: BaseModel

class nemo_gym.base_resources_server.BaseVerifyRequest()

Bases: BaseRunRequest

response
NeMoGymResponse
class nemo_gym.base_resources_server.BaseVerifyResponse()

Bases: BaseVerifyRequest

reward
float
class nemo_gym.base_resources_server.MCPResourcesServer()

Bases: SimpleResourcesServer

SimpleResourcesServer variant that also exposes Gym-owned MCP tools.

Subclasses decorate tool methods with @gym_tool (the default register_mcp_tools auto-registers them; override only for manual control) and call build_mcp_session_metadata from seed_session to hand the agent a per-rollout token. A @gym_tool method receives the Gym session by declaring a session_id parameter, which the base resolves from that token (a stateless signed value) so tool calls share the session id used by /seed_session and /verify.

mcp_url_path
str = '/mcp'
nemo_gym.base_resources_server.MCPResourcesServer._mcp_token_serializer() -> itsdangerous.URLSafeSerializer
nemo_gym.base_resources_server.MCPResourcesServer._register_gym_tool(
mcp: typing.Any,
name: str,
method: typing.Any
) -> None

Register one bound @gym_tool method as an MCP tool.

Builds a wrapper whose signature mirrors the method’s parameters minus session_id (so the session id stays out of the model-visible input schema) and injects the resolved Gym session id at call time. Enforces the @gym_tool constraints.

nemo_gym.base_resources_server.MCPResourcesServer.build_mcp_session_metadata(
request: fastapi.Request
) -> nemo_gym.base_resources_server.MCPServerMetadata
nemo_gym.base_resources_server.MCPResourcesServer.register_mcp_tools(
mcp: typing.Any
) -> None

Auto-register methods decorated with @gym_tool as MCP tools.

Subclasses can either rely on this default (just decorate tool methods with @gym_tool) or override it for full manual control. To add manual @mcp.tool() functions on top of the auto-registered ones, call super().register_mcp_tools(mcp) first.

nemo_gym.base_resources_server.MCPResourcesServer.require_mcp_session_id() -> str
nemo_gym.base_resources_server.MCPResourcesServer.setup_webserver() -> fastapi.FastAPI
class nemo_gym.base_resources_server.MCPServerMetadata()

Bases: BaseModel

Metadata returned from /seed_session for per-rollout Gym MCP access.

headers
dict[str, str]
server_name
str
transport
str = 'http'
url_path
str = '/mcp'
class nemo_gym.base_resources_server.MCPSessionError()
Exception

Bases: Exception

A Gym MCP tool call lacked a valid per-rollout session token.

Deliberately not an HTTP error: MCP runs over JSON-RPC, so FastMCP returns HTTP 200 and surfaces this to the client as a tool error (isError: true). An HTTP status code raised here would never reach the caller, so we raise a plain error with a clear message instead.

class nemo_gym.base_resources_server.SimpleResourcesServer()

Bases: BaseResourcesServer, AggregateMetricsMixin, SimpleServer

config
BaseResourcesServerConfig
nemo_gym.base_resources_server.SimpleResourcesServer.aggregate_metrics(
body: nemo_gym.config_types.AggregateMetricsRequest
) -> nemo_gym.config_types.AggregateMetrics
async

Compute aggregate metrics from verify responses.

RewardProfiler provides baseline stats. Override compute_metrics() and/or get_key_metrics() for benchmark-specific customization.

nemo_gym.base_resources_server.SimpleResourcesServer.seed_session(
body: nemo_gym.base_resources_server.BaseSeedSessionRequest
) -> nemo_gym.base_resources_server.BaseSeedSessionResponse
async
nemo_gym.base_resources_server.SimpleResourcesServer.setup_webserver() -> fastapi.FastAPI
nemo_gym.base_resources_server.SimpleResourcesServer.verify(
body: nemo_gym.base_resources_server.BaseVerifyRequest
) -> nemo_gym.base_resources_server.BaseVerifyResponse
asyncabstract
class nemo_gym.base_resources_server._MCPHeaderSessionMiddleware(
app: typing.Any
)
nemo_gym.base_resources_server._MCPHeaderSessionMiddleware.__call__(
scope,
receive,
send
)
async
nemo_gym.base_resources_server.gym_tool(
fn
)

Mark a resources-server method as a tool to auto-expose over MCP.

The method is registered as an MCP tool named after the method, and its MCP input schema is derived from the method’s typed parameters. Declare a session_id: str parameter to receive the per-rollout Gym session id; it is injected automatically (from the hidden session token) and hidden from the tool’s input schema. The method must NOT take a request parameter — there is no FastAPI Request on the MCP path; use session_id instead. Both sync and async methods are supported.

nemo_gym.base_resources_server.NEMO_GYM_MCP_METADATA_KEY = 'mcp'
nemo_gym.base_resources_server.NEMO_GYM_MCP_SESSION_TOKEN_HEADER = 'X-NeMo-Gym-Session-Token'
nemo_gym.base_resources_server.RESERVED_MCP_TOOL_NAMES = frozenset({'verify', 'seed_session', 'aggregate_metrics', 'mcp'})
nemo_gym.base_resources_server._MCP_SESSION_TOKEN: ContextVar[Optional[str]] = ContextVar('nemo_gym_mcp_session_token', default=None)
nemo_gym.base_resources_server._MCP_TOKEN_SALT = 'nemo-gym-mcp-session-token'