Nodes/ComfyUI_EmAySee_CustomNodes/EmAySee Deep Reasoning Connector
ComfyUI Node

EmAySee Deep Reasoning Connector

An LLM connector that hands you the thinking and the answer separately — built for local oobabooga-style backends

By EmAySee·Created about a year ago·Updated 4 months ago· 2
EmAySee Deep Reasoning Connector
    • answer
    • thinking
    • full_raw
    promptEnter prompt here
    system_promptYou are a helpful assistant.
    api_urlhttp://10.0.0.71:5000/v1/chat/completions
    api_keysupersecretkey
    model_namedefault
    max_tokens_per_call4096
    truncation_length32768
    temperature0.60
    top_p0.95
    min_p0.50
    top_k20
    repetition_penalty1.15
    repetition_penalty_range2048
    reasoning_effortlow
    xtc_threshold0.10
    xtc_probability0.00
    dry_multiplier0.8
    dry_base1.75
    dry_allowed_length1
    auto_continuetrue
    max_continues3
    stop_on_errortrue

    This is a big one hiding in a kitchen-sink pack: a fully wired LLM connector that talks to any OpenAI-compatible /v1/chat/completions endpoint, with one feature you barely see elsewhere - it splits the model's chain-of-thought out of the answer and hands you both. Point it at a local oobabooga text-generation-webui or llama.cpp server running a reasoning model (Qwen3, DeepSeek-R1 distills, anything that emits <think> blocks) and you get a thinking output and an answer output. No API key required for local use, no account, no rate limits. Just a POST to your own machine.

    The name is accurate in a way the pack's README isn't: this one targets reasoning models specifically. That's what the reasoning_effort knob and the think-tag parsing are about.

    How it works

    The node builds a standard chat payload - system_prompt + prompt, with enable_thinking: True and a pile of text-generation-webui sampler knobs (min_p, top_k, repetition_penalty_range, xtc_*, dry_*) - and POSTs it non-streaming. Two details make it genuinely useful:

    • Auto-continue. If the response's finish_reason is length/maxlen (the model hit max_tokens_per_call mid-thought), it appends the partial reply as an assistant message and re-posts, up to max_continues times. That's how a 4096-token default gets a 32k-token response out of a local model without you babysitting it.
    • Think-tag parsing. After the loop it regexes the full text for <think>/<thought> blocks. Everything inside becomes the thinking output; everything outside becomes answer. If the model opens a think tag and never closes it, you get [REASONING DID NOT FINISH] in the answer - a loud, honest failure mode instead of a silently truncated reply.

    The inputs you actually set

    Most of the 20+ inputs are sampler values you can leave alone. The ones that matter:

    • api_url - the default is http://10.0.0.71:5000/v1/chat/completions, which is the author's own LAN box. You must change this to your text-generation-webui or llama.cpp server's address. This is the #1 footgun.
    • api_key - for local textgen, any string works (it's ignored); for a real remote service, use the real key.
    • model_name - "default" is fine for textgen; set it explicitly for llama.cpp/Ollama.
    • auto_continue + max_continues - leave on unless you want short, fast replies.
    • reasoning_effort - low/medium/high, passed straight through; low is the sensible default for prompt-tagging work.

    Outputs: answer (clean reply), thinking (the chain-of-thought), full_raw (everything, for debugging). Wire answer into a text display or back into prompt-building; wire thinking to its own viewer so you can watch the model talk to itself.

    Install

    Part of ComfyUI_EmAySee_CustomNodes (Manager → search "EmAySee", or git clone https://github.com/EmAySee/ComfyUI_EmAySee_CustomNodes into ComfyUI/custom_nodes, then restart). It needs requests, which ComfyUI already bundles - no extra pip install, no model files.

    Gotchas and the honest take

    Non-streaming means a long reasoning run blocks the entire ComfyUI queue for minutes (there's a 600-second timeout, so it won't hang forever). The dry_*/xtc_* fields are textgen-specific sampler options; llama.cpp ignores unknown keys, textgen honors them. And remember the LLMVISION lesson from this ecosystem: custom nodes run unsandboxed, and this one sends your prompts to whatever URL you configure. A local endpoint keeps everything on your machine. Pointing it at a random public API means your prompts go there too - be deliberate. For a seedable, reproducible version of this exact node, grab EmAySee_DeepReasoningConnectorWithSeed.

    CategoryEmAySee/LLM

    Inputs (22)

    NameTypeDefaultDescription
    promptSTRINGEnter prompt here
    system_promptSTRINGYou are a helpful assistant.
    api_urlSTRINGhttp://10.0.0.71:5000/v1/chat/completions
    api_keySTRINGsupersecretkey
    model_nameSTRINGdefault
    max_tokens_per_callINT40961–8192
    truncation_lengthINT327680–131072
    temperatureFLOAT0.600–2
    top_pFLOAT0.950–1
    min_pFLOAT0.500–1
    top_kINT200–200
    repetition_penaltyFLOAT1.151–2
    repetition_penalty_rangeINT20480–8192
    reasoning_effortCOMBOlow3 options: low, medium, high
    xtc_thresholdFLOAT0.100–1
    xtc_probabilityFLOAT0.000–1
    dry_multiplierFLOAT0.80–2
    dry_baseFLOAT1.751–5
    dry_allowed_lengthINT10–20
    auto_continueBOOLEANtrue
    max_continuesINT31–10
    stop_on_errorBOOLEANtrue

    Outputs (3)

    NameTypeDescription
    answerSTRING
    thinkingSTRING
    full_rawSTRING