Support "Think Deeper" in Copilot

Improve Documentation
This commit is contained in:
hlohaus 2025-03-30 15:40:46 +02:00
parent c471c53671
commit 8c2c46b20f
14 changed files with 189 additions and 82 deletions

View file

@ -24,7 +24,7 @@ from .openai.har_file import get_headers, get_har_files
from ..typing import CreateResult, Messages, MediaListType
from ..errors import MissingRequirementsError, NoValidHarFileError, MissingAuthError
from ..requests.raise_for_status import raise_for_status
from ..providers.response import BaseConversation, JsonConversation, RequestLogin, ImageResponse
from ..providers.response import BaseConversation, JsonConversation, RequestLogin, ImageResponse, FinishReason, SuggestedFollowups
from ..providers.asyncio import get_running_loop
from ..tools.media import merge_media
from ..requests import get_nodriver
@ -46,10 +46,13 @@ class Copilot(AbstractProvider, ProviderModelMixin):
supports_stream = True
default_model = "Copilot"
models = [default_model]
models = [default_model, "Think Deeper"]
model_aliases = {
"gpt-4": default_model,
"o1": default_model,
"gpt-4o": default_model,
"o1": "Think Deeper",
"reasoning": "Think Deeper",
"dall-e-3": default_model
}
websocket_url = "wss://copilot.microsoft.com/c/api/chat?api-version=2"
@ -75,10 +78,10 @@ class Copilot(AbstractProvider, ProviderModelMixin):
) -> CreateResult:
if not has_curl_cffi:
raise MissingRequirementsError('Install or update "curl_cffi" package | pip install -U curl_cffi')
model = cls.get_model(model)
websocket_url = cls.websocket_url
headers = None
if cls.needs_auth or media is not None:
if cls._access_token:
if api_key is not None:
cls._access_token = api_key
if cls._access_token is None:
@ -163,6 +166,7 @@ class Copilot(AbstractProvider, ProviderModelMixin):
# "token": clarity_token,
# "method":"clarity"
# }).encode(), CurlWsFlag.TEXT)
wss.send(json.dumps({"event":"setOptions","supportedCards":["weather","local","image","sports","video","ads","finance"],"ads":{"supportedTypes":["multimedia","product","tourActivity","propertyPromotion","text"]}}));
wss.send(json.dumps({
"event": "send",
"conversationId": conversation_id,
@ -170,7 +174,7 @@ class Copilot(AbstractProvider, ProviderModelMixin):
"type": "text",
"text": prompt,
}],
"mode": "chat"
"mode": "reasoning" if "Think" in model else "chat",
}).encode(), CurlWsFlag.TEXT)
is_started = False
@ -193,6 +197,10 @@ class Copilot(AbstractProvider, ProviderModelMixin):
elif msg.get("event") == "imageGenerated":
yield ImageResponse(msg.get("url"), image_prompt, {"preview": msg.get("thumbnailUrl")})
elif msg.get("event") == "done":
yield FinishReason("stop")
break
elif msg.get("event") == "suggestedFollowups":
yield SuggestedFollowups(msg.get("suggestions"))
break
elif msg.get("event") == "replaceText":
yield msg.get("text")