返回资讯中心
外部精选
软件工程
#开发者实时流

Ling-3.0-flash-Sante is now open source

🤗 Hugging Face | 🤖 ModelScope | 🐙 Vercel

Hacker News 最新pretext2026/10/22 · 23 天前30 分钟阅读

以下正文同步自 Hacker News 最新,版权归原站所有,已转换为易读排版。

Like 9

Follow

inclusionAI 3.32k

Text Generation

Safetensors

bailing_hybrid

conversational

custom_code

License: mit

Model card Files Files and versions xet

Community

Copy to bucket new

Introduction

Highlights

Evaluation

Quickstart SGLang

vLLM

Intended Use

Limitations and Responsible Use

🤗 Hugging Face | 🤖 ModelScope | 🐙 Vercel

Introduction

Ling-3.0-flash-Sante is our healthcare-specialized model built on Ling-3.0-flash. Its name comes from the French word santé, meaning “health.”

With 124B total parameters and 5.1B active parameters per token, Sante is designed for medical reasoning, healthcare research, deep research, and tool-assisted workflows while retaining the general capabilities of Ling-3.0-flash. Model weights are available on Hugging Face and ModelScope.

Important: Ling-3.0-flash-Sante is a research model, not a medical device. Its outputs may be incomplete or incorrect and must not be used as a substitute for professional medical advice, diagnosis, or treatment. High-stakes use requires qualified human review, independent verification, and compliance with applicable privacy, security, and healthcare regulations.

Highlights

Strong healthcare capabilities: Sante performs well across professional healthcare tasks, complex medical reasoning, medical knowledge, and healthcare safety benchmarks.

Efficient at scale: Its hybrid-linear MoE architecture combines Kimi Delta Attention (KDA), gated MLA, and sparse MoE layers, activating 5.1B of 124B parameters per token.

Built for long contexts: Training extends to 256K tokens, supporting long-document analysis, evidence synthesis, and multi-step research.

Beyond medical QA: Sante is designed for deep research, tool-assisted workflows, and multi-agent collaboration as well as question answering.

Native reasoning and tool use: Thinking mode is enabled by default, with tool calling supported through compatible serving frameworks.

Evaluation

We evaluate Ling-3.0-flash-Sante across professional healthcare tasks, medical knowledge and safety, complex reasoning, deep research, multi-agent collaboration, and tool-assisted agent benchmarks. The table below summarizes the results shown in the evaluation figure.

Quickstart

The official model identifier is inclusionAI/Ling-3.0-flash-Sante.

SGLang

Use the Ling-3.0-compatible SGLang image:

docker pull lmsysorg/sglang:dev-Ling-3.0-flash

The following example launches an OpenAI-compatible server with a 256K context window on four 141GB-class GPUs or a compatible four-GPU Blackwell node:

docker run --rm --gpus all --ipc=host --shm-size 32g
-p 30000:30000
-e HF_TOKEN=<your-hf-token>
lmsysorg/sglang:dev-Ling-3.0-flash
env SGLANG_ALLOW_OVERWRITE_LONGER_CONTEXT_LEN=1
python3 -m sglang.launch_server
--model-path inclusionAI/Ling-3.0-flash-Sante
--tp 4
--context-length 262144
--speculative-algorithm NEXTN
--mem-fraction-static 0.8
--host 0.0.0.0
--port 30000

On 80GB GPUs such as H100 or H800, use --tp 8 with the same core settings.

Send a request with the OpenAI-compatible API:

curl -s http://localhost:30000/v1/chat/completions
-H "Content-Type: application/json"
-d '{ "model": "inclusionAI/Ling-3.0-flash-Sante", "messages": [ { "role": "user", "content": "Summarize the evidence in this clinical abstract and identify its primary endpoint." } ], "stream": true, "temperature": 0.6, "top_k": 20, "top_p": 0.95 }'

Thinking is enabled by default through the chat template. To disable it for an individual request, set:

{"chat_template_kwargs": {"enable_thinking": false}}

vLLM

Install a current vLLM build with Ling-3.0 support:

pip install uv uv venv ~/my_ling_env source ~/my_ling_env/bin/activate

git clone https://github.com/vllm-project/vllm.git cd vllm VLLM_USE_PRECOMPILED=1 uv pip install --editable . --torch-backend=auto

Launch the model server. MTP is recommended for lower latency:

vllm serve inclusionAI/Ling-3.0-flash-Sante
--port "$PORT"
--trust-remote-code
--served-model-name ling-3.0-flash-sante
--tensor-parallel-size 4
--gpu-memory-utilization 0.85
--enable-prefix-caching
--mamba-cache-mode align
--enable-auto-tool-choice
--tool-call-parser ling3
--reasoning-parser ling3
--speculative-config '{"method":"mtp","num_speculative_tokens":3}'

Example client request:

curl -s http://${MASTER_IP}:${PORT}/v1/chat/completions
-H "Content-Type: application/json"
-d '{ "model": "ling-3.0-flash-sante", "messages": [ { "role": "user", "content": "Compare the inclusion criteria across these two study protocols." } ], "chat_template_kwargs": {"enable_thinking": true}, "stream": true, "temperature": 0.6, "top_k": 20, "top_p": 0.95 }'

Intended Use

Ling-3.0-flash-Sante is intended for research and development scenarios such as:

Limitations and Responsible Use

The model can produce hallucinated, outdated, incomplete, or unsafe medical information.

It must not independently diagnose, prescribe, triage, or make treatment decisions.

Outputs for clinical or other high-stakes use require review by qualified professionals and verification against authoritative sources.

Users are responsible for protecting personal health information and complying with applicable privacy, data-governance, security, and medical-device requirements.

Performance can vary across languages, specialties, populations, institutions, and deployment configurations. Benchmark results do not guarantee real-world clinical performance.

Tool access and multi-agent execution introduce additional risks. Use least-privilege credentials, auditable actions, and human approval for consequential operations.

Downloads last month 5

","cls_token":"[CLS]","eos_token":"<|role_end|>","pad_token":"<|endoftext|>"},"chat_template_jinja":"{#- Bailing V3 chat template -#}\n{#- Supports: thinking option, tool calling -#}\n\n{#- ==================== thinking option normalization ==================== -#}\n{%- if enable_thinking is defined %}\n {%- if enable_thinking %}\n {%- set thinking_option = 'on' %}\n {%- else %}\n {%- set thinking_option = 'off' %}\n {%- endif %}\n{%- elif thinking_option is not defined %}\n {%- set thinking_option = 'on' %}\n{%- endif %}\n\n{#- ==================== preserved thinking ==================== -#}\n{% set preserved_thinking = true %}\n\n{#- ==================== system message ==================== -#}\n{{- '<role>SYSTEM</role>' }}\n{%- if tools %}\n {%- if messages[0].role == 'system' %}\n {{- messages[0].content + '\n' }}\n {%- endif %}\n {{- "# Tools\n\nYou may call one or more functions to assist with the user query.\n\nYou are provided with function signatures within <tools></tools> XML tags:\n<tools>" }}\n {%- for tool in tools %}\n {{- "\n" }}\n {{- tool | tojson }}\n {%- endfor %}\n {{- "\n</tools>\n\nIf none of the functions can be used, point it out. If the given question lacks the parameters required by the function, also point it out.\nIf you need to use a function, for each function call, output the function name and arguments within the following XML format:\n<tool_call>{function-name}\n<arg_key>{arg-key-1}</arg_key>\n<arg_value>{arg-value-1}</arg_value>\n<arg_key>{arg-key-2}</arg_key>\n<arg_value>{arg-value-2}</arg_value>\n...\n</tool_call>\n" }}\n {%- if messages[0].role == 'system' and messages[0].content is string and ('detailed thinking on' in messages[0].content or 'detailed thinking off' in messages[0].content) %}\n {{- '<|role_end|>' }}\n {%- else %}\n {{- 'detailed thinking ' + thinking_option + '<|role_end|>' }}\n {%- endif %}\n{%- else %}\n {%- if messages[0].role == 'system' %}\n {%- if 'detailed thinking on' in messages[0].content or 'detailed thinking off' in messages[0].content %}\n {{- messages[0].content + '<|role_end|>' }}\n {%- else %}\n {{- messages[0].content + '\n' }}\n {{- 'detailed thinking ' + thinking_option + '<|role_end|>' }}\n {%- endif %}\n {% else %}\n {{- 'detailed thinking ' + thinking_option + '<|role_end|>' }}\n {%- endif %}\n{%- endif %}\n{%- set ns = namespace(multi_step_tool=true, last_query_index=messages|length - 1) %}\n{%- for message in messages[::-1] %}\n {%- set index = (messages|length - 1) - loop.index0 %}\n {%- if ns.multi_step_tool and message.role == "user" and message.content is string and not(message.content.startswith('<tool_response>') and message.content.endswith('</tool_response>')) %}\n {%- set ns.multi_step_tool = false %}\n {%- set ns.last_query_index = index %}\n {%- endif %}\n{%- endfor %}\n{%- for message in messages %}\n {%- if message.content is string %}\n {%- set content = message.content %}\n {%- else %}\n {%- set content = '' %}\n {%- endif %}\n {%- if message.role == "user" %}\n {{- '<role>HUMAN</role>' + message.content + '<|role_end|>' }}\n {%- elif message.role == "system" and not loop.first %}\n {{- '<role>SYSTEM</role>' + message.content + '<|role_end|>' }}\n {%- elif message.role == "assistant" %}\n {%- set reasoning_content = '' %}\n {%- if message.reasoning_content is string and message.reasoning_content != '' %}\n {%- set reasoning_content = message.reasoning_content %}\n {%- else %}\n {%- if '</think>' in content %}\n {%- set reasoning_content = content.split('</think>')[0].rstrip('\n').split('<think>')[-1].lstrip('\n') %}\n {%- set content = content.split('</think>')[-1].lstrip('\n') %}\n {%- endif %}\n {%- endif %}\n {%- if preserved_thinking or loop.index0 > ns.last_query_index %}\n {%- if reasoning_content != '' %}\n {{- '<role>ASSISTANT</role>' + '\n<think>' + reasoning_content.strip('\n') + '</think>' + content.lstrip('\n') }}\n {%- else %}\n {{- '<role>ASSISTANT</role>\n<think></think>' + content }}\n {%- endif %}\n {%- else %}\n {{- '<role>ASSISTANT</role>\n<think></think>' + content }}\n {%- endif %}\n {%- if message.tool_calls %}\n {%- for tool_call in message.tool_calls %}\n {%- if (loop.first and content) or (not loop.first) %}\n {{- '\n' }}\n {%- endif %}\n {%- set tc = tool_call %}\n {%- if tool_call.function %}\n {%- set tc = tool_call.function %}\n {%- endif %}\n {{- '<tool_call>' + tc.name }}\n {% set _args = tc.arguments %}\n {%- for k, v in _args.items() %}\n {{- '<arg_key>' + k + '</arg_key>' }}\n {{- '\n<arg_value>' }}\n {%- if v is string %}\n {{- v }}\n {%- else %}\n {{- v | tojson(ensure_ascii=False) }}\n {%- endif %}\n {{- '</arg_value>' }}\n {%- endfor %}\n {{- '\n</tool_call>' }}\n {%- endfor %}\n {%- endif %}\n {{- '<|role_end|>' }}\n {%- elif message.role == "tool" %}\n {%- if loop.first or (messages[loop.index0 - 1].role != "tool") %}\n {{- '<role>OBSERVATION</role>' }}\n {%- endif %}\n {{- '\n<tool_response>\n' }}\n {{- content }}\n {{- '\n</tool_response>' }}\n {%- if loop.last or (messages[loop.index0 + 1].role != "tool") %}\n {{- '<|role_end|>' }}\n {%- endif %}\n {%- endif %}\n{%- endfor %}\n\n{#- ==================== generation prompt ==================== -#}\n{%- if add_generation_prompt %}\n {{- '<role>ASSISTANT</role>' }}\n {%- if thinking_option == 'on' %}\n {{- '\n<think>' }}\n {%- elif thinking_option == 'off' %}\n {{- '\n<think></think>' }}\n {%- endif %}\n{%- endif %}"},"createdAt":"2026-10-19T17:30:04.000Z","discussionsDisabled":false,"discussionsSorting":"recently-created","downloads":5,"downloadsAllTime":5,"id":"inclusionAI/Ling-3.0-flash-Sante","isLikedByUser":false,"availableInferenceProviders":[],"showHuggingChatEntry":false,"inference":"","lastModified":"2026-10-22T14:53:04.000Z","likes":9,"pipeline_tag":"text-generation","librariesOther":[],"trackDownloads":true,"model-index":null,"private":false,"repoType":"model","gated":false,"tags":["safetensors","bailing_hybrid","text-generation","conversational","custom_code","license:mit","region:us"],"tag_objs":[{"id":"text-generation","label":"Text Generation","type":"pipeline_tag","sub

正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。

打开原文
去社区讨论 →