Skip to content

feat(nodes): add SERPdive web search provider node - #518

Open
edendalexis wants to merge 4 commits into
kafein-technology:mainfrom
edendalexis:add-serpdive-search-node
Open

feat(nodes): add SERPdive web search provider node#518
edendalexis wants to merge 4 commits into
kafein-technology:mainfrom
edendalexis:add-serpdive-search-node

Conversation

@edendalexis

Copy link
Copy Markdown

What this adds

A SERPdive web search provider node, alongside the existing Tavily node.

SERPdive returns extracted, answer-ready page content instead of a list of
links, so the agent reads the sentences that answer the query rather than
fetching and cleaning pages itself. Two models: mako (fast, key sentences)
and moby (full readable page text).

Changes

  • backend/app/nodes/tools/serpdive_search.py — the node, mirroring
    tavily_search.py: metadata, get_required_packages, execute, and the
    agent-ready Tool factory. Built on the official serpdive Python SDK.
  • Registered where the Tavily node is registered: nodes/tools/__init__.py,
    nodes/__init__.py, dynamic_type_detection, graph_builder/types and the
    package map in dynamic_node_analyzer.
  • Credentials: a serpdive_search service type with an async connection test
    in credentials.py, plus the matching frontend entry in credentials.ts.
  • client/public/icons/serpdive_search.svg.

No existing node is touched; Tavily and the rest are unchanged.

Why it might be useful here

For a visual agent builder, the value of a search node is what it hands the
model. SERPdive returns extracted content sized for a context window, which is
one call instead of search-then-scrape. On a public 1,000-question benchmark
judged blind by an independent model, it won 60.7% of decided duels against
Tavily's default search
while returning 20.2% fewer tokens (1,001 vs
1,255 on average), at comparable latency. The harness, prompts and
per-question results are public and replayable:
https://github.com/edendalexis/serpdive-benchmark

Scope note, since an honest benchmark states its limits: that comparison is
against Tavily's default (basic) search, the tier in the same price class.
Tavily's advanced mode was not tested and no claim is made about it.

Every account gets 1,000 free credits per month with no card
(https://serpdive.com/dashboard/keys), so the node can be tried without a paid
plan.

Notes

  • New dependency: serpdive, the
    official SDK.
  • The icon embeds the SERPdive logo as a data URI inside an SVG wrapper; happy
    to swap it for a hand-drawn SVG if you prefer a lighter asset.
  • Python compiles clean across the touched modules. Glad to adjust naming,
    the default model, or the parameter set to match your conventions.

Adds SERPdive as a search provider node next to the Tavily node, following the
same ProviderNode shape.

SERPdive returns extracted, answer-ready page content instead of a list of
links, so the agent reads the sentences that answer the query rather than
fetching and cleaning pages itself. Two models: mako (fast, key sentences) and
moby (full readable page text).

- backend/app/nodes/tools/serpdive_search.py: the node, mirroring
  tavily_search.py (metadata, get_required_packages, execute, tool factory),
  built on the official serpdive SDK
- registered in nodes/tools/__init__.py, nodes/__init__.py,
  dynamic_type_detection, graph_builder/types and dynamic_node_analyzer
- credentials: serpdive_search service type with an async connection test
  in credentials.py, plus the frontend credential entry in credentials.ts
- client/public/icons/serpdive_search.svg

No existing node is modified; Tavily and the others are untouched.
Replaces the PNG-embedded placeholder with a true vector SVG (traced from the
logo, two brand colors, 4.6KB), matching the repo's other icons which are all
vectors rather than embedded raster.
@edendalexis
edendalexis force-pushed the add-serpdive-search-node branch from fb9266d to 91d3c86 Compare July 22, 2026 01:46
The node imports serpdive at module level (same pattern as the Tavily node
with langchain-tavily), and app.nodes.__init__ imports every node, so a
backend without the package would fail at import time. The credential test
already degrades gracefully via its lazy import; this makes the node itself
sound.
@edendalexis

Copy link
Copy Markdown
Author

Update while this is open: SERPdive now has a free tier, which changes the calculus for this integration.

model: "krill" is free and unlimited under fair use — no card, no credits to spend, no trial clock. It returns about 700 tokens per search (roughly half what the usual alternatives send), one request at a time, at low priority. The paid models are unchanged.

Why it matters here: the usual objection to adding a search provider is that reviewers and users need a paid key just to try it. That objection is gone — anyone can run this integration end to end for free, including whoever reviews this PR.

Nothing in this PR needs to change for that: the default stays mako, and krill is opt-in via the existing model parameter. Happy to add a line to the docs here if you'd like the free tier called out explicitly.

The node exposed two of the three models SERPdive serves, so the free one was
not selectable. `krill` is free and unlimited under fair use — no card, no
credits — returning a smaller set of the same sentences, one request at a
time, at low priority.

Added to the input choices, the select options and the two descriptions that
list the models. The default stays `mako`, so existing flows are unchanged.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant