mirror of
https://github.com/xtekky/gpt4free.git
synced 2024-12-23 19:11:48 +03:00
feat(g4f/Provider/Blackbox.py): enhance model handling and add web search mode
This commit is contained in:
parent
f63d1566cf
commit
bd607b14b6
@ -3,6 +3,7 @@ from __future__ import annotations
|
||||
import re
|
||||
import random
|
||||
import string
|
||||
import json
|
||||
from aiohttp import ClientSession
|
||||
|
||||
from ..typing import AsyncResult, Messages, ImageType
|
||||
@ -17,40 +18,105 @@ class Blackbox(AsyncGeneratorProvider, ProviderModelMixin):
|
||||
supports_system_message = True
|
||||
supports_message_history = True
|
||||
|
||||
default_model = 'blackbox'
|
||||
default_model = 'blackboxai'
|
||||
models = [
|
||||
'blackbox',
|
||||
'gemini-1.5-flash',
|
||||
default_model,
|
||||
'blackboxai-pro',
|
||||
|
||||
"llama-3.1-8b",
|
||||
'llama-3.1-70b',
|
||||
'llama-3.1-405b',
|
||||
'ImageGenerationLV45LJp',
|
||||
|
||||
'gpt-4o',
|
||||
|
||||
'gemini-pro',
|
||||
'gemini-1.5-flash',
|
||||
|
||||
'claude-sonnet-3.5',
|
||||
|
||||
'PythonAgent',
|
||||
'JavaAgent',
|
||||
'JavaScriptAgent',
|
||||
'HTMLAgent',
|
||||
'GoogleCloudAgent',
|
||||
'AndroidDeveloper',
|
||||
'SwiftDeveloper',
|
||||
'Next.jsAgent',
|
||||
'MongoDBAgent',
|
||||
'PyTorchAgent',
|
||||
'ReactAgent',
|
||||
'XcodeAgent',
|
||||
'AngularJSAgent',
|
||||
'ImageGeneration',
|
||||
]
|
||||
|
||||
agentMode = {
|
||||
'ImageGenerationLV45LJp': {'mode': True, 'id': "ImageGenerationLV45LJp", 'name': "Image Generation"},
|
||||
'ImageGeneration': {'mode': True, 'id': "ImageGenerationLV45LJp", 'name': "Image Generation"},
|
||||
}
|
||||
|
||||
trendingAgentMode = {
|
||||
"blackbox": {},
|
||||
"blackboxai": {},
|
||||
"gemini-1.5-flash": {'mode': True, 'id': 'Gemini'},
|
||||
"llama-3.1-8b": {'mode': True, 'id': "llama-3.1-8b"},
|
||||
'llama-3.1-70b': {'mode': True, 'id': "llama-3.1-70b"},
|
||||
'llama-3.1-405b': {'mode': True, 'id': "llama-3.1-405b"},
|
||||
'blackboxai-pro': {'mode': True, 'id': "BLACKBOXAI-PRO"},
|
||||
'PythonAgent': {'mode': True, 'id': "Python Agent"},
|
||||
'JavaAgent': {'mode': True, 'id': "Java Agent"},
|
||||
'JavaScriptAgent': {'mode': True, 'id': "JavaScript Agent"},
|
||||
'HTMLAgent': {'mode': True, 'id': "HTML Agent"},
|
||||
'GoogleCloudAgent': {'mode': True, 'id': "Google Cloud Agent"},
|
||||
'AndroidDeveloper': {'mode': True, 'id': "Android Developer"},
|
||||
'SwiftDeveloper': {'mode': True, 'id': "Swift Developer"},
|
||||
'Next.jsAgent': {'mode': True, 'id': "Next.js Agent"},
|
||||
'MongoDBAgent': {'mode': True, 'id': "MongoDB Agent"},
|
||||
'PyTorchAgent': {'mode': True, 'id': "PyTorch Agent"},
|
||||
'ReactAgent': {'mode': True, 'id': "React Agent"},
|
||||
'XcodeAgent': {'mode': True, 'id': "Xcode Agent"},
|
||||
'AngularJSAgent': {'mode': True, 'id': "AngularJS Agent"},
|
||||
}
|
||||
|
||||
userSelectedModel = {
|
||||
"gpt-4o": "gpt-4o",
|
||||
"gemini-pro": "gemini-pro",
|
||||
'claude-sonnet-3.5': "claude-sonnet-3.5",
|
||||
'blackboxai-pro': "blackboxai-pro",
|
||||
}
|
||||
|
||||
model_prefixes = {
|
||||
'gpt-4o': '@GPT-4o',
|
||||
'gemini-pro': '@Gemini-PRO',
|
||||
'claude-sonnet-3.5': '@Claude-Sonnet-3.5',
|
||||
|
||||
'PythonAgent': '@Python Agent',
|
||||
'JavaAgent': '@Java Agent',
|
||||
'JavaScriptAgent': '@Java Agent',
|
||||
'HTMLAgent': '@HTML Agent',
|
||||
'GoogleCloudAgent': '@Google Cloud Agent',
|
||||
'AndroidDeveloper': '@Android Developer',
|
||||
'SwiftDeveloper': '@Swift Developer',
|
||||
'Next.jsAgent': '@Next.js Agent',
|
||||
'MongoDBAgent': '@MongoDB Agent',
|
||||
'PyTorchAgent': '@PyTorch Agent',
|
||||
'ReactAgent': '@React Agent',
|
||||
'XcodeAgent': '@Xcode Agent',
|
||||
'AngularJSAgent': '@AngularJS Agent',
|
||||
'blackboxai-pro': '@BLACKBOXAI-PRO',
|
||||
'ImageGeneration': '@Image Generation',
|
||||
}
|
||||
|
||||
model_referers = {
|
||||
"blackboxai": f"{url}/?model=blackboxai",
|
||||
"blackboxai-pro": f"{url}/?model=blackboxai-pro",
|
||||
"gpt-4o": f"{url}/?model=gpt-4o",
|
||||
"gemini-pro": f"{url}/?model=gemini-pro",
|
||||
"claude-sonnet-3.5": f"{url}/?model=claude-sonnet-3.5"
|
||||
}
|
||||
|
||||
model_aliases = {
|
||||
"gemini-flash": "gemini-1.5-flash",
|
||||
"flux": "ImageGenerationLV45LJp",
|
||||
"claude-3.5-sonnet": "claude-sonnet-3.5",
|
||||
"flux": "ImageGeneration",
|
||||
}
|
||||
|
||||
@classmethod
|
||||
@ -72,6 +138,7 @@ class Blackbox(AsyncGeneratorProvider, ProviderModelMixin):
|
||||
proxy: str = None,
|
||||
image: ImageType = None,
|
||||
image_name: str = None,
|
||||
webSearchMode: bool = False,
|
||||
**kwargs
|
||||
) -> AsyncResult:
|
||||
model = cls.get_model(model)
|
||||
@ -83,7 +150,7 @@ class Blackbox(AsyncGeneratorProvider, ProviderModelMixin):
|
||||
"content-type": "application/json",
|
||||
"origin": cls.url,
|
||||
"pragma": "no-cache",
|
||||
"referer": f"{cls.url}/",
|
||||
"referer": cls.model_referers.get(model, cls.url),
|
||||
"sec-ch-ua": '"Not;A=Brand";v="24", "Chromium";v="128"',
|
||||
"sec-ch-ua-mobile": "?0",
|
||||
"sec-ch-ua-platform": '"Linux"',
|
||||
@ -93,8 +160,8 @@ class Blackbox(AsyncGeneratorProvider, ProviderModelMixin):
|
||||
"user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36"
|
||||
}
|
||||
|
||||
if model in cls.userSelectedModel:
|
||||
prefix = f"@{cls.userSelectedModel[model]}"
|
||||
if model in cls.model_prefixes:
|
||||
prefix = cls.model_prefixes[model]
|
||||
if not messages[0]['content'].startswith(prefix):
|
||||
messages[0]['content'] = f"{prefix} {messages[0]['content']}"
|
||||
|
||||
@ -115,9 +182,8 @@ class Blackbox(AsyncGeneratorProvider, ProviderModelMixin):
|
||||
"codeModelMode": True,
|
||||
"agentMode": {},
|
||||
"trendingAgentMode": {},
|
||||
"userSelectedModel": None,
|
||||
"userSystemPrompt": None,
|
||||
"isMicMode": False,
|
||||
"userSystemPrompt": None,
|
||||
"maxTokens": 1024,
|
||||
"playgroundTopP": 0.9,
|
||||
"playgroundTemperature": 0.5,
|
||||
@ -128,7 +194,8 @@ class Blackbox(AsyncGeneratorProvider, ProviderModelMixin):
|
||||
"clickedForceWebSearch": False,
|
||||
"visitFromDelta": False,
|
||||
"mobileClient": False,
|
||||
"webSearchMode": False,
|
||||
"userSelectedModel": None,
|
||||
"webSearchMode": webSearchMode,
|
||||
}
|
||||
|
||||
if model in cls.agentMode:
|
||||
@ -140,7 +207,7 @@ class Blackbox(AsyncGeneratorProvider, ProviderModelMixin):
|
||||
|
||||
async with session.post(cls.api_endpoint, json=data, proxy=proxy) as response:
|
||||
response.raise_for_status()
|
||||
if model == 'ImageGenerationLV45LJp':
|
||||
if model == 'ImageGeneration':
|
||||
response_text = await response.text()
|
||||
url_match = re.search(r'https://storage\.googleapis\.com/[^\s\)]+', response_text)
|
||||
if url_match:
|
||||
@ -149,9 +216,24 @@ class Blackbox(AsyncGeneratorProvider, ProviderModelMixin):
|
||||
else:
|
||||
raise Exception("Image URL not found in the response")
|
||||
else:
|
||||
full_response = ""
|
||||
search_results_json = ""
|
||||
async for chunk in response.content.iter_any():
|
||||
if chunk:
|
||||
decoded_chunk = chunk.decode()
|
||||
decoded_chunk = re.sub(r'\$@\$v=[^$]+\$@\$', '', decoded_chunk)
|
||||
if decoded_chunk.strip():
|
||||
yield decoded_chunk
|
||||
if '$~~~$' in decoded_chunk:
|
||||
search_results_json += decoded_chunk
|
||||
else:
|
||||
full_response += decoded_chunk
|
||||
yield decoded_chunk
|
||||
|
||||
if data["webSearchMode"] and search_results_json:
|
||||
match = re.search(r'\$~~~\$(.*?)\$~~~\$', search_results_json, re.DOTALL)
|
||||
if match:
|
||||
search_results = json.loads(match.group(1))
|
||||
formatted_results = "\n\n**Sources:**\n"
|
||||
for i, result in enumerate(search_results[:5], 1):
|
||||
formatted_results += f"{i}. [{result['title']}]({result['link']})\n"
|
||||
yield formatted_results
|
||||
|
Loading…
Reference in New Issue
Block a user