54 lines
1.8 KiB
Python
Raw Permalink Normal View History

2024-06-26 15:45:06 -04:00
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.
from fastapi import (
APIRouter,
2025-01-28 00:34:04 -05:00
Depends,
2024-06-26 15:45:06 -04:00
HTTPException,
)
from fastapi.responses import StreamingResponse
2025-01-25 04:07:53 -05:00
from graphrag_app.logger.load_logger import load_pipeline_logger
from graphrag_app.utils.azure_clients import AzureClientManager
from graphrag_app.utils.common import (
2025-01-28 00:34:04 -05:00
desanitize_name,
2024-06-26 15:45:06 -04:00
sanitize_name,
validate_index_file_exist,
)
graph_route = APIRouter(
prefix="/graph",
tags=["Graph Operations"],
)
@graph_route.get(
2025-01-28 21:20:24 -05:00
"/graphml/{container_name}",
2024-06-26 15:45:06 -04:00
summary="Retrieve a GraphML file of the knowledge graph",
response_description="GraphML file successfully downloaded",
)
2025-01-28 00:34:04 -05:00
async def get_graphml_file(sanitized_container_name: str = Depends(sanitize_name)):
# validate graphml file existence
2024-12-30 01:59:08 -05:00
azure_client_manager = AzureClientManager()
2025-01-17 00:41:37 -05:00
graphml_filename = "graph.graphml"
2024-06-26 15:45:06 -04:00
blob_filepath = f"output/{graphml_filename}" # expected file location of the graph based on the workflow
2025-01-28 00:34:04 -05:00
validate_index_file_exist(sanitized_container_name, blob_filepath)
2024-06-26 15:45:06 -04:00
try:
2024-12-30 01:59:08 -05:00
blob_client = azure_client_manager.get_blob_service_client().get_blob_client(
2025-01-28 00:34:04 -05:00
container=sanitized_container_name, blob=blob_filepath
2024-06-26 15:45:06 -04:00
)
blob_stream = blob_client.download_blob().chunks()
return StreamingResponse(
blob_stream,
media_type="application/octet-stream",
headers={"Content-Disposition": f"attachment; filename={graphml_filename}"},
)
except Exception:
2025-01-21 18:43:55 -05:00
logger = load_pipeline_logger()
2025-01-28 00:34:04 -05:00
original_container_name = desanitize_name(sanitized_container_name)
logger.error("Could not fetch graphml file")
2024-06-26 15:45:06 -04:00
raise HTTPException(
status_code=500,
2025-01-28 00:34:04 -05:00
detail=f"Could not fetch graphml file for '{original_container_name}'.",
2024-06-26 15:45:06 -04:00
)