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()