mirror of
https://github.com/aljazceru/dev-gpt.git
synced 2025-12-25 01:14:24 +01:00
🧪 test: level 2
This commit is contained in:
@@ -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'
|
||||
)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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}
|
||||
'''
|
||||
)
|
||||
|
||||
@@ -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):
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user