Rename shared.State to shared.Shared
This commit is contained in:
parent
c9e92e186e
commit
c1ead83939
|
@ -9,7 +9,7 @@ type Values struct {
|
||||||
ConvShortname string
|
ConvShortname string
|
||||||
}
|
}
|
||||||
|
|
||||||
type State struct {
|
type Shared struct {
|
||||||
Ctx *lmcli.Context
|
Ctx *lmcli.Context
|
||||||
Values *Values
|
Values *Values
|
||||||
Width int
|
Width int
|
||||||
|
|
|
@ -18,7 +18,7 @@ import (
|
||||||
|
|
||||||
// Application model
|
// Application model
|
||||||
type Model struct {
|
type Model struct {
|
||||||
shared.State
|
shared.Shared
|
||||||
|
|
||||||
state shared.View
|
state shared.View
|
||||||
chat chat.Model
|
chat chat.Model
|
||||||
|
@ -27,15 +27,15 @@ type Model struct {
|
||||||
|
|
||||||
func initialModel(ctx *lmcli.Context, values shared.Values) Model {
|
func initialModel(ctx *lmcli.Context, values shared.Values) Model {
|
||||||
m := Model{
|
m := Model{
|
||||||
State: shared.State{
|
Shared: shared.Shared{
|
||||||
Ctx: ctx,
|
Ctx: ctx,
|
||||||
Values: &values,
|
Values: &values,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
m.state = shared.StateChat
|
m.state = shared.StateChat
|
||||||
m.chat = chat.Chat(m.State)
|
m.chat = chat.Chat(m.Shared)
|
||||||
m.conversations = conversations.Conversations(m.State)
|
m.conversations = conversations.Conversations(m.Shared)
|
||||||
return m
|
return m
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -70,7 +70,7 @@ const (
|
||||||
)
|
)
|
||||||
|
|
||||||
type Model struct {
|
type Model struct {
|
||||||
shared.State
|
shared.Shared
|
||||||
shared.Sections
|
shared.Sections
|
||||||
|
|
||||||
// app state
|
// app state
|
||||||
|
@ -104,9 +104,9 @@ type Model struct {
|
||||||
elapsed time.Duration
|
elapsed time.Duration
|
||||||
}
|
}
|
||||||
|
|
||||||
func Chat(state shared.State) Model {
|
func Chat(shared shared.Shared) Model {
|
||||||
m := Model{
|
m := Model{
|
||||||
State: state,
|
Shared: shared,
|
||||||
|
|
||||||
state: idle,
|
state: idle,
|
||||||
conversation: &models.Conversation{},
|
conversation: &models.Conversation{},
|
||||||
|
@ -140,7 +140,7 @@ func Chat(state shared.State) Model {
|
||||||
m.replyCursor.SetChar(" ")
|
m.replyCursor.SetChar(" ")
|
||||||
m.replyCursor.Focus()
|
m.replyCursor.Focus()
|
||||||
|
|
||||||
system := state.Ctx.GetSystemPrompt()
|
system := shared.Ctx.GetSystemPrompt()
|
||||||
if system != "" {
|
if system != "" {
|
||||||
m.messages = []models.Message{{
|
m.messages = []models.Message{{
|
||||||
Role: models.MessageRoleSystem,
|
Role: models.MessageRoleSystem,
|
||||||
|
|
|
@ -53,14 +53,14 @@ func (m *Model) loadConversation(shortname string) tea.Cmd {
|
||||||
if shortname == "" {
|
if shortname == "" {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
c, err := m.State.Ctx.Store.ConversationByShortName(shortname)
|
c, err := m.Shared.Ctx.Store.ConversationByShortName(shortname)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return shared.MsgError(fmt.Errorf("Could not lookup conversation: %v", err))
|
return shared.MsgError(fmt.Errorf("Could not lookup conversation: %v", err))
|
||||||
}
|
}
|
||||||
if c.ID == 0 {
|
if c.ID == 0 {
|
||||||
return shared.MsgError(fmt.Errorf("Conversation not found: %s", shortname))
|
return shared.MsgError(fmt.Errorf("Conversation not found: %s", shortname))
|
||||||
}
|
}
|
||||||
rootMessages, err := m.State.Ctx.Store.RootMessages(c.ID)
|
rootMessages, err := m.Shared.Ctx.Store.RootMessages(c.ID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return shared.MsgError(fmt.Errorf("Could not load conversation root messages: %v\n", err))
|
return shared.MsgError(fmt.Errorf("Could not load conversation root messages: %v\n", err))
|
||||||
}
|
}
|
||||||
|
@ -70,7 +70,7 @@ func (m *Model) loadConversation(shortname string) tea.Cmd {
|
||||||
|
|
||||||
func (m *Model) loadConversationMessages() tea.Cmd {
|
func (m *Model) loadConversationMessages() tea.Cmd {
|
||||||
return func() tea.Msg {
|
return func() tea.Msg {
|
||||||
messages, err := m.State.Ctx.Store.PathToLeaf(m.conversation.SelectedRoot)
|
messages, err := m.Shared.Ctx.Store.PathToLeaf(m.conversation.SelectedRoot)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return shared.MsgError(fmt.Errorf("Could not load conversation messages: %v\n", err))
|
return shared.MsgError(fmt.Errorf("Could not load conversation messages: %v\n", err))
|
||||||
}
|
}
|
||||||
|
@ -80,7 +80,7 @@ func (m *Model) loadConversationMessages() tea.Cmd {
|
||||||
|
|
||||||
func (m *Model) generateConversationTitle() tea.Cmd {
|
func (m *Model) generateConversationTitle() tea.Cmd {
|
||||||
return func() tea.Msg {
|
return func() tea.Msg {
|
||||||
title, err := cmdutil.GenerateTitle(m.State.Ctx, m.messages)
|
title, err := cmdutil.GenerateTitle(m.Shared.Ctx, m.messages)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return shared.MsgError(err)
|
return shared.MsgError(err)
|
||||||
}
|
}
|
||||||
|
@ -90,7 +90,7 @@ func (m *Model) generateConversationTitle() tea.Cmd {
|
||||||
|
|
||||||
func (m *Model) updateConversationTitle(conversation *models.Conversation) tea.Cmd {
|
func (m *Model) updateConversationTitle(conversation *models.Conversation) tea.Cmd {
|
||||||
return func() tea.Msg {
|
return func() tea.Msg {
|
||||||
err := m.State.Ctx.Store.UpdateConversation(conversation)
|
err := m.Shared.Ctx.Store.UpdateConversation(conversation)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return shared.WrapError(err)
|
return shared.WrapError(err)
|
||||||
}
|
}
|
||||||
|
@ -110,10 +110,10 @@ func (m *Model) cloneMessage(message models.Message, selected bool) tea.Cmd {
|
||||||
if selected {
|
if selected {
|
||||||
if msg.Parent == nil {
|
if msg.Parent == nil {
|
||||||
msg.Conversation.SelectedRoot = msg
|
msg.Conversation.SelectedRoot = msg
|
||||||
err = m.State.Ctx.Store.UpdateConversation(&msg.Conversation)
|
err = m.Shared.Ctx.Store.UpdateConversation(&msg.Conversation)
|
||||||
} else {
|
} else {
|
||||||
msg.Parent.SelectedReply = msg
|
msg.Parent.SelectedReply = msg
|
||||||
err = m.State.Ctx.Store.UpdateMessage(msg.Parent)
|
err = m.Shared.Ctx.Store.UpdateMessage(msg.Parent)
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return shared.WrapError(fmt.Errorf("Could not update selected message: %v", err))
|
return shared.WrapError(fmt.Errorf("Could not update selected message: %v", err))
|
||||||
|
@ -125,7 +125,7 @@ func (m *Model) cloneMessage(message models.Message, selected bool) tea.Cmd {
|
||||||
|
|
||||||
func (m *Model) updateMessageContent(message *models.Message) tea.Cmd {
|
func (m *Model) updateMessageContent(message *models.Message) tea.Cmd {
|
||||||
return func() tea.Msg {
|
return func() tea.Msg {
|
||||||
err := m.State.Ctx.Store.UpdateMessage(message)
|
err := m.Shared.Ctx.Store.UpdateMessage(message)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return shared.WrapError(fmt.Errorf("Could not update message: %v", err))
|
return shared.WrapError(fmt.Errorf("Could not update message: %v", err))
|
||||||
}
|
}
|
||||||
|
@ -170,7 +170,7 @@ func (m *Model) cycleSelectedRoot(conv *models.Conversation, dir MessageCycleDir
|
||||||
}
|
}
|
||||||
|
|
||||||
conv.SelectedRoot = nextRoot
|
conv.SelectedRoot = nextRoot
|
||||||
err = m.State.Ctx.Store.UpdateConversation(conv)
|
err = m.Shared.Ctx.Store.UpdateConversation(conv)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return shared.WrapError(fmt.Errorf("Could not update conversation SelectedRoot: %v", err))
|
return shared.WrapError(fmt.Errorf("Could not update conversation SelectedRoot: %v", err))
|
||||||
}
|
}
|
||||||
|
@ -190,7 +190,7 @@ func (m *Model) cycleSelectedReply(message *models.Message, dir MessageCycleDire
|
||||||
}
|
}
|
||||||
|
|
||||||
message.SelectedReply = nextReply
|
message.SelectedReply = nextReply
|
||||||
err = m.State.Ctx.Store.UpdateMessage(message)
|
err = m.Shared.Ctx.Store.UpdateMessage(message)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return shared.WrapError(fmt.Errorf("Could not update message SelectedReply: %v", err))
|
return shared.WrapError(fmt.Errorf("Could not update message SelectedReply: %v", err))
|
||||||
}
|
}
|
||||||
|
@ -206,7 +206,7 @@ func (m *Model) persistConversation() tea.Cmd {
|
||||||
if m.conversation.ID == 0 {
|
if m.conversation.ID == 0 {
|
||||||
return func() tea.Msg {
|
return func() tea.Msg {
|
||||||
// Start a new conversation with all messages so far
|
// Start a new conversation with all messages so far
|
||||||
conversation, messages, err = m.State.Ctx.Store.StartConversation(messages...)
|
conversation, messages, err = m.Shared.Ctx.Store.StartConversation(messages...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return shared.MsgError(fmt.Errorf("Could not start new conversation: %v", err))
|
return shared.MsgError(fmt.Errorf("Could not start new conversation: %v", err))
|
||||||
}
|
}
|
||||||
|
@ -219,7 +219,7 @@ func (m *Model) persistConversation() tea.Cmd {
|
||||||
for i := range messages {
|
for i := range messages {
|
||||||
if messages[i].ID > 0 {
|
if messages[i].ID > 0 {
|
||||||
// message has an ID, update its contents
|
// message has an ID, update its contents
|
||||||
err := m.State.Ctx.Store.UpdateMessage(&messages[i])
|
err := m.Shared.Ctx.Store.UpdateMessage(&messages[i])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return shared.MsgError(err)
|
return shared.MsgError(err)
|
||||||
}
|
}
|
||||||
|
@ -228,7 +228,7 @@ func (m *Model) persistConversation() tea.Cmd {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
// messages is new, so add it as a reply to previous message
|
// messages is new, so add it as a reply to previous message
|
||||||
saved, err := m.State.Ctx.Store.Reply(&messages[i-1], messages[i])
|
saved, err := m.Shared.Ctx.Store.Reply(&messages[i-1], messages[i])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return shared.MsgError(err)
|
return shared.MsgError(err)
|
||||||
}
|
}
|
||||||
|
@ -252,16 +252,16 @@ func (m *Model) promptLLM() tea.Cmd {
|
||||||
m.elapsed = 0
|
m.elapsed = 0
|
||||||
|
|
||||||
return func() tea.Msg {
|
return func() tea.Msg {
|
||||||
model, provider, err := m.State.Ctx.GetModelProvider(*m.State.Ctx.Config.Defaults.Model)
|
model, provider, err := m.Shared.Ctx.GetModelProvider(*m.Shared.Ctx.Config.Defaults.Model)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return shared.MsgError(err)
|
return shared.MsgError(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
requestParams := models.RequestParameters{
|
requestParams := models.RequestParameters{
|
||||||
Model: model,
|
Model: model,
|
||||||
MaxTokens: *m.State.Ctx.Config.Defaults.MaxTokens,
|
MaxTokens: *m.Shared.Ctx.Config.Defaults.MaxTokens,
|
||||||
Temperature: *m.State.Ctx.Config.Defaults.Temperature,
|
Temperature: *m.Shared.Ctx.Config.Defaults.Temperature,
|
||||||
ToolBag: m.State.Ctx.EnabledTools,
|
ToolBag: m.Shared.Ctx.EnabledTools,
|
||||||
}
|
}
|
||||||
|
|
||||||
replyHandler := func(msg models.Message) {
|
replyHandler := func(msg models.Message) {
|
||||||
|
|
|
@ -42,11 +42,11 @@ func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) {
|
||||||
// wake up spinners and cursors
|
// wake up spinners and cursors
|
||||||
cmds = append(cmds, cursor.Blink, m.spinner.Tick)
|
cmds = append(cmds, cursor.Blink, m.spinner.Tick)
|
||||||
|
|
||||||
if m.State.Values.ConvShortname != "" {
|
if m.Shared.Values.ConvShortname != "" {
|
||||||
// (re)load conversation contents
|
// (re)load conversation contents
|
||||||
cmds = append(cmds, m.loadConversation(m.State.Values.ConvShortname))
|
cmds = append(cmds, m.loadConversation(m.Shared.Values.ConvShortname))
|
||||||
|
|
||||||
if m.conversation.ShortName.String != m.State.Values.ConvShortname {
|
if m.conversation.ShortName.String != m.Shared.Values.ConvShortname {
|
||||||
// clear existing messages if we're loading a new conversation
|
// clear existing messages if we're loading a new conversation
|
||||||
m.messages = []models.Message{}
|
m.messages = []models.Message{}
|
||||||
m.selectedMessage = 0
|
m.selectedMessage = 0
|
||||||
|
@ -151,7 +151,7 @@ func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) {
|
||||||
m.updateContent()
|
m.updateContent()
|
||||||
case msgResponseError:
|
case msgResponseError:
|
||||||
m.state = idle
|
m.state = idle
|
||||||
m.State.Err = error(msg)
|
m.Shared.Err = error(msg)
|
||||||
m.updateContent()
|
m.updateContent()
|
||||||
case msgConversationTitleGenerated:
|
case msgConversationTitleGenerated:
|
||||||
title := string(msg)
|
title := string(msg)
|
||||||
|
|
|
@ -131,7 +131,7 @@ func (m *Model) renderMessage(i int) string {
|
||||||
sb := &strings.Builder{}
|
sb := &strings.Builder{}
|
||||||
sb.Grow(len(msg.Content) * 2)
|
sb.Grow(len(msg.Content) * 2)
|
||||||
if msg.Content != "" {
|
if msg.Content != "" {
|
||||||
err := m.State.Ctx.Chroma.Highlight(sb, msg.Content)
|
err := m.Shared.Ctx.Chroma.Highlight(sb, msg.Content)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
sb.Reset()
|
sb.Reset()
|
||||||
sb.WriteString(msg.Content)
|
sb.WriteString(msg.Content)
|
||||||
|
@ -195,7 +195,7 @@ func (m *Model) renderMessage(i int) string {
|
||||||
if msg.Content != "" {
|
if msg.Content != "" {
|
||||||
sb.WriteString("\n\n")
|
sb.WriteString("\n\n")
|
||||||
}
|
}
|
||||||
_ = m.State.Ctx.Chroma.HighlightLang(sb, toolString, "yaml")
|
_ = m.Shared.Ctx.Chroma.HighlightLang(sb, toolString, "yaml")
|
||||||
}
|
}
|
||||||
|
|
||||||
content := strings.TrimRight(sb.String(), "\n")
|
content := strings.TrimRight(sb.String(), "\n")
|
||||||
|
@ -308,7 +308,7 @@ func (m *Model) footerView() string {
|
||||||
rightSegments = append(rightSegments, segmentStyle.Render(throughput))
|
rightSegments = append(rightSegments, segmentStyle.Render(throughput))
|
||||||
}
|
}
|
||||||
|
|
||||||
model := fmt.Sprintf("Model: %s", *m.State.Ctx.Config.Defaults.Model)
|
model := fmt.Sprintf("Model: %s", *m.Shared.Ctx.Config.Defaults.Model)
|
||||||
rightSegments = append(rightSegments, segmentStyle.Render(model))
|
rightSegments = append(rightSegments, segmentStyle.Render(model))
|
||||||
|
|
||||||
left := strings.Join(leftSegments, segmentSeparator)
|
left := strings.Join(leftSegments, segmentSeparator)
|
||||||
|
|
|
@ -28,7 +28,7 @@ type (
|
||||||
)
|
)
|
||||||
|
|
||||||
type Model struct {
|
type Model struct {
|
||||||
shared.State
|
shared.Shared
|
||||||
shared.Sections
|
shared.Sections
|
||||||
|
|
||||||
conversations []loadedConversation
|
conversations []loadedConversation
|
||||||
|
@ -38,9 +38,9 @@ type Model struct {
|
||||||
content viewport.Model
|
content viewport.Model
|
||||||
}
|
}
|
||||||
|
|
||||||
func Conversations(state shared.State) Model {
|
func Conversations(shared shared.Shared) Model {
|
||||||
m := Model{
|
m := Model{
|
||||||
State: state,
|
Shared: shared,
|
||||||
content: viewport.New(0, 0),
|
content: viewport.New(0, 0),
|
||||||
}
|
}
|
||||||
return m
|
return m
|
||||||
|
|
Loading…
Reference in New Issue