Spaces:
Sleeping
Sleeping
| from langchain_nvidia_ai_endpoints import ChatNVIDIA | |
| import streamlit as st | |
| from tools.summarizer import Summarizer | |
| from dotenv import load_dotenv | |
| import os | |
| load_dotenv() | |
| class QuestionAnswering(object): | |
| def __init__(self, model_name, memory) -> None: | |
| self.model_name = model_name | |
| self.memory = memory | |
| self.llm = ChatNVIDIA( | |
| model=self.model_name, | |
| api_key=os.getenv('NV_API_KEY'), | |
| max_tokens=700, | |
| temperature=0.01, | |
| top_p=.7 | |
| ) | |
| self.summarizer = Summarizer() | |
| def generate_answer(self, question:str): | |
| if self.model_name in ['google/gemma-2-27b-it', 'microsoft/phi-3-medium-128k-instruct']: | |
| prompt = [ | |
| { | |
| 'role' : "assistant", | |
| 'content' : "You are a helpful and native chatbot who can guide clients to write and talk naturally\ | |
| and reduce their mistakes in the different aspects of their English skills. And please\ | |
| guide users in short and concise answers." | |
| }, | |
| ] | |
| else: | |
| prompt = [ | |
| { | |
| 'role' : "system", | |
| 'content' : "You are a helpful and native chatbot who can guide clients to write and talk naturally\ | |
| and reduce their mistakes in the different aspects of their English skills. And please\ | |
| guide users in short and concise answers." | |
| }, | |
| ] | |
| with st.expander('Question'): | |
| st.write('User: ', question) | |
| if len(self.memory) != 0: | |
| # Save the last 2 conversations | |
| short_term_memory = self.memory[-4:] | |
| try: | |
| summarized_short_term_memory = self.summarizer.summarize(short_term_memory) | |
| except: | |
| st.warning(body="Refresh the page or Try it again later.", icon="🤖") | |
| else: | |
| prompt.extend(summarized_short_term_memory) | |
| user_dict = {'role' : 'user', 'content' : question} | |
| self.memory.append(user_dict) | |
| prompt.append(user_dict) | |
| res = self.llm.invoke(prompt) | |
| assistant_dict = {'role' : res.response_metadata['role'], 'content' : res.content} | |
| self.memory.append(assistant_dict) | |
| with st.expander('Answer'): | |
| st.write("Assistant: ", assistant_dict['content']) | |