thejagstudio commited on
Commit
587d851
·
verified ·
1 Parent(s): 18c16c2

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +229 -232
main.py CHANGED
@@ -1,232 +1,229 @@
1
- from flask import Flask, request, jsonify, render_template, Response
2
- import os
3
- import requests
4
- import json
5
- from scipy import spatial
6
- from flask_cors import CORS
7
- import random
8
- import numpy as np
9
- from langchain_chroma import Chroma
10
- from chromadb import Documents, EmbeddingFunction, Embeddings
11
-
12
-
13
- app = Flask(__name__)
14
- CORS(app)
15
-
16
-
17
- class MyEmbeddingFunction(EmbeddingFunction):
18
-
19
- def embed_documents(self, input: Documents) -> Embeddings:
20
- for i in range(5):
21
- try:
22
- embeddings = []
23
- url = "https://api.deepinfra.com/v1/inference/BAAI/bge-large-en-v1.5"
24
-
25
- payload = json.dumps({
26
- "inputs": input
27
- })
28
- headers = {
29
- 'Accept': 'application/json, text/plain, */*',
30
- 'Accept-Language': 'en-US,en;q=0.9,gu;q=0.8,ru;q=0.7,hi;q=0.6',
31
- 'Connection': 'keep-alive',
32
- 'Content-Type': 'application/json',
33
- 'Origin': 'https://deepinfra.com',
34
- 'Referer': 'https://deepinfra.com/',
35
- 'Sec-Fetch-Dest': 'empty',
36
- 'Sec-Fetch-Mode': 'cors',
37
- 'Sec-Fetch-Site': 'same-site',
38
- 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36',
39
- 'sec-ch-ua': '"Not)A;Brand";v="99", "Google Chrome";v="127", "Chromium";v="127"',
40
- 'sec-ch-ua-mobile': '?0',
41
- 'sec-ch-ua-platform': '"Windows"'
42
- }
43
-
44
- response = requests.request("POST", url, headers=headers, data=payload)
45
- return response.json()["embeddings"]
46
- except:
47
- pass
48
-
49
- def embed_query(self, input: Documents) -> Embeddings:
50
- print(input)
51
- for i in range(5):
52
- try:
53
- embeddings = []
54
- url = "https://api.deepinfra.com/v1/inference/BAAI/bge-large-en-v1.5"
55
-
56
- payload = json.dumps({
57
- "inputs": [input]
58
- })
59
- headers = {
60
- 'Accept': 'application/json, text/plain, */*',
61
- 'Accept-Language': 'en-US,en;q=0.9,gu;q=0.8,ru;q=0.7,hi;q=0.6',
62
- 'Connection': 'keep-alive',
63
- 'Content-Type': 'application/json',
64
- 'Origin': 'https://deepinfra.com',
65
- 'Referer': 'https://deepinfra.com/',
66
- 'Sec-Fetch-Dest': 'empty',
67
- 'Sec-Fetch-Mode': 'cors',
68
- 'Sec-Fetch-Site': 'same-site',
69
- 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36',
70
- 'sec-ch-ua': '"Not)A;Brand";v="99", "Google Chrome";v="127", "Chromium";v="127"',
71
- 'sec-ch-ua-mobile': '?0',
72
- 'sec-ch-ua-platform': '"Windows"'
73
- }
74
-
75
- response = requests.request("POST", url, headers=headers, data=payload)
76
- return response.json()["embeddings"][0]
77
- except:
78
- pass
79
-
80
- CHROMA_PATH = "chroma"
81
- custom_embeddings = MyEmbeddingFunction()
82
- db = Chroma(
83
- persist_directory=CHROMA_PATH, embedding_function=custom_embeddings
84
- )
85
-
86
-
87
- def embeddingGen(query):
88
- url = "https://api.deepinfra.com/v1/inference/BAAI/bge-large-en-v1.5"
89
-
90
- payload = json.dumps({
91
- "inputs": [query]
92
- })
93
- headers = {
94
- 'Accept': 'application/json, text/plain, */*',
95
- 'Accept-Language': 'en-US,en;q=0.9,gu;q=0.8,ru;q=0.7,hi;q=0.6',
96
- 'Connection': 'keep-alive',
97
- 'Content-Type': 'application/json',
98
- 'Origin': 'https://deepinfra.com',
99
- 'Referer': 'https://deepinfra.com/',
100
- 'Sec-Fetch-Dest': 'empty',
101
- 'Sec-Fetch-Mode': 'cors',
102
- 'Sec-Fetch-Site': 'same-site',
103
- 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36',
104
- 'sec-ch-ua': '"Not)A;Brand";v="99", "Google Chrome";v="127", "Chromium";v="127"',
105
- 'sec-ch-ua-mobile': '?0',
106
- 'sec-ch-ua-platform': '"Windows"'
107
- }
108
-
109
- response = requests.request("POST", url, headers=headers, data=payload)
110
- return response.json()
111
-
112
-
113
- def strings_ranked_by_relatedness(query, df, top_n=5):
114
- def relatedness_fn(x, y):
115
- x_norm = np.linalg.norm(x)
116
- y_norm = np.linalg.norm(y)
117
- return np.dot(x, y) / (x_norm * y_norm)
118
-
119
- query_embedding_response = embeddingGen(query)
120
- query_embedding = query_embedding_response["embeddings"][0]
121
- strings_and_relatednesses = [
122
- (row["text"], relatedness_fn(query_embedding, row["embedding"])) for row in df
123
- ]
124
- strings_and_relatednesses.sort(key=lambda x: x[1], reverse=True)
125
- strings, relatednesses = zip(*strings_and_relatednesses)
126
- return strings[:top_n], relatednesses[:top_n]
127
-
128
-
129
- @app.route("/api/gpt", methods=["POST"])
130
- def gptRes():
131
- data = request.get_json()
132
- messages = data["messages"]
133
- def inference():
134
- url = "https://api.deepinfra.com/v1/openai/chat/completions"
135
-
136
- payload = json.dumps({
137
- "model": "meta-llama/Meta-Llama-3.1-8B-Instruct",
138
- "messages": messages,
139
- "stream": True,
140
- "max_tokens": 1024,
141
- })
142
- headers = {
143
- 'Accept-Language': 'en-US,en;q=0.9,gu;q=0.8,ru;q=0.7,hi;q=0.6',
144
- 'Connection': 'keep-alive',
145
- 'Content-Type': 'application/json',
146
- 'Origin': 'https://deepinfra.com',
147
- 'Referer': 'https://deepinfra.com/',
148
- 'Sec-Fetch-Dest': 'empty',
149
- 'Sec-Fetch-Mode': 'cors',
150
- 'Sec-Fetch-Site': 'same-site',
151
- 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36',
152
- 'X-Deepinfra-Source': 'web-page',
153
- 'accept': 'text/event-stream',
154
- 'sec-ch-ua': '"Not)A;Brand";v="99", "Google Chrome";v="127", "Chromium";v="127"',
155
- 'sec-ch-ua-mobile': '?0',
156
- 'sec-ch-ua-platform': '"Windows"'
157
- }
158
-
159
- response = requests.request("POST", url, headers=headers, data=payload, stream=True)
160
-
161
- for line in response.iter_lines(decode_unicode=True):
162
- if line:
163
- # try:
164
- # line = line.split("data:")[1]
165
- # line = json.loads(line)
166
- # yield line["choices"][0]["delta"]["content"]
167
- # except:
168
- # yield ""
169
- yield line
170
-
171
- return Response(inference(), content_type='text/event-stream')
172
-
173
-
174
- @app.route("/", methods=["GET"])
175
- def index():
176
- return render_template("index.html")
177
-
178
-
179
- @app.route("/api/getAPI", methods=["POST"])
180
- def getAPI():
181
- return jsonify({"API": random.choice(apiKeys)})
182
-
183
-
184
- @app.route("/api/getContext", methods=["POST"])
185
- def getContext():
186
- global db
187
- question = request.form["question"]
188
- results = db.similarity_search_with_score(question, k=5)
189
- context = "\n\n---\n\n".join([doc.page_content for doc, _score in results])
190
- sources = [doc.metadata.get("id", None) for doc, _score in results]
191
- return jsonify({"context": context, "sources": sources})
192
-
193
-
194
- @app.route("/api/audioGenerate", methods=["POST"])
195
- def audioGenerate():
196
- answer = request.form["answer"]
197
- audio = []
198
- for i in answer.split("\n"):
199
- url = "https://deepgram.com/api/ttsAudioGeneration"
200
-
201
- payload = json.dumps({
202
- "text": i,
203
- "model": "aura-asteria-en",
204
- "demoType": "landing-page",
205
- "params": "tag=landingpage-product-texttospeech"
206
- })
207
- headers = {
208
- 'accept': '*/*',
209
- 'accept-language': 'en-US,en;q=0.9,gu;q=0.8,ru;q=0.7,hi;q=0.6',
210
- 'content-type': 'application/json',
211
- 'origin': 'https://deepgram.com',
212
- 'priority': 'u=1, i',
213
- 'referer': 'https://deepgram.com/',
214
- 'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"',
215
- 'sec-ch-ua-mobile': '?0',
216
- 'sec-ch-ua-platform': '"Windows"',
217
- 'sec-fetch-dest': 'empty',
218
- 'sec-fetch-mode': 'cors',
219
- 'sec-fetch-site': 'same-origin',
220
- 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36'
221
- }
222
-
223
- response = requests.request("POST", url, headers=headers, data=payload)
224
- audio.append(response.json()["data"])
225
- return jsonify({"audio": audio})
226
-
227
-
228
- if __name__ == "__main__":
229
- # app.run(debug=True)
230
- from waitress import serve
231
-
232
- serve(app, host="0.0.0.0", port=7860)
 
1
+ from flask import Flask, request, jsonify, render_template, Response
2
+ import os
3
+ import requests
4
+ import json
5
+ from scipy import spatial
6
+ from flask_cors import CORS
7
+ import random
8
+ import numpy as np
9
+ from langchain_chroma import Chroma
10
+ from chromadb import Documents, EmbeddingFunction, Embeddings
11
+
12
+ app = Flask(__name__)
13
+ CORS(app)
14
+
15
+ class MyEmbeddingFunction(EmbeddingFunction):
16
+ def embed_documents(self, input: Documents) -> Embeddings:
17
+ for i in range(5):
18
+ try:
19
+ embeddings = []
20
+ url = "https://api.deepinfra.com/v1/inference/BAAI/bge-large-en-v1.5"
21
+
22
+ payload = json.dumps({
23
+ "inputs": input
24
+ })
25
+ headers = {
26
+ 'Accept': 'application/json, text/plain, */*',
27
+ 'Accept-Language': 'en-US,en;q=0.9,gu;q=0.8,ru;q=0.7,hi;q=0.6',
28
+ 'Connection': 'keep-alive',
29
+ 'Content-Type': 'application/json',
30
+ 'Origin': 'https://deepinfra.com',
31
+ 'Referer': 'https://deepinfra.com/',
32
+ 'Sec-Fetch-Dest': 'empty',
33
+ 'Sec-Fetch-Mode': 'cors',
34
+ 'Sec-Fetch-Site': 'same-site',
35
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36',
36
+ 'sec-ch-ua': '"Not)A;Brand";v="99", "Google Chrome";v="127", "Chromium";v="127"',
37
+ 'sec-ch-ua-mobile': '?0',
38
+ 'sec-ch-ua-platform': '"Windows"'
39
+ }
40
+
41
+ response = requests.request("POST", url, headers=headers, data=payload)
42
+ return response.json()["embeddings"]
43
+ except:
44
+ pass
45
+
46
+ def embed_query(self, input: Documents) -> Embeddings:
47
+ print(input)
48
+ for i in range(5):
49
+ try:
50
+ embeddings = []
51
+ url = "https://api.deepinfra.com/v1/inference/BAAI/bge-large-en-v1.5"
52
+
53
+ payload = json.dumps({
54
+ "inputs": [input]
55
+ })
56
+ headers = {
57
+ 'Accept': 'application/json, text/plain, */*',
58
+ 'Accept-Language': 'en-US,en;q=0.9,gu;q=0.8,ru;q=0.7,hi;q=0.6',
59
+ 'Connection': 'keep-alive',
60
+ 'Content-Type': 'application/json',
61
+ 'Origin': 'https://deepinfra.com',
62
+ 'Referer': 'https://deepinfra.com/',
63
+ 'Sec-Fetch-Dest': 'empty',
64
+ 'Sec-Fetch-Mode': 'cors',
65
+ 'Sec-Fetch-Site': 'same-site',
66
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36',
67
+ 'sec-ch-ua': '"Not)A;Brand";v="99", "Google Chrome";v="127", "Chromium";v="127"',
68
+ 'sec-ch-ua-mobile': '?0',
69
+ 'sec-ch-ua-platform': '"Windows"'
70
+ }
71
+
72
+ response = requests.request("POST", url, headers=headers, data=payload)
73
+ return response.json()["embeddings"][0]
74
+ except:
75
+ pass
76
+
77
+ CHROMA_PATH = "chroma"
78
+ custom_embeddings = MyEmbeddingFunction()
79
+ db = Chroma(
80
+ persist_directory=CHROMA_PATH, embedding_function=custom_embeddings
81
+ )
82
+
83
+
84
+ def embeddingGen(query):
85
+ url = "https://api.deepinfra.com/v1/inference/BAAI/bge-large-en-v1.5"
86
+
87
+ payload = json.dumps({
88
+ "inputs": [query]
89
+ })
90
+ headers = {
91
+ 'Accept': 'application/json, text/plain, */*',
92
+ 'Accept-Language': 'en-US,en;q=0.9,gu;q=0.8,ru;q=0.7,hi;q=0.6',
93
+ 'Connection': 'keep-alive',
94
+ 'Content-Type': 'application/json',
95
+ 'Origin': 'https://deepinfra.com',
96
+ 'Referer': 'https://deepinfra.com/',
97
+ 'Sec-Fetch-Dest': 'empty',
98
+ 'Sec-Fetch-Mode': 'cors',
99
+ 'Sec-Fetch-Site': 'same-site',
100
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36',
101
+ 'sec-ch-ua': '"Not)A;Brand";v="99", "Google Chrome";v="127", "Chromium";v="127"',
102
+ 'sec-ch-ua-mobile': '?0',
103
+ 'sec-ch-ua-platform': '"Windows"'
104
+ }
105
+
106
+ response = requests.request("POST", url, headers=headers, data=payload)
107
+ return response.json()
108
+
109
+
110
+ def strings_ranked_by_relatedness(query, df, top_n=5):
111
+ def relatedness_fn(x, y):
112
+ x_norm = np.linalg.norm(x)
113
+ y_norm = np.linalg.norm(y)
114
+ return np.dot(x, y) / (x_norm * y_norm)
115
+
116
+ query_embedding_response = embeddingGen(query)
117
+ query_embedding = query_embedding_response["embeddings"][0]
118
+ strings_and_relatednesses = [
119
+ (row["text"], relatedness_fn(query_embedding, row["embedding"])) for row in df
120
+ ]
121
+ strings_and_relatednesses.sort(key=lambda x: x[1], reverse=True)
122
+ strings, relatednesses = zip(*strings_and_relatednesses)
123
+ return strings[:top_n], relatednesses[:top_n]
124
+
125
+
126
+ @app.route("/api/gpt", methods=["POST"])
127
+ def gptRes():
128
+ data = request.get_json()
129
+ messages = data["messages"]
130
+ def inference():
131
+ url = "https://api.deepinfra.com/v1/openai/chat/completions"
132
+
133
+ payload = json.dumps({
134
+ "model": "meta-llama/Meta-Llama-3.1-8B-Instruct",
135
+ "messages": messages,
136
+ "stream": True,
137
+ "max_tokens": 1024,
138
+ })
139
+ headers = {
140
+ 'Accept-Language': 'en-US,en;q=0.9,gu;q=0.8,ru;q=0.7,hi;q=0.6',
141
+ 'Connection': 'keep-alive',
142
+ 'Content-Type': 'application/json',
143
+ 'Origin': 'https://deepinfra.com',
144
+ 'Referer': 'https://deepinfra.com/',
145
+ 'Sec-Fetch-Dest': 'empty',
146
+ 'Sec-Fetch-Mode': 'cors',
147
+ 'Sec-Fetch-Site': 'same-site',
148
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36',
149
+ 'X-Deepinfra-Source': 'web-page',
150
+ 'accept': 'text/event-stream',
151
+ 'sec-ch-ua': '"Not)A;Brand";v="99", "Google Chrome";v="127", "Chromium";v="127"',
152
+ 'sec-ch-ua-mobile': '?0',
153
+ 'sec-ch-ua-platform': '"Windows"'
154
+ }
155
+
156
+ response = requests.request("POST", url, headers=headers, data=payload, stream=True)
157
+
158
+ for line in response.iter_lines(decode_unicode=True):
159
+ if line:
160
+ # try:
161
+ # line = line.split("data:")[1]
162
+ # line = json.loads(line)
163
+ # yield line["choices"][0]["delta"]["content"]
164
+ # except:
165
+ # yield ""
166
+ yield line
167
+
168
+ return Response(inference(), content_type='text/event-stream')
169
+
170
+
171
+ @app.route("/", methods=["GET"])
172
+ def index():
173
+ return render_template("index.html")
174
+
175
+
176
+ @app.route("/api/getAPI", methods=["POST"])
177
+ def getAPI():
178
+ return jsonify({"API": random.choice(apiKeys)})
179
+
180
+
181
+ @app.route("/api/getContext", methods=["POST"])
182
+ def getContext():
183
+ global db
184
+ question = request.form["question"]
185
+ results = db.similarity_search_with_score(question, k=5)
186
+ context = "\n\n---\n\n".join([doc.page_content for doc, _score in results])
187
+ sources = [doc.metadata.get("id", None) for doc, _score in results]
188
+ return jsonify({"context": context, "sources": sources})
189
+
190
+
191
+ @app.route("/api/audioGenerate", methods=["POST"])
192
+ def audioGenerate():
193
+ answer = request.form["answer"]
194
+ audio = []
195
+ for i in answer.split("\n"):
196
+ url = "https://deepgram.com/api/ttsAudioGeneration"
197
+
198
+ payload = json.dumps({
199
+ "text": i,
200
+ "model": "aura-asteria-en",
201
+ "demoType": "landing-page",
202
+ "params": "tag=landingpage-product-texttospeech"
203
+ })
204
+ headers = {
205
+ 'accept': '*/*',
206
+ 'accept-language': 'en-US,en;q=0.9,gu;q=0.8,ru;q=0.7,hi;q=0.6',
207
+ 'content-type': 'application/json',
208
+ 'origin': 'https://deepgram.com',
209
+ 'priority': 'u=1, i',
210
+ 'referer': 'https://deepgram.com/',
211
+ 'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"',
212
+ 'sec-ch-ua-mobile': '?0',
213
+ 'sec-ch-ua-platform': '"Windows"',
214
+ 'sec-fetch-dest': 'empty',
215
+ 'sec-fetch-mode': 'cors',
216
+ 'sec-fetch-site': 'same-origin',
217
+ 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36'
218
+ }
219
+
220
+ response = requests.request("POST", url, headers=headers, data=payload)
221
+ audio.append(response.json()["data"])
222
+ return jsonify({"audio": audio})
223
+
224
+
225
+ if __name__ == "__main__":
226
+ # app.run(debug=True)
227
+ from waitress import serve
228
+
229
+ serve(app, host="0.0.0.0", port=7860)