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

95 lines
3.5 KiB
Markdown

# 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
```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
```