Skip to content

Commit da70d79

Browse files
authored
chore (ai): remove getUIText() (#6202)
## Background `getUIText()` was introduced as a helper when `uiMessage.content` was removed. However, chatbots without special parts are increasingly uncommon, and the helper feels out of place. ## Summary Remove the `getUIText()` function.
1 parent bc3109f commit da70d79

File tree

31 files changed

+152
-73
lines changed

31 files changed

+152
-73
lines changed

‎.changeset/fresh-swans-march.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'ai': major
3+
---
4+
5+
chore (ai): remove getUIText helper

‎examples/next-fastapi/app/(examples)/01-chat-text/page.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import { Card } from '@/app/components';
44
import { useChat } from '@ai-sdk/react';
5-
import { getUIText } from 'ai';
65

76
export default function Page() {
87
const { messages, input, handleSubmit, handleInputChange, status } = useChat({
@@ -17,7 +16,9 @@ export default function Page() {
1716
<div key={message.id} className="flex flex-row gap-2">
1817
<div className="flex-shrink-0 w-24 text-zinc-500">{`${message.role}: `}</div>
1918
<div className="flex flex-col gap-2">
20-
{getUIText(message.parts)}
19+
{message.parts
20+
.map(part => (part.type === 'text' ? part.text : ''))
21+
.join('')}
2122
</div>
2223
</div>
2324
))}

‎examples/next-langchain/app/api/chat/route.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { toDataStream } from '@ai-sdk/langchain';
22
import { AIMessage, HumanMessage } from '@langchain/core/messages';
33
import { ChatOpenAI } from '@langchain/openai';
4-
import { createDataStreamResponse, getUIText, UIMessage } from 'ai';
4+
import { createDataStreamResponse, UIMessage } from 'ai';
55

66
// Allow streaming responses up to 30 seconds
77
export const maxDuration = 30;
@@ -21,8 +21,16 @@ export async function POST(req: Request) {
2121
const stream = await model.stream(
2222
messages.map(message =>
2323
message.role == 'user'
24-
? new HumanMessage(getUIText(message.parts))
25-
: new AIMessage(getUIText(message.parts)),
24+
? new HumanMessage(
25+
message.parts
26+
.map(part => (part.type === 'text' ? part.text : ''))
27+
.join(''),
28+
)
29+
: new AIMessage(
30+
message.parts
31+
.map(part => (part.type === 'text' ? part.text : ''))
32+
.join(''),
33+
),
2634
),
2735
);
2836

‎examples/next-langchain/app/page.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
'use client';
22

33
import { useChat } from '@ai-sdk/react';
4-
import { getUIText } from 'ai';
54

65
export default function Chat() {
76
const { messages, input, handleInputChange, handleSubmit } = useChat();
@@ -12,7 +11,9 @@ export default function Chat() {
1211
? messages.map(m => (
1312
<div key={m.id} className="whitespace-pre-wrap">
1413
{m.role === 'user' ? 'User: ' : 'AI: '}
15-
{getUIText(m.parts)}
14+
{m.parts
15+
.map(part => (part.type === 'text' ? part.text : ''))
16+
.join('')}
1617
</div>
1718
))
1819
: null}

‎examples/next-openai-kasada-bot-protection/app/page.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
'use client';
22

33
import { useChat } from '@ai-sdk/react';
4-
import { getUIText } from 'ai';
54
import { toast } from 'sonner';
65

76
export default function Chat() {
@@ -17,7 +16,9 @@ export default function Chat() {
1716
? messages.map(m => (
1817
<div key={m.id} className="whitespace-pre-wrap">
1918
{m.role === 'user' ? 'User: ' : 'AI: '}
20-
{getUIText(m.parts)}
19+
{m.parts
20+
.map(part => (part.type === 'text' ? part.text : ''))
21+
.join('')}
2122
</div>
2223
))
2324
: null}

‎examples/next-openai-pages/pages/chat/stream-chat-api-route/index.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { useChat } from '@ai-sdk/react';
2-
import { getUIText } from 'ai';
32

43
export default function Chat() {
54
const { messages, input, handleInputChange, handleSubmit, status } = useChat({
@@ -12,7 +11,11 @@ export default function Chat() {
1211
{messages.map(message => (
1312
<div key={message.id} className="flex flex-row gap-2">
1413
<div className="w-24 text-zinc-500">{`${message.role}: `}</div>
15-
<div className="w-full">{getUIText(message.parts)}</div>
14+
<div className="w-full">
15+
{message.parts
16+
.map(part => (part.type === 'text' ? part.text : ''))
17+
.join('')}
18+
</div>
1619
</div>
1720
))}
1821
</div>

‎examples/next-openai-pages/pages/chat/stream-chat-edge/index.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { useChat } from '@ai-sdk/react';
2-
import { getUIText } from 'ai';
32

43
export default function Chat() {
54
const { messages, input, handleInputChange, handleSubmit, status } = useChat({
@@ -12,7 +11,11 @@ export default function Chat() {
1211
{messages.map(message => (
1312
<div key={message.id} className="flex flex-row gap-2">
1413
<div className="w-24 text-zinc-500">{`${message.role}: `}</div>
15-
<div className="w-full">{getUIText(message.parts)}</div>
14+
<div className="w-full">
15+
{message.parts
16+
.map(part => (part.type === 'text' ? part.text : ''))
17+
.join('')}
18+
</div>
1619
</div>
1720
))}
1821
</div>

‎examples/next-openai-pages/pages/chat/stream-chat/index.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { useChat } from '@ai-sdk/react';
2-
import { getUIText } from 'ai';
32

43
export default function Page() {
54
const { messages, input, handleSubmit, handleInputChange, status } = useChat({
@@ -12,7 +11,11 @@ export default function Page() {
1211
{messages.map(message => (
1312
<div key={message.id} className="flex flex-row gap-2">
1413
<div className="w-24 text-zinc-500">{`${message.role}: `}</div>
15-
<div className="w-full">{getUIText(message.parts)}</div>
14+
<div className="w-full">
15+
{message.parts
16+
.map(part => (part.type === 'text' ? part.text : ''))
17+
.join('')}
18+
</div>
1619
</div>
1720
))}
1821
</div>

‎examples/next-openai-upstash-rate-limits/app/page.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
'use client';
22

33
import { useChat } from '@ai-sdk/react';
4-
import { getUIText } from 'ai';
54
import { toast } from 'sonner';
65

76
export default function Chat() {
@@ -17,7 +16,9 @@ export default function Chat() {
1716
? messages.map(m => (
1817
<div key={m.id} className="whitespace-pre-wrap">
1918
{m.role === 'user' ? 'User: ' : 'AI: '}
20-
{getUIText(m.parts)}
19+
{m.parts
20+
.map(part => (part.type === 'text' ? part.text : ''))
21+
.join('')}
2122
</div>
2223
))
2324
: null}

‎examples/next-openai/app/mcp/page.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
'use client';
22

33
import { useChat } from '@ai-sdk/react';
4-
import { getUIText } from 'ai';
54

65
export default function Chat() {
76
const {
@@ -26,7 +25,9 @@ export default function Chat() {
2625
{messages.map(m => (
2726
<div key={m.id} className="whitespace-pre-wrap">
2827
{m.role === 'user' ? 'User: ' : 'AI: '}
29-
{getUIText(m.parts)}
28+
{m.parts
29+
.map(part => (part.type === 'text' ? part.text : ''))
30+
.join('')}
3031
</div>
3132
))}
3233

0 commit comments

Comments
 (0)