RAG_architectures / config.py
Aidahaouas's picture
Update config.py
3eab6d1 verified
import os
import time
from dotenv import load_dotenv
from pinecone import Pinecone, ServerlessSpec
from langsmith import Client
from langchain_mistralai.chat_models import ChatMistralAI
from neo4j import GraphDatabase
from sentence_transformers import SentenceTransformer
from pinecone_text.sparse import BM25Encoder
from langchain.embeddings import HuggingFaceEmbeddings
# Charger les variables d'environnement
load_dotenv()
# Configuratio Pinecone
pinecone_api_key = os.getenv("PINECONE_API_KEY")
if not pinecone_api_key:
raise ValueError("PINECONE_API_KEY n'est pas défini dans .env")
# Création du client Pinecone
pc = Pinecone(api_key=pinecone_api_key)
# Configuration des index
sparse_index_name = "confession-muette-sparse"
dense_index_name = "confession-muette-dense"
judge_index_name = "confession-muette-judge"
# LangSmith configuration
langsmith_endpoint = os.getenv("LANGSMITH_ENDPOINT")
langsmith_project = os.getenv("LANGSMITH_PROJECT")
langsmith_api_key = os.getenv("LANGSMITH_API_KEY")
client = Client(
api_url=langsmith_endpoint,
api_key=langsmith_api_key,
)
dataset_id = os.getenv("DATASET_UUID")
# Initialize Neo4j connection
neo4j_uri = os.getenv("NEO4J_URI")
neo4j_username = os.getenv("NEO4J_USERNAME")
neo4j_password = os.getenv("NEO4J_PASSWORD")
neo4j_driver = GraphDatabase.driver(
neo4j_uri,
auth=(neo4j_username, neo4j_password)
)
# Mistral AI configuration
mistral_api_key = os.getenv("MISTRAL_API_KEY")
llm = ChatMistralAI(
model="mistral-large-latest",
api_key=mistral_api_key,
temperature=0,
stream=False,
verbose=True
)
# Initialiser les modèles et encodeurs
model = SentenceTransformer("intfloat/multilingual-e5-large")
sparse_encoder = BM25Encoder().default()
embeddings = HuggingFaceEmbeddings(model_name="intfloat/multilingual-e5-large")
# Vérifier si les index existent
existing_indexes = pc.list_indexes()
all_names = [idx["name"] for idx in existing_indexes]
# Créer l'index sparse s'il n'existe pas
if sparse_index_name not in all_names:
print(f"L'index '{sparse_index_name}' n'existe pas. Création en cours...")
try:
pc.create_index(
name=sparse_index_name,
metric="dotproduct",
dimension=1024,
spec=ServerlessSpec(cloud="aws", region="us-east-1"), # Modifier la région si besoin
)
print(f"Index '{sparse_index_name}' créé avec succès.")
except Exception as e:
print("Erreur lors de la création de l'index sparse:", e)
# Créer l'index dense s'il n'existe pas
if dense_index_name not in all_names:
print(f"L'index '{dense_index_name}' n'existe pas. Création en cours...")
try:
pc.create_index(
name=dense_index_name,
dimension=1024,
metric="cosine",
spec=ServerlessSpec(cloud="aws", region="us-east-1"),
)
print(f"Index '{dense_index_name}' créé avec succès.")
except Exception as e:
print("Erreur lors de la création de l'index dense:", e)
# Créer l'index judge s'il n'existe pas
if judge_index_name not in all_names:
print(f"L'index '{judge_index_name}' n'existe pas. Création en cours...")
try:
pc.create_index(
name=judge_index_name,
metric="dotproduct",
dimension=1024,
spec=ServerlessSpec(cloud="aws", region="us-east-1"),
)
print(f"Index '{judge_index_name}' créé avec succès.")
except Exception as e:
print("Erreur lors de la création de l'index sparse:", e)
print(f"Les index '{sparse_index_name}' , '{dense_index_name}' et '{judge_index_name}' sont prêts.")
# Connexion aux index
sparse_index = pc.Index(sparse_index_name)
dense_index = pc.Index(dense_index_name)
judge_index = pc.Index(judge_index_name)
print(f"Connexion aux index '{sparse_index_name}' , '{dense_index_name}' et '{judge_index_name}' réussie.")