import React, { useState } from "react"; import { LLMContent } from "../types"; interface KeywordSearchToolProps { // For tool_use (pending state) toolInput?: unknown; // { query: string, search_terms: string[] } isRunning?: boolean; // For tool_result (completed state) toolResult?: LLMContent[]; hasError?: boolean; executionTime?: string; } function KeywordSearchTool({ toolInput, isRunning, toolResult, hasError, executionTime, }: KeywordSearchToolProps) { const [isExpanded, setIsExpanded] = useState(false); // Extract query and search terms from toolInput const query = typeof toolInput === "object" && toolInput !== null && "query" in toolInput && typeof toolInput.query === "string" ? toolInput.query : ""; const searchTerms = typeof toolInput === "object" && toolInput !== null && "search_terms" in toolInput && Array.isArray(toolInput.search_terms) ? toolInput.search_terms : []; // Extract output from toolResult const output = toolResult && toolResult.length > 0 && toolResult[0].Text ? toolResult[0].Text : ""; // Truncate search terms for display const truncateSearchTerms = (terms: string[], maxLen: number = 300) => { const joined = terms.join(", "); if (joined.length <= maxLen) return joined; return joined.substring(0, maxLen) + "..."; }; const displayText = query || truncateSearchTerms(searchTerms); const isComplete = !isRunning && toolResult !== undefined; return (
setIsExpanded(!isExpanded)}>
🔍 {displayText} {isComplete && hasError && } {isComplete && !hasError && }
{isExpanded && (
{query && (
Query:
{query}
)} {searchTerms.length > 0 && (
Search Terms:
{searchTerms.join(", ")}
)} {isComplete && (
Results{hasError ? " (Error)" : ""}: {executionTime && {executionTime}}
                {output || "(no output)"}
              
)}
)}
); } export default KeywordSearchTool;