AiChainOfThoughts
AiChainOfThoughts — цепочка рассуждений AI-агента (Chain of Thoughts) для Гига-помощника: сворачиваемый заголовок «Размышляю» / «Размышлял» с длительностью и список строк-инструментов под ним.
Раскрытие — controlled (opened + onToggle) либо uncontrolled (defaultOpened). Контент цепочки передаётся слотом children (строки @cloud-ru/ds-ai-tool), сам компонент его не запоминает.
Когда использовать
- Показ процесса рассуждения агента в чате: заголовок со статусом и список выполненных шагов-инструментов.
- Потоковое отображение размышлений (стриминг) — заголовок остаётся, контент дополняется по мере поступления шагов.
Когда не нужен
- Одиночный шаг reasoning без заголовка-цепочки:
- используйте
@cloud-ru/ds-ai-reasoning.
- используйте
- Отдельный вызов инструмента вне цепочки:
- используйте
AiTool/AiToolSimpleиз@cloud-ru/ds-ai-tool.
- используйте
Анатомия
InProgress (default true)
true— слева иконка GigaChat, подпись «Размышляю» (настоящее время) и длительность.false— без иконки, подпись «Размышлял» (прошедшее время).
Broken (default false)
Поток рассуждения прерван: вместо длительности и chevron’а заголовок показывает сообщение brokenMessage, контент-цепочка не раскрывается.
Opened (default false)
Раскрытие контент-цепочки. Chevron в заголовке появляется только при наличии children и вне состояния broken.
Установка
pnpm add @cloud-ru/ds-ai-chain-of-thoughts
import { AiChainOfThoughts, AiChainOfThoughtsHeadline } from '@cloud-ru/ds-ai-chain-of-thoughts'
Примеры использования
Default
Thinking
365d09h09m09sstatus_for_users
status_for_users9с
tsx
import { AiChainOfThoughts } from '@cloud-ru/ds-ai-chain-of-thoughts';
import { AI_TOOL_ICON_TYPE, AI_TOOL_STATUS_STATE, AiTool, AiToolSimple } from '@cloud-ru/ds-ai-tool';
export function Default() {
return (
<AiChainOfThoughts inProgress duration={31568949} defaultOpened>
<AiToolSimple name='status_for_users' icon={AI_TOOL_ICON_TYPE.Search} connector />
<AiTool
name='status_for_users'
icon={AI_TOOL_ICON_TYPE.Search}
state={AI_TOOL_STATUS_STATE.Success}
duration={9}
call='{ "user_ids": [1, 2, 3] }'
/>
</AiChainOfThoughts>
);
}Broken
Thinking
tsx
import { AiChainOfThoughts } from '@cloud-ru/ds-ai-chain-of-thoughts';
export function Broken() {
return <AiChainOfThoughts broken />;
}Headline
Thinking
365d09h09m09sThought365d09h09m09s
tsx
import { AiChainOfThoughtsHeadline } from '@cloud-ru/ds-ai-chain-of-thoughts';
export function HeadlineStates() {
return (
<div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>
<AiChainOfThoughtsHeadline inProgress duration={31568949} />
<AiChainOfThoughtsHeadline inProgress={false} duration={31568949} />
</div>
);
}Props
AiChainOfThoughts
Types
Props
AiChainOfThoughtsProps| Prop | Type | Default | Required | Description |
|---|---|---|---|---|
broken | boolean | false | no | Поток рассуждения прерван. Заголовок показывает сообщение `brokenMessage`, контент-цепочка не раскрывается. По умолчанию `false`. |
brokenMessage | ReactNode | — | no | Текст сообщения о прерванном потоке (показывается при `broken`). |
children | ReactNode | — | no | Контент-цепочка рассуждения — строки `AiTool` / `AiToolSimple`. Рендерится под заголовком в раскрытом состоянии. |
className | string | — | no | Доп. класс корня. |
data-test-id | string | ai-chain-of-thoughts | no | |
defaultOpened | boolean | false | no | Начальное раскрытое состояние (uncontrolled). По умолчанию `false`. |
duration | number | — | no | Длительность рассуждения в секундах. Форматируется в д/ч/м/с. Скрыта в состоянии `broken`. |
inProgress | boolean | true | no | Идёт ли рассуждение прямо сейчас. `true` — иконка GigaChat и подпись «Размышляю»; `false` — без иконки и «Размышлял». По умолчанию `true`. |
label | ReactNode | — | no | Подпись заголовка. По умолчанию «Размышляю» / «Размышлял» — по `inProgress`. |
onToggle | ((opened: boolean) => void) | — | no | Переключение раскрытия. Получает новое значение `opened`. |
opened | boolean | — | no | Раскрытое состояние (controlled). Для uncontrolled-режима — `defaultOpened`. |
Types
AiChainOfThoughtsProps
AiChainOfThoughtsHeadline
Types
Props
AiChainOfThoughtsHeadlineProps| Prop | Type | Default | Required | Description |
|---|---|---|---|---|
broken | boolean | false | no | Поток рассуждения прерван. Вместо длительности и chevron'а под подписью показывается сообщение `brokenMessage`. По умолчанию `false`. |
brokenMessage | ReactNode | — | no | Текст сообщения о прерванном потоке (показывается при `broken`). |
className | string | — | no | Доп. класс корня. |
collapsible | boolean | false | no | Рендерить ли chevron-кнопку раскрытия. Управляется родителем (`AiChainOfThoughts` ставит `true`, когда есть раскрываемый контент). В состоянии `broken` chevron не рендерится. По умолчанию `false`. |
data-test-id | string | ai-chain-of-thoughts-headline | no | |
duration | number | — | no | Длительность рассуждения в секундах. Форматируется в д/ч/м/с (ведущие нулевые единицы опускаются, секунды показываются всегда). Скрыта в состоянии `broken`. |
inProgress | boolean | true | no | Идёт ли рассуждение прямо сейчас. `true` — слева иконка GigaChat и подпись «Размышляю» (настоящее время); `false` — без иконки и «Размышлял» (прошедшее время). По умолчанию `true`. |
label | ReactNode | — | no | Подпись заголовка. По умолчанию «Размышляю» / «Размышлял» — по `inProgress`. |
onToggle | ((opened: boolean) => void) | — | no | Клик по chevron'у. Получает новое значение `opened`. |
opened | boolean | false | no | Раскрытое состояние — задаёт направление chevron'а. По умолчанию `false`. |