import os
import streamlit as st # Front End / UI
from keyfile import secret_value
from langchain_openai import ChatOpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain, SequentialChain
os.environ["OPENAI_API_KEY"] = secret_value
def main():
st.title("Chain Based Story Generator")
input1 = st.text_input("An inspirational object to start a story")
input2 = st.text_input("A tone or a writer's style to shape the story")
input3 = st.text_input("The final language for translating the text")
if st.button("Generate"):
result = process_input(input1, input2, input3)
st.markdown(f"
{result}
", unsafe_allow_html = True)
def process_input(a, b, c):
model = ChatOpenAI(model = "gpt-4o-mini")
# Chain 1
prompt_one = PromptTemplate(
input_variables = ["object"],
template = "A story about {object}",
)
chain_one = LLMChain(
llm = model,
prompt = prompt_one,
output_key = "story"
)
# Chain 2
prompt_two = PromptTemplate(
input_variables = ["style", "story"],
template = "You are a professional writer. You will be given a short story and you will inspire from this original story and create a new story in {style} style. The original story: {story}.",
)
chain_two = LLMChain(
llm = model,
prompt = prompt_two,
output_key = "expanded_story"
)
# Chain 3
prompt_three = PromptTemplate(
input_variables = ["expanded_story", "language"],
template = "Translate the story: {expanded_story} into {language}?",
)
chain_three = LLMChain(
llm = model,
prompt = prompt_three,
output_key = "translated"
)
# SEQUENCE
final_chain = SequentialChain(
chains = [chain_one, chain_two, chain_three],
input_variables = ["object", "style", "language"],
output_variables = ["translated"],
verbose = True
)
resp = final_chain({
"object": a,
"style":b,
"language": c
})
return resp["translated"]
if __name__ == "__main__":
main()