Spaces:
Running
Running
| from fastapi import APIRouter, HTTPException, BackgroundTasks, Depends | |
| from typing import List, Optional, Dict | |
| from pydantic import BaseModel | |
| from datetime import datetime | |
| from api.dependencies import simulation_manager | |
| from tinytroupe.simulation_manager import SimulationConfig | |
| router = APIRouter() | |
| class CreateSimulationRequest(BaseModel): | |
| name: str | |
| persona_count: int = 10 | |
| network_type: str = "scale_free" | |
| class RunSimulationRequest(BaseModel): | |
| content: str | |
| class SimulationResponse(BaseModel): | |
| id: str | |
| name: str | |
| status: str | |
| persona_count: int | |
| created_at: datetime | |
| async def create_simulation(request: CreateSimulationRequest): | |
| config = SimulationConfig( | |
| name=request.name, | |
| persona_count=request.persona_count, | |
| network_type=request.network_type | |
| ) | |
| sim = simulation_manager.create_simulation(config) | |
| return SimulationResponse( | |
| id=sim.id, | |
| name=sim.config.name, | |
| status=sim.status, | |
| persona_count=len(sim.personas), | |
| created_at=sim.created_at | |
| ) | |
| async def run_simulation(simulation_id: str, request: RunSimulationRequest): | |
| if simulation_id not in simulation_manager.simulations: | |
| raise HTTPException(status_code=404, detail="Simulation not found") | |
| result = simulation_manager.run_simulation(simulation_id, request.content) | |
| return { | |
| "simulation_id": simulation_id, | |
| "total_reach": result.total_reach, | |
| "engagement_count": len(result.engagements) | |
| } | |