XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet
公开
关注 0 Fork 0 Star 1
返回提交历史

XFEstudio/gpt4free

Restored provider g4f/Provider/nexra/NexraQwen.py

2dcfa748
kqlio67 <kqlio67@users.noreply.github.com>
提交于

代码差异

1 个文件 +58 -59
Modified g4f/Provider/nexra/NexraQwen.py +58 -59
@@ -1,18 +1,17 @@
1 1 from __future__ import annotations
2 2
3 from aiohttp import ClientSession
4 3 import json
4 import requests
5 5
6 from ...typing import AsyncResult, Messages
7 from ..base_provider import AsyncGeneratorProvider, ProviderModelMixin
6 from ...typing import CreateResult, Messages
7 from ..base_provider import ProviderModelMixin, AbstractProvider
8 8 from ..helper import format_prompt
9 9
10
11 class NexraQwen(AsyncGeneratorProvider, ProviderModelMixin):
10 class NexraQwen(AbstractProvider, ProviderModelMixin):
12 11 label = "Nexra Qwen"
13 12 url = "https://nexra.aryahcr.cc/documentation/qwen/en"
14 13 api_endpoint = "https://nexra.aryahcr.cc/api/chat/complements"
15 working = False
14 working = True
16 15 supports_stream = True
17 16
18 17 default_model = 'qwen'
@@ -21,66 +20,66 @@ class NexraQwen(AsyncGeneratorProvider, ProviderModelMixin):
21 20 @classmethod
22 21 def get_model(cls, model: str) -> str:
23 22 return cls.default_model
24
23
25 24 @classmethod
26 async def create_async_generator(
25 def create_completion(
27 26 cls,
28 27 model: str,
29 28 messages: Messages,
30 proxy: str = None,
31 stream: bool = False,
29 stream: bool,
32 30 markdown: bool = False,
33 31 **kwargs
34 ) -> AsyncResult:
32 ) -> CreateResult:
35 33 model = cls.get_model(model)
36
34
37 35 headers = {
38 "Content-Type": "application/json",
39 "accept": "application/json",
40 "origin": cls.url,
41 "referer": f"{cls.url}/chat",
36 'Content-Type': 'application/json'
37 }
38
39 data = {
40 "messages": [
41 {
42 "role": "user",
43 "content": format_prompt(messages)
44 }
45 ],
46 "stream": stream,
47 "markdown": markdown,
48 "model": model
42 49 }
43 async with ClientSession(headers=headers) as session:
44 prompt = format_prompt(messages)
45 data = {
46 "messages": [
47 {
48 "role": "user",
49 "content": prompt
50 }
51 ],
52 "markdown": markdown,
53 "stream": stream,
54 "model": model
55 }
56 async with session.post(cls.api_endpoint, json=data, proxy=proxy) as response:
57 response.raise_for_status()
58
59 complete_message = ""
60
61 # If streaming, process each chunk separately
62 if stream:
63 async for chunk in response.content.iter_any():
64 if chunk:
65 try:
66 # Decode the chunk and split by the delimiter
67 parts = chunk.decode('utf-8').split('\x1e')
68 for part in parts:
69 if part.strip(): # Ensure the part is not empty
70 response_data = json.loads(part)
71 message_part = response_data.get('message')
72 if message_part:
73 complete_message = message_part
74 except json.JSONDecodeError:
75 continue
50
51 response = requests.post(cls.api_endpoint, headers=headers, json=data, stream=stream)
52
53 if stream:
54 return cls.process_streaming_response(response)
55 else:
56 return cls.process_non_streaming_response(response)
76 57
77 # Yield the final complete message
78 if complete_message:
79 yield complete_message
80 else:
81 # Handle non-streaming response
82 text_response = await response.text()
83 response_data = json.loads(text_response)
84 message = response_data.get('message')
85 if message:
86 yield message
58 @classmethod
59 def process_non_streaming_response(cls, response):
60 if response.status_code == 200:
61 try:
62 content = response.text.lstrip('`')
63 data = json.loads(content)
64 return data.get('message', '')
65 except json.JSONDecodeError:
66 return "Error: Unable to decode JSON response"
67 else:
68 return f"Error: {response.status_code}"
69
70 @classmethod
71 def process_streaming_response(cls, response):
72 full_message = ""
73 for line in response.iter_lines(decode_unicode=True):
74 if line:
75 try:
76 line = line.lstrip('`')
77 data = json.loads(line)
78 if data.get('finish'):
79 break
80 message = data.get('message', '')
81 if message is not None and message != full_message:
82 yield message[len(full_message):]
83 full_message = message
84 except json.JSONDecodeError:
85 pass