Spaces:
Running
Running
| import os | |
| from langchain_text_splitters import MarkdownHeaderTextSplitter, RecursiveCharacterTextSplitter | |
| from src.database import get_embeddings | |
| from langchain_postgres import PGVector | |
| from dotenv import load_dotenv | |
| load_dotenv() | |
| def load_and_split_data(file_path='data/reglement.md'): | |
| """Lit le fichier Markdown et le découpe sémantiquement en chunks.""" | |
| print(f"Lecture du fichier : {file_path}") | |
| with open(file_path, "r", encoding="utf-8") as f: | |
| markdown_document = f.read() | |
| headers_to_split_on = [ | |
| ("#", "Sujet_Principal"), | |
| ("##", "Type_Regle"), | |
| ] | |
| markdown_splitter = MarkdownHeaderTextSplitter(headers_to_split_on=headers_to_split_on) | |
| md_header_splits = markdown_splitter.split_text(markdown_document) | |
| text_splitter = RecursiveCharacterTextSplitter( | |
| chunk_size=700, | |
| chunk_overlap=200, | |
| separators=["\n\n", "\n", ".", " ", ""] | |
| ) | |
| final_chunks = text_splitter.split_documents(md_header_splits) | |
| print(f"Découpage terminé : {len(final_chunks)} chunks générés.") | |
| return final_chunks | |
| def build_index(chunks, db_url: str, collection_name: str): | |
| """Transforme les chunks en vecteurs avec bge-m3 et les stocke dans PostgreSQL.""" | |
| print("Chargement du modèle BAAI/bge-m3...") | |
| embeddings = get_embeddings() | |
| print(f"Connexion à la base et création de l'index vectoriel...") | |
| vector_store = PGVector.from_documents( | |
| embedding=embeddings, | |
| documents=chunks, | |
| collection_name=collection_name, | |
| connection=db_url, | |
| use_jsonb=True, | |
| ) | |
| print("Indexation réussie dans la base de données PostgreSQL !") | |
| return vector_store | |
| if __name__ == "__main__": | |
| FILE_PATH = "data/reglement.md" | |
| COLLECTION_NAME = "rh_cgi_vectors" | |
| DATABASE_URL = os.getenv('DATABASE_URL') | |
| if not DATABASE_URL: | |
| raise ValueError("Erreur : La variable DATABASE_URL est introuvable.") | |
| documents = load_and_split_data(FILE_PATH) | |
| vector_store = build_index(documents, DATABASE_URL, COLLECTION_NAME) |