Spaces:
Runtime error
Runtime error
# Notebook implementation of the self-ask + Google tool use prompt. | |
# Adapted from https://github.com/ofirpress/self-ask | |
from dataclasses import dataclass | |
from parsita import * | |
import minichain | |
# Define the state of the bot. | |
class IntermediateState: | |
s: str | |
class FinalState: | |
s: str | |
class Out: | |
echo: str | |
state: FinalState | IntermediateState | |
# Self Ask Prompt | |
class SelfAsk(minichain.TemplatePrompt[Out]): | |
template_file = "selfask.pmpt.tpl" | |
stop_template = "\nIntermediate answer:" | |
# Parsita parser. | |
class Parser(TextParsers): | |
follow = (lit("Follow up:") >> reg(r".*")) > IntermediateState | |
finish = (lit("So the final answer is: ") >> reg(r".*")) > FinalState | |
response = follow | finish | |
def parse(self, response: str, inp) -> Out: | |
return Out( | |
self.prompt(inp).prompt + response, | |
self.Parser.response.parse(response).or_die(), | |
) | |
# Runtime loop | |
def selfask(inp: str, openai, google) -> str: | |
prompt1 = SelfAsk(openai) | |
prompt2 = minichain.SimplePrompt(google) | |
suffix = "" | |
for i in range(3): | |
out = prompt1(dict(input=inp, suffix=suffix, agent_scratchpad=True)) | |
if isinstance(out.state, FinalState): | |
break | |
suffix += out.echo | |
out2 = prompt2(out.state.s) | |
suffix += "\nIntermediate answer: " + out2 + "\n" | |
return out.state.s | |
with minichain.start_chain("selfask") as backend: | |
result = selfask( | |
"What is the zip code of the city where George Washington was born?", | |
backend.OpenAI(), | |
backend.Google(), | |
) | |
print(result) | |
# View prompt examples. | |
# + tags=["hide_inp"] | |
SelfAsk().show( | |
{ | |
"input": "What is the zip code of the city where George Washington was born?", | |
"agent_scratchpad": True, | |
}, | |
"Follow up: Where was George Washington born?", | |
) | |
# - | |
# View log. | |
minichain.show_log("selfask.log") | |