MarketingAPP4 / app.py
tharungajula2's picture
Update app.py
d8a8252
# -------------------------
# IMPORT REQUIRED LIBRARIES
# -------------------------
# Streamlit is a popular open-source framework used for building custom web apps for data science and ML.
import streamlit as st
# Custom libraries from langchain, for Few-Shot Learning Model interaction.
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
from langchain import FewShotPromptTemplate
from langchain.prompts.example_selector import LengthBasedExampleSelector
# Library for loading environment variables (for things like API keys).
from dotenv import load_dotenv
# -------------------------------
# LOAD ENVIRONMENT VARIABLES
# -------------------------------
# Load environment variables from a .env file.
load_dotenv()
# -------------------------------
# FUNCTION TO GET LLM RESPONSE
# -------------------------------
def getLLMResponse(query, age_option, tasktype_option):
# Initialize the language model with specific settings.
llm = OpenAI(temperature=.9, model="text-davinci-003")
# We define different example sets based on the age group. These sets contain Q&A examples.
# Examples for kids with fun and imaginative answers.
if age_option == "Kid":
examples = [ ... ] # List of child-friendly examples.
# Thoughtful and elaborate answers tailored for adults.
elif age_option == "Adult":
examples = [ ... ] # List of adult-oriented examples.
# Answers reflecting the wisdom and experiences of senior citizens.
elif age_option == "Senior Citizen":
examples = [ ... ] # List of examples for senior citizens.
# Template for formatting the examples in the prompt.
example_template = """
Question: {query}
Response: {answer}
"""
# Define how our examples will be formatted using the PromptTemplate.
example_prompt = PromptTemplate(
input_variables=["query", "answer"],
template=example_template
)
# The prefix sets up the model's persona and provides it with some example data.
prefix = """You are a {template_ageoption}, and {template_tasktype_option}:
Here are some examples:
"""
# The suffix tells the model where to provide the answer.
suffix = """
Question: {template_userInput}
Response: """
# Example selector helps in selecting the best examples based on the given length.
example_selector = LengthBasedExampleSelector(
examples=examples,
example_prompt=example_prompt,
max_length=200
)
# This template combines everything: prefix, examples, and the suffix to create the full prompt.
new_prompt_template = FewShotPromptTemplate(
example_selector=example_selector, # use example_selector instead of examples
example_prompt=example_prompt,
prefix=prefix,
suffix=suffix,
input_variables=["template_userInput", "template_ageoption", "template_tasktype_option"],
example_separator="\n"
)
# Print the formatted prompt to the console (for debugging purposes).
print(new_prompt_template.format(template_userInput=query, template_ageoption=age_option, template_tasktype_option=tasktype_option))
# Fetch the response from the LLM using the prepared prompt.
response = llm(new_prompt_template.format(template_userInput=query, template_ageoption=age_option, template_tasktype_option=tasktype_option))
# Print the model's response to the console (for debugging purposes).
print(response)
# Return the response so it can be displayed on the Streamlit app.
return response
# -------------------------
# STREAMLIT UI CONFIGURATION
# -------------------------
# Set the initial configurations for the Streamlit page (title, icon, layout).
st.set_page_config(page_title="Marketing Tool",
page_icon='βœ…',
layout='centered',
initial_sidebar_state='collapsed')
# Display a header on the web page.
st.header("Hey, How can I help you?")
# Create a text area where users can enter their query.
form_input = st.text_area('Enter text', height=275)
# Dropdown menu for selecting the type of task.
tasktype_option = st.selectbox(
'Please select the action to be performed?',
('Write a sales copy', 'Create a tweet', 'Write a product description'), key=1)
# Dropdown menu for selecting the age group for the response.
age_option = st.selectbox(
'For which age group is this intended?',
('Kid', 'Adult', 'Senior Citizen'), key=2)
# When the 'Submit' button is clicked, the entered query is processed.
if st.button('Submit'):
# Call the `getLLMResponse` function to get the model's response.
response = getLLMResponse(form_input, age_option, tasktype_option)
# Display the response on the Streamlit page.
st.write(response)
# ---------------------------------
# ADDITIONAL UI COMPONENTS
# ---------------------------------
# Display an information section on the page.
st.sidebar.info(
"This tool is powered by the LangChain LLM and designed to provide tailored responses "
"based on the selected age group and task type."
)
# Optional: Add any other UI components or information that might be useful for users.
# ------------------------------
# END OF STREAMLIT APPLICATION
# ------------------------------