snowby666 / poe-api-wrapper

👾 A Python API wrapper for Poe.com. With this, you will have free access to GPT-4, Claude, Llama, Gemini, Mistral and more! 🚀
https://pypi.org/project/poe-api-wrapper/
GNU General Public License v3.0
859 stars 99 forks source link

question about sent_message() #34

Closed llllly26 closed 3 months ago

llllly26 commented 1 year ago

Hi, i get the token through your step, and when i run the code, print(client.get_chat_history()) can return, but when i run the part about for chunk in client.send_message(bot, message):, there is nothing returned. then i debug the code, and i find that there is a problem about self.connect_ws() in api.py. in api.py-line223, self.ws_connected was false, so the program stucks in an infinite loop. But the other one that use my token can correctly run the code, i don't know what is wrong of me.

snowby666 commented 1 year ago

I will update the api soon

snowby666 commented 1 year ago

Can you check if this error still occur with the new version?

llllly26 commented 1 year ago

Can you check if this error still occur with the new version? Hi, i still can not run sucessfully. This time, i even can not run the code print(client.get_chat_history()). But I can run in the old version. The new error is in api.py, line 256, in connect_ws that: image so, i can't verify the send_message() either.
This time i also can not successfully connect.What's wrong? Thank you!

snowby666 commented 1 year ago

Can you check if you re using vpn or proxy while running this code? And It would be better if you can specify your OS and python version.

snowby666 commented 1 year ago

I think there might be a problem with your SSL/TLS setup. If possible can you fork this repo, adjust this line and test on your local machine: line 169 :

self.channel_url = f'wss://{self.ws_domain}.tch.{self.tchannel_data["baseHost"]}/up/{self.tchannel_data["boxName"]}/updates?min_seq={self.tchannel_data["minSeq"]}&channel={self.tchannel_data["channel"]}&hash={self.tchannel_data["channelHash"]}'

to this one:

self.channel_url = f'ws://{self.ws_domain}.tch.{self.tchannel_data["baseHost"]}/up/{self.tchannel_data["boxName"]}/updates?min_seq={self.tchannel_data["minSeq"]}&channel={self.tchannel_data["channel"]}&hash={self.tchannel_data["channelHash"]}'
llllly26 commented 1 year ago

Can you check if you re using vpn or proxy while running this code? And It would be better if you can specify your OS and python version.

my OS is win10,and my python version is 3.10.12

llllly26 commented 1 year ago

I think there might be a problem with your SSL/TLS setup. If possible can you fork this repo, adjust this line and test on your local machine: line 169 :

self.channel_url = f'wss://{self.ws_domain}.tch.{self.tchannel_data["baseHost"]}/up/{self.tchannel_data["boxName"]}/updates?min_seq={self.tchannel_data["minSeq"]}&channel={self.tchannel_data["channel"]}&hash={self.tchannel_data["channelHash"]}'

to this one:

self.channel_url = f'ws://{self.ws_domain}.tch.{self.tchannel_data["baseHost"]}/up/{self.tchannel_data["boxName"]}/updates?min_seq={self.tchannel_data["minSeq"]}&channel={self.tchannel_data["channel"]}&hash={self.tchannel_data["channelHash"]}'

the question is still remaining.

llllly26 commented 1 year ago

I think there might be a problem with your SSL/TLS setup. If possible can you fork this repo, adjust this line and test on your local machine: line 169 :

self.channel_url = f'wss://{self.ws_domain}.tch.{self.tchannel_data["baseHost"]}/up/{self.tchannel_data["boxName"]}/updates?min_seq={self.tchannel_data["minSeq"]}&channel={self.tchannel_data["channel"]}&hash={self.tchannel_data["channelHash"]}'

to this one:

self.channel_url = f'ws://{self.ws_domain}.tch.{self.tchannel_data["baseHost"]}/up/{self.tchannel_data["boxName"]}/updates?min_seq={self.tchannel_data["minSeq"]}&channel={self.tchannel_data["channel"]}&hash={self.tchannel_data["channelHash"]}'

if the problem is from the port? in my win10, http(s) port is: 4780; socks port is 4781. whether your code use port anywhere? image

snowby666 commented 1 year ago

can you check this for me? https://poe.com/api/settings

llllly26 commented 1 year ago

https://poe.com/api/settings

{"tchannelData":{"minSeq":"8130883414","channel":"poe-chan60-8888-mkhevzuqednzwejckppj","channelHash":"15169644638001127031","boxName":"chan60-8888","baseHost":"poe.com","targetUrl":"","enableWebsocket":true}}

snowby666 commented 1 year ago

I think there might be a problem with your SSL/TLS setup. If possible can you fork this repo, adjust this line and test on your local machine: line 169 :

self.channel_url = f'wss://{self.ws_domain}.tch.{self.tchannel_data["baseHost"]}/up/{self.tchannel_data["boxName"]}/updates?min_seq={self.tchannel_data["minSeq"]}&channel={self.tchannel_data["channel"]}&hash={self.tchannel_data["channelHash"]}'

to this one:

self.channel_url = f'ws://{self.ws_domain}.tch.{self.tchannel_data["baseHost"]}/up/{self.tchannel_data["boxName"]}/updates?min_seq={self.tchannel_data["minSeq"]}&channel={self.tchannel_data["channel"]}&hash={self.tchannel_data["channelHash"]}'

if the problem is from the port? in my win10, http(s) port is: 4780; socks port is 4781. whether your code use port anywhere? image

No, the lib doesn't use port. How about setting up a virtual environment to test it first. This time try using requests or httpx lib then send a request to a url to check if it works

llllly26 commented 1 year ago

I think there might be a problem with your SSL/TLS setup. If possible can you fork this repo, adjust this line and test on your local machine: line 169 :

self.channel_url = f'wss://{self.ws_domain}.tch.{self.tchannel_data["baseHost"]}/up/{self.tchannel_data["boxName"]}/updates?min_seq={self.tchannel_data["minSeq"]}&channel={self.tchannel_data["channel"]}&hash={self.tchannel_data["channelHash"]}'

to this one:

self.channel_url = f'ws://{self.ws_domain}.tch.{self.tchannel_data["baseHost"]}/up/{self.tchannel_data["boxName"]}/updates?min_seq={self.tchannel_data["minSeq"]}&channel={self.tchannel_data["channel"]}&hash={self.tchannel_data["channelHash"]}'

if the problem is from the port? in my win10, http(s) port is: 4780; socks port is 4781. whether your code use port anywhere? image

No, the lib doesn't use port. How about setting up a virtual environment to test it first. This time try using requests or httpx lib then send a request to a url to check if it works

hi, how to test it?

snowby666 commented 1 year ago

First create a venv in your folder:

python -m venv .venv
.venv\Scripts\activate.bat      

Then create a test.py

import requests
import httpx

url = 'http://example.com'

try:
    response = requests.get(url)
    if response.status_code == 200:
        print("Connection successful. Ping to example.com using requests was sent.")
    else:
        print("Connection failed. Unable to ping example.com using requests.")
except requests.exceptions.RequestException as e:
    print("Connection failed. Exception:", e)

try:
    with httpx.Client() as client:
        response = client.get(url)
        if response.status_code == 200:
            print("Connection successful. Ping to example.com using httpx was sent.")
        else:
            print("Connection failed. Unable to ping example.com using httpx.")
except httpx.RequestError as e:
    print("Connection failed. Exception:", e)

Run test.py

 python test.py
llllly26 commented 1 year ago

First create a venv in your folder:

python -m venv .venv
.venv\Scripts\activate.bat      

Then create a test.py

import requests
import httpx

url = 'http://example.com'

try:
    response = requests.get(url)
    if response.status_code == 200:
        print("Connection successful. Ping to example.com using requests was sent.")
    else:
        print("Connection failed. Unable to ping example.com using requests.")
except requests.exceptions.RequestException as e:
    print("Connection failed. Exception:", e)

try:
    with httpx.Client() as client:
        response = client.get(url)
        if response.status_code == 200:
            print("Connection successful. Ping to example.com using httpx was sent.")
        else:
            print("Connection failed. Unable to ping example.com using httpx.")
except httpx.RequestError as e:
    print("Connection failed. Exception:", e)

Run test.py

python test.py

hi, it can work. image

snowby666 commented 1 year ago

Alright it seems like the issues didnt come from the httpx lib, how about the websocket-client lib then. Can you do 1 more test for me (in venv as well)

import websocket

def on_open(ws):
    print("WebSocket connection established")
    ws.send("Hello, server!")

def on_message(ws, message):
    print("Received message from server:", message)

def on_close(ws, close_status_code, close_msg):
    print("Websocket connection closed with status code:", close_status_code, "and message:", close_msg)

def on_error(ws, error):
    print("WebSocket error:", error)

url = "wss://javascript.info/article/websocket/demo/hello"

ws = websocket.WebSocketApp(url,
                            on_open=on_open,
                            on_message=on_message,
                            on_close=on_close,
                            on_error=on_error)
ws.run_forever()
llllly26 commented 1 year ago
import websocket

def on_open(ws):
    print("WebSocket connection established")
    ws.send("Hello, server!")

def on_message(ws, message):
    print("Received message from server:", message)

def on_close(ws, close_status_code, close_msg):
    print("Websocket connection closed with status code:", close_status_code, "and message:", close_msg)

def on_error(ws, error):
    print("WebSocket error:", error)

url = "wss://javascript.info/article/websocket/demo/hello"

ws = websocket.WebSocketApp(url,
                            on_open=on_open,
                            on_message=on_message,
                            on_close=on_close,
                            on_error=on_error)
ws.run_forever()

that's ok. image

snowby666 commented 1 year ago

can you try this again in your venv?

for chunk in client.send_message(bot, message):,
     print(chunk['response'], end='', flush=True)
llllly26 commented 1 year ago
for chunk in client.send_message(bot, message):,
     print(chunk['response'], end='', flush=True)

I'm sorry, that it still has the same problems. image

code is:

client = PoeApi(token)
print(client.get_chat_history())

bot = "chinchilla"
message = "What is reverse engineering?"
#
output = ""
for chunk in client.send_message(bot, message):
    output += chunk["response"]
print(output)
snowby666 commented 1 year ago

Can you check your quora token if its valid? You must also login poe.com with the same account on quora

llllly26 commented 1 year ago

Can you check your quora token if its valid? You must also login poe.com with the same account on quora

yes, my token that can run successully because i give it to the other one, and he can run successful, but i can't. --

snowby666 commented 1 year ago
import websocket

def on_open(ws):
    print("WebSocket connection established")
    ws.send("Hello, server!")

def on_message(ws, message):
    print("Received message from server:", message)

def on_close(ws, close_status_code, close_msg):
    print("Websocket connection closed with status code:", close_status_code, "and message:", close_msg)

def on_error(ws, error):
    print("WebSocket error:", error)

url = "wss://javascript.info/article/websocket/demo/hello"

ws = websocket.WebSocketApp(url,
                            on_open=on_open,
                            on_message=on_message,
                            on_close=on_close,
                            on_error=on_error)
ws.run_forever()

that's ok. image

How long did it take you to connect to the ws with this code? Maybe the timeout in the api is too short.

llllly26 commented 1 year ago
import websocket

def on_open(ws):
    print("WebSocket connection established")
    ws.send("Hello, server!")

def on_message(ws, message):
    print("Received message from server:", message)

def on_close(ws, close_status_code, close_msg):
    print("Websocket connection closed with status code:", close_status_code, "and message:", close_msg)

def on_error(ws, error):
    print("WebSocket error:", error)

url = "wss://javascript.info/article/websocket/demo/hello"

ws = websocket.WebSocketApp(url,
                            on_open=on_open,
                            on_message=on_message,
                            on_close=on_close,
                            on_error=on_error)
ws.run_forever()

that's ok. image

How long did it take you to connect to the ws with this code? Maybe the timeout in the api is too short.

about 5s.

llllly26 commented 1 year ago

what is the specifical proxy? how to use the proxy? when i use poe, i need the vpn, so whether i need the proxy version? how to use it?

snowby666 commented 3 months ago

This is be fixed in v.1.5.4