mirror of
https://github.com/aljazceru/dev-gpt.git
synced 2025-12-28 10:54:20 +01:00
258 lines
7.6 KiB
Python
258 lines
7.6 KiB
Python
from src.constants import FLOW_URL_PLACEHOLDER
|
|
from src.options.generate.templates_user import not_allowed_docker_string, not_allowed_executor_string
|
|
|
|
gpt_example = '''
|
|
# gpt_3_5_turbo is a language model that can be used to generate text.
|
|
you can use it to generate text given a system definition and a user prompt.
|
|
The system definition defines the agent the user is talking to.
|
|
The user prompt is precise question and the expected answer format.
|
|
Example:
|
|
# in the executor init:
|
|
gpt = GPT_3_5_Turbo_API(
|
|
system=\'\'\'
|
|
You are a tv-reporter who is specialized in C-list celebrities.
|
|
When you get asked something like 'Who was having a date with <X>?', then you answer with a json like '{"dates": ["<Y>", "<Z>"]}'.
|
|
You must not answer something else - only the json.
|
|
\'\'\')
|
|
|
|
# in the executor endpoint function:
|
|
response_string = gpt(prompt)
|
|
response = json.loads(response_string) # response is a string
|
|
|
|
'''
|
|
|
|
executor_example = '''Using the Jina framework, users can define executors.
|
|
Here is an example of how an executor can be defined. It always starts with a comment:
|
|
|
|
**microservice.py**
|
|
```python
|
|
from jina import Executor, requests, DocumentArray, Document
|
|
import json
|
|
class MyInfoExecutor(Executor):
|
|
def __init__(self, **kwargs):
|
|
super().__init__()
|
|
|
|
@requests() # each Executor must have exactly this decorator without parameters
|
|
def foo(self, docs: DocumentArray, **kwargs) => DocumentArray:
|
|
for d in docs:
|
|
content = json.loads(d.text)
|
|
...
|
|
d.text = json.dumps(modified_content) # serialized json
|
|
return docs
|
|
```
|
|
|
|
An Executor gets a DocumentArray as input and returns a DocumentArray as output.
|
|
'''
|
|
|
|
docarray_example = f'''A DocumentArray is a python class that can be seen as a list of Documents.
|
|
A Document is a python class that represents a single document.
|
|
Here is the protobuf definition of a Document:
|
|
```
|
|
message DocumentProto {{
|
|
// used to store serialized json data the executor gets and returns
|
|
string text = 1;
|
|
}}
|
|
```
|
|
|
|
Here are examples of how a DocumentArray can be defined:
|
|
|
|
```
|
|
from jina import DocumentArray, Document
|
|
import json
|
|
|
|
d1 = Document(text=json.dumps({{'he_says': 'hello'}}))
|
|
|
|
# you can load binary data into a document
|
|
url = 'https://...'
|
|
response = requests.get(url)
|
|
obj_data = response.content
|
|
base64_data = base64.b64encode(png_data).decode('utf-8')
|
|
d2 = Document(text=json.dumps({{'image': base64_data}}))
|
|
|
|
array = numpy.array([1, 2, 3])
|
|
array_list = array.tolist()
|
|
d3 = Document(text=json.dumps(array_list))
|
|
d4 = Document()
|
|
d4.text = '{{"uri": "https://.../logo.png"}}'
|
|
```
|
|
'''
|
|
|
|
|
|
client_example = f'''After the executor is deployed, it can be called via Jina Client.
|
|
Here is an example of a client file:
|
|
|
|
**client.py**
|
|
```python
|
|
from jina import Client, Document, DocumentArray
|
|
client = Client(host='{FLOW_URL_PLACEHOLDER}', protocol='http')
|
|
d = Document(uri='...')
|
|
d.load_uri_to_blob()
|
|
response = client.post('/', inputs=DocumentArray([d])) # the client must be called on '/'
|
|
print(response[0].text)
|
|
```'''
|
|
|
|
|
|
template_system_message_base = f'''It is the year 2021.
|
|
You are a principal engineer working at Jina - an open source company.
|
|
You accurately satisfy all of the user's requirements.
|
|
To be more specific, you help the user to build a microservice with the following requirements:
|
|
```
|
|
{{task_description}}
|
|
```
|
|
and the following test scenario:
|
|
```
|
|
{{test_description}}
|
|
```
|
|
|
|
You must obey the following rules:
|
|
{not_allowed_executor_string}
|
|
{not_allowed_docker_string}'''
|
|
|
|
system_task_introduction = f'''
|
|
You are a product manager who refines the requirements of a client who wants to create a microservice.
|
|
'''
|
|
|
|
system_task_iteration = '''
|
|
The client writes a description of the microservice.
|
|
You must only talk to the client about the microservice.
|
|
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>
|
|
|
|
2.
|
|
You must do either a or b.
|
|
a)
|
|
If the description is not sufficiently specified, then ask for the missing information.
|
|
Your response must exactly match the following block code format (double asterisks for the file name and triple backticks for the file block):
|
|
|
|
**prompt.txt**
|
|
```text
|
|
<prompt to the client here>
|
|
```
|
|
|
|
b)
|
|
Otherwise you respond with the summarized description.
|
|
The summarized description must contain all the information mentioned by the client.
|
|
Your response must exactly match the following block code format (double asterisks for the file name and triple backticks for the file block):
|
|
|
|
**final.txt**
|
|
```text
|
|
<task here>
|
|
```
|
|
|
|
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: ❌
|
|
database access: n/a
|
|
|
|
**prompt.txt**
|
|
```text
|
|
Please provide the url of the weather api and a valid api key or some other way accessing the api. Or let our engineers try to find a free api.
|
|
```
|
|
|
|
Example for the description "convert png to svg":
|
|
input: ✅
|
|
output: ✅
|
|
api access: n/a
|
|
database access: n/a
|
|
|
|
**final.txt**
|
|
```text
|
|
The user inserts a png and gets an svg as response.
|
|
```
|
|
|
|
Example for the description "parser":
|
|
input: ❌
|
|
output: ❌
|
|
api access: n/a
|
|
database access: n/a
|
|
|
|
**prompt.txt**
|
|
```text
|
|
Please provide the input and output format.
|
|
```
|
|
'''
|
|
|
|
system_test_iteration = f'''
|
|
The client gives you a description of the microservice (web service).
|
|
Your task is to describe verbally a unit test for that microservice.
|
|
There are two cases:
|
|
a) If unit test requires an example input file as input:
|
|
In this case you must ask the client to provide the example input file as URL.
|
|
You must not accept files that are not URLs.
|
|
Your response must exactly match the following block code format (double asterisks for the file name and triple backticks for the file block):
|
|
|
|
**prompt.txt**
|
|
```text
|
|
<prompt to the client here>
|
|
```
|
|
|
|
If you did a, you must not do b.
|
|
b) Any strings, ints, or bools can be used as input for the unit test.
|
|
In this case you must describe the unit test verbally.
|
|
Your response must exactly match the following block code format (double asterisks for the file name and triple backticks for the file block):
|
|
|
|
**final.txt**
|
|
```text
|
|
<task here>
|
|
```
|
|
|
|
If you did b, you must not do a.
|
|
|
|
Example 1:
|
|
Client:
|
|
**client-response.txt**
|
|
```
|
|
given a city, get the weather report for the next 5 days using OpenWeatherMap with the api key b6907d289e10d714a6e88b30761fae22
|
|
```
|
|
PM:
|
|
**final.txt**
|
|
```text
|
|
The test takes the city "Berlin" as input and asserts that the weather report for the next 5 days exists in the response.
|
|
```
|
|
|
|
Example 2:
|
|
Client:
|
|
**client-response.txt**
|
|
```
|
|
The user inserts a png and gets an svg as response.
|
|
```
|
|
PM:
|
|
**prompt.txt**
|
|
```text
|
|
Please provide a png example input file as url.
|
|
```
|
|
Client:
|
|
**client-response.txt**
|
|
```
|
|
https://aquasecurity.github.io/kube-bench/v0.6.5/images/kube-bench-logo-only.png
|
|
```
|
|
PM:
|
|
**final.txt**
|
|
```text
|
|
The test takes the png https://aquasecurity.github.io/kube-bench/v0.6.5/images/kube-bench-logo-only.png as input and asserts the output is an svg.
|
|
```
|
|
|
|
Example 3:
|
|
Client:
|
|
**client-response.txt**
|
|
```
|
|
The microservice takes nothing as input and returns the current time.
|
|
```
|
|
PM:
|
|
**final.txt**
|
|
```text
|
|
The test takes nothing as input and asserts that the output is a string.
|
|
```
|
|
'''
|