lyimo commited on
Commit
a13ba9b
·
verified ·
1 Parent(s): 232921f

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +52 -52
main.py CHANGED
@@ -1,58 +1,58 @@
1
- import os
2
- from dotenv import load_dotenv
3
- import openai
4
- from flask import Flask, request, jsonify, send_file
 
5
  from transformers import pipeline
6
- from gtts import gTTS
7
 
8
- app = Flask(__name__)
 
9
 
10
- # Load environment variables from .env file
11
- load_dotenv()
12
 
13
- openai.api_key = os.getenv("OPENAI_API_KEY")
14
- os.environ["HF_HOME"] = os.getenv("HF_HOME")
15
  pipe = pipeline(model="seeafricatz/kiaziboraasr")
16
-
17
- def transcribe(audio_path):
18
- text = pipe(audio_path)["text"]
19
- return text
20
-
21
- def generate_response(transcribed_text):
22
- response = openai.Completion.create(
23
- engine="davinci",
24
- prompt=transcribed_text,
25
- max_tokens=50
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26
  )
27
- return response.choices[0].text
28
-
29
- def inference(text):
30
- tts = gTTS(text, lang='sw')
31
- output_file = "tts_output.mp3"
32
- tts.save(output_file)
33
- return output_file
34
-
35
- @app.route('/process_audio', methods=['POST'])
36
- def process_audio():
37
- if 'audio' not in request.files:
38
- return jsonify({'error': 'No audio file provided'}), 400
39
-
40
- audio_file = request.files['audio']
41
- audio_path = "temp_audio.wav"
42
- audio_file.save(audio_path)
43
-
44
- transcribed_text = transcribe(audio_path)
45
- response_text = generate_response(transcribed_text)
46
- output_file = inference(response_text)
47
-
48
- return jsonify({
49
- 'response_text': response_text,
50
- 'response_audio_url': f'/audio/{output_file}'
51
- })
52
-
53
- @app.route('/audio/<path:filename>')
54
- def audio(filename):
55
- return send_file(filename, as_attachment=True)
56
-
57
- if __name__ == '__main__':
58
- app.run()
 
1
+ from fastapi import FastAPI, Request
2
+ from fastapi.staticfiles import StaticFiles
3
+ from fastapi.responses import FileResponse, HTMLResponse
4
+ from fastapi.templating import Jinja2Templates
5
+
6
  from transformers import pipeline
7
+ from openai import OpenAI
8
 
9
+ app = FastAPI()
10
+ app.mount("/static", StaticFiles(directory="static"), name="static")
11
 
12
+ templates = Jinja2Templates(directory="templates")
 
13
 
 
 
14
  pipe = pipeline(model="seeafricatz/kiaziboraasr")
15
+ client = OpenAI()
16
+
17
+ @app.post("/transcribe")
18
+ async def transcribe(request: Request):
19
+ form_data = await request.form()
20
+ audio_file = form_data["audio"]
21
+ text = pipe(audio_file)["text"]
22
+ return {"text": text}
23
+
24
+ @app.post("/generate_response")
25
+ async def generate_response(request: Request):
26
+ form_data = await request.form()
27
+ transcribed_text = form_data["text"]
28
+ response = client.chat.completions.create(
29
+ messages=[
30
+ {"role": "system", "content": "All your answers should be in swahili only, users undertands swahili only so here we start... Wewe ni mtaalamu wa viazi lishe na utajibu maswali yote kwa kiswahili tu!"},
31
+ {"role": "user", "content": "Mambo vipi?"},
32
+ {"role": "assistant", "content": "Salama je una swali lolote kuhusu viazi lishe?"},
33
+ {"role": "user", "content": "nini maana ya Viazi lishe?"},
34
+ {"role": "assistant", "content": "viazi lishe ni Viazi vitamu vyenye rangi ya karoti kwa ndani ambavyo vina vitamin A kwa wingi"},
35
+ {"role": "user", "content": "nini matumizi ya viazi lishe?"},
36
+ {"role": "assistant", "content": "viazi lishe vinaweza kutengenezea chakula kama Keki, Maandazi, Kalimati na tambi: Ukisaga unga wa viazi lishe, unaweza kutumika kupika vyakula ambavyo huwa watu hutumia unga wa ngano kupika, unga wa viazi lishe una virutubisho vingi zaidi kuliko unga wa ngano na ukitumika kupikia vyakula tajwa hapo juu watumiaji watakuwa wanakula vyakula vyenye virutubisho Zaidi."},
37
+ {"role": "user", "content": transcribed_text},
38
+ ],
39
+ model="gpt-4"
40
  )
41
+ return {"response": response.choices[0].message.content}
42
+
43
+ @app.post("/inference")
44
+ async def inference(request: Request):
45
+ form_data = await request.form()
46
+ text = form_data["text"]
47
+ response = client.audio.speech.create(
48
+ model="tts-1",
49
+ voice="nova",
50
+ input=text
51
+ )
52
+ output_file = "static/tts_output.mp3"
53
+ response.stream_to_file(output_file)
54
+ return {"audio_url": "/static/tts_output.mp3"}
55
+
56
+ @app.get("/", response_class=HTMLResponse)
57
+ async def index(request: Request):
58
+ return templates.TemplateResponse("index.html", {"request": request})