# Prompt from ... | |
# | |
from dataclasses import dataclass | |
from jinja2 import Template | |
from parsita import * | |
self_ask_prompt = """ | |
Question: Who lived longer, Muhammad Ali or Alan Turing? | |
Are follow up questions needed here: Yes. | |
Follow up: How old was Muhammad Ali when he died? | |
Intermediate answer: Muhammad Ali was 74 years old when he died. | |
Follow up: How old was Alan Turing when he died? | |
Intermediate answer: Alan Turing was 41 years old when he died. | |
So the final answer is: Muhammad Ali | |
Question: When was the founder of craigslist born? | |
Are follow up questions needed here: Yes. | |
Follow up: Who was the founder of craigslist? | |
Intermediate answer: Craigslist was founded by Craig Newmark. | |
Follow up: When was Craig Newmark born? | |
Intermediate answer: Craig Newmark was born on December 6, 1952. | |
So the final answer is: December 6, 1952 | |
Question: Who was the maternal grandfather of George Washington? | |
Are follow up questions needed here: Yes. | |
Follow up: Who was the mother of George Washington? | |
Intermediate answer: The mother of George Washington was Mary Ball Washington. | |
Follow up: Who was the father of Mary Ball Washington? | |
Intermediate answer: The father of Mary Ball Washington was Joseph Ball. | |
So the final answer is: Joseph Ball | |
Question: Are both the directors of Jaws and Casino Royale from the same country? | |
Are follow up questions needed here: Yes. | |
Follow up: Who is the director of Jaws? | |
Intermediate answer: The director of Jaws is Steven Spielberg. | |
Follow up: Where is Steven Spielberg from? | |
Intermediate answer: The United States. | |
Follow up: Who is the director of Casino Royale? | |
Intermediate answer: The director of Casino Royale is Martin Campbell. | |
Follow up: Where is Martin Campbell from? | |
Intermediate answer: New Zealand. | |
So the final answer is: No | |
Question: {{input}} | |
Are followup questions needed here: {% if agent_scratchpad %}Yes{%else%}No{% endif %}. | |
""" | |
@dataclass | |
class Intermediate: | |
val: str | |
@dataclass | |
class Final: | |
val: str | |
class SelfAskParser(TextParsers): | |
follow = (lit("Follow up:") >> reg(r".*")) > Intermediate | |
finish = (lit("So the final answer is: ") >> reg(r".*")) > Final | |
response = follow | finish | |
self_ask = Prompt( | |
Template(self_ask_prompt).render, | |
parse(SelfAskParser.response), | |
stop="\nIntermediate answer:", | |
) | |
def selfask(inp: str, openai: Backend, google: Backend): | |
echo, result = self_ask.echo_run(openai, input=inp, agent_scratchpad=True) | |
for i in range(3): | |
out = Prompt(result.val).run(google) | |
echo = echo + "\nIntermediate answer:" + out | |
echo, result = Prompt( | |
echo, parse(SelfAskParser.response), stop="\nIntermediate answer:" | |
).echo_run(openai) | |
if isinstance(result, Final): | |
break | |
return result.val | |
if __name__ == "__main__": | |
print( | |
selfask( | |
"What is the zip code of the city where George Washington was born?", | |
OpenAI("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"), | |
Google("593a073fa4c730efe918e592a538b36e80841bc8f8dd4070c1566920f75ba140"), | |
) | |
) | |