| """ |
| 统一的健康检查(Hi消息)处理模块 |
| |
| 提供对OpenAI、Gemini和Anthropic格式的Hi消息的解析和响应 |
| """ |
| import time |
| from typing import Any, Dict, List |
|
|
|
|
| |
|
|
| def is_health_check_request(request_data: dict, format: str = "openai") -> bool: |
| """ |
| 检查是否是健康检查请求(Hi消息) |
| |
| Args: |
| request_data: 请求数据 |
| format: 请求格式("openai"、"gemini" 或 "anthropic") |
| |
| Returns: |
| 是否是健康检查请求 |
| """ |
| if format == "openai": |
| |
| messages = request_data.get("messages", []) |
| if len(messages) == 1: |
| msg = messages[0] |
| if msg.get("role") == "user" and msg.get("content") == "Hi": |
| return True |
| |
| elif format == "gemini": |
| |
| contents = request_data.get("contents", []) |
| if len(contents) == 1: |
| content = contents[0] |
| if (content.get("role") == "user" and |
| content.get("parts", [{}])[0].get("text") == "Hi"): |
| return True |
| |
| elif format == "anthropic": |
| |
| messages = request_data.get("messages", []) |
| if (len(messages) == 1 |
| and messages[0].get("role") == "user" |
| and messages[0].get("content") == "Hi"): |
| return True |
| |
| return False |
|
|
|
|
| def is_health_check_message(messages: List[Dict[str, Any]]) -> bool: |
| """ |
| 直接检查消息列表是否为健康检查消息(Anthropic专用) |
| |
| 这是一个便捷函数,用于已经提取出消息列表的场景。 |
| |
| Args: |
| messages: 消息列表 |
| |
| Returns: |
| 是否为健康检查消息 |
| """ |
| return ( |
| len(messages) == 1 |
| and messages[0].get("role") == "user" |
| and messages[0].get("content") == "Hi" |
| ) |
|
|
|
|
| |
|
|
| def create_health_check_response(format: str = "openai", **kwargs) -> dict: |
| """ |
| 创建健康检查响应 |
| |
| Args: |
| format: 响应格式("openai"、"gemini" 或 "anthropic") |
| **kwargs: 格式特定的额外参数 |
| - model: 模型名称(anthropic格式需要) |
| - message_id: 消息ID(anthropic格式需要) |
| |
| Returns: |
| 健康检查响应字典 |
| """ |
| if format == "openai": |
| |
| return { |
| "id": "healthcheck", |
| "object": "chat.completion", |
| "created": int(time.time()), |
| "model": "healthcheck", |
| "choices": [{ |
| "index": 0, |
| "message": { |
| "role": "assistant", |
| "content": "API is working" |
| }, |
| "finish_reason": "stop" |
| }] |
| } |
| |
| elif format == "gemini": |
| |
| return { |
| "candidates": [{ |
| "content": { |
| "parts": [{"text": "gcli2api工作中"}], |
| "role": "model" |
| }, |
| "finishReason": "STOP", |
| "index": 0, |
| }] |
| } |
| |
| elif format == "anthropic": |
| |
| model = kwargs.get("model", "claude-unknown") |
| message_id = kwargs.get("message_id", "msg_healthcheck") |
| return { |
| "id": message_id, |
| "type": "message", |
| "role": "assistant", |
| "model": str(model), |
| "content": [{"type": "text", "text": "antigravity Anthropic Messages 正常工作中"}], |
| "stop_reason": "end_turn", |
| "stop_sequence": None, |
| "usage": {"input_tokens": 0, "output_tokens": 0}, |
| } |
| |
| |
| return {} |
|
|