File size: 5,861 Bytes
66ca64a
 
 
 
 
f0b744f
66ca64a
 
6fb2ead
 
 
3f48fa2
66ca64a
2fddf68
66ca64a
f02b1de
66ca64a
 
 
 
2fddf68
 
 
 
 
6fb2ead
66ca64a
 
 
 
 
 
 
dbec2e2
 
 
 
66ca64a
 
 
 
 
 
 
 
 
 
 
f02b1de
66ca64a
 
 
 
 
47ca12e
 
 
 
 
 
 
 
 
 
89d38c5
47ca12e
66ca64a
 
 
bbb9123
66ca64a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6fb2ead
 
8fffd9d
 
6fb2ead
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
66ca64a
f0b744f
 
 
 
29f3438
f0b744f
 
 
 
 
dbec2e2
66ca64a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
import os
from flask import *
from flask_limiter import Limiter
from flask_limiter.util import get_remote_address

from routes.helpers import checkSignature, configFile
from routes import *

from random import randint
from transformers import AutoTokenizer, AutoModelForSequenceClassification

#initing
app = Flask(__name__)
VERSION = '1.0 build89'
app.config['JSON_AS_ASCII'] = False
limiter = Limiter(app=app, key_func=get_remote_address, default_limits=["5/minute"], storage_uri="memory://",)

#limiter
@limiter.request_filter
def ip_whitelist():
    #try:
    #    if request.method == 'POST': signature = request.form['signature']
    #    else: signature = request.args['signature']
    #    return checkSignature(signature)
    #except: return False
    return bool(randint(0,1))
#error pages
@app.errorhandler(429)
def ratelimit_handler(e): return render_template('ratelimit.html')
@app.errorhandler(403)
def forbidden_handler(e): return render_template('forbidden.html')
@app.errorhandler(404)
def ratelimit_handler(e): return render_template('notfound.html')
@app.errorhandler(500)
def ratelimit_handler(e): return render_template('intervalservererror.html')
@app.errorhandler(502)
def ratelimit_handler(e): return render_template('badgateway.html')

#empty routes
@app.route('/yt/api/v1', methods=['GET', 'POST'])
@app.route('/recognize/api/v1', methods=['GET', 'POST'])
@app.route('/osu/api/v1', methods=['GET', 'POST'])
def emptyPath(): return {} 

@app.route('/yt/api/v1/<path:path>', methods=['GET', 'POST'])
@app.route('/recognize/api/v1/<path:path>', methods=['GET', 'POST'])
@app.route('/osu/api/v1/<path:path>', methods=['GET', 'POST'])
def emptyApiWA(path):  return {"status": "error", "error_code": 100, "error_details": "No method like that found"}
    
#icon
@app.route('/favicon.ico')
@limiter.exempt
def favicon(): return send_from_directory(os.path.join(app.root_path, 'static'), 'favicon.ico', mimetype='image/vnd.microsoft.icon')

###############
#SITE ROUTES
@app.route('/')
@limiter.exempt
def index(): return render_template('index.html') 
@app.route('/signatures/api/v1/get', methods=['GET', 'POST'])
@limiter.exempt
def signatureGen(): return siteRoutes.signatureGen(request)
@app.route('/system-info/api/v1/get', methods=['GET', 'POST'])
@limiter.exempt
def systemInfo(): return siteRoutes.systemInfo()
  
###############
#RECOGNIZE API
@app.route('/recognize/api/v1/voice', methods=['GET', 'POST'])
def recognizeVoice(): return recognizeApi.recognizeVoice(request)

###############
#YT SOUND API
@app.route('/yt/api/v1/search', methods=['GET', 'POST'])
def search(): return ytApi.search(request)
@app.route('/yt/api/v1/get-full', methods=['GET', 'POST'])
def getFull(): return ytApi.getFull(request)
@app.route('/yt/api/v1/get-preview', methods=['GET', 'POST'])
def getPreview(): return ytApi.getPreview(request)

###############
#OSU API
@app.route('/osu/api/v1/find-song', methods=['GET', 'POST'])
def findSong(): return osuApi.findSong(request)
@app.route('/osu/api/v1/get-beatmap', methods=['GET', 'POST'])
def getBeatmap(): return osuApi.getBeatmap(request)
@app.route('/osu/api/v1/get-preview', methods=['GET', 'POST'])
def getBMPreview(): return osuApi.getPreview(request)
@app.route('/osu/api/v1/get-full', methods=['GET', 'POST'])
def getBMFull(): return osuApi.getFull(request)

###############
# LOAD MODELS
sa_t, sa_m = AutoTokenizer.from_pretrained("cardiffnlp/twitter-xlm-roberta-base-sentiment"), AutoModelForSequenceClassification.from_pretrained("cardiffnlp/twitter-xlm-roberta-base-sentiment")
ld_t, ld_m = AutoTokenizer.from_pretrained("papluca/xlm-roberta-base-language-detection"), AutoModelForSequenceClassification.from_pretrained("papluca/xlm-roberta-base-language-detection")

##############
# ANALYZE DATA API
# to understand which text is negative, positive or neutral
@app.route('/analyzeText/api/v1/sentiment', methods=['GET', 'POST'])
def sentimentAnalys():
    try:
        text = request.form.get('text') or request.args.get('url') or ""
        if text == "": return {"status": "error", "details": { "error_code": 101, "error_details": "No text provided" }}
        
        inputs = sa_t(text, return_tensors="pt")
        
        # Предсказание тональности текста
        outputs = sa_m(**inputs)
        logits = outputs.logits
        predicted_sentiment_index = logits.argmax(dim=1).item()
        predicted_sentiment = model.config.id2label[predicted_sentiment_index]
    
        return {"status": "pass", "predicted_sentiment": predicted_sentiment}
    except: return {"status": "error", "details": { "error_code": 123, "error_details": str(e).replace("\n", " | ") }}

@app.route('/analyzeText/api/v1/detectLang')
def langDetect():
    try:
        text = request.form.get('text') or request.args.get('url') or ""
        if text == "": return {"status": "error", "details": { "error_code": 101, "error_details": "No text provided" }}
            
        inputs = ld_t(text, return_tensors="pt")  
        
        outputs = ld_m(**inputs)
        logits = outputs.logits
        predicted_language_index = logits.argmax(dim=1).item()
        predicted_language = model.config.id2label[predicted_language_index]
        
        return {"status": "pass", "predicted_language": predicted_language}
    except: return {"status": "error", "details": { "error_code": 123, "error_details": str(e).replace("\n", " | ") }}

if __name__ == "__main__":
    config = configFile()
    with open(config['config-path'], "w") as outfile:
        config['buildVersion'] = VERSION
        json.dump(config, outfile)
    with open(config['openapi-yaml-path'], "r+") as outfile:
        info = outfile.read()
        outfile.seek(0)
        outfile.write(info.replace('$VERSION_VARIABLE$', VERSION))
        outfile.truncate()
    
    app.run(host="0.0.0.0", port=7860)