osamabyc86 commited on
Commit
23a7950
ยท
verified ยท
1 Parent(s): 02c9bc3

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +14 -121
app.py CHANGED
@@ -1,135 +1,28 @@
1
  #!/usr/bin/env python3
2
  import os
3
- import threading
4
- import time
5
- import socket
6
- import requests
7
- import importlib
8
- import random
9
  from flask import Flask, request, jsonify
 
10
 
11
- # โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ ุฅุนุฏุงุฏุงุช ุนุงู…ุฉ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
12
- CURRENT_SERVER = None
13
- PORT = None
14
- CONNECTED = threading.Event()
15
  app = Flask(__name__)
16
 
17
- # โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ ุฏูˆุงู„ ู…ุญุฑูƒ ุงู„ุงุชุตุงู„ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
18
- def _load_peer_discovery():
19
- import peer_discovery as pd
20
- importlib.reload(pd)
21
- return pd
22
-
23
- def _pick_random_server(pd):
24
- servers = list(getattr(pd, "CENTRAL_REGISTRY_SERVERS", []))
25
- if not servers:
26
- raise RuntimeError("ู„ุง ุชูˆุฌุฏ ุณูŠุฑูุฑุงุช ููŠ peer_discovery.CENTRAL_REGISTRY_SERVERS")
27
- random.shuffle(servers)
28
- return servers[0]
29
-
30
- def _get_local_ip(pd):
31
- if hasattr(pd, "get_local_ip"):
32
- return pd.get_local_ip()
33
- s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
34
- try:
35
- s.connect(("8.8.8.8", 80))
36
- return s.getsockname()[0]
37
- except Exception:
38
- return "127.0.0.1"
39
- finally:
40
- s.close()
41
-
42
- def _lan_port(pd):
43
- return int(getattr(pd, "LAN_PORT", os.getenv("LAN_PORT", 7520)))
44
-
45
- def _can_bind_low_ports():
46
- if os.name != "nt":
47
- try:
48
- return os.geteuid() == 0
49
- except Exception:
50
- return False
51
- return True
52
-
53
- def _is_port_free(port, host="0.0.0.0"):
54
- with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
55
- s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
56
- try:
57
- s.bind((host, int(port)))
58
- return True
59
- except OSError:
60
- return False
61
-
62
- def _try_register(server, port, node_id, ip):
63
- payload = {"node_id": node_id, "ip": ip, "port": int(port)}
64
- r = requests.post(f"{server}/register", json=payload, timeout=6)
65
- r.raise_for_status()
66
-
67
- def _sequential_ports(pd):
68
- lan_p = _lan_port(pd)
69
- start = 1 if _can_bind_low_ports() else 1025
70
- for p in range(start, 10000):
71
- if p == lan_p:
72
- continue
73
- yield p
74
-
75
- def _connect_until_success():
76
- global CURRENT_SERVER, PORT
77
- backoff = 1
78
- while True:
79
- pd = _load_peer_discovery()
80
- server = _pick_random_server(pd)
81
- node_id = os.getenv("NODE_ID", socket.gethostname())
82
- ip = _get_local_ip(pd)
83
- print(f"๐Ÿ”Ž Trying server: {server}")
84
- print("๐Ÿš€ Started connection attempt loop")
85
- any_attempt = False
86
- for p in _sequential_ports(pd):
87
- any_attempt = True
88
- if not _is_port_free(p):
89
- continue
90
- try:
91
- _try_register(server, p, node_id, ip)
92
- CURRENT_SERVER, PORT = server, int(p)
93
- CONNECTED.set()
94
- print(f"โœ… Connected to {server} with port {PORT:04d}")
95
- return
96
- except Exception as e:
97
- if p % 1000 == 0:
98
- print(f"โ€ฆstill scanning (last error on {server}:{p:04d}) -> {e}")
99
- if not any_attempt:
100
- print("โš ๏ธ ู„ู… ุชูุฌุฑูŽ ู…ุญุงูˆู„ุงุช ู…ู†ุงูุฐ (ุชุญู‚ู‚ ู…ู† ุตู„ุงุญูŠุงุช ุงู„ู…ู†ุงูุฐ ุงู„ู…ู†ุฎูุถุฉ).")
101
- print(f"โ†ป No success on {server}. Picking a new serverโ€ฆ")
102
- time.sleep(backoff)
103
- backoff = min(backoff * 2, 10)
104
-
105
- def start_connect_loop():
106
- print("๐ŸŒ€ Launching connection thread")
107
- threading.Thread(target=_connect_until_success, daemon=True).start()
108
-
109
- # โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ ุชุดุบูŠู„ ุงู„ุงุชุตุงู„ ุงู„ุฎุงุฑุฌูŠ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
110
- start_connect_loop()
111
-
112
- # โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ (ุงุฎุชูŠุงุฑูŠ) ุชุดุบูŠู„ ุฎุงุฏู… ุฎุงุฑุฌูŠ ุจุนุฏ ุงู„ุงุชุตุงู„ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
113
- def run_rpc_server_after_connected():
114
- CONNECTED.wait()
115
- print(f"๐Ÿš€ RPC Server ready on PORT={PORT}")
116
- from rpc_server import rpc_app
117
- rpc_app.run(host="0.0.0.0", port=PORT)
118
-
119
- threading.Thread(target=run_rpc_server_after_connected, daemon=True).start()
120
-
121
- # โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ ู…ุณุงุฑุงุช Flask ุงู„ุฃุณุงุณูŠุฉ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
122
  @app.get("/")
123
- def hello():
124
- return f"โœ… ุงู„ุญู…ุฏ ู„ู„ู‡โ€ฆ ุงู„ุชุทุจูŠู‚ ูŠุนู…ู„ ุนู„ู‰ Hugging Face Spaces! [ุณูŠุฑูุฑ: {CURRENT_SERVER}, ุจูˆุฑุช: {PORT}]"
 
 
 
 
 
125
 
126
  @app.post("/generate")
127
  def generate():
128
  data = request.json or {}
129
  text = data.get("text", "")
130
- return jsonify({"echo": text[::-1]})
 
131
 
132
- # โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ ุชุดุบูŠู„ ุชุทุจูŠู‚ Flask ุงู„ุฃุณุงุณูŠ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
133
  if __name__ == "__main__":
134
- print("๐Ÿš€ Starting Flask server on port 7860...")
135
- app.run(host="0.0.0.0", port=PORT, debug=True)
 
 
1
  #!/usr/bin/env python3
2
  import os
 
 
 
 
 
 
3
  from flask import Flask, request, jsonify
4
+ from peer_discovery import PORT, CURRENT_SERVER, PEERS
5
 
 
 
 
 
6
  app = Flask(__name__)
7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
  @app.get("/")
9
+ def home():
10
+ return f"""
11
+ <h2>โœ… Hugging Face App ูŠุนู…ู„</h2>
12
+ <p><b>๐ŸŒ ุงู„ุณูŠุฑูุฑ ุงู„ู…ุฑูƒุฒูŠ:</b> {CURRENT_SERVER}</p>
13
+ <p><b>๐Ÿง  ุงู„ู…ู†ูุฐ ุงู„ุฐูŠ ุชุนู…ู„ ุนู„ูŠู‡:</b> {PORT}</p>
14
+ <p><b>๐Ÿค ุนุฏุฏ ุงู„ุฃู‚ุฑุงู† (Peers):</b> {len(PEERS)}</p>
15
+ """
16
 
17
  @app.post("/generate")
18
  def generate():
19
  data = request.json or {}
20
  text = data.get("text", "")
21
+ response = text[::-1] # ุนูƒุณ ุงู„ู†ุต ูƒู…ุซุงู„
22
+ return jsonify({"result": response})
23
 
24
+ # ู†ู‚ุทุฉ ุงู„ุชุดุบูŠู„ ุงู„ุฑุฆูŠุณูŠุฉ
25
  if __name__ == "__main__":
26
+ port = int(os.environ.get("PORT", 7860)) # Hugging Face ูŠู…ุฑุฑ ู‡ุฐุง ุงู„ู…ุชุบูŠุฑ ุชู„ู‚ุงุฆูŠู‹ุง
27
+ print(f"๐Ÿš€ Flask app is starting on port {port}...")
28
+ app.run(host="0.0.0.0", port=port)