From 9ca6d0ae21119956151038bb23c8955ecc6348ef Mon Sep 17 00:00:00 2001 From: "@nheuser" <nheuser@uni-koblenz.de> Date: Wed, 26 Jun 2024 17:49:41 +0200 Subject: [PATCH] added batch builder and batch retriever --- PythonAPI/.gitignore | 5 ++++- PythonAPI/getResults.py | 29 +++++++++++++++++++++++++++++ PythonAPI/prompt.txt | 26 ++++++++++++++++++++++++++ PythonAPI/sendRequest.py | 38 +++++++++++++++++++++++++++----------- 4 files changed, 86 insertions(+), 12 deletions(-) create mode 100644 PythonAPI/getResults.py create mode 100755 PythonAPI/prompt.txt diff --git a/PythonAPI/.gitignore b/PythonAPI/.gitignore index cbd677d..f683f4e 100644 --- a/PythonAPI/.gitignore +++ b/PythonAPI/.gitignore @@ -1,2 +1,5 @@ /grammarWordsPairs.txt -/resultsOfMembershipTest.txt \ No newline at end of file +/resultsOfMembershipTest.txt +/requests.jsonl +/batchId.txt +/resultsAPI.jsonl \ No newline at end of file diff --git a/PythonAPI/getResults.py b/PythonAPI/getResults.py new file mode 100644 index 0000000..9320c62 --- /dev/null +++ b/PythonAPI/getResults.py @@ -0,0 +1,29 @@ +import json +from openai import OpenAI + +client = OpenAI() + +if __name__ == "__main__": + with open("batchId.txt") as batchIdFile: + batchId = batchIdFile.read() + batchResult = client.batches.retrieve(batch_id=batchId) + match batchResult.status: + case "validating": + print("Request is being validated") + case "failed": + print("Request has failed") + case "in_progress": + print("Request is being processed") + case "finalizing": + print("Results are being prepared") + case "completed": + print("Request has been completed") + results = client.files.content(batchResult.output_file_id) + with open("resultsAPI.jsonl", "w") as resultAPI: + resultAPI.write(results) + case "expired": + print("the results couldn't be completed in time") + case "cancelling": + print("the request is being cancelled") + case "cancelled": + print("the request has been cancelled") diff --git a/PythonAPI/prompt.txt b/PythonAPI/prompt.txt new file mode 100755 index 0000000..6a5a9ed --- /dev/null +++ b/PythonAPI/prompt.txt @@ -0,0 +1,26 @@ +Du bekommst eine formale Grammatik G = (V, T, R, S), wobei V die Menge der Variablen, T die Menge der Terminalsymbole, R die Menge der Produktionsregeln und S das Startsymbol ist. Die Grammatik erzeugt dabei ein Sprache L(G). Außerdem bekommst du eine Liste mit Wörtern, für die du jeweils prüfen sollst, ob das Wort Teil der Sprache L(G) ist. Wenn das Wort Teil der Sprache L(G) ist, gib True zurück und eine Liste, dessen Elemente den Ableitungsschritten des Wortes mit den Produktionsregeln aus R entsprechen. Dabei muss es sich um eine Linksableitung handeln. Das heißt, dass von einem Schritt in den nächsten immer nur die am weitesten links stehende Variable ersetzt werden soll. Wenn das Wort nicht Teil der Sprache L(G) ist, gib False zurück und die leere Liste. Gib als Antwort ausschließlich die in den folgenden Beispielen gezeigte Liste zurück, es dürfen keine weiteren Angaben in deiner Antwort vorkommen: +1. Beispiel: +Anfrage des Benutzers: +Die Grammatik lautet: +G = (V, T, R, S) +V = {S, A, B} +T = {a, b, c} +R = {S -> cS | bA | a, A -> aS | aB, B -> c} +Die Liste der Wörter lautet: +["babaa", "cb"] + +Deine Antwort: +[{True: [ "S", "bA", "baS", "babA", "babaS", "babaa"]}, {False: []}] + +2. Beispiel: +Anfrage des Benutzers: +Die Grammatik lautet: +G = (V, T, R, S) +V = {S, A, B, C} +T = {a, b, c} +R = {S -> ε | aA | ASCB, A -> Sc | AACA, B -> cCS | CC,\ C -> ε | bb} +Die Liste der Wörter lautet: +["baaac", ""] + +Deine Antwort: +[{False: []}, {True: ["S", ""]}] \ No newline at end of file diff --git a/PythonAPI/sendRequest.py b/PythonAPI/sendRequest.py index 4eac188..33e37f4 100644 --- a/PythonAPI/sendRequest.py +++ b/PythonAPI/sendRequest.py @@ -1,19 +1,35 @@ import json +from openai import OpenAI + +client = OpenAI() +GPT_MODEL = "gpt-3.5-turbo-0125" if __name__ == "__main__": with open('grammarWordsPairs.txt') as grammarWordsPairs: jsonArray = grammarWordsPairs.read() - with open('resultsOfMembershipTest.txt') as results: - resultArray = results.readlines() array = json.loads(jsonArray) + with open("prompt.txt", encoding="utf-8") as prompt: + systemMessage = prompt.read() + inputTemplate = {"custom_id": None, "method": "POST", "url": "/v1/chat/completions", "body": {"model": GPT_MODEL, "messages": [{"role": "system", "content": systemMessage}, {"role": "user", "content": None}]}} + requestId = 0 for e in array: for key in e: - print(key) - print(e[key]) - i = 0 - for v in resultArray: - if v == "\n": - i += 1 - continue - value = v[0:len(v) - 1] - print(f"Grammar {i}: {value}") + userMessage = f"Die Grammatik lautet:\n{key}\nDie Liste der Wörter lautet:\n{e[key]}" + inputTemplate["body"]["messages"][1]["content"] = userMessage + inputTemplate["custom_id"] = f"request-{requestId}" + requestId += 1 + with open('requests.jsonl', 'a', encoding="utf-8") as requests: + requests.write(json.dumps(inputTemplate) + '\n') + """ with open("requests.jsonl") as allRequests: + fileObject = client.files.create( + file=allRequests, + purpose="batch" + ) + fileId = fileObject.id + batch = client.batches.create( + input_file_id=fileId, + endpoint="/v1/chat/completions", + completion_window="24h" + ) + with open("batchId.txt", "w") as batchId: + batchId.write(batch.id) """ -- GitLab