diff --git a/README.md b/README.md index 5b42e54..7a1893f 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,56 @@ -# template +# question-answer +
+ + + +## Desription + +Prompt Template. + + +
+ + + +## Code Example + +### Example + + +```python + +from towhee import ops, pipe +import requests + +towhee_docs = requests.get('https://raw.githubusercontent.com/towhee-io/towhee/main/README.md').context + +temp = """{question} + +input: +{context} +""" + +p = ( + pipe.input('question', 'doc', 'history') + .map(('question', 'doc', 'history'), 'prompt', ops.prompt.template(temp)) + .map('prompt', 'answer', ops.LLM.OpenAI()) + .output('answer') +) + +an1 = p('Tell me something about Towhee', towhee_docs, []).get()[0] + +an2 = p('Give an example', towhee_docs, [('Tell me something about Towhee', an1)]).get()[0] + +``` + +## Factory Constructor + +Create the operator via the following factory method: + +***ops.prompt.template(temp)*** + +
+ + +**Returns:** *List[Dict]* \ No newline at end of file diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..58cbf9e --- /dev/null +++ b/__init__.py @@ -0,0 +1,4 @@ +from .template_prompt import TemplatePrompt + +def question_answer(temp: str): + return TemplatePrompt(temp) diff --git a/template_prompt.py b/template_prompt.py new file mode 100644 index 0000000..77abdd5 --- /dev/null +++ b/template_prompt.py @@ -0,0 +1,21 @@ +from typing import List, Tuple, Dict, Optional + +from towhee.operator import PyOperator + + +class TemplatePrompt(PyOperator): + def __init__(self, temp: str): + super().__init__() + self._template = temp + + def __call__(self, **kwargs) -> List[Dict[str, str]]: + history = kwargs.get('history', []) + prompt_str = self._template.format(**kwargs) + ret = [{'question': prompt_str}] + if not isinstance(history, list): + return ret + else: + history_data = [] + for item in history: + history_data.append({'question': item[0], 'answer': item[1]}) + return history_data + ret