(t *testing.T, queuedModelConfigID uuid.NullUUID)
| 2913 | } |
| 2914 | |
| 2915 | func testAutoPromoteQueuedMessageFallback(t *testing.T, queuedModelConfigID uuid.NullUUID) { |
| 2916 | db, ps := dbtestutil.NewDB(t) |
| 2917 | ctx := testutil.Context(t, testutil.WaitSuperLong) |
| 2918 | |
| 2919 | firstRunStarted := make(chan struct{}) |
| 2920 | secondRunStarted := make(chan struct{}, 1) |
| 2921 | allowFirstRunFinish := make(chan struct{}) |
| 2922 | var requestCount atomic.Int32 |
| 2923 | openAIURL := chattest.NewOpenAI(t, func(req *chattest.OpenAIRequest) chattest.OpenAIResponse { |
| 2924 | if !req.Stream { |
| 2925 | return chattest.OpenAINonStreamingResponse("title") |
| 2926 | } |
| 2927 | |
| 2928 | switch requestCount.Add(1) { |
| 2929 | case 1: |
| 2930 | chunks := make(chan chattest.OpenAIChunk, 1) |
| 2931 | go func() { |
| 2932 | defer close(chunks) |
| 2933 | chunks <- chattest.OpenAITextChunks("first run partial")[0] |
| 2934 | select { |
| 2935 | case <-firstRunStarted: |
| 2936 | default: |
| 2937 | close(firstRunStarted) |
| 2938 | } |
| 2939 | <-allowFirstRunFinish |
| 2940 | }() |
| 2941 | return chattest.OpenAIResponse{StreamingChunks: chunks} |
| 2942 | default: |
| 2943 | select { |
| 2944 | case secondRunStarted <- struct{}{}: |
| 2945 | default: |
| 2946 | } |
| 2947 | return chattest.OpenAIStreamingResponse(chattest.OpenAITextChunks("fallback run done")...) |
| 2948 | } |
| 2949 | }) |
| 2950 | |
| 2951 | server := newActiveTestServer(t, db, ps, func(cfg *chatd.Config) { |
| 2952 | // Disable periodic polling so only signalWake can |
| 2953 | // trigger the next processing run. |
| 2954 | cfg.PendingChatAcquireInterval = time.Hour |
| 2955 | }) |
| 2956 | user, org, modelConfig := seedChatDependenciesWithProvider(t, db, "openai-compat", openAIURL) |
| 2957 | chat, err := server.CreateChat(ctx, chatd.CreateOptions{ |
| 2958 | OrganizationID: org.ID, |
| 2959 | OwnerID: user.ID, |
| 2960 | Title: "auto-promote queued fallback", |
| 2961 | ModelConfigID: modelConfig.ID, |
| 2962 | InitialUserContent: []codersdk.ChatMessagePart{codersdk.ChatMessageText("hello")}, |
| 2963 | }) |
| 2964 | require.NoError(t, err) |
| 2965 | |
| 2966 | testutil.TryReceive(ctx, t, firstRunStarted) |
| 2967 | |
| 2968 | queuedContent, err := json.Marshal([]codersdk.ChatMessagePart{codersdk.ChatMessageText("legacy queued row")}) |
| 2969 | require.NoError(t, err) |
| 2970 | _, err = db.InsertChatQueuedMessage(ctx, database.InsertChatQueuedMessageParams{ |
| 2971 | ChatID: chat.ID, |
| 2972 | Content: queuedContent, |
no test coverage detected