add
This commit is contained in:
@@ -129,10 +129,22 @@ class OpenAi(Platform):
|
||||
|
||||
class Anthropic(Platform):
|
||||
max_tokens: int
|
||||
streaming: bool
|
||||
|
||||
def __init__(self, config: BaseProxyConfig, http: ClientSession) -> None:
|
||||
super().__init__(config, http)
|
||||
self.max_tokens = self.config['max_tokens']
|
||||
self.streaming = self.config.get('streaming', False)
|
||||
|
||||
def is_streaming_enabled(self) -> bool:
|
||||
return self.streaming
|
||||
|
||||
def _build_request(self, full_chat_context: list) -> tuple:
|
||||
endpoint = f"{self.url}/v1/messages"
|
||||
headers = {"x-api-key": self.api_key, "anthropic-version": "2023-06-01", "content-type": "application/json"}
|
||||
req_body = {"model": self.model, "max_tokens": self.max_tokens, "system": self.system_prompt,
|
||||
"messages": full_chat_context}
|
||||
return endpoint, headers, req_body
|
||||
|
||||
async def create_chat_completion(self, plugin: AbsExtraConfigPlugin, evt: MessageEvent) -> ChatCompletion:
|
||||
full_chat_context = []
|
||||
@@ -140,10 +152,7 @@ class Anthropic(Platform):
|
||||
chat_context = await maubot_llmplus.platforms.get_chat_context(system_context, plugin, self, evt)
|
||||
full_chat_context.extend(list(chat_context))
|
||||
|
||||
endpoint = f"{self.url}/v1/messages"
|
||||
headers = {"x-api-key": self.api_key, "anthropic-version": "2023-06-01", "content-type": "application/json"}
|
||||
req_body = {"model": self.model, "max_tokens": self.max_tokens, "system": self.system_prompt,
|
||||
"messages": full_chat_context}
|
||||
endpoint, headers, req_body = self._build_request(full_chat_context)
|
||||
|
||||
async with self.http.post(endpoint, headers=headers, data=json.dumps(req_body)) as response:
|
||||
# plugin.log.debug(f"响应内容:{response.status}, {await response.json()}")
|
||||
@@ -162,7 +171,34 @@ class Anthropic(Platform):
|
||||
finish_reason=response_json['stop_reason'],
|
||||
model=response_json['model']
|
||||
)
|
||||
pass
|
||||
|
||||
async def create_chat_completion_stream(self, plugin: AbsExtraConfigPlugin, evt: MessageEvent):
|
||||
full_chat_context = []
|
||||
system_context = deque()
|
||||
chat_context = await maubot_llmplus.platforms.get_chat_context(system_context, plugin, self, evt)
|
||||
full_chat_context.extend(list(chat_context))
|
||||
|
||||
endpoint, headers, req_body = self._build_request(full_chat_context)
|
||||
req_body["stream"] = True
|
||||
|
||||
async with self.http.post(endpoint, headers=headers, data=json.dumps(req_body)) as response:
|
||||
if response.status != 200:
|
||||
raise ValueError(f"Error: {await response.text()}")
|
||||
async for line_bytes in response.content:
|
||||
line = line_bytes.decode("utf-8").strip()
|
||||
if not line.startswith("data: "):
|
||||
continue
|
||||
data_str = line[6:]
|
||||
if data_str == "[DONE]":
|
||||
break
|
||||
try:
|
||||
data = json.loads(data_str)
|
||||
if data.get("type") == "content_block_delta":
|
||||
delta = data.get("delta", {})
|
||||
if delta.get("type") == "text_delta":
|
||||
yield delta.get("text", "")
|
||||
except json.JSONDecodeError:
|
||||
pass
|
||||
|
||||
async def list_models(self) -> List[str]:
|
||||
# 调用openai接口获取模型列表
|
||||
|
||||
Reference in New Issue
Block a user