Brasd99 commited on
Commit
e6fa7d1
1 Parent(s): fd14ab3

Added config

Browse files
Files changed (2) hide show
  1. app.py +22 -17
  2. config.json +7 -0
app.py CHANGED
@@ -4,11 +4,14 @@ import json
4
  import requests
5
  import gradio as gr
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: str) -> Dict[str, Any]:
14
  headers = {
@@ -23,7 +26,7 @@ def get_answer(question: str) -> Dict[str, Any]:
23
  }
24
 
25
  try:
26
- response = requests.post(CHATGPT_URL, headers=headers, data=json.dumps(payload))
27
  response.raise_for_status()
28
  content = response.json()['choices'][0]['message']['content']
29
  return {
@@ -48,14 +51,14 @@ def format_results(results: List[Tuple[str, str]]) -> str:
48
  def validate_tags(tags: str) -> None:
49
  if not tags:
50
  raise gr.Error('Validation error. It is necessary to set at least one tag')
51
- if len(tags) > MAX_TAGS_COUNT:
52
- raise gr.Error(f'Validation error. The maximum allowed number of tags is {MAX_TAGS_COUNT}.')
53
 
54
  def validate_questions(questions: str) -> None:
55
  if not questions:
56
  raise gr.Error('Validation error. It is necessary to ask at least one question')
57
- if len(questions) > MAX_QUESTIONS_COUNT:
58
- raise gr.Error(f'Validation error. The maximum allowed number of questions is {MAX_QUESTIONS_COUNT}.')
59
 
60
  def find_answers(tags: str, questions: str, progress=gr.Progress()) -> str:
61
  tags = tags.split('\n')
@@ -69,15 +72,15 @@ def find_answers(tags: str, questions: str, progress=gr.Progress()) -> str:
69
  results = []
70
  for question in progress.tqdm(questions):
71
  tagged_question = f'{tags_str} {question}'
72
- for attempt in range(MAX_ATTEMPS):
73
  answer = get_answer(tagged_question)
74
  if answer['status']:
75
  results.append((question, answer['content']))
76
  break
77
- elif attempt == MAX_ATTEMPS - 1:
78
  results.append((question, 'An error occurred while receiving data.'))
79
  else:
80
- time.sleep(WAIT_TIME)
81
 
82
  return format_results(results)
83
 
@@ -88,13 +91,15 @@ with gr.Blocks(theme='soft', title='AnswerMate') as blocks:
88
  gr.Markdown('The service allows you to get answers to all questions on the specified topic.')
89
  with gr.Row():
90
  tags_input = gr.Textbox(
91
- label='Enter tags (each line is a separate tag). Maximum: 5.',
92
  placeholder='.Net\nC#',
93
- lines=5)
 
94
  questions_input = gr.Textbox(
95
- label='Enter questions (each line is a separate question). Maximum: 25.',
96
  placeholder='What is inheritance, encapsulation, abstraction, polymorphism?\nWhat is CLR?',
97
- lines=25)
 
98
  process_button = gr.Button('Find answers')
99
  outputs = gr.Textbox(label='Output', placeholder='Output will appear here')
100
  process_button.click(fn=find_answers, inputs=[tags_input, questions_input], outputs=outputs)
 
4
  import requests
5
  import gradio as gr
6
 
7
+ with open("config.json", "r") as f:
8
+ config = json.load(f)
9
+
10
+ max_questions_count = config["MAX_QUESTIONS_COUNT"]
11
+ max_tags_count = config["MAX_TAGS_COUNT"]
12
+ max_attempts = config["MAX_ATTEMPS"]
13
+ wait_time = config["WAIT_TIME"]
14
+ chatgpt_url = config["CHATGPT_URL"]
15
 
16
  def get_answer(question: str) -> Dict[str, Any]:
17
  headers = {
 
26
  }
27
 
28
  try:
29
+ response = requests.post(chatgpt_url, headers=headers, data=json.dumps(payload))
30
  response.raise_for_status()
31
  content = response.json()['choices'][0]['message']['content']
32
  return {
 
51
  def validate_tags(tags: str) -> None:
52
  if not tags:
53
  raise gr.Error('Validation error. It is necessary to set at least one tag')
54
+ if len(tags) > max_tags_count:
55
+ raise gr.Error(f'Validation error. The maximum allowed number of tags is {max_tags_count}.')
56
 
57
  def validate_questions(questions: str) -> None:
58
  if not questions:
59
  raise gr.Error('Validation error. It is necessary to ask at least one question')
60
+ if len(questions) > max_questions_count:
61
+ raise gr.Error(f'Validation error. The maximum allowed number of questions is {max_questions_count}.')
62
 
63
  def find_answers(tags: str, questions: str, progress=gr.Progress()) -> str:
64
  tags = tags.split('\n')
 
72
  results = []
73
  for question in progress.tqdm(questions):
74
  tagged_question = f'{tags_str} {question}'
75
+ for attempt in range(max_attempts):
76
  answer = get_answer(tagged_question)
77
  if answer['status']:
78
  results.append((question, answer['content']))
79
  break
80
+ elif attempt == max_attempts - 1:
81
  results.append((question, 'An error occurred while receiving data.'))
82
  else:
83
+ time.sleep(wait_time)
84
 
85
  return format_results(results)
86
 
 
91
  gr.Markdown('The service allows you to get answers to all questions on the specified topic.')
92
  with gr.Row():
93
  tags_input = gr.Textbox(
94
+ label=f'Enter tags (each line is a separate tag). Maximum: {max_tags_count}.',
95
  placeholder='.Net\nC#',
96
+ lines=max_tags_count
97
+ )
98
  questions_input = gr.Textbox(
99
+ label=f'Enter questions (each line is a separate question). Maximum: {max_questions_count}.',
100
  placeholder='What is inheritance, encapsulation, abstraction, polymorphism?\nWhat is CLR?',
101
+ lines=max_questions_count
102
+ )
103
  process_button = gr.Button('Find answers')
104
  outputs = gr.Textbox(label='Output', placeholder='Output will appear here')
105
  process_button.click(fn=find_answers, inputs=[tags_input, questions_input], outputs=outputs)
config.json ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ {
2
+ "MAX_QUESTIONS_COUNT": 25,
3
+ "MAX_TAGS_COUNT": 5,
4
+ "MAX_ATTEMPS": 3,
5
+ "WAIT_TIME": 3,
6
+ "CHATGPT_URL": "https://free.churchless.tech/v1/chat/completions"
7
+ }