prototipo-2-agente / interface /auxiliary_functions.py
Pecximenes's picture
Adding feedback's and login's features
0746d2c
import re
import requests
from bs4 import BeautifulSoup
from urllib.parse import urlparse, unquote
import streamlit as st
from openai import OpenAI
from qdrant_client import QdrantClient
import edgedb
import os
def extract_content(text, tag):
"""Extrai conteúdo de um texto com base na tag fornecida."""
pattern = rf'<{tag}>(.*?)</{tag}>'
match = re.search(pattern, text, re.DOTALL)
return match.group(1).strip() if match else None
def fetch_webpage_content(url):
"""Obtém o conteúdo HTML de uma URL e retorna o conteúdo principal, desativando links específicos, mas mantendo os links originais para sugestões."""
try:
response = requests.get(url)
response.raise_for_status()
# Usando BeautifulSoup para processar o HTML
soup = BeautifulSoup(response.text, 'html.parser')
# Localiza o conteúdo principal pelo ID 'main'
main_content = soup.find('div', id='main')
if main_content:
# Armazenar os links originais para sugestões
original_links = [link['href'] for link in main_content.find_all('a', class_='govbr-card-content')]
# Desativar links com a classe "govbr-card-content" (apenas visualmente)
for link in main_content.find_all('a', class_='govbr-card-content'):
link['href'] = 'javascript:void(0);' # Impede a navegação
link['style'] = 'pointer-events: none; cursor: not-allowed;' # Estilo para desativar visualmente
# Remover elementos específicos (exemplo: div com a classe 'outstanding-header')
for unwanted_element in main_content.find_all('div', class_='outstanding-header'):
unwanted_element.decompose() # Remove o elemento do DOM
# Limpa o conteúdo do <body> e insere o conteúdo principal
body_tag = soup.find('body')
if body_tag:
body_tag.clear()
body_tag.append(main_content)
# Retorna o conteúdo modificado e os links originais
return str(soup), original_links
# Mensagem de erro caso não encontre o conteúdo principal
return "<html><body><p>Could not find main content on the page.</p></body></html>", []
except requests.RequestException as e:
# Retorna uma mensagem de erro em caso de falha na requisição
return f"<html><body><p>Error fetching the webpage: {str(e)}</p></body></html>", []
def extract_links(html_content):
"""Extrai todos os links (URLs) de um conteúdo HTML."""
soup = BeautifulSoup(html_content, 'html.parser')
return [a_tag['href'] for a_tag in soup.find_all('a', href=True)]
def url_to_suggestion(url):
"""Converte uma URL longa em uma sugestão amigável e natural."""
path = unquote(urlparse(url).path).strip('/').split('/')
# Garantir que há pelo menos duas partes significativas no caminho
if len(path) > 2:
# Remover hífens e capitalizar cada palavra
section = path[-2].replace('-', ' ').title()
subsection = path[-1].replace('-', ' ').title()
# Formatar a sugestão de forma mais natural
return f"Acesso à seção '{section}' sobre '{subsection}'"
return None
@st.cache_resource
def connect_to_services():
oa_client = OpenAI(
api_key=os.environ.get("OPENAI_API_KEY")
)
qdrant_client = QdrantClient(
url=os.environ.get("QDRANT_URL"),
api_key=os.environ.get("QDRANT_KEY")
)
edgedb_client = edgedb.create_client()
return oa_client, qdrant_client, edgedb_client