🧪 test: level 2

This commit is contained in:
Florian Hönicke
2023-04-30 19:42:50 +02:00
parent 9d22511b6f
commit 6ae41d6ae2
4 changed files with 64 additions and 30 deletions

View File

@@ -24,7 +24,8 @@ from src.options.generate.templates_user import template_generate_microservice_n
template_solve_pip_dependency_issue, template_is_dependency_issue, template_generate_playground, \
template_generate_function, template_generate_test, template_generate_requirements, \
template_chain_of_thought, template_summarize_error, \
template_generate_apt_get_install, template_solve_apt_get_dependency_issue, template_refinement
template_generate_apt_get_install, template_solve_apt_get_dependency_issue, template_pm_task_iteration, \
template_pm_test_iteration
from src.options.generate.ui import get_random_employee
from src.utils.io import persist_file, get_all_microservice_files_with_content, get_microservice_path
@@ -422,15 +423,26 @@ gptdeploy deploy --path {self.microservice_root_path}
if not original_task:
self.microservice_specification.task = self.get_user_input(pm, 'What should your microservice do?')
messages = [SystemMessage(content=system_task_introduction + system_task_iteration)]
self.refine_requirements(pm, messages, 'task', '')
messages = [
SystemMessage(content=system_task_introduction + system_task_iteration),
]
self.refine_requirements(
pm,
messages,
'task',
'',
template_pm_task_iteration,
micro_service_initial_description=f'Microservice description: {self.microservice_specification.task}'
)
# replacing the system message of the task with the system message of the test
messages[0] = SystemMessage(content=system_task_introduction + system_test_iteration)
self.refine_requirements(
pm,
messages,
'test',
'''Note that the test scenario must not contain information that was already mentioned in the microservice description.
Note that you must not ask for information that were already mentioned before.'''
Note that you must not ask for information that were already mentioned before.''',
template_pm_test_iteration
)
break
except self.TaskRefinementException as e:
@@ -445,17 +457,15 @@ Test scenario:
{self.microservice_specification.test}
''')
def refine_requirements(self, pm, messages, refinement_type, custom_suffix):
def refine_requirements(self, pm, messages, refinement_type, custom_suffix, template_pm_iteration, micro_service_initial_description=None):
user_input = self.microservice_specification.task
num_parsing_tries = 0
while True:
conversation = self.gpt_session.get_conversation(messages, print_stream=os.environ['VERBOSE'].lower() == 'true', print_costs=False)
agent_response_raw = conversation.chat(
template_refinement.format(
user_input=user_input,
final_placeholder='''input: "<input here>"
weak assertion of output: "<weak assertion of output here>"''' if refinement_type == 'test' else '<microservice description here>',
template_pm_iteration.format(
custom_suffix=custom_suffix,
**{'micro_service_initial_description': micro_service_initial_description} if refinement_type == 'task' and len(messages) == 1 else {}
),
role='user'
)

View File

@@ -28,11 +28,11 @@ You must not output anything else than what you got told in the following steps.
1.
You must create a check list for the requirements of the microservice.
Input and output have to be accurately specified.
You must use the following format (insert ✅, ❌ or n/a) depending on whether the requirement is fulfilled, not fulfilled or not applicable:
input: <insert one of ✅, ❌ or n/a here>
output: <insert one of ✅, ❌ or n/a here>
api access: <insert one of ✅, ❌ or n/a here>
database access: <insert one of ✅, ❌ or n/a here>
You must use the following format (insert defined, not defined or n/a) depending on whether the requirement is fulfilled, not fulfilled or not applicable:
input: <insert defined, not defined or n/a here>
output: <insert defined, not defined or n/a here>
api access: <insert defined, not defined or n/a here>
database access: <insert defined, not defined or n/a here>
2.
You must do either a or b.
@@ -59,9 +59,9 @@ The character sequence ``` must always be at the beginning of the line.
You must not add information that was not provided by the client.
Example for the description "given a city, get the weather report for the next 5 days":
input:
output:
api access:
input: defined
output: defined
api access: not defined
database access: n/a
**prompt.txt**
@@ -70,8 +70,8 @@ Please provide the url of the weather api and a valid api key or some other way
```
Example for the description "convert png to svg":
input:
output:
input: defined
output: defined
api access: n/a
database access: n/a
@@ -81,8 +81,8 @@ The user inserts a png and gets an svg as response.
```
Example for the description "parser":
input:
output:
input: not defined
output: not defined
api access: n/a
database access: n/a

View File

@@ -349,14 +349,9 @@ The playground (app.py) must not import the executor.
'''
)
# Create a wrapper around google called Joogle. It modifies the page summary preview text of the search results to insert the word Jina as much as possible.
template_refinement = PromptTemplate.from_template(
'''
template_pm_task_iteration = PromptTemplate.from_template(
'''{micro_service_initial_description}
1.Quickly go through the checklist (input/output well defined? api or db access needed?) and think about if you should ask something to the client or if you should write the final description.
**client-response.txt**
```text
{user_input}
```
2.Either write the prompt.txt or the final.txt file.
Either ask for clarification like this:
**prompt.txt**
@@ -364,10 +359,10 @@ Either ask for clarification like this:
<prompt to the client here (must be only one question)>
```
Or write the summarized microservice{_optional_test} description like this:
Or write the summarized microservice description like this:
**final.txt**
```text
{final_placeholder}
<microservice description here>
```
Note that your response must be either prompt.txt or final.txt. You must not write both.
Note that you must obey the double asterisk and tripple backtick syntax from above.
@@ -377,3 +372,30 @@ Note that if urls, secrets, database names, etc. are mentioned, they must be par
{custom_suffix}
'''
)
template_pm_test_iteration = PromptTemplate.from_template(
'''If the example input for the microservice was mentioned already, then output final.txt.
Otherwise, output prompt.txt where you ask for the example input file as URL.
Except for urls, you should come up with your own example input that makes sense for the microservice description.
Example for the case where you have to ask for the example input file:
**prompt.txt**
```text
Can you please provide an example input file as URL?
```
Example for the case where the example input was already mentioned:
**final.txt**
```text
input: "<input here>"
weak assertion of output: "<weak assertion of output here>"
```
Note that your response must be either prompt.txt or final.txt. You must not write both.
Note that you must obey the double asterisk and tripple backtick syntax from above.
Note that the last sequence of characters in your response must be ``` (triple backtick).
Note that your response must start with the character sequence ** (double asterisk).
Note that prompt.txt must not only contain one question.
Note that if urls, secrets, database names, etc. are mentioned, they must be part of the summary.
{custom_suffix}
'''
)

View File

@@ -65,6 +65,8 @@ def test_generation_level_2(tmpdir):
)
generator.generate()
#Create a wrapper around google called Joogle. It modifies the page summary preview text of the search results to insert the word Jina as much as possible.
@pytest.mark.skip(reason="not possible")
def test_generation_level_3(tmpdir):
"""