Math_Quiz_app / function.py
Arhashmi's picture
Update function.py
ae8088b
from langchain.prompts import PromptTemplate
from langchain.llms import HuggingFaceHub
from langchain.chains import LLMChain, SequentialChain
from dotenv import load_dotenv
import os
# Load environment variables from .env file
load_dotenv()
# Hugging Face Hub API token
huggingfacehub_api_token = os.getenv("HUGGINGFACEHUB_API_TOKEN")
# Configuration for language model
config = {'max_new_tokens': 512, 'temperature': 0.6}
def GetLLMResponse(selected_topic_level, selected_topic, num_quizzes):
# Ensure that the Hugging Face Hub API token is available
if huggingfacehub_api_token is None:
raise ValueError("HUGGINGFACEHUB_API_TOKEN environment variable is not set. Set the API token and try again.")
# Initialize Hugging Face Hub with API token
llm = HuggingFaceHub(
repo_id="mistralai/Mixtral-8x7B-Instruct-v0.1",
model_kwargs=config,
huggingfacehub_api_token=huggingfacehub_api_token
)
# Create LLM Chaining for generating questions
questions_template = "Generate a {selected_topic_level} math quiz on the topic of {selected_topic}. Generate only {num_quizzes} questions not more and without providing answers. The Question should not be in image format/link"
questions_prompt = PromptTemplate(input_variables=["selected_topic_level", "selected_topic", "num_quizzes"],
template=questions_template)
questions_chain = LLMChain(llm=llm, prompt=questions_prompt, output_key="questions")
# Create LLM Chaining for generating answers
answer_template = "I want you to become a teacher and answer this specific Question:\n{questions}\n\nYou should give me a straightforward and concise explanation and answer to each one of them."
answer_prompt = PromptTemplate(input_variables=["questions"], template=answer_template)
answer_chain = LLMChain(llm=llm, prompt=answer_prompt, output_key="answer")
# Create Sequential Chaining
seq_chain = SequentialChain(chains=[questions_chain, answer_chain],
input_variables=['selected_topic_level', 'selected_topic', 'num_quizzes'],
output_variables=['questions', 'answer'])
# Execute the chained prompts
response = seq_chain({
'selected_topic_level': selected_topic_level,
'selected_topic': selected_topic,
'num_quizzes': num_quizzes
})
# Print the response for debugging purposes
print(response)
# Return the response
return response