Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -9,7 +9,6 @@ from collections import defaultdict, deque
|
|
| 9 |
from detoxify import Detoxify
|
| 10 |
import logging
|
| 11 |
|
| 12 |
-
# Flask'in varsayılan logger'ını daha iyi kullanmak için yapılandırma
|
| 13 |
logging.basicConfig(level=logging.INFO)
|
| 14 |
|
| 15 |
app = Flask(__name__, static_folder='static', template_folder='templates')
|
|
@@ -20,7 +19,6 @@ print("Model loaded successfully.")
|
|
| 20 |
|
| 21 |
API_KEY = os.getenv('API_KEY', 'your-api-key-here')
|
| 22 |
|
| 23 |
-
# --- Geliştirilmiş Metrik Takip Sistemi ---
|
| 24 |
request_durations = deque(maxlen=100)
|
| 25 |
request_timestamps = deque(maxlen=1000)
|
| 26 |
|
|
@@ -54,11 +52,7 @@ def track_request_metrics(start_time, tokens_count):
|
|
| 54 |
end_time = time.time()
|
| 55 |
duration = end_time - start_time
|
| 56 |
|
| 57 |
-
# --- İSTEK ÜZERİNE GÜNCELLENEN KISIM ---
|
| 58 |
-
# Sunucu taraflı işlem süresini milisaniye olarak terminale logla.
|
| 59 |
-
# Bu log, arayüzdeki metriklerle tutarlı olacaktır.
|
| 60 |
app.logger.info(f"Server-side processing for moderation request took {duration * 1000:.2f} ms.")
|
| 61 |
-
# ------------------------------------------
|
| 62 |
|
| 63 |
request_durations.append(duration)
|
| 64 |
request_timestamps.append(datetime.now())
|
|
@@ -187,9 +181,7 @@ def moderations():
|
|
| 187 |
response = jsonify({"error": "An internal server error occurred."}), 500
|
| 188 |
return response
|
| 189 |
finally:
|
| 190 |
-
# Bu blok her zaman çalışır, response döndürülmeden hemen önce
|
| 191 |
if response and response.status_code < 400:
|
| 192 |
-
# Sadece başarılı istekleri metrikler için takip et
|
| 193 |
track_request_metrics(start_time, total_tokens)
|
| 194 |
|
| 195 |
with concurrent_requests_lock:
|
|
@@ -208,7 +200,6 @@ def metrics():
|
|
| 208 |
return jsonify(get_performance_metrics())
|
| 209 |
|
| 210 |
def create_directories_and_files():
|
| 211 |
-
# Bu fonksiyon HTML/CSS içeriği değişmediği için aynı kalabilir.
|
| 212 |
os.makedirs('templates', exist_ok=True)
|
| 213 |
os.makedirs('static', exist_ok=True)
|
| 214 |
|
|
@@ -282,7 +273,6 @@ def create_directories_and_files():
|
|
| 282 |
</h2>
|
| 283 |
|
| 284 |
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-8">
|
| 285 |
-
<!-- METRIC CARD 1: AVG RESPONSE TIME -->
|
| 286 |
<div class="bg-white dark:bg-gray-800 rounded-xl shadow-lg p-6">
|
| 287 |
<div class="flex items-center justify-between">
|
| 288 |
<div>
|
|
@@ -295,7 +285,6 @@ def create_directories_and_files():
|
|
| 295 |
</div>
|
| 296 |
</div>
|
| 297 |
|
| 298 |
-
<!-- METRIC CARD 2: REQUESTS PER MINUTE -->
|
| 299 |
<div class="bg-white dark:bg-gray-800 rounded-xl shadow-lg p-6">
|
| 300 |
<div class="flex items-center justify-between">
|
| 301 |
<div>
|
|
@@ -308,7 +297,6 @@ def create_directories_and_files():
|
|
| 308 |
</div>
|
| 309 |
</div>
|
| 310 |
|
| 311 |
-
<!-- METRIC CARD 3: PEAK RESPONSE TIME -->
|
| 312 |
<div class="bg-white dark:bg-gray-800 rounded-xl shadow-lg p-6">
|
| 313 |
<div class="flex items-center justify-between">
|
| 314 |
<div>
|
|
@@ -321,7 +309,6 @@ def create_directories_and_files():
|
|
| 321 |
</div>
|
| 322 |
</div>
|
| 323 |
|
| 324 |
-
<!-- METRIC CARD 4: TODAY'S REQUESTS -->
|
| 325 |
<div class="bg-white dark:bg-gray-800 rounded-xl shadow-lg p-6">
|
| 326 |
<div class="flex items-center justify-between">
|
| 327 |
<div>
|
|
@@ -343,7 +330,6 @@ def create_directories_and_files():
|
|
| 343 |
</div>
|
| 344 |
</section>
|
| 345 |
|
| 346 |
-
<!-- API Tester Section -->
|
| 347 |
<section class="mb-12">
|
| 348 |
<h2 class="text-2xl font-bold mb-6 flex items-center">
|
| 349 |
<i class="fas fa-code mr-3 text-primary-600"></i>
|
|
@@ -389,7 +375,6 @@ def create_directories_and_files():
|
|
| 389 |
</div>
|
| 390 |
</section>
|
| 391 |
|
| 392 |
-
<!-- Results Section -->
|
| 393 |
<section id="resultsSection" class="hidden">
|
| 394 |
<h2 class="text-2xl font-bold mb-6 flex items-center">
|
| 395 |
<i class="fas fa-clipboard-check mr-3 text-primary-600"></i>
|
|
@@ -409,7 +394,6 @@ def create_directories_and_files():
|
|
| 409 |
</div>
|
| 410 |
</section>
|
| 411 |
|
| 412 |
-
<!-- API Documentation -->
|
| 413 |
<section>
|
| 414 |
<h2 class="text-2xl font-bold mb-6 flex items-center">
|
| 415 |
<i class="fas fa-book mr-3 text-primary-600"></i>
|
|
@@ -457,7 +441,6 @@ def create_directories_and_files():
|
|
| 457 |
</footer>
|
| 458 |
|
| 459 |
<script>
|
| 460 |
-
// JS kodu değişmediği için aynı kalabilir.
|
| 461 |
const darkModeToggle = document.getElementById('darkModeToggle');
|
| 462 |
const html = document.documentElement;
|
| 463 |
|
|
@@ -506,7 +489,6 @@ def create_directories_and_files():
|
|
| 506 |
const error = await response.json();
|
| 507 |
console.error('Failed to fetch metrics:', error.error);
|
| 508 |
if(response.status === 401) {
|
| 509 |
-
// Maybe show a small warning that API key is needed for metrics
|
| 510 |
}
|
| 511 |
return;
|
| 512 |
}
|
|
@@ -601,7 +583,7 @@ def create_directories_and_files():
|
|
| 601 |
if (!response.ok) throw new Error(data.error || 'Failed to analyze text');
|
| 602 |
|
| 603 |
displayResults(data, responseTime, texts);
|
| 604 |
-
fetchMetrics();
|
| 605 |
|
| 606 |
} catch (error) {
|
| 607 |
alert('Error: ' + error.message);
|
|
|
|
| 9 |
from detoxify import Detoxify
|
| 10 |
import logging
|
| 11 |
|
|
|
|
| 12 |
logging.basicConfig(level=logging.INFO)
|
| 13 |
|
| 14 |
app = Flask(__name__, static_folder='static', template_folder='templates')
|
|
|
|
| 19 |
|
| 20 |
API_KEY = os.getenv('API_KEY', 'your-api-key-here')
|
| 21 |
|
|
|
|
| 22 |
request_durations = deque(maxlen=100)
|
| 23 |
request_timestamps = deque(maxlen=1000)
|
| 24 |
|
|
|
|
| 52 |
end_time = time.time()
|
| 53 |
duration = end_time - start_time
|
| 54 |
|
|
|
|
|
|
|
|
|
|
| 55 |
app.logger.info(f"Server-side processing for moderation request took {duration * 1000:.2f} ms.")
|
|
|
|
| 56 |
|
| 57 |
request_durations.append(duration)
|
| 58 |
request_timestamps.append(datetime.now())
|
|
|
|
| 181 |
response = jsonify({"error": "An internal server error occurred."}), 500
|
| 182 |
return response
|
| 183 |
finally:
|
|
|
|
| 184 |
if response and response.status_code < 400:
|
|
|
|
| 185 |
track_request_metrics(start_time, total_tokens)
|
| 186 |
|
| 187 |
with concurrent_requests_lock:
|
|
|
|
| 200 |
return jsonify(get_performance_metrics())
|
| 201 |
|
| 202 |
def create_directories_and_files():
|
|
|
|
| 203 |
os.makedirs('templates', exist_ok=True)
|
| 204 |
os.makedirs('static', exist_ok=True)
|
| 205 |
|
|
|
|
| 273 |
</h2>
|
| 274 |
|
| 275 |
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-8">
|
|
|
|
| 276 |
<div class="bg-white dark:bg-gray-800 rounded-xl shadow-lg p-6">
|
| 277 |
<div class="flex items-center justify-between">
|
| 278 |
<div>
|
|
|
|
| 285 |
</div>
|
| 286 |
</div>
|
| 287 |
|
|
|
|
| 288 |
<div class="bg-white dark:bg-gray-800 rounded-xl shadow-lg p-6">
|
| 289 |
<div class="flex items-center justify-between">
|
| 290 |
<div>
|
|
|
|
| 297 |
</div>
|
| 298 |
</div>
|
| 299 |
|
|
|
|
| 300 |
<div class="bg-white dark:bg-gray-800 rounded-xl shadow-lg p-6">
|
| 301 |
<div class="flex items-center justify-between">
|
| 302 |
<div>
|
|
|
|
| 309 |
</div>
|
| 310 |
</div>
|
| 311 |
|
|
|
|
| 312 |
<div class="bg-white dark:bg-gray-800 rounded-xl shadow-lg p-6">
|
| 313 |
<div class="flex items-center justify-between">
|
| 314 |
<div>
|
|
|
|
| 330 |
</div>
|
| 331 |
</section>
|
| 332 |
|
|
|
|
| 333 |
<section class="mb-12">
|
| 334 |
<h2 class="text-2xl font-bold mb-6 flex items-center">
|
| 335 |
<i class="fas fa-code mr-3 text-primary-600"></i>
|
|
|
|
| 375 |
</div>
|
| 376 |
</section>
|
| 377 |
|
|
|
|
| 378 |
<section id="resultsSection" class="hidden">
|
| 379 |
<h2 class="text-2xl font-bold mb-6 flex items-center">
|
| 380 |
<i class="fas fa-clipboard-check mr-3 text-primary-600"></i>
|
|
|
|
| 394 |
</div>
|
| 395 |
</section>
|
| 396 |
|
|
|
|
| 397 |
<section>
|
| 398 |
<h2 class="text-2xl font-bold mb-6 flex items-center">
|
| 399 |
<i class="fas fa-book mr-3 text-primary-600"></i>
|
|
|
|
| 441 |
</footer>
|
| 442 |
|
| 443 |
<script>
|
|
|
|
| 444 |
const darkModeToggle = document.getElementById('darkModeToggle');
|
| 445 |
const html = document.documentElement;
|
| 446 |
|
|
|
|
| 489 |
const error = await response.json();
|
| 490 |
console.error('Failed to fetch metrics:', error.error);
|
| 491 |
if(response.status === 401) {
|
|
|
|
| 492 |
}
|
| 493 |
return;
|
| 494 |
}
|
|
|
|
| 583 |
if (!response.ok) throw new Error(data.error || 'Failed to analyze text');
|
| 584 |
|
| 585 |
displayResults(data, responseTime, texts);
|
| 586 |
+
fetchMetrics();
|
| 587 |
|
| 588 |
} catch (error) {
|
| 589 |
alert('Error: ' + error.message);
|