MCPcopy Index your code
hub / github.com/coder/coder / resolveTitleGenerationModelOverride

Method resolveTitleGenerationModelOverride

coderd/x/chatd/title_override.go:37–101  ·  view source on GitHub ↗

resolveTitleGenerationModelOverride resolves the deployment-wide title generation model override. overrideSet is true when an override was configured; in that case any returned error is a hard failure. When overrideSet is false, callers may fall back to the default title model.

(
	ctx context.Context,
	chat database.Chat,
	keys chatprovider.ProviderAPIKeys,
	modelOpts modelBuildOptions,
)

Source from the content-addressed store, hash-verified

35// configured; in that case any returned error is a hard failure. When
36// overrideSet is false, callers may fall back to the default title model.
37func (p *Server) resolveTitleGenerationModelOverride(
38 ctx context.Context,
39 chat database.Chat,
40 keys chatprovider.ProviderAPIKeys,
41 modelOpts modelBuildOptions,
42) (database.ChatModelConfig, fantasy.LanguageModel, chatprovider.ProviderAPIKeys, resolvedModelRoute, bool, error) {
43 raw, err := readTitleGenerationModelOverride(ctx, p.db)
44 if err != nil {
45 return database.ChatModelConfig{}, nil, chatprovider.ProviderAPIKeys{}, resolvedModelRoute{}, false, xerrors.Errorf(
46 "read title generation model override: %w",
47 err,
48 )
49 }
50
51 overrideProviderKeys := keys
52 modelConfig, overrideSet, err := p.resolveConfiguredModelOverride(
53 ctx,
54 titleGenerationOverrideContext,
55 raw,
56 chat.OwnerID,
57 p.resolveModelConfigAndNormalizedProvider,
58 func(ctx context.Context, ownerID uuid.UUID, aiProviderID uuid.UUID) (chatprovider.ProviderAPIKeys, error) {
59 if aiProviderID == uuid.Nil {
60 resolvedProviderKeys, err := p.resolveUserProviderAPIKeys(ctx, ownerID, uuid.Nil)
61 if err != nil || resolvedProviderKeys.Empty() {
62 resolvedProviderKeys = keys
63 }
64 overrideProviderKeys = resolvedProviderKeys
65 return resolvedProviderKeys, nil
66 }
67 resolvedProviderKeys, err := p.resolveUserProviderAPIKeys(ctx, ownerID, aiProviderID)
68 if err != nil {
69 return chatprovider.ProviderAPIKeys{}, err
70 }
71 overrideProviderKeys = resolvedProviderKeys
72 return resolvedProviderKeys, nil
73 },
74 modelOverrideFailureModeHard,
75 )
76 if err != nil {
77 return database.ChatModelConfig{}, nil, chatprovider.ProviderAPIKeys{}, resolvedModelRoute{}, overrideSet, err
78 }
79 if !overrideSet {
80 return database.ChatModelConfig{}, nil, keys, resolvedModelRoute{}, false, nil
81 }
82
83 //nolint:gocritic // Title overrides need chatd-scoped provider reads for user-owned chats.
84 route, err := p.resolveModelRouteForConfig(dbauthz.AsChatd(ctx), chat.OwnerID, modelConfig, overrideProviderKeys)
85 if err != nil {
86 return database.ChatModelConfig{}, nil, chatprovider.ProviderAPIKeys{}, resolvedModelRoute{}, true, err
87 }
88 model, err := p.newModel(ctx, modelClientRequest{
89 Chat: chat,
90 ModelName: modelConfig.Model,
91 UserAgent: chatprovider.UserAgent(),
92 ExtraHeaders: chatprovider.CoderHeaders(chat),
93 }, route, modelOpts)
94 if err != nil {

Callers 2

Calls 11

newModelMethod · 0.95
AsChatdFunction · 0.92
UserAgentFunction · 0.92
CoderHeadersFunction · 0.92
directProviderKeysMethod · 0.80
ErrorfMethod · 0.45
EmptyMethod · 0.45

Tested by

no test coverage detected