docs: correct the pipe and action pages against functions.py and actions.py - #1401
Merged
Classic298 merged 1 commit intoSep 18, 2026
Merged
Conversation
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.
Summary
I compared the Pipe and Action pages with
functions.py,utils/actions.py,utils/plugin.pyandutils/models.pyondev.Action page:
actionsandaction()at module level. The loader only readsactionsoff theActioninstance, so the example is now a class withactionsas a class attribute, and the page says a module-level list is never read.__id__is the sub-action id alone for a sub-action,__user__is a plain dict withvalveswhenUserValvesexists,body.messagesentries also carryinfoandsources, an escaping exception becomes an HTTP 400 with a toast, and actions are gated onis_active, model access, chat ownership andENABLE_PLUGINS.Pipe page:
pipe()now lists every reserved argument it can declare, notes that the two event callables areNonefor plain API calls, and documents what each return type does on the streaming and non-streaming paths.pipesmay be a list or an async function, the model id is<function id>.<sub id>split on the first dot, a classnameattribute prefixes every sub-model name, a raisingpipes()contributes no models, a malformed entry skips the function, and the function id must be a Python identifier and is lowercased.UserValvesand the per-request reload of admin valves were missing. The FAQ now says what an escaping exception renders as, and thatrequirements:frontmatter is installed unlessENABLE_PIP_INSTALL_FRONTMATTER_REQUIREMENTSis off orOFFLINE_MODEis on.body["model"]is meant.Related issue or discussion
None.
Checklist
Notes for reviewers
Every claim maps to a line on
dev: return handling infunctions.py(stream and non-stream branches), manifold id construction inget_function_models,get_function_paramsfor the signature filter andUserValves,utils/actions.pyfor__id__, gating and the exception path,utils/models.pyfor sub-action names and icons, androuters/functions.pyfor the id rule.