From 04efca74cc7cf9cf29213b162eb745ffe4ada8bf Mon Sep 17 00:00:00 2001 From: zhanggangyong Date: Sun, 15 Mar 2026 15:45:00 +0000 Subject: [PATCH] =?UTF-8?q?=E5=A4=87=E4=BB=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config.yaml | 42 +++++++++++- litellm-ignored-files-backup.zip | Bin 0 -> 1701 bytes message_api_claude.py | 65 ++++++++++++++++++ test_results.json | 110 +++++++++++++++++++++++++++++++ 4 files changed, 216 insertions(+), 1 deletion(-) create mode 100644 litellm-ignored-files-backup.zip create mode 100644 message_api_claude.py create mode 100644 test_results.json diff --git a/config.yaml b/config.yaml index aef9990..7c5c2cd 100644 --- a/config.yaml +++ b/config.yaml @@ -1,5 +1,5 @@ # LiteLLM Azure Container Apps 生产配置 -# 支持 Taiji AI Cloud 和 OpenRouter 模型供应商 +# 支持 Taiji AI Cloud、OpenRouter、XMind 和 Databricks 模型供应商 # 自动生成 - 包含所有模型的显式配置 # ============================================================================= @@ -4696,6 +4696,45 @@ model_list: model_info: disable_background_health_check: true + # ------------------------------------------------------------------------- + # Databricks 模型(Anthropic Messages API 兼容) + # 总计: 4 个模型 + # 端点: https://adb-7405604858124224.4.azuredatabricks.net/serving-endpoints/anthropic/v1/messages + # 请求头: Authorization: Bearer {api_key} + # 注意: 使用 Anthropic Messages API 格式 + # ------------------------------------------------------------------------- + - model_name: databricks/claude-haiku-4-5 + litellm_params: + model: anthropic/databricks-claude-haiku-4-5 + api_base: https://adb-7405604858124224.4.azuredatabricks.net/serving-endpoints/anthropic/v1 + api_key: os.environ/DATABRICKS_TOKEN + model_info: + disable_background_health_check: true + + - model_name: databricks/claude-opus-4-5 + litellm_params: + model: anthropic/databricks-claude-opus-4-5 + api_base: https://adb-7405604858124224.4.azuredatabricks.net/serving-endpoints/anthropic/v1 + api_key: os.environ/DATABRICKS_TOKEN + model_info: + disable_background_health_check: true + + - model_name: databricks/claude-sonnet-4-5 + litellm_params: + model: anthropic/databricks-claude-sonnet-4-5 + api_base: https://adb-7405604858124224.4.azuredatabricks.net/serving-endpoints/anthropic/v1 + api_key: os.environ/DATABRICKS_TOKEN + model_info: + disable_background_health_check: true + + - model_name: databricks/claude-opus-4-1 + litellm_params: + model: anthropic/databricks-claude-opus-4-1 + api_base: https://adb-7405604858124224.4.azuredatabricks.net/serving-endpoints/anthropic/v1 + api_key: os.environ/DATABRICKS_TOKEN + model_info: + disable_background_health_check: true + # ============================================================================= # 路由器设置 # ============================================================================= @@ -4726,6 +4765,7 @@ router_settings: # - REDIS_SSL: 是否启用 Redis SSL(true/false) # - TAIJI_API_KEY: Taiji AI Cloud API 密钥 # - OPENROUTER_API_KEY: OpenRouter API 密钥 +# - DATABRICKS_TOKEN: Databricks Personal Access Token (PAT) # - XMIND_API_KEY_OPENAI: XMind OpenAI 兼容 API 密钥(默认: 6b761f38b4bf4c829390d82a43f8f32f) # - XMIND_API_KEY_ANTHROPIC: XMind Anthropic 兼容 API 密钥(默认: 9b123e68b3734856a6983fa229a1f94d) # - XMIND_API_KEY_VERTEX_AI: XMind Vertex AI 兼容 API 密钥(默认: 854a5b589db44fb0a08c988dd2dd57f8) diff --git a/litellm-ignored-files-backup.zip b/litellm-ignored-files-backup.zip new file mode 100644 index 0000000000000000000000000000000000000000..92ef9bee0bb8c538c27db2056daa197f18684c45 GIT binary patch literal 1701 zcmV;W23q-0O9KQH0000809!6ETz?|{Lk9)`01OTQ00aOW04`;2c2!gf00TaNXlZdA zsA+Y03jhHG=mP)%1n2_*0JT@^Q`%S*|IS}=cRD-M&X%Wuj~QkgAz~B=O`z(2VL}oV zaenu6?jAZmV_1if-F&En@v&cDMyFxZyWkL=vCh$pPO@A=)?HLKkCe3{Ed2&o3&=&y%cd{-;=wa` ze-GyOn!=Ui1NFrsb_g^z{&`V2Ki&Yw_Z73tM1-YUVc)ZemyTg zg1KF|@*IBopkX5z9rb8g*(xX>H>>a7p!McPS;7~pZ*zE}I~la4Zrii0Qx11c4OwPJ ztaC(1)a?++&X^Z(uzHrOZa-4?wqbdrMHTHKT|tKSgxw*E4q!QDYX_cfsik*tWglGk zkiB8=O+W?u=$l}OU;Y9FP*%Rc+*%I~TH)TU%JGSkFZHPV zhj8PKxs^t_wVx#^kxUDsD=XfejAuoIhX@h91WQK3jL&rmwVtm%y|X{sEmm8H-QhId zsxM^(&eRYz37pJDIY~5exaOGnbh5``@35J1(&KmE*=s|97*U8zpb;Id_-Siyjvo`- z5+n^@;~D0U;2-k_hV)Quq@QL(t~yU9DLpBViKymqQk*kov4&1lN|ak5T9p3BaZouu zL!kv$3%Yc%8@ibw&4gU_7cC$y_zeMqWrt|S<4R2ojLKG$>B|V>NS5pi%=XC=?-;bt z@>4UmaY`iS+?>}Nv(mTgJA=7HY*d3}*+vrTuxP<0XD8bdM_d|S{aX3<5|*CA&E?A# z>}ri6zz~iRASmEYq$h>T#^CD`DzG3RPNQWrof3`cj_MNt9BF(A%Ys9 zBItdi-up8=D-AG%!Qs?YKgIEW#y7xw?{IAYu;3^8=m1UgV_wU+G?$s4jmh2E84S#z zbivKK

=l0}LI;z2pLZI%}M=8Xb0_GuGMB&BZKHTTE~|y6jPFw>8RH?A;D$m&4jE zaCRZ)v|FuCo7E{T{@Uf^E><|(L0TW_(qY!;jIhqe&#pTUa}N8^&5ooyo_gqs0Mehsc}!{>W?B|>Wv#LFF$ zadD%l)@bFZUV8YfDV}cVwV1>jEh?Kj4MCkyEY)Om%##^*$Q|~8}D=j*s{p zeA>*Wh6l1qkImv{GTzJ(=lu!kxuHv|7dDV>_1%$y@)KS%Qa7$o zOW#Q-{5Q18RF>+{}6zV7W(yR}39XB07#VJs)9>MR}y;{dn&D=Pw z%|C2kqO%E(p8!K*bS#~o0BBkP*Y!F0@hX~YYx6JE*E_h^vp&K-7#Sja`)PWxKGuxM zaz;WE4c3%Q5(dJPidhn~Q*mCD%ri4HjUP6p?%u;kBmW+qC#@+dD>?M2JS)JXMfLQt zdXldmeo_9qk3SjEsC>2$m(e*ogsXcvD_UczoAA{~TwlbE<^uF#5Ojrb_w#JPubY#6rhcEYnxpYVBAyyGH$E|VE|G|$-5LG` zP)h*<9s?8r000O8TP`nLe002b>00000ssIOI literal 0 HcmV?d00001 diff --git a/message_api_claude.py b/message_api_claude.py new file mode 100644 index 0000000..a9541c1 --- /dev/null +++ b/message_api_claude.py @@ -0,0 +1,65 @@ +import json +import os +import sys +from typing import Any, Dict, List + +import requests + +# Required: export DATABRICKS_TOKEN with a valid Databricks PAT before running. +DATABRICKS_TOKEN = "dapied25006cd5ec824b138dfa5e82e2630c" #User1 + +if not DATABRICKS_TOKEN: + raise RuntimeError("Set DATABRICKS_TOKEN with a valid Databricks PAT.") + +# Optional: override DATABRICKS_BASE_URL to point at your workspace host. +BASE_URL = os.environ.get( + "DATABRICKS_BASE_URL", + "https://adb-7405604858124224.4.azuredatabricks.net", +) +ENDPOINT = f"{BASE_URL.rstrip('/')}/serving-endpoints/anthropic/v1/messages" +# Adjust DEFAULT_MODEL if your workspace exposes a different deployed model name. +DEFAULT_MODEL = "databricks-claude-sonnet-4-5" + + +def build_payload(prompt: str, model: str, max_tokens: int) -> Dict[str, Any]: + return { + "model": model, + "max_tokens": max_tokens, + "messages": [{"role": "user", "content": prompt}], + } + + +def call_message_api( + prompt: str, model: str = DEFAULT_MODEL, max_tokens: int = 500 +) -> Dict[str, Any]: + payload = build_payload(prompt, model, max_tokens) + headers = { + "Authorization": f"Bearer {DATABRICKS_TOKEN}", + "Content-Type": "application/json", + } + response = requests.post(ENDPOINT, headers=headers, json=payload, timeout=30) + response.raise_for_status() + return response.json() + + +def extract_text(content: Any) -> str: + if isinstance(content, list): + text_blocks: List[str] = [] + for block in content: + if isinstance(block, dict) and block.get("type") == "text": + text_blocks.append(str(block.get("text", ""))) + if text_blocks: + return "\n".join(text_blocks) + return str(content) + + +def main(argv: List[str]) -> None: + prompt = " ".join(argv) if argv else "What is an LLM agent?" + result = call_message_api(prompt) + content = result.get("content") + output = extract_text(content) + print(output or json.dumps(result, indent=2)) + + +if __name__ == "__main__": + main(sys.argv[1:]) diff --git a/test_results.json b/test_results.json new file mode 100644 index 0000000..724aeaa --- /dev/null +++ b/test_results.json @@ -0,0 +1,110 @@ +[ + { + "model": "databricks-claude-haiku-4-5", + "status": "success", + "response": { + "model": "claude-haiku-4-5-20251001", + "id": "msg_bdrk_019rU8d2HJVgDz7LT2MSz3z9", + "type": "message", + "role": "assistant", + "content": [ + { + "type": "text", + "text": "Hello! 2 + 2 = 4." + } + ], + "stop_reason": "end_turn", + "stop_sequence": null, + "usage": { + "input_tokens": 16, + "cache_creation_input_tokens": 0, + "cache_read_input_tokens": 0, + "cache_creation": { + "ephemeral_5m_input_tokens": 0, + "ephemeral_1h_input_tokens": 0 + }, + "output_tokens": 16 + } + } + }, + { + "model": "databricks-claude-opus-4-5", + "status": "success", + "response": { + "model": "claude-opus-4-5-20251101", + "id": "msg_bdrk_01B3qYeKwWRkCkvhLLErQzUr", + "type": "message", + "role": "assistant", + "content": [ + { + "type": "text", + "text": "Hello! 2+2 equals 4." + } + ], + "stop_reason": "end_turn", + "stop_sequence": null, + "usage": { + "input_tokens": 16, + "cache_creation_input_tokens": 0, + "cache_read_input_tokens": 0, + "cache_creation": { + "ephemeral_5m_input_tokens": 0, + "ephemeral_1h_input_tokens": 0 + }, + "output_tokens": 14 + } + } + }, + { + "model": "databricks-claude-sonnet-4-5", + "status": "success", + "response": { + "model": "claude-sonnet-4-5-20250929", + "id": "msg_bdrk_01UhJcpUBwPKqPpgz7SuerbV", + "type": "message", + "role": "assistant", + "content": [ + { + "type": "text", + "text": "Hello! 2 + 2 = 4" + } + ], + "stop_reason": "end_turn", + "stop_sequence": null, + "usage": { + "input_tokens": 16, + "cache_creation_input_tokens": 0, + "cache_read_input_tokens": 0, + "cache_creation": { + "ephemeral_5m_input_tokens": 0, + "ephemeral_1h_input_tokens": 0 + }, + "output_tokens": 15 + } + } + }, + { + "model": "databricks-claude-opus-4-1", + "status": "success", + "response": { + "model": "claude-opus-4-1-20250805", + "id": "msg_bdrk_01W344zBQvnZpLh1YUi2yeYF", + "type": "message", + "role": "assistant", + "content": [ + { + "type": "text", + "text": "2 + 2 = 4" + } + ], + "stop_reason": "end_turn", + "stop_sequence": null, + "usage": { + "input_tokens": 16, + "cache_creation_input_tokens": 0, + "cache_read_input_tokens": 0, + "output_tokens": 13 + } + } + } +] \ No newline at end of file