firmnnm commited on
Commit
e8b305e
Β·
verified Β·
1 Parent(s): 9a67e48

Deploy personality classifier app

Browse files
Files changed (1) hide show
  1. app.py +52 -28
app.py CHANGED
@@ -5,13 +5,28 @@ import skops.io as sio
5
  from skops.io import get_untrusted_types
6
  import os
7
 
8
- # Import untuk error handling
9
- try:
10
- import httpx
11
- import httpcore
12
- HTTPX_AVAILABLE = True
13
- except ImportError:
14
- HTTPX_AVAILABLE = False
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
 
16
 
17
  class PersonalityClassifierApp:
@@ -30,27 +45,31 @@ class PersonalityClassifierApp:
30
  # Menentukan base path untuk model files
31
  base_path = os.path.dirname(os.path.abspath(__file__))
32
  parent_path = os.path.dirname(base_path)
33
-
34
  # Mencoba beberapa lokasi untuk file model
35
  possible_paths = [
36
  "Model/personality_classifier.skops", # Local development
37
- os.path.join(parent_path, "Model/personality_classifier.skops"), # Relative to App folder
 
 
38
  "./Model/personality_classifier.skops", # Current directory
39
- "personality_classifier.skops" # Hugging Face Spaces root
40
  ]
41
-
42
  model_path = None
43
  for path in possible_paths:
44
  if os.path.exists(path):
45
  model_path = path
46
  break
47
-
48
  if model_path:
49
  unknown_types = get_untrusted_types(file=model_path)
50
  self.model = sio.load(model_path, trusted=unknown_types)
51
  print(f"βœ… Model berhasil dimuat dari: {model_path}")
52
  else:
53
- print(f"❌ File model tidak ditemukan di lokasi manapun: {possible_paths}")
 
 
54
  return False
55
 
56
  # Memuat label encoder
@@ -58,21 +77,23 @@ class PersonalityClassifierApp:
58
  "Model/label_encoder.skops",
59
  os.path.join(parent_path, "Model/label_encoder.skops"),
60
  "./Model/label_encoder.skops",
61
- "label_encoder.skops"
62
  ]
63
-
64
  encoder_path = None
65
  for path in encoder_possible_paths:
66
  if os.path.exists(path):
67
  encoder_path = path
68
  break
69
-
70
  if encoder_path:
71
  unknown_types = get_untrusted_types(file=encoder_path)
72
  self.label_encoder = sio.load(encoder_path, trusted=unknown_types)
73
  print(f"βœ… Label encoder berhasil dimuat dari: {encoder_path}")
74
  else:
75
- print(f"❌ File label encoder tidak ditemukan di lokasi manapun: {encoder_possible_paths}")
 
 
76
  return False
77
 
78
  # Memuat feature names
@@ -80,22 +101,24 @@ class PersonalityClassifierApp:
80
  "Model/feature_names.skops",
81
  os.path.join(parent_path, "Model/feature_names.skops"),
82
  "./Model/feature_names.skops",
83
- "feature_names.skops"
84
  ]
85
-
86
  features_path = None
87
  for path in features_possible_paths:
88
  if os.path.exists(path):
89
  features_path = path
90
  break
91
-
92
  if features_path:
93
  unknown_types = get_untrusted_types(file=features_path)
94
  self.feature_names = sio.load(features_path, trusted=unknown_types)
95
  print(f"βœ… Feature names berhasil dimuat dari: {features_path}")
96
  print(f"Features: {self.feature_names}")
97
  else:
98
- print(f"❌ File feature names tidak ditemukan di lokasi manapun: {features_possible_paths}")
 
 
99
  return False
100
 
101
  return True
@@ -173,7 +196,6 @@ class PersonalityClassifierApp:
173
 
174
  # Format hasil yang lebih menarik
175
  max_prob = max(probabilities)
176
- max_class = classes[np.argmax(probabilities)]
177
 
178
  # Emoji berdasarkan personality type
179
  personality_emoji = {"Extrovert": "🌟", "Introvert": "πŸ€”", "Ambivert": "βš–οΈ"}
@@ -206,7 +228,7 @@ class PersonalityClassifierApp:
206
  result += f"`{bar}` {prob_value:.1%}\n"
207
 
208
  # Tambahkan interpretasi hasil
209
- result += f"\n---\n\n### πŸ’‘ Interpretasi:\n"
210
 
211
  if max_prob >= 0.8:
212
  result += (
@@ -483,7 +505,6 @@ Masukkan data pribadi Anda pada form di sebelah kiri, kemudian klik tombol **
483
  outputs=[result_output],
484
  )
485
 
486
-
487
  gr.Markdown(
488
  """
489
  ---
@@ -500,13 +521,16 @@ Masukkan data pribadi Anda pada form di sebelah kiri, kemudian klik tombol **
500
 
501
 
502
  if __name__ == "__main__":
503
- print("πŸš€ Launching Personality Classifier App on Hugging Face Spaces...")
504
-
 
 
 
505
  demo = create_interface()
506
 
507
  demo.launch(
508
- server_name="0.0.0.0",
509
- server_port=7860,
510
  share=False,
511
  show_api=False,
512
  )
 
5
  from skops.io import get_untrusted_types
6
  import os
7
 
8
+
9
+ # Configuration for server based on environment
10
+ def get_server_config():
11
+ """Get server configuration based on environment"""
12
+ # Check if running in Docker
13
+ is_docker = (
14
+ os.path.exists("/.dockerenv")
15
+ or os.environ.get("DOCKER_CONTAINER", "false").lower() == "true"
16
+ )
17
+
18
+ if is_docker:
19
+ # Docker environment - use 0.0.0.0 to allow external access
20
+ server_name = os.environ.get("GRADIO_SERVER_NAME", "0.0.0.0")
21
+ server_port = int(os.environ.get("GRADIO_SERVER_PORT", 7860))
22
+ print(f"🐳 Running in Docker - Server: {server_name}:{server_port}")
23
+ else:
24
+ # Local development - use 127.0.0.1 for security
25
+ server_name = os.environ.get("GRADIO_SERVER_NAME", "127.0.0.1")
26
+ server_port = int(os.environ.get("GRADIO_SERVER_PORT", 7860))
27
+ print(f"πŸ’» Running locally - Server: {server_name}:{server_port}")
28
+
29
+ return server_name, server_port
30
 
31
 
32
  class PersonalityClassifierApp:
 
45
  # Menentukan base path untuk model files
46
  base_path = os.path.dirname(os.path.abspath(__file__))
47
  parent_path = os.path.dirname(base_path)
48
+
49
  # Mencoba beberapa lokasi untuk file model
50
  possible_paths = [
51
  "Model/personality_classifier.skops", # Local development
52
+ os.path.join(
53
+ parent_path, "Model/personality_classifier.skops"
54
+ ), # Relative to App folder
55
  "./Model/personality_classifier.skops", # Current directory
56
+ "personality_classifier.skops", # Hugging Face Spaces root
57
  ]
58
+
59
  model_path = None
60
  for path in possible_paths:
61
  if os.path.exists(path):
62
  model_path = path
63
  break
64
+
65
  if model_path:
66
  unknown_types = get_untrusted_types(file=model_path)
67
  self.model = sio.load(model_path, trusted=unknown_types)
68
  print(f"βœ… Model berhasil dimuat dari: {model_path}")
69
  else:
70
+ print(
71
+ f"❌ File model tidak ditemukan di lokasi manapun: {possible_paths}"
72
+ )
73
  return False
74
 
75
  # Memuat label encoder
 
77
  "Model/label_encoder.skops",
78
  os.path.join(parent_path, "Model/label_encoder.skops"),
79
  "./Model/label_encoder.skops",
80
+ "label_encoder.skops",
81
  ]
82
+
83
  encoder_path = None
84
  for path in encoder_possible_paths:
85
  if os.path.exists(path):
86
  encoder_path = path
87
  break
88
+
89
  if encoder_path:
90
  unknown_types = get_untrusted_types(file=encoder_path)
91
  self.label_encoder = sio.load(encoder_path, trusted=unknown_types)
92
  print(f"βœ… Label encoder berhasil dimuat dari: {encoder_path}")
93
  else:
94
+ print(
95
+ f"❌ File label encoder tidak ditemukan di lokasi manapun: {encoder_possible_paths}"
96
+ )
97
  return False
98
 
99
  # Memuat feature names
 
101
  "Model/feature_names.skops",
102
  os.path.join(parent_path, "Model/feature_names.skops"),
103
  "./Model/feature_names.skops",
104
+ "feature_names.skops",
105
  ]
106
+
107
  features_path = None
108
  for path in features_possible_paths:
109
  if os.path.exists(path):
110
  features_path = path
111
  break
112
+
113
  if features_path:
114
  unknown_types = get_untrusted_types(file=features_path)
115
  self.feature_names = sio.load(features_path, trusted=unknown_types)
116
  print(f"βœ… Feature names berhasil dimuat dari: {features_path}")
117
  print(f"Features: {self.feature_names}")
118
  else:
119
+ print(
120
+ f"❌ File feature names tidak ditemukan di lokasi manapun: {features_possible_paths}"
121
+ )
122
  return False
123
 
124
  return True
 
196
 
197
  # Format hasil yang lebih menarik
198
  max_prob = max(probabilities)
 
199
 
200
  # Emoji berdasarkan personality type
201
  personality_emoji = {"Extrovert": "🌟", "Introvert": "πŸ€”", "Ambivert": "βš–οΈ"}
 
228
  result += f"`{bar}` {prob_value:.1%}\n"
229
 
230
  # Tambahkan interpretasi hasil
231
+ result += "\n---\n\n### πŸ’‘ Interpretasi:\n"
232
 
233
  if max_prob >= 0.8:
234
  result += (
 
505
  outputs=[result_output],
506
  )
507
 
 
508
  gr.Markdown(
509
  """
510
  ---
 
521
 
522
 
523
  if __name__ == "__main__":
524
+ print("πŸš€ Launching Personality Classifier App...")
525
+
526
+ # Get server configuration based on environment
527
+ server_name, server_port = get_server_config()
528
+
529
  demo = create_interface()
530
 
531
  demo.launch(
532
+ server_name=server_name,
533
+ server_port=server_port,
534
  share=False,
535
  show_api=False,
536
  )