'use client' import * as React from 'react' import { cn } from '@/lib/utils' import { buttonVariants } from '@/components/ui/button' import { IconGitHub, IconExternalLink, IconNotice } from '@/components/ui/icons' import dynamic from 'next/dynamic' import Link from 'next/link' import { useHealth } from '@/lib/hooks/use-health' import { ReleaseInfo, useLatestRelease } from '@/lib/hooks/use-latest-release' import { compare } from 'compare-versions' const ThemeToggle = dynamic( () => import('@/components/theme-toggle').then(x => x.ThemeToggle), { ssr: false } ) export function Header() { const { data } = useHealth(); const isChatEnabled = !!data?.chat_model; const version = data?.version?.git_describe; const { data: latestRelease } = useLatestRelease(); const newVersionAvailable = isNewVersionAvailable(version, latestRelease); return (
Home {isChatEnabled && Playground }
{newVersionAvailable && New version ({latestRelease?.name}) available } GitHub OpenAPI
) } function isNewVersionAvailable(version?: string, latestRelease?: ReleaseInfo) { try { return version && latestRelease && compare(latestRelease.name, version, '>'); } catch (err) { // Handle invalid semver console.warn(err); return true; } }