Spaces:
Sleeping
Sleeping
| from langchain_community.embeddings.fastembed import FastEmbedEmbeddings | |
| from langchain_groq import ChatGroq | |
| import os | |
| import json | |
| from typing import List, Dict | |
| class LLMProcessor: | |
| def __init__(self): | |
| """Initialize embedding model and Groq LLM""" | |
| self.api_key = os.getenv("GROQ_API_KEY") | |
| # Use FastEmbed instead of SentenceTransformer | |
| self.embed_model = FastEmbedEmbeddings() | |
| self.llm = ChatGroq( | |
| model_name="mixtral-8x7b-32768", | |
| api_key=self.api_key | |
| ) | |
| def format_context(self, chunks: List[Dict]) -> str: | |
| """Format retrieved chunks into a structured context for the LLM""" | |
| context_parts = [] | |
| for chunk in chunks: | |
| try: | |
| headings = json.loads(chunk['headings']) | |
| if headings: | |
| context_parts.append(f"Section: {' > '.join(headings)}") | |
| except: | |
| pass | |
| if chunk['page']: | |
| context_parts.append(f"Page {chunk['page']}:") | |
| context_parts.append(chunk['text']) | |
| context_parts.append("-" * 40) | |
| return "\n".join(context_parts) | |
| def generate_answer(self, context: str, question: str) -> str: | |
| """Generate answer using structured context""" | |
| prompt = f"""Based on the following excerpts from a document: | |
| {context} | |
| Please answer this question: {question} | |
| Make use of the section information and page numbers in your answer when relevant. | |
| """ | |
| return self.llm.invoke(prompt) | |