From f2aabfe890d10df4005e9c2725a8a3a62527240b Mon Sep 17 00:00:00 2001 From: thesiti92 Date: Wed, 30 Sep 2026 14:17:20 -0400 Subject: [PATCH 1/8] Move summarizer wire details into a provider module Keys now come from the provider's own variables, and an empty endpoint means the provider's default. Gemini requests are unchanged. --- plugins/summarize/plugin.toml | 10 +-- plugins/summarize/plugin.wasm | Bin 568784 -> 581165 bytes plugins/summarize/src/http.rs | 26 ++++-- plugins/summarize/src/lib.rs | 103 +++++++++-------------- plugins/summarize/src/provider.rs | 130 ++++++++++++++++++++++++++++++ src/plugin/tests/mod.rs | 14 ++++ src/plugin/tests/summarize.rs | 68 ++++++++++++++-- 7 files changed, 267 insertions(+), 84 deletions(-) create mode 100644 plugins/summarize/src/provider.rs diff --git a/plugins/summarize/plugin.toml b/plugins/summarize/plugin.toml index b493f37f0..8946ce88b 100644 --- a/plugins/summarize/plugin.toml +++ b/plugins/summarize/plugin.toml @@ -7,13 +7,13 @@ description = "Pseudocode summaries for large new function bodies and tests." # startup when a plugin that is on cannot be made. [enabled] title = "Summarize functions and tests" -description = "Summarize large new function bodies and right-side tests as pseudocode. Needs an API key: `api_key`, or `GEMINI_API_KEY` or `GOOGLE_API_KEY` in the environment." +description = "Summarize large new function bodies and right-side tests as pseudocode. Needs an API key: `api_key`, or the provider's variable in the environment: `GEMINI_API_KEY` or `GOOGLE_API_KEY`, `OPENAI_API_KEY`, or `ANTHROPIC_API_KEY`." default = false [options.provider] -enum = ["gemini"] +enum = ["gemini", "openai", "anthropic"] title = "Provider" -description = "Which model API to call." +description = "Which model API to call. `openai` also reaches any OpenAI-compatible server through `endpoint`. Set `model` to one of the provider's models when you change this." default = "gemini" [options.model] @@ -32,12 +32,12 @@ default = 20 [options.api_key] type = "string" title = "API key" -description = "The provider's API key. `GEMINI_API_KEY` or `GOOGLE_API_KEY` in the environment is used when this is unset." +description = "Sent to the selected provider. The provider's variable in the environment is used when this is unset. Optional for `openai` with a custom `endpoint`." [options.endpoint] type = "string" title = "Endpoint URL" -description = "Override the provider's base URL, for proxies and tests." +description = "Override the provider's base URL, for proxies, OpenAI-compatible servers (for example `http://localhost:11434/v1`) and tests. Empty uses the provider's default." [options.request_timeout_ms] type = "integer" diff --git a/plugins/summarize/plugin.wasm b/plugins/summarize/plugin.wasm index 1a575b1c3a73f8930640e825e005ab322e25fbc0..527f7166e87dd4ac2858908770c2b157bfc0ab77 100644 GIT binary patch delta 131870 zcmd442bfev)<4`;)oCI_ulRq2Ho(!-}4_H`u44G>eQ)|>Qv~B zTO$is)LndeUX86UhCQSH=N9Jic-YS@Y>m!)(aOxv&WUrv0OJ~=+p7|&GC-_sDm2klb5e%eS#TSf^av?lk7GOdMhCe)nH#LjVKm8X7 z1cCwkJ3X?z^eM7)=r0h+=DdanKsZT`$s+^IfKPSX(PFoO50`dq9&UsIp2 ztItyU9BeLCFU!^E-j{U6kL>5HS9F8rDtD#&d{2FTWTP;Do-Q%XeomTaWi;v{e&ubg zmW}IKT^rRDr+ITZ>d8QJuje=30jaIz(dU9ec1Aw_WS|xIoVA)a?jlM=Gb&UlXUz`! zg=f65W;O08CfKQoH;ldg&)47NxnHy=0M6?~QJ*U1Mn~Uq>+RRvHs;P7|2)?7fJnZ6 z)OCLzar+IU#*Df3de1>$LWN)+lO>&IceU(hwrF)#zg~U&4D3B@=(i6i2WSRpD!vqNh_A$UQ7%3Zd&N$%OS~txij`uu*e7;~ zZDN&pUwk8Wi#?)3d?GfA&0>R??)_L?`j~f$_v$CS)4Wf5rS~cCF7HwCviBA5BJXS7 zh2GD-uX{_qW!^WuUwR*AbJ>e*r}t6zwRaZV=H2Suu`GT%YpBmVDw z$9yMzM}0r|#`p6-#~$z}zV=A134ZQLO7R#TgM|)1P*URYB-O%O-SH*(ZkBw#s>D-_ ztciH{B;|N`H^WoNJ-w(#A@_!+SS`EcT5mNQl%`4+@u0!XV6ou|ov`wnw`5DLi<-B= z=Y-~+*c;Y6%?t2-Tk}>ar3BuSq?%o3<+T{XrdeZK6tE|($t?y0|`n6e4la1T9 ztT%-Knk?)yJz;+`PcnRlKlFrZ#h1cNhPP#g?iQ!<95j6aEJBytz@OBLn z)OVt^)v8_JkbVoAC0l6#Lcd!7XxElKW0kiXYJ*d4gniU3uL`bR`&O*XDsEqo&9
r{MV9Km1o$^tv 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 Wyr%_U_Cx-GG~)x?rfm?;@7qS delta 120294 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 P-&M#ruYOY6Q2qY^0^NF^ diff --git a/plugins/summarize/src/http.rs b/plugins/summarize/src/http.rs index cb30eba8b..4583cd037 100644 --- a/plugins/summarize/src/http.rs +++ b/plugins/summarize/src/http.rs @@ -4,7 +4,12 @@ use diffr_plugin_sdk::anyhow::{self, anyhow}; use wasi::http::{outgoing_handler, types::*}; use wasi::io::streams::StreamError; -pub fn post(url: &str, key: &str, body: &str, timeout_ms: u64) -> anyhow::Result<(u16, Vec)> { +pub fn post( + url: &str, + headers: &[(&'static str, String)], + body: &str, + timeout_ms: u64, +) -> anyhow::Result<(u16, Vec)> { let (scheme, rest) = url .split_once("://") .ok_or_else(|| anyhow!("invalid endpoint URL"))?; @@ -14,12 +19,19 @@ pub fn post(url: &str, key: &str, body: &str, timeout_ms: u64) -> anyhow::Result _ => anyhow::bail!("endpoint must use http or https"), }; let (authority, path) = rest.split_once('/').unwrap_or((rest, "")); - let headers = Fields::from_list(&[ - ("content-type".into(), b"application/json".to_vec()), - ("content-length".into(), body.len().to_string().into_bytes()), - ("x-goog-api-key".into(), key.as_bytes().to_vec()), - ]) - .map_err(|e| anyhow!("HTTP headers: {e:?}"))?; + let mut fields = vec![ + ("content-type".to_owned(), b"application/json".to_vec()), + ( + "content-length".to_owned(), + body.len().to_string().into_bytes(), + ), + ]; + fields.extend( + headers + .iter() + .map(|(name, value)| ((*name).to_owned(), value.as_bytes().to_vec())), + ); + let headers = Fields::from_list(&fields).map_err(|e| anyhow!("HTTP headers: {e:?}"))?; let request = OutgoingRequest::new(headers); request .set_method(&Method::Post) diff --git a/plugins/summarize/src/lib.rs b/plugins/summarize/src/lib.rs index f4abd5118..93a9923fd 100644 --- a/plugins/summarize/src/lib.rs +++ b/plugins/summarize/src/lib.rs @@ -1,8 +1,9 @@ //! The summarizer: large new function bodies become short pseudocode, shown //! in place of the collapsed body. //! -//! It needs an API key: `new` fails without one, naming how to set it or -//! turn the plugin off, which is why the bundled configuration ships it off. +//! It needs an API key for most providers: `new` fails without one, naming +//! how to set it or turn the plugin off, which is why the bundled +//! configuration ships it off. //! Requests use WASI HTTP. The host calls one file at a time per instance. use diffr_plugin_sdk::anyhow::{self, anyhow, Context as _}; use diffr_plugin_sdk::{ @@ -10,10 +11,11 @@ use diffr_plugin_sdk::{ FileEntry, Move, Node, OtherSide, Pairing, Plugin, Region, Source, }; use serde::Deserialize; -use serde_json::json; use std::collections::BTreeMap; use std::time::Duration; mod http; +mod provider; +pub use provider::Provider; /// The plugin's name, and the tags its queries set: a function body, and a /// test body, which can be summarized independently of whether it is new. @@ -40,18 +42,10 @@ pub struct Options { pub system_prompt: String, } -#[derive(Clone, Copy, Debug, PartialEq, Eq, Deserialize)] -#[serde(rename_all = "lowercase")] -pub enum Provider { - Gemini, -} - -const DEFAULT_ENDPOINT: &str = "https://generativelanguage.googleapis.com"; - /// The summarizer's options, API key and endpoint. pub struct Summarize { options: Options, - api_key: String, + api_key: Option, endpoint: String, } @@ -80,16 +74,6 @@ struct Summary { } impl Summarize { - fn url(&self) -> String { - match self.options.provider { - Provider::Gemini => format!( - "{}/v1beta/models/{}:generateContent", - self.endpoint.trim_end_matches('/'), - self.options.model - ), - } - } - fn prompt(&self, path: &str, src: &str, folds: &[Request]) -> String { let numbered: Vec = src .split_terminator('\n') @@ -125,36 +109,22 @@ impl Summarize { src: &str, folds: &[Request], ) -> anyhow::Result> { - let body = json!({ - "systemInstruction": {"parts": [{"text": self.options.system_prompt}]}, - "contents": [{"role": "user", "parts": [{"text": self.prompt(path, src, folds)}]}], - "generationConfig": { - "temperature": 0, - "maxOutputTokens": 600 * folds.len() + 200, - "thinkingConfig": {"thinkingBudget": 0}, - "responseMimeType": "application/json", - "responseSchema": { - "type": "ARRAY", - "items": { - "type": "OBJECT", - "properties": { - "id": {"type": "INTEGER"}, - "summary": {"type": "STRING"}, - "pseudocode": {"type": "STRING"}, - }, - "required": ["id", "pseudocode"], - }, - }, - }, - }); - let url = self.url(); + let provider = self.options.provider; + let body = provider.body( + &self.options.model, + &self.options.system_prompt, + &self.prompt(path, src, folds), + 600 * folds.len() + 200, + ); + let url = provider.url(&self.endpoint, &self.options.model); + let headers = provider.headers(self.api_key.as_deref()); let failed = |message: String| anyhow!("{}: {message}", self.options.model); let text: serde_json::Value = { let mut attempt = 0; loop { let result = http::post( &url, - &self.api_key, + &headers, &body.to_string(), self.options.request_timeout_ms, ); @@ -182,13 +152,11 @@ impl Summarize { std::thread::sleep(Duration::from_millis(250 * (1 << attempt.min(6)))); } }; - let content = text["candidates"][0]["content"]["parts"] - .as_array() - .and_then(|parts| parts.last()) - .and_then(|part| part["text"].as_str()) + let content = provider + .text(&text) .ok_or_else(|| failed("no text in the response".to_owned()))?; - let answers: Vec = - serde_json::from_str(content).map_err(|error| failed(format!("{error}: {content}")))?; + let answers: Vec = serde_json::from_str(provider::answer_json(content)) + .map_err(|error| failed(format!("{error}: {content}")))?; let mut texts = BTreeMap::new(); for answer in answers { if !folds.iter().any(|fold| fold.id == answer.id) { @@ -329,25 +297,31 @@ fn compresses(summary: &str, body: &[&str]) -> bool { summary_lines * 2 <= body_lines } -/// The API key: the `api_key` option, or else `GEMINI_API_KEY`, or else -/// `GOOGLE_API_KEY`, the first that is set and not empty. -fn resolve_key(config: &Options) -> anyhow::Result { +/// The API key: the `api_key` option, or else the first of the provider's +/// environment variables that is set and not empty. `None` only where the +/// provider can go without one. +fn resolve_key(config: &Options, custom_endpoint: bool) -> anyhow::Result> { let set = |key: &String| !key.is_empty(); if let Some(key) = config.api_key.clone().filter(set) { - return Ok(key); + return Ok(Some(key)); } - for variable in ["GEMINI_API_KEY", "GOOGLE_API_KEY"] { + let variables = config.provider.key_variables(); + for variable in variables { if let Some(key) = std::env::var_os(variable) { let key = key .into_string() .map_err(|_| anyhow!("{variable} is not valid UTF-8"))?; if set(&key) { - return Ok(key); + return Ok(Some(key)); } } } + if config.provider.key_optional(custom_endpoint) { + return Ok(None); + } anyhow::bail!( - "no API key: set plugins.bundled.summarize.api_key, or GEMINI_API_KEY or GOOGLE_API_KEY in the environment, or turn the summarizer off with plugins.bundled.summarize.enabled = false" + "no API key: set plugins.bundled.summarize.api_key, or {} in the environment, or turn the summarizer off with plugins.bundled.summarize.enabled = false", + variables.join(" or ") ) } @@ -355,13 +329,14 @@ impl Plugin for Summarize { type Options = Options; fn new(options: Options) -> anyhow::Result { - let api_key = resolve_key(&options)?; + let endpoint = options + .endpoint + .clone() + .filter(|endpoint| !endpoint.is_empty()); + let api_key = resolve_key(&options, endpoint.is_some())?; Ok(Self { api_key, - endpoint: options - .endpoint - .clone() - .unwrap_or_else(|| DEFAULT_ENDPOINT.to_owned()), + endpoint: endpoint.unwrap_or_else(|| options.provider.default_endpoint().to_owned()), options, }) } diff --git a/plugins/summarize/src/provider.rs b/plugins/summarize/src/provider.rs new file mode 100644 index 000000000..c5093aa70 --- /dev/null +++ b/plugins/summarize/src/provider.rs @@ -0,0 +1,130 @@ +//! Each model API's wire format: where a request goes, how it is +//! authenticated, and where the answer's text is. +use serde::Deserialize; +use serde_json::{json, Value}; + +#[derive(Clone, Copy, Debug, PartialEq, Eq, Deserialize)] +#[serde(rename_all = "lowercase")] +pub enum Provider { + Gemini, + OpenAi, + Anthropic, +} + +impl Provider { + pub fn default_endpoint(self) -> &'static str { + match self { + Self::Gemini => "https://generativelanguage.googleapis.com", + Self::OpenAi => "https://api.openai.com/v1", + Self::Anthropic => "https://api.anthropic.com", + } + } + + /// The environment variables read, in order, when `api_key` is unset. + pub fn key_variables(self) -> &'static [&'static str] { + match self { + Self::Gemini => &["GEMINI_API_KEY", "GOOGLE_API_KEY"], + Self::OpenAi => &["OPENAI_API_KEY"], + Self::Anthropic => &["ANTHROPIC_API_KEY"], + } + } + + /// OpenAI-compatible servers at a custom endpoint, such as Ollama, + /// often take no key. + pub fn key_optional(self, custom_endpoint: bool) -> bool { + self == Self::OpenAi && custom_endpoint + } + + pub fn url(self, endpoint: &str, model: &str) -> String { + let endpoint = endpoint.trim_end_matches('/'); + match self { + Self::Gemini => format!("{endpoint}/v1beta/models/{model}:generateContent"), + Self::OpenAi => format!("{endpoint}/chat/completions"), + Self::Anthropic => format!("{endpoint}/v1/messages"), + } + } + + pub fn headers(self, key: Option<&str>) -> Vec<(&'static str, String)> { + let mut headers = Vec::new(); + if let Some(key) = key { + headers.push(match self { + Self::Gemini => ("x-goog-api-key", key.to_owned()), + Self::OpenAi => ("authorization", format!("Bearer {key}")), + Self::Anthropic => ("x-api-key", key.to_owned()), + }); + } + if self == Self::Anthropic { + headers.push(("anthropic-version", "2023-06-01".to_owned())); + } + headers + } + + /// Only Gemini constrains the answer with a schema; the others follow + /// the system prompt, and [`answer_json`] drops what they wrap it in. + /// OpenAI gets no sampling or length options: reasoning models reject + /// them and compatible servers name them differently. + pub fn body(self, model: &str, system: &str, user: &str, max_tokens: usize) -> Value { + match self { + Self::Gemini => json!({ + "systemInstruction": {"parts": [{"text": system}]}, + "contents": [{"role": "user", "parts": [{"text": user}]}], + "generationConfig": { + "temperature": 0, + "maxOutputTokens": max_tokens, + "thinkingConfig": {"thinkingBudget": 0}, + "responseMimeType": "application/json", + "responseSchema": { + "type": "ARRAY", + "items": { + "type": "OBJECT", + "properties": { + "id": {"type": "INTEGER"}, + "summary": {"type": "STRING"}, + "pseudocode": {"type": "STRING"}, + }, + "required": ["id", "pseudocode"], + }, + }, + }, + }), + Self::OpenAi => json!({ + "model": model, + "messages": [ + {"role": "system", "content": system}, + {"role": "user", "content": user}, + ], + }), + Self::Anthropic => json!({ + "model": model, + "max_tokens": max_tokens, + "temperature": 0, + "system": system, + "messages": [{"role": "user", "content": user}], + }), + } + } + + pub fn text(self, response: &Value) -> Option<&str> { + match self { + Self::Gemini => response["candidates"][0]["content"]["parts"] + .as_array()? + .last()?["text"] + .as_str(), + Self::OpenAi => response["choices"][0]["message"]["content"].as_str(), + Self::Anthropic => response["content"] + .as_array()? + .iter() + .rev() + .find(|block| block["type"] == "text")?["text"] + .as_str(), + } + } +} + +/// The JSON array in an answer, without any prose or code fence around it. +pub fn answer_json(text: &str) -> &str { + match (text.find('['), text.rfind(']')) { + (Some(start), Some(end)) if start < end => &text[start..=end], + _ => text, + } +} diff --git a/src/plugin/tests/mod.rs b/src/plugin/tests/mod.rs index 2e6030813..1bc6f5500 100644 --- a/src/plugin/tests/mod.rs +++ b/src/plugin/tests/mod.rs @@ -442,6 +442,20 @@ fn a_plugin_that_cannot_be_made_is_a_setup_error() { format!("{error:#}"), "plugins.bundled.summarize: no API key: set plugins.bundled.summarize.api_key, or GEMINI_API_KEY or GOOGLE_API_KEY in the environment, or turn the summarizer off with plugins.bundled.summarize.enabled = false" ); + if std::env::var_os("OPENAI_API_KEY").is_some() { + return; + } + let config = Config::from_toml( + "[plugins.bundled.summarize]\nenabled = true\nprovider = 'openai'\nmodel = 'm'\napi_key = ''\nendpoint = ''\n", + ) + .unwrap(); + let error = Pipeline::from_config(&config.plugins, Path::new(".")) + .err() + .expect("OpenAI at its default endpoint needs a key"); + assert_eq!( + format!("{error:#}"), + "plugins.bundled.summarize: no API key: set plugins.bundled.summarize.api_key, or OPENAI_API_KEY in the environment, or turn the summarizer off with plugins.bundled.summarize.enabled = false" + ); } #[test] diff --git a/src/plugin/tests/summarize.rs b/src/plugin/tests/summarize.rs index 7b5e8f96a..13ab06954 100644 --- a/src/plugin/tests/summarize.rs +++ b/src/plugin/tests/summarize.rs @@ -27,29 +27,47 @@ fn project_with( const LARGE: &str = "def f():\n a()\n b()\n c()\n\ndef g(): d()\n"; +/// One request the test server received. +struct Received { + line: String, + headers: Vec, + body: String, +} + /// Answer each request with the next canned response. -fn serve(responses: Vec<(u16, String)>) -> (String, std::thread::JoinHandle>) { +fn serve_requests( + responses: Vec<(u16, String)>, +) -> (String, std::thread::JoinHandle>) { let listener = TcpListener::bind("127.0.0.1:0").unwrap(); let endpoint = format!("http://{}", listener.local_addr().unwrap()); let handle = std::thread::spawn(move || { - let mut bodies = Vec::new(); + let mut received = Vec::new(); for (status, body) in responses { let (stream, _) = listener.accept().unwrap(); let mut reader = BufReader::new(stream); + let mut line = String::new(); + reader.read_line(&mut line).unwrap(); + let mut headers = Vec::new(); let mut length = 0; loop { - let mut line = String::new(); - reader.read_line(&mut line).unwrap(); - if line == "\r\n" { + let mut header = String::new(); + reader.read_line(&mut header).unwrap(); + if header == "\r\n" { break; } - if let Some(value) = line.to_ascii_lowercase().strip_prefix("content-length:") { + let header = header.trim_end().to_ascii_lowercase(); + if let Some(value) = header.strip_prefix("content-length:") { length = value.trim().parse().unwrap(); } + headers.push(header); } let mut request = vec![0; length]; reader.read_exact(&mut request).unwrap(); - bodies.push(String::from_utf8(request).unwrap()); + received.push(Received { + line: line.trim_end().to_owned(), + headers, + body: String::from_utf8(request).unwrap(), + }); let reason = if status == 200 { "OK" } else { "Error" }; let response = format!( "HTTP/1.1 {status} {reason}\r\nContent-Type: application/json\r\nContent-Length: {}\r\nConnection: close\r\n\r\n{body}", @@ -57,11 +75,25 @@ fn serve(responses: Vec<(u16, String)>) -> (String, std::thread::JoinHandle) -> (String, std::thread::JoinHandle>) { + let (endpoint, handle) = serve_requests(responses); + let bodies = std::thread::spawn(move || { + handle + .join() + .unwrap() + .into_iter() + .map(|request| request.body) + .collect() + }); + (endpoint, bodies) +} + /// The label of the only function body on the after side. The scope fold /// the context queries wrap around it is not one. fn fold_label(sides: &tree::Pairing) -> String { @@ -581,3 +613,23 @@ fn deferred_summary_preserves_user_fold_state_and_region_identity() { assert_eq!(sides, before); server.join().unwrap(); } + +#[test] +fn gemini_requests_keep_their_path_and_key_header() { + let (file, mut sides) = project("a.py", "", LARGE); + let id = select(&trees(&sides), 3, None)[0].0; + let (endpoint, server) = serve_requests(vec![(200, gemini_answer(&[(id, "call a, b, c")]))]); + summarizer(&endpoint, 0).run(&file, &mut sides).unwrap(); + let request = server.join().unwrap().remove(0); + assert_eq!( + request.line, + "POST /v1beta/models/gemini-3.8-flash:generateContent HTTP/1.1" + ); + assert!(request + .headers + .contains(&"x-goog-api-key: test-key".to_owned())); + assert!(!request + .headers + .iter() + .any(|header| header.starts_with("authorization"))); +} From 9ed0104e29b8c5ce4d97ba2879112d5dd2ed885f Mon Sep 17 00:00:00 2001 From: thesiti92 Date: Wed, 30 Sep 2026 14:20:34 -0400 Subject: [PATCH 2/8] Test OpenAI and Anthropic summaries against a local server The provider-rejection tests now use an unknown provider, since openai is valid. --- src/config/store.rs | 4 +- src/plugin/config.rs | 2 +- src/plugin/tests/summarize.rs | 102 ++++++++++++++++++++++++++++++++++ 3 files changed, 105 insertions(+), 3 deletions(-) diff --git a/src/config/store.rs b/src/config/store.rs index 10ec5cc95..62139c316 100644 --- a/src/config/store.rs +++ b/src/config/store.rs @@ -309,8 +309,8 @@ mod tests { "plugins.bundled.context.lines: expected an integer, got \"many\"" ); assert_eq!( - error("plugins.bundled.summarize.provider", "openai"), - "plugins.bundled.summarize.provider: expected one of \"gemini\", got \"openai\"" + error("plugins.bundled.summarize.provider", "mistral"), + "plugins.bundled.summarize.provider: expected one of \"gemini\", \"openai\", \"anthropic\", got \"mistral\"" ); assert_eq!( error("plugins.external.mine.enabled", "true"), diff --git a/src/plugin/config.rs b/src/plugin/config.rs index 8293e3e05..995276333 100644 --- a/src/plugin/config.rs +++ b/src/plugin/config.rs @@ -758,7 +758,7 @@ mod tests { zero.starts_with("plugins.bundled.summarize: max_concurrency: "), "{zero}" ); - assert!(error("[plugins.bundled.summarize]\nprovider = 'openai'\n") + assert!(error("[plugins.bundled.summarize]\nprovider = 'mistral'\n") .starts_with("plugins.bundled.summarize: provider: ")); } } diff --git a/src/plugin/tests/summarize.rs b/src/plugin/tests/summarize.rs index 13ab06954..73c19ecd7 100644 --- a/src/plugin/tests/summarize.rs +++ b/src/plugin/tests/summarize.rs @@ -633,3 +633,105 @@ fn gemini_requests_keep_their_path_and_key_header() { .iter() .any(|header| header.starts_with("authorization"))); } + +fn answers(items: &[(u32, &str)]) -> String { + let answers: Vec<_> = items + .iter() + .map(|(id, text)| json!({"id": id, "pseudocode": text})) + .collect(); + serde_json::to_string(&answers).unwrap() +} + +#[test] +fn each_provider_sends_its_own_request_and_reads_its_own_answer() { + let (_, sides) = project("a.py", "", LARGE); + let id = select(&trees(&sides), 3, None)[0].0; + let fenced = format!("```json\n{}\n```", answers(&[(id, "call a, b, c")])); + let prose = format!( + "Here are the summaries:\n{}", + answers(&[(id, "call a, b, c")]) + ); + for (provider, path, response, auth) in [ + ( + "openai", + "/v1", + json!({"choices": [{"message": {"role": "assistant", "content": fenced}}]}), + "authorization: bearer test-key", + ), + ( + "anthropic", + "", + json!({"content": [{"type": "thinking", "thinking": "[1]"}, {"type": "text", "text": prose}]}), + "x-api-key: test-key", + ), + ] { + let (file, mut sides) = project("a.py", "", LARGE); + let (endpoint, server) = serve_requests(vec![(200, response.to_string())]); + summarizer_with(json!({ + "provider": provider, + "model": "test-model", + "api_key": "test-key", + "endpoint": format!("{endpoint}{path}"), + "min_lines": 3, + "retries": 0, + })) + .run(&file, &mut sides) + .unwrap(); + assert_eq!(fold_label(&trees(&sides)), "call a, b, c", "{provider}"); + let request = server.join().unwrap().remove(0); + let body: serde_json::Value = serde_json::from_str(&request.body).unwrap(); + assert!( + request.headers.contains(&auth.to_owned()), + "{provider}: {:?}", + request.headers + ); + assert_eq!(body["model"], "test-model"); + match provider { + "openai" => { + assert_eq!(request.line, "POST /v1/chat/completions HTTP/1.1"); + assert_eq!(body["messages"][0]["role"], "system"); + assert!(body["messages"][1]["content"] + .as_str() + .unwrap() + .contains(&format!("fold {id}: lines 2-4"))); + assert!(body.get("temperature").is_none()); + } + _ => { + assert_eq!(request.line, "POST /v1/messages HTTP/1.1"); + assert!(request + .headers + .contains(&"anthropic-version: 2023-06-01".to_owned())); + assert_eq!(body["max_tokens"], 800); + assert!(body["system"] + .as_str() + .unwrap() + .starts_with("For each listed fold")); + } + } + } +} + +#[test] +fn an_openai_compatible_server_needs_no_key() { + if std::env::var_os("OPENAI_API_KEY").is_some() { + return; + } + let (file, mut sides) = project("a.py", "", LARGE); + let id = select(&trees(&sides), 3, None)[0].0; + let response = json!({"choices": [{"message": {"content": answers(&[(id, "call a, b, c")])}}]}); + let (endpoint, server) = serve_requests(vec![(200, response.to_string())]); + summarizer_with(json!({ + "provider": "openai", + "model": "llama", + "endpoint": format!("{endpoint}/v1"), + "min_lines": 3, + })) + .run(&file, &mut sides) + .unwrap(); + assert_eq!(fold_label(&trees(&sides)), "call a, b, c"); + let request = server.join().unwrap().remove(0); + assert!(!request + .headers + .iter() + .any(|header| header.starts_with("authorization"))); +} From 767b6e52788817ba7c4660c91c2069e4d578fa5d Mon Sep 17 00:00:00 2001 From: thesiti92 Date: Wed, 30 Sep 2026 14:20:40 -0400 Subject: [PATCH 3/8] Document the summarizer providers --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 0c73fb4b7..1b39dc5c3 100644 --- a/README.md +++ b/README.md @@ -60,12 +60,12 @@ We hope in the future that we can find some way to upstream some / all of these ## Known Limitations -1. Semantic diff summarization is only supported for the Gemini class of models right now. Turn it on via: +1. Semantic diff summarization calls Gemini, OpenAI (or any OpenAI-compatible server, such as Ollama, via `endpoint`), or Anthropic. It is off by default. Turn it on via: a. Through the TUI: - Run `diffr config` - Search for 'summarization' - Enable in the dropdown - - Add your API key for Gemini if you don't already have on your path + - Pick a provider and model, and add its API key unless `GEMINI_API_KEY`, `OPENAI_API_KEY` or `ANTHROPIC_API_KEY` is already in your environment b. Through the [Whiteboard app](https://github.com/devdotfast/whiteboard). 2. The plugin API is a bit awkward and will be simplified radically in the coming releases. From c9728418d24b91ca7730c0f975554cb7b8f7d886 Mon Sep 17 00:00:00 2001 From: thesiti92 Date: Wed, 30 Sep 2026 14:24:49 -0400 Subject: [PATCH 4/8] Parse summaries past bracketed prose and drop Anthropic's temperature Current Claude models reject temperature, and their token limit also covers thinking, so it gets a 4096 floor. Answers are now read from the first JSON array of summaries, which skips lead-ins, trailing notes and reasoning that contain brackets. --- plugins/summarize/plugin.wasm | Bin 581165 -> 581301 bytes plugins/summarize/src/lib.rs | 4 ++-- plugins/summarize/src/provider.rs | 29 +++++++++++++++++++---------- src/plugin/tests/summarize.rs | 10 +++++++--- 4 files changed, 28 insertions(+), 15 deletions(-) diff --git a/plugins/summarize/plugin.wasm b/plugins/summarize/plugin.wasm index 527f7166e87dd4ac2858908770c2b157bfc0ab77..06778ecfd2d41d0af6c6af7a7362f49bc31e9af8 100644 GIT binary patch delta 58580 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 delta 58680 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

JY{98D-ssHN`ai@Q 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 Lm-V7EeB}QC<>!Ym diff --git a/plugins/summarize/src/lib.rs b/plugins/summarize/src/lib.rs index 93a9923fd..f9746717e 100644 --- a/plugins/summarize/src/lib.rs +++ b/plugins/summarize/src/lib.rs @@ -155,8 +155,8 @@ impl Summarize { let content = provider .text(&text) .ok_or_else(|| failed("no text in the response".to_owned()))?; - let answers: Vec = serde_json::from_str(provider::answer_json(content)) - .map_err(|error| failed(format!("{error}: {content}")))?; + let answers: Vec = provider::answers(content) + .ok_or_else(|| failed(format!("no summaries in the answer: {content}")))?; let mut texts = BTreeMap::new(); for answer in answers { if !folds.iter().any(|fold| fold.id == answer.id) { diff --git a/plugins/summarize/src/provider.rs b/plugins/summarize/src/provider.rs index c5093aa70..694c66f03 100644 --- a/plugins/summarize/src/provider.rs +++ b/plugins/summarize/src/provider.rs @@ -1,5 +1,6 @@ //! Each model API's wire format: where a request goes, how it is //! authenticated, and where the answer's text is. +use serde::de::DeserializeOwned; use serde::Deserialize; use serde_json::{json, Value}; @@ -60,9 +61,10 @@ impl Provider { } /// Only Gemini constrains the answer with a schema; the others follow - /// the system prompt, and [`answer_json`] drops what they wrap it in. - /// OpenAI gets no sampling or length options: reasoning models reject - /// them and compatible servers name them differently. + /// the system prompt, and [`answers`] skips what they wrap it in. Only + /// Gemini gets a temperature: current reasoning models reject one. + /// OpenAI gets no length limit either, since compatible servers name it + /// differently; Anthropic's limit also covers thinking, so it has a floor. pub fn body(self, model: &str, system: &str, user: &str, max_tokens: usize) -> Value { match self { Self::Gemini => json!({ @@ -96,8 +98,7 @@ impl Provider { }), Self::Anthropic => json!({ "model": model, - "max_tokens": max_tokens, - "temperature": 0, + "max_tokens": max_tokens.max(4096), "system": system, "messages": [{"role": "user", "content": user}], }), @@ -121,10 +122,18 @@ impl Provider { } } -/// The JSON array in an answer, without any prose or code fence around it. -pub fn answer_json(text: &str) -> &str { - match (text.find('['), text.rfind(']')) { - (Some(start), Some(end)) if start < end => &text[start..=end], - _ => text, +/// The first JSON array in an answer that holds items, ignoring any prose, +/// fence or reasoning around it; an empty array only when none does. +pub fn answers(text: &str) -> Option> { + let mut parsed = text.match_indices('[').filter_map(|(start, _)| { + serde_json::Deserializer::from_str(&text[start..]) + .into_iter::>() + .next()? + .ok() + }); + let first = parsed.next()?; + if !first.is_empty() { + return Some(first); } + Some(parsed.find(|items| !items.is_empty()).unwrap_or(first)) } diff --git a/src/plugin/tests/summarize.rs b/src/plugin/tests/summarize.rs index 73c19ecd7..b3f47f073 100644 --- a/src/plugin/tests/summarize.rs +++ b/src/plugin/tests/summarize.rs @@ -646,9 +646,12 @@ fn answers(items: &[(u32, &str)]) -> String { fn each_provider_sends_its_own_request_and_reads_its_own_answer() { let (_, sides) = project("a.py", "", LARGE); let id = select(&trees(&sides), 3, None)[0].0; - let fenced = format!("```json\n{}\n```", answers(&[(id, "call a, b, c")])); + let fenced = format!( + "maybe [a] or [b], or []\n```json\n{}\n```", + answers(&[(id, "call a, b, c")]) + ); let prose = format!( - "Here are the summaries:\n{}", + "Summaries for [1] fold:\n{}\n(see [docs])", answers(&[(id, "call a, b, c")]) ); for (provider, path, response, auth) in [ @@ -701,7 +704,8 @@ fn each_provider_sends_its_own_request_and_reads_its_own_answer() { assert!(request .headers .contains(&"anthropic-version: 2023-06-01".to_owned())); - assert_eq!(body["max_tokens"], 800); + assert_eq!(body["max_tokens"], 4096); + assert!(body.get("temperature").is_none()); assert!(body["system"] .as_str() .unwrap() From e46f4edea9db09565625ecd4e0e1648bfdc009d4 Mon Sep 17 00:00:00 2001 From: thesiti92 Date: Wed, 30 Sep 2026 14:39:25 -0400 Subject: [PATCH 5/8] Constrain OpenAI and Anthropic answers with a JSON schema Both take only an object at the root, so their answers are {"summaries": [...]}. A server that rejects the schema fails the request; one that ignores it is still parsed leniently. --- plugins/summarize/plugin.wasm | Bin 581301 -> 602094 bytes plugins/summarize/src/provider.rs | 39 +++++++++++++++++++++++++++--- src/plugin/tests/summarize.rs | 31 +++++++++++++++++------- 3 files changed, 57 insertions(+), 13 deletions(-) diff --git a/plugins/summarize/plugin.wasm b/plugins/summarize/plugin.wasm index 06778ecfd2d41d0af6c6af7a7362f49bc31e9af8..43d6fe3c6770c9393cd47f3ea79e2b485913c9e4 100644 GIT binary patch delta 88817 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 Fe*nLb6fpn* delta 73023 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 z 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 diff --git a/plugins/summarize/src/provider.rs b/plugins/summarize/src/provider.rs index 694c66f03..27c42089a 100644 --- a/plugins/summarize/src/provider.rs +++ b/plugins/summarize/src/provider.rs @@ -60,9 +60,9 @@ impl Provider { headers } - /// Only Gemini constrains the answer with a schema; the others follow - /// the system prompt, and [`answers`] skips what they wrap it in. Only - /// Gemini gets a temperature: current reasoning models reject one. + /// Every provider constrains the answer with a schema. OpenAI and + /// Anthropic need an object at its root, so theirs wraps the array. + /// Only Gemini gets a temperature: current reasoning models reject one. /// OpenAI gets no length limit either, since compatible servers name it /// differently; Anthropic's limit also covers thinking, so it has a floor. pub fn body(self, model: &str, system: &str, user: &str, max_tokens: usize) -> Value { @@ -95,12 +95,17 @@ impl Provider { {"role": "system", "content": system}, {"role": "user", "content": user}, ], + "response_format": { + "type": "json_schema", + "json_schema": {"name": "summaries", "strict": true, "schema": summaries_schema()}, + }, }), Self::Anthropic => json!({ "model": model, "max_tokens": max_tokens.max(4096), "system": system, "messages": [{"role": "user", "content": user}], + "output_config": {"format": {"type": "json_schema", "schema": summaries_schema()}}, }), } } @@ -122,8 +127,34 @@ impl Provider { } } +/// `{"summaries": [{id, summary, pseudocode}]}`, every field required, for +/// the providers whose structured outputs take only an object at the root. +fn summaries_schema() -> Value { + json!({ + "type": "object", + "properties": { + "summaries": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": {"type": "integer"}, + "summary": {"type": "string"}, + "pseudocode": {"type": "string"}, + }, + "required": ["id", "summary", "pseudocode"], + "additionalProperties": false, + }, + }, + }, + "required": ["summaries"], + "additionalProperties": false, + }) +} + /// The first JSON array in an answer that holds items, ignoring any prose, -/// fence or reasoning around it; an empty array only when none does. +/// fence or reasoning around it, and the `summaries` object wrapping it; +/// an empty array only when none does. pub fn answers(text: &str) -> Option> { let mut parsed = text.match_indices('[').filter_map(|(start, _)| { serde_json::Deserializer::from_str(&text[start..]) diff --git a/src/plugin/tests/summarize.rs b/src/plugin/tests/summarize.rs index b3f47f073..c6055085b 100644 --- a/src/plugin/tests/summarize.rs +++ b/src/plugin/tests/summarize.rs @@ -642,18 +642,24 @@ fn answers(items: &[(u32, &str)]) -> String { serde_json::to_string(&answers).unwrap() } +/// An object root with every field required and nothing else allowed, as +/// OpenAI's strict mode and Anthropic's structured outputs require. +fn assert_summaries_schema(schema: &serde_json::Value) { + assert_eq!(schema["type"], "object"); + assert_eq!(schema["required"], json!(["summaries"])); + assert_eq!(schema["additionalProperties"], false); + let item = &schema["properties"]["summaries"]["items"]; + assert_eq!(item["required"], json!(["id", "summary", "pseudocode"])); + assert_eq!(item["additionalProperties"], false); +} + #[test] fn each_provider_sends_its_own_request_and_reads_its_own_answer() { let (_, sides) = project("a.py", "", LARGE); let id = select(&trees(&sides), 3, None)[0].0; - let fenced = format!( - "maybe [a] or [b], or []\n```json\n{}\n```", - answers(&[(id, "call a, b, c")]) - ); - let prose = format!( - "Summaries for [1] fold:\n{}\n(see [docs])", - answers(&[(id, "call a, b, c")]) - ); + let wrapped = format!("{{\"summaries\": {}}}", answers(&[(id, "call a, b, c")])); + // A compatible server that ignores the schema may wrap its answer. + let fenced = format!("maybe [a] or [b], or []\n```json\n{wrapped}\n```"); for (provider, path, response, auth) in [ ( "openai", @@ -664,7 +670,7 @@ fn each_provider_sends_its_own_request_and_reads_its_own_answer() { ( "anthropic", "", - json!({"content": [{"type": "thinking", "thinking": "[1]"}, {"type": "text", "text": prose}]}), + json!({"content": [{"type": "thinking", "thinking": "[1]"}, {"type": "text", "text": wrapped}]}), "x-api-key: test-key", ), ] { @@ -698,6 +704,10 @@ fn each_provider_sends_its_own_request_and_reads_its_own_answer() { .unwrap() .contains(&format!("fold {id}: lines 2-4"))); assert!(body.get("temperature").is_none()); + let format = &body["response_format"]; + assert_eq!(format["type"], "json_schema"); + assert_eq!(format["json_schema"]["strict"], true); + assert_summaries_schema(&format["json_schema"]["schema"]); } _ => { assert_eq!(request.line, "POST /v1/messages HTTP/1.1"); @@ -706,6 +716,9 @@ fn each_provider_sends_its_own_request_and_reads_its_own_answer() { .contains(&"anthropic-version: 2023-06-01".to_owned())); assert_eq!(body["max_tokens"], 4096); assert!(body.get("temperature").is_none()); + let format = &body["output_config"]["format"]; + assert_eq!(format["type"], "json_schema"); + assert_summaries_schema(&format["schema"]); assert!(body["system"] .as_str() .unwrap() From a5eae64369815477b4c9e01081b08d0f0c34c709 Mon Sep 17 00:00:00 2001 From: thesiti92 Date: Wed, 30 Sep 2026 15:19:17 -0400 Subject: [PATCH 6/8] Use one summaries schema for every provider Gemini now takes the same JSON Schema through responseJsonSchema, and the default prompt asks for the {"summaries": [...]} object. --- plugins/summarize/plugin.toml | 4 ++-- plugins/summarize/plugin.wasm | Bin 602094 -> 597514 bytes plugins/summarize/src/provider.rs | 20 ++++---------------- src/plugin/tests/summarize.rs | 9 +++++++-- 4 files changed, 13 insertions(+), 20 deletions(-) diff --git a/plugins/summarize/plugin.toml b/plugins/summarize/plugin.toml index 8946ce88b..78f18f3f3 100644 --- a/plugins/summarize/plugin.toml +++ b/plugins/summarize/plugin.toml @@ -71,8 +71,8 @@ For each listed fold, rewrite that function body as short \ pseudocode. Keep the names. No prose, no comments, no code fences. Use as few lines as \ possible: about one pseudocode line per five source lines, and never more than a third \ of the body's lines. When a fold lists a doc, also set "summary" to one sentence copied \ -verbatim from that doc; otherwise leave it empty. Answer with a JSON array of \ -{"id", "summary", "pseudocode"} objects, one per fold.""" +verbatim from that doc; otherwise leave it empty. Answer with a JSON object whose \ +"summaries" array holds one {"id", "summary", "pseudocode"} object per fold.""" [options.tests] type = "boolean" diff --git a/plugins/summarize/plugin.wasm b/plugins/summarize/plugin.wasm index 43d6fe3c6770c9393cd47f3ea79e2b485913c9e4..f5c7b3f5ee948bc35783d91c719995e0c53bfacf 100644 GIT binary patch delta 27535 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 delta 30745 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 O#wXdd@kw6E^ZpMj_QwSP diff --git a/plugins/summarize/src/provider.rs b/plugins/summarize/src/provider.rs index 27c42089a..c741091b1 100644 --- a/plugins/summarize/src/provider.rs +++ b/plugins/summarize/src/provider.rs @@ -60,8 +60,7 @@ impl Provider { headers } - /// Every provider constrains the answer with a schema. OpenAI and - /// Anthropic need an object at its root, so theirs wraps the array. + /// Every provider constrains the answer with the same schema. /// Only Gemini gets a temperature: current reasoning models reject one. /// OpenAI gets no length limit either, since compatible servers name it /// differently; Anthropic's limit also covers thinking, so it has a floor. @@ -75,18 +74,7 @@ impl Provider { "maxOutputTokens": max_tokens, "thinkingConfig": {"thinkingBudget": 0}, "responseMimeType": "application/json", - "responseSchema": { - "type": "ARRAY", - "items": { - "type": "OBJECT", - "properties": { - "id": {"type": "INTEGER"}, - "summary": {"type": "STRING"}, - "pseudocode": {"type": "STRING"}, - }, - "required": ["id", "pseudocode"], - }, - }, + "responseJsonSchema": summaries_schema(), }, }), Self::OpenAi => json!({ @@ -127,8 +115,8 @@ impl Provider { } } -/// `{"summaries": [{id, summary, pseudocode}]}`, every field required, for -/// the providers whose structured outputs take only an object at the root. +/// `{"summaries": [{id, summary, pseudocode}]}`, every field required: OpenAI +/// and Anthropic take only an object at the root. fn summaries_schema() -> Value { json!({ "type": "object", diff --git a/src/plugin/tests/summarize.rs b/src/plugin/tests/summarize.rs index c6055085b..25e9fa2b3 100644 --- a/src/plugin/tests/summarize.rs +++ b/src/plugin/tests/summarize.rs @@ -112,8 +112,8 @@ fn gemini_answer(items: &[(u32, &str)]) -> String { .iter() .map(|(id, text)| json!({"id": id, "pseudocode": text})) .collect(); - json!({"candidates": [{"content": {"parts": [{"text": serde_json::to_string(&answers).unwrap()}]}}]}) - .to_string() + let text = json!({"summaries": answers}).to_string(); + json!({"candidates": [{"content": {"parts": [{"text": text}]}}]}).to_string() } fn summarizer(endpoint: &str, retries: u32) -> Pipeline { @@ -628,6 +628,11 @@ fn gemini_requests_keep_their_path_and_key_header() { assert!(request .headers .contains(&"x-goog-api-key: test-key".to_owned())); + let body: serde_json::Value = serde_json::from_str(&request.body).unwrap(); + let config = &body["generationConfig"]; + assert!(config.get("responseSchema").is_none()); + assert_eq!(config["responseMimeType"], "application/json"); + assert_summaries_schema(&config["responseJsonSchema"]); assert!(!request .headers .iter() From 1084e2afeeacb25070b03a5374bd146a6a4915dd Mon Sep 17 00:00:00 2001 From: thesiti92 Date: Wed, 30 Sep 2026 15:38:10 -0400 Subject: [PATCH 7/8] Take the summarizer's default prompt from plugin.toml only default.toml repeated the old prompt, so configs without an explicit plugin order kept it. A test now checks that default.toml agrees with each plugin.toml. --- src/config/default.toml | 1 - src/plugin/config.rs | 14 ++++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/config/default.toml b/src/config/default.toml index 6056aa8a7..1dba1f8e7 100644 --- a/src/config/default.toml +++ b/src/config/default.toml @@ -46,7 +46,6 @@ test_min_lines = 20 request_timeout_ms = 60000 max_concurrency = 16 retries = 3 -system_prompt = """For each listed fold, rewrite that function body as short pseudocode. Keep the names. No prose, no comments, no code fences. Use as few lines as possible: about one pseudocode line per five source lines, and never more than a third of the body's lines. When a fold lists a doc, also set "summary" to one sentence copied verbatim from that doc; otherwise leave it empty. Answer with a JSON array of {"id", "summary", "pseudocode"} objects, one per fold.""" [plugins.bundled.test-bodies] enabled = true diff --git a/src/plugin/config.rs b/src/plugin/config.rs index 995276333..17a0720f2 100644 --- a/src/plugin/config.rs +++ b/src/plugin/config.rs @@ -528,6 +528,20 @@ impl PluginsConfig { #[cfg(test)] mod tests { use crate::config::Config; + + #[test] + fn the_embedded_defaults_agree_with_each_plugin_toml() { + for (name, entry) in super::default_tables().bundled { + let defaults = super::builtin::manifest(&name) + .expect("a bundled plugin") + .defaults(); + for (key, value) in &entry.options { + if let Some(default) = defaults.get(key) { + assert_eq!(value, default, "{name}.{key}"); + } + } + } + } use serde_json::Value; /// Every setting the schema lists, as a settings screen flattens it: From e98557d4aea51f3390c05c275af18daa55855823 Mon Sep 17 00:00:00 2001 From: thesiti92 Date: Wed, 30 Sep 2026 16:41:51 -0400 Subject: [PATCH 8/8] Name OpenRouter in the provider and endpoint descriptions --- plugins/summarize/plugin.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/summarize/plugin.toml b/plugins/summarize/plugin.toml index 78f18f3f3..d92270543 100644 --- a/plugins/summarize/plugin.toml +++ b/plugins/summarize/plugin.toml @@ -13,7 +13,7 @@ default = false [options.provider] enum = ["gemini", "openai", "anthropic"] title = "Provider" -description = "Which model API to call. `openai` also reaches any OpenAI-compatible server through `endpoint`. Set `model` to one of the provider's models when you change this." +description = "Which model API to call. `openai` also reaches OpenRouter and any other OpenAI-compatible server through `endpoint`. Set `model` to one of the provider's models when you change this." default = "gemini" [options.model] @@ -37,7 +37,7 @@ description = "Sent to the selected provider. The provider's variable in the env [options.endpoint] type = "string" title = "Endpoint URL" -description = "Override the provider's base URL, for proxies, OpenAI-compatible servers (for example `http://localhost:11434/v1`) and tests. Empty uses the provider's default." +description = "Override the provider's base URL, for proxies, OpenAI-compatible servers (for example `https://openrouter.ai/api/v1` or `http://localhost:11434/v1`) and tests. Empty uses the provider's default." [options.request_timeout_ms] type = "integer"