bahi-bh commited on
Commit
7aa112f
·
verified ·
1 Parent(s): e1635fc

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +8 -63
app.py CHANGED
@@ -9,18 +9,11 @@ import uvicorn
9
  from g4f.client import Client
10
  from g4f.Provider import __providers__
11
 
12
- # =========================================================
13
- # CONFIG
14
- # =========================================================
15
-
16
  MODEL = "gpt-4o-mini"
 
17
  MAX_RETRIES = 10
18
  TIMEOUT = 60
19
 
20
- # =========================================================
21
- # FILTER SAFE PROVIDERS
22
- # =========================================================
23
-
24
  SAFE_PROVIDERS = []
25
 
26
  for provider in __providers__:
@@ -29,27 +22,21 @@ for provider in __providers__:
29
 
30
  name = provider.__name__.lower()
31
 
32
- # must work
33
  if not getattr(provider, "working", False):
34
  continue
35
 
36
- # skip auth providers
37
  if getattr(provider, "needs_auth", False):
38
  continue
39
 
40
- # skip browser providers
41
  if getattr(provider, "use_nodriver", False):
42
  continue
43
 
44
- # blocked providers
45
  blocked = [
46
  "openai",
47
  "qwen",
48
  "copilot",
49
  "gemini",
50
  "claude",
51
- "deepseek",
52
- "perplexity",
53
  ]
54
 
55
  if any(x in name for x in blocked):
@@ -64,15 +51,8 @@ random.shuffle(SAFE_PROVIDERS)
64
 
65
  print(f"[+] SAFE PROVIDERS: {len(SAFE_PROVIDERS)}")
66
 
67
- # =========================================================
68
- # CLIENT
69
- # =========================================================
70
-
71
  client = Client()
72
 
73
- # =========================================================
74
- # SMART SYSTEM
75
- # =========================================================
76
 
77
  class SmartG4F:
78
 
@@ -81,14 +61,10 @@ class SmartG4F:
81
  self.good = []
82
  self.bad = {}
83
 
84
- # -----------------------------------------------------
85
-
86
  def mark_bad(self, provider, cooldown=300):
87
 
88
  self.bad[provider.__name__] = time.time() + cooldown
89
 
90
- # -----------------------------------------------------
91
-
92
  def is_bad(self, provider):
93
 
94
  expire = self.bad.get(provider.__name__)
@@ -102,8 +78,6 @@ class SmartG4F:
102
 
103
  return True
104
 
105
- # -----------------------------------------------------
106
-
107
  def provider_pool(self):
108
 
109
  providers = []
@@ -119,8 +93,6 @@ class SmartG4F:
119
 
120
  return providers
121
 
122
- # -----------------------------------------------------
123
-
124
  def ask(self, prompt):
125
 
126
  errors = []
@@ -156,6 +128,9 @@ class SmartG4F:
156
 
157
  text = response.choices[0].message.content
158
 
 
 
 
159
  if provider not in self.good:
160
  self.good.append(provider)
161
 
@@ -176,40 +151,23 @@ class SmartG4F:
176
  "error": str(e)
177
  })
178
 
179
- # 429
180
  if "429" in err:
181
 
182
- self.mark_bad(
183
- provider,
184
- cooldown=600
185
- )
186
-
187
  time.sleep(random.randint(10, 20))
188
 
189
- # cloudflare
190
  elif "cloudflare" in err:
191
 
192
- self.mark_bad(
193
- provider,
194
- cooldown=1200
195
- )
196
-
197
  time.sleep(20)
198
 
199
- # timeout
200
  elif "timeout" in err:
201
 
202
- self.mark_bad(
203
- provider,
204
- cooldown=300
205
- )
206
 
207
  else:
208
 
209
- self.mark_bad(
210
- provider,
211
- cooldown=180
212
- )
213
 
214
  continue
215
 
@@ -218,24 +176,15 @@ class SmartG4F:
218
  "errors": errors
219
  }
220
 
221
- # =========================================================
222
- # FASTAPI
223
- # =========================================================
224
 
225
  app = FastAPI()
226
 
227
  ai = SmartG4F()
228
 
229
- # =========================================================
230
- # REQUEST MODEL
231
- # =========================================================
232
 
233
  class Query(BaseModel):
234
  prompt: str
235
 
236
- # =========================================================
237
- # ROUTES
238
- # =========================================================
239
 
240
  @app.get("/")
241
  async def home():
@@ -245,16 +194,12 @@ async def home():
245
  "providers": len(SAFE_PROVIDERS)
246
  }
247
 
248
- # ---------------------------------------------------------
249
 
250
  @app.post("/ask")
251
  async def ask(query: Query):
252
 
253
  return ai.ask(query.prompt)
254
 
255
- # =========================================================
256
- # START
257
- # =========================================================
258
 
259
  if __name__ == "__main__":
260
 
 
9
  from g4f.client import Client
10
  from g4f.Provider import __providers__
11
 
 
 
 
 
12
  MODEL = "gpt-4o-mini"
13
+
14
  MAX_RETRIES = 10
15
  TIMEOUT = 60
16
 
 
 
 
 
17
  SAFE_PROVIDERS = []
18
 
19
  for provider in __providers__:
 
22
 
23
  name = provider.__name__.lower()
24
 
 
25
  if not getattr(provider, "working", False):
26
  continue
27
 
 
28
  if getattr(provider, "needs_auth", False):
29
  continue
30
 
 
31
  if getattr(provider, "use_nodriver", False):
32
  continue
33
 
 
34
  blocked = [
35
  "openai",
36
  "qwen",
37
  "copilot",
38
  "gemini",
39
  "claude",
 
 
40
  ]
41
 
42
  if any(x in name for x in blocked):
 
51
 
52
  print(f"[+] SAFE PROVIDERS: {len(SAFE_PROVIDERS)}")
53
 
 
 
 
 
54
  client = Client()
55
 
 
 
 
56
 
57
  class SmartG4F:
58
 
 
61
  self.good = []
62
  self.bad = {}
63
 
 
 
64
  def mark_bad(self, provider, cooldown=300):
65
 
66
  self.bad[provider.__name__] = time.time() + cooldown
67
 
 
 
68
  def is_bad(self, provider):
69
 
70
  expire = self.bad.get(provider.__name__)
 
78
 
79
  return True
80
 
 
 
81
  def provider_pool(self):
82
 
83
  providers = []
 
93
 
94
  return providers
95
 
 
 
96
  def ask(self, prompt):
97
 
98
  errors = []
 
128
 
129
  text = response.choices[0].message.content
130
 
131
+ if not text:
132
+ raise Exception("Empty response")
133
+
134
  if provider not in self.good:
135
  self.good.append(provider)
136
 
 
151
  "error": str(e)
152
  })
153
 
 
154
  if "429" in err:
155
 
156
+ self.mark_bad(provider, 600)
 
 
 
 
157
  time.sleep(random.randint(10, 20))
158
 
 
159
  elif "cloudflare" in err:
160
 
161
+ self.mark_bad(provider, 1200)
 
 
 
 
162
  time.sleep(20)
163
 
 
164
  elif "timeout" in err:
165
 
166
+ self.mark_bad(provider, 300)
 
 
 
167
 
168
  else:
169
 
170
+ self.mark_bad(provider, 180)
 
 
 
171
 
172
  continue
173
 
 
176
  "errors": errors
177
  }
178
 
 
 
 
179
 
180
  app = FastAPI()
181
 
182
  ai = SmartG4F()
183
 
 
 
 
184
 
185
  class Query(BaseModel):
186
  prompt: str
187
 
 
 
 
188
 
189
  @app.get("/")
190
  async def home():
 
194
  "providers": len(SAFE_PROVIDERS)
195
  }
196
 
 
197
 
198
  @app.post("/ask")
199
  async def ask(query: Query):
200
 
201
  return ai.ask(query.prompt)
202
 
 
 
 
203
 
204
  if __name__ == "__main__":
205