srush commited on
Commit
6ef6e33
·
1 Parent(s): bde5e30

Upload with huggingface_hub

Browse files
Files changed (3) hide show
  1. app.py +83 -0
  2. requirements.txt +3 -0
  3. selfask.pmpt.tpl +39 -0
app.py ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Notebook implementation of the self-ask + Google tool use prompt.
2
+ # Adapted from https://github.com/ofirpress/self-ask
3
+
4
+ from dataclasses import dataclass
5
+
6
+ from parsita import *
7
+
8
+ import minichain
9
+
10
+ # Define the state of the bot.
11
+
12
+ @dataclass
13
+ class IntermediateState:
14
+ s: str
15
+
16
+ @dataclass
17
+ class FinalState:
18
+ s: str
19
+
20
+ @dataclass
21
+ class Out:
22
+ echo: str
23
+ state: FinalState | IntermediateState
24
+
25
+
26
+ # Self Ask Prompt
27
+
28
+ class SelfAsk(minichain.TemplatePrompt[Out]):
29
+ template_file = "selfask.pmpt.tpl"
30
+ stop_template = "\nIntermediate answer:"
31
+
32
+ # Parsita parser.
33
+ class Parser(TextParsers):
34
+ follow = (lit("Follow up:") >> reg(r".*")) > IntermediateState
35
+ finish = (lit("So the final answer is: ") >> reg(r".*")) > FinalState
36
+ response = follow | finish
37
+
38
+ def parse(self, response: str, inp) -> Out:
39
+ return Out(
40
+ self.prompt(inp).prompt + response,
41
+ self.Parser.response.parse(response).or_die(),
42
+ )
43
+
44
+ # Runtime loop
45
+
46
+ def selfask(inp: str, openai, google) -> str:
47
+ prompt1 = SelfAsk(openai)
48
+ prompt2 = minichain.SimplePrompt(google)
49
+ suffix = ""
50
+ for i in range(3):
51
+ out = prompt1(dict(input=inp, suffix=suffix, agent_scratchpad=True))
52
+
53
+ if isinstance(out.state, FinalState):
54
+ break
55
+ suffix += out.echo
56
+ out2 = prompt2(out.state.s)
57
+ suffix += "\nIntermediate answer: " + out2 + "\n"
58
+ return out.state.s
59
+
60
+
61
+ with minichain.start_chain("selfask") as backend:
62
+ result = selfask(
63
+ "What is the zip code of the city where George Washington was born?",
64
+ backend.OpenAI(),
65
+ backend.Google(),
66
+ )
67
+ print(result)
68
+
69
+ # View prompt examples.
70
+
71
+ # + tags=["hide_inp"]
72
+ SelfAsk().show(
73
+ {
74
+ "input": "What is the zip code of the city where George Washington was born?",
75
+ "agent_scratchpad": True,
76
+ },
77
+ "Follow up: Where was George Washington born?",
78
+ )
79
+ # -
80
+
81
+ # View log.
82
+
83
+ minichain.show_log("selfask.log")
requirements.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ gradio
2
+ git+https://github.com/srush/minichain
3
+ manifest-ml
selfask.pmpt.tpl ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Question: Who lived longer, Muhammad Ali or Alan Turing?
2
+ Are follow up questions needed here: Yes.
3
+ Follow up: How old was Muhammad Ali when he died?
4
+ Intermediate answer: Muhammad Ali was 74 years old when he died.
5
+ Follow up: How old was Alan Turing when he died?
6
+ Intermediate answer: Alan Turing was 41 years old when he died.
7
+ So the final answer is: Muhammad Ali
8
+
9
+ Question: When was the founder of craigslist born?
10
+ Are follow up questions needed here: Yes.
11
+ Follow up: Who was the founder of craigslist?
12
+ Intermediate answer: Craigslist was founded by Craig Newmark.
13
+ Follow up: When was Craig Newmark born?
14
+ Intermediate answer: Craig Newmark was born on December 6, 1952.
15
+ So the final answer is: December 6, 1952
16
+
17
+ Question: Who was the maternal grandfather of George Washington?
18
+ Are follow up questions needed here: Yes.
19
+ Follow up: Who was the mother of George Washington?
20
+ Intermediate answer: The mother of George Washington was Mary Ball Washington.
21
+ Follow up: Who was the father of Mary Ball Washington?
22
+ Intermediate answer: The father of Mary Ball Washington was Joseph Ball.
23
+ So the final answer is: Joseph Ball
24
+
25
+ Question: Are both the directors of Jaws and Casino Royale from the same country?
26
+ Are follow up questions needed here: Yes.
27
+ Follow up: Who is the director of Jaws?
28
+ Intermediate answer: The director of Jaws is Steven Spielberg.
29
+ Follow up: Where is Steven Spielberg from?
30
+ Intermediate answer: The United States.
31
+ Follow up: Who is the director of Casino Royale?
32
+ Intermediate answer: The director of Casino Royale is Martin Campbell.
33
+ Follow up: Where is Martin Campbell from?
34
+ Intermediate answer: New Zealand.
35
+ So the final answer is: No
36
+
37
+ Question: {{input}}
38
+ Are followup questions needed here: {% if agent_scratchpad %}Yes{%else%}No{% endif %}.
39
+ {{suffix}}