Nasma commited on
Commit
aa58464
ยท
verified ยท
1 Parent(s): 5e53c2f

Upload 3 files

Browse files
Files changed (3) hide show
  1. main.py +59 -0
  2. requirements.txt +5 -0
  3. sdluk.json +1 -0
main.py ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from fastapi import FastAPI, Request
2
+ from pydantic import BaseModel
3
+ import json
4
+ import os
5
+ from llama_index.core import SimpleDirectoryReader, VectorStoreIndex
6
+ from llama_index.core.schema import Document
7
+ from llama_index.llms.openai import OpenAI
8
+
9
+ # Load and prepare user data once at startup
10
+ with open("sdluk.json", "r", encoding="utf-8") as f:
11
+ raw_data = json.load(f)
12
+
13
+ user_id = "IpJycOGcYkPNs0iYhpzUigcvbBG2"
14
+ user_data = {
15
+ "profile": raw_data["__collections__"]["users"].get(user_id, {}),
16
+ "cart": [v for v in raw_data["__collections__"]["carts"].values() if v.get("userId") == user_id],
17
+ "favorites": [v for v in raw_data["__collections__"]["favorites"].values() if v.get("userId") == user_id],
18
+ "issues": [v for v in raw_data["__collections__"]["issue_reports"].values() if v.get("userId") == user_id],
19
+ "plans": list(raw_data["__collections__"]["pricingPlans"].values())[0]["plans"],
20
+ "products": list(raw_data["__collections__"]["products"].values()),
21
+ }
22
+
23
+ # Convert to document
24
+ document = Document(text=json.dumps(user_data, indent=2))
25
+
26
+ # Set OpenAI key (ensure this is set securely)
27
+ os.environ["OPENAI_API_KEY"] = "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"
28
+
29
+ # Initialize LLM and index
30
+ llm = OpenAI(model="gpt-4o")
31
+ index = VectorStoreIndex.from_documents([document])
32
+ query_engine = index.as_query_engine(llm=llm)
33
+
34
+ # Chatbot instruction
35
+ instruction = """
36
+ You are a friendly and smart assistant for a retail telecom company. Use the given user data (profile, cart, favorites, plans, issues, products) to answer questions.
37
+
38
+ 1. Be polite and personalized if possible. Greetings and Politeness (e.g., "Hi", "Good morning", "How are you?")
39
+ - Respond politely and warmly like a friendly customer support assistant.
40
+ 2. If the question is about products, look in 'products'.
41
+ 3. For current plan or registration, use 'profile' and 'plans'.
42
+ 4. For cart/favorite items, check 'cart' and 'favorites'.
43
+ 5. For issues or help, refer to 'issues'.
44
+ 6. If the info is missing, say: "I couldn't find that in your records. Want me to check online?"
45
+
46
+ Always answer clearly using available data.
47
+ """
48
+
49
+ # FastAPI app
50
+ app = FastAPI()
51
+
52
+ class QueryInput(BaseModel):
53
+ query: str
54
+
55
+ @app.post("/chat")
56
+ def retail_chatbot(input: QueryInput):
57
+ full_prompt = f"instruction: {instruction}\nquery: {input.query}"
58
+ response = query_engine.query(full_prompt)
59
+ return {"response": response.response}
requirements.txt ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ fastapi
2
+ uvicorn
3
+ openai
4
+ llama-index
5
+ pydantic
sdluk.json ADDED
@@ -0,0 +1 @@
 
 
1
+ {"__collections__":{"carts":{"TpkT0g7CHFE7udbFY7u2":{"quantity":1,"productId":"3aI9JITZTpDonqEqUrbV","price":649,"title":"Galaxy Tab S10","userId":"IpJycOGcYkPNs0iYhpzUigcvbBG2","addedAt":{"__datatype__":"timestamp","value":{"_seconds":1743351032,"_nanoseconds":948000000}},"__collections__":{}}},"favorites":{"PmFZcasBjAdbZb3P0lyY":{"productId":"99CXhM0kUbaklQoytOce","title":"Pro Earbuds","userId":"IpJycOGcYkPNs0iYhpzUigcvbBG2","addedAt":{"__datatype__":"timestamp","value":{"_seconds":1743351021,"_nanoseconds":270000000}},"__collections__":{}}},"issue_reports":{"mw4RXqXiV2KIUpxPb5zB":{"issueType":"Ask for Help","description":"jo","title":"hi","priority":"Medium","userId":"IpJycOGcYkPNs0iYhpzUigcvbBG2","timestamp":{"__datatype__":"timestamp","value":{"_seconds":1743351334,"_nanoseconds":490000000}},"__collections__":{}}},"otps":{"[email protected]":{"otp":"141142","expiresAt":{"__datatype__":"timestamp","value":{"_seconds":1743351102,"_nanoseconds":182780000}},"createdAt":{"__datatype__":"timestamp","value":{"_seconds":1743350517,"_nanoseconds":589000000}},"verified":true,"__collections__":{}},"[email protected]":{"verified":false,"otp":"946051","expiresAt":{"__datatype__":"timestamp","value":{"_seconds":1743691043,"_nanoseconds":352295000}},"createdAt":{"__datatype__":"timestamp","value":{"_seconds":1743690442,"_nanoseconds":537000000}},"__collections__":{}}},"pricingPlans":{"zU60jnxDVNMrm8vgA97W":{"category":"DATA PLANS","plans":[{"dataLimit":"UNLIMITED ","price":30,"minutes":"Unlimited","data":"DATA UNLIMITED PLAN","texts":"Unlimited","discountPrice":25},{"texts":"Unlimited","dataLimit":"100GB","discountPrice":17,"data":"GIGA BOOST PLAN","price":25,"minutes":"Unlimited"},{"dataLimit":"80GB","discountPrice":15,"price":20,"data":"DATA LITE PLAN","minutes":"Unlimited","texts":"Unlimited"},{"price":15,"discountPrice":10,"minutes":"Unlimited","data":"MINI PLAN","texts":"Unlimited","dataLimit":"30GB"},{"dataLimit":"3GB","minutes":"Unlimited","texts":"Unlimited","discountPrice":5,"data":"FREEDOM PLAN","price":10}],"__collections__":{}}},"products":{"2SnlMfo7VvS7uuOWIOPH":{"salePercentage":0,"emoji":"๐Ÿ’ณ","reviews":78,"price":10,"rating":4.5,"description":"Standard + Micro + Nano","isSale":false,"isNew":false,"title":"Physical SIM Card","category":"SIM Cards","__collections__":{}},"3aI9JITZTpDonqEqUrbV":{"salePercentage":0,"emoji":"๐Ÿ“Ÿ","reviews":92,"price":649,"rating":4.7,"description":"Premium Android tablet","isSale":false,"isNew":true,"title":"Galaxy Tab S10","category":"Tablets","__collections__":{}},"99CXhM0kUbaklQoytOce":{"salePercentage":0,"emoji":"๐ŸŽง","reviews":89,"price":199,"rating":5,"description":"Noise cancelling","isSale":false,"isNew":false,"title":"Pro Earbuds","category":"Accessories","__collections__":{}},"HDQ05AGVJ3Rx1WoM9eE8":{"salePercentage":0,"emoji":"๐Ÿ“ฑ","reviews":128,"price":899,"rating":4.5,"description":"Latest Android flagship","isSale":false,"isNew":true,"title":"Galaxy S25","category":"Phones","__collections__":{}},"TPIepQWGnAoh0WgNbZRA":{"salePercentage":0,"emoji":"โŒš","reviews":112,"price":299,"rating":4.8,"description":"Health & fitness tracking","isSale":false,"isNew":true,"title":"Smart Watch Pro","category":"Wearables","__collections__":{}},"jNpnUkXAaaovqO72UJZt":{"salePercentage":20,"emoji":"๐Ÿ ","reviews":67,"price":129,"rating":4.5,"description":"Voice controlled","isSale":true,"isNew":false,"title":"Smart Hub","category":"Smart Home","__collections__":{}},"nsfASK4Y5LpW1aowsY7t":{"salePercentage":10,"emoji":"๐ŸŽฎ","reviews":203,"price":69,"rating":4.6,"description":"Low latency wireless","isSale":true,"isNew":false,"title":"Gaming Controller","category":"Gaming","__collections__":{}},"pGfBLy0VFVWn55W9qbJi":{"salePercentage":0,"emoji":"๐Ÿ’ณ","reviews":45,"price":15,"rating":5,"description":"Digital SIM activation","isSale":false,"isNew":true,"title":"Premium eSIM","category":"SIM Cards","__collections__":{}},"qCzwl4V81KrVOjwwveFA":{"salePercentage":15,"emoji":"๐Ÿ“ฑ","reviews":256,"price":999,"rating":5,"description":"Pro Max Edition","isSale":true,"isNew":false,"title":"iPhone 16","category":"Phones","__collections__":{}}},"registrations":{"7MfWFe7hGqPE0WAFiNKW":{"simType":"esim","firstName":"kenthiran","lastName":"thiyakarasa","email":"[email protected]","confirmEmail":"[email protected]","sex":"male","age":"18","phone":"079139 23409","plan":"GIGA BOOST PLAN","price":"17","role":"manager","otherRole":"","dateOfBirth":"2007-04-05","houseNumber":"12","address":"123 Example Street","city":"Kathiraveli","postcode":"BA21 3DJ","marketingConsent":false,"lookupPostcode":"","status":"pending","createdAt":{"__datatype__":"timestamp","value":{"_seconds":1743827686,"_nanoseconds":869000000}},"adminNotified":true,"__collections__":{}}},"users":{"IpJycOGcYkPNs0iYhpzUigcvbBG2":{"packageDetails":"Unlimited - 60","gender":"Male","address2":"UK","city":"UK","isVerified":true,"address1":"UK","postalCode":"UK","createdAt":"2025-03-30T21:32:13.155496","dob":"2025-03-04","designation":"Student","email":"[email protected]","age":"25","username":"kenthu","contactNo":"0757105553","__collections__":{}},"sampleUserId123":{"phoneNumber":"+1234567890","name":"Karthik","email":"[email protected]","createdAt":{"__datatype__":"timestamp","value":{"_seconds":1743350924,"_nanoseconds":159000000}},"__collections__":{}}}}}