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! Downloads - + Discord Chat 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