musicgpt 0.3.27

Generate music based on natural language prompts using LLMs running locally
import UserQuestion from "./components/UserMessage.tsx";
import AudioGenerating from "./components/AudioGenerating.tsx";
import AudioFailure from "./components/AudioFailure.tsx";
import { AudioSuccess } from "./components/AudioSuccess.tsx";
import { ChatMessage } from "./backend/useChat.ts";


export interface ChatHistoryProps {
  messages: ChatMessage[]
  className?: string
}

export function ChatHistory ({ messages, className = '' }: ChatHistoryProps) {
  return <div className={`flex-1 flex flex-col max-w-3xl mx-auto ${className}`}>
    {messages.map(msg => {
        const key = msg.type + msg.id
        if (msg.type === 'user') {
          return <UserQuestion
            className={'ml-16 self-end mb-8'}
            key={key}
            text={msg.text}
          />
        } else if (msg.progress < 1) {
          return <AudioGenerating
            className={'mb-8'}
            key={key}
            progress={msg.progress}
          />
        } else if (msg.error !== undefined) {
          return <AudioFailure
            className={'mr-16 self-start mb-8'}
            key={key}
            msg={msg.error}
          />
        } else if (msg.url !== undefined) {
          return <AudioSuccess
            className={'mr-16 self-start mb-8'}
            key={key}
            autoPlay={msg.justSucceeded}
            src={msg.url}
          />
        } else {
          return null
        }
      }
    )}
  </div>
}