Refactor QwenCode and oauthFlow for improved model handling and credential management

This commit is contained in:
hlohaus 2025-09-21 13:33:49 +02:00
parent 9bed8da354
commit 5bac1a8bfb
3 changed files with 14 additions and 6 deletions

View file

@ -1,7 +1,6 @@
from __future__ import annotations from __future__ import annotations
from ...typing import Messages, AsyncResult from ...typing import Messages, AsyncResult
from ...errors import MissingAuthError
from ..template import OpenaiTemplate from ..template import OpenaiTemplate
from .qwenContentGenerator import QwenContentGenerator from .qwenContentGenerator import QwenContentGenerator
from .qwenOAuth2 import QwenOAuth2Client from .qwenOAuth2 import QwenOAuth2Client
@ -15,7 +14,9 @@ class QwenCode(OpenaiTemplate):
needs_auth = True needs_auth = True
active_by_default = True active_by_default = True
default_model = "qwen3-coder-plus" default_model = "qwen3-coder-plus"
models = [default_model] default_vision_model = "qwen-vl-max-latest"
models = [default_model, default_vision_model]
vision_models = [default_vision_model]
client = QwenContentGenerator(QwenOAuth2Client()) client = QwenContentGenerator(QwenOAuth2Client())
@classmethod @classmethod

View file

@ -71,7 +71,14 @@ async def launch_browser_for_oauth():
print("\nAuthorization successful.") print("\nAuthorization successful.")
print("Access Token:", token_response["access_token"]) print("Access Token:", token_response["access_token"])
# Save token_response to a file or config # Save token_response to a file or config
await client.sharedManager.saveCredentialsToFile(token_response) credentials = {
"access_token": token_response["access_token"],
"token_type": token_response["token_type"],
"refresh_token": token_response.get("refresh_token"),
"resource_url": token_response.get("resource_url"),
"expiry_date": int(time.time() * 1000) + token_response.get("expires_in", 0) * 1000,
}
await client.sharedManager.saveCredentialsToFile(credentials)
print(f"Credentials saved to: {client.sharedManager.getCredentialFilePath()}") print(f"Credentials saved to: {client.sharedManager.getCredentialFilePath()}")
return return
else: else:

View file

@ -111,7 +111,7 @@ class QwenOAuth2Client(IQwenOAuth2Client):
"code_challenge": options["code_challenge"], "code_challenge": options["code_challenge"],
"code_challenge_method": options["code_challenge_method"], "code_challenge_method": options["code_challenge_method"],
} }
async with aiohttp.ClientSession() as session: async with aiohttp.ClientSession(headers={"user-agent": ""}) as session:
async with session.post(QWEN_OAUTH_DEVICE_CODE_ENDPOINT, headers={ async with session.post(QWEN_OAUTH_DEVICE_CODE_ENDPOINT, headers={
"Content-Type": "application/x-www-form-urlencoded", "Content-Type": "application/x-www-form-urlencoded",
"Accept": "application/json", "Accept": "application/json",
@ -133,7 +133,7 @@ class QwenOAuth2Client(IQwenOAuth2Client):
"device_code": options["device_code"], "device_code": options["device_code"],
"code_verifier": options["code_verifier"], "code_verifier": options["code_verifier"],
} }
async with aiohttp.ClientSession() as session: async with aiohttp.ClientSession(headers={"user-agent": ""}) as session:
async with session.post(QWEN_OAUTH_TOKEN_ENDPOINT, headers={ async with session.post(QWEN_OAUTH_TOKEN_ENDPOINT, headers={
"Content-Type": "application/x-www-form-urlencoded", "Content-Type": "application/x-www-form-urlencoded",
"Accept": "application/json", "Accept": "application/json",
@ -158,7 +158,7 @@ class QwenOAuth2Client(IQwenOAuth2Client):
"refresh_token": self.credentials["refresh_token"], "refresh_token": self.credentials["refresh_token"],
"client_id": QWEN_OAUTH_CLIENT_ID, "client_id": QWEN_OAUTH_CLIENT_ID,
} }
async with aiohttp.ClientSession() as session: async with aiohttp.ClientSession(headers={"user-agent": ""}) as session:
async with session.post(QWEN_OAUTH_TOKEN_ENDPOINT, headers={ async with session.post(QWEN_OAUTH_TOKEN_ENDPOINT, headers={
"Content-Type": "application/x-www-form-urlencoded", "Content-Type": "application/x-www-form-urlencoded",
"Accept": "application/json", "Accept": "application/json",