serpdive 0.0.2: add krill, the free tier - #2769
Merged
Merged
Conversation
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.
`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
approved these changes
Jul 28, 2026
crazywoola
left a comment
Member
There was a problem hiding this comment.
✅ 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. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Plugin Submission
Plugin information
Submission type
What changed
Adds a third model,
krill, to the existingserpdive_searchtool. 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.pyaccepts the third value,tools/serpdive_search.yamllists it,requirements.txtpins the SDK release that ships it) plus README wording.makoremains the default, so existing apps behave exactly as before.Risk level
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
.envfiles,.gitdirectories, virtual environments, caches, logs, or IDE files.PRIVACY.mdor a hosted privacy policy, andmanifest.yamlreferences it.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:
SerpdiveSearchTool._invokewas imported from the built.difypkgand run for all three models; each returned the model that was asked for, proving the selector value reaches the API instead of being rewritten..env,.git, venv, cache or binary.Reviewer notes
serpdive-0.0.1.difypkgis left in place alongside the new file, matching how other plugins in this repository keep their previous versions.