import React from "react"; import { Badge } from "./ui/badge"; import { Menubar, MenubarContent, MenubarItem, MenubarMenu, MenubarSeparator, MenubarTrigger, MenubarCheckboxItem, } from "@/components/ui/menubar"; import { Popover, PopoverContent, PopoverTrigger, } from "@/components/ui/popover"; import { SidebarTrigger } from "@/components/ui/sidebar"; import { Separator } from "@/components/ui/separator"; import { EllipsisIcon, WholeWordIcon, CircleDollarSignIcon, RulerIcon, ReceiptIcon, WalletIcon, ArrowUpDownIcon, ScissorsIcon, } from "lucide-react"; import { AppChatStoreContext, AppContext } from "@/pages/App"; import { models } from "@/types/models"; import { getTotalCost } from "@/utils/totalCost"; import { Tr } from "@/translate"; import { useContext } from "react"; import Search from "@/components/Search"; import Settings from "@/components/Settings"; const Navbar: React.FC = () => { const { chatStore, setChatStore } = useContext(AppChatStoreContext); return (

{chatStore.model}

{chatStore.totalTokens.toString()}

Tokens: {chatStore.totalTokens}/{chatStore.maxTokens}

Cut(s): {chatStore.postBeginIndex}/ {chatStore.history.filter(({ hide }) => !hide).length}

Cost: ${chatStore.cost?.toFixed(4)} / $ {getTotalCost().toFixed(2)}

{" "} {chatStore.totalTokens} {chatStore.cost?.toFixed(4)} Max Length: {chatStore.maxTokens} Price:{" "} {models[chatStore.model]?.price?.prompt * 1000 * 1000}$ / 1M input tokens Total: {getTotalCost().toFixed(2)}$ {chatStore.streamMode ? ( <> {Tr("STREAM")}· {Tr("FETCH")} ) : ( <> {Tr("STREAM")} ·{Tr("FETCH")} )} {chatStore.postBeginIndex} / {chatStore.history.length} Switch to Model (TODO): gpt-4o gpt-o1 gpt-o1-mini gpt-o3
); }; export default Navbar;