diff --git a/README.md b/README.md
index 35e2dbe..99c1292 100644
--- a/README.md
+++ b/README.md
@@ -49,7 +49,7 @@ Your imagination is the limit!
-
+
diff --git a/dev_gpt/__init__.py b/dev_gpt/__init__.py
index ffe4dfc..e878c41 100644
--- a/dev_gpt/__init__.py
+++ b/dev_gpt/__init__.py
@@ -1,3 +1,3 @@
-__version__ = '0.18.38'
+__version__ = '0.18.41'
from dev_gpt.cli import main
\ No newline at end of file
diff --git a/dev_gpt/apis/gpt.py b/dev_gpt/apis/gpt.py
index 2f07a02..44d329f 100644
--- a/dev_gpt/apis/gpt.py
+++ b/dev_gpt/apis/gpt.py
@@ -77,7 +77,7 @@ class GPTSession:
}]
)
break
- except RateLimitError:
+ except (RateLimitError, openai.error.APIError):
sleep(1)
continue
return True
@@ -88,11 +88,12 @@ class GPTSession:
self.chars_prompt_so_far += chars_prompt
self.chars_generation_so_far += chars_generation
if print_costs:
- print('\n')
- money_prompt = self._calculate_money_spent(self.chars_prompt_so_far, self.pricing_prompt)
- money_generation = self._calculate_money_spent(self.chars_generation_so_far, self.pricing_generation)
- print('Total money spent so far on openai.com:', f'${money_prompt + money_generation:.3f}')
- print('\n')
+ if os.environ['VERBOSE'].lower() == 'true':
+ print('\n')
+ money_prompt = self._calculate_money_spent(self.chars_prompt_so_far, self.pricing_prompt)
+ money_generation = self._calculate_money_spent(self.chars_generation_so_far, self.pricing_generation)
+ print('Total money spent so far on openai.com:', f'${money_prompt + money_generation:.3f}')
+ print('\n')
@staticmethod
def _calculate_money_spent(num_chars, price):
diff --git a/dev_gpt/cli.py b/dev_gpt/cli.py
index 4c0b29a..08d2ada 100644
--- a/dev_gpt/cli.py
+++ b/dev_gpt/cli.py
@@ -35,9 +35,6 @@ def path_param(func):
def wrapper(*args, **kwargs):
path = os.path.expanduser(kwargs['path'])
path = os.path.abspath(path)
- if os.path.exists(path) and os.listdir(path):
- click.echo(f"Error: The path {path} you provided via --path is not empty. Please choose a directory that does not exist or is empty.")
- exit(1)
kwargs['path'] = path
return func(*args, **kwargs)
return wrapper
diff --git a/dev_gpt/options/generate/pm/pm.py b/dev_gpt/options/generate/pm/pm.py
index 105eb7a..7f3dfa5 100644
--- a/dev_gpt/options/generate/pm/pm.py
+++ b/dev_gpt/options/generate/pm/pm.py
@@ -63,7 +63,7 @@ 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')
+ post_transformation_fn=translation(from_format='api instruction', to_format='python code snippet raw without formatting')
)
return microservice_description, test_description
diff --git a/dev_gpt/options/generate/static_files/microservice/jina_wrapper.py b/dev_gpt/options/generate/static_files/microservice/jina_wrapper.py
index bfc4553..5cd7191 100644
--- a/dev_gpt/options/generate/static_files/microservice/jina_wrapper.py
+++ b/dev_gpt/options/generate/static_files/microservice/jina_wrapper.py
@@ -11,5 +11,5 @@ class DevGPTExecutor(Executor):
@jina_requests()
def endpoint(self, docs: DocumentArray, **kwargs) -> DocumentArray:
for d in docs:
- d.text = json.dumps(func(json.loads(d.text)))
+ d.text = func(d.text)
return docs
diff --git a/dev_gpt/options/generate/templates_user.py b/dev_gpt/options/generate/templates_user.py
index 9d0c58b..a726b17 100644
--- a/dev_gpt/options/generate/templates_user.py
+++ b/dev_gpt/options/generate/templates_user.py
@@ -105,14 +105,18 @@ generated_string = gpt(prompt) # fill-in the prompt (str); the output is a stri
template_generate_function = PromptTemplate.from_template(
general_guidelines_string + '''
-Write a python function which receives as input a dictionary and outputs a dictionary. The function is called 'func'.
-The function must full-fill: '{microservice_description}'.
+Write a python function which receives as \
+input json string (that can be parsed with the python function json.loads) and \
+outputs a json string (that can be parsed with the python function json.loads). \
+The function is called 'func'.
+The function must fulfill the following description: '{microservice_description}'.
It will be tested with the following scenario: '{test_description}'.
For the implementation use the following package(s): '{packages}'.
-The code must start with the following import:
+The code must start with the following imports:
```
from .apis import GPT_3_5_Turbo
+import json
```
Obey the following rules:
''' + not_allowed_function_string + '''
@@ -134,9 +138,10 @@ template_generate_test = PromptTemplate.from_template(
Write a single pytest case that tests the following scenario: '{test_description}'. In case the test scenario is not precise enough, test a general case without any assumptions.
Start the test with an extensive comment about the test case. If gpt_3_5_turbo is used in the executor, then the test must not check the exact output of the executor as it is not deterministic.
-The test must start with the following import:
+The test must start with the following imports:
```
from .microservice import func
+import json
```
''' + not_allowed_function_string + '''
The test must not open local files.
@@ -148,9 +153,9 @@ The test must not set any environment variables which require a key.
template_generate_requirements = PromptTemplate.from_template(
- general_guidelines_string + '''
+ general_guidelines_string + f'''
-{code_files_wrapped}
+{{code_files_wrapped}}
Write the content of the requirements.txt file like this:
**requirements.txt**
@@ -160,9 +165,11 @@ Write the content of the requirements.txt file like this:
Add any more packages that are needed to run the code.
You must not add gpt_3_5_turbo to the requirements.txt file.
-All versions are fixed using ~=, ==, <, >, <=, >=. The package versions must not have conflicts. Output only the requirements.txt file.
-''' + '\n' + template_code_wrapping_string
-)
+All versions are fixed using ~=, ==, <, >, <=, >=. The package versions must not have conflicts.
+
+{template_code_wrapping_string}
+Note: you must only output the requirements.txt file - no other file.
+''')
template_generate_apt_get_install = PromptTemplate.from_template(
@@ -399,7 +406,10 @@ Example:
**implementation.py**
```python
-print('hello world')
+import json
+
+def func(json_input: str) -> str:
+ return json_input['img_base64']
```'''
)
diff --git a/requirements.txt b/requirements.txt
index ee06ba1..97b99b7 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,6 +1,7 @@
jina==3.15.1.dev14
click
streamlit==1.9.0
+altair==4.2.2
openai>=0.27.5
psutil
jcloud