mirror of https://github.com/kortix-ai/suna.git
rem wip
This commit is contained in:
parent
1545af26f6
commit
2819840fb6
|
@ -114,31 +114,6 @@ async def verify_agent_access(agent_id: str, user_id: str):
|
|||
raise HTTPException(status_code=404, detail="Agent not found or access denied")
|
||||
|
||||
|
||||
@router.get("/providers", response_model=List[ProviderResponse])
|
||||
async def get_providers():
|
||||
if not await is_enabled("agent_triggers"):
|
||||
raise HTTPException(status_code=403, detail="Agent triggers are not enabled")
|
||||
|
||||
try:
|
||||
_, _, provider_svc = await get_services()
|
||||
providers = await provider_svc.get_available_providers()
|
||||
|
||||
return [
|
||||
ProviderResponse(
|
||||
provider_id=provider.provider_id,
|
||||
name=provider.name,
|
||||
description=provider.description,
|
||||
trigger_type=provider.trigger_type.value,
|
||||
webhook_enabled=provider.webhook_enabled,
|
||||
setup_required=provider.setup_required,
|
||||
config_schema=provider.config_schema
|
||||
)
|
||||
for provider in providers
|
||||
]
|
||||
except Exception as e:
|
||||
logger.error(f"Error getting providers: {e}")
|
||||
raise HTTPException(status_code=500, detail="Internal server error")
|
||||
|
||||
|
||||
@router.get("/providers/{provider_id}/schema")
|
||||
async def get_provider_schema(provider_id: str):
|
||||
|
|
|
@ -368,143 +368,3 @@ async def execute_agent_workflow(
|
|||
|
||||
|
||||
|
||||
@router.post("/agents/{agent_id}/workflows/{workflow_id}/webhook")
|
||||
async def trigger_workflow_webhook(
|
||||
agent_id: str,
|
||||
workflow_id: str,
|
||||
request: Request
|
||||
):
|
||||
try:
|
||||
logger.info(f"Workflow webhook received for agent {agent_id}, workflow {workflow_id}")
|
||||
body = await request.body()
|
||||
headers = dict(request.headers)
|
||||
|
||||
try:
|
||||
if body:
|
||||
webhook_data = await request.json()
|
||||
else:
|
||||
webhook_data = {}
|
||||
except Exception as e:
|
||||
logger.warning(f"Failed to parse JSON body: {e}")
|
||||
webhook_data = {
|
||||
"raw_body": body.decode('utf-8', errors='ignore'),
|
||||
"content_type": headers.get('content-type', '')
|
||||
}
|
||||
|
||||
webhook_data["webhook_headers"] = headers
|
||||
webhook_data["webhook_timestamp"] = datetime.now(timezone.utc).isoformat()
|
||||
|
||||
db = await get_db_connection()
|
||||
client = await db.client
|
||||
|
||||
workflow_result = await client.table('agent_workflows').select('*').eq('id', workflow_id).eq('agent_id', agent_id).execute()
|
||||
if not workflow_result.data:
|
||||
return JSONResponse(
|
||||
status_code=404,
|
||||
content={"error": "Workflow not found"}
|
||||
)
|
||||
|
||||
workflow = workflow_result.data[0]
|
||||
if workflow['status'] != 'active':
|
||||
return JSONResponse(
|
||||
status_code=400,
|
||||
content={"error": "Workflow is not active"}
|
||||
)
|
||||
|
||||
agent_result = await client.table('agents').select('*, agent_versions!current_version_id(*)').eq('agent_id', agent_id).execute()
|
||||
if not agent_result.data:
|
||||
return JSONResponse(
|
||||
status_code=404,
|
||||
content={"error": "Agent not found"}
|
||||
)
|
||||
|
||||
agent_data = agent_result.data[0]
|
||||
account_id = agent_data['account_id']
|
||||
|
||||
execution_variables = ExecutionVariables(variables={
|
||||
'triggered_by': 'webhook',
|
||||
'webhook_timestamp': webhook_data["webhook_timestamp"],
|
||||
'webhook_source': headers.get('user-agent', 'unknown'),
|
||||
'webhook_ip': headers.get('x-forwarded-for', headers.get('x-real-ip', 'unknown'))
|
||||
})
|
||||
|
||||
trigger_result = TriggerResult(
|
||||
success=True,
|
||||
should_execute_workflow=True,
|
||||
workflow_id=workflow_id,
|
||||
workflow_input=webhook_data,
|
||||
execution_variables=execution_variables
|
||||
)
|
||||
|
||||
trigger_event = TriggerEvent(
|
||||
trigger_id=f"webhook_{workflow_id}_{uuid.uuid4()}",
|
||||
agent_id=agent_id,
|
||||
trigger_type=TriggerType.WEBHOOK,
|
||||
raw_data=webhook_data
|
||||
)
|
||||
|
||||
execution_service = TriggerExecutionService(db)
|
||||
execution_result = await execution_service.execute_trigger_result(
|
||||
agent_id=agent_id,
|
||||
trigger_result=trigger_result,
|
||||
trigger_event=trigger_event
|
||||
)
|
||||
|
||||
if execution_result["success"]:
|
||||
logger.info(f"Workflow webhook execution started: {execution_result}")
|
||||
return JSONResponse(content={
|
||||
"message": f"Workflow '{workflow['name']}' execution started via webhook",
|
||||
"execution_id": execution_result.get("execution_id"),
|
||||
"thread_id": execution_result.get("thread_id"),
|
||||
"agent_run_id": execution_result.get("agent_run_id"),
|
||||
"workflow_id": workflow_id,
|
||||
"agent_id": agent_id,
|
||||
"status": "running"
|
||||
})
|
||||
else:
|
||||
logger.error(f"Workflow webhook execution failed: {execution_result}")
|
||||
return JSONResponse(
|
||||
status_code=500,
|
||||
content={
|
||||
"error": "Failed to start workflow execution",
|
||||
"details": execution_result.get("error", "Unknown error")
|
||||
}
|
||||
)
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Error processing workflow webhook: {e}")
|
||||
import traceback
|
||||
logger.error(f"Traceback: {traceback.format_exc()}")
|
||||
return JSONResponse(
|
||||
status_code=500,
|
||||
content={"error": "Internal server error"}
|
||||
)
|
||||
|
||||
@router.get("/agents/{agent_id}/workflows/{workflow_id}/webhook-url")
|
||||
async def get_workflow_webhook_url(
|
||||
agent_id: str,
|
||||
workflow_id: str,
|
||||
user_id: str = Depends(get_current_user_id_from_jwt),
|
||||
request: Request = None
|
||||
):
|
||||
db = await get_db_connection()
|
||||
client = await db.client
|
||||
|
||||
workflow_result = await client.table('agent_workflows').select('*').eq('id', workflow_id).eq('agent_id', agent_id).execute()
|
||||
if not workflow_result.data:
|
||||
raise HTTPException(status_code=404, detail="Workflow not found")
|
||||
|
||||
agent_result = await client.table('agents').select('account_id').eq('agent_id', agent_id).execute()
|
||||
if not agent_result.data:
|
||||
raise HTTPException(status_code=404, detail="Agent not found")
|
||||
|
||||
base_url = os.getenv("WEBHOOK_BASE_URL", "http://localhost:8000")
|
||||
webhook_url = f"{base_url}/api/workflows/agents/{agent_id}/workflows/{workflow_id}/webhook"
|
||||
|
||||
return {
|
||||
"webhook_url": webhook_url,
|
||||
"workflow_id": workflow_id,
|
||||
"agent_id": agent_id,
|
||||
"workflow_name": workflow_result.data[0]['name'],
|
||||
"status": workflow_result.data[0]['status']
|
||||
}
|
Loading…
Reference in New Issue