Files
ligent/src/spinner.h
T
2026-10-04 13:50:33 +08:00

38 lines
1.5 KiB
C

/* spinner.h - 等待指示器
*
* 存在的意义: 模型不输出思考过程是好事, 但等待期间屏幕上什么都没有,
* 和"卡死了"看起来一模一样. 一个灰色的动画能把这个歧义消掉.
*
* 分两段显示, 因为这两种等待的性质不一样:
* 刚发出请求、还没收到任何东西 → "等待响应" (卡在网络或排队)
* 开始收到思维链 → "思考中" (模型确实在推理)
* 一收到正文就停 —— 那时已经有东西可看了.
*
* 输出走 stderr, 且只在 stderr 是终端时才启用, 所以不会污染管道输出.
*/
#ifndef LIGENT_SPINNER_H
#define LIGENT_SPINNER_H
#include "util.h" /* LIGENT_PRINTF */
/* enabled = 0 时所有接口都变成空操作 */
void spinner_init(int enabled);
/* 开始转动. 已在转则忽略 (幂等) */
void spinner_start(const char *label);
/* 换标签 (例如从"等待响应"切到"思考中").
* 标签真的变了才重置计时, 所以每来一片思维链都调用它也没问题.
* 未在转时只记下标签, 什么都不打印. */
void spinner_set_label(const char *label);
/* 停止并擦掉那一行. 未在转则忽略 (幂等).
* 流式输出开始前必须先调用它, 否则内容会和动画抢同一行. */
void spinner_stop(void);
/* 在动画中间插一条提示 (例如"稍后重试"): 先停并清行, 打印, 再继续转.
* 未在转时就是普通打印. */
void spinner_notice(const char *fmt, ...) LIGENT_PRINTF(1, 2);
#endif /* LIGENT_SPINNER_H */