helloadhavan/github_issues huggingface dataset:
Repository: ggml-org/llama.cpp
Pull request: gguf-py : add --chat-template-file to gguf_new_metadata

Adds ability to update chat template from `chat_template.jinja` file.

Changed files:
filename: gguf-py/gguf/scripts/gguf_new_metadata.py
patch: @@ -111,6 +111,7 @@ def main() -> None:
     parser.add_argument("--general-description",                       type=str,  help="The models general.description", metavar='"Description ..."')
     parser.add_argument("--chat-template",                             type=str,  help="Chat template string (or JSON string containing templates)", metavar='"{% ... %} ..."')
     parser.add_argument("--chat-template-config",                      type=Path, help="Config file containing chat template(s)", metavar='tokenizer_config.json')
+    parser.add_argument("--chat-template-file",                        type=Path, help="Jinja file containing chat template", metavar='chat_template.jinja')
     parser.add_argument("--pre-tokenizer",                             type=str,  help="The models tokenizer.ggml.pre", metavar='"pre tokenizer"')
     parser.add_argument("--remove-metadata",      action="append",     type=str,  help="Remove metadata (by key name) from output model", metavar='general.url')
     parser.add_argument("--special-token",        action="append",     type=str,  help="Special token by value", nargs=2, metavar=(' | '.join(token_names.keys()), '"<token>"'))
@@ -134,12 +135,17 @@ def main() -> None:
         new_metadata[gguf.Keys.Tokenizer.CHAT_TEMPLATE] = MetadataDetails(gguf.GGUFValueType.STRING, json.loads(args.chat_template) if args.chat_template.startswith('[') else args.chat_template)
 
     if args.chat_template_config:
-        with open(args.chat_template_config, 'r') as fp:
+        with open(args.chat_template_config, 'r', encoding='utf-8') as fp:
             config = json.load(fp)
             template = config.get('chat_template')
             if template:
                 new_metadata[gguf.Keys.Tokenizer.CHAT_TEMPLATE] = MetadataDetails(gguf.GGUFValueType.STRING, template)
 
+    if args.chat_template_file:
+        with open(args.chat_template_file, 'r', encoding='utf-8') as fp:
+            template = fp.read()
+            new_metadata[gguf.Keys.Tokenizer.CHAT_TEMPLATE] = MetadataDetails(gguf.GGUFValueType.STRING, template)
+
     if args.pre_tokenizer:
         new_metadata[gguf.Keys.Tokenizer.PRE] = MetadataDetails(gguf.GGUFValueType.STRING, args.pre_tokenizer)
Repository: facebook/react
Pull request: [www] enable enableFilterEmptyStringAttributesDOM flag


Changed files:
filename: packages/shared/forks/ReactFeatureFlags.test-renderer.www.js
patch: @@ -47,7 +47,7 @@ export const enableCapturePhaseSelectiveHydrationWithoutDiscreteEventReplay =
 export const enableClientRenderFallbackOnTextMismatch = true;
 export const enableComponentStackLocations = true;
 export const enableLegacyFBSupport = false;
-export const enableFilterEmptyStringAttributesDOM = false;
+export const enableFilterEmptyStringAttributesDOM = true;
 export const disableNativeComponentFrames = false;
 export const skipUnmountedBoundaries = false;
 export const enableGetInspectorDataForInstanceInProduction = false;

filename: packages/shared/forks/ReactFeatureFlags.www-dynamic.js
patch: @@ -15,7 +15,6 @@
 
 export const disableInputAttributeSyncing = __VARIANT__;
 export const disableIEWorkarounds = __VARIANT__;
-export const enableFilterEmptyStringAttributesDOM = __VARIANT__;
 export const enableLegacyFBSupport = __VARIANT__;
 export const skipUnmountedBoundaries = __VARIANT__;
 export const enableUseRefAccessWarning = __VARIANT__;

filename: packages/shared/forks/ReactFeatureFlags.www.js
patch: @@ -20,7 +20,6 @@ export const {
   enableTrustedTypesIntegration,
   disableSchedulerTimeoutBasedOnReactExpirationTime,
   replayFailedUnitOfWorkWithInvokeGuardedCallback,
-  enableFilterEmptyStringAttributesDOM,
   enableLegacyFBSupport,
   deferRenderPhaseUpdateToNextBatch,
   enableDebugTracing,
@@ -56,6 +55,7 @@ export const enableUseMemoCacheHook = true;
 export const enableUseEffectEventHook = true;
 export const enableHostSingletons = true;
 export const enableClientRenderFallbackOnTextMismatch = false;
+export const enableFilterEmptyStringAttributesDOM = true;
 
 // Logs additional User Timing API marks for use with an experimental profiling tool.
 export const enableSchedulingProfiler: boolean =
Repository: vercel/next.js
Pull request: perf(turbopack): Load `is_immutable` flag dynamically

### What?

Load `is_immutable` flag from the task state instead of only relying on the static flag.

### Why?

It would allow determining more tasks as `immutable`


Closes PACK-4855

Changed files:
filename: turbopack/crates/turbo-tasks-backend/src/backend/operation/connect_child.rs
patch: @@ -26,12 +26,12 @@ impl ConnectChildOperation {
     pub fn run(
         parent_task_id: TaskId,
         child_task_id: TaskId,
-        is_immutable: bool,
+        mut is_child_immutable: bool,
         mut ctx: impl ExecuteContext,
     ) {
         if !ctx.should_track_children() {
             let mut task = ctx.task(child_task_id, TaskDataCategory::All);
-            if is_immutable {
+            if is_child_immutable {
                 task.mark_as_immutable();
             }
             if !task.has_key(&CachedDataItemKey::Output {}) {
@@ -44,6 +44,12 @@ impl ConnectChildOperation {
             }
             return;
         }
+
+        if !is_child_immutable {
+            let task = ctx.task(child_task_id, TaskDataCategory::All);
+            is_child_immutable = task.is_immutable();
+        }
+
         let mut parent_task = ctx.task(parent_task_id, TaskDataCategory::All);
         let Some(InProgressState::InProgress(box InProgressStateInner { new_children, .. })) =
             get_mut!(parent_task, InProgress)
@@ -52,7 +58,10 @@ impl ConnectChildOperation {
         };
 
         // Quick skip if the child was already connected before
-        if new_children.insert(child_task_id, is_immutable).is_some() {
+        if new_children
+            .insert(child_task_id, is_child_immutable)
+            .is_some()
+        {
             return;
         }
 
@@ -76,13 +85,13 @@ impl ConnectChildOperation {
         }
 
         // Immutable tasks cannot be invalidated, meaning that we never reschedule them.
-        if !is_immutable && ctx.should_track_activeness() {
+        if !is_child_immutable && ctx.should_track_activeness() {
             queue.push(AggregationUpdateJob::IncreaseActiveCount {
                 task: child_task_id,
             });
         } else {
             let mut task = ctx.task(child_task_id, TaskDataCategory::All);
-            if is_immutable {
+            if is_child_immutable {
                 task.mark_as_immutable();
             }
Repository: ggml-org/llama.cpp
Pull request: quantize : fix confusing error message if ftype is invalid

Left-over hardcoded value gave confusing error messages. :)

Changed files:
filename: tools/quantize/quantize.cpp
patch: @@ -611,7 +611,7 @@ int main(int argc, char ** argv) {
             return 1;
         }
         if (!try_parse_ftype(argv[arg_idx], params.ftype, ftype_str)) {
-            fprintf(stderr, "%s: invalid ftype '%s'\n", __func__, argv[3]);
+            fprintf(stderr, "%s: invalid ftype '%s'\n", __func__, argv[arg_idx]);
             return 1;
         }
         if (ftype_str == "COPY") {
Repository: facebook/react
Pull request: Updated comment message

a simple grammar fix.

Changed files:
filename: packages/react/src/ReactElementValidator.js
patch: @@ -6,7 +6,7 @@
  */
 
 /**
- * ReactElementValidator provides a wrapper around a element factory
+ * ReactElementValidator provides a wrapper around an element factory
  * which validates the props passed to the element. This is intended to be
  * used only in DEV and could be replaced by a static type checker for languages
  * that support it.
Repository: ggml-org/llama.cpp
Pull request: vulkan: fix build when using glslang that does not support coopmat2

Fixes #15059.

Changed files:
filename: ggml/src/ggml-vulkan/ggml-vulkan.cpp
patch: @@ -3096,9 +3096,11 @@ static void ggml_vk_load_shaders(vk_device& device) {
         uint32_t conv2d_SHMEM_PAD = 4;
         bool conv2d_UNROLL = true;
 
+#if defined(GGML_VULKAN_COOPMAT2_GLSLC_SUPPORT)
         if (device->coopmat2) {
             conv2d_SHMEM_PAD = 8; // 8 float16_t
         }
+#endif
 
         if (device->vendor_id == VK_VENDOR_ID_INTEL) {
             conv2d_SHMEM_PAD = 0;
@@ -3158,14 +3160,17 @@ static void ggml_vk_load_shaders(vk_device& device) {
         std::array<uint32_t, 3> wg_denoms = { conv2d_BS_K, conv2d_BS_NPQ, 1 };
         std::vector<uint32_t> spec_constants = { conv2d_WG_SIZE, conv2d_BS_K, conv2d_BS_CRS, conv2d_BS_NPQ, conv2d_TS_K, use_collectives, conv2d_SHMEM_PAD };
 
+#if defined(GGML_VULKAN_COOPMAT2_GLSLC_SUPPORT)
         if (device->coopmat2) {
             ggml_vk_create_pipeline(
                 device, device->pipeline_conv2d_f32[s], "conv2d_f32", conv2d_f32_cm2_len, conv2d_f32_cm2_data, "main", 3,
                 sizeof(vk_op_conv2d_push_constants), wg_denoms, spec_constants, 1, true, use_collectives);
             ggml_vk_create_pipeline(
                 device, device->pipeline_conv2d_f16_f32[s], "conv2d_f16_f32", conv2d_f16_f32_cm2_len, conv2d_f16_f32_cm2_data, "main", 3,
                 sizeof(vk_op_conv2d_push_constants), wg_denoms, spec_constants, 1, true, use_collectives);
-        } else if (conv2d_UNROLL) {
+        } else
+#endif
+        if (conv2d_UNROLL) {
             ggml_vk_create_pipeline(
                 device, device->pipeline_conv2d_f32[s], "conv2d_f32", conv2d_f32_unroll_len, conv2d_f32_unroll_data, "main", 3,
                 sizeof(vk_op_conv2d_push_constants), wg_denoms, spec_constants, 1, true, use_collectives);

filename: ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp
patch: @@ -661,8 +661,10 @@ void process_shaders() {
     string_to_spv("conv2d_f32", "conv2d_mm.comp", {{"A_TYPE", "float"}, {"B_TYPE", "float"}, {"D_TYPE", "float"}, {"USE_COLLECTIVES", "1"}, {"UNROLL", ""}});
     string_to_spv("conv2d_f16_f32", "conv2d_mm.comp", {{"A_TYPE", "float16_t"}, {"B_TYPE", "float"}, {"D_TYPE", "float"}, {"USE_COLLECTIVES", "1"}, {"UNROLL", ""}});
 
+#if defined(GGML_VULKAN_COOPMAT2_GLSLC_SUPPORT)
     string_to_spv("conv2d_f32", "conv2d_mm.comp", {{"A_TYPE", "float"}, {"B_TYPE", "float"}, {"D_TYPE", "float"}, {"USE_COLLECTIVES", "1"}, {"UNROLL", "[[unroll]]"}, {"COOPMAT2", "1"}}, true, false, true);
     string_to_spv("conv2d_f16_f32", "conv2d_mm.comp", {{"A_TYPE", "float16_t"}, {"B_TYPE", "float"}, {"D_TYPE", "float"}, {"USE_COLLECTIVES", "1"}, {"UNROLL", "[[unroll]]"}, {"COOPMAT2", "1"}}, true, false, true);
+#endif
 
     string_to_spv("conv2d_dw_whcn_f32", "conv2d_dw.comp", merge_maps(base_dict, {{"A_TYPE", "float"}, {"B_TYPE", "float"}, {"D_TYPE", "float"}, {"WHCN", "1"}}));
     string_to_spv("conv2d_dw_cwhn_f32", "conv2d_dw.comp", merge_maps(base_dict, {{"A_TYPE", "float"}, {"B_TYPE", "float"}, {"D_TYPE", "float"}, {"CWHN", "1"}}));
Repository: huggingface/transformers
Pull request: [internvl] fix video inference

# What does this PR do?

Video inference broke after https://github.com/huggingface/transformers/pull/38105 because the model was inferring number of frames before processing. Previously that worked fine, but with the new workflow the actual number of frames can be inferred only after processing and sampling 

Changed files:
filename: src/transformers/models/internvl/processing_internvl.py
patch: @@ -223,12 +223,15 @@ def __call__(
             image_num_patches_indices = np.cumsum(image_num_patches)
         if videos is not None:
             videos = make_batched_videos(videos)
-            num_frames_per_video = [len(video) for video in videos]
-            video_patch_indices = np.cumsum(num_frames_per_video)
             video_inputs = self.video_processor(videos=videos, **output_kwargs["videos_kwargs"])
+            video_pixel_values = video_inputs.pop("pixel_values_videos")
+
+            # Obtain per frame information first and then flatten to (BS * T, ...)
+            num_frames_per_video = [len(video) for video in video_pixel_values]
             video_num_patches = [1 for frames in num_frames_per_video for _ in range(frames)]
-            video_pixel_values = video_inputs.pop("pixel_values_videos").flatten(0, 1)
+            video_patch_indices = np.cumsum(num_frames_per_video)
             video_num_patches_indices = np.cumsum(video_num_patches)
+            video_pixel_values = video_pixel_values.flatten(0, 1)
 
         if images is not None or videos is not None:
             text, image_video_patches, image_index, video_index = self._insert_media_placeholders(
Repository: facebook/react
Pull request: Revert "Remove hydrate entry point from www builds"

Reverts facebook/react#26400.

Will take a look at the test failures before re-merging.

Changed files:
filename: packages/react-dom/index.classic.fb.js
patch: @@ -24,6 +24,7 @@ export {
   hydrateRoot,
   findDOMNode,
   flushSync,
+  hydrate,
   render,
   unmountComponentAtNode,
   unstable_batchedUpdates,
Repository: electron/electron
Pull request: fix: `performance-no-automatic-move` clang-tidy warnings

Backport of #44742

See that PR for details.


Notes: none

Changed files:
filename: shell/browser/extensions/electron_extensions_browser_client.cc
patch: @@ -178,7 +178,7 @@ base::FilePath ElectronExtensionsBrowserClient::GetBundleResourcePath(
   if (!chrome_resources_path.IsParent(extension_resources_path))
     return base::FilePath();
 
-  const base::FilePath request_relative_path =
+  base::FilePath request_relative_path =
       extensions::file_util::ExtensionURLToRelativeFilePath(request.url);
   if (!ExtensionsBrowserClient::Get()
            ->GetComponentExtensionResourceManager()

filename: shell/common/logging.cc
patch: @@ -30,16 +30,13 @@ base::FilePath GetLogFileName(const base::CommandLine& command_line) {
   if (!filename.empty())
     return base::FilePath::FromUTF8Unsafe(filename);
 
-  const base::FilePath log_filename(FILE_PATH_LITERAL("electron_debug.log"));
-  base::FilePath log_path;
+  auto log_filename = base::FilePath{FILE_PATH_LITERAL("electron_debug.log")};
 
-  if (base::PathService::Get(chrome::DIR_LOGS, &log_path)) {
-    log_path = log_path.Append(log_filename);
-    return log_path;
-  } else {
-    // error with path service, just use some default file somewhere
-    return log_filename;
-  }
+  if (base::FilePath path; base::PathService::Get(chrome::DIR_LOGS, &path))
+    return path.Append(log_filename);
+
+  // error with path service, just use some default file somewhere
+  return log_filename;
 }
 
 namespace {
Repository: facebook/react
Pull request: Remove hydrate entry point from www builds

As I understand it this isn't used at Meta and it would let us get rid of at least legacy mode hydration code when we remove legacy mode from OSS builds.

Changed files:
filename: packages/react-dom/index.classic.fb.js
patch: @@ -24,7 +24,6 @@ export {
   hydrateRoot,
   findDOMNode,
   flushSync,
-  hydrate,
   render,
   unmountComponentAtNode,
   unstable_batchedUpdates,
Repository: electron/electron
Pull request: fix: `performance-no-automatic-move` clang-tidy warnings

#### Description of Change

Fix two [performance-no-automatic-move](https://clang.llvm.org/extra/clang-tidy/checks/performance/no-automatic-move.html) warnings.

Fixed by this PR:

> ../../electron/shell/common/logging.cc:40:12: warning: constness of 'log_filename' prevents automatic move [performance-no-automatic-move]
>
> ../../electron/shell/browser/extensions/electron_extensions_browser_client.cc:187:10: warning: constness of 'request_relative_path' prevents automatic move [performance-no-automatic-move]

#### Checklist

- [x] PR description included and stakeholders cc'd
- [x] `npm test` passes
- [x] [PR release notes](https://github.com/electron/clerk/blob/main/README.md) describe the change in a way relevant to app developers, and are [capitalized, punctuated, and past tense](https://github.com/electron/clerk/blob/main/README.md#examples).

#### Release Notes

Notes: none

Changed files:
filename: shell/browser/extensions/electron_extensions_browser_client.cc
patch: @@ -174,7 +174,7 @@ base::FilePath ElectronExtensionsBrowserClient::GetBundleResourcePath(
   if (!chrome_resources_path.IsParent(extension_resources_path))
     return base::FilePath();
 
-  const base::FilePath request_relative_path =
+  base::FilePath request_relative_path =
       extensions::file_util::ExtensionURLToRelativeFilePath(request.url);
   if (!ExtensionsBrowserClient::Get()
            ->GetComponentExtensionResourceManager()

filename: shell/common/logging.cc
patch: @@ -29,16 +29,13 @@ base::FilePath GetLogFileName(const base::CommandLine& command_line) {
   if (!filename.empty())
     return base::FilePath::FromUTF8Unsafe(filename);
 
-  const base::FilePath log_filename(FILE_PATH_LITERAL("electron_debug.log"));
-  base::FilePath log_path;
+  auto log_filename = base::FilePath{FILE_PATH_LITERAL("electron_debug.log")};
 
-  if (base::PathService::Get(chrome::DIR_LOGS, &log_path)) {
-    log_path = log_path.Append(log_filename);
-    return log_path;
-  } else {
-    // error with path service, just use some default file somewhere
-    return log_filename;
-  }
+  if (base::FilePath path; base::PathService::Get(chrome::DIR_LOGS, &path))
+    return path.Append(log_filename);
+
+  // error with path service, just use some default file somewhere
+  return log_filename;
 }
 
 namespace {
Repository: vercel/next.js
Pull request: perf(turbopack): Do not allocate vectors if we are not going to use it

### What?

Avoid allocations when we are not going to use it


### Why?



I think static tools can technically analyze all of these kinds of needless allocations, but I'm not sure, so I'll try to find them by hand.

Closes PACK-4845

Changed files:
filename: turbopack/crates/turbo-tasks-backend/src/backend/mod.rs
patch: @@ -855,26 +855,31 @@ impl<B: BackingStorage> TurboTasksBackendInner<B> {
                 return (None, None);
             }
             let len = inner.len();
-            let mut meta = Vec::with_capacity(len);
-            let mut data = Vec::with_capacity(len);
+
+            let meta_restored = inner.state().meta_restored();
+            let data_restored = inner.state().data_restored();
+
+            let mut meta = meta_restored.then(|| Vec::with_capacity(len));
+            let mut data = data_restored.then(|| Vec::with_capacity(len));
             for (key, value) in inner.iter_all() {
                 if key.is_persistent() && value.is_persistent() {
                     match key.category() {
                         TaskDataCategory::Meta => {
-                            meta.push(CachedDataItem::from_key_and_value_ref(key, value))
+                            if let Some(meta) = &mut meta {
+                                meta.push(CachedDataItem::from_key_and_value_ref(key, value))
+                            }
                         }
                         TaskDataCategory::Data => {
-                            data.push(CachedDataItem::from_key_and_value_ref(key, value))
+                            if let Some(data) = &mut data {
+                                data.push(CachedDataItem::from_key_and_value_ref(key, value))
+                            }
                         }
                         _ => {}
                     }
                 }
             }
 
-            (
-                inner.state().meta_restored().then_some(meta),
-                inner.state().data_restored().then_some(data),
-            )
+            (meta, data)
         };
         let process = |task_id: TaskId, (meta, data): (Option<Vec<_>>, Option<Vec<_>>)| {
             (
Repository: nodejs/node
Pull request: tls: remove unnecessary type check on normalize

Following up on @jasnell's recommendation: https://github.com/cloudflare/workerd/pull/3594#discussion_r1978193326

Changed files:
filename: lib/_tls_wrap.js
patch: @@ -1607,7 +1607,7 @@ function normalizeConnectArgs(listArgs) {
   // This means that options.host overrides a host arg.
   if (listArgs[1] !== null && typeof listArgs[1] === 'object') {
     ObjectAssign(options, listArgs[1]);
-  } else if (listArgs[2] !== null && typeof listArgs[2] === 'object') {
+  } else {
     ObjectAssign(options, listArgs[2]);
   }
Repository: denoland/deno
Pull request: fix(lsp): don't skip dirs with enabled subdirs

Fixes https://github.com/denoland/vscode_deno/issues/1239.

Changed files:
filename: cli/lsp/config.rs
patch: @@ -853,7 +853,8 @@ impl Settings {
       Some(false)
     } else if let Some(enable_paths) = &enable_paths {
       for enable_path in enable_paths {
-        if path.starts_with(enable_path) {
+        // Also enable if the checked path is a dir containing an enabled path.
+        if path.starts_with(enable_path) || enable_path.starts_with(&path) {
           return Some(true);
         }
       }

filename: cli/lsp/language_server.rs
patch: @@ -4005,12 +4005,14 @@ mod tests {
     temp_dir.write("root1/target/main.ts", ""); // no, because there is a Cargo.toml in the root directory
 
     temp_dir.create_dir_all("root2/folder");
+    temp_dir.create_dir_all("root2/folder2/inner_folder");
     temp_dir.create_dir_all("root2/sub_folder");
     temp_dir.create_dir_all("root2/root2.1");
     temp_dir.write("root2/file1.ts", ""); // yes, enabled
     temp_dir.write("root2/file2.ts", ""); // no, not enabled
     temp_dir.write("root2/folder/main.ts", ""); // yes, enabled
     temp_dir.write("root2/folder/other.ts", ""); // no, disabled
+    temp_dir.write("root2/folder2/inner_folder/main.ts", ""); // yes, enabled (regression test for https://github.com/denoland/vscode_deno/issues/1239)
     temp_dir.write("root2/sub_folder/a.js", ""); // no, not enabled
     temp_dir.write("root2/sub_folder/b.ts", ""); // no, not enabled
     temp_dir.write("root2/sub_folder/c.js", ""); // no, not enabled
@@ -4051,6 +4053,7 @@ mod tests {
             enable_paths: Some(vec![
               "file1.ts".to_string(),
               "folder".to_string(),
+              "folder2/inner_folder".to_string(),
             ]),
             disable_paths: vec!["folder/other.ts".to_string()],
             ..Default::default()
@@ -4101,6 +4104,10 @@ mod tests {
         temp_dir.url().join("root1/folder/mod.ts").unwrap(),
         temp_dir.url().join("root2/folder/main.ts").unwrap(),
         temp_dir.url().join("root2/root2.1/main.ts").unwrap(),
+        temp_dir
+          .url()
+          .join("root2/folder2/inner_folder/main.ts")
+          .unwrap(),
       ])
     );
   }
Repository: vercel/next.js
Pull request: Explain how to use searchParams prop

I think this is a glaring omission from the docs that makes it very difficult to understand how to use these API right.

See [this discussion on Reddit](https://www.reddit.com/r/reactjs/comments/1lar2ss/comment/my2e3kl/).

I took a minimal approach but really this should be properly explained somewhere because nobody knows this prop exists.


Changed files:
filename: docs/01-app/03-api-reference/04-functions/use-search-params.mdx
patch: @@ -72,6 +72,7 @@ const searchParams = useSearchParams()
 > **Good to know**:
 >
 > - `useSearchParams` is a [Client Component](/docs/app/getting-started/server-and-client-components) hook and is **not supported** in [Server Components](/docs/app/getting-started/server-and-client-components) to prevent stale values during [partial rendering](/docs/app/getting-started/linking-and-navigating#client-side-transitions).
+> - If you want to fetch data in a Server Component based on search params, it's often a better option to read the [`searchParams` prop](/docs/app/api-reference/file-conventions/page#searchparams-optional) of the corresponding Page. You can then pass it down by props to any component (Server or Client) within that Page.
 > - If an application includes the `/pages` directory, `useSearchParams` will return `ReadonlyURLSearchParams | null`. The `null` value is for compatibility during migration since search params cannot be known during pre-rendering of a page that doesn't use `getServerSideProps`
 
 ## Behavior