CodeXDevloper commited on
Commit
3422ee5
·
verified ·
1 Parent(s): dbacbf8

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +96 -70
app.py CHANGED
@@ -6,7 +6,7 @@ import os
6
 
7
  os.environ["HF_HOME"] = "/tmp/hf"
8
 
9
- app = FastAPI(title="Telegram UID Search API")
10
 
11
  app.add_middleware(
12
  CORSMiddleware,
@@ -17,99 +17,125 @@ app.add_middleware(
17
 
18
  DATASET = "CodeXDevloper/MergedTgDataset"
19
 
20
- def get_all_parquet_files():
21
- """Saari parquet files nikalo - saare folders se"""
 
 
 
 
 
 
 
22
  api = HfApi()
23
  files = api.list_repo_files(DATASET, repo_type="dataset")
24
- parquet_files = [f for f in files if f.endswith(".parquet")]
25
- return parquet_files
 
 
 
 
26
 
27
  @app.get("/")
28
  def root():
29
  return {
30
  "status": "running",
31
  "dataset": DATASET,
32
- "usage": "/search?uid=385167100"
 
33
  }
34
 
35
  @app.get("/search")
36
  def search_uid(
37
- uid: str = Query(..., description="Telegram UID"),
38
- offset: int = Query(0, ge=0, description="Kahan se start karna hai")
39
  ):
40
  """
41
- POORE dataset mein UID dhoondho - saare folders se
 
 
 
42
  """
43
  try:
44
- # Saari parquet files nikalo (saare folders)
45
- parquet_files = get_all_parquet_files()
46
-
47
- if not parquet_files:
48
- return {"error": "Koi parquet file nahi mili"}
49
 
50
- # Saari files ko load karo (streaming mode)
51
- ds = load_dataset(
52
- DATASET,
53
- data_files=parquet_files,
54
- split="train",
55
- streaming=True
56
- )
57
-
58
- # Offset tak skip karo
59
- iterator = iter(ds)
60
- skipped = 0
61
- for _ in range(offset):
 
 
 
 
62
  try:
63
- next(iterator)
64
- skipped += 1
65
- except StopIteration:
66
- return {
67
- "found": False,
68
- "uid": uid,
69
- "offset": offset,
70
- "scanned": 0,
71
- "message": "End of dataset",
72
- "next_offset": None
73
- }
74
-
75
- # Ab 5 lakh rows scan karo
76
- scanned = 0
77
- max_scan = 500000
78
-
79
- for row in iterator:
80
- scanned += 1
81
- if uid == str(row.get("user_id", "")).strip():
82
- return {
83
- "found": True,
84
- "uid": uid,
85
- "offset": offset,
86
- "scanned": scanned,
87
- "total_scanned": offset + scanned,
88
- "data": {
89
- "user_id": row.get("user_id"),
90
- "username": row.get("username"),
91
- "first_name": row.get("first_name"),
92
- "last_name": row.get("last_name"),
93
- "phone": row.get("phone"),
94
- "email": row.get("email"),
95
- "status": row.get("status"),
96
- "linked_id": row.get("linked_id"),
97
- "linked_name": row.get("linked_name"),
98
- "linked_handle": row.get("linked_handle"),
 
 
 
 
 
 
 
 
99
  }
100
- }
 
 
101
 
102
- if scanned >= max_scan:
103
- break
 
 
 
 
104
 
 
105
  return {
106
  "found": False,
107
  "uid": uid,
108
- "offset": offset,
109
- "scanned": scanned,
110
- "next_offset": offset + scanned,
111
- "total_files": len(parquet_files),
112
- "message": f"Is chunk mein nahi mila. Ab offset={offset + scanned} try karo."
113
  }
114
 
115
  except Exception as e:
 
6
 
7
  os.environ["HF_HOME"] = "/tmp/hf"
8
 
9
+ app = FastAPI(title="Telegram UID Multi-Search API")
10
 
11
  app.add_middleware(
12
  CORSMiddleware,
 
17
 
18
  DATASET = "CodeXDevloper/MergedTgDataset"
19
 
20
+ # Folders ki priority - pehle V1, phir V2, phir baaki
21
+ FOLDER_PRIORITY = [
22
+ "TG_DATA_PARTS", # V1
23
+ "Telegram_V2", # V2
24
+ None, # None = baaki sab (root files)
25
+ ]
26
+
27
+ def get_files_for_folder(folder):
28
+ """Kisi folder ki saari parquet files nikalo"""
29
  api = HfApi()
30
  files = api.list_repo_files(DATASET, repo_type="dataset")
31
+
32
+ if folder:
33
+ return [f for f in files if f.startswith(folder + "/") and f.endswith(".parquet")]
34
+ else:
35
+ # Root ki files (jo kisi folder mein nahi hain)
36
+ return [f for f in files if "/" not in f and f.endswith(".parquet")]
37
 
38
  @app.get("/")
39
  def root():
40
  return {
41
  "status": "running",
42
  "dataset": DATASET,
43
+ "usage": "/search?uid=385167100",
44
+ "search_order": ["TG_DATA_PARTS (V1)", "Telegram_V2", "Root files"]
45
  }
46
 
47
  @app.get("/search")
48
  def search_uid(
49
+ uid: str = Query(..., description="Telegram UID")
 
50
  ):
51
  """
52
+ AUTOMATIC MULTI-FOLDER SEARCH:
53
+ 1. Pehle V1 (TG_DATA_PARTS) mein dhoondho
54
+ 2. Nahi mila toh V2 (Telegram_V2) mein
55
+ 3. Nahi mila toh root files mein
56
  """
57
  try:
58
+ results = [] # Har folder ka result track karo
 
 
 
 
59
 
60
+ for folder in FOLDER_PRIORITY:
61
+ folder_name = folder if folder else "Root"
62
+ print(f"🔍 Searching in: {folder_name}")
63
+
64
+ # Folder ki files nikalo
65
+ files = get_files_for_folder(folder)
66
+
67
+ if not files:
68
+ results.append({
69
+ "folder": folder_name,
70
+ "status": "no_files",
71
+ "scanned": 0
72
+ })
73
+ continue
74
+
75
+ # Dataset load karo (streaming)
76
  try:
77
+ ds = load_dataset(
78
+ DATASET,
79
+ data_files={"train": files},
80
+ split="train",
81
+ streaming=True
82
+ )
83
+ except Exception as e:
84
+ results.append({
85
+ "folder": folder_name,
86
+ "status": "load_error",
87
+ "error": str(e)
88
+ })
89
+ continue
90
+
91
+ # Is folder mein dhoondho
92
+ scanned = 0
93
+ max_scan = 200000 # har folder mein 2 lakh rows
94
+
95
+ for row in ds:
96
+ scanned += 1
97
+ if uid == str(row.get("user_id", "")).strip():
98
+ # ✅ MIL GAYA
99
+ return {
100
+ "found": True,
101
+ "uid": uid,
102
+ "found_in": folder_name,
103
+ "scanned_in_folder": scanned,
104
+ "search_log": results + [{
105
+ "folder": folder_name,
106
+ "status": "FOUND",
107
+ "scanned": scanned
108
+ }],
109
+ "data": {
110
+ "user_id": row.get("user_id"),
111
+ "username": row.get("username"),
112
+ "first_name": row.get("first_name"),
113
+ "last_name": row.get("last_name"),
114
+ "phone": row.get("phone"),
115
+ "email": row.get("email"),
116
+ "status": row.get("status"),
117
+ "linked_id": row.get("linked_id"),
118
+ "linked_name": row.get("linked_name"),
119
+ "linked_handle": row.get("linked_handle"),
120
+ }
121
  }
122
+
123
+ if scanned >= max_scan:
124
+ break
125
 
126
+ # Is folder mein nahi mila
127
+ results.append({
128
+ "folder": folder_name,
129
+ "status": "not_found",
130
+ "scanned": scanned
131
+ })
132
 
133
+ # Kahin nahi mila
134
  return {
135
  "found": False,
136
  "uid": uid,
137
+ "search_log": results,
138
+ "message": "Poore dataset mein nahi mila"
 
 
 
139
  }
140
 
141
  except Exception as e: