gitdeem commited on
Commit
7e104f4
·
verified ·
1 Parent(s): 914f576

Upload 3 files

Browse files
Files changed (3) hide show
  1. Dockerfile +9 -0
  2. README.md +6 -5
  3. app.py +81 -0
Dockerfile ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ FROM python:3.9
2
+
3
+ WORKDIR /code
4
+
5
+ COPY . .
6
+
7
+ EXPOSE 8000
8
+
9
+ CMD ["python", "app.py"]
README.md CHANGED
@@ -1,10 +1,11 @@
1
  ---
2
- title: Live
3
- emoji: 👀
4
- colorFrom: purple
5
- colorTo: red
6
  sdk: docker
7
  pinned: false
 
 
8
  ---
9
 
10
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
  ---
2
+ title: live
3
+ emoji: 🌍
4
+ colorFrom: yellow
5
+ colorTo: indigo
6
  sdk: docker
7
  pinned: false
8
+ license: mit
9
+ app_port: 8000
10
  ---
11
 
 
app.py ADDED
@@ -0,0 +1,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import uuid
2
+ import requests
3
+ import http.server
4
+ import webbrowser
5
+ import socketserver
6
+ import os
7
+ import random
8
+
9
+ def get_refresh_tokens():
10
+ tokens = os.environ.get('REFRESH_TOKENS', '')
11
+ return [token.strip() for token in tokens.split(',') if token.strip()]
12
+
13
+ def refresh_access_token(refresh_token):
14
+ url = 'https://token.oaifree.com/api/auth/refresh'
15
+ headers = {
16
+ 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
17
+ }
18
+ data = {
19
+ 'refresh_token': refresh_token
20
+ }
21
+
22
+ response = requests.post(url, headers=headers, data=data)
23
+ if response.status_code == 200:
24
+ data = response.json()
25
+ return data['access_token']
26
+
27
+ return None
28
+
29
+ def get_livekit_url(access_token):
30
+ headers = {
31
+ "content-type": "application/json",
32
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
33
+ "authorization": f"Bearer {access_token}",
34
+ }
35
+
36
+ res = requests.post("https://chatgpt.com/voice/get_token", headers=headers, cookies={'__cf_bm': ''}, json={
37
+ "voice": "cove",
38
+ "voice_mode": "standard",
39
+ "parent_message_id": str(uuid.uuid4()),
40
+ "model_slug": "auto",
41
+ "voice_training_allowed": False,
42
+ "enable_message_streaming": False,
43
+ "language": "zh",
44
+ "video_training_allowed": False,
45
+ "voice_session_id": str(uuid.uuid4())
46
+ }).json()
47
+
48
+ livekit_url = "https://meet.livekit.io"
49
+ url = f"{livekit_url}/custom?liveKitUrl={res['url']}&token={res['token']}#{res['e2ee_key']}"
50
+ return url
51
+
52
+ class RedirectHandler(http.server.SimpleHTTPRequestHandler):
53
+ def do_GET(self):
54
+ refresh_tokens = get_refresh_tokens()
55
+ if not refresh_tokens:
56
+ self.send_error(500, "未设置 REFRESH_TOKENS 环境变量")
57
+ return
58
+
59
+ refresh_token = random.choice(refresh_tokens)
60
+ access_token = refresh_access_token(refresh_token)
61
+ if access_token:
62
+ target_url = get_livekit_url(access_token)
63
+ self.send_response(302)
64
+ self.send_header('Location', target_url)
65
+ self.end_headers()
66
+ else:
67
+ self.send_error(500, "无法获取访问令牌")
68
+
69
+ def run_server(port=8000):
70
+ with socketserver.TCPServer(("", port), RedirectHandler) as httpd:
71
+ print(f"服务器运行在 http://localhost:{port}")
72
+ webbrowser.open(f"http://localhost:{port}")
73
+ httpd.serve_forever()
74
+
75
+ if __name__ == "__main__":
76
+ refresh_tokens = get_refresh_tokens()
77
+ if not refresh_tokens:
78
+ print("请设置 REFRESH_TOKENS 环境变量,多个 token 以逗号分隔")
79
+ else:
80
+ print(f"成功获取 {len(refresh_tokens)} 个 refresh token")
81
+ run_server()