text-summarize/MODULE.md
flemming-it 4a04abf4f0
Some checks failed
CI / Linux x86_64 (Forgejo) (push) Failing after 2s
sign-bundle / sign (push) Has been cancelled
feat: selectable wire format — ollama (default), openai (vLLM etc.), anthropic
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>
2026-08-20 16:33:11 +02:00

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. summary is 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