+
+
+ Semantic Search
+
+
+ {/* Mode toggle */}
+
+
+
+
+
+
+
+ {/* Search bar */}
+
+
+ {/* Tag filter */}
+ {availableTags.length > 0 && mode === "search" && (
+
+ Filter:
+ {availableTags.map((tag) => (
+ toggleTag(tag)}
+ />
+ ))}
+
+ )}
+
+ {/* Error */}
+
+ {error && (
+
+ {error}
+
+ )}
+
+
+ {/* Loading */}
+ {loading && (
+
+
+
+
+ {mode === "search"
+ ? "Searching documents…"
+ : "Agent is thinking…"}
+
+
+
+ )}
+
+ {/* Search results */}
+ {!loading && mode === "search" && searchResults.length > 0 && (
+
+
+ {searchResults.length} result
+ {searchResults.length !== 1 ? "s" : ""} found
+
+
+ {searchResults.map((r, i) => (
+
+ ))}
+
+
+ )}
+
+ {/* Agent result */}
+ {!loading && mode === "agent" && agentResult && (
+
+ {/* Answer card */}
+
+
+
+
+ Agent Answer
+
+
+
+ {agentResult.answer}
+
+ {/* Source citations */}
+ {agentResult.sources && agentResult.sources.length > 0 && (
+
+
+ Sources
+
+
+ {agentResult.sources.map((src, i) => (
+
+ {src}
+
+ ))}
+
+
+ )}
+
+
+ {/* Reasoning steps */}
+ {agentResult.steps && agentResult.steps.length > 0 && (
+
+ )}
+
+ )}
+
+ {/* Empty state */}
+ {!loading &&
+ !error &&
+ searchResults.length === 0 &&
+ !agentResult &&
+ query.trim() === "" && (
+
+
+
+ {mode === "search"
+ ? "Search across your ingested documents"
+ : "Ask the AI agent to research and answer questions"}
+
+
+ )}
+
+