feat: add guided exploration and share user-started MCP backend
This commit is contained in:
1 parent
f86db1ced6
commit
ee256ad7ce
144 files changed
+8625
-2075
No files matched your search
@@ -16,11 +16,13 @@ import asyncio
|
||||
from contextlib import suppress
|
||||
import json
|
||||
from typing import Any
|
||||
from uuid import uuid4
|
||||
from fastapi import APIRouter, HTTPException, Request
|
||||
from fastapi.responses import StreamingResponse
|
||||
from pydantic import BaseModel, Field
|
||||
from artemis.core.diagnostics import readiness_engine
|
||||
from apps.admin_console.services.automation_store import store
|
||||
from apps.admin_console.services.exploration_listing import exploration_metadata
|
||||
from apps.admin_console.services.task_import import execution_title
|
||||
from artemis.runtime import DeviceExecutionLock, device_pool
|
||||
from artemis.runtime.task_control import (
|
||||
@@ -32,22 +34,13 @@ from artemis.runtime.task_control import (
|
||||
request_resume,
|
||||
)
|
||||
|
||||
try:
|
||||
from admin_console.core.state import state
|
||||
from admin_console.database.repositories.session_repository import session_repo
|
||||
from admin_console.schemas.task_schema import RunRequest
|
||||
from admin_console.services.ipc_service import ipc_service
|
||||
from admin_console.services.model_service import model_service
|
||||
from admin_console.services.task_preset_catalog import task_recommendation_engine
|
||||
from admin_console.services.task_queue_service import task_queue_service
|
||||
except ImportError:
|
||||
from apps.admin_console.core.state import state
|
||||
from apps.admin_console.database.repositories.session_repository import session_repo
|
||||
from apps.admin_console.schemas.task_schema import RunRequest
|
||||
from apps.admin_console.services.ipc_service import ipc_service
|
||||
from apps.admin_console.services.model_service import model_service
|
||||
from apps.admin_console.services.task_preset_catalog import task_recommendation_engine
|
||||
from apps.admin_console.services.task_queue_service import task_queue_service
|
||||
from apps.admin_console.core.state import state
|
||||
from apps.admin_console.database.repositories.session_repository import session_repo
|
||||
from apps.admin_console.schemas.task_schema import RunRequest
|
||||
from apps.admin_console.services.ipc_service import ipc_service
|
||||
from apps.admin_console.services.model_service import model_service
|
||||
from apps.admin_console.services.task_preset_catalog import task_recommendation_engine
|
||||
from apps.admin_console.services.task_queue_service import task_queue_service
|
||||
|
||||
|
||||
router = APIRouter(tags=["tasks"])
|
||||
@@ -55,6 +48,7 @@ router = APIRouter(tags=["tasks"])
|
||||
|
||||
class GuidanceRequest(BaseModel):
|
||||
instruction: str = Field(min_length=1, max_length=10000)
|
||||
request_id: str | None = Field(default=None, min_length=1, max_length=200)
|
||||
|
||||
|
||||
def _live_task(session_id: str) -> dict:
|
||||
@@ -77,7 +71,23 @@ def pause_running_task(session_id: str):
|
||||
@router.post("/api/tasks/{session_id}/guide")
|
||||
def guide_running_task(session_id: str, value: GuidanceRequest):
|
||||
_live_task(session_id)
|
||||
guidance = add_instruction(session_id, value.instruction, source="web")
|
||||
from apps.admin_console.services.exploration_service import exploration_service
|
||||
from artemis.exploration.store import ExplorationConflict
|
||||
|
||||
if run := exploration_service.repository.run(session_id):
|
||||
try:
|
||||
guidance = exploration_service.message(
|
||||
run["exploration_id"],
|
||||
value.instruction,
|
||||
value.request_id or str(uuid4()),
|
||||
expected_run_id=session_id,
|
||||
)
|
||||
except ExplorationConflict as exc:
|
||||
raise HTTPException(409, str(exc)) from exc
|
||||
else:
|
||||
guidance = add_instruction(
|
||||
session_id, value.instruction, source="web", instruction_id=value.request_id
|
||||
)
|
||||
if (
|
||||
read_state(session_id).get("status") == "task_paused"
|
||||
or (control_dir(session_id) / "pause.request").exists()
|
||||
@@ -438,10 +448,15 @@ async def get_status():
|
||||
[str(item["session_id"]) for item in [*queue_data, *active_tasks] if item.get("session_id")]
|
||||
)
|
||||
queue_data = [{**item} for item in queue_data]
|
||||
with store.connection() as connection:
|
||||
exploration_runs = exploration_metadata(connection)
|
||||
for item in [*queue_data, *active_tasks]:
|
||||
item.update(exploration_runs.get(str(item.get("session_id")), {}))
|
||||
if job := batch_jobs.get(str(item.get("session_id"))):
|
||||
item["batch_id"] = job.get("batch_id")
|
||||
item["display_name"] = execution_title(job)
|
||||
if item.get("exploration_kind") == "validation" and item.get("exploration_case_name"):
|
||||
item["display_name"] = item["exploration_case_name"]
|
||||
|
||||
if is_running:
|
||||
is_paused = state.is_paused
|
||||
|
||||
Reference in new issue
Block a user