From beceaf29d3aabf37e0a756606ba34637b34b0bdc Mon Sep 17 00:00:00 2001 From: mountain Date: Fri, 8 Nov 2024 11:41:21 +0800 Subject: [PATCH] support graphrag v0.4.0 --- Dockerfile | 25 ++ LICENSE | 1 + README.md | 107 +++++++ .../structured_search/drift_search/action.py | 5 +- .../structured_search/drift_search/primer.py | 3 +- .../global_search/map_system_prompt.py | 12 +- .../global_search/reduce_system_prompt.py | 8 +- .../local_search/system_prompt.py | 35 +-- requirements.txt | 118 +++++++ scripts/neo4jvisualization.py | 167 ++++++++++ webserver/__init__.py | 0 webserver/configs/__init__.py | 3 + webserver/configs/settings.py | 74 +++++ webserver/gtypes/__init__.py | 3 + webserver/gtypes/chat_request.py | 70 +++++ webserver/gtypes/chat_result.py | 15 + webserver/main.py | 290 ++++++++++++++++++ webserver/search/__init__.py | 3 + webserver/search/globalsearch.py | 80 +++++ webserver/search/indexdata.py | 81 +++++ webserver/search/localsearch.py | 225 ++++++++++++++ webserver/static/wechat_qr_code.png | Bin 0 -> 5910666 bytes webserver/templates/claims_template.html | 36 +++ webserver/templates/entities_template.html | 41 +++ webserver/templates/index.html | 95 ++++++ .../templates/relationships_template.html | 38 +++ webserver/templates/reports_template.html | 38 +++ webserver/templates/sources_template.html | 38 +++ webserver/utils/__init__.py | 1 + webserver/utils/consts.py | 16 + webserver/utils/refer.py | 28 ++ 31 files changed, 1613 insertions(+), 43 deletions(-) create mode 100644 Dockerfile create mode 100644 requirements.txt create mode 100644 scripts/neo4jvisualization.py create mode 100644 webserver/__init__.py create mode 100644 webserver/configs/__init__.py create mode 100644 webserver/configs/settings.py create mode 100644 webserver/gtypes/__init__.py create mode 100644 webserver/gtypes/chat_request.py create mode 100644 webserver/gtypes/chat_result.py create mode 100644 webserver/main.py create mode 100644 webserver/search/__init__.py create mode 100644 webserver/search/globalsearch.py create mode 100644 webserver/search/indexdata.py create mode 100644 webserver/search/localsearch.py create mode 100644 webserver/static/wechat_qr_code.png create mode 100644 webserver/templates/claims_template.html create mode 100644 webserver/templates/entities_template.html create mode 100644 webserver/templates/index.html create mode 100644 webserver/templates/relationships_template.html create mode 100644 webserver/templates/reports_template.html create mode 100644 webserver/templates/sources_template.html create mode 100644 webserver/utils/__init__.py create mode 100644 webserver/utils/consts.py create mode 100644 webserver/utils/refer.py diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000..cac78559d6 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,25 @@ +FROM python:3.10-slim-buster + +ENV PYTHONDONTWRITEBYTECODE 1 +ENV PYTHONUNBUFFERED 1 +ENV CARGO_HOME=/root/.cargo +ENV PATH=$CARGO_HOME/bin:$PATH + +RUN apt update && apt install -y \ + curl \ + build-essential \ + && curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y \ + && cargo --version \ + && rustc --version + +WORKDIR /app + +COPY requirements.txt . + +RUN pip install --no-cache-dir -r requirements.txt + +COPY . . + +EXPOSE 20213 + +CMD ["uvicorn", "webserver.main:app", "--host", "0.0.0.0", "--port", "20213"] diff --git a/LICENSE b/LICENSE index 9e841e7a26..435e5e2180 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,7 @@ MIT License Copyright (c) Microsoft Corporation. + Copyright (c) KylinMountain. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 35f2eb2a1e..eff0cc6e3f 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,110 @@ +# GraphRAG customized by KylinMountain +- I have added websever to support streaming output immediately. +- I have fixed error when using local embedding service like LM Studio +- I have fixed index error after prompt tune +- I have fixed the strategy not loaded when setting entity extraction using NLTK. +- I have added advice question api +- I have added reference link to the entity、report or relationship refered in output, you can access it. +- Support any desktop application or web application compatible with OpenAI SDK. +- Support docker deploy. you can get the docker kylinmountain/graphrag-server:0.3.1 + +# GraphRAG 定制版 +- 我添加了Web服务器,以支持真即时流式输出。 +- 我修复了使用本地嵌入服务(如LM Studio)时的错误。 +- 我修复了提示调整后索引错误的问题。 +- 我修复了在使用NLTK设置实体提取时策略未加载的问题。 +- 我添加了建议问题API。 +- 我添加了实体或者关系等链接到输出中,你可以直接点击访问参考实体、关系、数据源或者报告。 +- 支持任意兼容OpenAI大模型桌面应用或者Web应用UI接入。 +- 增加Docker构建,最新版本0.3.1, kylinmountain/graphrag-server:0.3.1 + +![image](https://github.com/user-attachments/assets/c251d434-4925-4012-88e7-f3b2ff40471f) + + +![image](https://github.com/user-attachments/assets/ab7a8d2e-aeec-4a0c-afb9-97086b9c7b2a) + +# 如何安装How to install +你可以使用Docker安装,也可以拉取本项目使用。You can install by docker or pull this repo. +## 拉取源码 Pull the source code +- 克隆本项目 Clone the repo +``` +git clone https://github.com/KylinMountain/graphrag.git +cd graphrag +``` +- 建立虚拟环境 Create virtual env +``` +conda create -n graphrag python=3.10 +conda activate graphrag +``` +- 安装poetry Install poetry +``` +curl -sSL https://install.python-poetry.org | python3 - +``` +- 安装依赖 Install dependencies +``` +poetry install +pip install -r webserver/requirements.txt +``` +或者 or +``` +pip install -r requirements.txt +``` +- 初始化GraphRAG Initialize GraphRAG +``` +poetry run poe index --init --root . +# 或者 or +python -m graphrag.index --init --root . +``` +- 创建input文件夹 Create Input Foler +``` +mkdir input +``` +- 配置settings.yaml Config settings.yaml +按照GraphRAG官方配置文档配置 [GraphRAG Configuration](https://microsoft.github.io/graphrag/posts/config/json_yaml/) +- 配置webserver Config webserver + +你可能需要配置以下设置,但默认即可支持本地运行。 You may need config the following item, but you can use the default param. +```yaml + server_host: str = "http://localhost" + server_port: int = 20213 + data: str = ( + "./output" + ) + lancedb_uri: str = ( + "./lancedb" + ) +``` +- 启动web serevr +```bash +python -m webserver.main +``` +更多的参考配置,可以访问[公众号文章](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzI0OTAzNTEwMw==&action=getalbum&album_id=3429606151455670272&uin=&key=&devicetype=iMac+MacBookPro17%2C1+OSX+OSX+14.4+build(23E214)&version=13080710&lang=zh_CN&nettype=WIFI&ascene=0&fontScale=100)和[B站视频](https://www.bilibili.com/video/BV113v8e6EZn) + +## 使用Docker安装 Install by docker +- 拉取镜像 pull the docker image +``` +docker pull kylinmountain/graphrag-server:0.3.1 +``` +启动 Start +在启动前 你可以创建output、input、prompts和settings.yaml等目录或者文件 +Before start, you can create output、input、prompts and settings.yaml etc. +``` +docker run -v ./output:/app/output \ + -v ./input:/app/input \ + -v ./prompts:/app/prompts \ + -v ./settings.yaml:/app/settings.yaml \ + -v ./lancedb:/app/lancedb -p 20213:20213 kylinmountain/graphrag-server:0.3.1 + +``` +- 索引 Index +``` +docker run kylinmountain/graphrag-server:0.3.1 python -m graphrag.index --root . +``` + + + + +------- # GraphRAG 👉 [Use the GraphRAG Accelerator solution](https://github.com/Azure-Samples/graphrag-accelerator)
diff --git a/graphrag/query/structured_search/drift_search/action.py b/graphrag/query/structured_search/drift_search/action.py index 6c6405174c..3684105a49 100644 --- a/graphrag/query/structured_search/drift_search/action.py +++ b/graphrag/query/structured_search/drift_search/action.py @@ -7,6 +7,7 @@ import logging from typing import Any +from graphrag.llm.openai.utils import try_parse_json_object from graphrag.query.llm.text_utils import num_tokens log = logging.getLogger(__name__) @@ -71,7 +72,7 @@ async def asearch(self, search_engine: Any, global_query: str, scorer: Any = Non ) try: - response = json.loads(search_result.response) + _, response = try_parse_json_object(search_result.response) except json.JSONDecodeError: error_message = "Failed to parse search response" log.exception("%s: %s", error_message, search_result.response) @@ -198,7 +199,7 @@ def from_primer_response( # If response is a string, attempt to parse as JSON if isinstance(response, str): try: - parsed_response = json.loads(response) + _, parsed_response = try_parse_json_object(response) if isinstance(parsed_response, dict): return cls.from_primer_response(query, parsed_response) error_message = "Parsed response must be a dictionary." diff --git a/graphrag/query/structured_search/drift_search/primer.py b/graphrag/query/structured_search/drift_search/primer.py index 1a3d7b27df..064070afc0 100644 --- a/graphrag/query/structured_search/drift_search/primer.py +++ b/graphrag/query/structured_search/drift_search/primer.py @@ -14,6 +14,7 @@ from tqdm.asyncio import tqdm_asyncio from graphrag.config.models.drift_config import DRIFTSearchConfig +from graphrag.llm.openai.utils import try_parse_json_object from graphrag.model import CommunityReport from graphrag.query.llm.base import BaseTextEmbedding from graphrag.query.llm.oai.chat_openai import ChatOpenAI @@ -139,7 +140,7 @@ async def decompose_query( messages, response_format={"type": "json_object"} ) - parsed_response = json.loads(response) + _, parsed_response = try_parse_json_object(response) token_ct = num_tokens(prompt + response, self.token_encoder) return parsed_response, token_ct diff --git a/graphrag/query/structured_search/global_search/map_system_prompt.py b/graphrag/query/structured_search/global_search/map_system_prompt.py index db1a649df3..39a2718405 100644 --- a/graphrag/query/structured_search/global_search/map_system_prompt.py +++ b/graphrag/query/structured_search/global_search/map_system_prompt.py @@ -23,22 +23,21 @@ The response should be JSON formatted as follows: {{ "points": [ - {{"description": "Description of point 1 [Data: Reports (report ids)]", "score": score_value}}, - {{"description": "Description of point 2 [Data: Reports (report ids)]", "score": score_value}} + {{"description": "Description of point 1 [^Data:Reports(report id)][^Data:Reports(report id)]", "score": score_value}}, + {{"description": "Description of point 2 [^Data:Reports(report id)][^Data:Reports(report id)]", "score": score_value}} ] }} The response shall preserve the original meaning and use of modal verbs such as "shall", "may" or "will". Points supported by data should list the relevant reports as references as follows: -"This is an example sentence supported by data references [Data: Reports (report ids)]" +"This is an example sentence supported by data references [^Data:Reports(report id)][^Data:Reports(report id)]" **Do not list more than 5 record ids in a single reference**. Instead, list the top 5 most relevant record ids and add "+more" to indicate that there are more. For example: -"Person X is the owner of Company Y and subject to many allegations of wrongdoing [Data: Reports (2, 7, 64, 46, 34, +more)]. He is also CEO of company X [Data: Reports (1, 3)]" - -where 1, 2, 3, 7, 34, 46, and 64 represent the id (not the index) of the relevant data report in the provided tables. +"Person X is the owner of Company Y and subject to many allegations of wrongdoing [^Data:Reports(2)] [^Data:Reports(7)] [^Data:Reports(34)] [^Data:Reports(46)] [^Data:Reports(64,+more)]. He is also CEO of company X [^Data:Reports(1)] [^Data:Reports(3)]" +where 1, 2, 3, 7, 34, 46, and 64 represent the id (not the index) of the relevant data record. Do not include information where the supporting evidence for it is not provided. @@ -80,3 +79,4 @@ ] }} """ + diff --git a/graphrag/query/structured_search/global_search/reduce_system_prompt.py b/graphrag/query/structured_search/global_search/reduce_system_prompt.py index 701717817c..6b3a591be7 100644 --- a/graphrag/query/structured_search/global_search/reduce_system_prompt.py +++ b/graphrag/query/structured_search/global_search/reduce_system_prompt.py @@ -25,11 +25,11 @@ The response should also preserve all the data references previously included in the analysts' reports, but do not mention the roles of multiple analysts in the analysis process. -**Do not list more than 5 record ids in a single reference**. Instead, list the top 5 most relevant record ids and add "+more" to indicate that there are more. +**References should be listed with a single record ID per citation**, with each citation containing only one record ID. For example, [^Data:Relationships(38)] [^Data:Relationships(55)], instead of [^Data:Relationships(38, 55)]. For example: -"Person X is the owner of Company Y and subject to many allegations of wrongdoing [Data: Reports (2, 7, 34, 46, 64, +more)]. He is also CEO of company X [Data: Reports (1, 3)]" +"Person X is the owner of Company Y and subject to many allegations of wrongdoing [^Data:Reports(2)] [^Data:Reports(7)] [^Data:Reports(34)] [^Data:Reports(46)] [^Data:Reports(64,+more)]. He is also CEO of company X [^Data:Reports(1)] [^Data:Reports(3)]" where 1, 2, 3, 7, 34, 46, and 64 represent the id (not the index) of the relevant data record. @@ -60,11 +60,11 @@ The response should also preserve all the data references previously included in the analysts' reports, but do not mention the roles of multiple analysts in the analysis process. -**Do not list more than 5 record ids in a single reference**. Instead, list the top 5 most relevant record ids and add "+more" to indicate that there are more. +**References should be listed with a single record ID per citation**, with each citation containing only one record ID. For example, [^Data:Relationships(38)] [^Data:Relationships(55)], instead of [^Data:Relationships(38, 55)]. For example: -"Person X is the owner of Company Y and subject to many allegations of wrongdoing [Data: Reports (2, 7, 34, 46, 64, +more)]. He is also CEO of company X [Data: Reports (1, 3)]" +"Person X is the owner of Company Y and subject to many allegations of wrongdoing [^Data:Reports(2)] [^Data:Reports(7)] [^Data:Reports(34)] [^Data:Reports(46)] [^Data:Reports(64,+more)]. He is also CEO of company X [^Data:Reports(1)] [^Data:Reports(3)]" where 1, 2, 3, 7, 34, 46, and 64 represent the id (not the index) of the relevant data record. diff --git a/graphrag/query/structured_search/local_search/system_prompt.py b/graphrag/query/structured_search/local_search/system_prompt.py index 70b1d12fc3..73253dba53 100644 --- a/graphrag/query/structured_search/local_search/system_prompt.py +++ b/graphrag/query/structured_search/local_search/system_prompt.py @@ -17,13 +17,15 @@ Points supported by data should list their data references as follows: -"This is an example sentence supported by multiple data references [Data: (record ids); (record ids)]." +"This is an example sentence supported by multiple data references [^Data:(record id)] [^Data:(record id)]." -Do not list more than 5 record ids in a single reference. Instead, list the top 5 most relevant record ids and add "+more" to indicate that there are more. +The should be one of Entities, Relationships, Claims, Sources, Reports. + +**References should be listed with a single record ID per citation**, with each citation containing only one record ID. For example, [^Data:Relationships(38)] [^Data:Relationships(55)], instead of [^Data:Relationships(38, 55)]. For example: -"Person X is the owner of Company Y and subject to many allegations of wrongdoing [Data: Sources (15, 16), Reports (1), Entities (5, 7); Relationships (23); Claims (2, 7, 34, 46, 64, +more)]." +"Person X is the owner of Company Y and subject to many allegations of wrongdoing [^Data:Sources(15)] [^Data:Sources(16)] [^Data:Reports(1)] [^Data:Entities(5)] [^Data:Entities(7)] [^Data:Relationships(23)] [^Data:Claims(2)] [^Data:Claims(7)] [^Data:Claims(34)] [^Data:Claims(46)] [^Data:Claims(64,+more)]." where 15, 16, 1, 5, 7, 23, 2, 7, 34, 46, and 64 represent the id (not the index) of the relevant data record. @@ -39,31 +41,4 @@ {context_data} - ----Goal--- - -Generate a response of the target length and format that responds to the user's question, summarizing all information in the input data tables appropriate for the response length and format, and incorporating any relevant general knowledge. - -If you don't know the answer, just say so. Do not make anything up. - -Points supported by data should list their data references as follows: - -"This is an example sentence supported by multiple data references [Data: (record ids); (record ids)]." - -Do not list more than 5 record ids in a single reference. Instead, list the top 5 most relevant record ids and add "+more" to indicate that there are more. - -For example: - -"Person X is the owner of Company Y and subject to many allegations of wrongdoing [Data: Sources (15, 16), Reports (1), Entities (5, 7); Relationships (23); Claims (2, 7, 34, 46, 64, +more)]." - -where 15, 16, 1, 5, 7, 23, 2, 7, 34, 46, and 64 represent the id (not the index) of the relevant data record. - -Do not include information where the supporting evidence for it is not provided. - - ----Target response length and format--- - -{response_type} - -Add sections and commentary to the response as appropriate for the length and format. Style the response in markdown. """ diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000000..a115cfbdfd --- /dev/null +++ b/requirements.txt @@ -0,0 +1,118 @@ +aiofiles==24.1.0 ; python_version >= "3.10" and python_version < "3.13" +aiolimiter==1.1.0 ; python_version >= "3.10" and python_version < "3.13" +annotated-types==0.7.0 ; python_version >= "3.10" and python_version < "3.13" +anyio==4.6.2.post1 ; python_version >= "3.10" and python_version < "3.13" +anytree==2.12.1 ; python_version >= "3.10" and python_version < "3.13" +asttokens==2.4.1 ; python_version >= "3.10" and python_version < "3.13" +attrs==24.2.0 ; python_version >= "3.10" and python_version < "3.13" +autograd==1.7.0 ; python_version >= "3.10" and python_version < "3.13" +azure-common==1.1.28 ; python_version >= "3.10" and python_version < "3.13" +azure-core==1.32.0 ; python_version >= "3.10" and python_version < "3.13" +azure-identity==1.19.0 ; python_version >= "3.10" and python_version < "3.13" +azure-search-documents==11.5.2 ; python_version >= "3.10" and python_version < "3.13" +azure-storage-blob==12.23.1 ; python_version >= "3.10" and python_version < "3.13" +beartype==0.18.5 ; python_version >= "3.10" and python_version < "3.13" +cachetools==5.5.0 ; python_version >= "3.10" and python_version < "3.13" +certifi==2024.8.30 ; python_version >= "3.10" and python_version < "3.13" +cffi==1.17.1 ; python_version >= "3.10" and python_version < "3.13" and platform_python_implementation != "PyPy" +charset-normalizer==3.4.0 ; python_version >= "3.10" and python_version < "3.13" +click==8.1.7 ; python_version >= "3.10" and python_version < "3.13" +colorama==0.4.6 ; python_version >= "3.10" and python_version < "3.13" and platform_system == "Windows" +contourpy==1.3.0 ; python_version >= "3.10" and python_version < "3.13" +cryptography==43.0.3 ; python_version >= "3.10" and python_version < "3.13" +cycler==0.12.1 ; python_version >= "3.10" and python_version < "3.13" +datashaper==0.0.49 ; python_version >= "3.10" and python_version < "3.13" +decorator==5.1.1 ; python_version >= "3.10" and python_version < "3.13" +deprecation==2.1.0 ; python_version >= "3.10" and python_version < "3.13" +devtools==0.12.2 ; python_version >= "3.10" and python_version < "3.13" +diskcache==5.6.3 ; python_version >= "3.10" and python_version < "3.13" +distro==1.9.0 ; python_version >= "3.10" and python_version < "3.13" +environs==11.0.0 ; python_version >= "3.10" and python_version < "3.13" +exceptiongroup==1.2.2 ; python_version >= "3.10" and python_version < "3.11" +executing==2.1.0 ; python_version >= "3.10" and python_version < "3.13" +fonttools==4.54.1 ; python_version >= "3.10" and python_version < "3.13" +future==1.0.0 ; python_version >= "3.10" and python_version < "3.13" +gensim==4.3.3 ; python_version >= "3.10" and python_version < "3.13" +graspologic-native==1.2.1 ; python_version >= "3.10" and python_version < "3.13" +graspologic==3.4.1 ; python_version >= "3.10" and python_version < "3.13" +h11==0.14.0 ; python_version >= "3.10" and python_version < "3.13" +httpcore==1.0.6 ; python_version >= "3.10" and python_version < "3.13" +httpx==0.27.2 ; python_version >= "3.10" and python_version < "3.13" +hyppo==0.4.0 ; python_version >= "3.10" and python_version < "3.13" +idna==3.10 ; python_version >= "3.10" and python_version < "3.13" +isodate==0.7.2 ; python_version >= "3.10" and python_version < "3.13" +jiter==0.7.0 ; python_version >= "3.10" and python_version < "3.13" +joblib==1.4.2 ; python_version >= "3.10" and python_version < "3.13" +json-repair==0.30.1 ; python_version >= "3.10" and python_version < "3.13" +jsonschema-specifications==2024.10.1 ; python_version >= "3.10" and python_version < "3.13" +jsonschema==4.23.0 ; python_version >= "3.10" and python_version < "3.13" +kiwisolver==1.4.7 ; python_version >= "3.10" and python_version < "3.13" +lancedb==0.13.0 ; python_version >= "3.10" and python_version < "3.13" +llvmlite==0.43.0 ; python_version >= "3.10" and python_version < "3.13" +markdown-it-py==3.0.0 ; python_version >= "3.10" and python_version < "3.13" +marshmallow==3.23.1 ; python_version >= "3.10" and python_version < "3.13" +matplotlib==3.9.2 ; python_version >= "3.10" and python_version < "3.13" +mdurl==0.1.2 ; python_version >= "3.10" and python_version < "3.13" +msal-extensions==1.2.0 ; python_version >= "3.10" and python_version < "3.13" +msal==1.31.0 ; python_version >= "3.10" and python_version < "3.13" +networkx==3.4.2 ; python_version >= "3.10" and python_version < "3.13" +nltk==3.9.1 ; python_version >= "3.10" and python_version < "3.13" +numba==0.60.0 ; python_version >= "3.10" and python_version < "3.13" +numpy==1.26.4 ; python_version >= "3.10" and python_version < "3.13" +openai==1.54.0 ; python_version >= "3.10" and python_version < "3.13" +overrides==7.7.0 ; python_version >= "3.10" and python_version < "3.13" +packaging==24.1 ; python_version >= "3.10" and python_version < "3.13" +pandas==2.2.3 ; python_version >= "3.10" and python_version < "3.13" +patsy==0.5.6 ; python_version >= "3.10" and python_version < "3.13" +pillow==11.0.0 ; python_version >= "3.10" and python_version < "3.13" +portalocker==2.10.1 ; python_version >= "3.10" and python_version < "3.13" +pot==0.9.4 ; python_version >= "3.10" and python_version < "3.13" +py==1.11.0 ; python_version >= "3.10" and python_version < "3.13" +pyaml-env==1.2.1 ; python_version >= "3.10" and python_version < "3.13" +pyarrow==15.0.2 ; python_version >= "3.10" and python_version < "3.13" +pycparser==2.22 ; python_version >= "3.10" and python_version < "3.13" and platform_python_implementation != "PyPy" +pydantic-core==2.23.4 ; python_version >= "3.10" and python_version < "3.13" +pydantic==2.9.2 ; python_version >= "3.10" and python_version < "3.13" +pygments==2.18.0 ; python_version >= "3.10" and python_version < "3.13" +pyjwt[crypto]==2.9.0 ; python_version >= "3.10" and python_version < "3.13" +pylance==0.17.0 ; python_version >= "3.10" and python_version < "3.13" +pynndescent==0.5.13 ; python_version >= "3.10" and python_version < "3.13" +pyparsing==3.2.0 ; python_version >= "3.10" and python_version < "3.13" +python-dateutil==2.9.0.post0 ; python_version >= "3.10" and python_version < "3.13" +python-dotenv==1.0.1 ; python_version >= "3.10" and python_version < "3.13" +pytz==2024.2 ; python_version >= "3.10" and python_version < "3.13" +pywin32==308 ; python_version >= "3.10" and python_version < "3.13" and platform_system == "Windows" +pyyaml==6.0.2 ; python_version >= "3.10" and python_version < "3.13" +referencing==0.35.1 ; python_version >= "3.10" and python_version < "3.13" +regex==2024.9.11 ; python_version >= "3.10" and python_version < "3.13" +requests==2.32.3 ; python_version >= "3.10" and python_version < "3.13" +retry==0.9.2 ; python_version >= "3.10" and python_version < "3.13" +rich==13.9.4 ; python_version >= "3.10" and python_version < "3.13" +rpds-py==0.20.1 ; python_version >= "3.10" and python_version < "3.13" +scikit-learn==1.5.2 ; python_version >= "3.10" and python_version < "3.13" +scipy==1.12.0 ; python_version >= "3.10" and python_version < "3.13" +seaborn==0.13.2 ; python_version >= "3.10" and python_version < "3.13" +shellingham==1.5.4 ; python_version >= "3.10" and python_version < "3.13" +six==1.16.0 ; python_version >= "3.10" and python_version < "3.13" +smart-open==7.0.5 ; python_version >= "3.10" and python_version < "3.13" +sniffio==1.3.1 ; python_version >= "3.10" and python_version < "3.13" +statsmodels==0.14.4 ; python_version >= "3.10" and python_version < "3.13" +tenacity==9.0.0 ; python_version >= "3.10" and python_version < "3.13" +threadpoolctl==3.5.0 ; python_version >= "3.10" and python_version < "3.13" +tiktoken==0.7.0 ; python_version >= "3.10" and python_version < "3.13" +tqdm==4.66.6 ; python_version >= "3.10" and python_version < "3.13" +typer==0.12.5 ; python_version >= "3.10" and python_version < "3.13" +typing-extensions==4.12.2 ; python_version >= "3.10" and python_version < "3.13" +tzdata==2024.2 ; python_version >= "3.10" and python_version < "3.13" +umap-learn==0.5.7 ; python_version >= "3.10" and python_version < "3.13" +urllib3==2.2.3 ; python_version >= "3.10" and python_version < "3.13" +wrapt==1.16.0 ; python_version >= "3.10" and python_version < "3.13" + +#graphrag web server requirements +pydantic_settings==2.3.4 +uvicorn~=0.30.4 +fastapi~=0.103.0 +jinja2~=3.1.4 +aiocache~=0.12.2 +milvus-model~=0.2.5 +python-multipart~=0.0.9 \ No newline at end of file diff --git a/scripts/neo4jvisualization.py b/scripts/neo4jvisualization.py new file mode 100644 index 0000000000..40fbfd5120 --- /dev/null +++ b/scripts/neo4jvisualization.py @@ -0,0 +1,167 @@ +import os +import time + +import pandas as pd +from neo4j import GraphDatabase + +NEO4J_URI = "neo4j://localhost" # or neo4j+s://xxxx.databases.neo4j.io +NEO4J_USERNAME = "neo4j" +NEO4J_PASSWORD = "password" +NEO4J_DATABASE = "neo4j" + +# Create a Neo4j driver +driver = GraphDatabase.driver(NEO4J_URI, auth=(NEO4J_USERNAME, NEO4J_PASSWORD)) + +GRAPHRAG_FOLDER = os.path.join("..", "output", "20240802-112937", "artifacts") + + +def batched_import(statement, df, batch_size=1000): + """ + Import a dataframe into Neo4j using a batched approach. + Parameters: statement is the Cypher query to execute, df is the dataframe to import, and batch_size is the number of rows to import in each batch. + """ + total = len(df) + start_s = time.time() + for start in range(0, total, batch_size): + batch = df.iloc[start: min(start + batch_size, total)] + result = driver.execute_query("UNWIND $rows AS value " + statement, + rows=batch.to_dict('records'), + database_=NEO4J_DATABASE) + print(result.summary.counters) + print(f'{total} rows in {time.time() - start_s} s.') + return total + + +# create constraints, idempotent operation + +statements = """ +create constraint chunk_id if not exists for (c:__Chunk__) require c.id is unique; +create constraint document_id if not exists for (d:__Document__) require d.id is unique; +create constraint entity_id if not exists for (c:__Community__) require c.community is unique; +create constraint entity_id if not exists for (e:__Entity__) require e.id is unique; +create constraint entity_title if not exists for (e:__Entity__) require e.name is unique; +create constraint entity_title if not exists for (e:__Covariate__) require e.title is unique; +create constraint related_id if not exists for ()-[rel:RELATED]->() require rel.id is unique; +""".split(";") + +for statement in statements: + if len((statement or "").strip()) > 0: + print(statement) + driver.execute_query(statement) + +doc_df = pd.read_parquet(os.path.join(GRAPHRAG_FOLDER, "create_final_documents.parquet"), columns=["id", "title"]) +doc_df.head(2) + +# import documents +statement = """ +MERGE (d:__Document__ {id:value.id}) +SET d += value {.title} +""" + +batched_import(statement, doc_df) + +text_df = pd.read_parquet(os.path.join(GRAPHRAG_FOLDER, "create_final_text_units.parquet"), + columns=["id", "text", "n_tokens", "document_ids"]) +text_df.head(2) + +statement = """ +MERGE (c:__Chunk__ {id:value.id}) +SET c += value {.text, .n_tokens} +WITH c, value +UNWIND value.document_ids AS document +MATCH (d:__Document__ {id:document}) +MERGE (c)-[:PART_OF]->(d) +""" + +batched_import(statement, text_df) + +entity_df = pd.read_parquet(os.path.join(GRAPHRAG_FOLDER, "create_final_entities.parquet"), + columns=["name", "type", "description", "human_readable_id", "id", "description_embedding", + "text_unit_ids"]) +entity_df.head(2) + +entity_statement = """ +MERGE (e:__Entity__ {id:value.id}) +SET e += value {.human_readable_id, .description, name:replace(value.name,'"','')} +WITH e, value +CALL db.create.setNodeVectorProperty(e, "description_embedding", value.description_embedding) +CALL apoc.create.addLabels(e, case when coalesce(value.type,"") = "" then [] else [apoc.text.upperCamelCase(replace(value.type,'"',''))] end) yield node +UNWIND value.text_unit_ids AS text_unit +MATCH (c:__Chunk__ {id:text_unit}) +MERGE (c)-[:HAS_ENTITY]->(e) +""" + +batched_import(entity_statement, entity_df) + +rel_df = pd.read_parquet(os.path.join(GRAPHRAG_FOLDER, "create_final_relationships.parquet"), + columns=["source", "target", "id", "rank", "weight", "human_readable_id", "description", + "text_unit_ids"]) +rel_df.head(2) + +rel_statement = """ + MATCH (source:__Entity__ {name:replace(value.source,'"','')}) + MATCH (target:__Entity__ {name:replace(value.target,'"','')}) + // not necessary to merge on id as there is only one relationship per pair + MERGE (source)-[rel:RELATED {id: value.id}]->(target) + SET rel += value {.rank, .weight, .human_readable_id, .description, .text_unit_ids} + RETURN count(*) as createdRels +""" + +batched_import(rel_statement, rel_df) + +community_df = pd.read_parquet(os.path.join(GRAPHRAG_FOLDER, "create_final_communities.parquet"), + columns=["id", "level", "title", "text_unit_ids", "relationship_ids"]) + +community_df.head(2) + +statement = """ +MERGE (c:__Community__ {community:value.id}) +SET c += value {.level, .title} +/* +UNWIND value.text_unit_ids as text_unit_id +MATCH (t:__Chunk__ {id:text_unit_id}) +MERGE (c)-[:HAS_CHUNK]->(t) +WITH distinct c, value +*/ +WITH * +UNWIND value.relationship_ids as rel_id +MATCH (start:__Entity__)-[:RELATED {id:rel_id}]->(end:__Entity__) +MERGE (start)-[:IN_COMMUNITY]->(c) +MERGE (end)-[:IN_COMMUNITY]->(c) +RETURn count(distinct c) as createdCommunities +""" + +batched_import(statement, community_df) + +community_report_df = pd.read_parquet(os.path.join(GRAPHRAG_FOLDER, "create_final_community_reports.parquet"), + columns=["id", "community", "level", "title", "summary", "findings", "rank", + "rank_explanation", "full_content"]) +community_report_df.head(2) + +# community_df['findings'][0] + +# import communities +community_statement = """MATCH (c:__Community__ {community: value.community}) +SET c += value {.level, .title, .rank, .rank_explanation, .full_content, .summary} +WITH c, value +UNWIND range(0, size(value.findings)-1) AS finding_idx +WITH c, value, finding_idx, value.findings[finding_idx] as finding +MERGE (c)-[:HAS_FINDING]->(f:Finding {id: finding_idx}) +SET f += finding""" +batched_import(community_statement, community_report_df) + +# cov_df = pd.read_parquet(f'{GRAPHRAG_FOLDER}/create_final_covariates.parquet'), +# # columns=["id","text_unit_id"]) +# cov_df.head(2) +# # Subject id do not match entity ids +# +# +# # import covariates +# cov_statement = """ +# MERGE (c:__Covariate__ {id:value.id}) +# SET c += apoc.map.clean(value, ["text_unit_id", "document_ids", "n_tokens"], [NULL, ""]) +# WITH c, value +# MATCH (ch:__Chunk__ {id: value.text_unit_id}) +# MERGE (ch)-[:HAS_COVARIATE]->(c) +# """ +# batched_import(cov_statement, cov_df) diff --git a/webserver/__init__.py b/webserver/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/webserver/configs/__init__.py b/webserver/configs/__init__.py new file mode 100644 index 0000000000..84a6cc56d6 --- /dev/null +++ b/webserver/configs/__init__.py @@ -0,0 +1,3 @@ +from .settings import settings + +__all__ = ["settings"] diff --git a/webserver/configs/settings.py b/webserver/configs/settings.py new file mode 100644 index 0000000000..6bbc19d18d --- /dev/null +++ b/webserver/configs/settings.py @@ -0,0 +1,74 @@ +import os + +import yaml +from azure.identity import get_bearer_token_provider, DefaultAzureCredential +from dotenv import load_dotenv +from pydantic_settings import BaseSettings + +from graphrag.config import LLMParameters, TextEmbeddingConfig, LocalSearchConfig, GlobalSearchConfig, LLMType +from graphrag.query.llm.oai import OpenaiApiType + + +class Settings(BaseSettings): + server_port: int = 20213 + website_address: str = f"http://127.0.0.1:{server_port}" + cors_allowed_origins: list = ["*"] # Edit the list to restrict access. + data: str = ( + "./output" + ) + llm: LLMParameters + embeddings: TextEmbeddingConfig + global_search: GlobalSearchConfig + local_search: LocalSearchConfig + encoding_model: str = "cl100k_base" + + def is_azure_client(self): + return self.llm.type == LLMType.AzureOpenAIChat or settings.llm.type == LLMType.AzureOpenAI + + def get_api_type(self): + return OpenaiApiType.AzureOpenAI if self.is_azure_client() else OpenaiApiType.OpenAI + + def azure_ad_token_provider(self): + is_azure_client = ( + settings.llm.type == LLMType.AzureOpenAIChat + or settings.llm.type == LLMType.AzureOpenAI + ) + + audience = ( + settings.llm.audience + if settings.llm.audience + else "https://cognitiveservices.azure.com/.default" + ) + + if is_azure_client and not settings.llm.api_key: + return get_bearer_token_provider(DefaultAzureCredential(), audience) + else: + return None + + +def load_settings_from_yaml(file_path: str) -> Settings: + with open(file_path, 'r') as file: + config = yaml.safe_load(file) + llm_config = config['llm'] + embeddings_config = config['embeddings'] + global_search_config = config['global_search'] + local_search_config = config['local_search'] + encoding_model = config['encoding_model'] + + # Manually setting the API keys from environment variables if specified + load_dotenv() + llm_params = LLMParameters(**llm_config) + llm_params.api_key = os.environ.get("GRAPHRAG_API_KEY", llm_config['api_key']) + text_embedding = TextEmbeddingConfig(**embeddings_config) + text_embedding.llm.api_key = os.environ.get("GRAPHRAG_API_KEY", embeddings_config['llm']['api_key']) + + return Settings( + llm=llm_params, + embeddings=text_embedding, + global_search=GlobalSearchConfig(**global_search_config if global_search_config else {}), + local_search=LocalSearchConfig(**local_search_config if local_search_config else {}), + encoding_model=encoding_model + ) + + +settings = load_settings_from_yaml("settings.yaml") diff --git a/webserver/gtypes/__init__.py b/webserver/gtypes/__init__.py new file mode 100644 index 0000000000..01ec5cea18 --- /dev/null +++ b/webserver/gtypes/__init__.py @@ -0,0 +1,3 @@ +from .chat_request import CompletionCreateParamsBase as ChatCompletionRequest +from .chat_result import TypedFuture, QuestionGenResult +from .chat_request import ChatQuestionGen, Model, ModelList diff --git a/webserver/gtypes/chat_request.py b/webserver/gtypes/chat_request.py new file mode 100644 index 0000000000..56c33f429f --- /dev/null +++ b/webserver/gtypes/chat_request.py @@ -0,0 +1,70 @@ +from typing import Optional, Dict, List, Union, Literal, Any + +from pydantic import BaseModel + + +class ChatCompletionMessageParam(BaseModel): + content: str + role: str = "user" + + +class ResponseFormat(BaseModel): + type: str + + +class ChatCompletionStreamOptionsParam(BaseModel): + enable: bool + + +class ChatCompletionToolParam(BaseModel): + name: str + description: str + + +class CompletionCreateParamsBase(BaseModel): + messages: List[ChatCompletionMessageParam] + model: str + frequency_penalty: Optional[float] = None + logit_bias: Optional[Dict[str, int]] = None + logprobs: Optional[bool] = None + max_tokens: Optional[int] = None + n: Optional[int] = None + parallel_tool_calls: bool = False + presence_penalty: Optional[float] = None + response_format: ResponseFormat = ResponseFormat(type="text") + seed: Optional[int] = None + service_tier: Optional[Literal["auto", "default"]] = None + stop: Optional[Union[str, List[str]]] = None + stream: Optional[bool] = False + stream_options: Optional[Dict] = None + temperature: Optional[float] = 0.0 + tools: List[ChatCompletionToolParam] = None + top_logprobs: Optional[int] = None + top_p: Optional[float] = 1.0 + user: Optional[str] = None + + def llm_chat_params(self) -> dict[str, Any]: + return { + "temperature": self.temperature, + "seed": self.seed + } + + +class ChatQuestionGen(BaseModel): + messages: List[ChatCompletionMessageParam] + model: str + max_tokens: Optional[int] = None + temperature: Optional[float] = 0.0 + n: Optional[int] = None + + +class Model(BaseModel): + id: str + object: Literal["model"] + created: int + owned_by: str + + +class ModelList(BaseModel): + object: Literal["list"] = "list" + data: List[Model] diff --git a/webserver/gtypes/chat_result.py b/webserver/gtypes/chat_result.py new file mode 100644 index 0000000000..6bc0889d23 --- /dev/null +++ b/webserver/gtypes/chat_result.py @@ -0,0 +1,15 @@ +import asyncio +from typing import Any + +from pydantic import BaseModel + + +class TypedFuture(asyncio.Future): + pass + + +class QuestionGenResult(BaseModel): + questions: list[str] + completion_time: float + llm_calls: int + prompt_tokens: int diff --git a/webserver/main.py b/webserver/main.py new file mode 100644 index 0000000000..3524e01841 --- /dev/null +++ b/webserver/main.py @@ -0,0 +1,290 @@ +import logging +import os +import time +import uuid + +import tiktoken +from fastapi import FastAPI, HTTPException +from fastapi.encoders import jsonable_encoder +from fastapi.middleware.cors import CORSMiddleware +from fastapi.responses import JSONResponse, HTMLResponse, StreamingResponse +from fastapi.staticfiles import StaticFiles +from jinja2 import Template +from openai.types import CompletionUsage +from openai.types.chat import ChatCompletion, ChatCompletionMessage, ChatCompletionChunk +from openai.types.chat.chat_completion_chunk import Choice, ChoiceDelta + +from graphrag.query.context_builder.conversation_history import ConversationHistory +from graphrag.query.llm.oai import ChatOpenAI, OpenAIEmbedding +from graphrag.query.question_gen.local_gen import LocalQuestionGen +from graphrag.query.structured_search.base import BaseSearch +from graphrag.query.structured_search.drift_search.search import DRIFTSearch +from graphrag.query.structured_search.global_search.search import GlobalSearch +from graphrag.query.structured_search.local_search.search import LocalSearch +from webserver import gtypes +from webserver import search +from webserver import utils +from webserver.configs import settings +from webserver.search.localsearch import build_drift_search_context +from webserver.utils import consts + +app = FastAPI() +app.add_middleware( + CORSMiddleware, + allow_origins=settings.cors_allowed_origins, + allow_credentials=True, + allow_methods=["*"], + allow_headers=["*"], +) +app.mount("/static", StaticFiles(directory="webserver/static"), name="static") + +logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s') +logger = logging.getLogger(__name__) + +llm = ChatOpenAI( + api_key=settings.llm.api_key, + api_base=settings.llm.api_base, + model=settings.llm.model, + api_type=settings.get_api_type(), + max_retries=settings.llm.max_retries, + azure_ad_token_provider=settings.azure_ad_token_provider(), + deployment_name=settings.llm.deployment_name, + api_version=settings.llm.api_version, + organization=settings.llm.organization, + request_timeout=settings.llm.request_timeout, +) + +text_embedder = OpenAIEmbedding( + api_key=settings.embeddings.llm.api_key, + api_base=settings.embeddings.llm.api_base, + api_type=settings.get_api_type(), + api_version=settings.embeddings.llm.api_version, + model=settings.embeddings.llm.model, + max_retries=settings.embeddings.llm.max_retries, + max_tokens=settings.embeddings.llm.max_tokens, + azure_ad_token_provider=settings.azure_ad_token_provider(), + deployment_name=settings.embeddings.llm.deployment_name, + organization=settings.embeddings.llm.organization, + encoding_name=settings.encoding_model, + request_timeout=settings.embeddings.llm.request_timeout, +) + +token_encoder = tiktoken.get_encoding("cl100k_base") + +local_search: LocalSearch +global_search: GlobalSearch +question_gen: LocalQuestionGen + + +@app.on_event("startup") +async def startup_event(): + global local_search + global global_search + global question_gen + local_search = await search.build_local_search_engine(llm, token_encoder=token_encoder) + global_search = await search.build_global_search_engine(llm, token_encoder=token_encoder) + question_gen = await search.build_local_question_gen(llm, token_encoder=token_encoder) + + +@app.get("/") +async def index(): + html_file_path = os.path.join("webserver", "templates", "index.html") + with open(html_file_path, "r", encoding="utf-8") as file: + html_content = file.read() + return HTMLResponse(content=html_content) + + +async def initialize_search(request: gtypes.ChatCompletionRequest, search: BaseSearch, index: str = None): + search.context_builder = await switch_context(index=index) + search.llm_params.update(request.llm_chat_params()) + return search + + +async def handle_sync_response(request, search, conversation_history, drift_search: bool = False): + result = await search.asearch(request.messages[-1].content, conversation_history=conversation_history) + if drift_search: + response = result.response + # context_data = _reformat_context_data(result.context_data) # type: ignore + response = response["nodes"][0]["answer"] + else: + response = result.response + + reference = utils.get_reference(response) + if reference: + response += f"\n{utils.generate_ref_links(reference, request.model)}" + from openai.types.chat.chat_completion import Choice + completion = ChatCompletion( + id=f"chatcmpl-{uuid.uuid4().hex}", + created=int(time.time()), + model=request.model, + object="chat.completion", + choices=[ + Choice( + index=0, + finish_reason="stop", + message=ChatCompletionMessage( + role="assistant", + content=response + ) + ) + ], + usage=CompletionUsage( + completion_tokens=-1, + prompt_tokens=result.prompt_tokens, + total_tokens=-1 + ) + ) + return JSONResponse(content=jsonable_encoder(completion)) + + +async def handle_stream_response(request, search, conversation_history): + async def wrapper_astream_search(): + token_index = 0 + chat_id = f"chatcmpl-{uuid.uuid4().hex}" + full_response = "" + async for token in search.astream_search(request.messages[-1].content, conversation_history): # 调用原始的生成器 + if token_index == 0: + token_index += 1 + continue + + chunk = ChatCompletionChunk( + id=chat_id, + created=int(time.time()), + model=request.model, + object="chat.completion.chunk", + choices=[ + Choice( + index=token_index - 1, + finish_reason=None, + delta=ChoiceDelta( + role="assistant", + content=token + ) + ) + ] + ) + yield f"data: {chunk.json()}\n\n" + token_index += 1 + full_response += token + + content = "" + reference = utils.get_reference(full_response) + if reference: + content = f"\n{utils.generate_ref_links(reference, request.model)}" + finish_reason = 'stop' + chunk = ChatCompletionChunk( + id=chat_id, + created=int(time.time()), + model=request.model, + object="chat.completion.chunk", + choices=[ + Choice( + index=token_index, + finish_reason=finish_reason, + delta=ChoiceDelta( + role="assistant", + # content=result.context_data["entities"].head().to_string() + content=content + ) + ), + ], + ) + yield f"data: {chunk.json()}\n\n" + yield f"data: [DONE]\n\n" + + return StreamingResponse(wrapper_astream_search(), media_type="text/event-stream") + + +@app.post("/v1/chat/completions") +async def chat_completions(request: gtypes.ChatCompletionRequest): + if not local_search or not global_search: + logger.error("graphrag search engines is not initialized") + raise HTTPException(status_code=500, detail="graphrag search engines is not initialized") + + try: + history = request.messages[:-1] + conversation_history = ConversationHistory.from_list([message.dict() for message in history]) + + if request.model == consts.INDEX_GLOBAL: + search_engine = await initialize_search(request, global_search, request.model) + elif request.model == consts.INDEX_LOCAL: + search_engine = await initialize_search(request, local_search, request.model) + elif request.model == consts.INDEX_DRIFT: + context_builder = await build_drift_search_context(llm, settings.data, text_embedder) + drift_search = await search.build_drift_search_engine(llm, context_builder=context_builder, token_encoder=token_encoder) + search_engine = await initialize_search(request, drift_search, request.model) + # due to dirt search engine doesn't support streaming search yet. + return await handle_sync_response(request, search_engine, conversation_history, drift_search=True) + else: + raise NotImplementedError(f"model {request.model} is not supported") + + if not request.stream: + return await handle_sync_response(request, search_engine, conversation_history) + else: + return await handle_stream_response(request, search_engine, conversation_history) + except Exception as e: + logger.error(msg=f"chat_completions error: {e}", exc_info=True) + raise HTTPException(status_code=500, detail=str(e)) + + +@app.post("/v1/advice_questions", response_model=gtypes.QuestionGenResult) +async def get_advice_question(request: gtypes.ChatQuestionGen): + if request.model == consts.INDEX_LOCAL: + local_context = await switch_context(index=request.model) + question_gen.context_builder = local_context + else: + raise NotImplementedError(f"model {request.model} is not supported") + question_history = [message.content for message in request.messages if message.role == "user"] + candidate_questions = await question_gen.agenerate( + question_history=question_history, context_data=None, question_count=5 + ) + # the original generated question is "- what about xxx?" + questions: list[str] = [question.removeprefix("-").strip() for question in candidate_questions.response] + resp = gtypes.QuestionGenResult(questions=questions, + completion_time=candidate_questions.completion_time, + llm_calls=candidate_questions.llm_calls, + prompt_tokens=candidate_questions.prompt_tokens) + return resp + + +@app.get("/v1/models", response_model=gtypes.ModelList) +async def list_models(): + models: list[gtypes.Model] = [ + gtypes.Model(id=consts.INDEX_LOCAL, object="model", created=1644752340, owned_by="graphrag"), + gtypes.Model(id=consts.INDEX_GLOBAL, object="model", created=1644752340, owned_by="graphrag"), + gtypes.Model(id=consts.INDEX_DRIFT, object="model", created=1644752340, owned_by="graphrag")] + return gtypes.ModelList(data=models) + + +@app.get("/v1/references/{index_id}/{datatype}/{id}", response_class=HTMLResponse) +async def get_reference(index_id: str, datatype: str, id: int): + if not os.path.exists(settings.data): + raise HTTPException(status_code=404, detail=f"{index_id} not found") + if datatype not in ["entities", "claims", "sources", "reports", "relationships"]: + raise HTTPException(status_code=404, detail=f"{datatype} not found") + + data = await search.get_index_data(settings.data, datatype, id) + html_file_path = os.path.join("webserver", "templates", f"{datatype}_template.html") + with open(html_file_path, 'r') as file: + html_content = file.read() + template = Template(html_content) + html_content = template.render(data=data) + return HTMLResponse(content=html_content) + + +async def switch_context(index: str): + if index == consts.INDEX_GLOBAL: + context_builder = await search.load_global_context(settings.data, token_encoder) + elif index == consts.INDEX_LOCAL: + context_builder = await search.load_local_context(settings.data, text_embedder, token_encoder) + elif index == consts.INDEX_DRIFT: + context_builder = await build_drift_search_context(llm, settings.data, text_embedder) + else: + raise NotImplementedError(f"{index} is not supported") + return context_builder + + +if __name__ == "__main__": + import uvicorn + + uvicorn.run(app, port=settings.server_port) diff --git a/webserver/search/__init__.py b/webserver/search/__init__.py new file mode 100644 index 0000000000..1a749bd987 --- /dev/null +++ b/webserver/search/__init__.py @@ -0,0 +1,3 @@ +from .localsearch import build_local_question_gen, build_local_search_engine, load_local_context, build_drift_search_engine +from .globalsearch import build_global_search_engine, load_global_context +from .indexdata import get_index_data diff --git a/webserver/search/globalsearch.py b/webserver/search/globalsearch.py new file mode 100644 index 0000000000..3c10f8f6b6 --- /dev/null +++ b/webserver/search/globalsearch.py @@ -0,0 +1,80 @@ +import pandas as pd +import tiktoken + +from graphrag.callbacks.global_search_callbacks import GlobalSearchLLMCallback +from graphrag.query.context_builder.builders import GlobalContextBuilder +from graphrag.query.indexer_adapters import read_indexer_entities, read_indexer_reports +from graphrag.query.llm.base import BaseLLM +from graphrag.query.structured_search.global_search.community_context import ( + GlobalCommunityContext, +) +from graphrag.query.structured_search.global_search.search import GlobalSearch + +from webserver.configs import settings +from webserver.utils import consts + + +async def load_global_context(input_dir: str, + token_encoder: tiktoken.Encoding | None = None) -> GlobalContextBuilder: + final_nodes = pd.read_parquet(f"{input_dir}/{consts.ENTITY_TABLE}.parquet") + final_community_reports = pd.read_parquet(f"{input_dir}/{consts.COMMUNITY_REPORT_TABLE}.parquet") + final_entities = pd.read_parquet(f"{input_dir}/{consts.ENTITY_EMBEDDING_TABLE}.parquet") + + reports = read_indexer_reports(final_community_reports, final_nodes, consts.COMMUNITY_LEVEL) + entities = read_indexer_entities(final_nodes, final_entities, consts.COMMUNITY_LEVEL) + + context_builder = GlobalCommunityContext( + community_reports=reports, + entities=entities, # default to None if you don't want to use community weights for ranking + token_encoder=token_encoder, + ) + return context_builder + + +async def build_global_search_engine(llm: BaseLLM, context_builder=None, callback: GlobalSearchLLMCallback = None, + token_encoder: tiktoken.Encoding | None = None) -> GlobalSearch: + context_builder_params = { + "use_community_summary": False, + "shuffle_data": True, + "include_community_rank": True, + "min_community_rank": 0, + "community_rank_name": "rank", + "include_community_weight": True, + "community_weight_name": "occurrence weight", + "normalize_community_weight": True, + "max_tokens": settings.global_search.max_tokens, + "context_name": "Reports", + } + + map_llm_params = { + "max_tokens": settings.global_search.map_max_tokens, + "temperature": settings.global_search.temperature, + "top_p": settings.global_search.top_p, + "n": settings.global_search.n, + "response_format": {"type": "json_object"}, + } + + reduce_llm_params = { + "max_tokens": settings.global_search.reduce_max_tokens, + "temperature": settings.global_search.temperature, + "top_p": settings.global_search.top_p, + "n": settings.global_search.n, + } + + search_engine = GlobalSearch( + llm=llm, + context_builder=context_builder, + token_encoder=token_encoder, + max_data_tokens=settings.global_search.data_max_tokens, + map_llm_params=map_llm_params, + reduce_llm_params=reduce_llm_params, + allow_general_knowledge=False, + json_mode=settings.llm.model_supports_json, # set this to False if your LLM model does not support JSON mode. + context_builder_params=context_builder_params, + concurrent_coroutines=settings.global_search.concurrency, + callbacks=[callback] if callback else None, + # free form text describing the response type and format, can be anything, + # e.g. prioritized list, single paragraph, multiple paragraphs, multiple-page report + response_type="multiple paragraphs", + ) + return search_engine diff --git a/webserver/search/indexdata.py b/webserver/search/indexdata.py new file mode 100644 index 0000000000..79cafe9429 --- /dev/null +++ b/webserver/search/indexdata.py @@ -0,0 +1,81 @@ +import os +from typing import Optional + +import pandas as pd + +from graphrag.model import Relationship, Covariate, Entity, CommunityReport, TextUnit +from graphrag.query.indexer_adapters import read_indexer_relationships, read_indexer_covariates, read_indexer_entities, \ + read_indexer_reports, read_indexer_text_units +from ..utils import consts + + +async def get_index_data(input_dir: str, datatype: str, id: Optional[int] = None): + if datatype == "entities": + return await get_entity(input_dir, id) + elif datatype == "claims": + return await get_claim(input_dir, id) + elif datatype == "sources": + return await get_source(input_dir, id) + elif datatype == "reports": + return await get_report(input_dir, id) + elif datatype == "relationships": + return await get_relationship(input_dir, id) + else: + raise ValueError(f"Unknown datatype: {datatype}") + + +async def get_entity(input_dir: str, row_id: Optional[int] = None) -> Entity: + entity_df = pd.read_parquet(f"{input_dir}/{consts.ENTITY_TABLE}.parquet") + entity_embedding_df = pd.read_parquet(f"{input_dir}/{consts.ENTITY_EMBEDDING_TABLE}.parquet") + + entities = read_indexer_entities(entity_df, entity_embedding_df, consts.COMMUNITY_LEVEL) + # TODO optimize performance using like database or dict in memory + for entity in entities: + if int(entity.short_id) == row_id: + return entity + raise ValueError(f"Not Found entity id {row_id}") + + +async def get_claim(input_dir: str, row_id: Optional[int] = None) -> Covariate: + covariate_file = f"{input_dir}/{consts.COVARIATE_TABLE}.parquet" + if os.path.exists(covariate_file): + covariate_df = pd.read_parquet(covariate_file) + claims = read_indexer_covariates(covariate_df) + else: + raise ValueError(f"No claims {input_dir} of id {row_id} found") + # TODO optimize performance using like database or dict in memory + for claim in claims: + if int(claim.short_id) == row_id: + return claim + raise ValueError(f"Not Found claim id {row_id}") + + +async def get_source(input_dir: str, row_id: Optional[int] = None) -> TextUnit: + text_unit_df = pd.read_parquet(f"{input_dir}/{consts.TEXT_UNIT_TABLE}.parquet") + text_units = read_indexer_text_units(text_unit_df) + # TODO optimize performance using like database or dict in memory + for text_unit in text_units: + if int(text_unit.short_id) == row_id: + return text_unit + raise ValueError(f"Not Found source id {row_id}") + + +async def get_report(input_dir: str, row_id: Optional[int] = None) -> CommunityReport: + entity_df = pd.read_parquet(f"{input_dir}/{consts.ENTITY_TABLE}.parquet") + report_df = pd.read_parquet(f"{input_dir}/{consts.COMMUNITY_REPORT_TABLE}.parquet") + reports = read_indexer_reports(report_df, entity_df, consts.COMMUNITY_LEVEL) + # TODO optimize performance using like database or dict in memory + for report in reports: + if int(report.short_id) == row_id: + return report + raise ValueError(f"Not Found report id {row_id}") + + +async def get_relationship(input_dir: str, row_id: Optional[int] = None) -> Relationship: + relationship_df = pd.read_parquet(f"{input_dir}/{consts.RELATIONSHIP_TABLE}.parquet") + relationships = read_indexer_relationships(relationship_df) + # TODO optimize performance using like database or dict in memory + for relationship in relationships: + if int(relationship.short_id) == row_id: + return relationship + raise ValueError(f"Not Found relationship id {row_id}") diff --git a/webserver/search/localsearch.py b/webserver/search/localsearch.py new file mode 100644 index 0000000000..2812e5ef71 --- /dev/null +++ b/webserver/search/localsearch.py @@ -0,0 +1,225 @@ +import logging +import os +from pathlib import Path + +import pandas as pd +import tiktoken + +from graphrag.query.context_builder.builders import LocalContextBuilder +from graphrag.query.context_builder.entity_extraction import EntityVectorStoreKey +from graphrag.query.indexer_adapters import ( + read_indexer_covariates, + read_indexer_entities, + read_indexer_relationships, + read_indexer_reports, + read_indexer_text_units, read_indexer_report_embeddings, +) +from graphrag.query.llm.base import BaseLLM, BaseTextEmbedding +from graphrag.query.question_gen.local_gen import LocalQuestionGen +from graphrag.query.structured_search.drift_search.drift_context import DRIFTSearchContextBuilder +from graphrag.query.structured_search.drift_search.search import DRIFTSearch +from graphrag.query.structured_search.local_search.mixed_context import ( + LocalSearchMixedContext, +) +from graphrag.query.structured_search.local_search.search import LocalSearch +from graphrag.vector_stores import VectorStoreType, VectorStoreFactory, BaseVectorStore +from webserver.configs import settings +from webserver.utils import consts + +logger = logging.getLogger(__name__) + + +async def load_local_context(input_dir: str, embedder: BaseTextEmbedding, + token_encoder: tiktoken.Encoding | None = None) -> LocalContextBuilder: + # read nodes table to get community and degree data + entity_df = pd.read_parquet(f"{input_dir}/{consts.ENTITY_TABLE}.parquet") + entity_embedding_df = pd.read_parquet(f"{input_dir}/{consts.ENTITY_EMBEDDING_TABLE}.parquet") + + entities = read_indexer_entities(entity_df, entity_embedding_df, consts.COMMUNITY_LEVEL) + + vector_store_type = settings.embeddings.vector_store.get("type", VectorStoreType.LanceDB) # type: ignore + vector_store_args = settings.embeddings.vector_store + if vector_store_type == VectorStoreType.LanceDB: + db_uri = settings.embeddings.vector_store["db_uri"] # type: ignore + lancedb_dir = Path(settings.data).parent.resolve() / db_uri + vector_store_args["db_uri"] = str(lancedb_dir) # type: ignore + + description_embedding_store = _get_embedding_store( + config_args=vector_store_args, # type: ignore + container_suffix="entity-description", + ) + + relationship_df = pd.read_parquet(f"{input_dir}/{consts.RELATIONSHIP_TABLE}.parquet") + relationships = read_indexer_relationships(relationship_df) + + covariate_file = f"{input_dir}/{consts.COVARIATE_TABLE}.parquet" + if os.path.exists(covariate_file): + covariate_df = pd.read_parquet(covariate_file) + claims = read_indexer_covariates(covariate_df) + covariates = {"claims": claims} + else: + covariates = None + + report_df = pd.read_parquet(f"{input_dir}/{consts.COMMUNITY_REPORT_TABLE}.parquet") + reports = read_indexer_reports(report_df, entity_df, consts.COMMUNITY_LEVEL) + + text_unit_df = pd.read_parquet(f"{input_dir}/{consts.TEXT_UNIT_TABLE}.parquet") + text_units = read_indexer_text_units(text_unit_df) + + context_builder = LocalSearchMixedContext( + community_reports=reports, + text_units=text_units, + entities=entities, + relationships=relationships, + covariates=covariates, + entity_text_embeddings=description_embedding_store, + embedding_vectorstore_key=EntityVectorStoreKey.ID, + # if the vectorstore uses entity title as ids, set this to EntityVectorStoreKey.TITLE + text_embedder=embedder, + token_encoder=token_encoder, + ) + return context_builder + + +def _get_embedding_store( + config_args: dict, + container_suffix: str, +) -> BaseVectorStore: + """Get the embedding description store.""" + vector_store_type = config_args["type"] + collection_name = ( + f"{config_args.get('container_name', 'default')}-{container_suffix}" + ) + embedding_store = VectorStoreFactory.get_vector_store( + vector_store_type=vector_store_type, + kwargs={**config_args, "collection_name": collection_name}, + ) + embedding_store.connect(**config_args) + return embedding_store + + +async def build_local_question_gen(llm: BaseLLM, context_builder: LocalContextBuilder = None, + token_encoder: tiktoken.Encoding | None = None) -> LocalQuestionGen: + local_context_params = { + "text_unit_prop": settings.local_search.text_unit_prop, + "community_prop": settings.local_search.community_prop, + "conversation_history_max_turns": settings.local_search.conversation_history_max_turns, + "conversation_history_user_turns_only": True, + "top_k_mapped_entities": settings.local_search.top_k_entities, + "top_k_relationships": settings.local_search.top_k_relationships, + "include_entity_rank": True, + "include_relationship_weight": True, + "include_community_rank": False, + "return_candidate_context": False, + "embedding_vectorstore_key": EntityVectorStoreKey.ID, + # set this to EntityVectorStoreKey.TITLE if the vectorstore uses entity title as ids + "max_tokens": settings.local_search.max_tokens, + } + + llm_params = { + "max_tokens": settings.local_search.llm_max_tokens, + "temperature": settings.local_search.temperature, + "top_p": settings.local_search.top_p, + "n": settings.local_search.n, + } + + question_generator = LocalQuestionGen( + llm=llm, + context_builder=context_builder, + token_encoder=token_encoder, + llm_params=llm_params, + context_builder_params=local_context_params, + ) + + return question_generator + + +async def build_local_search_engine(llm: BaseLLM, context_builder: LocalContextBuilder = None, + token_encoder: tiktoken.Encoding | None = None) -> LocalSearch: + local_context_params = { + "text_unit_prop": settings.local_search.text_unit_prop, + "community_prop": settings.local_search.community_prop, + "conversation_history_max_turns": settings.local_search.conversation_history_max_turns, + "conversation_history_user_turns_only": True, + "top_k_mapped_entities": settings.local_search.top_k_entities, + "top_k_relationships": settings.local_search.top_k_relationships, + "include_entity_rank": True, + "include_relationship_weight": True, + "include_community_rank": False, + "return_candidate_context": False, + "embedding_vectorstore_key": EntityVectorStoreKey.ID, + # set this to EntityVectorStoreKey.TITLE if the vectorstore uses entity title as ids + "max_tokens": settings.local_search.max_tokens, + } + + llm_params = { + "max_tokens": settings.local_search.llm_max_tokens, + "temperature": settings.local_search.temperature, + "top_p": settings.local_search.top_p, + "n": settings.local_search.n, + } + + search_engine = LocalSearch( + llm=llm, + context_builder=context_builder, + token_encoder=token_encoder, + llm_params=llm_params, + context_builder_params=local_context_params, + response_type="multiple paragraphs", + ) + return search_engine + + +async def build_drift_search_context(llm: BaseLLM, input_dir: str, + embedder: BaseTextEmbedding) -> DRIFTSearchContextBuilder: + # read nodes table to get community and degree data + entity_df = pd.read_parquet(f"{input_dir}/{consts.ENTITY_TABLE}.parquet") + entity_embedding_df = pd.read_parquet(f"{input_dir}/{consts.ENTITY_EMBEDDING_TABLE}.parquet") + entities = read_indexer_entities(entity_df, entity_embedding_df, consts.COMMUNITY_LEVEL) + + relationship_df = pd.read_parquet(f"{input_dir}/{consts.RELATIONSHIP_TABLE}.parquet") + relationships = read_indexer_relationships(relationship_df) + + report_df = pd.read_parquet(f"{input_dir}/{consts.COMMUNITY_REPORT_TABLE}.parquet") + reports = read_indexer_reports(report_df, entity_df, consts.COMMUNITY_LEVEL) + + text_unit_df = pd.read_parquet(f"{input_dir}/{consts.TEXT_UNIT_TABLE}.parquet") + text_units = read_indexer_text_units(text_unit_df) + + # vector store + vector_store_type = settings.embeddings.vector_store.get("type", VectorStoreType.LanceDB) # type: ignore + vector_store_args = settings.embeddings.vector_store + if vector_store_type == VectorStoreType.LanceDB: + db_uri = settings.embeddings.vector_store["db_uri"] # type: ignore + lancedb_dir = Path(settings.data).parent.resolve() / db_uri + vector_store_args["db_uri"] = str(lancedb_dir) # type: ignore + + description_embedding_store = _get_embedding_store( + config_args=vector_store_args, # type: ignore + container_suffix="entity-description", + ) + + full_content_embedding_store = _get_embedding_store( + config_args=vector_store_args, # type: ignore + container_suffix="community-full_content", + ) + read_indexer_report_embeddings(reports, full_content_embedding_store) + + return DRIFTSearchContextBuilder( + chat_llm=llm, + text_embedder=embedder, + entities=entities, + relationships=relationships, + reports=reports, + entity_text_embeddings=description_embedding_store, + text_units=text_units, + ) + + +async def build_drift_search_engine(llm: BaseLLM, context_builder: DRIFTSearchContextBuilder = None, + token_encoder: tiktoken.Encoding | None = None) -> DRIFTSearch: + return DRIFTSearch( + llm=llm, + context_builder=context_builder, + token_encoder=token_encoder, + ) diff --git a/webserver/static/wechat_qr_code.png b/webserver/static/wechat_qr_code.png new file mode 100644 index 0000000000000000000000000000000000000000..970b419fd2e81f405ac0eb546fade90351feefef GIT binary patch literal 5910666 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 MGNYY28mzqk2k>jkvj6}9 literal 0 HcmV?d00001 diff --git a/webserver/templates/claims_template.html b/webserver/templates/claims_template.html new file mode 100644 index 0000000000..65de42d26c --- /dev/null +++ b/webserver/templates/claims_template.html @@ -0,0 +1,36 @@ + + + + Covariate Information + + + +

Claims Information

+ + + + + + + + +
AttributeValue
Subject ID{{ data.subject_id }}
Subject Type{{ data.subject_type }}
Covariate Type{{ data.covariate_type }}
Text Unit IDs{{ data.text_unit_ids }}
Document IDs{{ data.document_ids }}
Attributes{{ data.attributes }}
+ + \ No newline at end of file diff --git a/webserver/templates/entities_template.html b/webserver/templates/entities_template.html new file mode 100644 index 0000000000..c07190c622 --- /dev/null +++ b/webserver/templates/entities_template.html @@ -0,0 +1,41 @@ + + + + Entity Information + + + +

Entity Information

+ + + + + + + + + + + + + +
AttributeValue
Name{{ data.title }}
Type{{ data.type }}
Description{{ data.description }}
Description EmbeddingLength: {{ data.description_embedding | length }}
Name Embedding{{ data.name_embedding }}
Graph Embedding{{ data.graph_embedding }}
Community IDs{{ data.community_ids }}
Text Unit IDs{{ data.text_unit_ids }}
Document IDs{{ data.document_ids }}
Rank{{ data.rank }}
Attributes{{ data.attributes }}
+ + \ No newline at end of file diff --git a/webserver/templates/index.html b/webserver/templates/index.html new file mode 100644 index 0000000000..e4299bb574 --- /dev/null +++ b/webserver/templates/index.html @@ -0,0 +1,95 @@ + + + + GraphRAG Web Server Homepage + + + +
+ + \ No newline at end of file diff --git a/webserver/templates/relationships_template.html b/webserver/templates/relationships_template.html new file mode 100644 index 0000000000..554bcb61f3 --- /dev/null +++ b/webserver/templates/relationships_template.html @@ -0,0 +1,38 @@ + + + + Relationship Information + + + +

Relationship Information

+ + + + + + + + + + +
AttributeValue
Source{{ data.source }}
Target{{ data.target }}
Weight{{ data.weight }}
Description{{ data.description }}
Description Embedding{{ data.description_embedding }}
Text Unit IDs{{ data.text_unit_ids }}
Document IDs{{ data.document_ids }}
Attributes{{ data.attributes }}
+ + \ No newline at end of file diff --git a/webserver/templates/reports_template.html b/webserver/templates/reports_template.html new file mode 100644 index 0000000000..a8c8f70c4b --- /dev/null +++ b/webserver/templates/reports_template.html @@ -0,0 +1,38 @@ + + + + Community Report Information + + + +

Community Report Information

+ + + + + + + + + + +
AttributeValue
Name{{ data.title }}
Community ID{{ data.community_id }}
Summary{{ data.summary }}
Full Content{{ data.full_content }}
Rank{{ data.rank }}
Summary Embedding{{ data.summary_embedding }}
Full Content Embedding{{ data.full_content_embedding }}
Attributes{{ data.attributes }}
+ + \ No newline at end of file diff --git a/webserver/templates/sources_template.html b/webserver/templates/sources_template.html new file mode 100644 index 0000000000..82c8bbf39c --- /dev/null +++ b/webserver/templates/sources_template.html @@ -0,0 +1,38 @@ + + + + Source Information + + + +

Text Unit Information

+ + + + + + + + + + +
AttributeValue
Text{{ data.text }}
Text Embedding{{ data.text_embedding }}
Entity IDs{{ data.entity_ids }}
Relationship IDs{{ data.relationship_ids }}
Covariate IDs{{ data.covariate_ids }}
Number of Tokens{{ data.n_tokens }}
Document IDs{{ data.document_ids }}
Attributes{{ data.attributes }}
+ + \ No newline at end of file diff --git a/webserver/utils/__init__.py b/webserver/utils/__init__.py new file mode 100644 index 0000000000..7524dab6c1 --- /dev/null +++ b/webserver/utils/__init__.py @@ -0,0 +1 @@ +from .refer import get_reference, generate_ref_links \ No newline at end of file diff --git a/webserver/utils/consts.py b/webserver/utils/consts.py new file mode 100644 index 0000000000..93da76e784 --- /dev/null +++ b/webserver/utils/consts.py @@ -0,0 +1,16 @@ +# parquet files generated from indexing pipeline +COMMUNITY_REPORT_TABLE = "create_final_community_reports" +ENTITY_TABLE = "create_final_nodes" +ENTITY_EMBEDDING_TABLE = "create_final_entities" + +# community level in the Leiden community hierarchy from which we will load the community reports +# higher value means we use reports from more fine-grained communities (at the cost of higher computation cost) +COMMUNITY_LEVEL = 2 + +RELATIONSHIP_TABLE = "create_final_relationships" +COVARIATE_TABLE = "create_final_covariates" +TEXT_UNIT_TABLE = "create_final_text_units" + +INDEX_LOCAL = "local" +INDEX_GLOBAL = "global" +INDEX_DRIFT = "drift" diff --git a/webserver/utils/refer.py b/webserver/utils/refer.py new file mode 100644 index 0000000000..5f066570cb --- /dev/null +++ b/webserver/utils/refer.py @@ -0,0 +1,28 @@ +import re +from collections import defaultdict +from typing import Set, Dict + +from webserver.configs import settings + +pattern = re.compile(r'\[\^Data:(\w+?)\((\d+(?:,\d+)*)\)\]') + + +def get_reference(text: str) -> dict: + data_dict = defaultdict(set) + for match in pattern.finditer(text): + key = match.group(1).lower() + value = match.group(2) + + ids = value.replace(" ", "").split(',') + data_dict[key].update(ids) + + return dict(data_dict) + + +def generate_ref_links(data: Dict[str, Set[int]], index_id: str) -> str: + base_url = f"{settings.website_address}/v1/references" + lines = [] + for key, values in data.items(): + for value in values: + lines.append(f'[^Data:{key.capitalize()}({value})]: [{key.capitalize()}: {value}]({base_url}/{index_id}/{key}/{value})') + return "\n".join(lines)
+

GraphRAG Web Server

+
+

邮箱: kose2livs@gmail.com

+

公众号: 深入LLM Agent应用开发

+ 微信公众号二维码 +
+
+

项目介绍:

+
    +
  • 1. 输入输出兼容OpenAI SDK
  • +
  • 2. 支持真流式输出,响应快速方便接入各种UI支持
  • +
  • 3. 支持自动获取GraphRAG索引文件
  • +
  • 4. 支持一键可视化到Neo4j
  • +
  • 5. [TODO] 集成huggingface embedding
  • +
  • 6. [TODO] 支持PDF输入
  • +
+
+ +