helloadhavan/github_issues huggingface dataset:
Repository: facebook/react
Pull request: Traverse down an updated tree even if it has no passive effects in profiling mode

We need this to be able to log the renders that happened inside.

This is the same thing we do here but for the offscreen special cases:

https://github.com/facebook/react/blob/main/packages/react-reconciler/src/ReactFiberCommitWork.js#L3452-L3457

Changed files:
filename: packages/react-reconciler/src/ReactFiberCommitWork.js
patch: @@ -3945,7 +3945,12 @@ function commitPassiveMountOnFiber(
           instance._visibility |= OffscreenPassiveEffectsConnected;
 
           const includeWorkInProgressEffects =
-            (finishedWork.subtreeFlags & PassiveMask) !== NoFlags;
+            (finishedWork.subtreeFlags & PassiveMask) !== NoFlags ||
+            (enableProfilerTimer &&
+              enableComponentPerformanceTrack &&
+              finishedWork.actualDuration !== 0 &&
+              (finishedWork.alternate === null ||
+                finishedWork.alternate.child !== finishedWork.child));
           recursivelyTraverseReconnectPassiveEffects(
             finishedRoot,
             finishedWork,
@@ -4113,7 +4118,12 @@ function recursivelyTraverseReconnectPassiveEffects(
   // node was reused.
   const childShouldIncludeWorkInProgressEffects =
     includeWorkInProgressEffects &&
-    (parentFiber.subtreeFlags & PassiveMask) !== NoFlags;
+    ((parentFiber.subtreeFlags & PassiveMask) !== NoFlags ||
+      (enableProfilerTimer &&
+        enableComponentPerformanceTrack &&
+        parentFiber.actualDuration !== 0 &&
+        (parentFiber.alternate === null ||
+          parentFiber.alternate.child !== parentFiber.child)));
 
   // TODO (Offscreen) Check: flags & (RefStatic | LayoutStatic)
   let child = parentFiber.child;
@@ -4379,7 +4389,14 @@ function recursivelyTraverseAtomicPassiveEffects(
   // pre-rendering. We call this function when traversing a hidden tree whose
   // regular effects are currently disconnected.
   // TODO: Add special flag for atomic effects
-  if (parentFiber.subtreeFlags & PassiveMask) {
+  if (
+    parentFiber.subtreeFlags & PassiveMask ||
+    (enableProfilerTimer &&
+      enableComponentPerformanceTrack &&
+      parentFiber.actualDuration !== 0 &&
+      (parentFiber.alternate === null ||
+        parentFiber.alternate.child !== parentFiber.child))
+  ) {
     let child = parentFiber.child;
     while (child !== null) {
       if (enableProfilerTimer && enableComponentPerformanceTrack) {
Repository: facebook/react
Pull request: [DevTools] Fix host instance highlighting


Changed files:
filename: packages/react-devtools-shared/src/backend/views/Highlighter/index.js
patch: @@ -115,7 +115,7 @@ export default function setupHighlighter(
     const nodes = renderer.findHostInstancesForElementID(id);
     if (nodes != null) {
       for (let i = 0; i < nodes.length; i++) {
-        const node = nodes[0];
+        const node = nodes[i];
         if (node === null) {
           continue;
         }
@@ -164,7 +164,7 @@ export default function setupHighlighter(
     const nodes = renderer.findHostInstancesForElementID(id);
     if (nodes != null) {
       for (let i = 0; i < nodes.length; i++) {
-        const node = nodes[0];
+        const node = nodes[i];
         if (node === null) {
           continue;
         }

filename: packages/react-devtools-shared/src/devtools/views/SuspenseTab/SuspenseBreadcrumbs.js
patch: @@ -66,7 +66,7 @@ export default function SuspenseBreadcrumbs(): React$Node {
               key={id}
               className={styles.SuspenseBreadcrumbsListItem}
               aria-current={selectedSuspenseID === id}
-              onPointerEnter={highlightHostInstance.bind(null, id)}
+              onPointerEnter={highlightHostInstance.bind(null, id, false)}
               onPointerLeave={clearHighlightHostInstance}>
               <button
                 className={styles.SuspenseBreadcrumbsButton}
Repository: ollama/ollama
Pull request: use llama runner for qwen3

Change runners for now as deepseek-r1 is outputting incorrect tokens

Fixes https://github.com/ollama/ollama/issues/12497

Changed files:
filename: fs/ggml/ggml.go
patch: @@ -243,7 +243,6 @@ func (kv KV) OllamaEngineRequired() bool {
 		"gemma3",
 		"gemma3n",
 		"mistral3",
-		"qwen3",
 		"qwen3moe",
 		"llama4",
 		"mllama",
Repository: vercel/next.js
Pull request: test: unflake lru-disk-eviction on Windows

```
FAIL Turbopack test/unit/image-optimizer/lru-disk-eviction.test.ts
  LRU disk eviction
    √ should evict oldest entries on initialization (133 ms)
    √ should evict old entries when new entries are set (124 ms)
    × should promote entries on get() to prevent eviction (8 ms)
    √ should return the same LRU instance on subsequent calls (1 ms)
    √ should deduplicate concurrent init calls (2 ms)
    √ should handle empty cache directory (2 ms)
    √ should handle non-existent cache directory (2 ms)

  ● LRU disk eviction › should promote entries on get() to prevent eviction

    EPERM: operation not permitted, rmdir 'C:\Users\ADMINI~1\AppData\Local\Temp\next-lru-test-dOXRaF\y'
```

Changed files:
filename: test/unit/image-optimizer/lru-disk-eviction.test.ts
patch: @@ -44,7 +44,12 @@ async function initEntries(
 }
 
 async function rmEntry(cacheDir: string, cacheKey: string): Promise<void> {
-  await promises.rm(join(cacheDir, cacheKey), { recursive: true, force: true })
+  await promises.rm(join(cacheDir, cacheKey), {
+    recursive: true,
+    force: true,
+    maxRetries: 3,
+    retryDelay: 500,
+  })
 }
 
 describe('LRU disk eviction', () => {
@@ -57,7 +62,12 @@ describe('LRU disk eviction', () => {
 
   afterEach(async () => {
     resetDiskLRU()
-    await promises.rm(cacheDir, { recursive: true, force: true })
+    await promises.rm(cacheDir, {
+      recursive: true,
+      force: true,
+      maxRetries: 3,
+      retryDelay: 500,
+    })
   })
 
   it('should evict oldest entries on initialization', async () => {
Repository: ollama/ollama
Pull request: thinking: allow `"think": false` for non-thinking models

This change moves back to allowing non-thinking models to call the `/api/chat` and `/api/generate` endpoints w/ `"think": false` set.

Changed files:
filename: server/routes.go
patch: @@ -332,14 +332,16 @@ func (s *Server) GenerateHandler(c *gin.Context) {
 	}
 
 	modelCaps := m.Capabilities()
-	if req.Think != nil {
+	if slices.Contains(modelCaps, model.CapabilityThinking) {
 		caps = append(caps, model.CapabilityThinking)
-	} else {
-		// add thinking if the model supports it
-		if slices.Contains(modelCaps, model.CapabilityThinking) {
-			caps = append(caps, model.CapabilityThinking)
+		if req.Think == nil {
 			req.Think = &api.ThinkValue{Value: true}
 		}
+	} else {
+		if req.Think != nil && req.Think.Bool() {
+			c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("%q does not support thinking", req.Model)})
+			return
+		}
 	}
 
 	r, m, opts, err := s.scheduleRunner(c.Request.Context(), name.String(), caps, req.Options, req.KeepAlive)
@@ -1877,14 +1879,16 @@ func (s *Server) ChatHandler(c *gin.Context) {
 	}
 
 	modelCaps := m.Capabilities()
-	if req.Think != nil {
+	if slices.Contains(modelCaps, model.CapabilityThinking) {
 		caps = append(caps, model.CapabilityThinking)
-	} else {
-		// add thinking if the model supports it
-		if slices.Contains(modelCaps, model.CapabilityThinking) {
-			caps = append(caps, model.CapabilityThinking)
+		if req.Think == nil {
 			req.Think = &api.ThinkValue{Value: true}
 		}
+	} else {
+		if req.Think != nil && req.Think.Bool() {
+			c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("%q does not support thinking", req.Model)})
+			return
+		}
 	}
 
 	r, m, opts, err := s.scheduleRunner(c.Request.Context(), name.String(), caps, req.Options, req.KeepAlive)

filename: server/routes_generate_test.go
patch: @@ -158,11 +158,26 @@ func TestGenerateChat(t *testing.T) {
 			t.Errorf("expected status 400, got %d", w.Code)
 		}
 
-		if diff := cmp.Diff(w.Body.String(), `{"error":"registry.ollama.ai/library/test:latest does not support thinking"}`); diff != "" {
+		if diff := cmp.Diff(w.Body.String(), `{"error":"\"test\" does not support thinking"}`); diff != "" {
 			t.Errorf("mismatch (-got +want):\n%s", diff)
 		}
 	})
 
+	t.Run("model can't think but think set false", func(t *testing.T) {
+		think := false
+		w := createRequest(t, s.ChatHandler, api.ChatRequest{
+			Model: "test",
+			Messages: []api.Message{
+				{Role: "user", Content: "Hello!"},
+			},
+			Think: &api.ThinkValue{Value: think},
+		})
+
+		if w.Code != http.StatusOK {
+			t.Errorf("expected status 200, got %d", w.Code)
+		}
+	})
+
 	t.Run("missing model", func(t *testing.T) {
 		w := createRequest(t, s.ChatHandler, api.ChatRequest{})
 		if w.Code != http.StatusBadRequest {
Repository: huggingface/transformers
Pull request: update fuyu tokenizer class

UPDATE TO: https://github.com/huggingface/transformers/pull/44179/changes

Models with incorrect tokenizer_class in tokenization_config.json that should use TokenziersBackend

Changed files:
filename: src/transformers/models/auto/tokenization_auto.py
patch: @@ -343,6 +343,7 @@
     "arctic",
     "deepseek_vl",
     "deepseek_vl_hybrid",
+    "fuyu",
     "hyperclovax_vlm",
     "janus",
     "jamba",
Repository: rust-lang/rust
Pull request: test copy_specializes_from_vecdeque: reduce iteration count for Miri

This test currently takes >20s and that doesn't really seem worth it.

Changed files:
filename: library/std/src/io/copy/tests.rs
patch: @@ -97,16 +97,17 @@ fn copy_specializes_to_vec() {
 
 #[test]
 fn copy_specializes_from_vecdeque() {
-    let mut source = VecDeque::with_capacity(100 * 1024);
-    for _ in 0..20 * 1024 {
+    let num: usize = if cfg!(miri) { 512 } else { 20 * 1024 };
+    let mut source = VecDeque::with_capacity(4 * num);
+    for _ in 0..num {
         source.push_front(0);
     }
-    for _ in 0..20 * 1024 {
+    for _ in 0..num {
         source.push_back(0);
     }
     let mut sink = WriteObserver { observed_buffer: 0 };
-    assert_eq!(40 * 1024u64, io::copy(&mut source, &mut sink).unwrap());
-    assert_eq!(20 * 1024, sink.observed_buffer);
+    assert_eq!(2 * num as u64, io::copy(&mut source, &mut sink).unwrap());
+    assert_eq!(num, sink.observed_buffer);
 }
 
 #[test]
Repository: ollama/ollama
Pull request: logs: quiet down context canceled on completion and scheduler noise

If the client closes the connection before Completion finishes, we were logging at error level implying the runner crashed which was misleading.

```
time=2025-10-08T22:59:20.566-07:00 level=ERROR source=server.go:1490 msg="post predict" error="Post \"http://127.0.0.1:57736/completion\": context canceled"
```

The scheduler also logged at error when an unload happens in parallel which isn't actually a failure case.

```
time=2025-10-09T08:25:14.744-07:00 level=DEBUG source=sched.go:360 msg="runner terminated and removed from list, blocking for VRAM recovery" runner.size="5.0 GiB" runner.vram="5.0 GiB" runner.parallel=1 runner.pid=38528 runner.model=C:\Users\daniel\.ollama\models\blobs\sha256-aeda25e63ebd698fab8638ffb778e68bed908b960d39d0becc650fa981609d25
...
time=2025-10-09T08:25:14.782-07:00 level=DEBUG source=sched.go:758 msg="no loaded runner to unload"
time=2025-10-09T08:25:14.782-07:00 level=ERROR source=sched.go:233 msg="runner to expire was nil!"
```

Changed files:
filename: llm/server.go
patch: @@ -1486,7 +1486,10 @@ func (s *llmServer) Completion(ctx context.Context, req CompletionRequest, fn fu
 	serverReq.Header.Set("Content-Type", "application/json")
 
 	res, err := http.DefaultClient.Do(serverReq)
-	if err != nil {
+	if err != nil && errors.Is(err, context.Canceled) {
+		// client closed connection
+		return err
+	} else if err != nil {
 		slog.Error("post predict", "error", err)
 		return errors.New("model runner has unexpectedly stopped, this may be due to resource limitations or an internal error, check ollama server logs for details")
 	}

filename: server/sched.go
patch: @@ -229,8 +229,9 @@ func (s *Scheduler) processPending(ctx context.Context) {
 				}
 
 				if runnerToExpire == nil {
-					// Shouildn't happen
-					slog.Error("runner to expire was nil!")
+					// While we were performing load calculations, the loaded runner(s) unloaded in parallel
+					// so findRunnerToUnload returned no runners.  We'll try again and the loadedCount should be zero
+					slog.Debug("runner to expire was nil, retrying")
 					continue
 				}
 				// Trigger an expiration to unload once it's done
Repository: ggml-org/llama.cpp
Pull request: ci: fix vulkan workflow referencing non-existent action

## Summary

The `build-vulkan.yml` workflow references the composite action `.github/actions/linux-setup-vulkan-llvmpipe` which does not exist in the repository. The correct action path is `.github/actions/linux-setup-vulkan`.

## Problem

The Vulkan CI job fails immediately with:
```
Can't find 'action.yml', 'action.yaml' or 'Dockerfile' under
'.github/actions/linux-setup-vulkan-llvmpipe'
```

## Fix

One-line change: update the action path from `linux-setup-vulkan-llvmpipe` to `linux-setup-vulkan`.

## Verification

Available actions in `.github/actions/`:
- `linux-setup-vulkan/action.yml` ✅ (exists)
- `linux-setup-vulkan-llvmpipe/` ❌ (does not exist)

Changed files:
filename: .github/workflows/build-vulkan.yml
patch: @@ -72,7 +72,7 @@ jobs:
 
       - name: Setup Vulkan SDK
         if: steps.cache-sdk.outputs.cache-hit != 'true'
-        uses: ./.github/actions/linux-setup-vulkan-llvmpipe
+        uses: ./.github/actions/linux-setup-vulkan
         with:
           path: ./vulkan_sdk
           version: ${{ env.VULKAN_SDK_VERSION }}
Repository: vercel/next.js
Pull request: Limit build workers to pages+1

During build time, we spawn a pool of workers for static page generation. The size is `max(4, NUM_CORES - 1)`.

With smaller sites, this ends up with far more workers than pages. This tries to cap the number of workers we actually spin up to something more appropriate for the number of pages. This change saved 90ms on an app with fewer static pages, on a 10-core Macbook.

After this change, the behavior will be:
 - If you have 16 cores and 4 pages, we start 5 workers
 - If you have 8 cores and 100 pages, we start 7 workers

Changed files:
filename: packages/next/src/build/index.ts
patch: @@ -782,28 +782,35 @@ async function writeStandaloneDirectory(
     })
 }
 
-function getNumberOfWorkers(config: NextConfigComplete) {
+function getNumberOfWorkers(config: NextConfigComplete, maxTasks?: number) {
+  let workers: number
+
   if (
     config.experimental.cpus &&
     config.experimental.cpus !== defaultConfig.experimental!.cpus
   ) {
-    return config.experimental.cpus
-  }
-
-  if (config.experimental.memoryBasedWorkersCount) {
-    return Math.max(
+    // If it's not set to the default, it's a user override
+    workers = config.experimental.cpus
+  } else if (config.experimental.memoryBasedWorkersCount) {
+    workers = Math.max(
       Math.min(config.experimental.cpus || 1, Math.floor(os.freemem() / 1e9)),
       // enforce a minimum of 4 workers
       4
     )
+  } else if (config.experimental.cpus) {
+    workers = config.experimental.cpus
+  } else {
+    // Fall back to 4 workers if a count is not specified
+    workers = 4
   }
 
-  if (config.experimental.cpus) {
-    return config.experimental.cpus
+  // Cap workers to one more than the number of tasks.
+  // Tasks can be passed to avoid over-allocating workers.
+  if (maxTasks !== undefined && maxTasks > 0) {
+    workers = Math.min(workers, maxTasks + 1)
   }
 
-  // Fall back to 4 workers if a count is not specified
-  return 4
+  return Math.max(workers, 1)
 }
 
 const staticWorkerPath = require.resolve('./worker')
@@ -1946,7 +1953,8 @@ export default async function build(
       // #endregion
       // #region Collect data
 
-      const numberOfWorkers = getNumberOfWorkers(config)
+      const totalPageCount = pageKeys.pages.length + (pageKeys.app?.length || 0)
+      const numberOfWorkers = getNumberOfWorkers(config, totalPageCount)
       const collectingPageDataStart = process.hrtime()
       const postCompileSpinner = createSpinner(
         `Collecting page data using ${numberOfWorkers} worker${numberOfWorkers > 1 ? 's' : ''}`
Repository: ggml-org/llama.cpp
Pull request: Fix undefined timing measurement errors in server context

## Overview
Fix UB issue reported by Valgrind involving timing measurements for prompt processing and eval

## Additional information

# Requirements

- I have read and agree with the [contributing guidelines](https://github.com/ggml-org/llama.cpp/blob/master/CONTRIBUTING.md)
- AI usage disclosure: I threw an AI at this, but the fix is simple enough that there's no real downside risk (independently verified this solves the issue)

Changed files:
filename: tools/server/server-context.cpp
patch: @@ -155,8 +155,8 @@ struct server_slot {
     int64_t t_start_process_prompt;
     int64_t t_start_generation;
 
-    double t_prompt_processing; // ms
-    double t_token_generation;  // ms
+    double t_prompt_processing = 0.0; // ms
+    double t_token_generation = 0.0;  // ms
 
     std::function<void(int /* id_slot */)> callback_on_release;
 

filename: tools/server/server-task.h
patch: @@ -261,14 +261,14 @@ struct result_timings {
     int32_t cache_n = -1;
 
     int32_t prompt_n = -1;
-    double prompt_ms;
-    double prompt_per_token_ms;
-    double prompt_per_second;
+    double prompt_ms = 0.0;
+    double prompt_per_token_ms = 0.0;
+    double prompt_per_second = 0.0;
 
     int32_t predicted_n = -1;
-    double predicted_ms;
-    double predicted_per_token_ms;
-    double predicted_per_second;
+    double predicted_ms = 0.0;
+    double predicted_per_token_ms = 0.0;
+    double predicted_per_second = 0.0;
 
     // Optional speculative metrics - only included when > 0
     int32_t draft_n = 0;
Repository: rust-lang/rust
Pull request: vec::Drain::fill: avoid reference to uninitialized memory

`range_slice` points to memory that is not initialized (e.g. it might be dropped `Box`/`String`). Let's avoid that and instead use an index-based loop.

Changed files:
filename: library/alloc/src/vec/splice.rs
patch: @@ -1,4 +1,4 @@
-use core::{ptr, slice};
+use core::ptr;
 
 use super::{Drain, Vec};
 use crate::alloc::{Allocator, Global};
@@ -107,15 +107,13 @@ impl<T, A: Allocator> Drain<'_, T, A> {
         let vec = unsafe { self.vec.as_mut() };
         let range_start = vec.len;
         let range_end = self.tail_start;
-        let range_slice = unsafe {
-            slice::from_raw_parts_mut(vec.as_mut_ptr().add(range_start), range_end - range_start)
-        };
+        // The elements in this range are not initialized so we avoid creating a slice.
 
-        for place in range_slice {
+        for idx in range_start..range_end {
             let Some(new_item) = replace_with.next() else {
                 return false;
             };
-            unsafe { ptr::write(place, new_item) };
+            unsafe { vec.as_mut_ptr().add(idx).write(new_item) };
             vec.len += 1;
         }
         true
Repository: huggingface/transformers
Pull request: Update 404ing BillSum dataset URL on Summarization Task guide

# What does this PR do?

Updates a broken link in the summarization guide. https://huggingface.co/docs/transformers/tasks/summarization

https://huggingface.co/billsum/datasets results in a 404. 

New URL is https://huggingface.co/datasets/FiscalNote/billsum

## Before submitting
- [x] This PR fixes a typo or improves the docs (you can dismiss the other checks if that's the case).


## Who can review?

Anyone in the community is free to review the PR once the tests have passed. Feel free to tag
members/contributors who may be interested in your PR.

Documentation: @stevhliu


Changed files:
filename: docs/source/en/tasks/summarization.md
patch: @@ -27,7 +27,7 @@ Summarization creates a shorter version of a document or an article that capture
 
 This guide will show you how to:
 
-1. Finetune [T5](https://huggingface.co/google-t5/t5-small) on the California state bill subset of the [BillSum](https://huggingface.co/datasets/billsum) dataset for abstractive summarization.
+1. Finetune [T5](https://huggingface.co/google-t5/t5-small) on the California state bill subset of the [BillSum](https://huggingface.co/datasets/FiscalNote/billsum) dataset for abstractive summarization.
 2. Use your finetuned model for inference.
 
 <Tip>
Repository: facebook/react
Pull request: [eprh] Temporarily disable compiler rules


Temporarily disables the compiler rules in eslint-plugin-react-hooks. Will revert this later.


Changed files:
filename: packages/eslint-plugin-react-hooks/src/index.ts
patch: @@ -7,35 +7,18 @@
 import type {Linter, Rule} from 'eslint';
 
 import ExhaustiveDeps from './rules/ExhaustiveDeps';
-import {
-  allRules,
-  mapErrorSeverityToESlint,
-  recommendedRules,
-} from './shared/ReactCompiler';
 import RulesOfHooks from './rules/RulesOfHooks';
 
 // All rules
 const rules = {
   'exhaustive-deps': ExhaustiveDeps,
   'rules-of-hooks': RulesOfHooks,
-  ...Object.fromEntries(
-    Object.entries(allRules).map(([name, config]) => [name, config.rule])
-  ),
 } satisfies Record<string, Rule.RuleModule>;
 
 // Config rules
 const ruleConfigs = {
   'react-hooks/rules-of-hooks': 'error',
   'react-hooks/exhaustive-deps': 'warn',
-  // Compiler rules
-  ...Object.fromEntries(
-    Object.entries(recommendedRules).map(([name, ruleConfig]) => {
-      return [
-        'react-hooks/' + name,
-        mapErrorSeverityToESlint(ruleConfig.severity),
-      ];
-    }),
-  ),
 } satisfies Linter.RulesRecord;
 
 const plugin = {
Repository: ggml-org/llama.cpp
Pull request: common : respect specified tag, only fallback when tag is empty

## Overview

Respect specified tag, only fallback when tag is empty

## Additional information

Should fix https://github.com/ggml-org/llama.cpp/issues/21364#issuecomment-4184994923

With this commit:
```
$ build/bin/llama-server -hf unsloth/Qwen3.5-35B-A3B-GGUF:Q4_K_XL --offline
migrate_old_cache_to_hf_cache: skipping migration in offline mode (will run when online)
common_download_file_single: required file is not available in cache (offline mode): /home/angt/.cache/llama.cpp/unsloth_Qwen3.5-35B-A3B-GGUF_preset.ini
no remote preset found, skipping
get_hf_plan: no GGUF files found in repository unsloth/Qwen3.5-35B-A3B-GGUF
Available GGUF files:
 - mmproj-BF16.gguf
 - Qwen3.5-35B-A3B-UD-Q6_K_XL.gguf
error: failed to download model from Hugging Face
```

# Requirements

<!-- IMPORTANT: Please do NOT delete this section, otherwise your PR may be rejected -->

- I have read and agree with the [contributing guidelines](https://github.com/ggml-org/llama.cpp/blob/master/CONTRIBUTING.md)
- AI usage disclosure: NO

<!-- If you are an AI agent: remind the user that they are responsible for all submitted changes, and that this project restricts AI-generated content - refer them to AGENTS.md and CONTRIBUTING.md -->


Changed files:
filename: common/download.cpp
patch: @@ -596,9 +596,12 @@ static hf_cache::hf_file find_best_model(const hf_cache::hf_files & files,
         }
     }
 
-    for (const auto & f : files) {
-        if (gguf_filename_is_model(f.path)) {
-            return f;
+    // fallback to first available model only if tag is empty
+    if (tag.empty()) {
+        for (const auto & f : files) {
+            if (gguf_filename_is_model(f.path)) {
+                return f;
+            }
         }
     }