resume sandbox if it isn't already running

This commit is contained in:
rohitvinodmalhotra@gmail.com 2025-12-03 23:58:15 -05:00
parent 4577775725
commit 4fb4092a62
3 changed files with 30 additions and 22 deletions

View File

@ -1,11 +1,11 @@
import logging
import os
from typing import Any
from uuid import UUID
import httpx
from github import Github, GithubIntegration
from pydantic import Field
from server.auth.constants import GITHUB_APP_CLIENT_ID, GITHUB_APP_PRIVATE_KEY
from openhands.agent_server.models import AskAgentRequest, AskAgentResponse
from openhands.app_server.event_callback.event_callback_models import (
@ -25,10 +25,6 @@ from openhands.app_server.event_callback.util import (
)
from openhands.sdk import Event
from openhands.sdk.event import ConversationStateUpdateEvent
from server.auth.constants import (
GITHUB_APP_CLIENT_ID,
GITHUB_APP_PRIVATE_KEY
)
_logger = logging.getLogger(__name__)
@ -274,9 +270,9 @@ class GithubV1CallbackProcessor(EventCallbackProcessor):
app_conversation_info.sandbox_id,
)
assert sandbox.session_api_key is not None, (
f'No session API key for sandbox: {sandbox.id}'
)
assert (
sandbox.session_api_key is not None
), f'No session API key for sandbox: {sandbox.id}'
# 3. URL + instruction
agent_server_url = get_agent_server_url_from_sandbox(sandbox)

View File

@ -23,6 +23,7 @@ from openhands.app_server.app_conversation.app_conversation_models import (
SendMessageRequest,
)
from openhands.app_server.config import get_app_conversation_service
from openhands.app_server.sandbox.sandbox_models import SandboxStatus
from openhands.app_server.services.injector import InjectorState
from openhands.app_server.user.specifiy_user_context import USER_CONTEXT_ATTR
from openhands.core.logger import openhands_logger as logger
@ -459,33 +460,44 @@ class SlackUpdateExistingConversationView(SlackNewConversationView):
)
# 2. Sandbox lookup + validation
sandbox = ensure_running_sandbox(
await sandbox_service.get_sandbox(app_conversation_info.sandbox_id),
app_conversation_info.sandbox_id,
sandbox = await sandbox_service.get_sandbox(
app_conversation_info.sandbox_id
)
try:
running_sandbox = ensure_running_sandbox(
sandbox, app_conversation_info.sandbox_id
)
except RuntimeError as e:
if sandbox and sandbox.status == SandboxStatus.PAUSED:
await sandbox_service.resume_sandbox(
app_conversation_info.sandbox_id
)
running_sandbox = ensure_running_sandbox(
sandbox, app_conversation_info.sandbox_id
)
else:
raise e
assert (
sandbox.session_api_key is not None
), f'No session API key for sandbox: {sandbox.id}'
running_sandbox.session_api_key is not None
), f'No session API key for sandbox: {running_sandbox.id}'
# 3. Get the agent server URL
agent_server_url = get_agent_server_url_from_sandbox(sandbox)
agent_server_url = get_agent_server_url_from_sandbox(running_sandbox)
# 4. Prepare the message content
user_msg, _ = self._get_instructions(jinja)
# 5. Create the message request
send_message_request = SendMessageRequest(
role='user',
content=[TextContent(text=user_msg)],
run=True
role='user', content=[TextContent(text=user_msg)], run=True
)
# 6. Send the message to the agent server
url = f'{agent_server_url.rstrip("/")}/api/conversations/{UUID(self.conversation_id)}/events'
headers = {'X-Session-API-Key': sandbox.session_api_key}
headers = {'X-Session-API-Key': running_sandbox.session_api_key}
payload = send_message_request.model_dump()
try:

View File

@ -16,6 +16,9 @@ from uuid import uuid4
import httpx
import pytest
from integrations.github.github_v1_callback_processor import (
GithubV1CallbackProcessor,
)
from openhands.app_server.app_conversation.app_conversation_models import (
AppConversationInfo,
@ -24,9 +27,6 @@ from openhands.app_server.event_callback.event_callback_models import EventCallb
from openhands.app_server.event_callback.event_callback_result_models import (
EventCallbackResultStatus,
)
from integrations.github.github_v1_callback_processor import (
GithubV1CallbackProcessor,
)
from openhands.app_server.sandbox.sandbox_models import (
ExposedUrl,
SandboxInfo,