Spaces:
Runtime error
Runtime error
import streamlit as st | |
from langchain.llms import CTransformers | |
from langchain.chains import LLMChain | |
from langchain import PromptTemplate | |
import os | |
from docx import Document | |
from docx.shared import Inches | |
import io | |
from PIL import Image | |
import requests | |
# Loading the model | |
def load_llm(max_tokens, prompt_template, temperature): | |
# Load the locally downloaded model here | |
llm = CTransformers( | |
model="llama-2-7b-chat.ggmlv3.q8_0.bin", | |
model_type="llama", | |
max_new_tokens=max_tokens, | |
temperature=temperature, | |
) | |
llm_chain = LLMChain(llm=llm, prompt=PromptTemplate.from_template(prompt_template)) | |
return llm_chain | |
def get_src_original_url(query): | |
url = 'https://api.pexels.com/v1/search' | |
headers = { | |
'Authorization': "iMn2jjJXgPCqmalZsrDxYA5WcLSyt1FgopsBxY4M8rUxRc4POC83rsR3", | |
} | |
params = { | |
'query': query, | |
'per_page': 1, | |
} | |
response = requests.get(url, headers=headers, params=params) | |
# Check if the request was successful (status code 200) | |
if response.status_code == 200: | |
data = response.json() | |
photos = data.get('photos', []) | |
if photos: | |
src_original_url = photos[0]['src']['original'] | |
return src_original_url | |
else: | |
st.write("No photos found for the given query.") | |
else: | |
st.write(f"Error: {response.status_code}, {response.text}") | |
return None | |
def create_word_docx(user_input, paragraph, image_input): | |
# Create a new Word document | |
doc = Document() | |
# Add the user input to the document | |
doc.add_heading(user_input, level=1) | |
doc.add_paragraph(paragraph) | |
# Add the image to the document | |
doc.add_heading('Image Input', level=1) | |
image_stream = io.BytesIO() | |
image_input.save(image_stream, format='PNG') | |
image_stream.seek(0) | |
doc.add_picture(image_stream, width=Inches(4)) # Adjust the width as needed | |
return doc | |
st.set_page_config(layout="wide") | |
def main(): | |
st.title("GeniusWords: Unleash Your Imagination") | |
example_prompt_template = 'You are a digital marketing and SEO expert and your task is to write an article on the given topic: {user_input}.' | |
prompt_template = st.text_area("Please enter the prompt template:", value=example_prompt_template) | |
max_tokens = st.number_input("Please enter the maximum tokens:", min_value=1, value=800) | |
temperature = st.slider("Select the temperature:", min_value=0.1, max_value=1.0, value=0.7, step=0.1) | |
user_input = st.text_input("Please enter the idea/topic for the article you want to generate!") | |
image_input = st.text_input("Please enter the topic for the image you want to fetch!") | |
if st.button("Generate Article"): | |
if len(user_input) > 0 and len(image_input) > 0 and len(prompt_template) > 0: | |
col1, col2, col3 = st.columns([1, 2, 1]) | |
with col1: | |
st.subheader("Generated Content") | |
st.write("Topic of the article is: " + user_input) | |
st.write("Image of the article is: " + image_input) | |
llm_call = load_llm(max_tokens=max_tokens, prompt_template=prompt_template, temperature=temperature) | |
result = llm_call(user_input) | |
if len(result) > 0: | |
st.info("Your Content has been generated successfully!") | |
st.write(result) | |
else: | |
st.error("Your article couldn't be generated!") | |
with col2: | |
st.subheader("Fetched Image") | |
image_url = get_src_original_url(image_input) | |
st.image(image_url) | |
with col3: | |
st.subheader("Final Content to Download") | |
image_response = requests.get(image_url) | |
img = Image.open(io.BytesIO(image_response.content)) | |
doc = create_word_docx(user_input, result['text'], img) | |
# Save the Word document to a BytesIO buffer | |
doc_buffer = io.BytesIO() | |
doc.save(doc_buffer) | |
doc_buffer.seek(0) | |
# Prepare the download link | |
st.download_button( | |
label='Download Word Document', | |
data=doc_buffer, | |
file_name='document.docx', | |
mime='application/vnd.openxmlformats-officedocument.wordprocessingml.document' | |
) | |
if __name__ == "__main__": | |
main() | |