Store ChromaHighlighter in lmcli.Context and use it

In preparation for TUI
This commit is contained in:
Matt Low 2024-03-12 07:19:16 +00:00
parent 0a27b9a8d3
commit f2c7d2bdd0
2 changed files with 7 additions and 14 deletions

View File

@ -2,7 +2,6 @@ package util
import ( import (
"fmt" "fmt"
"io"
"os" "os"
"strings" "strings"
"time" "time"
@ -11,7 +10,6 @@ import (
"git.mlow.ca/mlow/lmcli/pkg/lmcli/model" "git.mlow.ca/mlow/lmcli/pkg/lmcli/model"
"git.mlow.ca/mlow/lmcli/pkg/lmcli/tools" "git.mlow.ca/mlow/lmcli/pkg/lmcli/tools"
"git.mlow.ca/mlow/lmcli/pkg/util" "git.mlow.ca/mlow/lmcli/pkg/util"
"github.com/alecthomas/chroma/v2/quick"
"github.com/charmbracelet/lipgloss" "github.com/charmbracelet/lipgloss"
) )
@ -240,12 +238,6 @@ func RenderConversation(ctx *lmcli.Context, messages []model.Message, spaceForRe
} }
} }
// HighlightMarkdown applies syntax highlighting to the provided markdown text
// and writes it to stdout.
func HighlightMarkdown(w io.Writer, markdownText string, formatter string, style string) error {
return quick.Highlight(w, markdownText, "md", formatter, style)
}
func RenderMessage(ctx *lmcli.Context, m *model.Message) { func RenderMessage(ctx *lmcli.Context, m *model.Message) {
var messageAge string var messageAge string
if m.CreatedAt.IsZero() { if m.CreatedAt.IsZero() {
@ -274,11 +266,7 @@ func RenderMessage(ctx *lmcli.Context, m *model.Message) {
fmt.Printf("%s %s - %s %s\n\n", separator, role, timestamp, separator) fmt.Printf("%s %s - %s %s\n\n", separator, role, timestamp, separator)
if m.Content != "" { if m.Content != "" {
HighlightMarkdown( ctx.Chroma.Highlight(os.Stdout, m.Content)
os.Stdout, m.Content,
*ctx.Config.Chroma.Formatter,
*ctx.Config.Chroma.Style,
)
fmt.Println() fmt.Println()
} }
} }

View File

@ -8,6 +8,7 @@ import (
"git.mlow.ca/mlow/lmcli/pkg/lmcli/provider" "git.mlow.ca/mlow/lmcli/pkg/lmcli/provider"
"git.mlow.ca/mlow/lmcli/pkg/lmcli/provider/anthropic" "git.mlow.ca/mlow/lmcli/pkg/lmcli/provider/anthropic"
"git.mlow.ca/mlow/lmcli/pkg/lmcli/provider/openai" "git.mlow.ca/mlow/lmcli/pkg/lmcli/provider/openai"
"git.mlow.ca/mlow/lmcli/pkg/util/tty"
"gorm.io/driver/sqlite" "gorm.io/driver/sqlite"
"gorm.io/gorm" "gorm.io/gorm"
) )
@ -15,6 +16,8 @@ import (
type Context struct { type Context struct {
Config Config Config Config
Store ConversationStore Store ConversationStore
Chroma *tty.ChromaHighlighter
} }
func NewContext() (*Context, error) { func NewContext() (*Context, error) {
@ -34,7 +37,9 @@ func NewContext() (*Context, error) {
Fatal("%v\n", err) Fatal("%v\n", err)
} }
return &Context{*config, s}, nil hl := tty.NewChromaHighlighter("markdown", *config.Chroma.Formatter, *config.Chroma.Style)
return &Context{*config, s, hl}, nil
} }
func (c *Context) GetCompletionProvider(model string) (provider.ChatCompletionClient, error) { func (c *Context) GetCompletionProvider(model string) (provider.ChatCompletionClient, error) {