diff --git a/dev_gpt/options/generate/chains/question_answering.py b/dev_gpt/options/generate/chains/question_answering.py index 6ff9f22..2f191ce 100644 --- a/dev_gpt/options/generate/chains/question_answering.py +++ b/dev_gpt/options/generate/chains/question_answering.py @@ -1,6 +1,14 @@ from dev_gpt.apis.gpt import ask_gpt from dev_gpt.options.generate.parser import boolean_parser +def is_question_true(question): + def fn(text): + return answer_yes_no_question(text, question) + return fn + +def is_question_false(question): + return lambda context: not is_question_true(question)(context) + def answer_yes_no_question(text, question): prompt = question_prompt.format( @@ -13,4 +21,5 @@ question_prompt = '''\ {text} {question} Note: You must answer "yes" or "no". -''' \ No newline at end of file +''' + diff --git a/dev_gpt/options/generate/chains/translation.py b/dev_gpt/options/generate/chains/translation.py new file mode 100644 index 0000000..c34201f --- /dev/null +++ b/dev_gpt/options/generate/chains/translation.py @@ -0,0 +1,27 @@ +from dev_gpt.apis.gpt import ask_gpt +from dev_gpt.options.generate.parser import identity_parser + + +def translation(from_format: str, to_format: str): + def fn(text_to_translate): + return translate(from_format, to_format, text_to_translate) + + return fn + + +def translate(from_format, to_format, text_to_translate): + prompt = translation_prompt.format( + from_format=from_format, + to_format=to_format, + text_to_translate=text_to_translate + ) + return ask_gpt(prompt, identity_parser) + + +translation_prompt = '''\ +Translate the following {from_format} to a {to_format}: +``` +{text_to_translate} +``` +Note: You must not output anything else - just the translation. +Note: You must not add any formatting.''' diff --git a/dev_gpt/options/generate/condition.py b/dev_gpt/options/generate/condition.py deleted file mode 100644 index 3049008..0000000 --- a/dev_gpt/options/generate/condition.py +++ /dev/null @@ -1,10 +0,0 @@ -from dev_gpt.options.generate.chains.question_answering import answer_yes_no_question - - -def is_question_true(question): - def fn(text): - return answer_yes_no_question(text, question) - return fn - -def is_question_false(question): - return lambda context: not is_question_true(question)(context) diff --git a/dev_gpt/options/generate/pm/pm.py b/dev_gpt/options/generate/pm/pm.py index 86beca5..cedf931 100644 --- a/dev_gpt/options/generate/pm/pm.py +++ b/dev_gpt/options/generate/pm/pm.py @@ -1,8 +1,9 @@ from dev_gpt.apis import gpt from dev_gpt.apis.gpt import ask_gpt from dev_gpt.options.generate.chains.auto_refine_description import auto_refine_description +from dev_gpt.options.generate.chains.question_answering import is_question_true +from dev_gpt.options.generate.chains.translation import translation from dev_gpt.options.generate.chains.user_confirmation_feedback_loop import user_feedback_loop -from dev_gpt.options.generate.condition import is_question_true from dev_gpt.options.generate.chains.get_user_input_if_needed import get_user_input_if_needed from dev_gpt.options.generate.parser import identity_parser from dev_gpt.options.generate.ui import get_random_employee @@ -61,10 +62,19 @@ Description of the microservice: condition_question='Does the microservice send requests to an API?', question_gen='Generate a question that asks for the endpoint and an example of a request and response when interacting with the external API.', extension_name='Example of API usage', + post_transformation_fn=translation(from_format='api instruction', to_format='python code snippet') ) return microservice_description, test_description - def user_input_extension_if_needed(self, context, microservice_description, condition_question, question_gen, extension_name): + def user_input_extension_if_needed( + self, + context, + microservice_description, + condition_question, + question_gen, + extension_name, + post_transformation_fn=None + ): user_answer = get_user_input_if_needed( context={ 'Microservice description': microservice_description, @@ -77,6 +87,8 @@ Description of the microservice: question_gen_prompt_part=question_gen, ) if user_answer: + if post_transformation_fn: + user_answer = post_transformation_fn(user_answer) return f'\n{extension_name}: {user_answer}' else: return ''