Sanya1202 commited on
Commit
fcf3b51
·
verified ·
1 Parent(s): 25dfc90

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +192 -42
app.py CHANGED
@@ -1,40 +1,189 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import streamlit as st
2
- from tabulate import tabulate
3
  from eventbrite_scrapper import Eventbrite
4
  from sentence_transformers import SentenceTransformer
5
  from sklearn.metrics.pairwise import cosine_similarity
6
  import numpy as np
 
 
 
7
 
8
- # Initialize Eventbrite API Client
9
- client = Eventbrite()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
 
11
- # Fetch events
12
- def fetch_events():
13
- return client.search_events.get_results(
14
- region="ca--los-angeles", # Can change region
15
- dt_start="2024-11-28",
16
- dt_end="2024-12-25",
17
- max_pages=4,
18
- )
19
 
20
- # Define Event RAG Pipeline
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
  class EventbriteRAGPipeline:
22
- def __init__(self, events, embedding_model='all-MiniLM-L6-v2'):
23
- self.events = events
 
 
 
 
 
 
 
 
24
  self.model = SentenceTransformer(embedding_model)
25
  self.event_embeddings = self._compute_embeddings()
26
 
27
- def _compute_embeddings(self):
28
- def event_to_text(event):
29
- return " ".join(filter(None, [event.name, event.short_description]))
 
 
 
 
 
 
 
 
 
 
 
30
  return self.model.encode([event_to_text(event) for event in self.events])
31
 
32
- def query_events(self, query, top_k=5):
33
  query_embedding = self.model.encode(query).reshape(1, -1)
34
  similarities = cosine_similarity(query_embedding, self.event_embeddings)[0]
35
  top_indices = similarities.argsort()[-top_k:][::-1]
36
  return [self.events[idx] for idx in top_indices]
37
 
 
38
  class EventEvaluator:
39
  def __init__(self, pipeline):
40
  self.pipeline = pipeline
@@ -50,38 +199,39 @@ class EventEvaluator:
50
  "Start Time": event.start_datetime,
51
  "Venue Address": event.primary_venue.address.address_1,
52
  "Venue Name": event.primary_venue.name,
 
53
  "Tickets URL": event.tickets_url,
54
  "Language": event.language,
55
- "Description": event.short_description,
56
  "Categories": [tag.text for tag in event.tags_categories],
57
  }
58
  results.append(result)
59
  return results
60
 
 
 
 
 
 
 
 
 
 
 
 
 
 
61
  # Streamlit UI
62
- st.title("Eventbrite Event Search")
63
- query = st.text_input("Enter event type (e.g., concerts, hackathons, conferences)")
64
- if st.button("Search"):
65
- sample_events = fetch_events()
66
- rag_pipeline = EventbriteRAGPipeline(sample_events)
67
- evaluator = EventEvaluator(rag_pipeline)
68
  results = evaluator.evaluate_query(query)
69
-
70
  if results:
71
- table = [
72
- [
73
- result["Event Name"],
74
- result["Online Event"],
75
- result["Start Time"],
76
- result["Venue Address"],
77
- result["Venue Name"],
78
- result["Description"],
79
- result["Tickets URL"],
80
- result["Language"],
81
- result["Categories"],
82
- ]
83
- for result in results
84
- ]
85
- st.text(tabulate(table, headers=["Event Name", "Online Event", "Start Time", "Venue Address", "Venue Name", "Description", "Tickets URL", "Language", "Categories"], tablefmt="grid"))
86
  else:
87
- st.write("No results found.")
 
 
1
+ # import streamlit as st
2
+ # from tabulate import tabulate
3
+ # from eventbrite_scrapper import Eventbrite
4
+ # from sentence_transformers import SentenceTransformer
5
+ # from sklearn.metrics.pairwise import cosine_similarity
6
+ # import numpy as np
7
+
8
+ # # Initialize Eventbrite API Client
9
+ # client = Eventbrite()
10
+
11
+ # # Fetch events
12
+ # def fetch_events():
13
+ # return client.search_events.get_results(
14
+ # region="ca--los-angeles", # Can change region
15
+ # dt_start="2024-11-28",
16
+ # dt_end="2024-12-25",
17
+ # max_pages=4,
18
+ # )
19
+
20
+ # # Define Event RAG Pipeline
21
+ # class EventbriteRAGPipeline:
22
+ # def __init__(self, events, embedding_model='all-MiniLM-L6-v2'):
23
+ # self.events = events
24
+ # self.model = SentenceTransformer(embedding_model)
25
+ # self.event_embeddings = self._compute_embeddings()
26
+
27
+ # def _compute_embeddings(self):
28
+ # def event_to_text(event):
29
+ # return " ".join(filter(None, [event.name, event.short_description]))
30
+ # return self.model.encode([event_to_text(event) for event in self.events])
31
+
32
+ # def query_events(self, query, top_k=5):
33
+ # query_embedding = self.model.encode(query).reshape(1, -1)
34
+ # similarities = cosine_similarity(query_embedding, self.event_embeddings)[0]
35
+ # top_indices = similarities.argsort()[-top_k:][::-1]
36
+ # return [self.events[idx] for idx in top_indices]
37
+
38
+ # class EventEvaluator:
39
+ # def __init__(self, pipeline):
40
+ # self.pipeline = pipeline
41
+
42
+ # def evaluate_query(self, query):
43
+ # """Evaluate a single query and return results."""
44
+ # top_events = self.pipeline.query_events(query)
45
+ # results = []
46
+ # for event in top_events:
47
+ # result = {
48
+ # "Event Name": event.name,
49
+ # "Online Event": event.is_online_event,
50
+ # "Start Time": event.start_datetime,
51
+ # "Venue Address": event.primary_venue.address.address_1,
52
+ # "Venue Name": event.primary_venue.name,
53
+ # "Tickets URL": event.tickets_url,
54
+ # "Language": event.language,
55
+ # "Description": event.short_description,
56
+ # "Categories": [tag.text for tag in event.tags_categories],
57
+ # }
58
+ # results.append(result)
59
+ # return results
60
+
61
+ # # Streamlit UI
62
+ # st.title("Eventbrite Event Search")
63
+ # query = st.text_input("Enter event type (e.g., concerts, hackathons, conferences)")
64
+ # if st.button("Search"):
65
+ # sample_events = fetch_events()
66
+ # rag_pipeline = EventbriteRAGPipeline(sample_events)
67
+ # evaluator = EventEvaluator(rag_pipeline)
68
+ # results = evaluator.evaluate_query(query)
69
+
70
+ # if results:
71
+ # table = [
72
+ # [
73
+ # result["Event Name"],
74
+ # result["Online Event"],
75
+ # result["Start Time"],
76
+ # result["Venue Address"],
77
+ # result["Venue Name"],
78
+ # result["Description"],
79
+ # result["Tickets URL"],
80
+ # result["Language"],
81
+ # result["Categories"],
82
+ # ]
83
+ # for result in results
84
+ # ]
85
+ # st.text(tabulate(table, headers=["Event Name", "Online Event", "Start Time", "Venue Address", "Venue Name", "Description", "Tickets URL", "Language", "Categories"], tablefmt="grid"))
86
+ # else:
87
+ # st.write("No results found.")
88
  import streamlit as st
89
+ import pandas as pd
90
  from eventbrite_scrapper import Eventbrite
91
  from sentence_transformers import SentenceTransformer
92
  from sklearn.metrics.pairwise import cosine_similarity
93
  import numpy as np
94
+ from datetime import datetime
95
+ from dataclasses import dataclass, field, replace
96
+ from typing import List, Any
97
 
98
+ # Dataclasses for event structure
99
+ @dataclass(frozen=True)
100
+ class EventAddress:
101
+ latitude: float = None
102
+ longitude: float = None
103
+ region: str = None
104
+ postal_code: str = None
105
+ address_1: str = None
106
+
107
+ @dataclass(frozen=True)
108
+ class EventVenue:
109
+ id: str = None
110
+ name: str = None
111
+ url: str = None
112
+ address: EventAddress = field(default_factory=lambda: EventAddress())
113
+
114
+ @dataclass(frozen=True)
115
+ class EventImage:
116
+ url: str = None
117
 
118
+ @dataclass(frozen=True)
119
+ class EventTag:
120
+ text: str = None
 
 
 
 
 
121
 
122
+ @dataclass(frozen=True)
123
+ class Event:
124
+ id: str = None
125
+ name: str = None
126
+ url: str = None
127
+ is_online_event: bool = False
128
+ short_description: str = None
129
+ published_datetime: datetime = None
130
+ start_datetime: datetime = None
131
+ end_datetime: datetime = None
132
+ timezone: str = None
133
+ hide_start_date: bool = False
134
+ hide_end_date: bool = False
135
+ parent_event_url: str = None
136
+ series_id: str = None
137
+ primary_venue: EventVenue = field(default_factory=lambda: EventVenue())
138
+ tickets_url: str = None
139
+ checkout_flow: str = None
140
+ language: str = None
141
+ image: EventImage = field(default_factory=lambda: EventImage())
142
+ tags_categories: tuple = field(default_factory=tuple)
143
+ tags_formats: tuple = field(default_factory=tuple)
144
+ tags_by_organizer: tuple = field(default_factory=tuple)
145
+
146
+ def __hash__(self):
147
+ return hash(self.id) if self.id else hash((self.name, self.is_online_event, self.start_datetime, self.primary_venue.name))
148
+
149
+ # Event Retrieval Pipeline
150
  class EventbriteRAGPipeline:
151
+ def __init__(self, events: List[Event], embedding_model: str = 'all-MiniLM-L6-v2'):
152
+ self.events = [
153
+ replace(
154
+ event,
155
+ tags_categories=tuple(event.tags_categories),
156
+ tags_formats=tuple(event.tags_formats),
157
+ tags_by_organizer=tuple(event.tags_by_organizer),
158
+ )
159
+ for event in events
160
+ ]
161
  self.model = SentenceTransformer(embedding_model)
162
  self.event_embeddings = self._compute_embeddings()
163
 
164
+ def _compute_embeddings(self) -> List[np.ndarray]:
165
+ def event_to_text(event: Event) -> str:
166
+ text_parts = [
167
+ event.name or '',
168
+ event.short_description or '',
169
+ ' '.join(tag.text for tag in event.tags_categories),
170
+ ' '.join(tag.text for tag in event.tags_formats),
171
+ ' '.join(tag.text for tag in event.tags_by_organizer),
172
+ event.primary_venue.name or '',
173
+ event.primary_venue.address.region or '',
174
+ event.language or ''
175
+ ]
176
+ return ' '.join(filter(bool, text_parts))
177
+
178
  return self.model.encode([event_to_text(event) for event in self.events])
179
 
180
+ def query_events(self, query: str, top_k: int = 5) -> List[Event]:
181
  query_embedding = self.model.encode(query).reshape(1, -1)
182
  similarities = cosine_similarity(query_embedding, self.event_embeddings)[0]
183
  top_indices = similarities.argsort()[-top_k:][::-1]
184
  return [self.events[idx] for idx in top_indices]
185
 
186
+ # Event Evaluator
187
  class EventEvaluator:
188
  def __init__(self, pipeline):
189
  self.pipeline = pipeline
 
199
  "Start Time": event.start_datetime,
200
  "Venue Address": event.primary_venue.address.address_1,
201
  "Venue Name": event.primary_venue.name,
202
+ "Description": event.short_description,
203
  "Tickets URL": event.tickets_url,
204
  "Language": event.language,
 
205
  "Categories": [tag.text for tag in event.tags_categories],
206
  }
207
  results.append(result)
208
  return results
209
 
210
+ # Fetch events from Eventbrite API
211
+ client = Eventbrite()
212
+ events = client.search_events.get_results(
213
+ region="ca--los-angeles",
214
+ dt_start="2024-11-28",
215
+ dt_end="2024-12-25",
216
+ max_pages=4,
217
+ )
218
+
219
+ # Initialize pipeline and evaluator
220
+ rag_pipeline = EventbriteRAGPipeline(events)
221
+ evaluator = EventEvaluator(rag_pipeline)
222
+
223
  # Streamlit UI
224
+ st.title("🎟️ Event Search App")
225
+
226
+ st.write("Find events based on your interests!")
227
+
228
+ query = st.text_input("🔎 Enter your search query:")
229
+ if query:
230
  results = evaluator.evaluate_query(query)
231
+
232
  if results:
233
+ df = pd.DataFrame(results)
234
+ st.dataframe(df) # Display results as a formatted table
 
 
 
 
 
 
 
 
 
 
 
 
 
235
  else:
236
+ st.warning("No results found.")
237
+