desc = """ ### Self-Ask Notebook implementation of the self-ask + Google tool use prompt. (Adapted from [Self-Ask repo](https://github.com/ofirpress/self-ask)) """ # $ from dataclasses import dataclass, replace from typing import Optional from minichain import prompt, show, OpenAI, Google @dataclass class State: question: str history: str = "" next_query: Optional[str] = None final_answer: Optional[str] = None @prompt(OpenAI(), template_file = "selfask.pmpt.tpl", stop_template = "\nIntermediate answer:") def self_ask(model, state): out = model(state) res = out.split(":", 1)[1] if out.startswith("Follow up:"): return replace(state, next_query=res) elif out.startswith("So the final answer is:"): return replace(state, final_answer=res) @prompt(Google()) def google(model, state): if state.next_query is None: return state result = model(state.next_query) return State(state.question, state.history + "\nIntermediate answer: " + result + "\n") def selfask(question): state = State(question) for i in range(3): state = self_ask(state) state = google(state) return state # $ gradio = show(selfask, examples=["What is the zip code of the city where George Washington was born?"], subprompts=[self_ask, google] * 3, description=desc, code=open("selfask.py", "r").read().split("$")[1].strip().strip("#").strip(), out_type="json" ) if __name__ == "__main__": gradio.launch()