Spaces:
Paused
Paused
| """Analysis router.""" | |
| from __future__ import annotations | |
| import logging | |
| from fastapi import APIRouter, Depends, HTTPException | |
| from pydantic import BaseModel, Field | |
| from hermes.agents.orchestrator.agent import OrchestratorAgent | |
| from hermes.api.middleware import sanitize_repo_name | |
| from hermes.core.auth import get_api_key_dependency | |
| logger = logging.getLogger(__name__) | |
| router = APIRouter(dependencies=[Depends(get_api_key_dependency)]) | |
| class RepoAnalysisRequest(BaseModel): | |
| owner: str = Field(..., max_length=100, description="Repository owner") | |
| repo: str = Field(..., max_length=100, description="Repository name") | |
| class AnalysisResponse(BaseModel): | |
| task_id: str | |
| status: str | |
| title: str | |
| summary: str | |
| findings_count: int | |
| orchestrator = OrchestratorAgent() | |
| async def analyze_repo(request: RepoAnalysisRequest) -> AnalysisResponse: | |
| try: | |
| owner = sanitize_repo_name(request.owner) | |
| repo = sanitize_repo_name(request.repo) | |
| except ValueError as e: | |
| raise HTTPException(status_code=422, detail=str(e)) from e | |
| try: | |
| report = await orchestrator.execute_repo_analysis(owner, repo) | |
| return AnalysisResponse( | |
| task_id=report.id, | |
| status="completed", | |
| title=report.title, | |
| summary=report.summary, | |
| findings_count=len(report.findings), | |
| ) | |
| except Exception as e: | |
| logger.error(f"Analysis failed: {e}", exc_info=True) | |
| raise HTTPException(status_code=500, detail="Repository analysis failed") from e | |