新增 LINE 渠道扩展,支持在 Yuxi 平台中集成 LINE 即时通讯渠道。 包含以下功能模块: - bot: LINE Bot 客户端封装 - config: 渠道配置管理 - gateway: SSE/WebSocket 网关接入 - webhook: Webhook 事件处理 - outbound: 外发消息管理 - streaming: 流式消息处理 - pairing: 用户配对与绑定 - security: 安全校验 - signature: 请求签名验证 - token_manager: Token 管理 - dedupe: 消息去重 - monitor: 渠道状态监控 - status: 会话状态管理 - session: 会话管理 - flex_templates: Flex 模板消息 - card_command: 卡片指令处理 - template_messages: 模板消息 - rich_menu: 富菜单管理 - actions: 动作处理 - directives: 指令处理 - delivery: 消息送达确认 - loading: 加载动画 - media: 媒体资源处理 - types: 类型定义
59 lines
2.8 KiB
Python
59 lines
2.8 KiB
Python
from __future__ import annotations
|
|
|
|
from dataclasses import replace
|
|
|
|
from yuxi.channel.streaming.models import (
|
|
BlockReplyChunking,
|
|
BlockReplyCoalescing,
|
|
StreamingConfig,
|
|
)
|
|
|
|
|
|
class LineStreaming:
|
|
streaming_mode = "block"
|
|
preview_stream_throttle_ms = StreamingConfig.defaults()["preview_stream_throttle_ms"]
|
|
preview_min_initial_chars = StreamingConfig.defaults()["preview_min_initial_chars"]
|
|
|
|
block_streaming_enabled = True
|
|
block_streaming_break = StreamingConfig.defaults()["block_streaming_break"]
|
|
block_streaming_chunk_min_chars = StreamingConfig.defaults()["block_streaming_chunk_min_chars"]
|
|
block_streaming_chunk_max_chars = StreamingConfig.defaults()["block_streaming_chunk_max_chars"]
|
|
block_streaming_chunk_break_preference = StreamingConfig.defaults()["block_streaming_chunk_break_preference"]
|
|
|
|
block_streaming_flush_on_paragraph = False
|
|
block_streaming_coalesce_min_chars = 400
|
|
block_streaming_coalesce_max_chars = 800
|
|
block_streaming_coalesce_idle_ms = StreamingConfig.defaults()["block_streaming_coalesce_idle_ms"]
|
|
|
|
def build_streaming_config(self) -> StreamingConfig:
|
|
return replace(
|
|
StreamingConfig.empty(),
|
|
preview_stream_throttle_ms=self.preview_stream_throttle_ms,
|
|
preview_min_initial_chars=self.preview_min_initial_chars,
|
|
block_streaming_enabled=self.block_streaming_enabled,
|
|
block_streaming_break=self.block_streaming_break,
|
|
block_streaming_chunk_min_chars=self.block_streaming_chunk_min_chars,
|
|
block_streaming_chunk_max_chars=self.block_streaming_chunk_max_chars,
|
|
block_streaming_chunk_break_preference=self.block_streaming_chunk_break_preference,
|
|
block_streaming_flush_on_paragraph=self.block_streaming_flush_on_paragraph,
|
|
block_streaming_coalesce_min_chars=self.block_streaming_coalesce_min_chars,
|
|
block_streaming_coalesce_max_chars=self.block_streaming_coalesce_max_chars,
|
|
block_streaming_coalesce_idle_ms=self.block_streaming_coalesce_idle_ms,
|
|
)
|
|
|
|
def build_chunking_config(self) -> BlockReplyChunking:
|
|
return BlockReplyChunking(
|
|
min_chars=self.block_streaming_chunk_min_chars,
|
|
max_chars=self.block_streaming_chunk_max_chars,
|
|
break_preference=self.block_streaming_chunk_break_preference,
|
|
flush_on_paragraph=self.block_streaming_flush_on_paragraph,
|
|
)
|
|
|
|
def build_coalesce_config(self) -> BlockReplyCoalescing:
|
|
return BlockReplyCoalescing(
|
|
min_chars=self.block_streaming_coalesce_min_chars,
|
|
max_chars=self.block_streaming_coalesce_max_chars,
|
|
idle_ms=self.block_streaming_coalesce_idle_ms,
|
|
joiner="",
|
|
flush_on_enqueue=False,
|
|
) |