Skip to content

Commit 0e28b18

Browse files
committed
tutorial, new prompts
1 parent 0002dbf commit 0e28b18

20 files changed

+30532
-226
lines changed

.gitignore

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,9 @@ yarn-error.log*
2525
# my ignores
2626
*.json
2727
db/
28-
prompts/
2928
audio_files/
3029
tmp/
3130
.vscode
32-
logs
31+
logs
32+
__pycache__
33+
build/

README.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Mimic Recording Studio
2+
3+
Welcome to the Mimic Recording Studio.
4+
5+
## Quick Start
6+
7+
### Dependencies
8+
* [Docker](https://docs.docker.com/) (community edition is fine)
9+
* [Docker-compose](https://docs.docker.com/compose/install/)
10+
11+
### Build and Rum
12+
* `git clone `
13+
* `cd mimic-recording-studio`
14+
* `docker-compose up`
15+
* In browser go to `http://localhost:3000`
16+
17+
**Note**
18+
First run will require

backend/app/__init__.py

Lines changed: 1 addition & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -1,100 +1 @@
1-
from flask import Flask, jsonify, request
2-
from flask.views import MethodView
3-
from flask_cors import CORS
4-
from .api import UserAPI, PromptAPI, AudioAPI
5-
6-
app = Flask(__name__)
7-
CORS(app)
8-
9-
user_api = UserAPI()
10-
audio_api = AudioAPI()
11-
prompt_api = PromptAPI()
12-
13-
14-
class Users(MethodView):
15-
16-
def get(self):
17-
uuid = request.args.get('uuid')
18-
user = user_api.get_user(uuid)
19-
if user.success:
20-
return jsonify(success=True, message="success", data=user.data)
21-
else:
22-
return jsonify(success=False, message=user.message)
23-
24-
def post(self):
25-
user = request.get_json(force=True)
26-
res = user_api.save_user(user)
27-
if res.success:
28-
return jsonify(success=True, message="succesfully saved user")
29-
else:
30-
return jsonify(success=False, message=res.message)
31-
32-
33-
class Audio(MethodView):
34-
35-
def save_audio(self, uuid: str, prompt: str, data: bytes) -> jsonify:
36-
res = audio_api.save_audio(data, uuid, prompt)
37-
if res.success:
38-
return jsonify(success=True, message="sucessfully saved audio")
39-
else:
40-
return jsonify(
41-
success=False,
42-
message="did not sucessfully save audio"
43-
)
44-
45-
def get_audio_len(self, data: bytes) -> jsonify:
46-
res = audio_api.get_audio_len(data)
47-
if res.success:
48-
return jsonify(success=True, data=res.data)
49-
else:
50-
return jsonify(success=False, message="error occured in server")
51-
52-
def post(self):
53-
data = request.data
54-
uuid = request.args.get('uuid')
55-
prompt = request.args.get('prompt')
56-
get_len = request.args.get('get_len')
57-
print("got it")
58-
if uuid and prompt:
59-
return self.save_audio(uuid, prompt, data)
60-
elif uuid and get_len:
61-
return self.get_audio_len(data)
62-
else:
63-
return jsonify(
64-
success=False,
65-
message="missing prompt or uuid query param"
66-
)
67-
68-
69-
class Prompts(MethodView):
70-
71-
def get(self):
72-
uuid = request.args.get('uuid')
73-
prompts = prompt_api.get_prompt(uuid)
74-
if prompts.success:
75-
return jsonify(success=True, data=prompts.data)
76-
else:
77-
return jsonify(success=False, messsage="failed to get prompt")
78-
79-
80-
# registering apis
81-
user_view = Users.as_view('user')
82-
app.add_url_rule(
83-
'/api/user/',
84-
view_func=user_view,
85-
methods=['POST', 'GET']
86-
)
87-
88-
audio_view = Audio.as_view('audio')
89-
app.add_url_rule(
90-
'/api/audio/',
91-
view_func=audio_view,
92-
methods=['POST', 'GET']
93-
)
94-
95-
prompt_view = Prompts.as_view('prompt')
96-
app.add_url_rule(
97-
'/api/prompt/',
98-
view_func=prompt_view,
99-
methods=['GET']
100-
)
1+
from .app import app

backend/app/api.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import os
22
from .db import DB
33
from .protocol import response
4-
from .file_system import AudioFS, temp_path
4+
from .file_system import AudioFS, PromptsFS, temp_path
55
from .audio import Audio
66
import random
77

@@ -80,14 +80,17 @@ def extract_all_audio(self):
8080
class PromptAPI:
8181
"""API to get prompts"""
8282

83+
prompt_fs = PromptsFS()
84+
8385
def __init__(self):
8486
self.user_api = UserAPI()
8587

8688
def get_prompt(self, uuid: str) -> response:
8789
user = self.user_api.get_user(uuid)
8890
if user.success:
8991
prompt_num = user.data["prompt_num"]
90-
res = DB.get_prompt(prompt_num)
92+
# res = DB.get_prompt(prompt_num)
93+
res = PromptAPI.prompt_fs.get(prompt_num)
9194
if res.success:
9295
return response(True, data=res.data)
9396

backend/app/app.py

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
from flask import Flask, jsonify, request
2+
from flask.views import MethodView
3+
from flask_cors import CORS
4+
from .api import UserAPI, PromptAPI, AudioAPI
5+
6+
app = Flask(__name__)
7+
CORS(app)
8+
9+
user_api = UserAPI()
10+
audio_api = AudioAPI()
11+
prompt_api = PromptAPI()
12+
13+
14+
class Users(MethodView):
15+
16+
def get(self):
17+
uuid = request.args.get('uuid')
18+
user = user_api.get_user(uuid)
19+
if user.success:
20+
return jsonify(success=True, message="success", data=user.data)
21+
else:
22+
return jsonify(success=False, message=user.message)
23+
24+
def post(self):
25+
user = request.get_json(force=True)
26+
res = user_api.save_user(user)
27+
if res.success:
28+
return jsonify(success=True, message="succesfully saved user")
29+
else:
30+
return jsonify(success=False, message=res.message)
31+
32+
33+
class Audio(MethodView):
34+
35+
def save_audio(self, uuid: str, prompt: str, data: bytes) -> jsonify:
36+
res = audio_api.save_audio(data, uuid, prompt)
37+
if res.success:
38+
return jsonify(success=True, message="sucessfully saved audio")
39+
else:
40+
return jsonify(
41+
success=False,
42+
message="did not sucessfully save audio"
43+
)
44+
45+
def get_audio_len(self, data: bytes) -> jsonify:
46+
res = audio_api.get_audio_len(data)
47+
if res.success:
48+
return jsonify(success=True, data=res.data)
49+
else:
50+
return jsonify(success=False, message="error occured in server")
51+
52+
def post(self):
53+
data = request.data
54+
uuid = request.args.get('uuid')
55+
prompt = request.args.get('prompt')
56+
get_len = request.args.get('get_len')
57+
print("got it")
58+
if uuid and prompt:
59+
return self.save_audio(uuid, prompt, data)
60+
elif uuid and get_len:
61+
return self.get_audio_len(data)
62+
else:
63+
return jsonify(
64+
success=False,
65+
message="missing prompt or uuid query param"
66+
)
67+
68+
69+
class Prompts(MethodView):
70+
71+
def get(self):
72+
uuid = request.args.get('uuid')
73+
prompts = prompt_api.get_prompt(uuid)
74+
if prompts.success:
75+
return jsonify(success=True, data=prompts.data)
76+
else:
77+
return jsonify(success=False, messsage="failed to get prompt")
78+
79+
80+
# registering apis
81+
user_view = Users.as_view('user')
82+
app.add_url_rule(
83+
'/api/user/',
84+
view_func=user_view,
85+
methods=['POST', 'GET']
86+
)
87+
88+
audio_view = Audio.as_view('audio')
89+
app.add_url_rule(
90+
'/api/audio/',
91+
view_func=audio_view,
92+
methods=['POST', 'GET']
93+
)
94+
95+
prompt_view = Prompts.as_view('prompt')
96+
app.add_url_rule(
97+
'/api/prompt/',
98+
view_func=prompt_view,
99+
methods=['GET']
100+
)

backend/app/db.py

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import os
66
import datetime
77
from .protocol import response
8-
from .file_system import PromptsFS
98
from .audio import Audio
109
from peewee import (
1110
Model, SqliteDatabase, CharField, IntegerField,
@@ -74,8 +73,6 @@ class Meta:
7473
mimic_studio_db.connect()
7574
mimic_studio_db.create_tables([UserModel, AudioModel])
7675

77-
prompt_fs = PromptsFS()
78-
7976

8077
class DB:
8178
"""DB layer"""
@@ -149,14 +146,14 @@ def save_audio(audio_id: str, prompt: str,
149146
print(e)
150147
return response(False, message="Exception thrown, check logs")
151148

152-
# TODO: should we add prompt in database?
153-
@staticmethod
154-
def get_prompt(prompt_num: int) -> response:
155-
prompt = prompt_fs.get(prompt_num)
156-
if prompt:
157-
data = {
158-
"prompt": prompt
159-
}
160-
return response(True, data=data)
161-
else:
162-
return response(False)
149+
# # TODO: should we add prompt in database?
150+
# @staticmethod
151+
# def get_prompt(prompt_num: int) -> response:
152+
# prompt = prompt_fs.get(prompt_num)
153+
# if prompt:
154+
# data = {
155+
# "prompt": prompt
156+
# }
157+
# return response(True, data=data)
158+
# else:
159+
# return response(False)

backend/app/file_system.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import hashlib
66
import subprocess
77
from subprocess import DEVNULL
8+
from .protocol import response
89

910
prompts_dir = prompts_path = os.path.join(
1011
os.path.dirname(os.path.abspath(__file__)),
@@ -13,7 +14,7 @@
1314
os.makedirs(prompts_dir, exist_ok=True)
1415
prompts_path = os.path.join(
1516
prompts_dir,
16-
"../prompts/english_prompts.csv"
17+
"../prompts/english_prompts_v2.csv"
1718
)
1819

1920
audio_dir = os.path.join(
@@ -75,11 +76,15 @@ def __init__(self):
7576
with open(prompts_path, 'r') as f:
7677
prompts = csv.reader(f, delimiter="\t")
7778
for p in prompts:
78-
self.data.append(p[2])
79+
self.data.append(p[0])
7980

80-
def get(self, prompt_number: int) -> str:
81+
def get(self, prompt_number: int) -> response:
8182
try:
82-
return self.data[prompt_number]
83+
d = {
84+
"prompt": self.data[prompt_number],
85+
"total_prompt": len(self.data)
86+
}
87+
return response(True, data=d)
8388
except IndexError as e:
8489
# TODO: loggin
8590
print(e)

0 commit comments

Comments
 (0)