Spaces:
Sleeping
Sleeping
File size: 5,412 Bytes
d4260f6 cd0ca28 962cff4 d4260f6 2eba369 d4260f6 2eba369 d4260f6 2eba369 d4260f6 2eba369 d4260f6 54c93a6 e8f7a5c 54c93a6 e8f7a5c 54c93a6 2eba369 d4260f6 2eba369 d4260f6 1685655 2eba369 d4260f6 2eba369 d4260f6 e8f7a5c d4260f6 2eba369 46c2da4 2eba369 46c2da4 54c93a6 e8f7a5c 1685655 d4260f6 e8f7a5c 045fe83 2eba369 d4260f6 962cff4 982505b 962cff4 4f1d124 962cff4 9b2095c 962cff4 a43dee6 9b2095c 196e543 a0556d4 354048e |
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 |
import os
import pandas as pd
import openai
from google.oauth2 import service_account
from googleapiclient.discovery import build
from googleapiclient.http import MediaIoBaseDownload
import io
import json
# Função para carregar e testar a leitura do arquivo CSV
def load_and_test_csv():
try:
# Carrega as credenciais a partir da variável de ambiente do Hugging Face Secrets
cred_json = os.getenv("GOOGLE_APPLICATION_CREDENTIALS")
# Utiliza google.oauth2.service_account para carregar as credenciais corretamente
creds = service_account.Credentials.from_service_account_info(json.loads(cred_json))
# Autentica com o Google API
service = build('drive', 'v3', credentials=creds)
# ID do arquivo no Google Drive (substituído pelo ID real fornecido)
file_id = '1lNadnIVnDs9Oex5ckNXj1-56nvlEea6p'
# Solicita o download do arquivo CSV
request = service.files().get_media(fileId=file_id)
fh = io.FileIO('imoveis_ficticios.csv', 'wb')
downloader = MediaIoBaseDownload(fh, request)
done = False
while done is False:
status, done = downloader.next_chunk()
# Carrega o CSV usando pandas
df = pd.read_csv('imoveis_ficticios.csv')
# Verifica se as colunas necessárias estão presentes
required_columns = ['nome', 'bairro', 'valor', 'aluguel', 'rentabilidade', 'status']
missing_columns = [col for col in required_columns if col not in df.columns]
if missing_columns:
# Retorna um erro claro sem tentar abrir esse erro como arquivo
return f"Erro: Colunas ausentes no CSV: {', '.join(missing_columns)}"
return df
except Exception as e:
return f"Erro ao acessar o arquivo CSV: {e}"
# Função para buscar imóveis na planilha
def buscar_imoveis(bairro=None, status=None, preco_maximo=2000000):
try:
# Carrega os dados da planilha
df = load_and_test_csv()
if isinstance(df, str):
return df # Se houve erro na leitura, retorna o erro
# Verifica se a coluna 'valor' existe antes de fazer qualquer operação
if 'valor' not in df.columns:
return "Erro: A coluna 'valor' não foi encontrada no arquivo CSV."
# Converte a coluna 'valor' para numérico, caso seja necessário
df['valor'] = pd.to_numeric(df['valor'], errors='coerce')
# Filtra os imóveis com base nos critérios fornecidos
if bairro:
df = df[df['bairro'].str.contains(bairro, case=False, na=False)]
if status:
df = df[df['status'].isin(status)] # Filtra com base nos status selecionados
# Filtra pelo preço máximo
df = df[df['valor'] <= preco_maximo] # Filtra pelo preço máximo
# Exibe os resultados
if df.empty:
return "Nenhum imóvel encontrado com os critérios informados."
else:
return df[['nome', 'bairro', 'valor', 'aluguel', 'rentabilidade', 'status']].head(5) # Exibe os primeiros 5 resultados
except Exception as e:
return f"Erro na busca: {e}"
# Função para interagir com o modelo GPT
def conversacao_openai(prompt):
openai.api_key = os.getenv("OPENAI_API_KEY")
try:
response = openai.Completion.create(
model="text-davinci-003", # Ou o modelo GPT adequado
prompt=prompt,
max_tokens=150
)
return response.choices[0].text.strip()
except Exception as e:
return f"Erro ao interagir com o OpenAI: {e}"
# Função principal de interação
def interagir_com_usuario():
print("Olá! Eu sou seu assistente para ajudar na busca de imóveis. Como posso te ajudar hoje?")
while True:
user_input = input("Você: ")
# Se o usuário quiser parar a conversa
if user_input.lower() in ['sair', 'tchau', 'adeus']:
print("Até logo!")
break
# Definir parâmetros para a busca com base na entrada do usuário
bairro = None
status = None
preco_maximo = 2000000 # Preço padrão, pode ser alterado pela interação
# Aqui, podemos usar o OpenAI para interpretar as intenções do usuário.
prompt = f"Usuário quer buscar imóveis com as seguintes palavras: {user_input}. Interpretar isso como bairros, status e preços de imóveis."
gpt_response = conversacao_openai(prompt)
print(f"Assistente: {gpt_response}")
# Parse do GPT para obter os parâmetros de busca (simplificado)
if "bairro" in gpt_response:
bairro = gpt_response.split("bairro:")[1].strip().split()[0] # Apenas para ilustrar, ajustar conforme necessário
if "status" in gpt_response:
status = gpt_response.split("status:")[1].strip().split()[0] # Ajuste conforme resposta do GPT
if "preço" in gpt_response:
preco_maximo = int(gpt_response.split("preço:")[1].strip().split()[0]) # Ajuste conforme resposta do GPT
# Realizar a busca com base na interpretação do GPT
resultado = buscar_imoveis(bairro=bairro, status=status, preco_maximo=preco_maximo)
print(f"Assistente: {resultado}")
if __name__ == "__main__":
interagir_com_usuario()
|