File size: 6,459 Bytes
4227970 59bfaac fa92574 2ee5564 fa92574 509b02d fa92574 2ee5564 fa92574 4227970 fa92574 2ee5564 fa92574 2ee5564 9dd3d1d 2ee5564 300e083 4227970 2ee5564 4227970 4b02bb7 4227970 2b28b66 4b02bb7 2ee5564 9dd3d1d 2ee5564 4b02bb7 f54757c 2251b3a 2ee5564 a36d2f3 f54757c 48344ea f54757c 2ee5564 a36d2f3 f54757c b6dc07e 2ee5564 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 |
import os
import streamlit as st
import json
import requests
import re
from bs4 import BeautifulSoup
from streamlit_option_menu import option_menu
from gemini_utility import (load_gemini_pro, gemini_pro_vision_responce)
from PIL import Image
# Ruta para guardar el System Prompt
SYSTEM_PROMPT_FILE = "system_prompt.json"
# Funci贸n para cargar el System Prompt desde el archivo
def load_system_prompt():
if os.path.exists(SYSTEM_PROMPT_FILE):
with open(SYSTEM_PROMPT_FILE, 'r') as f:
return json.load(f).get("system_prompt", "")
return ""
# Funci贸n para guardar el System Prompt en el archivo
def save_system_prompt(system_prompt):
with open(SYSTEM_PROMPT_FILE, 'w') as f:
json.dump({"system_prompt": system_prompt}, f)
# Setting the page config
st.set_page_config(
page_title="GnosticDev AI",
page_icon="馃",
layout="centered",
initial_sidebar_state="expanded",
)
# Cargar el System Prompt guardado
if "system_prompt" not in st.session_state:
st.session_state.system_prompt = load_system_prompt()
# Funci贸n para guardar el historial en cookies
def save_chat_history(history):
serializable_history = []
for message in history:
serializable_history.append({
"role": message.role,
"text": message.parts[0].text
})
st.session_state.cookie_chat_history = json.dumps(serializable_history)
# Funci贸n para cargar el historial desde cookies
def load_chat_history():
if 'cookie_chat_history' in st.session_state:
try:
history = json.loads(st.session_state.cookie_chat_history)
model = load_gemini_pro()
chat = model.start_chat(history=[])
# NO enviar el system_prompt al inicio aqu铆
for message in history:
if message["role"] != "model":
chat.send_message(message["text"])
return chat
except Exception as e:
st.error(f"Error cargando el historial: {e}")
return None
with st.sidebar:
selected = option_menu(
"GD AI",
["System Prompt", "Chatbot", "Image Captioning"],
menu_icon="robot",
icons=['gear', 'chat-dots-fill', 'image-fill'],
default_index=0
)
if st.button("Borrar Historial"):
if 'cookie_chat_history' in st.session_state:
del st.session_state.cookie_chat_history
if 'chat_session' in st.session_state:
del st.session_state.chat_session
st.success("Historial borrado!")
def translate_role_to_streamlit(user_role):
if user_role == "model":
return "assistant"
else:
return user_role
def extract_urls(text):
url_pattern = r"(https?://\S+)"
urls = re.findall(url_pattern, text)
return urls
def fetch_url_content(url):
try:
response = requests.get(url, timeout=10) # Agregar timeout para evitar bloqueos
response.raise_for_status()
return response.text
except requests.exceptions.RequestException as e:
return f"Error al acceder a la URL '{url}': {e}"
def process_url_content(content):
try:
soup = BeautifulSoup(content, "html.parser")
# Extrae solo el texto del cuerpo principal, ignorando etiquetas de scripts y estilos
text = soup.get_text(" ", strip=True)
return text
except Exception as e:
return f"Error al procesar el contenido HTML: {e}"
def process_urls_in_prompt(prompt):
urls = extract_urls(prompt)
new_prompt = prompt
for url in urls:
content = fetch_url_content(url)
if content.startswith("Error"): # Gestion de errores al obtener el contenido de la URL
new_prompt = new_prompt.replace(url, content)
else:
processed_content = process_url_content(content)
new_prompt = new_prompt.replace(url, processed_content)
return new_prompt
if selected == "System Prompt":
st.title("Configuraci贸n del System Prompt")
new_system_prompt = st.text_area(
"Ingresa las instrucciones para el AI (System Prompt), incluyendo URLs",
value=st.session_state.system_prompt,
height=300,
help="Escribe aqu铆 las instrucciones que definir谩n el comportamiento del AI. Puedes incluir URLs."
)
if st.button("Guardar System Prompt"):
processed_prompt = process_urls_in_prompt(new_system_prompt)
st.session_state.system_prompt = processed_prompt
save_system_prompt(processed_prompt) # Guardar en archivo JSON
if "chat_session" in st.session_state:
del st.session_state.chat_session
st.success("System Prompt actualizado con 茅xito!")
if st.session_state.system_prompt:
st.markdown("### System Prompt Actual:")
st.info(st.session_state.system_prompt)
elif selected == "Chatbot":
model = load_gemini_pro()
if "chat_session" not in st.session_state:
loaded_chat = load_chat_history()
if loaded_chat:
st.session_state.chat_session = loaded_chat
else:
# Iniciar el chat con un saludo o mensaje de bienvenida simple
st.session_state.chat_session = model.start_chat(history=[])
st.chat_message("assistant").markdown("隆Hola! 驴En qu茅 puedo ayudarte hoy?")
# Solo se configura el behavior con el System Prompt, pero no se muestra en el inicio
st.title("Gnosticdev Chatbot")
user_prompt = st.chat_input("Preguntame algo...")
if user_prompt:
processed_user_prompt = process_urls_in_prompt(user_prompt)
st.chat_message("user").markdown(processed_user_prompt)
gemini_response = st.session_state.chat_session.send_message(processed_user_prompt)
with st.chat_message("assistant"):
st.markdown(gemini_response.text)
save_chat_history(st.session_state.chat_session.history)
elif selected == "Image Captioning":
st.title("Image Caption Generation馃摳")
upload_image = st.file_uploader("Upload an image...", type=["jpg", "jpeg", "png"])
if upload_image and st.button("Generate"):
image = Image.open(upload_image)
col1, col2 = st.columns(2)
with col1:
st.image(image, caption="Uploaded Image", use_column_width=True)
default_prompt = "Write a caption for this image"
caption = gemini_pro_vision_responce(default_prompt, image)
with col2:
st.info(caption)
|