Milvion / chat_handler.py
Ashar086's picture
Update chat_handler.py
b209db9 verified
from pymilvus import Collection
from langchain.chains import RetrievalQA
from langchain.models import GroqLlama
def init_milvus(collection_name):
from pymilvus import CollectionSchema, FieldSchema, DataType
fields = [
FieldSchema(name="vector", dtype=DataType.FLOAT_VECTOR, dim=768, is_primary=False),
]
schema = CollectionSchema(fields, description="5G document collection")
collection = Collection(collection_name, schema=schema)
if not collection.exists:
collection.create()
# Generate chatbot response
def generate_response(user_query, collection_name):
collection = Collection(collection_name)
embeddings = HuggingFaceEmbeddings()
retriever = RetrievalQA(embeddings, collection)
model = GroqLlama(api_key=os.getenv("GROQ_API_KEY"))
response = model.generate_response(retriever.query(user_query))
return response
# import os
# from langchain_huggingface import HuggingFaceEmbeddings
# from groq import Groq
# from pymilvus import connections, Collection
# class ChatHandler:
# def __init__(self,api_token,grok_api_token,logger):
# self.logger = logger
# self.logger.info("Initializing ChatHandler...")
# self.groq_client = Groq(api_key=grok_api_token)
# # Initialize the embedding model using Hugging Face
# self.embeddings = HuggingFaceEmbeddings(
# model_name="sentence-transformers/all-MiniLM-L6-v2",
# model_kwargs={"token": api_token},
# )
# def _query_groq_model(self, prompt):
# """
# Query Groq's Llama model using the SDK.
# """
# try:
# chat_completion = self.groq_client.chat.completions.create(
# messages=[{"role": "user", "content": prompt}],
# model="llama-3.1-8b-instant", # Ensure the model name is correct
# )
# # Return the assistant's response
# return chat_completion.choices[0].message.content
# except Exception as e:
# self.logger.error(f"Error querying Groq API: {e}")
# return f"Error querying Groq API: {e}"
# def answer_question(self, question):
# # Generate embedding for the question
# self.logger.info(f"Received question: {question}")
# collections = connections._fetch_handler().list_collections()
# responses = []
# for collection_name in collections:
# collection = Collection(name=collection_name)
# embeddings = self.embeddings.embed_query(question)
# search_params = {
# "metric_type": "IP",
# "params": {"nprobe": 10},
# }
# results = collection.search(
# data=[embeddings],
# anns_field="embedding",
# param=search_params,
# limit=5,
# )
# # Extract the embeddings or metadata (if needed)
# for res in results[0]:
# # Store the ID or use res.distance if needed for similarity score
# responses.append({"id": res.id, "distance": res.distance,"content":res.entity})
# if responses:
# sorted_responses = sorted(responses, key=lambda x: x["distance"], reverse=True)
# prompt = self._generate_prompt(question, sorted_responses[:5])
# response = self._query_groq_model(prompt)
# return response
# return "No relevant documents found or context is insufficient to answer your question."
# def _generate_prompt(self, question, documents):
# """
# Generate a structured prompt tailored to analyze government energy consumption data
# and answer questions effectively using the provided documents.
# """
# context = "\n".join(
# [
# f"Document {i + 1}:\nID: {doc['id']}\nSimilarity: {doc['distance']:.4f}\nContent: {doc['content']}"
# for i, doc in enumerate(documents[:5])
# ]
# )
# prompt = f"""
# You are an advanced AI assistant with expertise in 5G network optimization, deployment strategies,
# and resource allocation. Your role is to analyze network datasets to identify inefficiencies,
# propose actionable deployment and optimization strategies, and quantify potential improvements.
# ### Data Provided:
# The following documents contain detailed information about 5G network deployment, resource utilization,
# and operational metrics:
# {context}
# ### Question:
# {question}
# ### Instructions:
# 1. **Highlight Areas of Network Inefficiencies**:
# - Identify inefficiencies such as underutilized network nodes, high latency areas, or
# imbalanced resource allocation.
# - Use data points from the documents to back your observations.
# 2. **Suggest Strategies for Network Optimization**:
# - Recommend actionable steps such as adjusting network configurations, deploying additional nodes,
# or reallocating bandwidth.
# - Ensure suggestions are feasible and aligned with the provided datasets.
# 3. **Quantify Cost-Saving and Performance Benefits**:
# - Provide quantitative estimates of potential cost savings from the suggested strategies.
# - Highlight the performance benefits, such as improved latency, higher throughput, or enhanced user experience.
# 4. **Present the Response Clearly**:
# - Organize your findings in a step-by-step format.
# - Use tables, bullet points, or concise paragraphs for clarity.
# ### Example Output Format:
# - **Network Inefficiencies Identified**:
# 1. ...
# 2. ...
# - **Optimization Strategies**:
# 1. ...
# 2. ...
# - **Cost-Saving and Performance Benefits**:
# - Cost Savings: $...
# - Performance Improvements: ...
# Please ensure the response is data-driven, actionable, and easy to understand.
# """
# return prompt