galihrhgnwn commited on
Commit
ea2b64e
Β·
verified Β·
1 Parent(s): 2dcb687

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +98 -74
app.py CHANGED
@@ -4,123 +4,147 @@ import json
4
  import os
5
  import uuid
6
 
7
- # Judul aplikasi
8
- st.title("πŸ€– Chatbot dengan Blackbox AI")
9
 
10
- # Inisialisasi file database
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
  DATABASE_FILE = "database.json"
12
 
13
- # Fungsi untuk memuat database dari file JSON
14
  def load_database():
15
  if os.path.exists(DATABASE_FILE):
16
  try:
17
  with open(DATABASE_FILE, "r") as file:
18
  return json.load(file)
19
  except json.JSONDecodeError:
20
- return {} # Jika file kosong atau corrupt, kembalikan dictionary kosong
21
  return {}
22
 
23
- # Fungsi untuk menyimpan database ke file JSON
24
  def save_database(database):
25
  with open(DATABASE_FILE, "w") as file:
26
  json.dump(database, file, indent=4)
27
 
28
- # Memuat database
29
  database = load_database()
30
 
31
- # Generate atau ambil user_id dari session state
32
  if "user_id" not in st.session_state:
33
- st.session_state.user_id = str(uuid.uuid4()) # Generate ID unik untuk pengguna
34
 
35
- user_id = st.session_state.user_id # Gunakan ID unik pengguna
36
 
37
- # Inisialisasi session state untuk menyimpan session list dan percakapan
38
  if "sessions" not in st.session_state:
39
- st.session_state.sessions = database.get(user_id, {}) # Memuat session pengguna dari database
40
  if "current_session" not in st.session_state:
41
- st.session_state.current_session = "Default Session" # Session default yang aktif
42
  if st.session_state.current_session not in st.session_state.sessions:
43
- st.session_state.sessions[st.session_state.current_session] = [] # Buat session default
44
 
45
- # Sidebar untuk mengelola session
46
  with st.sidebar:
47
- st.header("πŸ“ Session Management")
48
 
49
- # Tombol untuk menghapus session
50
- if st.session_state.sessions:
51
- if st.button("Hapus Session"):
 
 
 
 
 
 
 
 
 
 
 
 
 
52
  del st.session_state.sessions[st.session_state.current_session]
53
- if st.session_state.sessions: # Jika masih ada session lain, pilih session pertama
54
  st.session_state.current_session = list(st.session_state.sessions.keys())[0]
55
- else: # Jika tidak ada session, buat session default baru
56
  st.session_state.current_session = "Default Session"
57
  st.session_state.sessions[st.session_state.current_session] = []
58
- database[user_id] = st.session_state.sessions # Simpan ke database
59
- save_database(database) # Simpan ke file JSON
60
- st.success("Session berhasil dihapus!")
61
 
62
- # Tampilkan percakapan dari session yang aktif
63
- st.header(f"πŸ’¬ Percakapan: {st.session_state.current_session}")
64
 
65
- # Tampilkan riwayat chat dari session yang aktif
66
  for message in st.session_state.sessions[st.session_state.current_session]:
67
- with st.chat_message(message["role"]):
68
- st.markdown(message["content"])
 
 
69
 
70
  # Input pengguna
71
  if prompt := st.chat_input("Ketik pesan Anda di sini..."):
72
- # Tambahkan pesan pengguna ke riwayat chat session yang aktif
73
  st.session_state.sessions[st.session_state.current_session].append({"role": "user", "content": prompt})
74
  with st.chat_message("user"):
75
- st.markdown(prompt)
76
 
77
- # Generate respons AI menggunakan g4f dengan provider Blackbox
78
  with st.chat_message("assistant"):
79
  try:
80
- # Kirim seluruh riwayat percakapan ke model AI
81
  response = g4f.ChatCompletion.create(
82
- model="blackboxai", # Model yang digunakan
83
- messages=st.session_state.sessions[st.session_state.current_session], # Kirim semua riwayat chat
84
- provider=g4f.Provider.Blackbox # Provider Blackbox
85
  )
86
- st.markdown(response)
87
  except Exception as e:
88
- st.error(f"Terjadi error: {str(e)}")
 
89
 
90
- # Tambahkan respons AI ke riwayat chat session yang aktif
91
  st.session_state.sessions[st.session_state.current_session].append({"role": "assistant", "content": response})
92
- database[user_id] = st.session_state.sessions # Simpan ke database
93
- save_database(database) # Simpan ke file JSON
94
-
95
- # CSS untuk mengoptimalkan tampilan di perangkat mobile
96
- st.markdown(
97
- """
98
- <style>
99
- /* Mengurangi padding dan margin untuk menghemat ruang */
100
- .stChatInput {
101
- padding: 10px;
102
- margin: 0;
103
- }
104
- .stChatMessage {
105
- padding: 10px;
106
- margin: 5px 0;
107
- }
108
- /* Memastikan input chat tetap di bagian bawah layar */
109
- .stChatInputContainer {
110
- position: fixed;
111
- bottom: 0;
112
- left: 0;
113
- right: 0;
114
- background: white;
115
- z-index: 1000;
116
- padding: 10px;
117
- box-shadow: 0 -2px 5px rgba(0, 0, 0, 0.1);
118
- }
119
- /* Menyesuaikan ukuran font untuk layar kecil */
120
- .stMarkdown {
121
- font-size: 16px;
122
- }
123
- </style>
124
- """,
125
- unsafe_allow_html=True,
126
- )
 
4
  import os
5
  import uuid
6
 
7
+ # Konfigurasi halaman
8
+ st.set_page_config(page_title="ChatGPT Clone", layout="wide")
9
 
10
+ # CSS untuk styling mirip ChatGPT
11
+ st.markdown(
12
+ """
13
+ <style>
14
+ body {
15
+ background-color: #343541; /* Warna latar belakang ChatGPT */
16
+ color: white;
17
+ }
18
+ .stChatMessage {
19
+ border-radius: 10px;
20
+ padding: 12px;
21
+ margin: 8px 0;
22
+ max-width: 75%;
23
+ }
24
+ .user-message {
25
+ background-color: #0b93f6;
26
+ color: white;
27
+ align-self: flex-end;
28
+ }
29
+ .assistant-message {
30
+ background-color: #444654;
31
+ color: white;
32
+ align-self: flex-start;
33
+ }
34
+ .stChatInputContainer {
35
+ position: fixed;
36
+ bottom: 0;
37
+ left: 0;
38
+ right: 0;
39
+ background: #40414F;
40
+ z-index: 1000;
41
+ padding: 10px;
42
+ box-shadow: 0 -2px 5px rgba(0, 0, 0, 0.1);
43
+ }
44
+ .stButton button {
45
+ width: 100%;
46
+ background: #10a37f;
47
+ color: white;
48
+ border-radius: 5px;
49
+ padding: 8px;
50
+ font-size: 14px;
51
+ }
52
+ </style>
53
+ """,
54
+ unsafe_allow_html=True,
55
+ )
56
+
57
+ # Inisialisasi database
58
  DATABASE_FILE = "database.json"
59
 
 
60
  def load_database():
61
  if os.path.exists(DATABASE_FILE):
62
  try:
63
  with open(DATABASE_FILE, "r") as file:
64
  return json.load(file)
65
  except json.JSONDecodeError:
66
+ return {}
67
  return {}
68
 
 
69
  def save_database(database):
70
  with open(DATABASE_FILE, "w") as file:
71
  json.dump(database, file, indent=4)
72
 
 
73
  database = load_database()
74
 
75
+ # Generate atau ambil user_id
76
  if "user_id" not in st.session_state:
77
+ st.session_state.user_id = str(uuid.uuid4())
78
 
79
+ user_id = st.session_state.user_id
80
 
81
+ # Inisialisasi session state
82
  if "sessions" not in st.session_state:
83
+ st.session_state.sessions = database.get(user_id, {})
84
  if "current_session" not in st.session_state:
85
+ st.session_state.current_session = "Default Session"
86
  if st.session_state.current_session not in st.session_state.sessions:
87
+ st.session_state.sessions[st.session_state.current_session] = []
88
 
89
+ # Sidebar untuk sesi chat
90
  with st.sidebar:
91
+ st.header("πŸ“ ChatGPT Sessions")
92
 
93
+ session_list = list(st.session_state.sessions.keys())
94
+ selected_session = st.selectbox("Pilih sesi", session_list, index=session_list.index(st.session_state.current_session) if session_list else 0)
95
+
96
+ if selected_session:
97
+ st.session_state.current_session = selected_session
98
+
99
+ if st.button("πŸ†• Buat Sesi Baru"):
100
+ new_session_name = f"Session {len(session_list) + 1}"
101
+ st.session_state.sessions[new_session_name] = []
102
+ st.session_state.current_session = new_session_name
103
+ database[user_id] = st.session_state.sessions
104
+ save_database(database)
105
+ st.experimental_rerun()
106
+
107
+ if st.button("πŸ—‘ Hapus Sesi"):
108
+ if st.session_state.current_session in st.session_state.sessions:
109
  del st.session_state.sessions[st.session_state.current_session]
110
+ if st.session_state.sessions:
111
  st.session_state.current_session = list(st.session_state.sessions.keys())[0]
112
+ else:
113
  st.session_state.current_session = "Default Session"
114
  st.session_state.sessions[st.session_state.current_session] = []
115
+ database[user_id] = st.session_state.sessions
116
+ save_database(database)
117
+ st.experimental_rerun()
118
 
119
+ # Tampilkan riwayat percakapan
120
+ st.markdown(f"<h3>πŸ’¬ {st.session_state.current_session}</h3>", unsafe_allow_html=True)
121
 
 
122
  for message in st.session_state.sessions[st.session_state.current_session]:
123
+ role = message["role"]
124
+ content = message["content"]
125
+ with st.chat_message(role):
126
+ st.markdown(f"<div class='{role}-message'>{content}</div>", unsafe_allow_html=True)
127
 
128
  # Input pengguna
129
  if prompt := st.chat_input("Ketik pesan Anda di sini..."):
 
130
  st.session_state.sessions[st.session_state.current_session].append({"role": "user", "content": prompt})
131
  with st.chat_message("user"):
132
+ st.markdown(f"<div class='user-message'>{prompt}</div>", unsafe_allow_html=True)
133
 
134
+ # Generate respons AI dengan g4f (Blackbox AI)
135
  with st.chat_message("assistant"):
136
  try:
 
137
  response = g4f.ChatCompletion.create(
138
+ model="blackboxai",
139
+ messages=st.session_state.sessions[st.session_state.current_session],
140
+ provider=g4f.Provider.Blackbox
141
  )
142
+ st.markdown(f"<div class='assistant-message'>{response}</div>", unsafe_allow_html=True)
143
  except Exception as e:
144
+ response = f"⚠️ Terjadi error: {str(e)}"
145
+ st.markdown(f"<div class='assistant-message'>{response}</div>", unsafe_allow_html=True)
146
 
147
+ # Simpan respons AI ke riwayat chat
148
  st.session_state.sessions[st.session_state.current_session].append({"role": "assistant", "content": response})
149
+ database[user_id] = st.session_state.sessions
150
+ save_database(database)