( ctx context.Context, userID uuid.UUID, req codersdk.CreateChatRequest, )
| 4452 | } |
| 4453 | |
| 4454 | func (api *API) resolveCreateChatModelConfigID( |
| 4455 | ctx context.Context, |
| 4456 | userID uuid.UUID, |
| 4457 | req codersdk.CreateChatRequest, |
| 4458 | ) (uuid.UUID, int, *codersdk.Response) { |
| 4459 | if req.ModelConfigID != nil { |
| 4460 | if *req.ModelConfigID == uuid.Nil { |
| 4461 | return uuid.Nil, http.StatusBadRequest, &codersdk.Response{ |
| 4462 | Message: "Invalid model config ID.", |
| 4463 | } |
| 4464 | } |
| 4465 | return *req.ModelConfigID, 0, nil |
| 4466 | } |
| 4467 | |
| 4468 | personalOverridesEnabled, err := api.Database.GetChatPersonalModelOverridesEnabled(ctx) |
| 4469 | if err != nil { |
| 4470 | return uuid.Nil, http.StatusInternalServerError, &codersdk.Response{ |
| 4471 | Message: "Failed to resolve chat model config.", |
| 4472 | Detail: err.Error(), |
| 4473 | } |
| 4474 | } |
| 4475 | if !personalOverridesEnabled { |
| 4476 | return api.defaultCreateChatModelConfigID(ctx) |
| 4477 | } |
| 4478 | |
| 4479 | raw, err := api.Database.GetUserChatPersonalModelOverride(ctx, database.GetUserChatPersonalModelOverrideParams{ |
| 4480 | UserID: userID, |
| 4481 | Key: chatd.ChatPersonalModelOverrideKey(codersdk.ChatPersonalModelOverrideContextRoot), |
| 4482 | }) |
| 4483 | if err != nil && !errors.Is(err, sql.ErrNoRows) { |
| 4484 | return uuid.Nil, http.StatusInternalServerError, &codersdk.Response{ |
| 4485 | Message: "Failed to resolve chat model config.", |
| 4486 | Detail: err.Error(), |
| 4487 | } |
| 4488 | } |
| 4489 | if err == nil { |
| 4490 | parsed := parseChatPersonalModelOverrideValue( |
| 4491 | raw, |
| 4492 | codersdk.ChatPersonalModelOverrideContextRoot, |
| 4493 | ) |
| 4494 | if parsed.Malformed { |
| 4495 | api.Logger.Debug( |
| 4496 | ctx, |
| 4497 | "unsupported personal root model override mode, using default model", |
| 4498 | slog.F("user_id", userID), |
| 4499 | slog.F("raw_value", raw), |
| 4500 | ) |
| 4501 | } |
| 4502 | switch parsed.Mode { |
| 4503 | case codersdk.ChatPersonalModelOverrideModeChatDefault: |
| 4504 | // For root context, chat_default and the defensive default |
| 4505 | // case both fall through to the deployment default model below. |
| 4506 | case codersdk.ChatPersonalModelOverrideModeModel: |
| 4507 | reason, err := api.userCanUseChatModelConfig( |
| 4508 | ctx, |
| 4509 | userID, |
| 4510 | parsed.ModelConfigID, |
| 4511 | ) |
no test coverage detected