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

XFEstudio/gpt4free

Updated g4f/Provider/selenium/__init__.py

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

代码差异

2 个文件 +47 -110
Modified g4f/Provider/Nexra.py +47 -109
@@ -1,40 +1,32 @@
1 1 from __future__ import annotations
2
3 2 import json
4 import base64
5 3 from aiohttp import ClientSession
6 from typing import AsyncGenerator
7 4
8 5 from ..typing import AsyncResult, Messages
9 6 from .base_provider import AsyncGeneratorProvider, ProviderModelMixin
10 from ..image import ImageResponse
11 7 from .helper import format_prompt
8 from ..image import ImageResponse
12 9
13 10 class Nexra(AsyncGeneratorProvider, ProviderModelMixin):
14 11 url = "https://nexra.aryahcr.cc"
15 api_endpoint_text = "https://nexra.aryahcr.cc/api/chat/gpt"
16 api_endpoint_image = "https://nexra.aryahcr.cc/api/image/complements"
12 chat_api_endpoint = "https://nexra.aryahcr.cc/api/chat/gpt"
13 image_api_endpoint = "https://nexra.aryahcr.cc/api/image/complements"
17 14 working = True
18 15 supports_gpt_35_turbo = True
19 16 supports_gpt_4 = True
20 supports_stream = True
21 17 supports_system_message = True
22 18 supports_message_history = True
23 19
24 20 default_model = 'gpt-3.5-turbo'
25 models = [
26 # Text models
21 text_models = [
27 22 'gpt-4', 'gpt-4-0613', 'gpt-4-32k', 'gpt-4-0314', 'gpt-4-32k-0314',
28 23 'gpt-3.5-turbo', 'gpt-3.5-turbo-16k', 'gpt-3.5-turbo-0613', 'gpt-3.5-turbo-16k-0613', 'gpt-3.5-turbo-0301',
29 24 'gpt-3', 'text-davinci-003', 'text-davinci-002', 'code-davinci-002',
30 25 'text-curie-001', 'text-babbage-001', 'text-ada-001',
31 26 'davinci', 'curie', 'babbage', 'ada', 'babbage-002', 'davinci-002',
32 # Image models
33 'dalle', 'dalle-mini', 'emi'
34 27 ]
35
36 image_models = {"dalle", "dalle-mini", "emi"}
37 text_models = set(models) - image_models
28 image_models = ['dalle', 'dalle2', 'dalle-mini', 'emi']
29 models = [*text_models, *image_models]
38 30
39 31 model_aliases = {
40 32 "gpt-4": "gpt-4-0613",
@@ -60,16 +52,21 @@ class Nexra(AsyncGeneratorProvider, ProviderModelMixin):
60 52 "gpt-3": "ada",
61 53 "gpt-3": "babbage-002",
62 54 "gpt-3": "davinci-002",
55
56 "dalle-2": "dalle2",
63 57 }
64
58
59
65 60 @classmethod
66 61 def get_model(cls, model: str) -> str:
67 if model in cls.models:
62 if model in cls.text_models or model in cls.image_models:
68 63 return model
69 64 elif model in cls.model_aliases:
70 65 return cls.model_aliases[model]
66 elif model in cls.image_models:
67 return cls.default_image_model
71 68 else:
72 return cls.default_model
69 return cls.default_chat_model
73 70
74 71 @classmethod
75 72 async def create_async_generator(
@@ -78,104 +75,45 @@ class Nexra(AsyncGeneratorProvider, ProviderModelMixin):
78 75 messages: Messages,
79 76 proxy: str = None,
80 77 **kwargs
81 ) -> AsyncGenerator[str | ImageResponse, None]:
78 ) -> AsyncResult:
82 79 model = cls.get_model(model)
83 80
84 if model in cls.image_models:
85 async for result in cls.create_image_async_generator(model, messages, proxy, **kwargs):
86 yield result
87 else:
88 async for result in cls.create_text_async_generator(model, messages, proxy, **kwargs):
89 yield result
90
91 @classmethod
92 async def create_text_async_generator(
93 cls,
94 model: str,
95 messages: Messages,
96 proxy: str = None,
97 **kwargs
98 ) -> AsyncGenerator[str, None]:
99 81 headers = {
100 82 "Content-Type": "application/json",
101 83 }
84
102 85 async with ClientSession(headers=headers) as session:
103 data = {
104 "messages": messages,
105 "prompt": format_prompt(messages),
106 "model": model,
107 "markdown": False,
108 "stream": False,
109 }
110 async with session.post(cls.api_endpoint_text, json=data, proxy=proxy) as response:
111 response.raise_for_status()
112 result = await response.text()
113 json_result = json.loads(result)
114 yield json_result["gpt"]
115
116 @classmethod
117 async def create_image_async_generator(
118 cls,
119 model: str,
120 messages: Messages,
121 proxy: str = None,
122 **kwargs
123 ) -> AsyncGenerator[ImageResponse | str, None]:
124 headers = {
125 "Content-Type": "application/json"
126 }
127
128 prompt = messages[-1]['content'] if messages else ""
129
130 data = {
131 "prompt": prompt,
132 "model": model
133 }
134
135 async def process_response(response_text: str) -> ImageResponse | None:
136 json_start = response_text.find('{')
137 if json_start != -1:
138 json_data = response_text[json_start:]
139 try:
140 response_data = json.loads(json_data)
141 image_data = response_data.get('images', [])[0]
86 if model in cls.image_models:
87 # Image generation
88 prompt = messages[-1]['content'] if messages else ""
89 data = {
90 "prompt": prompt,
91 "model": model,
92 "response": "url"
93 }
94 async with session.post(cls.image_api_endpoint, json=data, proxy=proxy) as response:
95 response.raise_for_status()
96 result = await response.text()
97 result_json = json.loads(result.strip('_'))
98 image_url = result_json['images'][0] if result_json['images'] else None
142 99
143 if image_data.startswith('data:image/'):
144 return ImageResponse([image_data], "Generated image")
100 if image_url:
101 yield ImageResponse(images=image_url, alt=prompt)
102 else:
103 # Text completion
104 data = {
105 "messages": messages,
106 "prompt": format_prompt(messages),
107 "model": model,
108 "markdown": False
109 }
110 async with session.post(cls.chat_api_endpoint, json=data, proxy=proxy) as response:
111 response.raise_for_status()
112 result = await response.text()
145 113
146 114 try:
147 base64.b64decode(image_data)
148 data_uri = f"data:image/jpeg;base64,{image_data}"
149 return ImageResponse([data_uri], "Generated image")
150 except:
151 print("Invalid base64 data")
152 return None
153 except json.JSONDecodeError:
154 print("Failed to parse JSON.")
155 else:
156 print("No JSON data found in the response.")
157 return None
158
159 async with ClientSession(headers=headers) as session:
160 async with session.post(cls.api_endpoint_image, json=data, proxy=proxy) as response:
161 response.raise_for_status()
162 response_text = await response.text()
163
164 image_response = await process_response(response_text)
165 if image_response:
166 yield image_response
167 else:
168 yield "Failed to process image data."
169
170 @classmethod
171 async def create_async(
172 cls,
173 model: str,
174 messages: Messages,
175 proxy: str = None,
176 **kwargs
177 ) -> str:
178 async for response in cls.create_async_generator(model, messages, proxy, **kwargs):
179 if isinstance(response, ImageResponse):
180 return response.images[0]
181 return response
115 json_response = json.loads(result)
116 gpt_response = json_response.get('gpt', '')
117 yield gpt_response
118 except json.JSONDecodeError:
119 yield result
Modified g4f/Provider/selenium/__init__.py +0 -1
@@ -1,4 +1,3 @@
1 from .AItianhuSpace import AItianhuSpace
2 1 from .MyShell import MyShell
3 2 from .PerplexityAi import PerplexityAi
4 3 from .Phind import Phind