0ndr3 commited on
Commit
24cc6f4
Β·
verified Β·
1 Parent(s): 137bf8a

Upload 3 files

Browse files
Files changed (3) hide show
  1. app.py +122 -0
  2. data/big_prize_data.json +1082 -0
  3. requirements.txt +11 -0
app.py ADDED
@@ -0,0 +1,122 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import re
3
+ import json
4
+ from fastapi import FastAPI, Request
5
+ from pydantic import BaseModel
6
+ from langchain_community.vectorstores import Chroma
7
+ from langchain_community.embeddings import HuggingFaceEmbeddings
8
+ from langchain_groq import ChatGroq
9
+ from langchain_core.documents import Document
10
+ from langchain_core.prompts import PromptTemplate
11
+ from langchain_core.output_parsers import StrOutputParser
12
+ from langchain_core.runnables import RunnableMap, RunnableLambda, RunnableSequence
13
+ from ratelimit import limits, sleep_and_retry
14
+
15
+ # === Constants ===
16
+ DATA_FILE = "data/big_prize_data.json"
17
+ CHROMA_PATH = "chroma_db"
18
+
19
+ # === Load Data and Build Chroma DB ===
20
+ def build_chroma_db():
21
+ with open(DATA_FILE, "r") as f:
22
+ raw_data = json.load(f)
23
+
24
+ docs = []
25
+ for d in raw_data:
26
+ content = (
27
+ f"Raffle {d['raffle']} | Prize: {d['prize']} | "
28
+ f"Value: {d['value']} | Ticket: {d['approx_tickets_sold']} | "
29
+ f"Percent path: {d['percent_path']}% | Ticket Price: Β£{d['ticket_price']}"
30
+ )
31
+ metadata = {
32
+ "raffle": d["raffle"],
33
+ "prize": d["prize"],
34
+ "value": float(d["value"]),
35
+ "tickets_sold": d["approx_tickets_sold"],
36
+ "percent_path": float(d["percent_path"]),
37
+ "ticket_price": float(d.get("ticket_price", 0))
38
+ }
39
+ docs.append(Document(page_content=content, metadata=metadata))
40
+
41
+ embedding_model = HuggingFaceEmbeddings(model_name="all-MiniLM-L6-v2")
42
+ return Chroma.from_documents(docs, embedding_model)
43
+
44
+ db = build_chroma_db()
45
+
46
+ # === LLM and Prompt ===
47
+ llm = ChatGroq(
48
+ api_key=os.environ.get("GROQ_API_KEY", "sk-..."),
49
+ model="llama3-8b-8192"
50
+ )
51
+
52
+ question_prompt = PromptTemplate(
53
+ input_variables=["context", "question"],
54
+ template="""
55
+ You are a calm, professional assistant specialized in analyzing instant-win raffles.
56
+ You base your answers on structured historical data like:
57
+ "Raffle 75 | Prize: BMW M3 | Value: 45000.0 | Ticket: 219784 | Percent path: 81.62% | Ticket Price: Β£1.99"
58
+
59
+ If the user asks for a list of prizes above a certain amount, compare the numeric "Value" field.
60
+ Only include entries that clearly exceed the requested threshold. Do not say these are the only ones unless you're sure.
61
+ Always respond clearly and politely.
62
+
63
+ Context:
64
+ {context}
65
+
66
+ Now, based on this data, answer:
67
+ {question}
68
+ """
69
+ )
70
+
71
+ # === Extraction and Filtering ===
72
+ def extract_threshold(input_data) -> float | None:
73
+ question = input_data.get("question", "") if isinstance(input_data, dict) else str(input_data)
74
+ matches = re.findall(r"(?:above|over|more than|greater than)\s*Β£?([\d,]+)", question, re.IGNORECASE)
75
+ for match in matches:
76
+ try:
77
+ return float(match.replace(",", ""))
78
+ except ValueError:
79
+ continue
80
+ return None
81
+
82
+ def filter_docs(inputs):
83
+ docs = inputs["documents"]
84
+ question = inputs["question"]
85
+ threshold = extract_threshold(question)
86
+ if threshold is None:
87
+ return inputs
88
+ filtered = [doc for doc in docs if float(doc.metadata.get("value", 0)) > threshold]
89
+ return {"documents": filtered, "question": question}
90
+
91
+ retrieval_chain = (
92
+ RunnableMap({
93
+ "documents": db.as_retriever(search_type="similarity", k=300),
94
+ "question": lambda x: x["question"]
95
+ })
96
+ | RunnableLambda(filter_docs)
97
+ | (lambda d: {
98
+ "context": "\n".join(doc.page_content for doc in d["documents"]),
99
+ "question": d["question"]
100
+ })
101
+ | question_prompt
102
+ | llm
103
+ | StrOutputParser()
104
+ )
105
+
106
+ # === FastAPI App ===
107
+ app = FastAPI()
108
+
109
+ class QuestionRequest(BaseModel):
110
+ question: str
111
+
112
+ @app.get("/")
113
+ def read_root():
114
+ return {"message": "Raffle Analysis Assistant is running!"}
115
+
116
+ @app.post("/ask")
117
+ def ask_question(payload: QuestionRequest):
118
+ try:
119
+ result = retrieval_chain.invoke(payload.question)
120
+ return {"response": result}
121
+ except Exception as e:
122
+ return {"error": str(e)}
data/big_prize_data.json ADDED
@@ -0,0 +1,1082 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "raffle": 55,
4
+ "prize": "\u00a35,000 Cash",
5
+ "value": 5000.0,
6
+ "ticket_price": 1.99,
7
+ "win_sequence": 548,
8
+ "percent_path": 2.68,
9
+ "approx_tickets_sold": 7615,
10
+ "approx_value_at_win": 15154.11
11
+ },
12
+ {
13
+ "raffle": 57,
14
+ "prize": "\u00a35,000 Cash",
15
+ "value": 5000.0,
16
+ "ticket_price": 1.5,
17
+ "win_sequence": 8393,
18
+ "percent_path": 63.5,
19
+ "approx_tickets_sold": 91846,
20
+ "approx_value_at_win": 137768.26
21
+ },
22
+ {
23
+ "raffle": 64,
24
+ "prize": "\u00a35,000 Cash",
25
+ "value": 5000.0,
26
+ "ticket_price": 0.6,
27
+ "win_sequence": 20604,
28
+ "percent_path": 90.83,
29
+ "approx_tickets_sold": 336057,
30
+ "approx_value_at_win": 201634.16
31
+ },
32
+ {
33
+ "raffle": 62,
34
+ "prize": "\u00a35,000 Cash",
35
+ "value": 5000.0,
36
+ "ticket_price": 0.6,
37
+ "win_sequence": 6368,
38
+ "percent_path": 27.13,
39
+ "approx_tickets_sold": 102424,
40
+ "approx_value_at_win": 61454.6
41
+ },
42
+ {
43
+ "raffle": 65,
44
+ "prize": "\u00a35,000 Cash",
45
+ "value": 5000.0,
46
+ "ticket_price": 1.79,
47
+ "win_sequence": 13149,
48
+ "percent_path": 69.29,
49
+ "approx_tickets_sold": 72248,
50
+ "approx_value_at_win": 129324.78
51
+ },
52
+ {
53
+ "raffle": 77,
54
+ "prize": "\u00a35,000 Cash",
55
+ "value": 5000.0,
56
+ "ticket_price": 0.6,
57
+ "win_sequence": 3353,
58
+ "percent_path": 22.25,
59
+ "approx_tickets_sold": 56388,
60
+ "approx_value_at_win": 33832.84
61
+ },
62
+ {
63
+ "raffle": 75,
64
+ "prize": "\u00a35,000 Cash",
65
+ "value": 5000.0,
66
+ "ticket_price": 0.69,
67
+ "win_sequence": 12983,
68
+ "percent_path": 66.06,
69
+ "approx_tickets_sold": 177907,
70
+ "approx_value_at_win": 122755.92
71
+ },
72
+ {
73
+ "raffle": 70,
74
+ "prize": "\u00a35,000 Cash",
75
+ "value": 5000.0,
76
+ "ticket_price": 0.59,
77
+ "win_sequence": 16317,
78
+ "percent_path": 95.54,
79
+ "approx_tickets_sold": 271882,
80
+ "approx_value_at_win": 160410.29
81
+ },
82
+ {
83
+ "raffle": 80,
84
+ "prize": "\u00a35,000 Cash",
85
+ "value": 5000.0,
86
+ "ticket_price": 1.5,
87
+ "win_sequence": 21748,
88
+ "percent_path": 92.33,
89
+ "approx_tickets_sold": 138810,
90
+ "approx_value_at_win": 208214.89
91
+ },
92
+ {
93
+ "raffle": 79,
94
+ "prize": "\u00a35,000 Cash",
95
+ "value": 5000.0,
96
+ "ticket_price": 0.6,
97
+ "win_sequence": 17050,
98
+ "percent_path": 97.25,
99
+ "approx_tickets_sold": 269217,
100
+ "approx_value_at_win": 161529.91
101
+ },
102
+ {
103
+ "raffle": 56,
104
+ "prize": "Suzuki GSX-R 750",
105
+ "value": 7250.0,
106
+ "ticket_price": 0.84,
107
+ "win_sequence": 13464,
108
+ "percent_path": 86.81,
109
+ "approx_tickets_sold": 332094,
110
+ "approx_value_at_win": 278958.77
111
+ },
112
+ {
113
+ "raffle": 63,
114
+ "prize": "Suzuki GSX-R 750",
115
+ "value": 7250.0,
116
+ "ticket_price": 1.99,
117
+ "win_sequence": 17710,
118
+ "percent_path": 95.2,
119
+ "approx_tickets_sold": 160019,
120
+ "approx_value_at_win": 318438.41
121
+ },
122
+ {
123
+ "raffle": 82,
124
+ "prize": "Suzuki GSX-R 750",
125
+ "value": 7312.09,
126
+ "ticket_price": 0.55,
127
+ "win_sequence": 7601,
128
+ "percent_path": 47.28,
129
+ "approx_tickets_sold": 127662,
130
+ "approx_value_at_win": 70213.84
131
+ },
132
+ {
133
+ "raffle": 60,
134
+ "prize": "100g Gold Bar",
135
+ "value": 7500.0,
136
+ "ticket_price": 0.59,
137
+ "win_sequence": 5488,
138
+ "percent_path": 30.75,
139
+ "approx_tickets_sold": 92669,
140
+ "approx_value_at_win": 54674.57
141
+ },
142
+ {
143
+ "raffle": 59,
144
+ "prize": "Husqvarna 701 Supermoto",
145
+ "value": 7590.0,
146
+ "ticket_price": 0.65,
147
+ "win_sequence": 2185,
148
+ "percent_path": 20.86,
149
+ "approx_tickets_sold": 46994,
150
+ "approx_value_at_win": 30545.88
151
+ },
152
+ {
153
+ "raffle": 75,
154
+ "prize": "KTM 690 SMCR",
155
+ "value": 7800.0,
156
+ "ticket_price": 0.69,
157
+ "win_sequence": 9194,
158
+ "percent_path": 46.78,
159
+ "approx_tickets_sold": 125986,
160
+ "approx_value_at_win": 86930.44
161
+ },
162
+ {
163
+ "raffle": 67,
164
+ "prize": "100g Gold Bar",
165
+ "value": 8000.0,
166
+ "ticket_price": 1.59,
167
+ "win_sequence": 6872,
168
+ "percent_path": 26.63,
169
+ "approx_tickets_sold": 42490,
170
+ "approx_value_at_win": 67558.95
171
+ },
172
+ {
173
+ "raffle": 81,
174
+ "prize": "100g Gold Bar",
175
+ "value": 8000.0,
176
+ "ticket_price": 1.99,
177
+ "win_sequence": 15446,
178
+ "percent_path": 94.78,
179
+ "approx_tickets_sold": 64529,
180
+ "approx_value_at_win": 128412.26
181
+ },
182
+ {
183
+ "raffle": 56,
184
+ "prize": "KTM SXF-250",
185
+ "value": 8552.0,
186
+ "ticket_price": 0.84,
187
+ "win_sequence": 9398,
188
+ "percent_path": 60.59,
189
+ "approx_tickets_sold": 231805,
190
+ "approx_value_at_win": 194715.87
191
+ },
192
+ {
193
+ "raffle": 55,
194
+ "prize": "Ducati Panigale 899",
195
+ "value": 8990.0,
196
+ "ticket_price": 1.99,
197
+ "win_sequence": 9378,
198
+ "percent_path": 45.91,
199
+ "approx_tickets_sold": 130319,
200
+ "approx_value_at_win": 259334.43
201
+ },
202
+ {
203
+ "raffle": 80,
204
+ "prize": "Mystery Jackpot Cash",
205
+ "value": 10000.0,
206
+ "ticket_price": 1.5,
207
+ "win_sequence": 4245,
208
+ "percent_path": 18.02,
209
+ "approx_tickets_sold": 27094,
210
+ "approx_value_at_win": 40641.54
211
+ },
212
+ {
213
+ "raffle": 76,
214
+ "prize": "\u00a310,000 Cash",
215
+ "value": 10000.0,
216
+ "ticket_price": 1.35,
217
+ "win_sequence": 15542,
218
+ "percent_path": 85.2,
219
+ "approx_tickets_sold": 189971,
220
+ "approx_value_at_win": 256460.51
221
+ },
222
+ {
223
+ "raffle": 73,
224
+ "prize": "\u00a310,000 Cash",
225
+ "value": 10000.0,
226
+ "ticket_price": 0.65,
227
+ "win_sequence": 7094,
228
+ "percent_path": 44.11,
229
+ "approx_tickets_sold": 117046,
230
+ "approx_value_at_win": 76079.71
231
+ },
232
+ {
233
+ "raffle": 75,
234
+ "prize": "\u00a310,000 Cash",
235
+ "value": 10000.0,
236
+ "ticket_price": 0.69,
237
+ "win_sequence": 16039,
238
+ "percent_path": 81.62,
239
+ "approx_tickets_sold": 219784,
240
+ "approx_value_at_win": 151650.79
241
+ },
242
+ {
243
+ "raffle": 68,
244
+ "prize": "\u00a310,000 Cash",
245
+ "value": 10000.0,
246
+ "ticket_price": 0.89,
247
+ "win_sequence": 1488,
248
+ "percent_path": 9.27,
249
+ "approx_tickets_sold": 18395,
250
+ "approx_value_at_win": 16371.59
251
+ },
252
+ {
253
+ "raffle": 69,
254
+ "prize": "\u00a310,000 Cash",
255
+ "value": 10000.0,
256
+ "ticket_price": 1.5,
257
+ "win_sequence": 8066,
258
+ "percent_path": 38.54,
259
+ "approx_tickets_sold": 95160,
260
+ "approx_value_at_win": 142740.45
261
+ },
262
+ {
263
+ "raffle": 70,
264
+ "prize": "\u00a310,000 Cash",
265
+ "value": 10000.0,
266
+ "ticket_price": 0.59,
267
+ "win_sequence": 15128,
268
+ "percent_path": 88.58,
269
+ "approx_tickets_sold": 252070,
270
+ "approx_value_at_win": 148721.39
271
+ },
272
+ {
273
+ "raffle": 64,
274
+ "prize": "\u00a310,000 Cash",
275
+ "value": 10000.0,
276
+ "ticket_price": 0.6,
277
+ "win_sequence": 17433,
278
+ "percent_path": 76.85,
279
+ "approx_tickets_sold": 284337,
280
+ "approx_value_at_win": 170602.23
281
+ },
282
+ {
283
+ "raffle": 65,
284
+ "prize": "\u00a310,000 Cash",
285
+ "value": 10000.0,
286
+ "ticket_price": 1.79,
287
+ "win_sequence": 2110,
288
+ "percent_path": 11.12,
289
+ "approx_tickets_sold": 11594,
290
+ "approx_value_at_win": 20752.55
291
+ },
292
+ {
293
+ "raffle": 66,
294
+ "prize": "\u00a310,000 Cash",
295
+ "value": 10000.0,
296
+ "ticket_price": 0.65,
297
+ "win_sequence": 10665,
298
+ "percent_path": 66.83,
299
+ "approx_tickets_sold": 161076,
300
+ "approx_value_at_win": 104699.22
301
+ },
302
+ {
303
+ "raffle": 57,
304
+ "prize": "\u00a310,000 Cash",
305
+ "value": 10000.0,
306
+ "ticket_price": 1.5,
307
+ "win_sequence": 9900,
308
+ "percent_path": 74.9,
309
+ "approx_tickets_sold": 108337,
310
+ "approx_value_at_win": 162505.15
311
+ },
312
+ {
313
+ "raffle": 55,
314
+ "prize": "Aprilia Tuono 1100 V4 RR",
315
+ "value": 10568.99,
316
+ "ticket_price": 1.99,
317
+ "win_sequence": 857,
318
+ "percent_path": 4.2,
319
+ "approx_tickets_sold": 11909,
320
+ "approx_value_at_win": 23699.04
321
+ },
322
+ {
323
+ "raffle": 58,
324
+ "prize": "Rolex Datejust 36",
325
+ "value": 10750.0,
326
+ "ticket_price": 0.66,
327
+ "win_sequence": 9130,
328
+ "percent_path": 83.52,
329
+ "approx_tickets_sold": 218597,
330
+ "approx_value_at_win": 144274.14
331
+ },
332
+ {
333
+ "raffle": 64,
334
+ "prize": "Rolex Submariner \"Starbucks\"",
335
+ "value": 13500.0,
336
+ "ticket_price": 0.6,
337
+ "win_sequence": 6173,
338
+ "percent_path": 27.21,
339
+ "approx_tickets_sold": 100683,
340
+ "approx_value_at_win": 60410.0
341
+ },
342
+ {
343
+ "raffle": 79,
344
+ "prize": "Rolex Submariner \u2018Starbucks\u2019",
345
+ "value": 13500.0,
346
+ "ticket_price": 0.6,
347
+ "win_sequence": 8813,
348
+ "percent_path": 50.27,
349
+ "approx_tickets_sold": 139156,
350
+ "approx_value_at_win": 83493.44
351
+ },
352
+ {
353
+ "raffle": 72,
354
+ "prize": "Rolex GMT Master II 'Batgirl'",
355
+ "value": 14000.0,
356
+ "ticket_price": 1.99,
357
+ "win_sequence": 7304,
358
+ "percent_path": 45.09,
359
+ "approx_tickets_sold": 36938,
360
+ "approx_value_at_win": 73507.52
361
+ },
362
+ {
363
+ "raffle": 68,
364
+ "prize": "Rolex GMT Master II \u2018Batgirl\u2019",
365
+ "value": 14000.0,
366
+ "ticket_price": 0.89,
367
+ "win_sequence": 7925,
368
+ "percent_path": 49.37,
369
+ "approx_tickets_sold": 97971,
370
+ "approx_value_at_win": 87194.11
371
+ },
372
+ {
373
+ "raffle": 63,
374
+ "prize": "Mystery Jackpot Cash",
375
+ "value": 15000.0,
376
+ "ticket_price": 1.99,
377
+ "win_sequence": 12766,
378
+ "percent_path": 68.63,
379
+ "approx_tickets_sold": 115348,
380
+ "approx_value_at_win": 229541.77
381
+ },
382
+ {
383
+ "raffle": 55,
384
+ "prize": "\u00a315,000 Cash",
385
+ "value": 15000.0,
386
+ "ticket_price": 1.99,
387
+ "win_sequence": 3658,
388
+ "percent_path": 17.91,
389
+ "approx_tickets_sold": 50832,
390
+ "approx_value_at_win": 101156.47
391
+ },
392
+ {
393
+ "raffle": 55,
394
+ "prize": "\u00a315,000 Cash",
395
+ "value": 15000.0,
396
+ "ticket_price": 1.99,
397
+ "win_sequence": 5373,
398
+ "percent_path": 26.3,
399
+ "approx_tickets_sold": 74664,
400
+ "approx_value_at_win": 148582.2
401
+ },
402
+ {
403
+ "raffle": 62,
404
+ "prize": "Mystery Jackpot Cash",
405
+ "value": 15000.0,
406
+ "ticket_price": 0.6,
407
+ "win_sequence": 18131,
408
+ "percent_path": 77.24,
409
+ "approx_tickets_sold": 291623,
410
+ "approx_value_at_win": 174973.84
411
+ },
412
+ {
413
+ "raffle": 69,
414
+ "prize": "Rolex GMT Master II \u201cZombie\u201d",
415
+ "value": 16000.0,
416
+ "ticket_price": 1.5,
417
+ "win_sequence": 19779,
418
+ "percent_path": 94.5,
419
+ "approx_tickets_sold": 233347,
420
+ "approx_value_at_win": 350020.26
421
+ },
422
+ {
423
+ "raffle": 64,
424
+ "prize": "Rolex GMT Master II \u201cZombie\u201d",
425
+ "value": 16000.0,
426
+ "ticket_price": 0.6,
427
+ "win_sequence": 2421,
428
+ "percent_path": 10.67,
429
+ "approx_tickets_sold": 39487,
430
+ "approx_value_at_win": 23692.31
431
+ },
432
+ {
433
+ "raffle": 76,
434
+ "prize": "Rolex GMT Master II 'Zombie'",
435
+ "value": 16000.0,
436
+ "ticket_price": 1.35,
437
+ "win_sequence": 13249,
438
+ "percent_path": 72.63,
439
+ "approx_tickets_sold": 161943,
440
+ "approx_value_at_win": 218623.43
441
+ },
442
+ {
443
+ "raffle": 64,
444
+ "prize": "VW Golf R",
445
+ "value": 16500.0,
446
+ "ticket_price": 0.6,
447
+ "win_sequence": 15056,
448
+ "percent_path": 66.38,
449
+ "approx_tickets_sold": 245568,
450
+ "approx_value_at_win": 147340.51
451
+ },
452
+ {
453
+ "raffle": 65,
454
+ "prize": "Mystery Car #6",
455
+ "value": 17400.0,
456
+ "ticket_price": 1.79,
457
+ "win_sequence": 5619,
458
+ "percent_path": 29.61,
459
+ "approx_tickets_sold": 30874,
460
+ "approx_value_at_win": 55264.73
461
+ },
462
+ {
463
+ "raffle": 58,
464
+ "prize": "Rolex Yachtmaster II",
465
+ "value": 17650.0,
466
+ "ticket_price": 0.66,
467
+ "win_sequence": 211,
468
+ "percent_path": 1.93,
469
+ "approx_tickets_sold": 5052,
470
+ "approx_value_at_win": 3334.27
471
+ },
472
+ {
473
+ "raffle": 79,
474
+ "prize": "VW Caddy C20 TDI",
475
+ "value": 18135.0,
476
+ "ticket_price": 0.6,
477
+ "win_sequence": 16807,
478
+ "percent_path": 95.86,
479
+ "approx_tickets_sold": 265380,
480
+ "approx_value_at_win": 159227.75
481
+ },
482
+ {
483
+ "raffle": 56,
484
+ "prize": "Choose Your Keys!",
485
+ "value": 18135.0,
486
+ "ticket_price": 0.84,
487
+ "win_sequence": 7534,
488
+ "percent_path": 48.58,
489
+ "approx_tickets_sold": 185828,
490
+ "approx_value_at_win": 156095.91
491
+ },
492
+ {
493
+ "raffle": 56,
494
+ "prize": "Choose Your Keys!",
495
+ "value": 18135.0,
496
+ "ticket_price": 0.84,
497
+ "win_sequence": 4663,
498
+ "percent_path": 30.06,
499
+ "approx_tickets_sold": 115014,
500
+ "approx_value_at_win": 96612.06
501
+ },
502
+ {
503
+ "raffle": 56,
504
+ "prize": "Choose Your Keys!",
505
+ "value": 18135.0,
506
+ "ticket_price": 0.84,
507
+ "win_sequence": 10515,
508
+ "percent_path": 67.79,
509
+ "approx_tickets_sold": 259356,
510
+ "approx_value_at_win": 217858.84
511
+ },
512
+ {
513
+ "raffle": 56,
514
+ "prize": "Choose Your Keys!",
515
+ "value": 18135.0,
516
+ "ticket_price": 0.84,
517
+ "win_sequence": 3558,
518
+ "percent_path": 22.94,
519
+ "approx_tickets_sold": 87759,
520
+ "approx_value_at_win": 73717.71
521
+ },
522
+ {
523
+ "raffle": 63,
524
+ "prize": "250g Gold Cast Bar",
525
+ "value": 18500.0,
526
+ "ticket_price": 1.99,
527
+ "win_sequence": 2762,
528
+ "percent_path": 14.85,
529
+ "approx_tickets_sold": 24956,
530
+ "approx_value_at_win": 49662.73
531
+ },
532
+ {
533
+ "raffle": 65,
534
+ "prize": "Mystery Car #5",
535
+ "value": 19140.0,
536
+ "ticket_price": 1.79,
537
+ "win_sequence": 186,
538
+ "percent_path": 0.98,
539
+ "approx_tickets_sold": 1022,
540
+ "approx_value_at_win": 1829.37
541
+ },
542
+ {
543
+ "raffle": 56,
544
+ "prize": "\u00a320,000 Cash",
545
+ "value": 20000.0,
546
+ "ticket_price": 0.84,
547
+ "win_sequence": 7744,
548
+ "percent_path": 49.93,
549
+ "approx_tickets_sold": 191008,
550
+ "approx_value_at_win": 160446.87
551
+ },
552
+ {
553
+ "raffle": 74,
554
+ "prize": "5* All Inclusive Holiday to Bora Bora",
555
+ "value": 20000.0,
556
+ "ticket_price": 0.59,
557
+ "win_sequence": 3000,
558
+ "percent_path": 26.99,
559
+ "approx_tickets_sold": 50845,
560
+ "approx_value_at_win": 29998.29
561
+ },
562
+ {
563
+ "raffle": 76,
564
+ "prize": "250g Gold Cast Bar",
565
+ "value": 20000.0,
566
+ "ticket_price": 1.35,
567
+ "win_sequence": 3435,
568
+ "percent_path": 18.83,
569
+ "approx_tickets_sold": 41986,
570
+ "approx_value_at_win": 56681.37
571
+ },
572
+ {
573
+ "raffle": 55,
574
+ "prize": "VW Golf R",
575
+ "value": 20675.0,
576
+ "ticket_price": 1.99,
577
+ "win_sequence": 13096,
578
+ "percent_path": 64.1,
579
+ "approx_tickets_sold": 181985,
580
+ "approx_value_at_win": 362150.1
581
+ },
582
+ {
583
+ "raffle": 57,
584
+ "prize": "Ford Ranger Wildtrak 4X4",
585
+ "value": 21500.0,
586
+ "ticket_price": 1.5,
587
+ "win_sequence": 9213,
588
+ "percent_path": 69.7,
589
+ "approx_tickets_sold": 100819,
590
+ "approx_value_at_win": 151228.28
591
+ },
592
+ {
593
+ "raffle": 62,
594
+ "prize": "Choose Your Car!",
595
+ "value": 26000.0,
596
+ "ticket_price": 0.6,
597
+ "win_sequence": 14568,
598
+ "percent_path": 62.06,
599
+ "approx_tickets_sold": 234315,
600
+ "approx_value_at_win": 140588.99
601
+ },
602
+ {
603
+ "raffle": 62,
604
+ "prize": "Choose Your Car!",
605
+ "value": 26000.0,
606
+ "ticket_price": 0.6,
607
+ "win_sequence": 17336,
608
+ "percent_path": 73.86,
609
+ "approx_tickets_sold": 278836,
610
+ "approx_value_at_win": 167301.67
611
+ },
612
+ {
613
+ "raffle": 62,
614
+ "prize": "Choose Your Car!",
615
+ "value": 26000.0,
616
+ "ticket_price": 0.6,
617
+ "win_sequence": 3623,
618
+ "percent_path": 15.43,
619
+ "approx_tickets_sold": 58273,
620
+ "approx_value_at_win": 34963.89
621
+ },
622
+ {
623
+ "raffle": 75,
624
+ "prize": "Ford Ranger Raptor",
625
+ "value": 26000.0,
626
+ "ticket_price": 0.69,
627
+ "win_sequence": 13431,
628
+ "percent_path": 68.34,
629
+ "approx_tickets_sold": 184046,
630
+ "approx_value_at_win": 126991.82
631
+ },
632
+ {
633
+ "raffle": 79,
634
+ "prize": "Ford Ranger Raptor",
635
+ "value": 26000.0,
636
+ "ticket_price": 0.6,
637
+ "win_sequence": 1879,
638
+ "percent_path": 10.72,
639
+ "approx_tickets_sold": 29669,
640
+ "approx_value_at_win": 17801.45
641
+ },
642
+ {
643
+ "raffle": 63,
644
+ "prize": "AP Royal Oak Chronograph",
645
+ "value": 27000.0,
646
+ "ticket_price": 1.99,
647
+ "win_sequence": 15959,
648
+ "percent_path": 85.79,
649
+ "approx_tickets_sold": 144198,
650
+ "approx_value_at_win": 286954.19
651
+ },
652
+ {
653
+ "raffle": 61,
654
+ "prize": "Mercedes C43 AMG Premium+",
655
+ "value": 27500.0,
656
+ "ticket_price": 1.29,
657
+ "win_sequence": 14580,
658
+ "percent_path": 89.87,
659
+ "approx_tickets_sold": 112333,
660
+ "approx_value_at_win": 144909.16
661
+ },
662
+ {
663
+ "raffle": 70,
664
+ "prize": "Mercedes C43 AMG Premium+",
665
+ "value": 27500.0,
666
+ "ticket_price": 0.59,
667
+ "win_sequence": 3373,
668
+ "percent_path": 19.75,
669
+ "approx_tickets_sold": 56203,
670
+ "approx_value_at_win": 33159.52
671
+ },
672
+ {
673
+ "raffle": 64,
674
+ "prize": "Mercedes C43 AMG Premium+",
675
+ "value": 27500.0,
676
+ "ticket_price": 0.6,
677
+ "win_sequence": 8950,
678
+ "percent_path": 39.46,
679
+ "approx_tickets_sold": 145977,
680
+ "approx_value_at_win": 87586.18
681
+ },
682
+ {
683
+ "raffle": 63,
684
+ "prize": "Hyundai I30N",
685
+ "value": 29654.6,
686
+ "ticket_price": 1.99,
687
+ "win_sequence": 13673,
688
+ "percent_path": 73.5,
689
+ "approx_tickets_sold": 123543,
690
+ "approx_value_at_win": 245850.28
691
+ },
692
+ {
693
+ "raffle": 55,
694
+ "prize": "\u00a330,000 Cash",
695
+ "value": 30000.0,
696
+ "ticket_price": 1.99,
697
+ "win_sequence": 748,
698
+ "percent_path": 3.66,
699
+ "approx_tickets_sold": 10394,
700
+ "approx_value_at_win": 20684.81
701
+ },
702
+ {
703
+ "raffle": 61,
704
+ "prize": "BMW M135i XDrive",
705
+ "value": 31285.0,
706
+ "ticket_price": 1.29,
707
+ "win_sequence": 3924,
708
+ "percent_path": 24.19,
709
+ "approx_tickets_sold": 30233,
710
+ "approx_value_at_win": 39000.24
711
+ },
712
+ {
713
+ "raffle": 57,
714
+ "prize": "Stage 2 Audi TT RS",
715
+ "value": 31790.0,
716
+ "ticket_price": 1.5,
717
+ "win_sequence": 4236,
718
+ "percent_path": 32.05,
719
+ "approx_tickets_sold": 46355,
720
+ "approx_value_at_win": 69532.51
721
+ },
722
+ {
723
+ "raffle": 59,
724
+ "prize": "Audi RS3",
725
+ "value": 31820.0,
726
+ "ticket_price": 0.65,
727
+ "win_sequence": 4745,
728
+ "percent_path": 45.31,
729
+ "approx_tickets_sold": 102053,
730
+ "approx_value_at_win": 66334.2
731
+ },
732
+ {
733
+ "raffle": 57,
734
+ "prize": "VW Passat R-Line TDi",
735
+ "value": 32319.0,
736
+ "ticket_price": 1.5,
737
+ "win_sequence": 3294,
738
+ "percent_path": 24.92,
739
+ "approx_tickets_sold": 36047,
740
+ "approx_value_at_win": 54069.9
741
+ },
742
+ {
743
+ "raffle": 61,
744
+ "prize": "VW Passat R-Line TDi",
745
+ "value": 32319.0,
746
+ "ticket_price": 1.29,
747
+ "win_sequence": 11866,
748
+ "percent_path": 73.14,
749
+ "approx_tickets_sold": 91422,
750
+ "approx_value_at_win": 117934.98
751
+ },
752
+ {
753
+ "raffle": 71,
754
+ "prize": "Audi RS3",
755
+ "value": 32363.0,
756
+ "ticket_price": 1.49,
757
+ "win_sequence": 12488,
758
+ "percent_path": 70.86,
759
+ "approx_tickets_sold": 74938,
760
+ "approx_value_at_win": 111657.5
761
+ },
762
+ {
763
+ "raffle": 72,
764
+ "prize": "Toyota GR86 D-4S",
765
+ "value": 33177.59,
766
+ "ticket_price": 1.99,
767
+ "win_sequence": 5796,
768
+ "percent_path": 35.78,
769
+ "approx_tickets_sold": 29312,
770
+ "approx_value_at_win": 58331.0
771
+ },
772
+ {
773
+ "raffle": 66,
774
+ "prize": "Mini Cooper JCW GP",
775
+ "value": 33379.0,
776
+ "ticket_price": 0.65,
777
+ "win_sequence": 14538,
778
+ "percent_path": 91.1,
779
+ "approx_tickets_sold": 219570,
780
+ "approx_value_at_win": 142720.79
781
+ },
782
+ {
783
+ "raffle": 55,
784
+ "prize": "BMW M4 Competition",
785
+ "value": 33471.01,
786
+ "ticket_price": 1.99,
787
+ "win_sequence": 18290,
788
+ "percent_path": 89.53,
789
+ "approx_tickets_sold": 254162,
790
+ "approx_value_at_win": 505782.33
791
+ },
792
+ {
793
+ "raffle": 72,
794
+ "prize": "Ford Mustang GT",
795
+ "value": 34000.0,
796
+ "ticket_price": 1.99,
797
+ "win_sequence": 11152,
798
+ "percent_path": 68.85,
799
+ "approx_tickets_sold": 56399,
800
+ "approx_value_at_win": 112233.83
801
+ },
802
+ {
803
+ "raffle": 77,
804
+ "prize": "Choose Your Keys #4",
805
+ "value": 35000.0,
806
+ "ticket_price": 0.6,
807
+ "win_sequence": 12592,
808
+ "percent_path": 83.55,
809
+ "approx_tickets_sold": 211762,
810
+ "approx_value_at_win": 127057.3
811
+ },
812
+ {
813
+ "raffle": 55,
814
+ "prize": "Rolex Day-Date Everose Gold",
815
+ "value": 35000.0,
816
+ "ticket_price": 1.99,
817
+ "win_sequence": 2419,
818
+ "percent_path": 11.84,
819
+ "approx_tickets_sold": 33615,
820
+ "approx_value_at_win": 66893.79
821
+ },
822
+ {
823
+ "raffle": 82,
824
+ "prize": "Cupra Formentor VZ3 ABT Edition",
825
+ "value": 35000.0,
826
+ "ticket_price": 0.55,
827
+ "win_sequence": 11457,
828
+ "percent_path": 71.26,
829
+ "approx_tickets_sold": 192424,
830
+ "approx_value_at_win": 105833.44
831
+ },
832
+ {
833
+ "raffle": 66,
834
+ "prize": "Jeep Wrangler 75th Anniversary",
835
+ "value": 35657.78,
836
+ "ticket_price": 0.65,
837
+ "win_sequence": 8134,
838
+ "percent_path": 50.97,
839
+ "approx_tickets_sold": 122849,
840
+ "approx_value_at_win": 79852.17
841
+ },
842
+ {
843
+ "raffle": 73,
844
+ "prize": "Range Rover SVR Autobiography",
845
+ "value": 36350.0,
846
+ "ticket_price": 0.65,
847
+ "win_sequence": 12068,
848
+ "percent_path": 75.04,
849
+ "approx_tickets_sold": 199113,
850
+ "approx_value_at_win": 129423.45
851
+ },
852
+ {
853
+ "raffle": 66,
854
+ "prize": "BMW M3 Competition",
855
+ "value": 36350.0,
856
+ "ticket_price": 0.65,
857
+ "win_sequence": 5042,
858
+ "percent_path": 31.6,
859
+ "approx_tickets_sold": 76150,
860
+ "approx_value_at_win": 49497.74
861
+ },
862
+ {
863
+ "raffle": 57,
864
+ "prize": "Range Rover SVR Autobiography",
865
+ "value": 36350.0,
866
+ "ticket_price": 1.5,
867
+ "win_sequence": 9298,
868
+ "percent_path": 70.34,
869
+ "approx_tickets_sold": 101749,
870
+ "approx_value_at_win": 152623.53
871
+ },
872
+ {
873
+ "raffle": 78,
874
+ "prize": "Porsche 718 Cayman",
875
+ "value": 36457.55,
876
+ "ticket_price": 1.89,
877
+ "win_sequence": 15123,
878
+ "percent_path": 87.58,
879
+ "approx_tickets_sold": 75562,
880
+ "approx_value_at_win": 142813.03
881
+ },
882
+ {
883
+ "raffle": 67,
884
+ "prize": "BMW M2 Competition",
885
+ "value": 37315.0,
886
+ "ticket_price": 1.59,
887
+ "win_sequence": 12335,
888
+ "percent_path": 47.81,
889
+ "approx_tickets_sold": 76268,
890
+ "approx_value_at_win": 121265.95
891
+ },
892
+ {
893
+ "raffle": 55,
894
+ "prize": "VW Golf GTi Clubsport 45",
895
+ "value": 37340.0,
896
+ "ticket_price": 1.99,
897
+ "win_sequence": 7066,
898
+ "percent_path": 34.59,
899
+ "approx_tickets_sold": 98191,
900
+ "approx_value_at_win": 195399.56
901
+ },
902
+ {
903
+ "raffle": 65,
904
+ "prize": "Mystery Car #2",
905
+ "value": 37340.0,
906
+ "ticket_price": 1.79,
907
+ "win_sequence": 7744,
908
+ "percent_path": 40.81,
909
+ "approx_tickets_sold": 42550,
910
+ "approx_value_at_win": 76164.81
911
+ },
912
+ {
913
+ "raffle": 72,
914
+ "prize": "Audi RS3 Saloon",
915
+ "value": 37340.0,
916
+ "ticket_price": 1.99,
917
+ "win_sequence": 6632,
918
+ "percent_path": 40.94,
919
+ "approx_tickets_sold": 33540,
920
+ "approx_value_at_win": 66744.51
921
+ },
922
+ {
923
+ "raffle": 75,
924
+ "prize": "Audi RS3 Saloon",
925
+ "value": 37340.0,
926
+ "ticket_price": 0.69,
927
+ "win_sequence": 1085,
928
+ "percent_path": 5.52,
929
+ "approx_tickets_sold": 14868,
930
+ "approx_value_at_win": 10258.81
931
+ },
932
+ {
933
+ "raffle": 57,
934
+ "prize": "Audi S3 Vorsprung",
935
+ "value": 38314.99,
936
+ "ticket_price": 1.5,
937
+ "win_sequence": 2304,
938
+ "percent_path": 17.43,
939
+ "approx_tickets_sold": 25213,
940
+ "approx_value_at_win": 37819.38
941
+ },
942
+ {
943
+ "raffle": 55,
944
+ "prize": "\u00a340,000 Cash",
945
+ "value": 40000.0,
946
+ "ticket_price": 1.99,
947
+ "win_sequence": 4311,
948
+ "percent_path": 21.1,
949
+ "approx_tickets_sold": 59907,
950
+ "approx_value_at_win": 119214.19
951
+ },
952
+ {
953
+ "raffle": 60,
954
+ "prize": "VW Golf R Estate",
955
+ "value": 40100.0,
956
+ "ticket_price": 0.59,
957
+ "win_sequence": 9409,
958
+ "percent_path": 52.71,
959
+ "approx_tickets_sold": 158878,
960
+ "approx_value_at_win": 93737.8
961
+ },
962
+ {
963
+ "raffle": 75,
964
+ "prize": "Jeep Wrangler 75th Anniversary",
965
+ "value": 40820.0,
966
+ "ticket_price": 0.69,
967
+ "win_sequence": 10093,
968
+ "percent_path": 51.36,
969
+ "approx_tickets_sold": 138305,
970
+ "approx_value_at_win": 95430.6
971
+ },
972
+ {
973
+ "raffle": 55,
974
+ "prize": "BMW M240i XDrive",
975
+ "value": 40863.0,
976
+ "ticket_price": 1.99,
977
+ "win_sequence": 12299,
978
+ "percent_path": 60.2,
979
+ "approx_tickets_sold": 170910,
980
+ "approx_value_at_win": 340110.27
981
+ },
982
+ {
983
+ "raffle": 76,
984
+ "prize": "VW Touareg V6 Black Edition",
985
+ "value": 41479.0,
986
+ "ticket_price": 1.35,
987
+ "win_sequence": 12522,
988
+ "percent_path": 68.64,
989
+ "approx_tickets_sold": 153057,
990
+ "approx_value_at_win": 206627.11
991
+ },
992
+ {
993
+ "raffle": 63,
994
+ "prize": "VW Touareg V6 Black Edition",
995
+ "value": 41479.0,
996
+ "ticket_price": 1.99,
997
+ "win_sequence": 3303,
998
+ "percent_path": 17.76,
999
+ "approx_tickets_sold": 29844,
1000
+ "approx_value_at_win": 59390.29
1001
+ },
1002
+ {
1003
+ "raffle": 79,
1004
+ "prize": "475BHP Toyota Supra Pro",
1005
+ "value": 42090.0,
1006
+ "ticket_price": 0.6,
1007
+ "win_sequence": 12417,
1008
+ "percent_path": 70.82,
1009
+ "approx_tickets_sold": 196062,
1010
+ "approx_value_at_win": 117637.35
1011
+ },
1012
+ {
1013
+ "raffle": 82,
1014
+ "prize": "VW Tiguan R",
1015
+ "value": 42926.75,
1016
+ "ticket_price": 0.55,
1017
+ "win_sequence": 9344,
1018
+ "percent_path": 58.12,
1019
+ "approx_tickets_sold": 156936,
1020
+ "approx_value_at_win": 86314.71
1021
+ },
1022
+ {
1023
+ "raffle": 58,
1024
+ "prize": "Toyota Supra Pro",
1025
+ "value": 45000.0,
1026
+ "ticket_price": 0.66,
1027
+ "win_sequence": 3777,
1028
+ "percent_path": 34.55,
1029
+ "approx_tickets_sold": 90432,
1030
+ "approx_value_at_win": 59684.93
1031
+ },
1032
+ {
1033
+ "raffle": 76,
1034
+ "prize": "Toyota Supra Pro",
1035
+ "value": 45000.0,
1036
+ "ticket_price": 1.35,
1037
+ "win_sequence": 16262,
1038
+ "percent_path": 89.15,
1039
+ "approx_tickets_sold": 198771,
1040
+ "approx_value_at_win": 268341.32
1041
+ },
1042
+ {
1043
+ "raffle": 59,
1044
+ "prize": "Range Rover Sport SVR",
1045
+ "value": 45285.0,
1046
+ "ticket_price": 0.65,
1047
+ "win_sequence": 1541,
1048
+ "percent_path": 14.71,
1049
+ "approx_tickets_sold": 33143,
1050
+ "approx_value_at_win": 21542.89
1051
+ },
1052
+ {
1053
+ "raffle": 78,
1054
+ "prize": "Mystery Jackpot Car",
1055
+ "value": 46000.0,
1056
+ "ticket_price": 1.89,
1057
+ "win_sequence": 14449,
1058
+ "percent_path": 83.68,
1059
+ "approx_tickets_sold": 72195,
1060
+ "approx_value_at_win": 136448.16
1061
+ },
1062
+ {
1063
+ "raffle": 55,
1064
+ "prize": "2023 VW Campervan",
1065
+ "value": 53500.0,
1066
+ "ticket_price": 1.99,
1067
+ "win_sequence": 3413,
1068
+ "percent_path": 16.71,
1069
+ "approx_tickets_sold": 47428,
1070
+ "approx_value_at_win": 94381.36
1071
+ },
1072
+ {
1073
+ "raffle": 69,
1074
+ "prize": "Audi RS3 Carbon Edition",
1075
+ "value": 57175.91,
1076
+ "ticket_price": 1.5,
1077
+ "win_sequence": 16810,
1078
+ "percent_path": 80.32,
1079
+ "approx_tickets_sold": 198319,
1080
+ "approx_value_at_win": 297479.17
1081
+ }
1082
+ ]
requirements.txt ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ fastapi
2
+ uvicorn
3
+ langchain
4
+ langchain-community
5
+ langchain-core
6
+ langchain-groq
7
+ chromadb
8
+ huggingface-hub
9
+ pydantic
10
+ ratelimit
11
+ sentence-transformers