File size: 6,092 Bytes
3d05d82 e28b3ce 3d05d82 e28b3ce 629d6a1 3d05d82 629d6a1 3d05d82 629d6a1 e28b3ce 3d05d82 e28b3ce 834372e e28b3ce 629d6a1 3d05d82 e28b3ce 3d05d82 e28b3ce 629d6a1 e28b3ce 3d05d82 e28b3ce 3d05d82 e28b3ce 3d05d82 e28b3ce 3d05d82 e28b3ce 3d05d82 e28b3ce 3d05d82 e28b3ce 3d05d82 e28b3ce 3d05d82 |
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 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 |
import streamlit as st
from googletrans import Translator
from langdetect import detect
import time
import warnings
import os
# Suppress warnings
warnings.filterwarnings("ignore")
# Set page config
st.set_page_config(
page_title="GUVI Multilingual Chatbot",
page_icon="🤖",
layout="wide",
initial_sidebar_state="expanded"
)
# Initialize Google Translator
translator = Translator()
# Load GUVI dataset
@st.cache_resource
def load_guvi_dataset():
qa_pairs = {}
try:
with open("GUVI dataset.txt", "r", encoding="utf-8") as file:
lines = file.readlines()
for i in range(0, len(lines), 2):
if i+1 < len(lines):
question = lines[i].strip()
answer = lines[i+1].strip()
qa_pairs[question.lower()] = answer
except FileNotFoundError:
st.error("GUVI dataset (guvi.txt) not found. Using GPT-only responses.")
return qa_pairs
# Initialize dataset
qa_pairs = load_guvi_dataset()
# Language mapping
language_map = {
"English": "en",
"Hindi": "hi",
"Tamil": "ta",
"Telugu": "te",
"Kannada": "kn",
"Malayalam": "ml",
"Bengali": "bn",
"Marathi": "mr"
}
# Function to detect language
def detect_language(text):
try:
return detect(text)
except:
return "en"
# Function to translate text using Google Translator
def translate_text(text, target_lang, source_lang='auto'):
if source_lang == target_lang:
return text
try:
translation = translator.translate(text, src=source_lang, dest=target_lang)
return translation.text
except Exception as e:
st.warning(f"Translation error: {e}. Returning original text.")
return text
# Function to generate response using GPT or GUVI dataset
def generate_response(prompt):
# First check if the question exists in our GUVI dataset
lower_prompt = prompt.lower()
if lower_prompt in qa_pairs:
return qa_pairs[lower_prompt]
# If not found in dataset, use Hugging Face model
inputs = models["chat_tokenizer"](prompt, return_tensors="pt", max_length=512, truncation=True)
with torch.no_grad():
outputs = models["chat_model"].generate(
**inputs,
max_length=200,
num_beams=5,
early_stopping=True,
temperature=0.7
)
return models["chat_tokenizer"].decode(outputs[0], skip_special_tokens=True)
# Streamlit UI
def main():
# Custom CSS
st.markdown("""
<style>
.stApp {
background-color: #f5f5f5;
}
.chat-container {
background-color: white;
border-radius: 10px;
padding: 20px;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
margin-bottom: 20px;
}
.user-message {
background-color: #e3f2fd;
padding: 10px;
border-radius: 10px;
margin-bottom: 10px;
}
.bot-message {
background-color: #f5f5f5;
padding: 10px;
border-radius: 10px;
margin-bottom: 10px;
}
.stSelectbox > div > div {
border: 1px solid #2196F3 !important;
}
.stTextInput > div > div > input {
border: 1px solid #2196F3 !important;
}
</style>
""", unsafe_allow_html=True)
# Header
st.title("GUVI Multilingual Chatbot 🤖")
st.markdown("""
Welcome to the GUVI Multilingual Chatbot! This assistant can help you with:
- Course information and recommendations
- Career guidance and mentorship
- Technical support
- General queries about GUVI platform
**Available in multiple Indian languages!**
""")
# Sidebar
st.sidebar.title("Settings")
selected_language = st.sidebar.selectbox(
"Select your preferred language:",
list(language_map.keys()),
index=0
)
st.sidebar.markdown("---")
st.sidebar.markdown("### About")
st.sidebar.markdown("""
This chatbot is powered by:
- OpenAI GPT
- Google Translator
- GUVI's custom knowledge base
Developed for GUVI's multilingual learners.
""")
# Initialize chat history
if "messages" not in st.session_state:
st.session_state.messages = []
# Display chat messages from history on app rerun
for message in st.session_state.messages:
with st.chat_message(message["role"]):
st.markdown(message["content"])
# Accept user input
if prompt := st.chat_input("Type your message here..."):
# Add user message to chat history
st.session_state.messages.append({"role": "user", "content": prompt})
# Detect language of input
input_lang = detect_language(prompt)
target_lang = language_map[selected_language]
# Display user message in chat message container
with st.chat_message("user"):
st.markdown(prompt)
# Show thinking indicator
with st.spinner("Thinking..."):
# Translate to English if needed
if input_lang != "en":
translated_prompt = translate_text(prompt, "en", input_lang)
else:
translated_prompt = prompt
# Generate response
response = generate_response(translated_prompt)
# Translate back to user's language if needed
if target_lang != "en":
final_response = translate_text(response, target_lang, "en")
else:
final_response = response
# Add a small delay for natural conversation flow
time.sleep(0.5)
# Display assistant response in chat message container
with st.chat_message("assistant"):
st.markdown(final_response)
# Add assistant response to chat history
st.session_state.messages.append({"role": "assistant", "content": final_response})
if __name__ == "__main__":
main() |