Spaces:
Running
Running
File size: 4,564 Bytes
0e95308 1a30368 c54cf3b f687536 c54cf3b bf8e143 b04f2e5 0e95308 bf8e143 0e95308 bf8e143 0e95308 c54cf3b 3e83acd 5dce460 c54cf3b 26e824b c54cf3b 2dff2c5 f687536 bf8e143 0e95308 bf8e143 0e95308 bf8e143 0e95308 bf8e143 0e95308 04356f4 1926a25 cb720fe 0280e01 9e69b9a c54cf3b 1926a25 0280e01 04356f4 c54cf3b 04356f4 0280e01 c54cf3b 7b27360 2978c6a f687536 04356f4 2978c6a a9f7e8d 2978c6a a9f7e8d 04356f4 2978c6a 04356f4 c54cf3b 04356f4 c54cf3b 2978c6a c54cf3b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 |
import json
from sentence_transformers import SentenceTransformer, util
from groq import Groq
from datetime import datetime
import requests
from datasets import load_dataset, Dataset
from io import BytesIO
from PIL import Image, ImageDraw, ImageFont
import numpy as np
from dotenv import load_dotenv
import os
import pandas as pd
# Load environment variables
load_dotenv()
# Initialize Groq client
groq_client = Groq(api_key=os.getenv("GROQ_API_KEY"))
# Load models and dataset
similarity_model = SentenceTransformer('paraphrase-MiniLM-L6-v2')
# Config
HF_DATASET_REPO = "midrees2806/unmatched_queries"
HF_TOKEN = os.getenv("HF_TOKEN")
# Load dataset (automatically using the path)
with open('dataset.json', 'r') as f:
dataset = json.load(f)
# Precompute embeddings
dataset_questions = [item.get("Question", "").lower().strip() for item in dataset]
dataset_answers = [item.get("Answer", "") for item in dataset]
dataset_embeddings = similarity_model.encode(dataset_questions, convert_to_tensor=True)
# Save unmatched queries to Hugging Face
def manage_unmatched_queries(query: str):
try:
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
try:
ds = load_dataset(HF_DATASET_REPO, token=HF_TOKEN)
df = ds["train"].to_pandas()
except:
df = pd.DataFrame(columns=["Query", "Timestamp", "Processed"])
if query not in df["Query"].values:
new_entry = {"Query": query, "Timestamp": timestamp, "Processed": False}
df = pd.concat([df, pd.DataFrame([new_entry])], ignore_index=True)
updated_ds = Dataset.from_pandas(df)
updated_ds.push_to_hub(HF_DATASET_REPO, token=HF_TOKEN)
except Exception as e:
print(f"Failed to save query: {e}")
def query_groq_llm(prompt, model_name="llama3-70b-8192"):
try:
chat_completion = groq_client.chat.completions.create(
messages=[{
"role": "user",
"content": prompt
}],
model=model_name,
temperature=0.7,
max_tokens=500
)
return chat_completion.choices[0].message.content.strip()
except Exception as e:
print(f"Error querying Groq API: {e}")
return ""
def get_best_answer(user_input):
if not user_input.strip():
return "Please enter a valid question."
user_input_lower = user_input.lower().strip()
if len(user_input_lower.split()) < 3:
return "Please ask your question properly with at least 3 words."
# π Check if question is about fee
if any(keyword in user_input_lower for keyword in ["fee structure", "fees structure"]):
return (
"π° For complete and up-to-date fee details for this program, we recommend visiting the official University of Education fee structure page.\n"
"Youβll find comprehensive information regarding tuition, admission charges, and other applicable fees there.\n"
"π https://ue.edu.pk/allfeestructure.php"
)
# π Continue with normal similarity-based logic
user_embedding = similarity_model.encode(user_input_lower, convert_to_tensor=True)
similarities = util.pytorch_cos_sim(user_embedding, dataset_embeddings)[0]
best_match_idx = similarities.argmax().item()
best_score = similarities[best_match_idx].item()
if best_score < 0.65:
manage_unmatched_queries(user_input)
if best_score >= 0.65:
original_answer = dataset_answers[best_match_idx]
prompt = f"""As an official assistant for University of Education Lahore, provide a clear response:
Question: {user_input}
Original Answer: {original_answer}
Improved Answer:"""
else:
prompt = f"""As an official assistant for University of Education Lahore, provide a helpful response:
Include relevant details about university policies.
If unsure, direct to official channels.
Question: {user_input}
Official Answer:"""
llm_response = query_groq_llm(prompt)
if llm_response:
for marker in ["Improved Answer:", "Official Answer:"]:
if marker in llm_response:
response = llm_response.split(marker)[-1].strip()
break
else:
response = llm_response
else:
response = dataset_answers[best_match_idx] if best_score >= 0.65 else """For official information:
π +92-42-99262231-33
βοΈ [email protected]
π ue.edu.pk"""
return response
|