Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 23 additions & 1 deletion packages/ui/src/components/message-part.css
Original file line number Diff line number Diff line change
Expand Up @@ -277,13 +277,35 @@
}
}

[data-component="reasoning-part-trigger"] {
width: 100%;
min-height: 24px;
display: flex;
align-items: center;
justify-content: flex-start;
gap: 0px;
cursor: pointer;

[data-slot="reasoning-part-label"] {
font-family: var(--font-family-sans);
font-size: 14px;
font-weight: var(--font-weight-medium);
line-height: var(--line-height-large);
color: var(--text-strong);
}

[data-slot="collapsible-arrow"] {
color: var(--icon-weaker);
}
}

[data-component="reasoning-part"] {
width: 100%;
color: var(--text-base);
line-height: var(--line-height-normal);

[data-component="markdown"] {
margin-top: 16px;
margin-top: 4px;
font-style: normal;
font-size: 13px;
color: var(--text-weak);
Expand Down
31 changes: 26 additions & 5 deletions packages/ui/src/components/message-part.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,7 @@ export interface MessagePartProps {
virtualizeDiff?: boolean
showAssistantCopyPartID?: string | null
turnDurationMs?: number
working?: boolean
}

export type PartComponent = Component<MessagePartProps>
Expand Down Expand Up @@ -705,6 +706,8 @@ export function AssistantParts(props: {
return part().get(entry.ref.messageID)?.get(entry.ref.partID)
})

const tail = createMemo(() => entryAccessor().key === last())

return (
<Show when={message()}>
<Show when={item()}>
Expand All @@ -714,6 +717,7 @@ export function AssistantParts(props: {
showAssistantCopyPartID={props.showAssistantCopyPartID}
turnDurationMs={props.turnDurationMs}
defaultOpen={partDefaultOpen(item()!, props.shellToolDefaultOpen, props.editToolDefaultOpen)}
working={props.working && tail()}
/>
</Show>
</Show>
Expand Down Expand Up @@ -1274,6 +1278,7 @@ export function Part(props: MessagePartProps) {
virtualizeDiff={props.virtualizeDiff}
showAssistantCopyPartID={props.showAssistantCopyPartID}
turnDurationMs={props.turnDurationMs}
working={props.working}
/>
</Show>
)
Expand Down Expand Up @@ -1580,19 +1585,35 @@ PART_MAPPING["text"] = function TextPartDisplay(props) {

PART_MAPPING["reasoning"] = function ReasoningPartDisplay(props) {
const data = useData()
const i18n = useI18n()
const part = () => props.part as ReasoningPart
const streaming = createMemo(
() => props.message.role === "assistant" && typeof (props.message as AssistantMessage).time.completed !== "number",
)
const text = () => readPartText(data.store.part_text_accum_delta, part())
const [open, setOpen] = createSignal(true)

return (
<Show when={text()}>
<div data-component="reasoning-part" data-timeline-part-id={part().id}>
<Show when={streaming()} fallback={<Markdown text={text()} cacheKey={part().id} streaming={false} />}>
<PacedMarkdown text={text()} cacheKey={part().id} streaming={streaming()} />
</Show>
</div>
<Collapsible open={open()} onOpenChange={setOpen} variant="ghost">
<Collapsible.Trigger>
<div data-component="reasoning-part-trigger">
<span data-slot="reasoning-part-label">
<Show when={props.working && streaming()} fallback={i18n.t("ui.sessionTurn.status.reasoningSummary")}>
<TextShimmer text={i18n.t("ui.sessionTurn.status.reasoning")} />
</Show>
</span>
<Collapsible.Arrow />
</div>
</Collapsible.Trigger>
<Collapsible.Content>
<div data-component="reasoning-part" data-timeline-part-id={part().id}>
<Show when={streaming()} fallback={<Markdown text={text()} cacheKey={part().id} streaming={false} />}>
<PacedMarkdown text={text()} cacheKey={part().id} streaming={streaming()} />
</Show>
</div>
</Collapsible.Content>
</Collapsible>
</Show>
)
}
Expand Down
2 changes: 2 additions & 0 deletions packages/ui/src/i18n/ar.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,8 @@ export const dict = {
"ui.sessionTurn.status.thinkingWithTopic": "تفكير - {{topic}}",
"ui.sessionTurn.status.gatheringThoughts": "جمع الأفكار",
"ui.sessionTurn.status.consideringNextSteps": "النظر في الخطوات التالية",
"ui.sessionTurn.status.reasoning": "التفكير",
"ui.sessionTurn.status.reasoningSummary": "ملخّص التفكير",

"ui.messagePart.questions.dismissed": "تم رفض الأسئلة",
"ui.messagePart.compaction": "تم ضغط الجلسة",
Expand Down
2 changes: 2 additions & 0 deletions packages/ui/src/i18n/br.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,8 @@ export const dict = {
"ui.sessionTurn.status.thinkingWithTopic": "Pensando - {{topic}}",
"ui.sessionTurn.status.gatheringThoughts": "Organizando pensamentos",
"ui.sessionTurn.status.consideringNextSteps": "Considerando próximos passos",
"ui.sessionTurn.status.reasoning": "Raciocínio",
"ui.sessionTurn.status.reasoningSummary": "Resumo do Raciocínio",

"ui.messagePart.questions.dismissed": "Perguntas descartadas",
"ui.messagePart.compaction": "Sessão compactada",
Expand Down
2 changes: 2 additions & 0 deletions packages/ui/src/i18n/bs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,8 @@ export const dict = {
"ui.sessionTurn.status.thinkingWithTopic": "Razmišljanje - {{topic}}",
"ui.sessionTurn.status.gatheringThoughts": "Sređivanje misli",
"ui.sessionTurn.status.consideringNextSteps": "Razmatranje sljedećih koraka",
"ui.sessionTurn.status.reasoning": "Razmišljanje",
"ui.sessionTurn.status.reasoningSummary": "Sažetak Razmišljanja",

"ui.messagePart.questions.dismissed": "Pitanja odbačena",
"ui.messagePart.compaction": "Sesija sažeta",
Expand Down
2 changes: 2 additions & 0 deletions packages/ui/src/i18n/da.ts
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,8 @@ export const dict = {
"ui.sessionTurn.status.thinkingWithTopic": "Tænker - {{topic}}",
"ui.sessionTurn.status.gatheringThoughts": "Samler tanker",
"ui.sessionTurn.status.consideringNextSteps": "Overvejer næste skridt",
"ui.sessionTurn.status.reasoning": "Ræsonnering",
"ui.sessionTurn.status.reasoningSummary": "Ræsonnerings Oversigt",

"ui.messagePart.questions.dismissed": "Spørgsmål afvist",
"ui.messagePart.compaction": "Session komprimeret",
Expand Down
2 changes: 2 additions & 0 deletions packages/ui/src/i18n/de.ts
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,8 @@ export const dict = {
"ui.sessionTurn.status.thinkingWithTopic": "Denken - {{topic}}",
"ui.sessionTurn.status.gatheringThoughts": "Gedanken sammeln",
"ui.sessionTurn.status.consideringNextSteps": "Nächste Schritte erwägen",
"ui.sessionTurn.status.reasoning": "Überlegung",
"ui.sessionTurn.status.reasoningSummary": "Überlegungs Zusammenfassung",

"ui.messagePart.questions.dismissed": "Fragen verworfen",
"ui.messagePart.compaction": "Sitzung komprimiert",
Expand Down
2 changes: 2 additions & 0 deletions packages/ui/src/i18n/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,8 @@ export const dict: Record<string, string> = {
"ui.sessionTurn.status.thinkingWithTopic": "Thinking - {{topic}}",
"ui.sessionTurn.status.gatheringThoughts": "Gathering thoughts",
"ui.sessionTurn.status.consideringNextSteps": "Considering next steps",
"ui.sessionTurn.status.reasoning": "Reasoning",
"ui.sessionTurn.status.reasoningSummary": "Reasoning Summary",

"ui.messagePart.diagnostic.error": "Error",
"ui.messagePart.title.edit": "Edit",
Expand Down
2 changes: 2 additions & 0 deletions packages/ui/src/i18n/es.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,8 @@ export const dict = {
"ui.sessionTurn.status.thinkingWithTopic": "Pensando - {{topic}}",
"ui.sessionTurn.status.gatheringThoughts": "Recopilando pensamientos",
"ui.sessionTurn.status.consideringNextSteps": "Considerando siguientes pasos",
"ui.sessionTurn.status.reasoning": "Razonamiento",
"ui.sessionTurn.status.reasoningSummary": "Resumen del Razonamiento",

"ui.messagePart.questions.dismissed": "Preguntas descartadas",
"ui.messagePart.compaction": "Sesión compactada",
Expand Down
2 changes: 2 additions & 0 deletions packages/ui/src/i18n/fr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,8 @@ export const dict = {
"ui.sessionTurn.status.thinkingWithTopic": "Réflexion - {{topic}}",
"ui.sessionTurn.status.gatheringThoughts": "Rassemblement des idées",
"ui.sessionTurn.status.consideringNextSteps": "Examen des prochaines étapes",
"ui.sessionTurn.status.reasoning": "Raisonnement",
"ui.sessionTurn.status.reasoningSummary": "Résumé du Raisonnement",

"ui.messagePart.questions.dismissed": "Questions ignorées",
"ui.messagePart.compaction": "Session compactée",
Expand Down
2 changes: 2 additions & 0 deletions packages/ui/src/i18n/ja.ts
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,8 @@ export const dict = {
"ui.sessionTurn.status.thinkingWithTopic": "思考中 - {{topic}}",
"ui.sessionTurn.status.gatheringThoughts": "考えをまとめています",
"ui.sessionTurn.status.consideringNextSteps": "次のステップを検討中",
"ui.sessionTurn.status.reasoning": "推論",
"ui.sessionTurn.status.reasoningSummary": "推論サマリー",

"ui.messagePart.questions.dismissed": "質問をスキップしました",
"ui.messagePart.compaction": "セッションを圧縮しました",
Expand Down
2 changes: 2 additions & 0 deletions packages/ui/src/i18n/ko.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,8 @@ export const dict = {
"ui.sessionTurn.status.thinkingWithTopic": "생각 중 - {{topic}}",
"ui.sessionTurn.status.gatheringThoughts": "생각 정리 중",
"ui.sessionTurn.status.consideringNextSteps": "다음 단계 고려 중",
"ui.sessionTurn.status.reasoning": "추론",
"ui.sessionTurn.status.reasoningSummary": "추론 요약",

"ui.messagePart.questions.dismissed": "질문 무시됨",
"ui.messagePart.compaction": "세션 압축됨",
Expand Down
2 changes: 2 additions & 0 deletions packages/ui/src/i18n/no.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,8 @@ export const dict: Record<Keys, string> = {
"ui.sessionTurn.status.thinkingWithTopic": "Tenker - {{topic}}",
"ui.sessionTurn.status.gatheringThoughts": "Samler tanker",
"ui.sessionTurn.status.consideringNextSteps": "Vurderer neste trinn",
"ui.sessionTurn.status.reasoning": "Resonnering",
"ui.sessionTurn.status.reasoningSummary": "Resonnerings Sammendrag",

"ui.messagePart.questions.dismissed": "Spørsmål avvist",
"ui.messagePart.compaction": "Økt komprimert",
Expand Down
2 changes: 2 additions & 0 deletions packages/ui/src/i18n/pl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,8 @@ export const dict = {
"ui.sessionTurn.status.thinkingWithTopic": "Myślenie - {{topic}}",
"ui.sessionTurn.status.gatheringThoughts": "Zbieranie myśli",
"ui.sessionTurn.status.consideringNextSteps": "Rozważanie kolejnych kroków",
"ui.sessionTurn.status.reasoning": "Rozumowanie",
"ui.sessionTurn.status.reasoningSummary": "Podsumowanie Rozumowania",

"ui.messagePart.questions.dismissed": "Pytania odrzucone",
"ui.messagePart.compaction": "Sesja skompaktowana",
Expand Down
2 changes: 2 additions & 0 deletions packages/ui/src/i18n/ru.ts
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,8 @@ export const dict = {
"ui.sessionTurn.status.thinkingWithTopic": "Размышление - {{topic}}",
"ui.sessionTurn.status.gatheringThoughts": "Сбор мыслей",
"ui.sessionTurn.status.consideringNextSteps": "Рассмотрение следующих шагов",
"ui.sessionTurn.status.reasoning": "Рассуждение",
"ui.sessionTurn.status.reasoningSummary": "Сводка Рассуждений",

"ui.messagePart.questions.dismissed": "Вопросы отклонены",
"ui.messagePart.compaction": "Сессия сжата",
Expand Down
2 changes: 2 additions & 0 deletions packages/ui/src/i18n/th.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,8 @@ export const dict = {
"ui.sessionTurn.status.thinkingWithTopic": "กำลังคิด - {{topic}}",
"ui.sessionTurn.status.gatheringThoughts": "รวบรวมความคิด",
"ui.sessionTurn.status.consideringNextSteps": "พิจารณาขั้นตอนถัดไป",
"ui.sessionTurn.status.reasoning": "การใช้เหตุผล",
"ui.sessionTurn.status.reasoningSummary": "สรุปการใช้เหตุผล",

"ui.messagePart.questions.dismissed": "ละทิ้งคำถามแล้ว",
"ui.messagePart.compaction": "บีบอัดเซสชันแล้ว",
Expand Down
2 changes: 2 additions & 0 deletions packages/ui/src/i18n/tr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,8 @@ export const dict = {
"ui.sessionTurn.status.thinkingWithTopic": "Düşünüyor - {{topic}}",
"ui.sessionTurn.status.gatheringThoughts": "Düşünceler toplanıyor",
"ui.sessionTurn.status.consideringNextSteps": "Sonraki adımlar değerlendiriliyor",
"ui.sessionTurn.status.reasoning": "Akıl Yürütme",
"ui.sessionTurn.status.reasoningSummary": "Akıl Yürütme Özeti",

"ui.messagePart.questions.dismissed": "Sorular reddedildi",
"ui.messagePart.compaction": "Oturum sıkıştırıldı",
Expand Down
2 changes: 2 additions & 0 deletions packages/ui/src/i18n/uk.ts
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,8 @@ export const dict: Record<string, string> = {
"ui.sessionTurn.status.thinkingWithTopic": "Міркування — {{topic}}",
"ui.sessionTurn.status.gatheringThoughts": "Збирання думок",
"ui.sessionTurn.status.consideringNextSteps": "Розгляд наступних кроків",
"ui.sessionTurn.status.reasoning": "Міркування",
"ui.sessionTurn.status.reasoningSummary": "Підсумок міркувань",

"ui.messagePart.diagnostic.error": "Помилка",
"ui.messagePart.title.edit": "Редагувати",
Expand Down
2 changes: 2 additions & 0 deletions packages/ui/src/i18n/zh.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,8 @@ export const dict = {
"ui.sessionTurn.status.thinkingWithTopic": "思考:{{topic}}",
"ui.sessionTurn.status.gatheringThoughts": "正在整理思路",
"ui.sessionTurn.status.consideringNextSteps": "正在考虑下一步",
"ui.sessionTurn.status.reasoning": "推理",
"ui.sessionTurn.status.reasoningSummary": "推理摘要",

"ui.messagePart.questions.dismissed": "问题已忽略",
"ui.messagePart.compaction": "会话已压缩",
Expand Down
2 changes: 2 additions & 0 deletions packages/ui/src/i18n/zht.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,8 @@ export const dict = {
"ui.sessionTurn.status.thinkingWithTopic": "思考 - {{topic}}",
"ui.sessionTurn.status.gatheringThoughts": "正在整理思緒",
"ui.sessionTurn.status.consideringNextSteps": "正在考慮下一步",
"ui.sessionTurn.status.reasoning": "推理",
"ui.sessionTurn.status.reasoningSummary": "推理摘要",

"ui.messagePart.questions.dismissed": "問題已略過",
"ui.messagePart.compaction": "工作階段已壓縮",
Expand Down
Loading