Spaces:
Runtime error
Runtime error
| # RAG_Persona_Chat.py | |
| # Description: Functions for RAG Persona Chat | |
| # | |
| # Imports | |
| import logging | |
| from typing import List, Dict, Any, Tuple | |
| # | |
| # External Imports | |
| # | |
| # Local Imports | |
| from App_Function_Libraries.RAG.Embeddings_Create import create_embedding, embedding_provider, embedding_model, \ | |
| embedding_api_url | |
| from App_Function_Libraries.RAG.ChromaDB_Library import chroma_client, store_in_chroma | |
| # | |
| ####################################################################################################################### | |
| # | |
| # RAG Chat Embeddings | |
| def perform_vector_search_chat(query: str, relevant_chat_ids: List[int], k: int = 10) -> List[Dict[str, Any]]: | |
| """ | |
| Perform a vector search within the specified chat IDs. | |
| Args: | |
| query (str): The user's query. | |
| relevant_chat_ids (List[int]): List of chat IDs to search within. | |
| k (int): Number of top results to retrieve. | |
| Returns: | |
| List[Dict[str, Any]]: List of search results with content and metadata. | |
| """ | |
| try: | |
| # Convert chat IDs to unique identifiers used in ChromaDB | |
| chat_ids = [f"chat_{chat_id}" for chat_id in relevant_chat_ids] | |
| # Define the collection name for chat embeddings | |
| collection_name = "all_chat_embeddings" # Ensure this collection exists and contains chat embeddings | |
| # Generate the query embedding | |
| query_embedding = create_embedding(query, embedding_provider, embedding_model, embedding_api_url) | |
| # Get the collection | |
| collection = chroma_client.get_collection(name=collection_name) | |
| # Perform the vector search | |
| results = collection.query( | |
| query_embeddings=[query_embedding], | |
| where={"id": {"$in": chat_ids}}, # Assuming 'id' is stored as document IDs | |
| n_results=k, | |
| include=["documents", "metadatas"] | |
| ) | |
| # Process results | |
| search_results = [] | |
| for doc, meta in zip(results['documents'][0], results['metadatas'][0]): | |
| search_results.append({ | |
| "content": doc, | |
| "metadata": meta | |
| }) | |
| return search_results | |
| except Exception as e: | |
| logging.error(f"Error in perform_vector_search_chat: {e}") | |
| return [] | |
| def embed_and_store_chat(chat_id: int, chat_history: List[Tuple[str, str]], conversation_name: str): | |
| """ | |
| Embed and store chat messages in ChromaDB. | |
| Args: | |
| chat_id (int): The ID of the chat. | |
| chat_history (List[Tuple[str, str]]): List of (user_message, bot_response) tuples. | |
| conversation_name (str): The name of the conversation. | |
| """ | |
| try: | |
| for idx, (user_msg, bot_msg) in enumerate(chat_history, 1): | |
| # Combine user and bot messages for context | |
| combined_content = f"User: {user_msg}\nBot: {bot_msg}" | |
| # Create embedding | |
| embedding = create_embedding(combined_content, embedding_provider, embedding_model, embedding_api_url) | |
| # Unique identifier for ChromaDB | |
| document_id = f"chat_{chat_id}_msg_{idx}" | |
| # Metadata with chat_id | |
| metadata = {"chat_id": chat_id, "message_index": idx, "conversation_name": conversation_name} | |
| # Store in ChromaDB | |
| store_in_chroma( | |
| collection_name="all_chat_embeddings", | |
| texts=[combined_content], | |
| embeddings=[embedding], | |
| ids=[document_id], | |
| metadatas=[metadata] | |
| ) | |
| logging.debug(f"Stored chat message {idx} of chat ID {chat_id} in ChromaDB.") | |
| except Exception as e: | |
| logging.error(f"Error embedding and storing chat ID {chat_id}: {e}") | |
| # | |
| # End of RAG_Persona_Chat.py | |
| ####################################################################################################################### | |