helloadhavan/github_issues huggingface dataset:
Repository: rust-lang/rust
Pull request: ci: update upload-artifact action to v7

Closes https://github.com/rust-lang/rust/issues/154738

Changed files:
filename: .github/workflows/ci.yml
patch: @@ -254,7 +254,7 @@ jobs:
           df -h
 
       - name: upload artifacts to github
-        uses: actions/upload-artifact@v4
+        uses: actions/upload-artifact@v7
         with:
           # name is set in previous step
           name: ${{ env.DOC_ARTIFACT_NAME }}

filename: .github/workflows/dependencies.yml
patch: @@ -66,7 +66,7 @@ jobs:
         run: ./src/tools/update-lockfile.sh
 
       - name: upload Cargo.lock artifact for use in PR
-        uses: actions/upload-artifact@v4
+        uses: actions/upload-artifact@v7
         with:
           name: Cargo-lock
           path: |
@@ -75,7 +75,7 @@ jobs:
             src/tools/rustbook/Cargo.lock
           retention-days: 1
       - name: upload cargo-update log artifact for use in PR
-        uses: actions/upload-artifact@v4
+        uses: actions/upload-artifact@v7
         with:
           name: cargo-updates
           path: cargo_update.log
Repository: ollama/ollama
Pull request: app: fix reset to defaults disabling auto-update

- The "Reset to defaults" button in Settings was not explicitly setting AutoUpdateEnabled, causing it to default to false
- Added AutoUpdateEnabled: true to the default settings object so auto-update remains enabled after reset

Changed files:
filename: app/ui/app/src/components/Settings.tsx
patch: @@ -214,6 +214,7 @@ export default function Settings() {
         Agent: false,
         Tools: false,
         ContextLength: 0,
+        AutoUpdateEnabled: true,
       });
       updateSettingsMutation.mutate(defaultSettings);
     }
Repository: huggingface/transformers
Pull request: Fix llama4 bnb mode

Fixes Llama4 model loading under BitsAndBytes (BNB) quantization mode.

Router quantized incorrectly causes shape mismatch: Llama4Router inherits from nn.Linear, so BNB quantizes its weight into a packed format. However, super().forward() calls torch.nn.Linear.forward → F.linear, which hits BNB's __torch_function__ hook and raises RuntimeError: mat1 and mat2 shapes cannot be multiplied due to the packed weight shape being incompatible with the input. Adding "router" (along with other sensitive modules) to _keep_in_fp32_modules skips quantization and fixes the error.

Changed files:
filename: src/transformers/integrations/bitsandbytes.py
patch: @@ -181,7 +181,7 @@ def replace_with_bnb_linear(
             continue
         new_module = None
         with torch.device("meta"):
-            if isinstance(module, (nn.Linear, Conv1D)):
+            if isinstance(module, Conv1D) or type(module) is nn.Linear:
                 if isinstance(module, Conv1D):
                     in_features, out_features = module.weight.shape
                 else:
Repository: facebook/react
Pull request: [react-dom] Add support for `onFullscreenChange` and `onFullscreenError` events

## Summary

This adds support for the [`fullscreenchange`](https://developer.mozilla.org/en-US/docs/Web/API/Element/fullscreenchange_event) and [`fullscreenerror`](https://developer.mozilla.org/en-US/docs/Web/API/Element/fullscreenerror_event) events.

These events are currently supported in Chrome and Firefox(see [browser compatibility table](https://developer.mozilla.org/en-US/docs/Web/API/Element/fullscreenchange_event#browser_compatibility)). You can read more about these events [here](https://fullscreen.spec.whatwg.org/).

---

https://github.com/facebook/react/blob/2622487a7495b2ded000e1ad8b2e292d01bdd126/packages/react-dom-bindings/src/events/ReactDOMEventListener.js#L364-L366

I omit `fullscreenerror` here so it falls back to default below.

## How did you test this change?

Added unit tests.


Changed files:
filename: packages/react-dom-bindings/src/events/DOMEventNames.js
patch: @@ -51,6 +51,7 @@ export type DOMEventName =
   | 'focusin'
   | 'focusout'
   | 'fullscreenchange'
+  | 'fullscreenerror'
   | 'gotpointercapture'
   | 'hashchange'
   | 'input'

filename: packages/react-dom-bindings/src/events/DOMEventProperties.js
patch: @@ -62,6 +62,8 @@ const simpleEventPluginEvents = [
   'encrypted',
   'ended',
   'error',
+  'fullscreenChange',
+  'fullscreenError',
   'gotPointerCapture',
   'input',
   'invalid',

filename: packages/react-dom-bindings/src/events/ReactDOMEventListener.js
patch: @@ -362,6 +362,7 @@ export function getEventPriority(domEventName: DOMEventName): EventPriority {
     case 'beforeinput':
     case 'blur':
     case 'fullscreenchange':
+    case 'fullscreenerror':
     case 'focus':
     case 'hashchange':
     case 'popstate':

filename: packages/react-dom/src/__tests__/ReactDOMEventPropagation-test.js
patch: @@ -834,6 +834,40 @@ describe('ReactDOMEventListener', () => {
         },
       });
     });
+
+    it('onFullscreenChange', async () => {
+      await testNativeBubblingEvent({
+        type: 'div',
+        reactEvent: 'onFullscreenChange',
+        reactEventType: 'fullscreenchange',
+        nativeEvent: 'fullscreenchange',
+        dispatch(node) {
+          node.dispatchEvent(
+            new Event('fullscreenchange', {
+              bubbles: true,
+              cancelable: false,
+            }),
+          );
+        },
+      });
+    });
+
+    it('onFullscreenError', async () => {
+      await testNativeBubblingEvent({
+        type: 'div',
+        reactEvent: 'onFullscreenError',
+        reactEventType: 'fullscreenerror',
+        nativeEvent: 'fullscreenerror',
+        dispatch(node) {
+          node.dispatchEvent(
+            new Event('fullscreenerror', {
+              bubbles: true,
+              cancelable: false,
+            }),
+          );
+        },
+      });
+    });
   });
 
   describe('non-bubbling events that bubble in React', () => {
Repository: electron/electron
Pull request: build: update NMV to 118

#### Description of Change

Bumps Electron's NMV to 118 - needed before forking the 27-x-y branch

#### Checklist
<!-- Remove items that do not apply. For completed items, change [ ] to [x]. -->

- [x] PR description included and stakeholders cc'd
- [x] `npm test` passes
- [x] tests are [changed or added](https://github.com/electron/electron/blob/main/docs/development/testing.md)
- [x] relevant documentation, tutorials, templates and examples are changed or added
- [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: build/args/all.gn
patch: @@ -2,7 +2,7 @@ is_electron_build = true
 root_extra_deps = [ "//electron" ]
 
 # Registry of NMVs --> https://github.com/nodejs/node/blob/main/doc/abi_version_registry.json
-node_module_version = 116
+node_module_version = 118
 
 v8_promise_internal_field_count = 1
 v8_embedder_string = "-electron.0"
Repository: ollama/ollama
Pull request: cloud_proxy: handle stream disconnects gracefully

Previously we were printing out bad errors for expected cases like clients disconnecting. Now we only debug log when that happens (which still might help in cases where we're figuring out why an integration isn't working). For other errors, we print out a proper warning now

Changed files:
filename: server/cloud_proxy.go
patch: @@ -4,6 +4,7 @@ import (
 	"bytes"
 	"context"
 	"encoding/json"
+	"errors"
 	"fmt"
 	"io"
 	"log/slog"
@@ -204,7 +205,25 @@ func proxyCloudRequestWithPath(c *gin.Context, body []byte, path string, disable
 	c.Status(resp.StatusCode)
 
 	if err := copyProxyResponseBody(c.Writer, resp.Body); err != nil {
-		c.Error(err) //nolint:errcheck
+		ctxErr := c.Request.Context().Err()
+		if errors.Is(err, context.Canceled) && errors.Is(ctxErr, context.Canceled) {
+			slog.Debug(
+				"cloud proxy response stream closed by client",
+				"path", c.Request.URL.Path,
+				"status", resp.StatusCode,
+			)
+			return
+		}
+
+		slog.Warn(
+			"cloud proxy response copy failed",
+			"path", c.Request.URL.Path,
+			"status", resp.StatusCode,
+			"request_context_canceled", ctxErr != nil,
+			"request_context_err", ctxErr,
+			"error", err,
+		)
+		return
 	}
 }
Repository: facebook/react
Pull request: [Native] Add RCTSelectableText as a recognized Text component

## Summary

Add "RCTSelectableText" to the list of component names recognized as being inside a text element, alongside "RCTText".

React Native's new text stack, tries to optimize and allows differentiating between a custom TextView, with lower level control, that can reuse the work performed during Fabric/Yoga layout, and a native TextView, used for fidelity. On Android at least, the only place we've needed native TextView for fidelity/native UX has been support for `selectable` text, which has many unique UI interactions.

## How did you test this change?

When I patch this in, alongside https://github.com/facebook/react-native/pull/55552, we no longer see warnings when we render text inside of RCTSelectableText component.


Changed files:
filename: packages/react-native-renderer/src/ReactFiberConfigFabric.js
patch: @@ -278,6 +278,7 @@ export function getChildHostContext(
     const isInAParentText =
       type === 'AndroidTextInput' || // Android
       type === 'RCTMultilineTextInputView' || // iOS
+      type === 'RCTSelectableText' ||
       type === 'RCTSinglelineTextInputView' || // iOS
       type === 'RCTText' ||
       type === 'RCTVirtualText';

filename: packages/react-native-renderer/src/ReactFiberConfigNative.js
patch: @@ -275,6 +275,7 @@ export function getChildHostContext(
   const isInAParentText =
     type === 'AndroidTextInput' || // Android
     type === 'RCTMultilineTextInputView' || // iOS
+    type === 'RCTSelectableText' ||
     type === 'RCTSinglelineTextInputView' || // iOS
     type === 'RCTText' ||
     type === 'RCTVirtualText';
Repository: ollama/ollama
Pull request: mlx: int4 groupsize 64

Change affine 4bit integers to use groupsize 64

Changed files:
filename: x/create/client/quantize.go
patch: @@ -21,7 +21,7 @@ var quantizeParams = map[string]struct {
 	bits      int
 	mode      string
 }{
-	"int4":  {32, 4, "affine"},
+	"int4":  {64, 4, "affine"},
 	"nvfp4": {16, 4, "nvfp4"},
 	"int8":  {64, 8, "affine"},
 	"mxfp8": {32, 8, "mxfp8"},

filename: x/create/create.go
patch: @@ -334,12 +334,12 @@ func GetTensorQuantization(name string, shape []int32, quantize string) string {
 	quantNorm := normalizeQuantType(quantize)
 
 	// MLX quantization requires last dimension to be divisible by group size
-	// nvfp4: 16, int4/mxfp8: 32, int8: 64
+	// nvfp4: 16, mxfp8: 32, int4/int8: 64
 	groupSize := int32(32)
 	switch quantNorm {
 	case "nvfp4":
 		groupSize = 16
-	case "int8":
+	case "int4", "int8":
 		groupSize = 64
 	}
 	if shape[len(shape)-1]%groupSize != 0 {
Repository: rust-lang/rust
Pull request: core: Update the feature gate on `TryFrom<integer> for bool`

This implementation was added recently in f12288ec2632 ("TryFrom<integer> for bool") but used an old feature gate and stabilization version. Update to reflect when these were actually added.

Changed files:
filename: library/core/src/convert/num.rs
patch: @@ -330,7 +330,7 @@ macro_rules! impl_try_from_both_bounded {
 /// Implement `TryFrom<integer>` for `bool`
 macro_rules! impl_try_from_integer_for_bool {
     ($($int:ty)+) => {$(
-        #[stable(feature = "try_from", since = "1.34.0")]
+        #[stable(feature = "bool_try_from_int", since = "1.95.0")]
         #[rustc_const_unstable(feature = "const_convert", issue = "143773")]
         impl const TryFrom<$int> for bool {
             type Error = TryFromIntError;
Repository: huggingface/transformers
Pull request: fix tests/quantization/fp_quant_integration/test_fp_quant.py::FPQuant…

…MXFP4PseudoquantTest::test_quantized_model fail in xpu


## Who can review?

- quantization: @SunMarc
- Intel XPU: @IlyasMoutawwakil




Changed files:
filename: src/transformers/integrations/fp_quant.py
patch: @@ -50,7 +50,8 @@ def convert(
 
         # Let pre-forward handle the quantization and set None where necessary
         # This operation will quantize the weights internally
-        with torch.cuda.device(value.device):
+        torch_accelerator_module = getattr(torch, value.device.type, torch.cuda)
+        with torch_accelerator_module.device(value.device):
             module.pre_forward()
 
         prefix_target_key = target_key.rsplit(".", 1)[0]
Repository: facebook/react
Pull request: [DevTools] Check suspense child node presence in parentSuspense.children before removing

Currently, this silently removes the last child in the list, which doesn't contain the `id`.

Changed files:
filename: packages/react-devtools-shared/src/devtools/store.js
patch: @@ -1873,6 +1873,13 @@ export default class Store extends EventEmitter<{
               }
 
               const index = parentSuspense.children.indexOf(id);
+              if (index === -1) {
+                this._throwAndEmitError(
+                  Error(
+                    `Cannot remove suspense node "${id}" from parent "${parentID}" because it is not a child of the parent.`,
+                  ),
+                );
+              }
               parentSuspense.children.splice(index, 1);
             }
           }
Repository: ollama/ollama
Pull request: create: fix localhost handling


Changed files:
filename: cmd/cmd.go
patch: @@ -132,6 +132,17 @@ func getModelfileName(cmd *cobra.Command) (string, error) {
 	return absName, nil
 }
 
+// isLocalhost returns true if the configured Ollama host is a loopback or unspecified address.
+func isLocalhost() bool {
+	host := envconfig.Host()
+	h, _, _ := net.SplitHostPort(host.Host)
+	if h == "localhost" {
+		return true
+	}
+	ip := net.ParseIP(h)
+	return ip != nil && (ip.IsLoopback() || ip.IsUnspecified())
+}
+
 func CreateHandler(cmd *cobra.Command, args []string) error {
 	p := progress.NewProgress(os.Stderr)
 	defer p.Stop()
@@ -146,10 +157,7 @@ func CreateHandler(cmd *cobra.Command, args []string) error {
 	// Check for --experimental flag for safetensors model creation
 	experimental, _ := cmd.Flags().GetBool("experimental")
 	if experimental {
-		host := envconfig.Host()
-		h, _, _ := net.SplitHostPort(host.Host)
-		ip := net.ParseIP(h)
-		if ip == nil || (!ip.IsLoopback() && !ip.IsUnspecified()) {
+		if !isLocalhost() {
 			return errors.New("remote safetensor model creation not yet supported")
 		}
 		// Get Modelfile content - either from -f flag or default to "FROM ."
@@ -221,10 +229,7 @@ func CreateHandler(cmd *cobra.Command, args []string) error {
 		if filename == "" {
 			// No Modelfile found - check if current directory is an image gen model
 			if create.IsTensorModelDir(".") {
-				host := envconfig.Host()
-				h, _, _ := net.SplitHostPort(host.Host)
-				ip := net.ParseIP(h)
-				if ip == nil || (!ip.IsLoopback() && !ip.IsUnspecified()) {
+				if !isLocalhost() {
 					return errors.New("remote safetensor model creation not yet supported")
 				}
 				quantize, _ := cmd.Flags().GetString("quantize")

filename: cmd/cmd_test.go
patch: @@ -1928,3 +1928,38 @@ func TestLoadOrUnloadModel_CloudModelAuth(t *testing.T) {
 		})
 	}
 }
+
+func TestIsLocalhost(t *testing.T) {
+	tests := []struct {
+		name     string
+		host     string
+		expected bool
+	}{
+		{"default empty", "", true},
+		{"localhost no port", "localhost", true},
+		{"localhost with port", "localhost:11435", true},
+		{"127.0.0.1 no port", "127.0.0.1", true},
+		{"127.0.0.1 with port", "127.0.0.1:11434", true},
+		{"0.0.0.0 no port", "0.0.0.0", true},
+		{"0.0.0.0 with port", "0.0.0.0:11434", true},
+		{"::1 no port", "::1", true},
+		{"[::1] with port", "[::1]:11434", true},
+		{"loopback with scheme", "http://localhost:11434", true},
+		{"remote hostname", "example.com", false},
+		{"remote hostname with port", "example.com:11434", false},
+		{"remote IP", "192.168.1.1", false},
+		{"remote IP with port", "192.168.1.1:11434", false},
+		{"remote with scheme", "http://example.com:11434", false},
+		{"https remote", "https://example.com:443", false},
+	}
+
+	for _, tt := range tests {
+		t.Run(tt.name, func(t *testing.T) {
+			t.Setenv("OLLAMA_HOST", tt.host)
+			got := isLocalhost()
+			if got != tt.expected {
+				t.Errorf("isLocalhost() with OLLAMA_HOST=%q = %v, want %v", tt.host, got, tt.expected)
+			}
+		})
+	}
+}
Repository: nodejs/node
Pull request: doc: fix 'transfered' typo in quic.md

Fixed a typo: `transfered` → `transferred` in `doc/api/quic.md` (session.datagramWrite).

```
- that view will be transfered to the underlying stream.
+ that view will be transferred to the underlying stream.
```

Changed files:
filename: doc/api/quic.md
patch: @@ -519,7 +519,7 @@ added: v23.8.0
 
 Sends an unreliable datagram to the remote peer, returning the datagram ID.
 If the datagram payload is specified as an `ArrayBufferView`, then ownership of
-that view will be transfered to the underlying stream.
+that view will be transferred to the underlying stream.
 
 ### `session.stats`
Repository: rust-lang/rust
Pull request: Add a regression test for the duplicated `crate` keyword in path suggestions

The issue has (long) been fixed, but needs a test.

Closes rust-lang/rust#115858.

Changed files:
filename: tests/ui/resolve/path-suggestion-duplicated-crate-keyword.rs
patch: @@ -0,0 +1,20 @@
+//! Regression test for <https://github.com/rust-lang/rust/issues/115858>.
+//!
+//! The compiler used to suggest `crate::crate::unix::linux::system::Y`
+//! (duplicating the `crate` keyword) instead of `crate::unix::linux::system::Y`.
+
+pub mod unix {
+    pub mod linux {
+        pub mod utils {
+            pub fn f() {
+                let _x = crate::linux::system::Y;
+                //~^ ERROR cannot find `linux` in `crate`
+            }
+        }
+        pub mod system {
+            pub const Y: u32 = 0;
+        }
+    }
+}
+
+fn main() {}

filename: tests/ui/resolve/path-suggestion-duplicated-crate-keyword.stderr
patch: @@ -0,0 +1,23 @@
+error[E0433]: cannot find `linux` in `crate`
+  --> $DIR/path-suggestion-duplicated-crate-keyword.rs:10:33
+   |
+LL |                 let _x = crate::linux::system::Y;
+   |                                 ^^^^^ unresolved import
+   |
+help: a similar path exists
+   |
+LL |                 let _x = crate::unix::linux::system::Y;
+   |                                 ++++++
+help: consider importing this module
+   |
+LL +             use unix::linux::system;
+   |
+help: if you import `system`, refer to it directly
+   |
+LL -                 let _x = crate::linux::system::Y;
+LL +                 let _x = system::Y;
+   |
+
+error: aborting due to 1 previous error
+
+For more information about this error, try `rustc --explain E0433`.
Repository: facebook/react
Pull request: [DevTools] Dedicated empty state for roots that aren't suspended by anything

## Summary

Stacked on https://github.com/facebook/react/pull/35768

For roots without any suspenders, the inspected element pane is completely empty. For older versions of React without Suspense, older versions of React with less sources for Suspense, or simple UIs that don't have any suspenders this can look like something isn't working. You're mostly inspecting the root in the Suspense tab so we need something to show.

## How did you test this change?

- Fallback shown in https://new.csb.app
    <img width="2218" height="236" alt="CleanShot 2026-02-12 at 09 00 55@2x" src="https://github.com/user-attachments/assets/bbe96919-3c14-4ad3-9879-92d1bbf1ad5b" />



Changed files:
filename: packages/react-devtools-shared/src/devtools/views/Components/InspectedElementSuspendedBy.js
patch: @@ -36,6 +36,7 @@ import {
   UNKNOWN_SUSPENDERS_REASON_OLD_VERSION,
   UNKNOWN_SUSPENDERS_REASON_THROWN_PROMISE,
 } from '../../../constants';
+import {ElementTypeRoot} from 'react-devtools-shared/src/frontend/types';
 
 type RowProps = {
   bridge: FrontendBridge,
@@ -477,7 +478,21 @@ export default function InspectedElementSuspendedBy({
         </div>
       );
     }
-    return null;
+    // For roots, show an empty state since there's nothing else to show for
+    // these elements.
+    // This can happen for older versions of React without Suspense, older versions
+    // of React with less sources for Suspense, or simple UIs that don't have any suspenders.
+    if (inspectedElement.type === ElementTypeRoot) {
+      return (
+        <div>
+          <div className={styles.HeaderRow}>
+            <div className={`${styles.Header} ${styles.Empty}`}>
+              Nothing suspended the initial paint.
+            </div>
+          </div>
+        </div>
+      );
+    }
   }
 
   const handleCopy = withPermissionsCheck(
Repository: vercel/next.js
Pull request: Generate a CLI warning if using Rosetta 2 on Apple Silicon

This PR is AI generated.

Test plan (following https://github.com/vercel/next.js/pull/81950):

- Build a preview deployment: https://github.com/vercel/next.js/actions/runs/23858712091/job/69559813673
- Enable Rosetta
- Download a standalone x64 macos binary from https://nodejs.org/en/download

```
export PATH=/Users/bgw/Downloads/node-v22.17.1-darwin-x64/bin/:"$PATH"`
pnpm dlx create-next-app@canary --yes intel-app
cd intel-app
nvim package.json # edit the next.js version to point to the preview deployment
pnpm i
pnpm dev
```

<img width="723" height="192" alt="Screenshot 2026-04-01 at 9 25 04 AM" src="https://github.com/user-attachments/assets/a953ef8f-7fee-4aa0-9ef8-36ef667de734" />

<img width="1022" height="278" alt="Screenshot 2026-04-01 at 9 26 35 AM" src="https://github.com/user-attachments/assets/a0d4b3bd-f8b7-4bbc-a7be-9113dabe189f" />

(the bmi2 issue should be fixed by https://github.com/vercel/next.js/pull/92177, I just hadn't rebased)

Changed files:
filename: packages/next/src/bin/next.ts
patch: @@ -2,6 +2,7 @@
 
 import '../server/require-hook'
 
+import os from 'os'
 import {
   Argument,
   Command,
@@ -89,6 +90,16 @@ class NextRootCommand extends Command {
       ;(process.env as any).NODE_ENV = process.env.NODE_ENV || defaultEnv
       ;(process.env as any).NEXT_RUNTIME = 'nodejs'
 
+      if (
+        process.platform === 'darwin' &&
+        process.arch === 'x64' &&
+        os.cpus().some((cpu) => cpu.model.includes('Apple'))
+      ) {
+        warn(
+          'You are running Next.js on an Apple Silicon Mac with Rosetta 2 translation, which may cause degraded performance.'
+        )
+      }
+
       if (
         commandName !== 'dev' &&
         commandName !== 'start' &&
Repository: ollama/ollama
Pull request: Add LangChain for .NET to libraries list

This is definitely not important, but for discoverability purposes, it would be nice to include the .NET LangChain library.

Changed files:
filename: README.md
patch: @@ -441,6 +441,7 @@ See the [API documentation](./docs/api.md) for all endpoints.
 - [LangChainGo](https://github.com/tmc/langchaingo/) with [example](https://github.com/tmc/langchaingo/tree/main/examples/ollama-completion-example)
 - [LangChain4j](https://github.com/langchain4j/langchain4j) with [example](https://github.com/langchain4j/langchain4j-examples/tree/main/ollama-examples/src/main/java)
 - [LangChainRust](https://github.com/Abraxas-365/langchain-rust) with [example](https://github.com/Abraxas-365/langchain-rust/blob/main/examples/llm_ollama.rs)
+- [LangChain for .NET](https://github.com/tryAGI/LangChain) with [example](https://github.com/tryAGI/LangChain/blob/main/examples/LangChain.Samples.OpenAI/Program.cs)
 - [LLPhant](https://github.com/theodo-group/LLPhant?tab=readme-ov-file#ollama)
 - [LlamaIndex](https://docs.llamaindex.ai/en/stable/examples/llm/ollama/) and [LlamaIndexTS](https://ts.llamaindex.ai/modules/llms/available_llms/ollama)
 - [LiteLLM](https://github.com/BerriAI/litellm)