# text.summarize Ollama-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 | Ollama-shaped `/api/chat` endpoint URL. | | `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 Ollama model (when reachable). | ## 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 ```yaml 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 ```yaml 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 ```bash cargo build --release --target wasm32-wasip2 # Output: target/wasm32-wasip2/release/text_summarize.wasm ```