fix: wire suggested task prompts for V1 (#12787)

Co-authored-by: openhands <openhands@all-hands.dev>
This commit is contained in:
Engel Nyst
2026-02-16 23:57:32 +01:00
committed by GitHub
parent a9afafa991
commit b06b9eedac
7 changed files with 207 additions and 6 deletions

View File

@@ -11,7 +11,7 @@ from openhands.app_server.event_callback.event_callback_models import (
EventCallbackProcessor,
)
from openhands.app_server.sandbox.sandbox_models import SandboxStatus
from openhands.integrations.service_types import ProviderType
from openhands.integrations.service_types import ProviderType, SuggestedTask
from openhands.sdk.conversation.state import ConversationExecutionStatus
from openhands.sdk.llm import MetricsSnapshot
from openhands.sdk.plugin import PluginSource
@@ -150,6 +150,7 @@ class AppConversationStartRequest(OpenHandsModel):
selected_repository: str | None = None
selected_branch: str | None = None
git_provider: ProviderType | None = None
suggested_task: SuggestedTask | None = None
title: str | None = None
trigger: ConversationTrigger | None = None
pr_number: list[int] = Field(default_factory=list)

View File

@@ -18,6 +18,7 @@ from openhands.agent_server.models import (
ConversationInfo,
SendMessageRequest,
StartConversationRequest,
TextContent,
)
from openhands.app_server.app_conversation.app_conversation_info_service import (
AppConversationInfoService,
@@ -78,6 +79,7 @@ from openhands.app_server.utils.llm_metadata import (
)
from openhands.experiments.experiment_manager import ExperimentManagerImpl
from openhands.integrations.provider import ProviderType
from openhands.integrations.service_types import SuggestedTask
from openhands.sdk import Agent, AgentContext, LocalWorkspace
from openhands.sdk.llm import LLM
from openhands.sdk.plugin import PluginSource
@@ -85,6 +87,7 @@ from openhands.sdk.secret import LookupSecret, SecretValue, StaticSecret
from openhands.sdk.utils.paging import page_iterator
from openhands.sdk.workspace.remote.async_remote_workspace import AsyncRemoteWorkspace
from openhands.server.types import AppMode
from openhands.storage.data_models.conversation_metadata import ConversationTrigger
from openhands.tools.preset.default import (
get_default_tools,
)
@@ -209,6 +212,8 @@ class LiveStatusAppConversationService(AppConversationServiceBase):
)
self._inherit_configuration_from_parent(request, parent_info)
self._apply_suggested_task(request)
task = AppConversationStartTask(
created_by_user_id=user_id,
request=request,
@@ -569,6 +574,33 @@ class LiveStatusAppConversationService(AppConversationServiceBase):
if not request.llm_model and parent_info.llm_model:
request.llm_model = parent_info.llm_model
def _apply_suggested_task(self, request: AppConversationStartRequest) -> None:
"""Apply suggested task defaults to the start request."""
suggested_task: SuggestedTask | None = request.suggested_task
if not suggested_task:
return
if request.initial_message is not None:
raise ValueError(
'initial_message cannot be provided when suggested_task is present'
)
prompt = suggested_task.get_prompt_for_task()
if not prompt:
raise ValueError(
f'Suggested task returned empty prompt for task type {suggested_task.task_type}'
)
request.initial_message = SendMessageRequest(
role='user',
content=[TextContent(text=prompt)],
)
request.trigger = ConversationTrigger.SUGGESTED_TASK
if not request.selected_repository:
request.selected_repository = suggested_task.repo
if not request.git_provider:
request.git_provider = suggested_task.git_provider
def _compute_plan_path(
self,
working_dir: str,