@tanstack/ai
Version:
Type-safe TypeScript AI SDK for streaming chat, tool calling, agents, structured outputs, and multimodal generation.
34 lines (31 loc) • 1.19 kB
text/typescript
import type { LazyToolsConfig } from '../../../types'
/**
* Extract the first sentence of a description (up to the first ., !, or ?
* followed by whitespace or end-of-string). Falls back to the whole trimmed
* string when there is no sentence terminator.
*/
export function firstSentence(text: string): string {
const trimmed = text.trim()
if (!trimmed) return ''
const match = trimmed.match(/^.*?[.!?](?=\s|$)/)
return (match ? match[0] : trimmed).trim()
}
/**
* Render one entry in a lazy-tool catalog according to `includeDescription`.
* - 'none' (default) → bare name (preserves legacy chat behavior)
* - 'first-sentence' → `name — <first sentence>`
* - 'full' → `name — <full description>`
* Falls back to the bare name when there is no description.
*/
export function renderLazyCatalogEntry(
name: string,
description: string,
includeDescription: LazyToolsConfig['includeDescription'] = 'none',
): string {
if (includeDescription === 'none' || !description.trim()) return name
const desc =
includeDescription === 'first-sentence'
? firstSentence(description)
: description.trim()
return desc ? `${name} — ${desc}` : name
}