| """ |
| Skill Agent Router - API Endpoints |
| """ |
| from fastapi import APIRouter, HTTPException |
| from typing import Dict, Any |
| from src.models.agent_models import SkillRequest, SkillResponse, TaskStatus |
| from src.api.agents.skill.orchestrator import SkillOrchestrator |
| from src.api.core.logger import logger |
| import time |
|
|
| router = APIRouter() |
| orchestrator = SkillOrchestrator() |
|
|
|
|
| @router.post("/execute", response_model=SkillResponse) |
| async def execute_skill(request: SkillRequest) -> SkillResponse: |
| """ |
| Execute a skill agent task |
| |
| - **prompt**: The task description |
| - **skill_type**: Type of skill (code_review, bug_detection, documentation, etc.) |
| - **context**: Optional context data |
| - **tools**: Optional list of available tools |
| """ |
| start_time = time.time() |
| |
| try: |
| logger.info(f"Executing skill: {request.skill_type}") |
| |
| result = await orchestrator.execute( |
| prompt=request.prompt, |
| skill_type=request.skill_type, |
| context=request.context, |
| tools=request.tools, |
| ) |
| |
| execution_time = time.time() - start_time |
| |
| return SkillResponse( |
| status=TaskStatus.COMPLETED, |
| result=result, |
| execution_time=execution_time, |
| ) |
| |
| except Exception as e: |
| logger.error(f"Skill execution error: {str(e)}") |
| execution_time = time.time() - start_time |
| |
| return SkillResponse( |
| status=TaskStatus.FAILED, |
| error=str(e), |
| execution_time=execution_time, |
| ) |
|
|
|
|
| @router.get("/types") |
| async def get_skill_types() -> Dict[str, Any]: |
| """Get available skill types""" |
| return { |
| "skills": [ |
| {"id": "code_review", "name": "Code Review", "description": "Review code for issues"}, |
| {"id": "bug_detection", "name": "Bug Detection", "description": "Find bugs in code"}, |
| {"id": "documentation", "name": "Documentation", "description": "Generate documentation"}, |
| {"id": "refactoring", "name": "Refactoring", "description": "Refactor code for better quality"}, |
| ] |
| } |
|
|
|
|
| @router.get("/tools") |
| async def get_available_tools() -> Dict[str, Any]: |
| """Get available tools for skill execution""" |
| return { |
| "tools": [ |
| {"id": "file_reader", "name": "File Reader", "description": "Read files from workspace"}, |
| {"id": "file_writer", "name": "File Writer", "description": "Write files to workspace"}, |
| {"id": "search", "name": "Search", "description": "Search in files"}, |
| {"id": "git", "name": "Git", "description": "Git operations"}, |
| ] |
| } |
|
|