|
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)
|
|
|
|
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",
|
|
)
|
|
|
|
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):
|
|
|
|
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,
|
|
)
|
|
|
|
for res in results[0]:
|
|
|
|
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
|
|
|