helloadhavan/github_issues huggingface dataset:
Repository: ggml-org/llama.cpp
Pull request:    cuda : add error checking for cudaMemcpyAsync in argsort

Added CUDA_CHECK wrapper to cudaMemcpyAsync call in argsort_f32_i32_cuda_cub function to properly handle potential CUDA errors.

This was an unchecked CUDA API call that could silently fail. The fix follows the existing error handling pattern used throughout the CUDA backend.

Tested: Code compiles successfully on macOS (Metal backend).

Changed files:
filename: ggml/src/ggml-cuda/argsort.cu
patch: @@ -44,7 +44,7 @@ static void argsort_f32_i32_cuda_cub(ggml_cuda_pool & pool,
     const dim3 offset_grid((nrows + block_size - 1) / block_size);
     init_offsets<<<offset_grid, block_size, 0, stream>>>(d_offsets, ncols, nrows);
 
-    cudaMemcpyAsync(temp_keys, x, ncols * nrows * sizeof(float), cudaMemcpyDeviceToDevice, stream);
+    CUDA_CHECK(cudaMemcpyAsync(temp_keys, x, ncols * nrows * sizeof(float), cudaMemcpyDeviceToDevice, stream));
 
     size_t temp_storage_bytes = 0;
Repository: huggingface/transformers
Pull request: fix dict like init for ModelOutput

# What does this PR do?

This PR fixes `ModelOutput` dict-like init as this doesn't work if you don't specify the first attribute. In our case the loss value wasn't cleared. 


###  Reproducer
```python
from transformers.modeling_outputs import CausalLMOutputWithPast
import torch
lm_output = CausalLMOutputWithPast({"logits":torch.ones(2, 3, 4)})
```

before:

```
CausalLMOutputWithPast(loss={'logits': tensor([[[1., 1., 1., 1.],
         [1., 1., 1., 1.],
         [1., 1., 1., 1.]],

        [[1., 1., 1., 1.],
         [1., 1., 1., 1.],
         [1., 1., 1., 1.]]])}, logits=tensor([[[1., 1., 1., 1.],
         [1., 1., 1., 1.],
         [1., 1., 1., 1.]],

        [[1., 1., 1., 1.],
         [1., 1., 1., 1.],
         [1., 1., 1., 1.]]]), past_key_values=None, hidden_states=None, attentions=None)
```

after

```
CausalLMOutputWithPast(loss=None, logits=tensor([[[1., 1., 1., 1.],
         [1., 1., 1., 1.],
         [1., 1., 1., 1.]],

        [[1., 1., 1., 1.],
         [1., 1., 1., 1.],
         [1., 1., 1., 1.]]]), past_key_values=None, hidden_states=None, attentions=None)
````



Changed files:
filename: src/transformers/utils/generic.py
patch: @@ -318,6 +318,8 @@ def __post_init__(self):
             # if we provided an iterator as first field and the iterator is a (key, value) iterator
             # set the associated fields
             if first_field_iterator:
+                # reset first field to None
+                setattr(self, class_fields[0].name, None)
                 for idx, element in enumerate(iterator):
                     if not isinstance(element, (list, tuple)) or len(element) != 2 or not isinstance(element[0], str):
                         if idx == 0:

filename: tests/utils/test_generic.py
patch: @@ -19,7 +19,7 @@
 import pytest
 
 from transformers.configuration_utils import PretrainedConfig
-from transformers.modeling_outputs import BaseModelOutput
+from transformers.modeling_outputs import BaseModelOutput, CausalLMOutputWithPast
 from transformers.testing_utils import require_torch
 from transformers.utils import (
     can_return_tuple,
@@ -139,6 +139,19 @@ def test_to_py_obj_torch(self):
 
         self.assertTrue(to_py_obj([t1, t2]) == [x1, x2])
 
+    def test_model_output_subclass(self):
+        # testing with “dict-like init” case
+        out = CausalLMOutputWithPast({"logits": torch.ones(2, 3, 4)})
+        self.assertTrue(out["logits"] is not None)
+        self.assertTrue(out.loss is None)
+        self.assertTrue(len(out.to_tuple()) == 1)
+
+        # testing with dataclass init case
+        out = CausalLMOutputWithPast(logits=torch.ones(2, 3, 4))
+        self.assertTrue(out["logits"] is not None)
+        self.assertTrue(out.loss is None)
+        self.assertTrue(len(out.to_tuple()) == 1)
+
 
 class ValidationDecoratorTester(unittest.TestCase):
     def test_cases_no_warning(self):
Repository: denoland/deno
Pull request: fix(node/child_process): use correct syscall name in spawn error

The error object from spawn() was incorrectly setting syscall to "spawnSync <file>" instead of "spawn <file>". 

Changed files:
filename: ext/node/polyfills/internal/child_process.ts
patch: @@ -420,7 +420,7 @@ export class ChildProcess extends EventEmitter {
     } catch (err) {
       let e = err;
       if (e instanceof Deno.errors.NotFound) {
-        e = _createSpawnSyncError("ENOENT", command, args);
+        e = _createSpawnError("ENOENT", command, args);
       }
       this.#_handleError(e);
     }
@@ -979,14 +979,16 @@ function buildCommand(
   return [file, args, includeNpmProcessState];
 }
 
-function _createSpawnSyncError(
+function _createSpawnError(
   status: string,
   command: string,
   args: string[] = [],
+  sync: boolean = false,
 ): ErrnoException {
+  const syscall = sync ? "spawnSync " : "spawn ";
   const error = errnoException(
     codeMap.get(status),
-    "spawnSync " + command,
+    syscall + command,
   );
   error.path = command;
   error.spawnargs = args;
@@ -1129,7 +1131,7 @@ export function spawnSync(
       (stdout && stdout.length > maxBuffer!) ||
       (stderr && stderr.length > maxBuffer!)
     ) {
-      result.error = _createSpawnSyncError("ENOBUFS", command, args);
+      result.error = _createSpawnError("ENOBUFS", command, args, true);
     }
 
     if (encoding && encoding !== "buffer") {
@@ -1144,7 +1146,7 @@ export function spawnSync(
     result.output = [output.signal, stdout, stderr];
   } catch (err) {
     if (err instanceof Deno.errors.NotFound) {
-      result.error = _createSpawnSyncError("ENOENT", command, args);
+      result.error = _createSpawnError("ENOENT", command, args, true);
     }
   }
   return result;

filename: tests/node_compat/config.json
patch: @@ -180,6 +180,7 @@
     "parallel/test-child-process-send-cb.js": {},
     "parallel/test-child-process-set-blocking.js": {},
     "parallel/test-child-process-silent.js": {},
+    "parallel/test-child-process-spawn-error.js": {},
     "parallel/test-child-process-spawn-event.js": {},
     "parallel/test-child-process-spawn-typeerror.js": {},
     "parallel/test-child-process-spawnsync-args.js": {},
Repository: ollama/ollama
Pull request: Harden generate patching model

Only apply patches if we have any, and make sure to cleanup every file we patched at the end to leave the tree clean

Changed files:
filename: llm/generate/gen_common.sh
patch: @@ -65,15 +65,17 @@ apply_patches() {
         echo 'include (../../../ext_server/CMakeLists.txt) # ollama' >>${LLAMACPP_DIR}/examples/server/CMakeLists.txt
     fi
 
-    # apply temporary patches until fix is upstream
-    for patch in ../patches/*.diff; do
-        for file in $(grep "^+++ " ${patch} | cut -f2 -d' ' | cut -f2- -d/); do
-            (cd ${LLAMACPP_DIR}; git checkout ${file})
+    if [ -n "$(ls -A ../patches/*.diff)" ]; then
+        # apply temporary patches until fix is upstream
+        for patch in ../patches/*.diff; do
+            for file in $(grep "^+++ " ${patch} | cut -f2 -d' ' | cut -f2- -d/); do
+                (cd ${LLAMACPP_DIR}; git checkout ${file})
+            done
         done
-    done
-    for patch in ../patches/*.diff; do
-        (cd ${LLAMACPP_DIR} && git apply ${patch})
-    done
+        for patch in ../patches/*.diff; do
+            (cd ${LLAMACPP_DIR} && git apply ${patch})
+        done
+    fi
 
     # Avoid duplicate main symbols when we link into the cgo binary
     sed -e 's/int main(/int __main(/g' <${LLAMACPP_DIR}/examples/server/server.cpp >${LLAMACPP_DIR}/examples/server/server.cpp.tmp &&
@@ -112,4 +114,12 @@ compress_libs() {
 # Keep the local tree clean after we're done with the build
 cleanup() {
     (cd ${LLAMACPP_DIR}/examples/server/ && git checkout CMakeLists.txt server.cpp)
+
+    if [ -n "$(ls -A ../patches/*.diff)" ]; then
+        for patch in ../patches/*.diff; do
+            for file in $(grep "^+++ " ${patch} | cut -f2 -d' ' | cut -f2- -d/); do
+                (cd ${LLAMACPP_DIR}; git checkout ${file})
+            done
+        done
+    fi
 }
Repository: huggingface/transformers
Pull request: Make `EfficientLoFTRModelTest` faster

# What does this PR do?

`4m` -> `6.69s`

Mostly, from some `test_eager_matches_sdpa_inference`, we get `20s` --> `1s` 

Changed files:
filename: tests/models/efficientloftr/test_modeling_efficientloftr.py
patch: @@ -46,18 +46,18 @@ def __init__(
         self,
         parent,
         batch_size=2,
-        image_width=80,
-        image_height=60,
-        stage_num_blocks: list[int] = [1, 1, 1],
-        out_features: list[int] = [32, 32, 128],
-        stage_stride: list[int] = [2, 1, 2],
+        image_width=6,  # need to be a multiple of `stage_stride[0] * stage_stride[1]`
+        image_height=4,  # need to be a multiple of `stage_stride[0] * stage_stride[1]`
+        stage_num_blocks: list[int] = [1, 1],
+        out_features: list[int] = [16, 16],  # need to be >= 2 to make `config.fine_fusion_dims > 0`
+        stage_stride: list[int] = [2, 1],
         q_aggregation_kernel_size: int = 1,
         kv_aggregation_kernel_size: int = 1,
         q_aggregation_stride: int = 1,
         kv_aggregation_stride: int = 1,
         num_attention_layers: int = 2,
         num_attention_heads: int = 8,
-        hidden_size: int = 128,
+        hidden_size: int = 16,
         coarse_matching_threshold: float = 0.0,
         fine_kernel_size: int = 2,
         coarse_matching_border_removal: int = 0,
Repository: facebook/react
Pull request: Revert "Set disableLegacyMode to true for www"

Reverts facebook/react#29871

Just temporarily while we're investigating something.

Changed files:
filename: packages/shared/forks/ReactFeatureFlags.www-dynamic.js
patch: @@ -32,6 +32,7 @@ export const retryLaneExpirationMs = 5000;
 export const syncLaneExpirationMs = 250;
 export const transitionLaneExpirationMs = 5000;
 export const enableAddPropertiesFastPath = __VARIANT__;
+export const disableLegacyMode = __VARIANT__;
 
 // Enable this flag to help with concurrent mode debugging.
 // It logs information to the console about React scheduling, rendering, and commit phases.

filename: packages/shared/forks/ReactFeatureFlags.www.js
patch: @@ -119,7 +119,8 @@ export const useModernStrictMode = true;
 // because JSX is an extremely hot path.
 export const disableStringRefs = false;
 
-export const disableLegacyMode = true;
+export const disableLegacyMode: boolean =
+  __EXPERIMENTAL__ || dynamicFeatureFlags.disableLegacyMode;
 
 export const enableOwnerStacks = false;
 export const enableShallowPropDiffing = false;
Repository: nodejs/node
Pull request: node-api: reword "implementation in an alternative VM" as implementable

This should relieve contributors from forced to implement the new API in another VM. But the requirement should remain proving the new API to be implementable in another VM, and not specific to V8, allowing node-api to maintain ABI-stability.

Fixes: https://github.com/nodejs/node/issues/58852

Changed files:
filename: doc/contributing/adding-new-napi-api.md
patch: @@ -37,7 +37,7 @@ please follow these principles and guidelines:
 
 2. **Review and approval**
    * A new API addition **must** be signed off by at least two Node-API team members.
-   * **Should** be implemented in at least one other VM implementation of Node.js.
+   * **Should** be implemented in terms of available VM APIs in at least one other VM implementation of Node.js.
 
 3. **Experimental phase**
    * New APIs **must** be marked as experimental for at least one minor Node.js release before promotion.
@@ -49,4 +49,4 @@ please follow these principles and guidelines:
      * Approval by the Node-API team.
      * Availability of a down-level implementation if backporting is needed.
      * Usage by a published real-world module.
-     * Implementation in an alternative VM.
+     * Implementable in an alternative VM.
Repository: electron/electron
Pull request: fix: opening package paths as directory on macOS

Backport of #47077

See that PR for details.


Notes: fix opening package paths as directory when `treatPackageAsDirectory` is enabled on macOS

Changed files:
filename: shell/browser/ui/file_dialog_mac.mm
patch: @@ -318,9 +318,10 @@ void ReadDialogPathsWithBookmarks(NSOpenPanel* dialog,
       BOOL exists =
           [[NSFileManager defaultManager] fileExistsAtPath:path
                                                isDirectory:&is_directory];
-      BOOL is_package =
-          [[NSWorkspace sharedWorkspace] isFilePackageAtPath:path];
-      if (!exists || !is_directory || is_package)
+      BOOL is_package_as_directory =
+          [[NSWorkspace sharedWorkspace] isFilePackageAtPath:path] &&
+          [dialog treatsFilePackagesAsDirectories];
+      if (!exists || !is_directory || !is_package_as_directory)
         continue;
     }
Repository: electron/electron
Pull request: fix: opening package paths as directory on macOS

#### Description of Change

Follow-up to https://github.com/electron/electron/pull/38557

Unlike chromium we support dialog option to treat packages as directory which should be respected.

#### Release Notes

Notes: fix opening package paths as directory when `treatPackageAsDirectory` is enabled on macOS

Changed files:
filename: shell/browser/ui/file_dialog_mac.mm
patch: @@ -318,9 +318,10 @@ void ReadDialogPathsWithBookmarks(NSOpenPanel* dialog,
       BOOL exists =
           [[NSFileManager defaultManager] fileExistsAtPath:path
                                                isDirectory:&is_directory];
-      BOOL is_package =
-          [[NSWorkspace sharedWorkspace] isFilePackageAtPath:path];
-      if (!exists || !is_directory || is_package)
+      BOOL is_package_as_directory =
+          [[NSWorkspace sharedWorkspace] isFilePackageAtPath:path] &&
+          [dialog treatsFilePackagesAsDirectories];
+      if (!exists || !is_directory || !is_package_as_directory)
         continue;
     }
Repository: denoland/deno
Pull request: fix: allow multiple --allow-all args

Currently passing multiple `--allow-all` (or `-A`) flags causes a crash, but due to
historic reasons some tools like VSCode, unconditionally added `--allow-all` argument
when running a debugger. This commit changes flag parsing so that `deno` accepts
`--allow-all` multiple times instead of crashing.

Changed files:
filename: cli/args/flags.rs
patch: @@ -4840,8 +4840,11 @@ fn allow_all_arg() -> Arg {
     .conflicts_with("allow-ffi")
     .conflicts_with("allow-import")
     .conflicts_with("permission-set")
-    .action(ArgAction::SetTrue)
     .help("Allow all permissions")
+    // So situations like `--allow-all -A` don't crash - this is for historic reason,
+    // because VSCode automatically added `--allow-all` in some scenarios, causing crashes
+    // when users used `-A` themselves.
+    .action(ArgAction::Count)
 }
 
 fn runtime_args(
@@ -7073,7 +7076,7 @@ fn permission_args_parse(
     }
   }
 
-  if matches.get_flag("allow-all") {
+  if matches.get_count("allow-all") > 0 {
     flags.allow_all();
   }
 
@@ -14139,4 +14142,33 @@ Usage: deno repl [OPTIONS] [-- [ARGS]...]\n"
       }
     );
   }
+
+  #[test]
+  fn multiple_allow_all() {
+    let flags = flags_from_vec(svec![
+      "deno",
+      "run",
+      "--allow-all",
+      "--inspect",
+      "-A",
+      "script.ts",
+    ])
+    .unwrap();
+    assert_eq!(
+      flags,
+      Flags {
+        subcommand: DenoSubcommand::Run(RunFlags {
+          script: "script.ts".to_string(),
+          ..Default::default()
+        }),
+        inspect: Some("127.0.0.1:9229".parse().unwrap()),
+        code_cache_enabled: true,
+        permissions: PermissionFlags {
+          allow_all: true,
+          ..Default::default()
+        },
+        ..Flags::default()
+      }
+    );
+  }
 }
Repository: vercel/next.js
Pull request: Turbopack: enable nodelay for node.js pool socket

### What?

Removes delays from sending data from and to the worker process.

Closes PACK-5490

Changed files:
filename: turbopack/crates/turbopack-node/js/src/ipc/index.ts
patch: @@ -80,6 +80,7 @@ function createIpc<TIncoming, TOutgoing>(
   let state: State = { type: 'waiting' }
   let buffer: Buffer = Buffer.alloc(0)
   socket.once('connect', () => {
+    socket.setNoDelay(true)
     socket.on('data', (chunk) => {
       buffer = Buffer.concat([buffer, chunk])
 

filename: turbopack/crates/turbopack-node/src/pool.rs
patch: @@ -431,6 +431,7 @@ impl NodeJsPoolProcess {
                 bail!("timed out waiting for the Node.js process to connect ({timeout:?} timeout)\nProcess output:\n{stdout}\nProcess error output:\n{stderr}");
             },
         };
+        connection.set_nodelay(true)?;
 
         let child_stdout = BufReader::new(child.stdout.take().unwrap());
         let child_stderr = BufReader::new(child.stderr.take().unwrap());
@@ -540,6 +541,10 @@ impl NodeJsPoolProcess {
             .write_all(&packet_data)
             .await
             .context("writing packet data")?;
+        self.connection
+            .flush()
+            .await
+            .context("flushing packet data")?;
         Ok(())
     }
 }
Repository: denoland/deno
Pull request: tests: mark test-sqlite-session as flaky

The `test-sqlite-session` test is failing a lot, it seems something related to slow IO of GH actions because I tried many times locally and couldn't be replicated.

Examples: 
https://github.com/denoland/deno/actions/runs/20941682365/job/60176397557?pr=31825
https://github.com/denoland/deno/actions/runs/20945503852/job/60187704262?pr=31829

Changed files:
filename: tests/node_compat/config.json
patch: @@ -1022,7 +1022,9 @@
       "reason": "https://github.com/denoland/deno/issues/31634"
     },
     "parallel/test-sqlite-named-parameters.js": {},
-    "parallel/test-sqlite-session.js": {},
+    "parallel/test-sqlite-session.js": {
+      "flaky": true
+    },
     "parallel/test-sqlite-statement-sync-columns.js": {},
     "parallel/test-sqlite-timeout.js": {},
     "parallel/test-sqlite-transactions.js": {},
Repository: ollama/ollama
Pull request: structured debug prompt


Changed files:
filename: server/routes.go
patch: @@ -253,7 +253,7 @@ func GenerateHandler(c *gin.Context) {
 		prompt = rebuild.String()
 	}
 
-	slog.Debug(fmt.Sprintf("prompt: %s", prompt))
+	slog.Debug("generate handler", "prompt", prompt)
 
 	ch := make(chan any)
 	var generated strings.Builder
@@ -1145,7 +1145,7 @@ func ChatHandler(c *gin.Context) {
 		return
 	}
 
-	slog.Debug(fmt.Sprintf("prompt: %s", prompt))
+	slog.Debug("chat handler", "prompt", prompt)
 
 	ch := make(chan any)
Repository: ggml-org/llama.cpp
Pull request: fix: replace hwcap with riscv_hwprobe for RVV detection

Requires a distribution with a Linux 6.5 kernel or greater. 
fix https://github.com/ggml-org/llama.cpp/pull/17461#discussion_r2568726154


Changed files:
filename: ggml/src/ggml-cpu/arch/riscv/cpu-feats.cpp
patch: @@ -1,20 +1,23 @@
 #include "ggml-backend-impl.h"
 
 #if defined(__riscv) && __riscv_xlen == 64
-#include <sys/auxv.h>
-
-//https://github.com/torvalds/linux/blob/master/arch/riscv/include/uapi/asm/hwcap.h#L24
-#ifndef COMPAT_HWCAP_ISA_V
-#define COMPAT_HWCAP_ISA_V (1 << ('V' - 'A'))
-#endif
+#include <asm/hwprobe.h>
+#include <asm/unistd.h>
+#include <unistd.h>
 
 struct riscv64_features {
     bool has_rvv = false;
 
     riscv64_features() {
-        uint32_t hwcap = getauxval(AT_HWCAP);
+        struct riscv_hwprobe probe;
+        probe.key = RISCV_HWPROBE_KEY_IMA_EXT_0;
+        probe.value = 0;
+
+        int ret = syscall(__NR_riscv_hwprobe, &probe, 1, 0, NULL, 0);
 
-        has_rvv = !!(hwcap & COMPAT_HWCAP_ISA_V);
+        if (0 == ret) {
+            has_rvv = !!(probe.value & RISCV_HWPROBE_IMA_V);
+        }
     }
 };
Repository: huggingface/transformers
Pull request: ENH: Enable readline support for transformers chat

# What does this PR do?

This small change enables GNU readline support for the `transformers chat` command. This includes:

- advanced navigation and editing: `ctrl + a` `ctrl + e` `alt + b` `alt + f` `ctrl + k` `alt + d` etc.
- navigate and search history: `↑` `↓` `ctrl + p` `ctrl + n`  `ctrl + r`
- undo: `ctrl + _`
- clear screen: `ctrl + l`

## Implementation

Although it may look strange, just [importing readline is enough to enable it in Python](https://docs.python.org/3/library/functions.html#input).

As readline is [not available on some platforms](https://docs.python.org/3/library/readline.html), the import is guarded.

Readline should work on Linux, MacOS, and with WSL, I'm not sure about Windows though. Ideally, someone can give it a try. It's possible that Windows users would have to install [pyreadline](https://pypi.org/project/pyreadline3/).

I checked the existing tests but I think there is no easy way to actually test this functionality. As it's basic Python functionality, I think we can live without further tests.

## Before submitting
- [ ] This PR fixes a typo or improves the docs (you can dismiss the other checks if that's the case).
- [x] Did you read the [contributor guideline](https://github.com/huggingface/transformers/blob/main/CONTRIBUTING.md#create-a-pull-request),
      Pull Request section?
- [x] Was this discussed/approved via a Github issue or the [forum](https://discuss.huggingface.co/)? => discussed internally
- [ ] Did you make sure to update the documentation with your changes? Here are the
      [documentation guidelines](https://github.com/huggingface/transformers/tree/main/docs), and
      [here are tips on formatting docstrings](https://github.com/huggingface/transformers/tree/main/docs#writing-source-documentation).
- [ ] Did you write any new necessary tests?

Changed files:
filename: src/transformers/commands/chat.py
patch: @@ -40,6 +40,12 @@
 from transformers.utils import is_rich_available, is_torch_available
 
 
+try:
+    import readline  # noqa importing this enables GNU readline capabilities
+except ImportError:
+    # some platforms may not support readline: https://docs.python.org/3/library/readline.html
+    pass
+
 if platform.system() != "Windows":
     import pwd
Repository: ollama/ollama
Pull request: Feature - Add Wingman Extension

Add Wingman-AI VSCode extension to README

#2297

Changed files:
filename: README.md
patch: @@ -200,18 +200,21 @@ brew install cmake go
 ```
 
 Then generate dependencies:
+
 ```
 go generate ./...
 ```
+
 Then build the binary:
+
 ```
 go build .
 ```
 
 More detailed instructions can be found in the [developer guide](https://github.com/jmorganca/ollama/blob/main/docs/development.md)
 
-
 ### Running local builds
+
 Next, start the server:
 
 ```
@@ -253,6 +256,7 @@ See the [API documentation](./docs/api.md) for all endpoints.
 ## Community Integrations
 
 ### Web & Desktop
+
 - [Bionic GPT](https://github.com/bionic-gpt/bionic-gpt)
 - [HTML UI](https://github.com/rtcfirefly/ollama-ui)
 - [Chatbot UI](https://github.com/ivanfioravanti/chatbot-ollama)
@@ -267,7 +271,6 @@ See the [API documentation](./docs/api.md) for all endpoints.
 - [Ollama-SwiftUI](https://github.com/kghandour/Ollama-SwiftUI)
 - [MindMac](https://mindmac.app)
 
-
 ### Terminal
 
 - [oterm](https://github.com/ggozad/oterm)
@@ -307,7 +310,6 @@ See the [API documentation](./docs/api.md) for all endpoints.
 - [Haystack](https://github.com/deepset-ai/haystack-integrations/blob/main/integrations/ollama.md)
 - [Ollama for R - rollama](https://github.com/JBGruber/rollama)
 
-
 ### Mobile
 
 - [Enchanted](https://github.com/AugustDev/enchanted)
@@ -329,4 +331,4 @@ See the [API documentation](./docs/api.md) for all endpoints.
 - [Obsidian BMO Chatbot plugin](https://github.com/longy2k/obsidian-bmo-chatbot)
 - [Open Interpreter](https://docs.openinterpreter.com/language-model-setup/local-models/ollama)
 - [twinny](https://github.com/rjmacarthy/twinny) (Copilot and Copilot chat alternative using Ollama)
-
+- [Wingman-AI](https://github.com/RussellCanfield/wingman-ai) (Copilot code and chat alternative using Ollama and HuggingFace)