devbernie commited on
Commit
0caca7a
·
verified ·
1 Parent(s): 3c29c97

Update app

Browse files
Files changed (1) hide show
  1. app.py +58 -52
app.py CHANGED
@@ -1,81 +1,87 @@
1
  import streamlit as st
2
- import base64
3
  import io
4
- import google.genai as genai # Import SDK của google-genai
 
 
 
5
 
6
- # Cấu hình API key model cho Gemini
7
- API_KEY = "AIzaSyAD3PeWI8ie3LNDaMqoIoIf6HyfDT6Bfgs"
8
- MODEL_ID = "gemini-2.0-pro-exp-02-05"
9
- genai.configure(api_key=API_KEY)
 
 
 
 
10
 
11
  st.title("Gemini 2.0 Pro Chatbot")
12
- st.write("Chào mừng đến với chatbot Gemini sử dụng google-genai SDK!")
13
 
14
- # Nhập nội dung chat
15
- user_prompt = st.text_input("Nhập nội dung chat:")
16
 
17
- # File uploader hỗ trợ nhiều loại file: hình ảnh, video, audio, PDF
18
  uploaded_files = st.file_uploader(
19
  "Tải lên file (hỗ trợ: jpg, jpeg, png, mp4, mp3, wav, pdf):",
20
  type=["jpg", "jpeg", "png", "mp4", "mp3", "wav", "pdf"],
21
  accept_multiple_files=True
22
  )
23
 
24
- attachments = []
 
 
 
 
25
 
26
  if uploaded_files:
27
  for file in uploaded_files:
28
- file_name = file.name
29
- file_ext = file_name.split('.')[-1].lower()
30
  file_bytes = file.read()
31
-
32
- # Với file PDF, ta có thể trích xuất nội dung text
33
  if file_ext == "pdf":
 
34
  try:
35
- import PyPDF2
36
  pdf_reader = PyPDF2.PdfReader(io.BytesIO(file_bytes))
37
  pdf_text = ""
38
  for page in pdf_reader.pages:
39
- pdf_text += page.extract_text() or ""
40
- attachments.append({
41
- "type": "pdf",
42
- "data": pdf_text
43
- })
 
 
44
  except Exception as e:
45
- st.error(f"Lỗi khi đọc PDF {file_name}: {e}")
46
  else:
47
- # Các file khác: chuyển sang base64 (giả định API hỗ trợ dạng này)
48
- encoded_file = base64.b64encode(file_bytes).decode('utf-8')
49
- if file_ext in ["jpg", "jpeg", "png"]:
50
- attachments.append({
51
- "type": "image",
52
- "data": encoded_file
53
- })
54
  elif file_ext == "mp4":
55
- attachments.append({
56
- "type": "video",
57
- "data": encoded_file
58
- })
59
- elif file_ext in ["mp3", "wav"]:
60
- attachments.append({
61
- "type": "audio",
62
- "data": encoded_file
63
- })
 
64
 
65
- # Nút gửi yêu cầu
66
  if st.button("Gửi"):
67
- if not user_prompt and not attachments:
68
  st.warning("Vui lòng nhập nội dung chat hoặc upload file.")
69
  else:
70
- st.spinner("Đang xử lý yêu cầu ...")
71
- try:
72
- # Gọi API của Gemini với prompt các attachments
73
- response = genai.chat(
74
- prompt=user_prompt,
75
- attachments=attachments, # Nếu không có file, gửi rỗng list
76
- model=MODEL_ID
77
- )
78
- st.write("**Phản hồi từ Gemini:**")
79
- st.write(response)
80
- except Exception as ex:
81
- st.error(f"Có lỗi xảy ra: {ex}")
 
1
  import streamlit as st
 
2
  import io
3
+ import PyPDF2
4
+ from google import genai
5
+ from google.genai import types
6
+ import os
7
 
8
+ # Sử dụng biến môi trường GOOGLE_API_KEY đã được thiết lập
9
+ client = genai.Client()
10
+
11
+ api_key = os.getenv('GOOGLE_API_KEY')
12
+ if not api_key:
13
+ st.error("Biến môi trường GOOGLE_API_KEY chưa được thiết lập!")
14
+ else:
15
+ st.write("API key đã được cấu hình.")
16
 
17
  st.title("Gemini 2.0 Pro Chatbot")
18
+ st.write("Chatbot sử dụng Google Gen AI SDK (Gemini Developer API)")
19
 
20
+ # Nhập nội dung chat từ người dùng
21
+ user_text = st.text_input("Nhập nội dung chat:")
22
 
23
+ # Cho phép upload file với các định dạng: jpg, jpeg, png, mp4, mp3, wav, pdf
24
  uploaded_files = st.file_uploader(
25
  "Tải lên file (hỗ trợ: jpg, jpeg, png, mp4, mp3, wav, pdf):",
26
  type=["jpg", "jpeg", "png", "mp4", "mp3", "wav", "pdf"],
27
  accept_multiple_files=True
28
  )
29
 
30
+ # Tạo danh sách contents để gửi lên model
31
+ contents = []
32
+
33
+ if user_text:
34
+ contents.append(user_text)
35
 
36
  if uploaded_files:
37
  for file in uploaded_files:
 
 
38
  file_bytes = file.read()
39
+ file_ext = file.name.split('.')[-1].lower()
 
40
  if file_ext == "pdf":
41
+ # Trích xuất nội dung văn bản từ PDF
42
  try:
 
43
  pdf_reader = PyPDF2.PdfReader(io.BytesIO(file_bytes))
44
  pdf_text = ""
45
  for page in pdf_reader.pages:
46
+ page_text = page.extract_text()
47
+ if page_text:
48
+ pdf_text += page_text + "\n"
49
+ if pdf_text:
50
+ contents.append(pdf_text)
51
+ else:
52
+ st.warning(f"Không thể trích xuất nội dung từ {file.name}.")
53
  except Exception as e:
54
+ st.error(f"Lỗi khi xử PDF {file.name}: {e}")
55
  else:
56
+ # Xác định mime type cho các file khác
57
+ if file_ext in ["jpg", "jpeg"]:
58
+ mime_type = "image/jpeg"
59
+ elif file_ext == "png":
60
+ mime_type = "image/png"
 
 
61
  elif file_ext == "mp4":
62
+ mime_type = "video/mp4"
63
+ elif file_ext == "mp3":
64
+ mime_type = "audio/mpeg"
65
+ elif file_ext == "wav":
66
+ mime_type = "audio/wav"
67
+ else:
68
+ mime_type = "application/octet-stream"
69
+ # Tạo Part từ bytes
70
+ part = types.Part.from_bytes(data=file_bytes, mime_type=mime_type)
71
+ contents.append(part)
72
 
 
73
  if st.button("Gửi"):
74
+ if not contents:
75
  st.warning("Vui lòng nhập nội dung chat hoặc upload file.")
76
  else:
77
+ with st.spinner("Đang xử lý yêu cầu..."):
78
+ try:
79
+ # Gọi API generate_content theo cách mẫu trong tài liệu
80
+ response = client.models.generate_content(
81
+ model='gemini-2.0-pro-exp-02-05',
82
+ contents=contents
83
+ )
84
+ st.write("**Phản hồi từ Gemini:**")
85
+ st.write(response.text)
86
+ except Exception as e:
87
+ st.error(f"Có lỗi xảy ra: {e}")