Download server/api/pipeline/api.py from Vishvam10/cloudenv: direct link, hf CLI and curl.
- Browser
- Download file 4.87 kB
-
https://huggingface.co/spaces/Vishvam10/cloudenv/resolve/main/server/api/pipeline/api.py
- Command line
-
hf download hf://spaces/Vishvam10/cloudenv/server/api/pipeline/api.py
-
curl -L -o api.py https://huggingface.co/spaces/Vishvam10/cloudenv/resolve/main/server/api/pipeline/api.py
4.87 kB
| from typing import Any, Dict, List | |
| from cloudenv.server.api.pipeline.schema import ( | |
| CreatePipelineRequest, | |
| UpdatePipelineRequest, | |
| ) | |
| from cloudenv.server.managers.pipeline_manager import PipelineManager | |
| from cloudenv.server.models.pipeline import Pipeline | |
| from cloudenv.server.providers.aws.adapter import AWSAdapter | |
| from fastapi import APIRouter, Depends, HTTPException, Request | |
| router = APIRouter(prefix="/pipelines", tags=["pipelines"]) | |
| def get_pipeline_manager(request: Request) -> PipelineManager: | |
| return request.app.state.pipeline_manager | |
| async def create_pipeline_from_json( | |
| request: Request, | |
| request_data: CreatePipelineRequest, | |
| pipeline_manager: PipelineManager = Depends(get_pipeline_manager), | |
| ) -> Dict[str, str]: | |
| if pipeline_manager.get_pipeline(request_data.pipeline_id): | |
| raise HTTPException( | |
| status_code=400, | |
| detail=f"Pipeline with ID '{request_data.pipeline_id}' already exists", | |
| ) | |
| pipeline = Pipeline(pipeline_id=request_data.pipeline_id) | |
| if request_data.broken_pipeline: | |
| pipeline.add_from_json(request_data.broken_pipeline, kind="broken") | |
| if request_data.ideal_pipeline: | |
| pipeline.add_from_json(request_data.ideal_pipeline, kind="ideal") | |
| pipeline_manager.add_pipeline(pipeline) | |
| aws_adapter: "AWSAdapter" = request.app.state.aws_adapter | |
| try: | |
| pipeline.materialize(aws_adapter, episode_id=pipeline.pipeline_id) | |
| except Exception as e: | |
| raise HTTPException( | |
| status_code=500, | |
| detail=f"Failed to materialize pipeline: {str(e)}", | |
| ) | |
| return { | |
| "pipeline_id": pipeline.pipeline_id, | |
| "message": "Pipeline created and materialized successfully", | |
| } | |
| async def list_pipelines( | |
| pipeline_manager: PipelineManager = Depends(get_pipeline_manager), | |
| ) -> List[Dict]: | |
| pipelines_serialized = [] | |
| for pipeline in pipeline_manager.pipelines.values(): | |
| pipelines_serialized.append( | |
| { | |
| "pipeline_id": pipeline.pipeline_id, | |
| "broken_pipeline": { | |
| k: [n.model_dump() for n in v] | |
| for k, v in pipeline.broken_graph.items() | |
| }, | |
| "ideal_pipeline": { | |
| k: [n.model_dump() for n in v] | |
| for k, v in pipeline.ideal_graph.items() | |
| }, | |
| } | |
| ) | |
| return pipelines_serialized | |
| async def get_pipeline( | |
| pipeline_id: str, | |
| pipeline_manager: PipelineManager = Depends(get_pipeline_manager), | |
| ) -> Dict[str, Any]: | |
| pipeline = pipeline_manager.get_pipeline(pipeline_id) | |
| if not pipeline: | |
| raise HTTPException(status_code=404, detail="Pipeline not found") | |
| return { | |
| "pipeline_id": pipeline.pipeline_id, | |
| "broken_pipeline": { | |
| k: [n.model_dump() for n in v] | |
| for k, v in pipeline.broken_graph.items() | |
| }, | |
| "ideal_pipeline": { | |
| k: [n.model_dump() for n in v] | |
| for k, v in pipeline.ideal_graph.items() | |
| }, | |
| } | |
| async def delete_pipeline( | |
| pipeline_id: str, | |
| pipeline_manager: PipelineManager = Depends(get_pipeline_manager), | |
| ) -> Dict[str, str]: | |
| pipeline = pipeline_manager.get_pipeline(pipeline_id) | |
| if not pipeline: | |
| raise HTTPException(status_code=404, detail="Pipeline not found") | |
| del pipeline_manager.pipelines[pipeline_id] | |
| return {"message": f"Pipeline {pipeline_id} deleted successfully"} | |
| async def update_pipeline( | |
| pipeline_id: str, | |
| request_data: UpdatePipelineRequest, | |
| pipeline_manager: PipelineManager = Depends(get_pipeline_manager), | |
| ) -> Dict[str, str]: | |
| pipeline = pipeline_manager.get_pipeline(pipeline_id) | |
| if not pipeline: | |
| raise HTTPException(status_code=404, detail="Pipeline not found") | |
| pipeline.pipeline_id = request_data.pipeline_id | |
| pipeline_manager.pipelines[request_data.pipeline_id] = pipeline | |
| if pipeline_id != request_data.pipeline_id: | |
| del pipeline_manager.pipelines[pipeline_id] | |
| return { | |
| "pipeline_id": pipeline.pipeline_id, | |
| "message": "Pipeline updated successfully", | |
| } | |
| async def validate_pipeline( | |
| pipeline_id: str, | |
| pipeline_manager: PipelineManager = Depends(get_pipeline_manager), | |
| ) -> Dict[str, Any]: | |
| pipeline = pipeline_manager.get_pipeline(pipeline_id) | |
| if not pipeline: | |
| raise HTTPException(status_code=404, detail="Pipeline not found") | |
| return pipeline_manager.validate_pipeline(pipeline_id) | |