From 85827d27f1d50635c3db3ead31401c2ca3f746a0 Mon Sep 17 00:00:00 2001 From: Jason Date: Mon, 10 Jul 2023 01:25:09 +0800 Subject: [PATCH] add a gpt-engineer exmaple --- examples/gpt-engineer/multi_file_program.py | 130 ++++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100644 examples/gpt-engineer/multi_file_program.py diff --git a/examples/gpt-engineer/multi_file_program.py b/examples/gpt-engineer/multi_file_program.py new file mode 100644 index 0000000..cba60b8 --- /dev/null +++ b/examples/gpt-engineer/multi_file_program.py @@ -0,0 +1,130 @@ +import openai + +from typing import List +from pydantic import Field +from openai_function_call import OpenAISchema + + +class File(OpenAISchema): + """ + Correctly named file with contents. + """ + + file_name: str = Field( + ..., description="The name of the file including the extension" + ) + body: str = Field(..., description="Correct contents of a file") + + def save(self): + with open(self.file_name, "w") as f: + f.write(self.body) + + +class Program(OpenAISchema): + """ + Set of files that represent a complete and correct program + """ + + files: List[File] = Field(..., description="List of files") + + +def segment(data: str) -> Program: + completion = openai.ChatCompletion.create( + model="gpt-3.5-turbo-0613", + temperature=0.1, + functions=[Program.openai_schema], + function_call={"name": Program.openai_schema["name"]}, + messages=[ + { + "role": "system", + "content": "You are a world class programming AI capable of writing correct python scripts and modules. You will name files correct, include __init__.py files and write correct python code. with correct imports.", + }, + { + "role": "user", + "content": data, + }, + ], + max_tokens=1000, + ) + return Program.from_response(completion) + + +if __name__ == "__main__": + queries = segment( + """ + Create a fastapi app with a readme.md file and a main.py file with + some basic math functions. the datamodels should use pydantic and + the main.py should use fastapi. the readme.md should have a title + and a description. The readme should contain some helpful infromation + and a curl example""" + ) + + for file in queries.files: + print(file.file_name) + print("-") + print(file.body) + print("\n\n\n") + """ + readme.md + - + # FastAPI App + + This is a FastAPI app that provides some basic math functions. + + ## Usage + + To use this app, follow the instructions below: + + 1. Install the required dependencies by running `pip install -r requirements.txt`. + 2. Start the app by running `uvicorn main:app --reload`. + 3. Open your browser and navigate to `http://localhost:8000/docs` to access the Swagger UI documentation. + + ## Example + + You can use the following curl command to test the `/add` endpoint: + + ```bash + $ curl -X POST -H "Content-Type: application/json" -d '{"a": 2, "b": 3}' http://localhost:8000/add + ``` + + main.py + - + from fastapi import FastAPI + from pydantic import BaseModel + + app = FastAPI() + + + class Numbers(BaseModel): + a: int + b: int + + + @app.post('/add') + def add_numbers(numbers: Numbers): + return {'result': numbers.a + numbers.b} + + + @app.post('/subtract') + def subtract_numbers(numbers: Numbers): + return {'result': numbers.a - numbers.b} + + + @app.post('/multiply') + def multiply_numbers(numbers: Numbers): + return {'result': numbers.a * numbers.b} + + + @app.post('/divide') + def divide_numbers(numbers: Numbers): + if numbers.b == 0: + return {'error': 'Cannot divide by zero'} + return {'result': numbers.a / numbers.b} + + + requirements.txt + - + fastapi + uvicorn + pydantic + """