From 70da8a4ddba2362f6ef1646c79332ad653e521fd Mon Sep 17 00:00:00 2001 From: Andrei Stoica Date: Tue, 20 Feb 2024 11:31:01 -0500 Subject: [PATCH] backend to interface with ai models --- .gitignore | 2 + speech-speech/backend/.env | 1 + speech-speech/backend/api.py | 53 +++++++++++++++++++++ speech-speech/backend/audio | Bin 0 -> 32110 bytes speech-speech/backend/requirements.txt | 4 ++ speech-speech/{ => frontend}/.eslintrc.cjs | 0 6 files changed, 60 insertions(+) create mode 100644 .gitignore create mode 100644 speech-speech/backend/.env create mode 100644 speech-speech/backend/api.py create mode 100644 speech-speech/backend/audio create mode 100644 speech-speech/backend/requirements.txt rename speech-speech/{ => frontend}/.eslintrc.cjs (100%) diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..827d37b --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +**/.venv/ +**/__pycache__/ diff --git a/speech-speech/backend/.env b/speech-speech/backend/.env new file mode 100644 index 0000000..b596733 --- /dev/null +++ b/speech-speech/backend/.env @@ -0,0 +1 @@ +OPENAI_API_KEY=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 diff --git a/speech-speech/backend/api.py b/speech-speech/backend/api.py new file mode 100644 index 0000000..a9e54f4 --- /dev/null +++ b/speech-speech/backend/api.py @@ -0,0 +1,53 @@ +from openai import OpenAI +from fastapi import FastAPI, File, Response, Request +from fastapi.responses import JSONResponse +from fastapi.encoders import jsonable_encoder +from json import dumps +from pydantic import BaseModel +import filetype +import whisper + + +app = FastAPI() +openAI_clinet = OpenAI() +model = whisper.load_model("base") + + +class ConversationMessege(BaseModel): + role: str + content: str + + +class Conversation(BaseModel): + messages: list[ConversationMessege] + + +@app.post("/get-text") +def get_text(response: Response, audio: bytes = File()): + response.headers["Access-Control-Allow-Origin"] = "*" + with open("audio", "wb") as f: + f.write(audio) + print(len(audio)) + # transcript = openAI_clinet.audio.transcriptions.create( + # model="whisper-1", + # file=audio, + # response_format="text", + # RequestBody + # ) + result = model.transcribe("audio") + data = {"len": len(audio), "user-transcript": result["text"]} + return data + + +@app.post("/conversation") +async def get_next_response(request: Request, response: Response): + response.headers["Access-Control-Allow-Origin"] = "*" + messages = await request.json() + res = openAI_clinet.chat.completions.create( + model="gpt-3.5-turbo", + messages=messages, + ) + res_msg = res.choices[0].message.content + role = res.choices[0].message.role + print(res_msg) + return {"role": role, "content": res_msg} diff --git a/speech-speech/backend/audio b/speech-speech/backend/audio new file mode 100644 index 0000000000000000000000000000000000000000..38793cfb2866ef7da4329b38ce40898d3f1d8c28 GIT binary patch literal 32110 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