|
|
@@ -4,15 +4,9 @@ from sqlalchemy.orm import Session
|
|
|
|
|
|
from core_domain import ServiceHealth
|
|
|
|
|
|
-from app.application.services import AgentApplicationService
|
|
|
+from app.application.services import AgentApplicationService, build_agent_application_service
|
|
|
from app.bootstrap.settings import AgentServiceSettings
|
|
|
from app.db.session import get_db
|
|
|
-from app.domain.repositories import (
|
|
|
- AgentDefinitionRepository,
|
|
|
- AgentRunRepository,
|
|
|
- AgentVersionRepository,
|
|
|
-)
|
|
|
-from app.infrastructure.model_gateway_client import ModelGatewayClient
|
|
|
from app.schemas.agent import (
|
|
|
AgentCreateRequest,
|
|
|
AgentResponse,
|
|
|
@@ -22,6 +16,8 @@ from app.schemas.agent import (
|
|
|
AgentRunResponse,
|
|
|
AgentRunStatusUpdateRequest,
|
|
|
AgentStatusUpdateRequest,
|
|
|
+ AgentWorkerExecuteNextRequest,
|
|
|
+ AgentWorkerExecuteNextResponse,
|
|
|
AgentVersionCreateRequest,
|
|
|
AgentVersionResponse,
|
|
|
)
|
|
|
@@ -37,15 +33,7 @@ def get_agent_application_service(
|
|
|
db: Session = Depends(get_db),
|
|
|
settings: AgentServiceSettings = Depends(get_agent_service_settings),
|
|
|
) -> AgentApplicationService:
|
|
|
- return AgentApplicationService(
|
|
|
- agent_repository=AgentDefinitionRepository(db),
|
|
|
- agent_version_repository=AgentVersionRepository(db),
|
|
|
- agent_run_repository=AgentRunRepository(db),
|
|
|
- model_gateway_client=ModelGatewayClient(
|
|
|
- base_url=settings.model_gateway_service_url,
|
|
|
- timeout_seconds=settings.model_gateway_timeout_seconds,
|
|
|
- ),
|
|
|
- )
|
|
|
+ return build_agent_application_service(db=db, settings=settings)
|
|
|
|
|
|
|
|
|
@router.get("/health", response_model=ServiceHealth)
|
|
|
@@ -166,3 +154,29 @@ def execute_agent_run(
|
|
|
model=model_value if isinstance(model_value, str) else None,
|
|
|
dry_run=dry_run_value if isinstance(dry_run_value, bool) else False,
|
|
|
)
|
|
|
+
|
|
|
+
|
|
|
+@router.post("/workers/execute-next", response_model=AgentWorkerExecuteNextResponse)
|
|
|
+def execute_next_worker_task(
|
|
|
+ payload: AgentWorkerExecuteNextRequest,
|
|
|
+ settings: AgentServiceSettings = Depends(get_agent_service_settings),
|
|
|
+ service: AgentApplicationService = Depends(get_agent_application_service),
|
|
|
+) -> AgentWorkerExecuteNextResponse:
|
|
|
+ result = service.execute_next_claimed_agent_run(
|
|
|
+ worker_key=payload.worker_key,
|
|
|
+ lease_seconds=payload.lease_seconds or settings.worker_lease_seconds,
|
|
|
+ dry_run=payload.dry_run if payload.dry_run is not None else settings.worker_dry_run,
|
|
|
+ )
|
|
|
+ if result is None:
|
|
|
+ raise HTTPException(status_code=404, detail="queued agent_run not found")
|
|
|
+
|
|
|
+ entity, released_lease_count = result
|
|
|
+ output_json = entity.output_json or {}
|
|
|
+ model_value = output_json.get("model")
|
|
|
+ dry_run_value = output_json.get("dry_run")
|
|
|
+ return AgentWorkerExecuteNextResponse(
|
|
|
+ run=AgentRunResponse.from_entity(entity),
|
|
|
+ model=model_value if isinstance(model_value, str) else None,
|
|
|
+ dry_run=dry_run_value if isinstance(dry_run_value, bool) else False,
|
|
|
+ released_lease_count=released_lease_count,
|
|
|
+ )
|