ScaleDown: Summarize
Summarize menulis ulang teks dan dokumen panjang menjadi ringkasan yang lancar dan setia pada sumber. Atur fokus, bahasa, panjang, dan format melalui instruksi, lalu gunakan hasilnya untuk tinjauan dokumen, ringkasan transkrip, atau konteks pengambilan informasi yang lebih pendek. Jendela yang dipublikasikan adalah 1.000.000 token, dengan batas penyelesaian 4.000 token.
- Ailoot Ultra · OpenAI Chat
POST /v1/chat/completionsscaledown/summarize - Ailoot Ultra · Anthropic Messages
POST /v1/messagesscaledown/summarize
Tentang model
Deskripsi ini mencakup kemampuan model. Masukan, keluaran, dan opsi yang tersedia di Ailoot tercantum di bawah untuk metode yang dipilih.
Summarize adalah model peringkasan abstraktif ScaleDown. Model ini memadatkan teks dan dokumen yang disediakan menjadi tulisan ulang yang lancar, alih-alih memilih beberapa kalimat asli secara verbatim. Penggunaan yang dipublikasikan mencakup tinjauan dokumen, ringkasan transkrip, dan pemendekan materi yang diambil sebelum diproses oleh model lain.
Definisikan apa yang harus dipertahankan dalam ringkasan
Berikan tugas tersebut fokus dan pembaca yang dituju. Ringkasan rapat dapat mempertahankan keputusan, tanggung jawab, dan pertanyaan yang masih terbuka. Tinjauan dokumen dapat mempertahankan klaim utama dan bukti pendukung. Alur kerja pengambilan informasi dapat mempertahankan fakta yang penting bagi pertanyaan yang akan dijawab model berikutnya.
Tentukan bahasa, panjang, dan tata letak yang diinginkan dalam instruksi konten. Model yang dipublikasikan menggunakan arahan dalam prompt sistem untuk pilihan tersebut, sedangkan konfigurasi pengambilan sampelnya tetap untuk menghasilkan keluaran yang setia pada sumber. Karena itu, ringkasan untuk seseorang dan kutipan ringkas untuk model lain dapat menggunakan tata letak berbeda tanpa menjadikan variasi pengambilan sampel sebagai kendali utama.
Tulisan ulang dengan fakta yang dapat ditelusuri
Simpan nama dokumen dan batas bagian yang penting bersama sumber. Minta ringkasan mempertahankan nama, angka, keputusan yang dinyatakan, dan setiap perbedaan pendapat yang memengaruhi penafsiran. Untuk transkrip, bedakan usulan dari keputusan dan pertanyaan yang belum terselesaikan dari tindakan yang telah ditugaskan.
Setelah pembuatan, bandingkan teks yang dipadatkan dengan materi asli. Periksa apakah suatu kalimat mengubah kepastian klaim, menghilangkan kondisi, atau menggabungkan pernyataan dari pembicara atau bagian yang berbeda. Tujuan hasil yang lebih pendek adalah memudahkan pemahaman bukti sambil mempertahankan maknanya.
Dokumen, gambar, dan konteks pengambilan informasi
Rentang masukan yang dipublikasikan mencakup teks, gambar, dan berkas seperti PDF, dan model mengembalikan teks. Berikan materi yang terbaca dan tentukan apakah tugas mencakup seluruh dokumen atau bagian tertentu. Koleksi akan terbantu oleh pertanyaan peringkasan yang konsisten serta pengenal dokumen yang disimpan bersama setiap hasil.
Untuk prapemrosesan pengambilan informasi, pendekkan konten dengan berfokus pada pertanyaan spesifik yang perlu dijawab oleh penalaran tahap berikutnya. Pertahankan bagian atau fakta yang mendukung jawaban, alih-alih membuat gambaran umum sumber. Pastikan materi asli yang diambil tetap tersedia agar hasil selanjutnya masih dapat diperiksa terhadap materi tersebut.
Rencanakan panjang keluaran
Jendela konteks yang dipublikasikan adalah 1.000.000 token dan batas penyelesaiannya adalah 4.000 token. Tetapkan panjang ringkasan yang sesuai dengan artefak yang dituju. Jika koleksi besar memerlukan detail yang banyak, susun menjadi dokumen atau bagian dengan identitas yang jelas dan simpan hasil terpisah untuk masing-masing sebelum menyusun ringkasan tingkat koleksi.
Hasilnya berupa ringkasan teks. Validasi setiap struktur yang diproses mesin di dalam aplikasi, sambil menjaga agar ringkasan tertulis mudah dibaca oleh pembaca sasarannya. Simpan ringkasan bersama identitas sumber dan instruksi yang menentukan fokus, bahasa, serta panjangnya.
Kemampuan
- Ringkasan abstraktif yang menulis ulang dan memadatkan materi yang disediakan.
- Fokus, bahasa, panjang, dan tata letak yang ditentukan instruksi.
- Konfigurasi pengambilan sampel tetap yang disesuaikan untuk keluaran yang setia pada sumber.
- Masukan teks, gambar, dan berkas dengan keluaran teks.
- Konteks 1.000.000 token dan batas penyelesaian 4.000 token yang dipublikasikan.
Kasus penggunaan
- Ringkasan tinjauan dokumen — Dokumen dan temuan yang perlu dipertahankan pembaca. Hasil: Ringkasan singkat teridentifikasi dengan fakta utama dipertahankan.
- Ringkasan transkrip — Transkrip yang berfokus pada keputusan, tanggung jawab, atau pertanyaan terbuka. Hasil: Teks yang lebih pendek dengan kategori tersebut dipisahkan.
- Prapemrosesan materi yang diambil — Konten yang diambil dan pertanyaan pada tahap berikutnya. Hasil: Bagian bukti ringkas untuk penalaran berikutnya.
- Ringkasan koleksi — Dokumen bernama dengan instruksi peringkasan yang sama. Hasil: Ringkasan per dokumen yang dapat dibandingkan.
Batasan
- Konteks — Jendela konteks yang dipublikasikan: 1.000.000 token.
- Jawaban — Batas penyelesaian yang dipublikasikan: 4.000 token.
- Kendali gaya — Atur fokus, bahasa, panjang, dan format melalui instruksi; pengambilan sampel tetap.
- Kontrak keluaran — Keluaran yang dipublikasikan adalah teks; pemanggilan fungsi dan JSON yang diwajibkan mengikuti skema tidak dicantumkan.
Ailoot Ultra · OpenAI Chat POST /v1/chat/completions scaledown/summarize
scaledown/summarizeMulai
Summarize menulis ulang teks dan dokumen panjang menjadi ringkasan yang lancar dan setia pada sumber. Atur fokus, bahasa, panjang, dan format melalui instruksi, lalu gunakan hasilnya untuk tinjauan dokumen, ringkasan transkrip, atau konteks pengambilan informasi yang lebih pendek. Jendela yang dipublikasikan adalah 1.000.000 token, dengan batas penyelesaian 4.000 token.
- Masukan yang diterima
- Teks
- Hasil
- Teks
Tersedia di Ailoot · masukan & metode
Ailoot Ultra · OpenAI Chat POST /v1/chat/completions
- Masukan
text- Keluaran
text- Format keluaran
- json atau SSE
| Kolom | Jenis | Persyaratan | Nilai & batasan | Bawaan |
|---|---|---|---|---|
Kolommodel | Jenisstring | PersyaratanWajib | Nilai & batasan scaledown/summarize | Bawaan— |
Kolommessages | Jenismessage[] | PersyaratanWajib | Nilai & batasan Item minimum: 1 | Bawaan— |
Kolommessages[].role | Jenisstring | PersyaratanWajib | Nilai & batasan Bergantung pada model | Bawaan— |
Kolommessages[].content | Jenisstring | PersyaratanOpsional | Nilai & batasan Berlaku jika: Percakapan teks | Bawaan— |
Kolomstream | Jenisboolean | PersyaratanOpsional | Nilai & batasan | Bawaanfalse |
Kombinasi bahan masukan
Teks · Teks UTF8
messages[].content
Parameter metode dan siklus hidup
| Parameter | Kontrak |
|---|---|
Parametercontent_type | Kontrakapplication/json |
Parameterrequired | Kontrakmodel, messages |
Parametermaterial_types | Kontraktext |
Parametermessages | Kontrakarray pesan dengan struktur role/content |
Parameterfile_material | Kontrakdokumen UTF-8 yang sebenarnya dimasukkan sebagai teks apa adanya; ID file tidak disimpulkan |
Parameteroptional_controls | Kontrakstream |
Parametercontrol_scope | KontrakPercakapan teks; stream adalah nilai boolean dengan false sebagai bawaan. |
Parameteroutput_modalities | Kontraktext |
Parameterhosted_operations | Kontrakfalse |
Parametermultimodal_input_binding | Kontraknull |
Alias metode: /chat/completions
Siklus hidup: synchronous_or_streamed
Kirim ID model yang tepat bersama messages.
Panjang konteks bukan batas keluaran.
File teks dapat menyediakan teks apa adanya; masukan gambar/audio/objek file memerlukan pengikatan yang tepat.
Paket
Referensi tarif tidak menambah opsi permintaan. Parameter yang didukung tercantum pada metode yang dipilih.
- Mode Fast
- Tidak ditentukan Saat mode fast dipilih
- Mode Flex
- Tidak ditentukan Saat mode flex dipilih
- Upaya penalaran maksimum
- Tidak ditentukan Saat upaya penalaran maksimum menggunakan penyesuaian default
Tarif Ailoot
Harga menurut konfigurasi
Cocokkan setiap biaya dengan kondisi yang ditampilkan. Gunakan satu tarif untuk setiap kelompok konfigurasi alternatif.
| Konfigurasi | Jadwal tarif | Token konteks, lebih dari | Token konteks, hingga dan termasuk | Biaya |
|---|---|---|---|---|
| KonfigurasiTarif dasar token | Jadwal tarifTarif dasar | Token konteks, lebih dari— | Token konteks, hingga dan termasukTanpa batas atas | Biaya Masukan · Token masukan $0.0001 / 1K token Keluaran · Token keluaran $0 / 1K token Masukan · Pembacaan cache — / 1K token Masukan · Penulisan cache — / 1K token Masukan · Penulisan cache, 1 jam — / 1K token |
| KonfigurasiPanjang permintaan · tingkat 1 | Jadwal tarif— | Token konteks, lebih dari0 | Token konteks, hingga dan termasukTanpa batas atas | Biaya Masukan · Token masukan $0.0001 / 1K token Keluaran · Token keluaran $0 / 1K token Masukan · Pembacaan cache — / 1K token Masukan · Penulisan cache — / 1K token Masukan · Penulisan cache, 1 jam — / 1K token |
Ailoot mencadangkan perkiraan dana sebelum permintaan. Setelah hasil diterima, tagihan akhir diselesaikan berdasarkan penggunaan yang terukur. Penyelesaian tagihan streaming menggunakan catatan penggunaan akhir. Cara kerja cadangan dan penyelesaian tagihan →
Contoh permintaan
Ailoot Ultra · OpenAI Chat
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model":"scaledown/summarize","messages":[{"role":"user","content":"hello"}],"stream":false}')
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
-H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
r=json.loads(Path("result.json").read_text())
for x in r.get("choices",[]):
if x.get("message",{}).get("content"): print(x["message"]["content"])
PY_RESULT
from openai import OpenAI
import os
if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.chat.completions.create(model="scaledown/summarize", messages=[{"role":"user","content":"hello"}], stream=False)
import base64, json
from pathlib import Path
def save_result(data, stem="result"):
# Keep every field, including usage, IDs, reasoning and tool requests.
Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
print(json.dumps(data, ensure_ascii=False, indent=2))
def save_blob(encoded, suffix, label):
raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
file = Path(stem + "-" + label + "." + ext)
file.write_bytes(raw)
print("Saved", file)
for index, block in enumerate(data.get("content") or []):
print("Content", index, json.dumps(block, ensure_ascii=False))
for choice in data.get("choices") or []:
print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
for index, item in enumerate(data.get("output") or []):
print("Output", index, json.dumps(item, ensure_ascii=False))
if item.get("type") == "image_generation_call" and item.get("result"):
save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
for ci, candidate in enumerate(data.get("candidates") or []):
for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
blob = part.get("inlineData") or part.get("inline_data")
if blob and blob.get("data"):
mime = blob.get("mimeType") or blob.get("mime_type")
suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))
save_result(result.to_dict(mode="json"))
Terima dan simpan hasil
Ailoot Ultra · OpenAI Chat
json atau SSE
Simpan semua hasil yang selesai
Simpan setiap respons lengkap, berkas, dan bagian konten yang dikembalikan.
Simpan setiap alternatif jawaban beserta konten, panggilan alat, dan penalarannya. Dalam SSE, gabungkan delta menurut indeks alternatif jawaban/alat, lalu pertahankan alasan penghentian akhir dan data penggunaan.
Jika respons asli perlu diperiksa
Simpan ID permintaan/respons dan header. URL umum untuk pengambilan tugas teks tidak disediakan.
Kolom respons
| Kolom | Jenis |
|---|---|
Kolomchoices[].index | Jenisinteger |
Kolomchoices[].message.content | Jenisstring|null |
Kolomchoices[].message.tool_calls | Jenistool_call[] |
Kolomchoices[].message.reasoning_content | Jenisstring |
Kolomchoices[].message.reasoning_details | Jenisobject|array |
Kolomchoices[].finish_reason | Jenisstring|null |
Kolomusage | Jenisobject |
Kesalahan dan langkah berikutnya
| Respons | Kondisi | Langkah berikutnya |
|---|---|---|
Respons400 · invalid_request_error | KondisiBidang wajib, representasi materi, atau nilai parameter tidak valid | Langkah berikutnyaPerbaiki bidang yang ditunjukkan sebelum permintaan pembuatan baru. |
Alias
Alias model
Ailoot Ultra scaledown/summarize
Alias jalur metode
/chat/completions
ID pemanggil terkait
Ailoot Ultra · Anthropic Messages POST /v1/messages scaledown/summarize
scaledown/summarizeMulai
Summarize menulis ulang teks dan dokumen panjang menjadi ringkasan yang lancar dan setia pada sumber. Atur fokus, bahasa, panjang, dan format melalui instruksi, lalu gunakan hasilnya untuk tinjauan dokumen, ringkasan transkrip, atau konteks pengambilan informasi yang lebih pendek. Jendela yang dipublikasikan adalah 1.000.000 token, dengan batas penyelesaian 4.000 token.
- Masukan yang diterima
- Teks
- Hasil
- json · sse
Tersedia di Ailoot · masukan & metode
Ailoot Ultra · Anthropic Messages POST /v1/messages
- Masukan
text- Keluaran
json,sse- Format keluaran
- JSON atau SSE
| Kolom | Jenis | Persyaratan | Nilai & batasan | Bawaan |
|---|---|---|---|---|
Kolommodel | Jenisstring | PersyaratanWajib | Nilai & batasan scaledown/summarize | Bawaan— |
Kolommessages | Jenismessage[] | PersyaratanWajib | Nilai & batasan | Bawaan— |
Kolommessages[].role | Jenisstring | PersyaratanWajib | Nilai & batasan user, assistant | Bawaan— |
Kolommessages[].content | Jenisstring | PersyaratanWajib | Nilai & batasan | Bawaan— |
Kolommax_tokens | Jenisinteger | PersyaratanWajib | Nilai & batasan | Bawaan— |
Kolomstream | Jenisboolean | PersyaratanOpsional | Nilai & batasan | Bawaanfalse |
Kombinasi bahan masukan
Teks · Teks UTF-8
string messages[].content
Parameter metode dan siklus hidup
| Parameter | Kontrak |
|---|---|
Parametercontent_type | Kontrakapplication/json |
Parameterrequired | Kontrakmodel, messages, max_tokens |
Parameteroptional_controls | Kontrakstream |
Parametermaterial_types | Kontraktext |
Parametertext_file_material | KontrakBaca dokumen UTF-8 yang sebenarnya dan masukkan teksnya ke string masukan atau konten pesan yang ditunjukkan. |
Siklus hidup: synchronous_or_streamed
Paket
Referensi tarif tidak menambah opsi permintaan. Parameter yang didukung tercantum pada metode yang dipilih.
- Mode Fast
- Tidak ditentukan Saat mode fast dipilih
- Mode Flex
- Tidak ditentukan Saat mode flex dipilih
- Upaya penalaran maksimum
- Tidak ditentukan Saat upaya penalaran maksimum menggunakan penyesuaian default
Tarif Ailoot
Harga menurut konfigurasi
Cocokkan setiap biaya dengan kondisi yang ditampilkan. Gunakan satu tarif untuk setiap kelompok konfigurasi alternatif.
| Konfigurasi | Jadwal tarif | Token konteks, lebih dari | Token konteks, hingga dan termasuk | Biaya |
|---|---|---|---|---|
| KonfigurasiTarif dasar token | Jadwal tarifTarif dasar | Token konteks, lebih dari— | Token konteks, hingga dan termasukTanpa batas atas | Biaya Masukan · Token masukan $0.0001 / 1K token Keluaran · Token keluaran $0 / 1K token Masukan · Pembacaan cache — / 1K token Masukan · Penulisan cache — / 1K token Masukan · Penulisan cache, 1 jam — / 1K token |
| KonfigurasiPanjang permintaan · tingkat 1 | Jadwal tarif— | Token konteks, lebih dari0 | Token konteks, hingga dan termasukTanpa batas atas | Biaya Masukan · Token masukan $0.0001 / 1K token Keluaran · Token keluaran $0 / 1K token Masukan · Pembacaan cache — / 1K token Masukan · Penulisan cache — / 1K token Masukan · Penulisan cache, 1 jam — / 1K token |
Ailoot mencadangkan perkiraan dana sebelum permintaan. Setelah hasil diterima, tagihan akhir diselesaikan berdasarkan penggunaan yang terukur. Penyelesaian tagihan streaming menggunakan catatan penggunaan akhir. Cara kerja cadangan dan penyelesaian tagihan →
Contoh permintaan
Ailoot Ultra · Anthropic Messages
{
"model": "scaledown/summarize",
"max_tokens": 128,
"messages": [
{
"role": "user",
"content": "Summarize the incident report."
}
],
"stream": false
}set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 document}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json, os
from pathlib import Path
source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
raise SystemExit('Choose a document containing text')
payload = {'model': 'scaledown/summarize', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
Path('request.json').write_text(json.dumps(payload, ensure_ascii=False), encoding='utf-8')
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
-H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
PY_RESULT
import json, os
from pathlib import Path
source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
raise SystemExit('Choose a document containing text')
payload = {'model': 'scaledown/summarize', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
from urllib.request import Request, urlopen
from urllib.error import HTTPError
api_key = os.environ['AILOOT_API_KEY']
if not api_key.strip():
raise SystemExit('Set AILOOT_API_KEY before making a request')
headers = {'x-api-key': 'PLACEHOLDER_KEY', 'anthropic-version': '2023-06-01', 'Content-Type': 'application/json'}
headers['x-api-key'] = api_key
request = Request('https://api.ailoot.ai/v1/messages', data=json.dumps(payload, ensure_ascii=False).encode('utf-8'), headers=headers, method='POST')
try:
with urlopen(request, timeout=120) as response:
raw = response.read()
Path('response-headers.txt').write_text(str(response.headers), encoding='utf-8')
except HTTPError as error:
Path('result.json').write_bytes(error.read())
Path('response-headers.txt').write_text(str(error.headers), encoding='utf-8')
raise
Path('result.json').write_bytes(raw)
import json
from pathlib import Path
result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
Terima dan simpan hasil
Ailoot Ultra · Anthropic Messages
JSON atau SSE
Simpan semua hasil yang selesai
Simpan setiap respons lengkap, berkas, dan bagian konten yang dikembalikan.
Simpan semua blok konten, tanda tangan penalaran, dan ID penggunaan alat yang sebenarnya. Gabungkan semua delta blok SSE; blok teks pertama bukan keseluruhan keluaran.
Jika respons asli perlu diperiksa
Simpan ID permintaan/respons dan header. URL umum untuk pengambilan tugas teks tidak disediakan.
Kolom respons
| Kolom | Jenis |
|---|---|
Kolomid | Jenisstring |
Kolommodel | Jenisstring |
Kolomcontent[] | Jenistext|thinking|tool_use|other content block |
Kolomstop_reason | Jenisstring|null |
Kolomusage | Jenisobject |
Kesalahan dan langkah berikutnya
| Respons | Kondisi | Langkah berikutnya |
|---|---|---|
Respons400 · invalid_request_error | KondisiBidang wajib, representasi materi, atau nilai parameter tidak valid | Langkah berikutnyaPerbaiki bidang yang ditunjukkan sebelum permintaan pembuatan baru. |
Alias
Alias model
Ailoot Ultra scaledown/summarize
Alias jalur metode
/chat/completions
ID pemanggil terkait
FAQ · ScaleDown: Summarize
- Input dan hasil apa yang tersedia?
POST /v1/chat/completions·scaledown/summarize:text→textPOST /v1/messages·scaledown/summarize:text→json,sse- Kolom apa yang digunakan permintaan?
POST /v1/chat/completions·scaledown/summarize:model,messages,streamPOST /v1/messages·scaledown/summarize:model,messages,max_tokens,stream- Batasan apa yang berlaku?
POST /v1/chat/completions·scaledown/summarize:messages.min_items:1