Reyall commited on
Commit
33715c8
·
verified ·
1 Parent(s): 0d34a5d

Update src/streamlit_app.py

Browse files
Files changed (1) hide show
  1. src/streamlit_app.py +22 -31
src/streamlit_app.py CHANGED
@@ -1,44 +1,35 @@
1
  import os
2
  import sys
3
  import streamlit as st
4
- from transformers import BertTokenizer, BertForSequenceClassification # Burada BertTokenizer istifadə edirik
5
  import torch
6
  import pickle
7
  import random
8
  from collections import defaultdict
9
- import requests
10
 
11
- # GitHub-dan fayl yükləmək üçün funksiyanın təyin edilməsi
12
- def download_label_encoder():
13
- url = "https://github.com/AxundovReyal/nlp-disease/raw/main/label_encoder.pkl"
14
- headers = {
15
- "Authorization": f"token {os.getenv('GITHUB_TOKEN')}" # GitHub personal access token mühit dəyişəni olaraq qeyd olunmalı
16
- }
17
- response = requests.get(url, headers=headers)
18
-
19
- if response.status_code == 200:
20
- with open("label_encoder.pkl", "wb") as f:
21
- f.write(response.content)
22
- print("label_encoder.pkl faylı uğurla yükləndi.")
23
- else:
24
- raise Exception(f"Fayl yüklənə bilmədi, error kodu: {response.status_code}")
25
 
26
- # Modelin və label_encoder-in yüklənməsi
27
  @st.cache_resource
28
  def load_model():
29
- # GitHub-dan label_encoder yükləmək
30
- download_label_encoder()
31
-
32
- # Label encoder yüklənməsi əvvəlcə edilir
33
- with open("label_encoder.pkl", "rb") as f:
34
- label_encoder = pickle.load(f)
35
 
36
- # Burada AutoTokenizer əvəzinə BertTokenizer istifadə edirik
37
- tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') # BERT Tokenizer
38
- model = BertForSequenceClassification.from_pretrained('bert-base-uncased', num_labels=len(label_encoder.classes_)) # BERT Model
39
-
 
 
40
  model.eval()
41
-
42
  return tokenizer, model, label_encoder
43
 
44
  tokenizer, model, label_encoder = load_model()
@@ -76,12 +67,12 @@ if st.button("Predict"):
76
 
77
  st.subheader("Top 3 Predicted Diseases (averaged over shuffled inputs):")
78
  for idx, prob in top_3:
79
- label = label_encoder.classes_[idx] # Etiketləri doğru alırıq
80
  st.write(f"**{label}** — Probability: `{prob * 100:.2f}%`")
81
 
82
- # Render port düzəlişi
83
  if __name__ == "__main__":
84
  port = int(os.environ.get("PORT", 8501))
85
- sys.argv = ["streamlit", "run", "streamlit_app.py", f"--server.port={port}", "--server.address=0.0.0.0"]
86
  from streamlit.web.cli import main
87
  sys.exit(main())
 
1
  import os
2
  import sys
3
  import streamlit as st
4
+ from transformers import BertTokenizer, BertForSequenceClassification
5
  import torch
6
  import pickle
7
  import random
8
  from collections import defaultdict
 
9
 
10
+ # label_encoder.pkl faylı Hugging Face Space repo-nun kökündədirsə və ya müəyyən yerdədirsə,
11
+ # tam yolunu yaz
12
+ def load_label_encoder():
13
+ # Faylın yerini təyin edirik (repo-nun köküdürsə, WORKDIR /app olduğu üçün os.getcwd() istifadə olunur)
14
+ file_path = os.path.join(os.getcwd(), "label_encoder.pkl")
15
+ if not os.path.exists(file_path):
16
+ st.error(f"Label encoder faylı tapılmadı: {file_path}")
17
+ st.stop()
18
+ with open(file_path, "rb") as f:
19
+ label_encoder = pickle.load(f)
20
+ return label_encoder
 
 
 
21
 
 
22
  @st.cache_resource
23
  def load_model():
24
+ label_encoder = load_label_encoder()
 
 
 
 
 
25
 
26
+ # Modelin yolunu təyin edirik. Məsələn, 'best_model' qovluğu Space repo içindədirsə:
27
+ model_path = os.path.join(os.getcwd(), "best_model")
28
+
29
+ # Modeli yükləyirik
30
+ tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
31
+ model = BertForSequenceClassification.from_pretrained(model_path, num_labels=len(label_encoder.classes_))
32
  model.eval()
 
33
  return tokenizer, model, label_encoder
34
 
35
  tokenizer, model, label_encoder = load_model()
 
67
 
68
  st.subheader("Top 3 Predicted Diseases (averaged over shuffled inputs):")
69
  for idx, prob in top_3:
70
+ label = label_encoder.classes_[idx]
71
  st.write(f"**{label}** — Probability: `{prob * 100:.2f}%`")
72
 
73
+ # Render port düzəlişi (əgər lazım olarsa)
74
  if __name__ == "__main__":
75
  port = int(os.environ.get("PORT", 8501))
76
+ sys.argv = ["streamlit", "run", "src/streamlit_app.py", f"--server.port={port}", "--server.address=0.0.0.0"]
77
  from streamlit.web.cli import main
78
  sys.exit(main())