Spaces:
Runtime error
Runtime error
Initial commit
Browse files
app.py
ADDED
@@ -0,0 +1,92 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import gradio as gr
|
2 |
+
from gradio.components import Textbox
|
3 |
+
import requests
|
4 |
+
from requests.structures import CaseInsensitiveDict
|
5 |
+
import time
|
6 |
+
|
7 |
+
MAX_QUESTIONS_COUNT = 25
|
8 |
+
MAX_TAGS_COUNT = 5
|
9 |
+
MAX_ATTEMPS = 3
|
10 |
+
WAIT_TIME = 3
|
11 |
+
CHATGPT_URL = "https://free.churchless.tech/v1/chat/completions"
|
12 |
+
|
13 |
+
def get_answer(question):
|
14 |
+
headers = CaseInsensitiveDict()
|
15 |
+
headers["Content-Type"] = "application/json; charset=utf-8"
|
16 |
+
data = """
|
17 |
+
{{
|
18 |
+
"model": "gpt-3.5-turbo",
|
19 |
+
"messages": [
|
20 |
+
{{
|
21 |
+
"role": "user",
|
22 |
+
"content": "{}"
|
23 |
+
}}
|
24 |
+
]
|
25 |
+
}}
|
26 |
+
""".format(question).encode('utf-8')
|
27 |
+
|
28 |
+
try:
|
29 |
+
response = requests.post(CHATGPT_URL, headers=headers, data=data)
|
30 |
+
print(response.content)
|
31 |
+
print(response.json())
|
32 |
+
return {
|
33 |
+
'status': True,
|
34 |
+
'content': response.json()['choices'][0]['message']['content']
|
35 |
+
}
|
36 |
+
except:
|
37 |
+
return {
|
38 |
+
'status': False,
|
39 |
+
}
|
40 |
+
|
41 |
+
def format_results(results):
|
42 |
+
output = ""
|
43 |
+
for i, (question, answer) in enumerate(results):
|
44 |
+
output += f"Question №{i+1}: {question}\n"
|
45 |
+
output += f"Answer: {answer}\n"
|
46 |
+
output += "\n"
|
47 |
+
output = output.strip()
|
48 |
+
return output
|
49 |
+
|
50 |
+
def find_answers(tags, questions):
|
51 |
+
tags = tags.split('\n')
|
52 |
+
questions = questions.split('\n')
|
53 |
+
if len(tags) == 0:
|
54 |
+
raise gr.Error("Validation error. It is necessary to set at least one tag")
|
55 |
+
if len(tags) > MAX_TAGS_COUNT:
|
56 |
+
raise gr.Error(f"Validation error. The maximum allowed number of tags is {MAX_TAGS_COUNT}.")
|
57 |
+
if len(questions) == 0:
|
58 |
+
raise gr.Error("Validation error. It is necessary to ask at least one question")
|
59 |
+
if len(questions) > MAX_QUESTIONS_COUNT:
|
60 |
+
raise gr.Error(f"Validation error. The maximum allowed number of questions is {MAX_QUESTIONS_COUNT}.")
|
61 |
+
|
62 |
+
configured_tags = ['[' + tag + ']' for tag in tags]
|
63 |
+
results = []
|
64 |
+
for question in questions:
|
65 |
+
tagged_question = ''.join(configured_tags) + ' ' + question
|
66 |
+
attempt = 0
|
67 |
+
while attempt < MAX_ATTEMPS:
|
68 |
+
answer = get_answer(tagged_question)
|
69 |
+
if answer['status']:
|
70 |
+
results.append((question, answer['content']))
|
71 |
+
break
|
72 |
+
else:
|
73 |
+
attempt += 1
|
74 |
+
if attempt == MAX_ATTEMPS:
|
75 |
+
results.append((question, 'An error occurred while receiving data.'))
|
76 |
+
else:
|
77 |
+
time.sleep(WAIT_TIME)
|
78 |
+
continue
|
79 |
+
return format_results(results)
|
80 |
+
|
81 |
+
inputs = [
|
82 |
+
Textbox(label="Enter tags (each line is a separate tag). Maximum: 5.", lines=5),
|
83 |
+
Textbox(label="Enter questions (each line is a separate question). Maximum 25.", lines=25)
|
84 |
+
]
|
85 |
+
|
86 |
+
outputs = [
|
87 |
+
Textbox(label="Answers")
|
88 |
+
]
|
89 |
+
|
90 |
+
gradio_interface = gr.Interface(fn=find_answers, inputs=inputs, outputs=outputs)
|
91 |
+
|
92 |
+
gradio_interface.launch()
|