Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions cmd/chat.go
Original file line number Diff line number Diff line change
Expand Up @@ -477,9 +477,6 @@ func (m chatModel) Init() tea.Cmd {
cmds := []tea.Cmd{initTerminalMouseCmd(m.mouseEnabled()), promptKeepAliveCmd()}
if gw, _ := m.sessionGatewayModel(); strings.TrimSpace(gw) != "" {
cmds = append(cmds, fetchModelsAsync(gw))
if isXiaomiMimoProvider(gw) {
cmds = append(cmds, fetchPlatformContextIndexCmd())
}
}
if m.containerEnabled {
m.containerStatus = "checking docker…"
Expand Down
77 changes: 12 additions & 65 deletions cmd/chat_config_deployment.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import (
tea "charm.land/bubbletea/v2"
lipgloss "charm.land/lipgloss/v2"

"github.com/GrayCodeAI/eyrie/config"
"github.com/GrayCodeAI/eyrie/runtime"
hawkconfig "github.com/GrayCodeAI/hawk/internal/config"
"github.com/GrayCodeAI/hawk/internal/engine"
Expand Down Expand Up @@ -48,82 +47,28 @@ func firstRunModelProvider(m chatModel) string {
return ""
}

func credentialOptionFromHawk(in hawkconfig.CredentialInference) runtime.CredentialProviderOption {
return runtime.CredentialProviderOption{
ProviderID: in.ProviderID,
DeploymentID: in.DeploymentID,
EnvVar: in.EnvVar,
DisplayName: in.DisplayName,
}
}

func saveProviderKeyAsync(inference hawkconfig.CredentialInference, secret string) tea.Cmd {
return saveCredentialAsync(inference, secret)
return saveCredentialAsync(inference.ProviderID, secret)
}

func saveOllamaAsync(baseURL string) tea.Cmd {
return func() tea.Msg {
inference, err := runtime.LocalCredentialInference(configProviderOllama)
if err != nil {
return configApplyCredentialsMsg{err: err}
}
inf := hawkconfig.CredentialInference{
ProviderID: inference.ProviderID,
DeploymentID: inference.DeploymentID,
EnvVar: inference.EnvVar,
DisplayName: inference.DisplayName,
}
return saveCredentialAsync(inf, baseURL)()
}
return saveCredentialAsync(configProviderOllama, baseURL)
}

func saveCredentialAsync(inference hawkconfig.CredentialInference, secret string) tea.Cmd {
func saveCredentialAsync(providerID, secret string) tea.Cmd {
return func() tea.Msg {
ctx := context.Background()
if inference.ProviderID == hawkconfig.ProviderXiaomiTokenPlan {
hawkconfig.ApplyXiaomiTokenPlanRegionEnv(ctx)
}
if inference.ProviderID == hawkconfig.ProviderZAICoding {
hawkconfig.ApplyZAIRegionEnv(ctx)
}
rtInf := config.InferenceFromOption(credentialOptionFromHawk(inference))
if err := runtime.SaveCredential(ctx, rtInf, secret); err != nil {
return configApplyCredentialsMsg{
err: err,
providerID: inference.ProviderID,
deploymentID: inference.DeploymentID,
}
}
hawkconfig.InvalidateConfigUICache()
hawkconfig.RefreshConfigCredSnapshot(ctx)
result, err := hawkconfig.ApplyEyrieCredentialsForProvider(ctx, inference.ProviderID)
result, err := hawkconfig.ConfigureProvider(ctx, providerID, secret)
if err != nil {
return configApplyCredentialsMsg{
err: err,
providerID: inference.ProviderID,
deploymentID: inference.DeploymentID,
err: err,
providerID: providerID,
}
}

entries, listErr := runtime.ListModels(ctx, runtime.ListModelsOpts{ProviderID: inference.ProviderID, Source: runtime.ListSourceAuto})
if listErr != nil {
return configApplyCredentialsMsg{
err: listErr,
providerID: inference.ProviderID,
deploymentID: inference.DeploymentID,
}
}
opts := configModelOptionsFromEyrie(entries)
if len(opts) == 0 && result.Setup != nil {
fallback := hawkconfig.OptionsFromSetupUI(result.Setup, inference.ProviderID)
opts = toConfigModelOptionsFromHawk(fallback)
}

return configApplyCredentialsMsg{
summary: hawkconfig.FormatApplyCredentialsSummary(result),
providerID: inference.ProviderID,
deploymentID: inference.DeploymentID,
modelOptions: opts,
summary: result.Summary, providerID: result.ProviderID,
deploymentID: result.DeploymentID, modelOptions: toConfigModelOptionsFromHawk(result.Models),
}
}
}
Expand All @@ -132,8 +77,10 @@ func toConfigModelOptionsFromHawk(in []hawkconfig.ModelOption) []configModelOpti
out := make([]configModelOption, len(in))
for i, o := range in {
out[i] = configModelOption{
ID: o.ID,
DisplayName: o.DisplayName,
ID: o.ID, DisplayName: o.DisplayName, Owner: o.Owner,
ContextWindow: o.ContextWindow,
InputPricePer1M: o.InputPricePer1M, OutputPricePer1M: o.OutputPricePer1M,
PriceKnown: modelOptionPriceKnown(o.ID, o.DisplayName, o.InputPricePer1M, o.OutputPricePer1M, o.ContextWindow),
}
}
return out
Expand Down
16 changes: 3 additions & 13 deletions cmd/chat_config_hub.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import (

tea "charm.land/bubbletea/v2"

"github.com/GrayCodeAI/eyrie/catalog/registry"
"github.com/GrayCodeAI/eyrie/runtime"
hawkconfig "github.com/GrayCodeAI/hawk/internal/config"
)

Expand Down Expand Up @@ -42,12 +42,7 @@ func (m chatModel) beginConfigModelsTab() (chatModel, tea.Cmd) {
return m, refreshGatewayAsync(m.configModelProvider)
}
if m.configSaving {
var cmds []tea.Cmd
cmds = append(cmds, fetchModelsAsync(m.configModelProvider))
if isXiaomiMimoProvider(m.configModelProvider) {
cmds = append(cmds, fetchPlatformContextIndexCmd())
}
return m, tea.Batch(cmds...)
return m, fetchModelsAsync(m.configModelProvider)
}
m = m.focusConfigActiveModelSelection()
return m, nil
Expand All @@ -70,12 +65,7 @@ func catalogPricesAreStale(opts []configModelOption) bool {
}

func providerHasLiveFetcher(providerID string) bool {
for _, key := range registry.LiveFetcherKeys() {
if key == providerID {
return true
}
}
return false
return runtime.ProviderSupportsLiveModels(providerID)
}

func (m chatModel) returnToOllamaURLAfterError(err error) (chatModel, tea.Cmd) {
Expand Down
46 changes: 9 additions & 37 deletions cmd/chat_config_models.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import (

tea "charm.land/bubbletea/v2"

"github.com/GrayCodeAI/eyrie/catalog"
"github.com/GrayCodeAI/eyrie/runtime"
hawkconfig "github.com/GrayCodeAI/hawk/internal/config"
"github.com/GrayCodeAI/hawk/internal/engine"
Expand Down Expand Up @@ -39,7 +38,6 @@ func InvalidateModelCache() {
modelSyncMu.Lock()
modelSyncAttempted = make(map[string]bool)
modelSyncMu.Unlock()
invalidatePlatformContextCache()
hawkconfig.InvalidateConfigUICache()
}

Expand Down Expand Up @@ -87,24 +85,8 @@ func configModelOptionsFromEyrie(entries []runtime.ModelEntry) []configModelOpti
for i, e := range entries {
opts[i] = configModelOption{
ID: e.ID,
DisplayName: catalog.DisplayModelLabel(e.ID, e.DisplayName),
Owner: catalog.DisplayModelOwner(e.Owner, e.ID),
ContextWindow: e.ContextWindow,
InputPricePer1M: e.InputPricePer1M,
OutputPricePer1M: e.OutputPricePer1M,
PriceKnown: modelOptionPriceKnown(e.ID, e.DisplayName, e.InputPricePer1M, e.OutputPricePer1M, e.ContextWindow),
}
}
return opts
}

func configModelOptionsFromCatalog(entries []catalog.ModelCatalogEntry) []configModelOption {
opts := make([]configModelOption, len(entries))
for i, e := range entries {
opts[i] = configModelOption{
ID: e.ID,
DisplayName: catalog.DisplayModelLabel(e.ID, e.DisplayName),
Owner: catalog.DisplayModelOwner(e.Owner, e.ID, e.LiveMetadata),
DisplayName: e.DisplayName,
Owner: e.Owner,
ContextWindow: e.ContextWindow,
InputPricePer1M: e.InputPricePer1M,
OutputPricePer1M: e.OutputPricePer1M,
Expand Down Expand Up @@ -259,14 +241,6 @@ func applyLiveModelMetadata(sess *engine.Session, provider, modelID string) {
return
}
}
if isXiaomiMimoProvider(provider) {
if w := platformContextForNativeModel(modelID); w > 0 {
applyModelOptionToSession(sess, configModelOption{
ID: modelID,
ContextWindow: w,
})
}
}
}

func loadConfigModelOptions(provider string) []configModelOption {
Expand All @@ -280,15 +254,13 @@ func loadConfigModelOptions(provider string) []configModelOption {
return cached
}
modelCacheMu.RUnlock()
if compiled := hawkconfig.CompiledCatalogV1(); compiled != nil {
entries := catalog.ModelEntriesForProvider(compiled, provider)
if len(entries) > 0 {
opts := configModelOptionsFromCatalog(entries)
modelCacheMu.Lock()
modelCache[provider] = opts
modelCacheMu.Unlock()
return opts
}
entries, err := runtime.ListModels(context.Background(), runtime.ListModelsOpts{ProviderID: provider, Source: runtime.ListSourceCache})
if err == nil && len(entries) > 0 {
opts := configModelOptionsFromEyrie(entries)
modelCacheMu.Lock()
modelCache[provider] = opts
modelCacheMu.Unlock()
return opts
}
return nil
}
86 changes: 0 additions & 86 deletions cmd/chat_platform_ctx.go

This file was deleted.

2 changes: 1 addition & 1 deletion cmd/chat_print.go
Original file line number Diff line number Diff line change
Expand Up @@ -390,7 +390,7 @@ func replModelsSummary(settings hawkconfig.Settings, sessionProvider string) (st

rows := make([]modelTableRow, len(models))
for i, m := range models {
rows[i] = modelTableRowFromCatalogEntry(m)
rows[i] = modelTableRowFromRuntimeEntry(m)
}

var b strings.Builder
Expand Down
9 changes: 0 additions & 9 deletions cmd/chat_status.go
Original file line number Diff line number Diff line change
Expand Up @@ -156,15 +156,6 @@ func (m chatModel) connectionStatusParts() (gateway, model, contextLabel string)
contextLabel = formatModelTableContext(w)
}
}
if (contextLabel == "" || contextLabel == "—") && isXiaomiMimoProvider(gw) {
if w := platformContextForNativeModel(modelID); w > 0 {
contextLabel = formatModelTableContext(w)
if m.session != nil {
m.session.SetContextWindowCached(w)
m.session.EnsureAutoCompactor()
}
}
}
// Omit ctx segment until a real window is known — never show the 128k default.
}
return gateway, model, contextLabel
Expand Down
Loading
Loading