Files
GenAIExamples/EdgeCraftRAG/edgecraftrag/api/v1/data.py
Zhu Yongbo c9088eb824 Add EdgeCraftRag as a GenAIExample (#1072)
Signed-off-by: ZePan110 <ze.pan@intel.com>
Signed-off-by: chensuyue <suyue.chen@intel.com>
Signed-off-by: Zhu, Yongbo <yongbo.zhu@intel.com>
Signed-off-by: Wang, Xigui <xigui.wang@intel.com>
Co-authored-by: ZePan110 <ze.pan@intel.com>
Co-authored-by: chen, suyue <suyue.chen@intel.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: xiguiw <111278656+xiguiw@users.noreply.github.com>
Co-authored-by: lvliang-intel <liang1.lv@intel.com>
2024-11-08 21:07:24 +08:00

103 lines
3.3 KiB
Python

# Copyright (C) 2024 Intel Corporation
# SPDX-License-Identifier: Apache-2.0
from edgecraftrag.api_schema import DataIn, FilesIn
from edgecraftrag.context import ctx
from fastapi import FastAPI
data_app = FastAPI()
# Upload a text or files
@data_app.post(path="/v1/data")
async def add_data(request: DataIn):
nodelist = None
docs = []
if request.text is not None:
docs.extend(ctx.get_file_mgr().add_text(text=request.text))
if request.local_path is not None:
docs.extend(ctx.get_file_mgr().add_files(docs=request.local_path))
nodelist = ctx.get_pipeline_mgr().run_data_prepare(docs=docs)
if nodelist is None:
return "Error"
pl = ctx.get_pipeline_mgr().get_active_pipeline()
# TODO: Need bug fix, when node_parser is None
ctx.get_node_mgr().add_nodes(pl.node_parser.idx, nodelist)
return "Done"
# Upload files by a list of file_path
@data_app.post(path="/v1/data/files")
async def add_files(request: FilesIn):
nodelist = None
docs = []
if request.local_paths is not None:
docs.extend(ctx.get_file_mgr().add_files(docs=request.local_paths))
nodelist = ctx.get_pipeline_mgr().run_data_prepare(docs=docs)
if nodelist is None:
return "Error"
pl = ctx.get_pipeline_mgr().get_active_pipeline()
# TODO: Need bug fix, when node_parser is None
ctx.get_node_mgr().add_nodes(pl.node_parser.idx, nodelist)
return "Done"
# GET files
@data_app.get(path="/v1/data/files")
async def get_files():
return ctx.get_file_mgr().get_files()
# GET a file
@data_app.get(path="/v1/data/files")
async def get_file_docs(name):
return ctx.get_file_mgr().get_docs_by_file(name)
# DELETE a file
@data_app.delete(path="/v1/data/files/{name}")
async def delete_file(name):
if ctx.get_file_mgr().del_file(name):
# TODO: delete the nodes related to the file
all_docs = ctx.get_file_mgr().get_all_docs()
nodelist = ctx.get_pipeline_mgr().run_data_prepare(docs=all_docs)
if nodelist is None:
return "Error"
pl = ctx.get_pipeline_mgr().get_active_pipeline()
ctx.get_node_mgr().del_nodes_by_np_idx(pl.node_parser.idx)
ctx.get_node_mgr().add_nodes(pl.node_parser.idx, nodelist)
return f"File {name} is deleted"
else:
return f"File {name} not found"
# UPDATE a file
@data_app.patch(path="/v1/data/files/{name}")
async def update_file(name, request: DataIn):
# 1. Delete
if ctx.get_file_mgr().del_file(name):
# 2. Add
docs = []
if request.text is not None:
docs.extend(ctx.get_file_mgr().add_text(text=request.text))
if request.local_path is not None:
docs.extend(ctx.get_file_mgr().add_files(docs=request.local_path))
# 3. Re-run the pipeline
# TODO: update the nodes related to the file
all_docs = ctx.get_file_mgr().get_all_docs()
nodelist = ctx.get_pipeline_mgr().run_data_prepare(docs=all_docs)
if nodelist is None:
return "Error"
pl = ctx.get_pipeline_mgr().get_active_pipeline()
ctx.get_node_mgr().del_nodes_by_np_idx(pl.node_parser.idx)
ctx.get_node_mgr().add_nodes(pl.node_parser.idx, nodelist)
return f"File {name} is updated"
else:
return f"File {name} not found"