File size: 5,844 Bytes
9f5e7e6
 
333b865
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9f5e7e6
 
333b865
 
 
 
9f5e7e6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
import json, requests
import gradio as gr
import uuid

def generate_uuid():
    random_uuid = uuid.uuid4()
    random_uuid_str = str(random_uuid)
    formatted_uuid = f"{random_uuid_str[0:8]}-{random_uuid_str[9:13]}-{random_uuid_str[14:18]}-{random_uuid_str[19:23]}-{random_uuid_str[24:]}"
    return formatted_uuid

def create_new_chat(user_id,cookie):
    url = f"https://claude.ai/api/organizations/{user_id}/chat_conversations"
    uuid = generate_uuid()

    payload = json.dumps({"uuid": uuid, "name": ""})
    headers = {
        'User-Agent':
            'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0',
        'Accept-Language': 'en-US,en;q=0.5',
        'Referer': 'https://claude.ai/chats',
        'Content-Type': 'application/json',
        'Origin': 'https://claude.ai',
        'DNT': '1',
        'Connection': 'keep-alive',
        'Cookie': cookie,
        'Sec-Fetch-Dest': 'empty',
        'Sec-Fetch-Mode': 'cors',
        'Sec-Fetch-Site': 'same-origin',
        'TE': 'trailers'
    }

    # response = requests.request("POST", url, headers=headers, data=payload)
    # 使用代理,解决国内网络不能访问问题
    # response = request("POST", url, headers=headers, data=payload, proxies=proxies)
    response = requests.post(url, headers=headers, data=payload)
    print(f"新的对话页面:{response}")

    # Returns JSON of the newly created conversation information
    return response.json()

def request_to_v2(message, cookie, user_id, channel_id,context=[]):

    datas = create_new_chat(user_id,cookie)
    print(datas)
    exit(0)
    
    timeout = 5*60 #5分钟不回复,显示超时
    context = [message]
    headers = {
        # ':Authority': 'claude.ai',
        # ':Method': 'POST',
        # ':Path': '/api/append_message',
        # ':Scheme': 'https',
        'Content-Type': 'application/json',
        'Origin': 'https://claude.ai',
        'Referer': f'https://claude.ai/chat/{channel_id}',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
        'Cookie': cookie,
        'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
        # 'Accept-Encoding': 'gzip, deflate, br',
        'Accept': 'text/event-stream, text/event-stream',
        'Sec-Ch-Ua': '"Not.A/Brand";v="8", "Chromium";v="114", "Google Chrome";v="114"',
        'Sec-Ch-Ua-Mobile': '?0',
        'Sec-Ch-Ua-Platform': '"Windows"',
        'Sec-Fetch-Dest': 'empty',
        'Sec-Fetch-Mode': 'cors',
        'Sec-Fetch-Site': 'same-origin',
        'Connection': 'keep-alive',
    }
    post_msg_url = 'https://claude.ai/api/append_message'
    post_msg_data = {
        "completion":{
            "incremental":True,
            "prompt": message,
            "timezone":"Asia/Shanghai",
            "model":"claude-2"
        },
        "organization_uuid": user_id,
        "conversation_uuid": channel_id,
        "text": message,
        "attachments": []
    }
    post_msg_data = json.dumps(post_msg_data)
    # print(post_msg_data)

    try:
        response = requests.post(post_msg_url, headers=headers, data=post_msg_data, verify=False, stream=False,timeout = timeout)
        bots = ""
        print("a"*100)
        for data in response.iter_lines():
            if data:
                # 将字节字符串转换为字符串
                data_str = data.decode('utf-8')
                # 删除开头的 "data: " 部分
                data_str = data_str.replace("data: ", "")
                data_json = json.loads(data_str)
                # print(data_json)
                bots +=  data_json["completion"]
        print(bots)
        context += [bots]
        responses = [(u, b) for u, b in zip(context[::2], context[1::2])]
        return responses, context

    except Exception as e:
        print(">>>>>> 查询失败")
        print(e)
        response =">>>>>> 查询失败\n报错信息为:"+ str(e)
        context += [response]
        responses = [(u, b) for u, b in zip(context[::2], context[1::2])]

        return responses, context



with gr.Blocks() as dialog_app:
    gr.HTML("""<h1 align="center">Claude2-API-xiaolv</h1>""")
    with gr.Tab("Claude2 API xiaolv"):
        gr.Markdown("""
        ## 需要传入的参数有:
        1.cookie:intercom-device-id-lupk8zyo=.......
        2.user_id:对应 organization_uuid
        3.channel_id:对应 conversation_uuid
        """)

        with gr.Row():
            with gr.Column(scale=0.4):
                cookies = gr.Textbox(lines=2, label="输入cookies")
                user_id = gr.Textbox(lines=2, label="输入user_id/organization_uuid")
                channel_id = gr.Textbox(lines=2, label="输入channel_id/conversation_uuid")
                # chatbot = gr.Chatbot()
            with gr.Column(scale=0.6):
                chatbot = gr.Chatbot([])

            state = gr.State([])

        with gr.Row():
            inputs = gr.Textbox(
                label="输入问题",
                placeholder="请输入你的文本,确保已经正确填入cookies、user_id、channel_id"
            )
        inputs.submit(request_to_v2, [inputs, cookies, user_id,channel_id,state], [chatbot, state])
        send = gr.Button("发送请求.....")
        send.click(request_to_v2, [inputs, cookies, user_id,channel_id,state], [chatbot, state], api_name="xiaolvgpt", show_progress=True)


        gr.Markdown("""
        清除历史记录是,请输入:```/resrt```""")   
        
# 为网站设置密码防止滥用
# dialog_app.launch(auth=("admin", "2240560729"),show_error=True,show_api=True,share=True)
# dialog_app.launch(auth=("admin", "2240560729"),show_error=True)
dialog_app.launch(show_error=True)
# dialog_app.launch(show_error=True,show_api=True,share=True)