Skip to content

serpdive 0.0.2: add krill, the free tier - #2769

Merged
crazywoola merged 4 commits into
langgenius:mainfrom
edendalexis:krill-0.0.2
Jul 28, 2026
Merged

serpdive 0.0.2: add krill, the free tier#2769
crazywoola merged 4 commits into
langgenius:mainfrom
edendalexis:krill-0.0.2

Conversation

@edendalexis

@edendalexis edendalexis commented Jul 25, 2026

Copy link
Copy Markdown
Contributor

Plugin Submission

Plugin information

Submission type

  • New plugin
  • Version update

What changed

Adds a third model, krill, to the existing serpdive_search tool. It is free and unlimited under fair use — no card, no credits to spend — and returns the shortest set of sentences that still answers the query (about 700 tokens per search), one request at a time, at low priority, with no written answer.

This is a bug fix as much as a feature. 0.0.1 offered two models in the selector while the API served three, and the tool silently rewrote anything else to mako: a user selecting the free model was quietly billed for the paid one. 0.0.2 offers all three and passes the choice through.

The diff is three lines of behaviour (tools/serpdive_search.py accepts the third value, tools/serpdive_search.yaml lists it, requirements.txt pins the SDK release that ships it) plus README wording. mako remains the default, so existing apps behave exactly as before.

Risk level

  • Low risk
  • Medium risk
  • High risk

No new capability: the plugin still makes HTTPS calls to a single documented endpoint (api.serpdive.com/v1/search) with a user-supplied API key. No change to credentials, permissions or data handling.

Required checks

  • I have read and followed the Marketplace submission requirements.
  • I have read and comply with the Plugin Developer Agreement.
  • I tested this plugin on Dify Community Edition and Dify Cloud, or documented any limitation below. — see Local validation: 0.0.1 was validated on both; 0.0.2 was not re-run on either, and the limitation is documented there.
  • The package contains only files needed at runtime.
  • The package does not contain secrets, local credentials, .env files, .git directories, virtual environments, caches, logs, or IDE files.
  • The package does not contain executables or bundled binaries, or I explained why they are required below.
  • The plugin README includes setup steps, usage instructions, required APIs or credentials, connection requirements, and the source repository link.
  • The plugin includes PRIVACY.md or a hosted privacy policy, and manifest.yaml references it.
  • All user-facing text is primarily in English, with any localized README files following the i18n guidance.

Security and privacy notes

None. The plugin performs no command or code execution, no SQL, no SSH/SFTP, no browser automation, no file operations and no arbitrary URL fetching: it calls one fixed vendor endpoint over HTTPS. It handles no health, financial, biometric or children's data. The only credential is the user's own SERPdive API key, read from Dify's provider credentials and never logged.

Local validation

Not re-tested inside Dify. 0.0.1 was validated on Dify Community Edition and Dify Cloud before its submission (#2758). 0.0.2 changes three lines in the model selector and was not run again on either platform — stating that plainly rather than ticking the box.

What was verified instead, on the packaged 0.0.2 archive:

# the plugin's own tool code, invoked directly against the live API
SDK installé : 0.2.1
helpers de coercion : OK
  model=krill  → API renvoie 'krill', 3 résultats
  model=mako   → API renvoie 'mako', 3 résultats
  model=moby   → API renvoie 'moby', 3 résultats
  clé manquante → message d'erreur propre
  • SerpdiveSearchTool._invoke was imported from the built .difypkg and run for all three models; each returned the model that was asked for, proving the selector value reaches the API instead of being rewritten.
  • Missing-credential path still yields a readable message rather than raising.
  • Archive contents diffed against the published 0.0.1: same ten files, same layout; no .env, .git, venv, cache or binary.

Reviewer notes

serpdive-0.0.1.difypkg is left in place alongside the new file, matching how other plugins in this repository keep their previous versions.

Adds the free model to the SERPdive plugin. `krill` is free and unlimited
under fair use — no card, no credits — and returns about 700 tokens a search,
one request at a time, at low priority.

0.0.1 offered two models in the selector while the API served three, and the
tool silently rewrote anything else to `mako`: a user picking the free model
was quietly billed for the paid one. 0.0.2 offers all three and passes the
choice through.

0.0.1 is left in place, as other plugins do.
@github-actions github-actions Bot added the risk: missing Missing or invalid Marketplace risk selection label Jul 25, 2026
@github-actions github-actions Bot added risk: low Low-risk Marketplace submission and removed risk: missing Missing or invalid Marketplace risk selection labels Jul 25, 2026
`model` was declared `form: llm`, so the calling agent picked the retrieval
depth on every call — and the description we gave it opened with "'krill' is
the free tier, unlimited under fair use". An agent reading that has every
reason to route the whole workload to the tier that bills nothing.

Retrieval depth is a deployment decision, not a per-turn one. It moves to
`form: form`, chosen once when the tool is configured, like `answer`.
`llm_description` is dropped: an agent has no use for a credit cost.
`human_description` now carries all three tiers with their price.

`query` and `max_results` stay `form: llm`. Default unchanged: mako.
The agent keeps choosing the model, as it does for any tool parameter. What was
broken is what we told it: the description led with "'krill' is the free tier,
unlimited under fair use", which reads as an invitation. An agent handed a free
option routes the workload to it, and a billing decision ends up made by
something with no standing to make it, on quality-blind grounds.

The LLM-facing text now describes CAPABILITY only. Mako is stated as the default
and the right answer for nearly every search. Moby is framed by its latency and
payload cost. Krill is described honestly as the lightest AND least complete.
No credits, no "free", no "unlimited" — that stays in human_description, for
the person actually arbitrating a budget.

Default unchanged: mako.

@crazywoola crazywoola left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM

Decision: Approve

Local Check Results

Check Status Detail Required action
PR content language ✅ Pass PR title/body CJK ratio=0.0% (zh=0, en=3079, ignored_zh=0, allowed_zh<=0) None.
Project structure ✅ Pass All expected files present: manifest.yaml, README.md, PRIVACY.md. _assets/: yes. None.
Manifest author ✅ Pass author is valid. None.
Icon validation ✅ Pass icon exists: _assets/icon.png None.
Version check ✅ Pass version 0.0.2 is available. None.
README language ✅ Pass README.md CJK ratio=0.0% (zh=0, en=2179, allowed_zh<=0) None.
PRIVACY.md ✅ Pass PRIVACY.md exists and is non-empty. None.
Dependency install ✅ Pass requirements installed successfully. None.
dify_plugin version ✅ Pass dify_plugin version 0.10.0 satisfies >= 0.9.0. None.
Install test ✅ Pass plugin install test passed. None.
Packaging test ✅ Pass packaging check passed. None.

@crazywoola
crazywoola merged commit 3277cce into langgenius:main Jul 28, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

risk: low Low-risk Marketplace submission

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants