Spaces:
Sleeping
Sleeping
| # So the graphRAG has been pre-built this just adds the knowledge graph + embeddings into a retriever object | |
| # To build a new GraphRAG, first define the new text to be used to build in the input folder | |
| # After that go to settings.yaml (define the chunking strategy, API to be used and all other strategies to be used) | |
| # After that run command in your terminal python -m graphrag.index --root PATH (can be just . instead of PATH if already in the appropriate directory) | |
| from graphrag.query.indexer_adapters import ( | |
| read_indexer_entities, | |
| read_indexer_relationships, | |
| read_indexer_reports, | |
| read_indexer_text_units, | |
| ) | |
| import tiktoken | |
| from graphrag.query.context_builder.entity_extraction import EntityVectorStoreKey | |
| from graphrag.query.llm.oai.chat_openai import ChatOpenAI | |
| from graphrag.query.llm.oai.typing import OpenaiApiType | |
| from graphrag.query.structured_search.local_search.mixed_context import LocalSearchMixedContext | |
| from graphrag.query.llm.oai.embedding import OpenAIEmbedding | |
| import pandas as pd | |
| from graphrag.query.indexer_adapters import ( | |
| read_indexer_entities, | |
| read_indexer_relationships, | |
| read_indexer_reports, | |
| read_indexer_text_units, | |
| ) | |
| from graphrag.vector_stores.lancedb import LanceDBVectorStore | |
| from graphrag.query.input.loaders.dfs import store_entity_semantic_embeddings | |
| import os | |
| # All api defined to run the embeddings | |
| from dotenv import load_dotenv | |
| load_dotenv() | |
| api_key = os.getenv('OPENAI_API_KEY') | |
| llm_model = "gpt-4o-mini" | |
| llm = ChatOpenAI( | |
| api_key=api_key, | |
| model=llm_model, | |
| api_type=OpenaiApiType.OpenAI, | |
| max_retries=20, | |
| ) | |
| embedding_model = "text-embedding-3-small" | |
| token_encoder = tiktoken.get_encoding("cl100k_base") | |
| text_embedder = OpenAIEmbedding(api_key=api_key, api_type=OpenaiApiType.OpenAI, model=embedding_model, max_retries=20) | |
| INPUT_DIR = os.path.join('output', '20240727-210235', 'artifacts') | |
| # Define the table names | |
| ENTITY_TABLE = "create_final_nodes" | |
| ENTITY_EMBEDDING_TABLE = "create_final_entities" | |
| RELATIONSHIP_TABLE = "create_final_relationships" | |
| COMMUNITY_REPORT_TABLE = "create_final_community_reports" | |
| TEXT_UNIT_TABLE = "create_final_text_units" | |
| # Construct file paths | |
| entity_file = os.path.join(INPUT_DIR, f"{ENTITY_TABLE}.parquet") | |
| report_file = os.path.join(INPUT_DIR, f"{COMMUNITY_REPORT_TABLE}.parquet") | |
| entity_embedding_file = os.path.join(INPUT_DIR, f"{ENTITY_EMBEDDING_TABLE}.parquet") | |
| relationship_file = os.path.join(INPUT_DIR, f"{RELATIONSHIP_TABLE}.parquet") | |
| text_unit_file = os.path.join(INPUT_DIR, f"{TEXT_UNIT_TABLE}.parquet") | |
| LANCEDB_URI = os.path.join(INPUT_DIR, 'lancedb') | |
| COMMUNITY_LEVEL = 1 | |
| # Read the files | |
| entity_df = pd.read_parquet(entity_file) | |
| report_df = pd.read_parquet(report_file) | |
| entity_embedding_df = pd.read_parquet(entity_embedding_file) | |
| relationship_df = pd.read_parquet(relationship_file) | |
| text_unit_df = pd.read_parquet(text_unit_file) | |
| reports = read_indexer_reports(report_df, entity_df, COMMUNITY_LEVEL) | |
| entities = read_indexer_entities(entity_df, entity_embedding_df, COMMUNITY_LEVEL) | |
| relationships = read_indexer_relationships(relationship_df) | |
| text_units = read_indexer_text_units(text_unit_df) | |
| description_embedding_store = LanceDBVectorStore(collection_name="entity_description_embeddings") | |
| description_embedding_store.connect(db_uri=LANCEDB_URI) | |
| store_entity_semantic_embeddings(entities=entities, vectorstore=description_embedding_store) | |
| # Add everything into a LocalSearch-based retriever! | |
| graph_rag_retriever = LocalSearchMixedContext( | |
| community_reports=reports, | |
| text_units=text_units, | |
| entities=entities, | |
| relationships=relationships, | |
| entity_text_embeddings=description_embedding_store, | |
| embedding_vectorstore_key=EntityVectorStoreKey.ID, | |
| text_embedder=text_embedder, | |
| token_encoder=token_encoder, | |
| ) | |