File size: 4,587 Bytes
9dc5b4d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
import os
import openai
import gradio as gr
from langchain.chat_models import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain.prompts import ChatPromptTemplate

from langchain.output_parsers import ResponseSchema
from langchain.output_parsers import StructuredOutputParser

os.environ['OPENAI_API_KEY'] = ''
openai.api_key = os.environ['OPENAI_API_KEY']

# To control the randomness and creativity of the generated
# text by an LLM, use temperature = 0.0
chat = ChatOpenAI(temperature=0.0)
chat

def get_format_instructions():
  gift_schema = ResponseSchema(name="gift",
                              description="Was the item purchased\
                              as a gift for someone else? \
                              Answer True if yes,\
                              False if not or unknown.")
  delivery_days_schema = ResponseSchema(name="delivery_days",
                                        description="How many days\
                                        did it take for the product\
                                        to arrive? If this \
                                        information is not found,\
                                        output -1.")
  price_value_schema = ResponseSchema(name="price_value",
                                      description="Extract any\
                                      sentences about the value or \
                                      price, and output them as a \
                                      comma separated Python list.")
  response_schemas = [gift_schema, 
                      delivery_days_schema,
                      price_value_schema]
  output_parser = StructuredOutputParser.from_response_schemas(response_schemas)
  format_instructions = output_parser.get_format_instructions()
  return format_instructions

  # To retrieve ChatGPT response in the reqiuired style
def response(template_string, user_input, translate_style_parsing_inst):
  prompt_template = ChatPromptTemplate.from_template(template_string)
  customer_messages = prompt_template.format_messages(
                    style=translate_style_parsing_inst,
                    text=user_input)
  # Call the LLM to translate the style or parse the customer message
  customer_response = chat(customer_messages)
  return customer_response.content, prompt_template.messages[0].prompt.input_variables

# To parse the ChatGPT response into a python dictionary
def parser_response(template_string_parse, user_input_parse):
  format_instructions = get_format_instructions()
  prompt = ChatPromptTemplate.from_template(template=template_string_parse)
  messages = prompt.format_messages(text=user_input_parse, 
                                    format_instructions=format_instructions)
  response = chat(messages)
  output_dict = output_parser.parse(response.content)
  return output_dict, type(output_dict)


demo = gr.Blocks()
title = """<h1 align="center">Gradio x Langchain  - Models, Prompts, and Parsers</h1>"""

with demo:
  gr.HTML(title)
  with gr.Tab("Translate"):
    with gr.Row():
      user_input = gr.Textbox(label="Enter user input for translation or parsing", lines=5, max_lines=5)
      template_string = gr.Textbox(label="Enter your prompt here", lines=5, max_lines=5)
      translate_style_parsing_inst = gr.Textbox(label="Enter the translation style of choice", lines=5, max_lines=5)
    btn_response = gr.Button("ChatGPT Response").style(full_width=True)
    with gr.Row():
      chat_response = gr.Textbox(label="Response from ChatGPT", lines=5, max_lines=5)
      with gr.Column():
        template_variables = gr.Textbox(label="Input variables for your prompt")

  with gr.Tab("Parse"):
    with gr.Row():
      user_input_parse = gr.Textbox(label="Enter user input for translation or parsing", lines=5, max_lines=5)
      template_string_parse = gr.Textbox(label="Enter your prompt here", lines=5, max_lines=5)
    btn_response_parse = gr.Button("Parsed ChatGPT Response").style(full_width=True)
    with gr.Row():
      with gr.Column(scale=5):
        chat_response_parse = gr.Textbox(label="Get your ChatGPT response parsed as a dictionary (json)", lines=5, max_lines=5)
      with gr.Column(scale=5):
        type_parse_output = gr.Textbox(label="Datatype of this parsed output")

  btn_response.click(response, [template_string, user_input, translate_style_parsing_inst], [chat_response, template_variables])
  btn_response_parse.click(parser_response, [template_string_parse, user_input_parse], [chat_response_parse, type_parse_output])
  
demo.launch() #(debug=True)