ading2210/poe-api

Discussion about the reasons for poe account bans

fkx816 opened this issue · 42 comments

fkx816 commented

After going through more than 10 poe accounts in my tests, I found that the banning of poe accounts is related to at least the following behaviors(The following tests were performed using the latest version of poe-api and a proxy server.):

  1. Sending a new request before the bot has finished replying. This will result in a ban if it happens a few times, as mentioned by @SuperLiveYou in other issues.
  2. The interval between requests is too short. I recommend a 9-15 second interval between requests; otherwise, there is a high probability of being banned after 15 requests.
  3. The interval between clearing chat history and sending a message to the bot is too short. Surprisingly, this has a high probability of getting banned, even higher than frequent requests. I suggest taking a 30-second break after clearing the chat history.
  4. I noticed that when using the web version of POE normally, a forced page refresh occurs after a large number of conversations. After avoiding the three behaviors that may cause a ban mentioned above, a situation arises where after 30-35 requests to POE's API, the API is successfully requested but there is no response. (On the web page, it shows that the message was successfully sent, but there is no response from the bot's side. At this time, there is no problem using the web version for conversation.) Continuing to request the API under these circumstances will result in multiple requests with only one or two successful responses, and further requests will lead to a ban. To avoid this situation, I automatically disconnect and reconnect the WebSocket after every 9-15 API requests, then clear the current bot's history after a 30-second interval. This effectively avoids the situation where there are multiple requests but only one or two responses.
  5. Even if the above four situations are avoided, a ban will still occur after more than 40 consecutive requests (in my tests, this happened at 43, 45, and around 60 requests). I am not sure of the reason for this ban.
  6. By the way, I found that when using this project for frequent requests, there is a small probability of successfully responding to the API but the web version shows no response (similar to situation 4 mentioned above, but with a response in the API and only successful sending in the web version with no content on the bot's side). This situation usually occurs when the bot's reply content is minimal, and of course, encountering this situation means that a ban is not far off.

At present, the reason for the 5th type of ban is unclear. After avoiding bans from situations 1-4, it is best not to make more than 40 frequent requests within a short period (I encountered this situation within 10 minutes).

If that's the case, this project may require some improvements or adding a wrapper to ensure it won't be banned

@fkx816 或许我们可以私下讨论一些解决办法?我Q:1959921673 如果你有兴趣可以交流一下

Same problem for ChimeraGPT

With problems like this, it's better to avoid using poe...

fkx816 commented

@fkx816 或许我们可以私下讨论一些解决办法?我Q:1959921673 如果你有兴趣可以交流一下

好的

Why poe even bans users for using api. I suspect the last reassn you provided

The fifth is really strange, because the official limit is 25 messages every three hours, which means that heavy users may use it as many as 100 times a day, and poe's subscription service is 600 times a month, why would they block accounts with more than 40 messages a day

Why poe even bans users for using api.

Cuz they are analytics bitches a.k.a. Quora

fkx816 commented

I found that the web version of Poe will send a "receive_POST" post to the server after completing several requests (1-3 times), which includes the bot_response_status, (either "success" or "dropoff", and if there is a bot reply failure, a 'dropoff' message must be sent.) as well as the time it takes for the bot to complete the answer. I don't know if Poe-api simulates this post request, and if not, I think this could be a major difference between the web version and Poe-api.(I don't know if this is related to getting banned)

fkx816 commented

The fifth is really strange, because the official limit is 25 messages every three hours, which means that heavy users may use it as many as 100 times a day, and poe's subscription service is 600 times a month, why would they block accounts with more than 40 messages a day

In fact, I have never been banned for using the web version during testing. I made more than fifty rapid requests within ten minutes on the web version without getting banned. Previously, I had more than 160 normal bot conversations within a few hours without being banned. Therefore, it should only be targeted at non-web users.

The fifth is really strange, because the official limit is 25 messages every three hours, which means that heavy users may use it as many as 100 times a day, and poe's subscription service is 600 times a month, why would they block accounts with more than 40 messages a day

Oh but if i send multiple message in web they dont do anything ig

Why poe even bans users for using api.

Cuz they are analytics bitches a.k.a. Quora

I agree but please dont use offensive language here. This is a friendly place

fkx816 commented

The fifth is really strange, because the official limit is 25 messages every three hours, which means that heavy users may use it as many as 100 times a day, and poe's subscription service is 600 times a month, why would they block accounts with more than 40 messages a day

Oh but if i send multiple message in web they dont do anything ig

Yah, the web version's tolerance is really high, so I think getting banned must be due to something missing , lol.

The fifth is really strange, because the official limit is 25 messages every three hours, which means that heavy users may use it as many as 100 times a day, and poe's subscription service is 600 times a month, why would they block accounts with more than 40 messages a day

Oh but if i send multiple message in web they dont do anything ig

This usually represents what is missing from the reverse API, which means there is no perfect reverse

The fifth is really strange, because the official limit is 25 messages every three hours, which means that heavy users may use it as many as 100 times a day, and poe's subscription service is 600 times a month, why would they block accounts with more than 40 messages a day

Oh but if i send multiple message in web they dont do anything ig

This usually represents what is missing from the reverse API, which means there is no perfect reverse

That is correct for evrrything

I thought when the poe api official will be released, i can use it withiut ban but it is another thing and i still using this

How do i contribute

I guess implimenting a way to login with email directly maybe the only way to prevent this. Brcause i guess the code. Runs poe.com somewhere in the ide or wherever.

I am trying to register multiple accounts and use the tokens in turn to avoid frequent requests from a single token.

fkx816 commented

Hey guys, I found a crucial piece of information. Try not to use the clear chat history function and this can significantly extend the life of an account. I've had two test requests reach over 90 times, and it seems like 100 times is the short-term limit for using this project.

fkx816 commented

Hey guys, I found a crucial piece of information. Try not to use the clear chat history function and this can significantly extend the life of an account. I've had two test requests reach over 90 times, and it seems like 100 times is the short-term limit for using this project.

The premise is to meet the requirements I mentioned above: avoid using the clear chat history function, timed reconnections, and a certain interval between requests.

I don't get how people are getting banned, I've been using my main account on Poe and with this API too with zero problems. I may have even surpassed the message limit too on ocassions. The only time I've had an issue is when I used another account registered with temporary email and it logged me out after couple messages.

Really hoping that Poe and this project won't die out because too many people are abusing it for training data or whatever reason. I feel like this is one of the nicer services that I'd actually consider paying for

Indeed, the GPT-3.5 API is already quite cheap, and the response speed is faster. This is only suitable for individual small-scale use.

hey. I went to poe discord server and asked why they ban people using this. they said automating acciunts. so it means there should be a time interval after each thing you do

Why y’all dislike it

I think heavy users use many time. So maybe adding interval is not a good idea though

I try to send a RECEIVE_POST request every 3 turns and maintain a time interval of 2~4 seconds between each request.
After making approximately 300 consecutive requests, my account is still alive.

In the poe.py, I add recv_post to the generate_payload function.

import random
def generate_payload(query_name, variables):
  if 'recv' == query_name:
    if random.random() > 0.9:
      return [
          {
            "category": "poe/bot_response_speed",
            "data": variables,
          },
          {
            "category":"poe/statsd_event",
            "data":{
              "key":"poe.speed.web_vitals.INP",
              "value": random.randint(100, 125),
              "category":"time",
              "path":"/[handle]",
              "extra_data":{}
              }
          }
      ]
    else:
      return [
          {
            "category": "poe/bot_response_speed",
            "data": variables,
          }
      ]
  
  return {
    "query": queries[query_name],
    "variables": variables
  }

In the send_query function, I replace

 r = request_with_retries(self.session.post, self.gql_url, data=payload, headers=headers)

with

if query_name == "recv":
        r = request_with_retries(self.session.post, self.gql_recv_url, data=payload, headers=headers)
        return None
      else:
        r = request_with_retries(self.session.post, self.gql_url, data=payload, headers=headers)

In the send_message function,
First, I add one argument called recv:

def send_message(self, chatbot, message, with_chat_break=False, timeout=20, recv=False):

Then I send recv_post after the message is received:

    yield message

    if recv:
      time.sleep(1)
      # send a recv post to the server
      message_data = self.send_query("recv", {
        "bot_name": chatbot,
        "time_to_first_typing_indicator":300,
        "time_to_first_subscription_response":600,
        "time_to_full_bot_response":1100,
        "full_response_length":len(last_text)+1,
        "full_response_word_count":len(last_text.split(' '))+1,
        "human_message_id": human_message_id,
        "bot_message_id": self.active_messages[human_message_id],
        "chat_id": chat_id,
        "bot_response_status":"success"
      })
      time.sleep(1)

    del self.active_messages[human_message_id]
    del self.message_queues[human_message_id]

My test code is attached below:

import time
request = 300
wait_time = 600 / request
for i in range(request):
    input = ['How to make an apple pie?', "What's the relationship between luna and moon?", "How to make a cake?"]
    for chunk in client.send_message('a2', input[i%3],  with_chat_break = True, timeout = 20, recv=(i%3==0)):
        pass
    print('Step',i+1)
    time.sleep(wait_time)

The test takes about 41m46s.
image

Besides, I think the daily limit is more than 100 because I have made about 700 requests in 2 hours.

fkx816 commented

Amazing. So it seems that RECEIVE_POST may indeed be related to account suspension. The reason I mentioned trying to avoid clearing chat history above is that I found that after clearing the chat history, a RECEIVE_POST about the initial information is always sent. And these ways(timed disconnection and avoiding clearing chat history) now can be considered as clumsy methods of reducing RECEIVE_POST related errors(?)

I think you're right. Doing reconnection and avoid regularly clearing chat history can be helpful in reducing errors related to receiving posts.

After doing more tests, here's my findings:

  • Even if you make 600 consecutive requests with 1 second time interval, the account won't be banned.
  • In the "600" test, "Response timed out" occurs at 168, 467.
  • "Clearing chat history" will just send a gql_POST (without RECEIVE_POST). "Clearing chat history" won't lead to account ban.
  • Reconnection 30 times in a row with 1s time interval will result in an account ban.

Now we can enjoy playing with the POE API with less issues. 😂

@tic-top can you pull request the code in examples please

noseon commented

the right thing is to implement the fifo system api to process the questions one at a time with time configuration between them

noseon commented

I got banned on 3 accounts right and set up a fifo queue directly in the api so I would have effective control. in case I have a code that does this but it works outside the api

Uhm

I think you're right. Doing reconnection and avoid regularly clearing chat history can be helpful in reducing errors related to receiving posts.

After doing more tests, here's my findings:

  • Even if you make 600 consecutive requests with 1 second time interval, the account won't be banned.
  • In the "600" test, "Response timed out" occurs at 168, 467.
  • "Clearing chat history" will just send a gql_POST (without RECEIVE_POST). "Clearing chat history" won't lead to account ban.
  • Reconnection 30 times in a row with 1s time interval will result in an account ban.

Im gonna try it

im gonna make change in poe.py to sleep 1s if there is a message

fkx816 commented

The solution by tic-top has currently resolved the account blocking issue, and it seems to have been added to the code.

The recv_post code has been merged and is present in v0.4.8.

The recv_post code has been merged and is present in v0.4.8.

So i wont get banned?