# + tags=["hide_inp"] | |
desc = """ | |
# QA | |
Questions answering with embeddings. Adapted from [OpenAI Notebook](https://github.com/openai/openai-cookbook/blob/main/examples/Question_answering_using_embeddings.ipynb). | |
""" | |
# - | |
import datasets | |
import numpy as np | |
from minichain import EmbeddingPrompt, TemplatePrompt, show_log, start_chain | |
# We use Hugging Face Datasets as the database by assigning | |
# a FAISS index. | |
olympics = datasets.load_from_disk("olympics.data") | |
olympics.add_faiss_index("embeddings") | |
# Fast KNN retieval prompt | |
class KNNPrompt(EmbeddingPrompt): | |
def find(self, out, inp): | |
res = olympics.get_nearest_examples("embeddings", np.array(out), 3) | |
return {"question": inp, "docs": res.examples["content"]} | |
# QA prompt to ask question with examples | |
class QAPrompt(TemplatePrompt): | |
template_file = "qa.pmpt.tpl" | |
with start_chain("qa") as backend: | |
prompt = KNNPrompt(backend.OpenAIEmbed()).chain(QAPrompt(backend.OpenAI())) | |
question = "Who won the 2020 Summer Olympics men's high jump?" | |
gradio = prompt.to_gradio(fields=["query"], | |
examples=[question], | |
description=desc) | |
if __name__ == "__main__": | |
gradio.launch() | |
# # + tags=["hide_inp"] | |
# QAPrompt().show( | |
# {"question": "Who won the race?", "docs": ["doc1", "doc2", "doc3"]}, "Joe Bob" | |
# ) | |
# # - | |
# show_log("qa.log") | |