FabioSantos commited on
Commit
93bc534
·
verified ·
1 Parent(s): d51a3f1

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +159 -159
app.py CHANGED
@@ -1,159 +1,159 @@
1
- import streamlit as st
2
- import pandas as pd
3
- import folium
4
- from streamlit_folium import st_folium
5
- from groq import Groq
6
- from streamlit_geolocation import streamlit_geolocation
7
- from streamlit_js_eval import streamlit_js_eval, get_geolocation
8
- import time
9
-
10
- client = Groq(
11
- api_key="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",
12
- )
13
-
14
- # Carrega o DataFrame de promoções
15
- promotions_df = pd.read_csv("promotions.csv")
16
-
17
- # Função para obter a localização do usuário
18
- def get_user_location():
19
- try:
20
- location = get_geolocation()
21
-
22
- time.sleep(9)
23
-
24
- latitude = location['coords']['latitude']
25
- longitude = location['coords']['longitude']
26
-
27
- return latitude, longitude
28
- except Exception as e:
29
- st.write(f"Aguarde um pouco...: {e}")
30
- return None, None
31
-
32
-
33
- # Função para encontrar promoções
34
- def find_promotions():
35
- promotions = []
36
- for index, row in promotions_df.iterrows():
37
- promotions.append(row)
38
- return promotions
39
-
40
-
41
- # Função para criar o mapa com folium
42
- def create_map(user_latitude, user_longitude, nearby_promotions):
43
- try:
44
- st.subheader("Mapa de Ofertas")
45
- # Cria o mapa centrado na localização do usuário
46
- promo_map = folium.Map(location=[user_latitude, user_longitude], zoom_start=12)
47
-
48
- # Adiciona um marcador para a localização do usuário (com uma cor diferente)
49
- folium.Marker(
50
- location=[user_latitude, user_longitude],
51
- popup="Sua Localização",
52
- icon=folium.Icon(color="red", icon="user"),
53
- ).add_to(promo_map)
54
-
55
- # Adiciona marcadores para promoções
56
- for _, promotion in nearby_promotions.iterrows():
57
- folium.Marker(
58
- location=[promotion["latitude"], promotion["longitude"]],
59
- popup=f"{promotion['product']} em {promotion['store']} ({promotion['discount']}% de desconto)",
60
- icon=folium.Icon(color="blue", icon="shopping-cart"),
61
- ).add_to(promo_map)
62
-
63
- return promo_map
64
- except Exception as e:
65
- st.error(f"Tente novamente carregar a página")
66
- return None
67
-
68
- # Função para o chat com o LLM
69
- def chat_with_llm(user_latitude, user_longitude, promotions):
70
- # Inicia o chat
71
- st.subheader("Chat com o Especialista em Promoções")
72
- user_input = st.text_input("Digite a sua pergunta sobre ofertas:")
73
-
74
- # Formata as promoções próximas para o prompt do LLM
75
- promotions_str = "\n".join(
76
- f"Promoção {i+1}: {row['product']} em {row['store']} cujo endereço é: {row['endereco']} ({row['discount']}% de desconto)"
77
- for i, row in enumerate(promotions)
78
- )
79
-
80
- # Processa a pergunta do usuário
81
- if user_input:
82
- # Cria o prompt para o LLM
83
- prompt = f"""
84
- Você é um especialista em recomendação de produtos baseado em promoções.Deve responder somente perguntas sobre ofertas e promoções.
85
- Promoções próximas:
86
- {promotions_str}
87
- Um usuário em ({user_latitude}, {user_longitude}) fez a seguinte pergunta:
88
- {user_input}
89
-
90
- Responda à pergunta do usuário de forma útil e informativa.
91
- """
92
-
93
- chat_completion = client.chat.completions.create(
94
- messages=[
95
- {"role": "system", "content": "Você é especialista em recomendação de produtos baseado em promoções"},
96
- {"role": "user", "content": prompt}
97
- ],
98
- model="llama3-8b-8192",
99
- )
100
-
101
- # Exibe a resposta do LLM
102
- st.write(chat_completion.choices[0].message.content)
103
-
104
- # Interface do Streamlit
105
- st.title("OfertasBot")
106
- st.write("O OfertasBot, tem o objetivo de se tornar o Waze das ofertas e promoções.")
107
- st.write("O seu novo assistente pessoal para economizar em grande estilo! Com a inteligência do nosso chatbot, você receberá recomendações exclusivas de promoções e descontos em produtos que realmente interessam a você. Basta conversar com o OfertasBot e deixar que ele encontre as melhores ofertas em tempo real, de acordo com suas preferências e localização. Nunca foi tão fácil fazer compras inteligentes! Colabore com a comunidade adicionado ofertas.")
108
- # Menu de opções
109
- option = st.sidebar.selectbox("Selecione uma opção", ["Mapa", "Adicionar Promoção", "Chat com OfertasBot"])
110
-
111
- # Executa a função correspondente à opção selecionada
112
- if option == "Mapa":
113
-
114
- # Obtém a localização do usuário
115
- user_latitude, user_longitude = get_user_location()
116
- # Cria o mapa interativo com Folium
117
- promo_map = create_map(float(user_latitude), float(user_longitude), promotions_df)
118
- # Exibe o mapa na interface Streamlit
119
- st_data = st_folium(promo_map, width=725)
120
-
121
- elif option == "Adicionar Promoção":
122
- #user_latitude, user_longitude = get_user_location()
123
- st.subheader("Adicionar Nova Promoção")
124
- product = st.text_input("Produto")
125
- store = st.text_input("Loja")
126
- discount = st.number_input("Desconto (%)", min_value=0, max_value=100)
127
-
128
- st.write("Clique no botão para obter a localização:")
129
- geolocator = streamlit_geolocation()
130
-
131
- promotion_latitude = geolocator['latitude']
132
- promotion_longitude = geolocator['longitude']
133
-
134
- endereco = st.text_input("Forneça o Endereço algum ponto de referência")
135
-
136
- # Adiciona a nova promoção ao banco de dados
137
- if st.button("Adicionar"):
138
- new_promotion = {
139
- "product": product,
140
- "store": store,
141
- "discount": discount,
142
- "latitude": float(promotion_latitude),
143
- "longitude": float(promotion_longitude),
144
- "endereco":endereco,
145
- }
146
- promotions_df = pd.concat([promotions_df, pd.DataFrame([new_promotion])], ignore_index=True)
147
- promotions_df.to_csv("promotions.csv", index=False)
148
- st.success("Promoção adicionada com sucesso!")
149
-
150
- elif option == "Chat com OfertasBot":
151
- # Obtém a localização do usuário
152
- #user_latitude, user_longitude = get_user_location()
153
- # Inicia o chat com o LLM
154
- user_latitude, user_longitude = get_user_location()
155
-
156
- chat_with_llm(float(user_latitude), float(user_longitude),find_promotions())
157
-
158
-
159
-
 
1
+ import streamlit as st
2
+ import pandas as pd
3
+ import folium
4
+ from streamlit_folium import st_folium
5
+ from groq import Groq
6
+ from streamlit_geolocation import streamlit_geolocation
7
+ from streamlit_js_eval import streamlit_js_eval, get_geolocation
8
+ import time
9
+
10
+ client = Groq(
11
+ api_key="",
12
+ )
13
+
14
+ # Carrega o DataFrame de promoções
15
+ promotions_df = pd.read_csv("promotions.csv")
16
+
17
+ # Função para obter a localização do usuário
18
+ def get_user_location():
19
+ try:
20
+ location = get_geolocation()
21
+
22
+ time.sleep(9)
23
+
24
+ latitude = location['coords']['latitude']
25
+ longitude = location['coords']['longitude']
26
+
27
+ return latitude, longitude
28
+ except Exception as e:
29
+ st.write(f"Aguarde um pouco...: {e}")
30
+ return None, None
31
+
32
+
33
+ # Função para encontrar promoções
34
+ def find_promotions():
35
+ promotions = []
36
+ for index, row in promotions_df.iterrows():
37
+ promotions.append(row)
38
+ return promotions
39
+
40
+
41
+ # Função para criar o mapa com folium
42
+ def create_map(user_latitude, user_longitude, nearby_promotions):
43
+ try:
44
+ st.subheader("Mapa de Ofertas")
45
+ # Cria o mapa centrado na localização do usuário
46
+ promo_map = folium.Map(location=[user_latitude, user_longitude], zoom_start=12)
47
+
48
+ # Adiciona um marcador para a localização do usuário (com uma cor diferente)
49
+ folium.Marker(
50
+ location=[user_latitude, user_longitude],
51
+ popup="Sua Localização",
52
+ icon=folium.Icon(color="red", icon="user"),
53
+ ).add_to(promo_map)
54
+
55
+ # Adiciona marcadores para promoções
56
+ for _, promotion in nearby_promotions.iterrows():
57
+ folium.Marker(
58
+ location=[promotion["latitude"], promotion["longitude"]],
59
+ popup=f"{promotion['product']} em {promotion['store']} ({promotion['discount']}% de desconto)",
60
+ icon=folium.Icon(color="blue", icon="shopping-cart"),
61
+ ).add_to(promo_map)
62
+
63
+ return promo_map
64
+ except Exception as e:
65
+ st.error(f"Tente novamente carregar a página")
66
+ return None
67
+
68
+ # Função para o chat com o LLM
69
+ def chat_with_llm(user_latitude, user_longitude, promotions):
70
+ # Inicia o chat
71
+ st.subheader("Chat com o Especialista em Promoções")
72
+ user_input = st.text_input("Digite a sua pergunta sobre ofertas:")
73
+
74
+ # Formata as promoções próximas para o prompt do LLM
75
+ promotions_str = "\n".join(
76
+ f"Promoção {i+1}: {row['product']} em {row['store']} cujo endereço é: {row['endereco']} ({row['discount']}% de desconto)"
77
+ for i, row in enumerate(promotions)
78
+ )
79
+
80
+ # Processa a pergunta do usuário
81
+ if user_input:
82
+ # Cria o prompt para o LLM
83
+ prompt = f"""
84
+ Você é um especialista em recomendação de produtos baseado em promoções.Deve responder somente perguntas sobre ofertas e promoções.
85
+ Promoções próximas:
86
+ {promotions_str}
87
+ Um usuário em ({user_latitude}, {user_longitude}) fez a seguinte pergunta:
88
+ {user_input}
89
+
90
+ Responda à pergunta do usuário de forma útil e informativa.
91
+ """
92
+
93
+ chat_completion = client.chat.completions.create(
94
+ messages=[
95
+ {"role": "system", "content": "Você é especialista em recomendação de produtos baseado em promoções"},
96
+ {"role": "user", "content": prompt}
97
+ ],
98
+ model="llama3-8b-8192",
99
+ )
100
+
101
+ # Exibe a resposta do LLM
102
+ st.write(chat_completion.choices[0].message.content)
103
+
104
+ # Interface do Streamlit
105
+ st.title("OfertasBot")
106
+ st.write("O OfertasBot, tem o objetivo de se tornar o Waze das ofertas e promoções.")
107
+ st.write("O seu novo assistente pessoal para economizar em grande estilo! Com a inteligência do nosso chatbot, você receberá recomendações exclusivas de promoções e descontos em produtos que realmente interessam a você. Basta conversar com o OfertasBot e deixar que ele encontre as melhores ofertas em tempo real, de acordo com suas preferências e localização. Nunca foi tão fácil fazer compras inteligentes! Colabore com a comunidade adicionado ofertas.")
108
+ # Menu de opções
109
+ option = st.sidebar.selectbox("Selecione uma opção", ["Mapa", "Adicionar Promoção", "Chat com OfertasBot"])
110
+
111
+ # Executa a função correspondente à opção selecionada
112
+ if option == "Mapa":
113
+
114
+ # Obtém a localização do usuário
115
+ user_latitude, user_longitude = get_user_location()
116
+ # Cria o mapa interativo com Folium
117
+ promo_map = create_map(float(user_latitude), float(user_longitude), promotions_df)
118
+ # Exibe o mapa na interface Streamlit
119
+ st_data = st_folium(promo_map, width=725)
120
+
121
+ elif option == "Adicionar Promoção":
122
+ #user_latitude, user_longitude = get_user_location()
123
+ st.subheader("Adicionar Nova Promoção")
124
+ product = st.text_input("Produto")
125
+ store = st.text_input("Loja")
126
+ discount = st.number_input("Desconto (%)", min_value=0, max_value=100)
127
+
128
+ st.write("Clique no botão para obter a localização:")
129
+ geolocator = streamlit_geolocation()
130
+
131
+ promotion_latitude = geolocator['latitude']
132
+ promotion_longitude = geolocator['longitude']
133
+
134
+ endereco = st.text_input("Forneça o Endereço algum ponto de referência")
135
+
136
+ # Adiciona a nova promoção ao banco de dados
137
+ if st.button("Adicionar"):
138
+ new_promotion = {
139
+ "product": product,
140
+ "store": store,
141
+ "discount": discount,
142
+ "latitude": float(promotion_latitude),
143
+ "longitude": float(promotion_longitude),
144
+ "endereco":endereco,
145
+ }
146
+ promotions_df = pd.concat([promotions_df, pd.DataFrame([new_promotion])], ignore_index=True)
147
+ promotions_df.to_csv("promotions.csv", index=False)
148
+ st.success("Promoção adicionada com sucesso!")
149
+
150
+ elif option == "Chat com OfertasBot":
151
+ # Obtém a localização do usuário
152
+ #user_latitude, user_longitude = get_user_location()
153
+ # Inicia o chat com o LLM
154
+ user_latitude, user_longitude = get_user_location()
155
+
156
+ chat_with_llm(float(user_latitude), float(user_longitude),find_promotions())
157
+
158
+
159
+