hadadrjt commited on
Commit
23e5505
·
1 Parent(s): 7bae676

ai: Back to 5 minute of cool down.

Browse files
Files changed (1) hide show
  1. jarvis.py +12 -8
jarvis.py CHANGED
@@ -34,6 +34,8 @@ LINUX_SERVER_PROVIDER_KEYS = [key for key in json.loads(os.getenv("LINUX_SERVER_
34
  LINUX_SERVER_PROVIDER_KEYS_MARKED = set()
35
  LINUX_SERVER_PROVIDER_KEYS_ATTEMPTS = {}
36
 
 
 
37
  AI_TYPES = {f"AI_TYPE_{i}": os.getenv(f"AI_TYPE_{i}") for i in range(1, 7)}
38
  RESPONSES = {f"RESPONSE_{i}": os.getenv(f"RESPONSE_{i}") for i in range(1, 10)}
39
 
@@ -60,7 +62,7 @@ def marked_item(item, marked, attempts):
60
  def remove_fail():
61
  marked.discard(item)
62
  attempts.pop(item, None)
63
- threading.Timer(3600, remove_fail).start()
64
 
65
  class SessionWithID(requests.Session):
66
  def __init__(self):
@@ -114,19 +116,21 @@ async def fetch_response_async(host, provider_key, selected_model, messages, mod
114
  for timeout in timeouts:
115
  try:
116
  async with httpx.AsyncClient(timeout=timeout) as client:
117
- data = {"model": selected_model, "messages": messages, **model_config}
118
- resp = await client.post(host, json={**data, "session_id": session_id}, headers={"Authorization": f"Bearer {provider_key}"})
 
 
119
  resp.raise_for_status()
120
  resp_json = resp.json()
121
  if isinstance(resp_json, dict) and resp_json.get("choices"):
122
  choice = resp_json["choices"][0]
123
  if choice.get("message") and isinstance(choice["message"].get("content"), str):
124
  return choice["message"]["content"]
125
- return RESPONSES["RESPONSE_2"]
126
  except Exception:
127
  continue
128
  marked_item(provider_key, LINUX_SERVER_PROVIDER_KEYS_MARKED, LINUX_SERVER_PROVIDER_KEYS_ATTEMPTS)
129
- return RESPONSES["RESPONSE_2"]
130
 
131
  async def chat_with_model_async(history, user_input, selected_model_display, sess):
132
  if not get_available_items(LINUX_SERVER_PROVIDER_KEYS, LINUX_SERVER_PROVIDER_KEYS_MARKED) or not get_available_items(LINUX_SERVER_HOSTS, LINUX_SERVER_HOSTS_MARKED):
@@ -142,7 +146,7 @@ async def chat_with_model_async(history, user_input, selected_model_display, ses
142
  global ACTIVE_CANDIDATE
143
  if ACTIVE_CANDIDATE:
144
  result = await fetch_response_async(ACTIVE_CANDIDATE[0], ACTIVE_CANDIDATE[1], selected_model, messages, model_config, sess.session_id)
145
- if result != RESPONSES["RESPONSE_2"]:
146
  return result
147
  ACTIVE_CANDIDATE = None
148
  keys = get_available_items(LINUX_SERVER_PROVIDER_KEYS, LINUX_SERVER_PROVIDER_KEYS_MARKED)
@@ -151,7 +155,7 @@ async def chat_with_model_async(history, user_input, selected_model_display, ses
151
  random.shuffle(candidates)
152
  for host, key in candidates:
153
  result = await fetch_response_async(host, key, selected_model, messages, model_config, sess.session_id)
154
- if result != RESPONSES["RESPONSE_2"]:
155
  ACTIVE_CANDIDATE = (host, key)
156
  return result
157
  return RESPONSES["RESPONSE_2"]
@@ -197,6 +201,6 @@ with gr.Blocks(fill_height=True, fill_width=True, title=AI_TYPES["AI_TYPE_4"], h
197
  msg = gr.MultimodalTextbox(show_label=False, placeholder=RESPONSES["RESPONSE_5"], interactive=True, file_count="single", file_types=ALLOWED_EXTENSIONS)
198
  with gr.Accordion(AI_TYPES["AI_TYPE_6"], open=False):
199
  model_dropdown = gr.Dropdown(show_label=False, choices=MODEL_CHOICES, value=MODEL_CHOICES[0])
200
- model_dropdown.change(fn=change_model, inputs=[model_dropdown], outputs=[user_history, user_session, selected_model], show_progress="full")
201
  msg.submit(fn=respond_async, inputs=[msg, user_history, selected_model, user_session], outputs=[chatbot, msg, user_session], api_name=INTERNAL_AI_GET_SERVER)
202
  jarvis.launch(max_file_size="1mb")
 
34
  LINUX_SERVER_PROVIDER_KEYS_MARKED = set()
35
  LINUX_SERVER_PROVIDER_KEYS_ATTEMPTS = {}
36
 
37
+ LINUX_SERVER_ERRORS = set(map(int, os.getenv("LINUX_SERVER_ERROR").split(",")))
38
+
39
  AI_TYPES = {f"AI_TYPE_{i}": os.getenv(f"AI_TYPE_{i}") for i in range(1, 7)}
40
  RESPONSES = {f"RESPONSE_{i}": os.getenv(f"RESPONSE_{i}") for i in range(1, 10)}
41
 
 
62
  def remove_fail():
63
  marked.discard(item)
64
  attempts.pop(item, None)
65
+ threading.Timer(300, remove_fail).start()
66
 
67
  class SessionWithID(requests.Session):
68
  def __init__(self):
 
116
  for timeout in timeouts:
117
  try:
118
  async with httpx.AsyncClient(timeout=timeout) as client:
119
+ resp = await client.post(host, json={"model": selected_model, "messages": messages, **model_config, "session_id": session_id}, headers={"Authorization": f"Bearer {provider_key}"})
120
+ if resp.status_code in LINUX_SERVER_ERRORS:
121
+ marked_item(provider_key, LINUX_SERVER_PROVIDER_KEYS_MARKED, LINUX_SERVER_PROVIDER_KEYS_ATTEMPTS)
122
+ return None
123
  resp.raise_for_status()
124
  resp_json = resp.json()
125
  if isinstance(resp_json, dict) and resp_json.get("choices"):
126
  choice = resp_json["choices"][0]
127
  if choice.get("message") and isinstance(choice["message"].get("content"), str):
128
  return choice["message"]["content"]
129
+ return None
130
  except Exception:
131
  continue
132
  marked_item(provider_key, LINUX_SERVER_PROVIDER_KEYS_MARKED, LINUX_SERVER_PROVIDER_KEYS_ATTEMPTS)
133
+ return None
134
 
135
  async def chat_with_model_async(history, user_input, selected_model_display, sess):
136
  if not get_available_items(LINUX_SERVER_PROVIDER_KEYS, LINUX_SERVER_PROVIDER_KEYS_MARKED) or not get_available_items(LINUX_SERVER_HOSTS, LINUX_SERVER_HOSTS_MARKED):
 
146
  global ACTIVE_CANDIDATE
147
  if ACTIVE_CANDIDATE:
148
  result = await fetch_response_async(ACTIVE_CANDIDATE[0], ACTIVE_CANDIDATE[1], selected_model, messages, model_config, sess.session_id)
149
+ if result:
150
  return result
151
  ACTIVE_CANDIDATE = None
152
  keys = get_available_items(LINUX_SERVER_PROVIDER_KEYS, LINUX_SERVER_PROVIDER_KEYS_MARKED)
 
155
  random.shuffle(candidates)
156
  for host, key in candidates:
157
  result = await fetch_response_async(host, key, selected_model, messages, model_config, sess.session_id)
158
+ if result:
159
  ACTIVE_CANDIDATE = (host, key)
160
  return result
161
  return RESPONSES["RESPONSE_2"]
 
201
  msg = gr.MultimodalTextbox(show_label=False, placeholder=RESPONSES["RESPONSE_5"], interactive=True, file_count="single", file_types=ALLOWED_EXTENSIONS)
202
  with gr.Accordion(AI_TYPES["AI_TYPE_6"], open=False):
203
  model_dropdown = gr.Dropdown(show_label=False, choices=MODEL_CHOICES, value=MODEL_CHOICES[0])
204
+ model_dropdown.change(fn=change_model, inputs=[model_dropdown], outputs=[user_history, user_session, selected_model])
205
  msg.submit(fn=respond_async, inputs=[msg, user_history, selected_model, user_session], outputs=[chatbot, msg, user_session], api_name=INTERNAL_AI_GET_SERVER)
206
  jarvis.launch(max_file_size="1mb")