CORVO-AI commited on
Commit
5492f08
·
verified ·
1 Parent(s): 301a9ad

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +50 -31
app.py CHANGED
@@ -1,45 +1,64 @@
 
1
  import requests
2
  import json
3
 
4
- # Headers for you.com API (with empty cookie)
5
- headers = {
6
- "cookie" : "uuid_guest=12653d55-2f42-4fbd-98bb-33edf8714123; uuid_guest_backup=12653d55-2f42-4fbd-98bb-33edf8714123; AF_DEFAULT_MEASUREMENT_STATUS=true; _ga=GA1.1.1620651973.1726065059; afUserId=26bc0a6c-f7b2-42bb-a950-16348632bbff-p; FPID=FPID2.2.rnWEp46VSGiozCeyM8uHn6Con89GxAFIKMqggZYT0wc%3D.1726065059; FPAU=1.2.1152748874.1726065189; DSR=eyJhbGciOiJSUzI1NiIsImtpZCI6IlNLMmpJbnU3SWpjMkp1eFJad1psWHBZRUpQQkFvIiwidHlwIjoiSldUIn0.eyJhbXIiOlsib2F1dGgiXSwiYXV0aDBJZCI6bnVsbCwiZHJuIjoiRFNSIiwiZW1haWwiOiJhbGhvb3JzaG9wcEBnbWFpbC5jb20iLCJleHAiOjE3NTc1MTQ3OTcsImdpdmVuTmFtZSI6IkFsaG9vciIsImlhdCI6MTcyNjA2NTE5NywiaXNzIjoiUDJqSW50dFJNdVhweVlaTWJWY3NjNEM5WjBSVCIsImxhc3ROYW1lIjoiU2hvcHAiLCJuYW1lIjoiQWxob29yIFNob3BwIiwicGljdHVyZSI6Imh0dHBzOi8vbGgzLmdvb2dsZXVzZXJjb250ZW50LmNvbS9hL0FDZzhvY0x5U3YxS3BqTEcyc1Mybjhsa3A3MGpJZGJ3VkNFMWpaM0Q5ZDhzdFI2bldvUlVvdz1zOTYtYyIsInN0eXRjaElkIjpudWxsLCJzdWIiOiJVMmx2ZXVFbTU0RmY3cDRBUXB5NU5FTURteXplIiwidGVuYW50SW52aXRhdGlvbiI6bnVsbCwidGVuYW50SW52aXRlciI6bnVsbCwidXNlcklkIjoiVTJsdmV1RW01NEZmN3A0QVFweTVORU1EbXl6ZSIsInZlcmlmaWVkRW1haWwiOnRydWV9.p5kyNNqq1ELBZ8AGhI6SsRccE_XPK04qE1DhBWI06D1MEksoETLlolHtr8yGUYABGMRtmnhGpiohkEsmaroia7ezQYe4z_vYbepnE0IsuhsH4H6BL8mBogPER6VrmeaEvgNzOGiqGNspMZkkNKPP46f5cZQfFYhPgVD2H_hhC2WlRhwzmA_KBOxSXDnHsuFYIv51aqkAyzUguL_IdG7CajMGkMBf4noTE_6IuBS18_tTUsTgcgMqecFbKfySSOSWMgLUIpZUI4_lNWP7shsvkDI7xsuATrGf7Ci08PyEo0UMmI44EduiZGuCRONuDlFrAYpkeGPZugBlr7SNaBYBVA; tdl_youpro=1020fccf1fab5bf2b1df65da9b6afb; safesearch_guest=Moderate; youpro_subscription=false; you_subscription=freemium; safesearch_b2a2fdf678a327a1f0d04c5a6944ed5165725553bb48ef436dd66c7908778261=Moderate; youchat_personalization=true; youchat_smart_learn=true; _gcl_au=1.1.1532377395.1731247864; guest_has_seen_legal_disclaimer=true; ai_model=gpt_4o; __hstc=118907862.6faf8ebdfa945b79546e019fa9f8537e.1731671057064.1731671057064.1731671057064.1; hubspotutk=6faf8ebdfa945b79546e019fa9f8537e; AF_SYNC=1733581100809; _clck=3hwjik%7C2%7Cfri%7C0%7C1715; ld_context=%7B%22kind%22%3A%22user%22%2C%22key%22%3A%2212653d55-2f42-4fbd-98bb-33edf8714123%22%2C%22email%22%3A%22alhoorshopp%40gmail.com%22%2C%22country%22%3A%22FR%22%2C%22userAgent%22%3A%22Mozilla%2F5.0%20(Windows%20NT%2010.0%3B%20Win64%3B%20x64)%20AppleWebKit%2F537.36%20(KHTML%2C%20like%20Gecko)%20Chrome%2F131.0.0.0%20Safari%2F537.36%22%2C%22secUserAgent%22%3A%22%5C%22Google%20Chrome%5C%22%3Bv%3D%5C%22131%5C%22%2C%20%5C%22Chromium%5C%22%3Bv%3D%5C%22131%5C%22%2C%20%5C%22Not_A%20Brand%5C%22%3Bv%3D%5C%2224%5C%22%22%7D; daily_query_date=Mon%20Dec%2009%202024; _cfuvid=bOXAnSwqQYBdnpfVngYyCdFLJcXPEWdHxixDpa10xR8-1733736273758-0.0.1.1-604800000; FPLC=lwVXF0r2LJ8awkTN9qz%2BocoRR3Io3zeI8ZxucbP4Ndr6xaEmxUK%2FiqgcJCkgAW%2BKn2yzf%2BIN4YdjuB7seBcQYJwkL9OpZCAJPKcC%2FDr%2Bj4jlG8jOYo%2B7cK8WYxlmtw%3D%3D; _gtmeec=eyJlbSI6ImEwNDQwMmZkOTI4NGQ2NGY3NWM3ZTY5YzIxY2NmZGZjNDhhZDIzNzc5MDJiYmNlYjk2MDMwYWFkZTk1NzdlYmYiLCJjdCI6IjJhNWNhYzcwZTlmMTFhM2I0MmY2YmI0YjQzMmE0ZmUxNmE2ZWNlNDQ1ZjgzZTFiMjJmODQ4M2RkZTA3MGY2OGUiLCJzdCI6ImVhZGUxZTEyNjhlMjhlMzVhNGI3MWM2OTQyNjBjMDIyNGRhNGQ2NWZmZGI0MzVlNTA4MTM0NmZlYTQxMzVhODgiLCJ6cCI6IjJkN2RkY2Q0MTljMDM0OWUwN2QxZDU4NjVjMGJhMTRkODVhMjNlZWM3Yjc3NDU5NDVkNzhmOWJjZjMwZjA2YjAiLCJjb3VudHJ5IjoiNjdhZDhmNDFhN2JiMGExOGM0NWYzZWZkOGY2YTMyYmRjZDgzMmJjZjhmM2YyZWI0NDAwNmMwM2Q1MzA3NmUxOCJ9; __cf_bm=gkaFsGHBP_ZKs4DCnaKBI31HQIR.Bfss33yZhZLg9Ng-1733738316-1.0.1.1-1aT49AezmRP8AiVIrE7_p9oCT4J02YSpXiZvZOQNr2Bri35JLKc0l3ZVLK5R4_CtwL_d7ucb4AqspM951T1Ssxu.xifCxdnX_joyuI4RMjI; cf_clearance=r.kpp7TM.kwwEQjivR1FsXBjbV_0PRS0o_g4kvW6ZOA-1733739680-1.2.1.1-UnUQY4kbIL6Ds2UZ_noT5OOgR9iY5JTB9d73XDZZbQnOq0a4LGqKB__FCySChdDtGH1tkM4Yigb6pYsKAZ7cC.pdiN2lfCNGrG1.D4.n2zc6MyReVw_EDDHttKgUjGlRL44f1YJu0sNxwMHA3T_mF4.jmjvGW0KVS_UqJ.xhWDcrxAvSFCl5VrnyAulQ6Sd.ypm23Qm1Q9pPpK7KDrhwMBiTwFQq7sOcBSwzZRRtty3_peJAccgHke3ndC86o5S6BvgWwk5Izs5nDjmDVehj3TSdC0MbvNw3dHGjIrCccCJeVNa85JdhHbptv96Qnzcn8JWHXxTfpa2nTmxOKlZoq3RNOXDGEYspbCX3hiRJAzwlixHw0FaetgmzRkD2X9moOr3I6Ey6zaiWiuKfTuJ_8A; DS=eyJhbGciOiJSUzI1NiIsImtpZCI6IlNLMmpJbnU3SWpjMkp1eFJad1psWHBZRUpQQkFvIiwidHlwIjoiSldUIn0.eyJhbXIiOlsib2F1dGgiXSwiYXV0aDBJZCI6bnVsbCwiZHJuIjoiRFMiLCJlbWFpbCI6ImFsaG9vcnNob3BwQGdtYWlsLmNvbSIsImV4cCI6MTczNDk0OTI4MiwiZ2l2ZW5OYW1lIjoiQWxob29yIiwiaWF0IjoxNzMzNzM5NjgyLCJpc3MiOiJQMmpJbnR0Uk11WHB5WVpNYlZjc2M0QzlaMFJUIiwibGFzdE5hbWUiOiJTaG9wcCIsIm5hbWUiOiJBbGhvb3IgU2hvcHAiLCJwaWN0dXJlIjoiaHR0cHM6Ly9saDMuZ29vZ2xldXNlcmNvbnRlbnQuY29tL2EvQUNnOG9jTHlTdjFLcGpMRzJzUzJuOGxrcDcwaklkYndWQ0UxalozRDlkOHN0UjZuV29SVW93PXM5Ni1jIiwicmV4cCI6IjIwMjUtMTItMDhUMTA6MjE6MjJaIiwic3R5dGNoSWQiOm51bGwsInN1YiI6IlUybHZldUVtNTRGZjdwNEFRcHk1TkVNRG15emUiLCJ0ZW5hbnRJbnZpdGF0aW9uIjpudWxsLCJ0ZW5hbnRJbnZpdGVyIjpudWxsLCJ1c2VySWQiOiJVMmx2ZXVFbTU0RmY3cDRBUXB5NU5FTURteXplIiwidmVyaWZpZWRFbWFpbCI6dHJ1ZX0.PuCvp8yax-s_Fqn_9CUMph03cbwwAp5tP8Ib6V1TIhLpdINlW7-F5F3VdCSQEl5cCsSHuSxnIx52uFNdb0d7QNUnJDUOV95lenk9_M-ne0n8w33IOSDidNbcGSvtRDGNUkLLjokkh7bATmxjiX13hCH3bxYOxFErBWIPr0OVuQCY-IjOmWnw-MIvw3yaho-0SbaAKAkk2NVen0_lJVAU67EQNgcRqyHjAs4u3f4T9YtIIOA3mLR9xSZdh59g39-DyxDq8FQXRO2B4v5sQshmBWms5JdlHD3Vn9jtFfldRPd__Q1YGzytpogpwbyZZKd5dVJLcDeBIXYo5gUG5cn_wg; ab.storage.deviceId.dcee0642-d796-4a7b-9e56-a0108e133b07=g%3Abd7f481f-f2a4-2851-c570-f915decb5bd2%7Ce%3Aundefined%7Cc%3A1726065048731%7Cl%3A1733739676118; ab.storage.userId.dcee0642-d796-4a7b-9e56-a0108e133b07=g%3AU2lveuEm54Ff7p4AQpy5NEMDmyze%7Ce%3Aundefined%7Cc%3A1726065077561%7Cl%3A1733739676119; ab.storage.sessionId.dcee0642-d796-4a7b-9e56-a0108e133b07=g%3A12f556f1-d509-a72a-f1ca-b06cd93ad1fb%7Ce%3A1733741477749%7Cc%3A1733739676118%7Cl%3A1733739677749; _ga_2N7ZM9C56V=GS1.1.1733739642.11.1.1733739688.0.0.339358602; FPGSID=1.1733739699.1733739699.G-WYGVQX1R23.SlsAxbpKVxX3XSYobUX90Q; daily_query_count=1; total_query_count=16",
7
- "Accept": "text/event-stream",
8
- "Accept-Encoding": "gzip, deflate, br, zstd",
9
- "Accept-Language": "en-US,en;q=0.9,ar;q=0.8",
10
- "Cache-Control": "no-cache",
11
- "Connection": "keep-alive",
12
- "Host": "you.com",
13
- "Referer": "https://you.com/search?q=%D8%A7%D8%AB%D8%BA&fromSearchBar=true&tbm=youchat&chatMode=default&cid=c0_7d4eb946-cc48-4fe0-8a90-0625e6d49ea7",
14
- "Sec-CH-UA": '"Google Chrome";v="131", "Chromium";v="131", "Not_A Brand";v="24"',
15
- "Sec-CH-UA-Arch": '"x86"',
16
- "Sec-CH-UA-Bitness": '"64"',
17
- "Sec-CH-UA-Full-Version": '"131.0.6778.87"',
18
- "Sec-CH-UA-Mobile": "?0",
19
- "Sec-CH-UA-Model": '""',
20
- "Sec-CH-UA-Platform": '"Windows"',
21
- "Sec-CH-UA-Platform-Version": '"10.0.0"',
22
- "Sec-Fetch-Dest": "empty",
23
- "Sec-Fetch-Mode": "cors",
24
- "Sec-Fetch-Site": "same-origin",
25
- "User -Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
26
 
27
- }
28
 
29
- user_message = "HI"
 
 
 
 
30
 
31
- chat_history = "user: Hey there"
 
32
 
33
- ID = "user_mode_e06ed9c3-ad9c-4e22-8e3a-9f5775bdd6db"
 
 
 
 
 
 
 
34
 
35
- # Construct the URL for you.com API request
36
- url = f"https://you.com/api/streamingSearch?page=1&count=10&safeSearch=Moderate&mkt=fr-FR&enable_worklow_generation_ux=true&domain=youchat&use_personalization_extraction=true&queryTraceId=0a4e7382-705c-4391-9344-58f09d429b05&chatId=7d4eb946-cc48-4fe0-8a90-0625e6d49ea7&conversationTurnId=43947390-63c6-47de-b0b0-e8ce47e47397&pastChatLength=1&selectedChatMode=default&enable_agent_clarification_questions=true&traceId=7d4eb946-cc48-4fe0-8a90-0625e6d49ea7|43947390-63c6-47de-b0b0-e8ce47e47397|2024-12-09T10:21:29.954Z&use_nested_youchat_updates=true&q=hey&chat=%5B%7B%22question%22%3A%22%D8%A7%D8%AB%D8%BA%22%2C%22answer%22%3A%22It%20seems%20like%20you%27ve%20entered%20%5C%22%D8%A7%D8%AB%D8%BA%2C%5C%22%20which%20is%20an%20Arabic%20term.%20According%20to%20the%20search%20results%2C%20the%20word%20%5C%22%D8%A7%D8%AB%D8%BA%5C%22%20translates%20to%20%5C%22blat%5C%22%20in%20English.%20If%20you%20need%20more%20information%20or%20further%20assistance%2C%20feel%20free%20to%20ask!%22%7D%5D"
37
 
38
- # Send the request to you.com
39
- response = requests.get(url, headers=headers, stream=True)
 
 
 
 
 
 
 
 
 
 
40
 
41
- print(response.text)
 
 
42
 
 
 
 
43
 
 
 
 
 
 
 
 
44
 
 
45
 
 
 
 
 
 
 
1
+ from flask import Flask, request, jsonify
2
  import requests
3
  import json
4
 
5
+ app = Flask(__name__)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6
 
 
7
 
8
+ @app.route('/duckchat', methods=['POST'])
9
+ def duckchat():
10
+ try:
11
+ # Get the input data from the request
12
+ input_data = request.json
13
 
14
+ if not input_data or 'messages' not in input_data:
15
+ return jsonify({"error": "Invalid input. 'messages' field is required."}), 400
16
 
17
+ # Get the status endpoint to fetch x-vqd-4
18
+ status_url = "https://duckduckgo.com/duckchat/v1/status"
19
+ status_headers = {
20
+ "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",
21
+ "x-vqd-accept": "1"
22
+ }
23
+ status_response = requests.get(status_url, headers=status_headers)
24
+ x_vqd_4 = status_response.headers.get("x-vqd-4", "")
25
 
26
+ if not x_vqd_4:
27
+ return jsonify({"error": "Failed to retrieve x-vqd-4 token."}), 500
28
 
29
+ # Send the chat message
30
+ chat_url = "https://duckduckgo.com/duckchat/v1/chat"
31
+ chat_headers = {
32
+ "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",
33
+ "x-vqd-4": x_vqd_4
34
+ }
35
+ chat_payload = {
36
+ "messages": input_data['messages'],
37
+ "model": input_data.get('model', "gpt-4o-mini")
38
+ }
39
+
40
+ chat_response = requests.post(chat_url, headers=chat_headers, json=chat_payload)
41
 
42
+ # Check if the response is successful
43
+ if chat_response.status_code != 200:
44
+ return jsonify({"error": "Failed to fetch response from DuckDuckGo Chat API."}), chat_response.status_code
45
 
46
+ # Process the response
47
+ response_lines = chat_response.text.splitlines()
48
+ final_response = ""
49
 
50
+ for line in response_lines:
51
+ try:
52
+ data = json.loads(line.replace("data: ", ""))
53
+ if "message" in data:
54
+ final_response += data["message"]
55
+ except json.JSONDecodeError:
56
+ continue
57
 
58
+ return jsonify({"response": final_response})
59
 
60
+ except Exception as e:
61
+ return jsonify({"error": str(e)}), 500
62
+
63
+ if __name__ == "__main__":
64
+ app.run(host="0.0.0.0", port=7860)