Add FilterJoin and four AI filter plugins (Claude, Gemini, OpenAI, SakuraAI) - #154
Merged
Merged
Conversation
FilterJoin joins every item in the pipeline into one item carrying each item's title, link and body under a numbered heading. It builds that item with RSS::Maker rather than FeedMaker.create_pipeline, which drops an item whose link is nil, because the joined item has no permalink of its own and inventing one would name a source for text that is not only from it. An input with no items produces an empty pipeline rather than an empty item. FilterOpenAI, FilterClaude, FilterGemini and FilterSakuraAI each replace an item's description with what one service's API answers to the Recipe's prompt. They are four plugins rather than one with a provider setting: the endpoints, authentication, request bodies, answers, errors and models differ, each moves without asking the others, and a Recipe names the service it sends text to. None of them is a summarizer -- the prompt is the instruction and the description is the text it applies to, and a Recipe without a prompt is refused rather than given a default one. Each asks once per item, replaces only the description, and retries the network, a 429 and a 5xx while raising at once on a refused request, an answer that is not JSON, an answer whose shape is not the documented one, or a missing setting. A failure never leaves an empty description behind. Credentials are Recipe settings: never logged, never in an exception message, never written into an item, and TLS is verified. Specs cover both sides with no network and no credential, and the catalogue, the counts, the optional-dependency table and VERSIONS are updated in the same change. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BxW4ugoPVEk6gn8g2hogpU
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.
This PR adds five new filter plugins to the Automatic Ruby framework:
Summary
Introduces a content joining filter and four AI service integrations that transform item descriptions using external AI APIs. These plugins enable recipes to summarize, translate, extract, or reformat feed content through various AI providers.
Key Changes
FilterJoin (
plugins/filter/join.rb)Four AI Filter Plugins (Claude, Gemini, OpenAI, SakuraAI)
token,model,promptretry,interval)Service-Specific Implementations
x-api-keyheader, requires API version header, supports configurablemax_tokens(default 4096)x-goog-api-keyheader, model name in URL pathNotable Implementation Details
providersetting, allowing services to evolve separately without affecting otherspromptsetting determines the transformation (summarization, translation, extraction, etc.)doc/PLUGINS.mdwith detailed configuration tables and usage exampleshttps://claude.ai/code/session_01BxW4ugoPVEk6gn8g2hogpU