Port the multi-API client from llm.chat (llm.rs kept in lockstep): the optional api input selects the dialect, default stays the unchanged v0.1.x Ollama behavior. openai covers vLLM, LM Studio, LiteLLM and cloud OpenAI; api-specific error hints; api_key sent as Bearer (ollama/openai) or x-api-key (anthropic). model_digest stays an Ollama-only best-effort probe and is documented as such. Proven end-to-end against a hermetic OpenAI-wire fake (request shape validated, response parsed) via a hub flow run. Signed-off-by: flemming-it <sf@flemming.it>
3.5 KiB
3.5 KiB
text.summarize
LLM-backed faithful summarisation. Sends source text to a configured LLM endpoint with a fidelity-over-creativity system prompt and emits the summary plus audit-grade model-provenance fields.
Capability
text.summarize@0.1.0
Inputs
| Name | Type | Description |
|---|---|---|
text |
text | Source text to summarise. |
style |
text | Optional style hint (e.g. one paragraph, three bullet points, a tweet). Default: one paragraph. |
language |
text | Optional output-language hint (e.g. German, ja-JP). Empty = same as source. |
endpoint |
text | Chat endpoint URL matching the selected api (Ollama /api/chat, OpenAI-compatible /v1/chat/completions — vLLM etc., Anthropic /v1/messages). |
api |
text | Optional wire format: ollama (default), openai, anthropic. |
model |
text | Model identifier the endpoint serves. |
api_key |
text | Optional bearer token for cloud-hosted endpoints. |
Outputs
| Name | Type | Description |
|---|---|---|
summary |
text | The summary. |
style |
text | Echo of the input style. |
language |
text | Echo of the input language. |
model_endpoint |
text | URL the summary was generated against. |
model_name |
text | Model identifier as supplied to the LLM API. |
model_digest |
text | SHA-256 digest of the served model — Ollama only, empty elsewhere. |
Fidelity over creativity
The system prompt is tuned so the summary is derivable from the source — no speculation, no implied context, no "creative" rephrasing that drifts. Suitable for compliance flows where a hallucinated summary is worse than a verbose one. The model still has the freedom the operator's chosen LLM gives it; this module is the prompt + audit harness, not a fine-tuned model.
Permissions
permissions:
- "net: localhost"
- "net: 127.0.0.1"
- "net: api.openai.com"
- "net: api.anthropic.com"
Same shape as text.translate — local Ollama by default,
opt-in cloud via operator policy.
Limits in v0.1.0
- Single-shot. Very long source texts (>32k tokens depending on the model) need an upstream chunker; v0.1.0 does not yet do automatic chunked-summarise + reduce.
- No structured output.
summaryis free-form text. JSON- formatted summaries (e.g.{ key_points: [], conclusions: [] }) are a v0.2.0 candidate.
Example flow
name: extract-summarise
inputs:
document: bytes
steps:
- id: extract
use: text.extract@^0
with:
document: $inputs.document
- id: summarise
use: text.summarize@^0
with:
text: $extract.extracted.pages[*].text
style: "three bullet points"
endpoint: "http://localhost:11434/api/chat"
model: "qwen2.5:14b"
outputs:
summary: $summarise.summary
audit_model: $summarise.model_digest
Build
cargo build --release --target wasm32-wasip2
# Output: target/wasm32-wasip2/release/text_summarize.wasm