minichain / selfask /#base.py#
srush's picture
srush HF staff
Upload with huggingface_hub
7b856a8
raw
history blame
3.1 kB
# 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"),
)
)