Streaming Message Drafts (stream)
Plugin ini memungkinkan Anda untuk mengirim pesan teks panjang ke Telegram. Setiap iterator potongan teks dapat langsung dialirkan ke obrolan pribadi mana pun.
Misalnya, Anda dapat membuat output LLM muncul secara bertahap saat menghasilkan respons.
Panduan Cepat
Plugin ini menambahkan tiga metode pada objek konteks.
ctx: penyiaran pesan biasa.reply With Stream ctx: penyiaran markdown (direkomendasikan).reply With Markdown Stream ctx: penyiaran HTML.reply With Html Stream
Penyiaran pesan biasa (opsi pertama) mengirimkan pesan teks biasa. Dua metode lainnya menggunakan pesan yang diperkaya dari Telegram dan disarankan untuk sebagian besar kasus.
Penyiaran pesan melakukan banyak panggilan API dengan sangat cepat. Disarankan untuk menggunakan plugin auto
-retry bersama dengan plugin stream.
import { Bot, type Context } from "grammy";
import { autoRetry } from "@grammyjs/auto-retry";
import { stream, type StreamFlavor } from "@grammyjs/stream";
type MyContext = StreamFlavor<Context>;
const bot = new Bot<MyContext>("");
bot.api.config.use(autoRetry()); // sangat direkomendasikan!
bot.use(stream());
async function* slowText() {
// membuat teks secara lambat
yield "Ini adalah te";
await new Promise((r) => setTimeout(r, 2000));
yield "ks yang dihasil";
await new Promise((r) => setTimeout(r, 2000));
yield "kan secara lambat";
}
// Telegram hanya mendukung streaming di obrolan pribadi.
bot.chatType("private")
.command("stream", async (ctx) => {
// Stream pesannya!
await ctx.replyWithStream(slowText());
});
bot.start();2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
const { Bot } = require("grammy");
const { autoRetry } = require("@grammyjs/auto-retry");
const { stream } = require("@grammyjs/stream");
const bot = new Bot("");
bot.api.config.use(autoRetry()); // sangat direkomendasikan!
bot.use(stream());
async function* slowText() {
// membuat teks secara lambat
yield "Ini adalah te";
await new Promise((r) => setTimeout(r, 2000));
yield "ks yang dihasil";
await new Promise((r) => setTimeout(r, 2000));
yield "kan secara lambat";
}
// Telegram hanya mendukung streaming di obrolan pribadi.
bot.chatType("private")
.command("stream", async (ctx) => {
// Stream pesannya!
await ctx.replyWithStream(slowText());
});
bot.start();2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import { Bot, type Context } from "https://deno.land/x/grammy@v1.44.0/mod.ts";
import { autoRetry } from "https://deno.land/x/grammy_auto_retry@v2.0.2/mod.ts";
import {
stream,
type StreamFlavor,
} from "https://deno.land/x/grammy_stream@v1.1.0/mod.ts";
type MyContext = StreamFlavor<Context>;
const bot = new Bot<MyContext>("");
bot.api.config.use(autoRetry()); // sangat direkomendasikan!
bot.use(stream());
async function* slowText() {
// membuat teks secara lambat
yield "Ini adalah te";
await new Promise((r) => setTimeout(r, 2000));
yield "ks yang dihasil";
await new Promise((r) => setTimeout(r, 2000));
yield "kan secara lambat";
}
// Telegram hanya mendukung streaming di obrolan pribadi.
bot.chatType("private")
.command("stream", async (ctx) => {
// Stream pesannya!
await ctx.replyWithStream(slowText());
});
bot.start();2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Itulah dia!
Integrasi LLM
Sebagian besar integrasi LLM memungkinkan Anda untuk menampilkan output secara langsung saat sedang diproses. Anda dapat menggunakan plugin ini untuk menampilkan output LLM secara bertahap di obrolan pribadi mana pun.
Misalnya, jika Anda menggunakan AI SDK, konfigurasi Anda dapat terlihat seperti ini:
import { streamText } from "ai";
import { google } from "@ai-sdk/google";
bot.chatType("private")
.command("credits", async (ctx) => {
// Kirim perintah ke LLM:
const { textStream } = streamText({
model: google("gemini-2.5-flash"),
prompt: "Sebarapa keren bot grammY?",
});
// Otomatis mengalirkan respons dengan grammY:
await ctx.replyWithMarkdownStream(textStream);
});2
3
4
5
6
7
8
9
10
11
12
13
14
import { streamText } from "npm:ai";
import { google } from "npm:@ai-sdk/google";
bot.chatType("private")
.command("credits", async (ctx) => {
// Kirim perintah ke LLM:
const { textStream } = streamText({
model: google("gemini-2.5-flash"),
prompt: "Sebarapa keren bot grammY?",
});
// Otomatis mengalirkan respons dengan grammY:
await ctx.replyWithMarkdownStream(textStream);
});2
3
4
5
6
7
8
9
10
11
12
13
14
Pastikan untuk mengganti gemini dengan model apapun yang tersedia.