prompt_generation / utils.py
Anastasia Zimina
spliting files
104838a
import json
import gradio as gr
import os
import langchain_openai
import langchain_core
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
def enhance_subject(subject, details):
prompt = ChatPromptTemplate.from_messages([
("system", "Generate a clear and concise subject, then provide additional details using descriptive language. Ensure the response is specific and avoids ambiguity or contradictions. The subject should inspire an engaging photo that tells a story. Remove any unnecessary information and don't add any punctuation at the end of the subject."),
("user", "The main subject is {subject} {details}.")
])
output_parser = StrOutputParser()
model = ChatOpenAI(model="gpt-3.5-turbo")
chain = ( prompt
| model
| output_parser
)
result = chain.invoke({"subject": subject, "details": details})
return result
def load_input_fields(filepath):
"""
Load the input fields from a JSON file.
Args:
- filepath (str): The path to the JSON file containing the input fields.
Returns:
- dict: A dictionary containing the input fields.
"""
with open(filepath, "r") as file:
input_fields = json.load(file)
return input_fields
def create_html_string(input_text, highlight_color = "green", container_style = "border: 2px solid black; padding: 2px; font-size: 16px;" ):
"""
Create a HTML string with specific styles applied to highlighted text within square brackets.
Args:
- input_text (str): The input text with portions to be highlighted within square brackets.
- optional: highlight_color (str): Color for the highlighted text (e.g., "green").
- optional: container_style (str): Any css for inline styling (e.g,, "border: 2px solid black;")
Returns:
- str: A HTML string with the applied styles.
"""
# Replace the highlighted text with HTML span elements for styling
highlighted_text = input_text.replace("[", f'<span style="color:{highlight_color}; font-weight: bold;">[').replace("]", "]</span>")
# Construct the full HTML string with the provided styles
html_string = f'<p style="{container_style}">{highlighted_text}</p>'
return html_string
def extract_names(objects):
return [obj['name'] for obj in objects if 'name' in obj]
def clearInput():
return ""
def format_to_markdown(objects):
# Skip None objects
formatted_list = [
f"> * **{obj.get('name', 'No Name')}** - {obj.get('description', 'No Description')}"
for obj in objects if obj is not None and obj["name"] != "None"
]
return '\n'.join(formatted_list)
find_filter_by_name = lambda collection, key: next((filter for filter in collection if filter['name'] == key), None)
def display_info(collection, key):
markdown_text = format_to_markdown([find_filter_by_name(collection, key)])
return gr.Markdown(markdown_text, visible=True)
def enhance_pipeline(isFrog, subject, details):
if isFrog and (subject or details):
result = enhance_subject(subject, details)
return [gr.Textbox(visible=False), gr.Button(visible=False), gr.TextArea(visible=True, value=result)]
elif (subject or details) and not isFrog:
return [gr.Textbox(visible=True), gr.Button(visible=True), gr.TextArea(visible=False)]
else:
return [gr.Textbox(visible=False), gr.Button(visible=False), gr.TextArea(visible=False)]
def authenticate(pwd_input, subject, details):
if pwd_input == os.environ.get("MAGIC_WORD"):
result = enhance_subject(subject, details)
return [gr.TextArea(visible=True, value=result), True, gr.Textbox(visible=False), gr.Button(visible=False)]
else:
raise gr.Error("You are not from our pond! Use your own LLM to add some juice to your prompt.")