helloadhavan/github_issues huggingface dataset:
Repository: ollama/ollama
Pull request: Update README.md

Just added lollms-webui to the list of supported webuis.
Lollms is a webui that can perform a large range of tasks, from generating text and chatting with more than 500 agents to generating images, music and videos. Lollms supports multimodality and can use it along with ollama. it can also offer RAG and summary services. All running locally and for free.
For more about lollms, you can check out its website :
[https://lollms.com/](https://lollms.com/)
or the github
[https://github.com/ParisNeo/lollms-webui](https://github.com/ParisNeo/lollms-webui)
or my youtube channel:
https://www.youtube.com/@Parisneo

Thank you very much for this wonderful backend.
I'll make a video about how to install lollms along with ollama.

Changed files:
filename: README.md
patch: @@ -259,6 +259,7 @@ See the [API documentation](./docs/api.md) for all endpoints.
 
 ### Web & Desktop
 
+- [Lollms-Webui](https://github.com/ParisNeo/lollms-webui)
 - [LibreChat](https://github.com/danny-avila/LibreChat)
 - [Bionic GPT](https://github.com/bionic-gpt/bionic-gpt)
 - [Enchanted (macOS native)](https://github.com/AugustDev/enchanted)
Repository: ollama/ollama
Pull request: Community Integration: CRAG Ollama Chat

Corrective Retrieval Augmented Generation Demo, powered by Langgraph and Streamlit 🤗

Supports: 

- Ollama
- OpenAI APIs

Changed files:
filename: README.md
patch: @@ -290,6 +290,7 @@ See the [API documentation](./docs/api.md) for all endpoints.
 - [Ollama Basic Chat: Uses HyperDiv Reactive UI](https://github.com/rapidarchitect/ollama_basic_chat)
 - [Ollama-chats RPG](https://github.com/drazdra/ollama-chats)
 - [ChatOllama: Open Source Chatbot based on Ollama with Knowledge Bases](https://github.com/sugarforever/chat-ollama)
+- [CRAG Ollama Chat: Simple Web Search with Corrective RAG](https://github.com/Nagi-ovo/CRAG-Ollama-Chat)
 
 ### Terminal
Repository: ollama/ollama
Pull request: Update README.md

Plugins list updated

Changed files:
filename: README.md
patch: @@ -372,3 +372,4 @@ See the [API documentation](./docs/api.md) for all endpoints.
 - [Wingman-AI](https://github.com/RussellCanfield/wingman-ai) (Copilot code and chat alternative using Ollama and HuggingFace)
 - [Page Assist](https://github.com/n4ze3m/page-assist) (Chrome Extension)
 - [AI Telegram Bot](https://github.com/tusharhero/aitelegrambot) (Telegram bot using Ollama in backend)
+- [AI ST Completion](https://github.com/yaroslavyaroslav/OpenAI-sublime-text) (Sublime Text 4 AI assistant plugin with Ollama support)
Repository: nodejs/node
Pull request: src: remove unused DSAKeyExportJob

Removes the unused `DSAKeyExportJob`, a remnant of Node-only Web Cryptography algorithms.

Changed files:
filename: src/crypto/crypto_dsa.cc
patch: @@ -74,37 +74,6 @@ Maybe<void> DsaKeyGenTraits::AdditionalConfig(
   return JustVoid();
 }
 
-Maybe<void> DSAKeyExportTraits::AdditionalConfig(
-    const FunctionCallbackInfo<Value>& args,
-    unsigned int offset,
-    DSAKeyExportConfig* params) {
-  return JustVoid();
-}
-
-WebCryptoKeyExportStatus DSAKeyExportTraits::DoExport(
-    const KeyObjectData& key_data,
-    WebCryptoKeyFormat format,
-    const DSAKeyExportConfig& params,
-    ByteSource* out) {
-  CHECK_NE(key_data.GetKeyType(), kKeyTypeSecret);
-
-  switch (format) {
-    case kWebCryptoKeyFormatRaw:
-      // Not supported for RSA keys of either type
-      return WebCryptoKeyExportStatus::FAILED;
-    case kWebCryptoKeyFormatPKCS8:
-      if (key_data.GetKeyType() != kKeyTypePrivate)
-        return WebCryptoKeyExportStatus::INVALID_KEY_TYPE;
-      return PKEY_PKCS8_Export(key_data, out);
-    case kWebCryptoKeyFormatSPKI:
-      if (key_data.GetKeyType() != kKeyTypePublic)
-        return WebCryptoKeyExportStatus::INVALID_KEY_TYPE;
-      return PKEY_SPKI_Export(key_data, out);
-    default:
-      UNREACHABLE();
-  }
-}
-
 bool GetDsaKeyDetail(Environment* env,
                      const KeyObjectData& key,
                      Local<Object> target) {
@@ -132,12 +101,10 @@ bool GetDsaKeyDetail(Environment* env,
 namespace DSAAlg {
 void Initialize(Environment* env, Local<Object> target) {
   DsaKeyPairGenJob::Initialize(env, target);
-  DSAKeyExportJob::Initialize(env, target);
 }
 
 void RegisterExternalReferences(ExternalReferenceRegistry* registry) {
   DsaKeyPairGenJob::RegisterExternalReferences(registry);
-  DSAKeyExportJob::RegisterExternalReferences(registry);
 }
 }  // namespace DSAAlg
 }  // namespace crypto

filename: src/crypto/crypto_dsa.h
patch: @@ -36,29 +36,6 @@ struct DsaKeyGenTraits final {
 
 using DsaKeyPairGenJob = KeyGenJob<KeyPairGenTraits<DsaKeyGenTraits>>;
 
-struct DSAKeyExportConfig final : public MemoryRetainer {
-  SET_NO_MEMORY_INFO()
-  SET_MEMORY_INFO_NAME(DSAKeyExportConfig)
-  SET_SELF_SIZE(DSAKeyExportConfig)
-};
-
-struct DSAKeyExportTraits final {
-  static constexpr const char* JobName = "DSAKeyExportJob";
-  using AdditionalParameters = DSAKeyExportConfig;
-
-  static v8::Maybe<void> AdditionalConfig(
-      const v8::FunctionCallbackInfo<v8::Value>& args,
-      unsigned int offset,
-      DSAKeyExportConfig* config);
-
-  static WebCryptoKeyExportStatus DoExport(const KeyObjectData& key_data,
-                                           WebCryptoKeyFormat format,
-                                           const DSAKeyExportConfig& params,
-                                           ByteSource* out);
-};
-
-using DSAKeyExportJob = KeyExportJob<DSAKeyExportTraits>;
-
 bool GetDsaKeyDetail(Environment* env,
                      const KeyObjectData& key,
                      v8::Local<v8::Object> target);
Repository: denoland/deno
Pull request: fix(ext/ffi): types for nonblocking FFI


Changed files:
filename: cli/dts/lib.deno.unstable.d.ts
patch: @@ -123,6 +123,8 @@ declare namespace Deno {
   export interface ForeignFunction {
     parameters: (NativeType | "buffer")[];
     result: NativeType;
+    /** When true, function calls will run on a dedicated blocking thread and will return a Promise resolving to the `result`. */
+    nonblocking?: boolean;
   }
 
   /** A dynamic library resource */
Repository: vercel/next.js
Pull request: Update failing e2e deploy tests

x-ref: https://github.com/vercel/next.js/actions/runs/18146430374/job/51651546603
x-ref: https://github.com/vercel/next.js/actions/runs/18146430374/job/51648845664

Changed files:
filename: test/e2e/app-dir/parallel-routes-and-interception-nested-dynamic-routes/parallel-routes-and-interception-nested-dynamic-routes.test.ts
patch: @@ -3,6 +3,9 @@ import { nextTestSetup } from 'e2e-utils'
 describe('parallel-routes-and-interception-nested-dynamic-routes', () => {
   const { next } = nextTestSetup({
     files: __dirname,
+    // TODO: re-enable when resolved related thread
+    // https://vercel.slack.com/archives/C07UCHRBWGK/p1759165345308879
+    skipDeployment: true,
   })
 
   it('should intercept the route for nested dynamic routes', async () => {

filename: test/e2e/app-dir/segment-cache/staleness/segment-cache-stale-time.test.ts
patch: @@ -3,10 +3,10 @@ import type * as Playwright from 'playwright'
 import { createRouterAct } from '../router-act'
 
 describe('segment cache (staleness)', () => {
-  const { next, isNextDev } = nextTestSetup({
+  const { next, isNextDev, isNextDeploy } = nextTestSetup({
     files: __dirname,
   })
-  if (isNextDev) {
+  if (isNextDev || isNextDeploy) {
     test('disabled in development / deployment', () => {})
     return
   }
Repository: facebook/react
Pull request: [ci] Remove jestSequencer

Stack from [ghstack](https://github.com/ezyang/ghstack) (oldest at bottom):
* #30501
* __->__ #30500
* #30499

This was previously used for circleci parallelization but is no longer
needed.

Changed files:
filename: scripts/jest/config.base.js
patch: @@ -24,8 +24,6 @@ module.exports = {
   },
   snapshotSerializers: [require.resolve('jest-snapshot-serializer-raw')],
 
-  testSequencer: require.resolve('./jestSequencer'),
-
   testEnvironment: 'jsdom',
 
   testRunner: 'jest-circus/runner',

filename: scripts/jest/jestSequencer.js
patch: @@ -1,19 +0,0 @@
-'use strict';
-
-const Sequencer = require('@jest/test-sequencer').default;
-
-class CustomSequencer extends Sequencer {
-  sort(tests) {
-    if (process.env.CIRCLE_NODE_TOTAL) {
-      // In CI, parallelize tests across multiple tasks.
-      const nodeTotal = parseInt(process.env.CIRCLE_NODE_TOTAL, 10);
-      const nodeIndex = parseInt(process.env.CIRCLE_NODE_INDEX, 10);
-      tests = tests
-        .sort((a, b) => (a.path < b.path ? -1 : 1))
-        .filter((_, i) => i % nodeTotal === nodeIndex);
-    }
-    return tests;
-  }
-}
-
-module.exports = CustomSequencer;
Repository: ollama/ollama
Pull request: Community Integration: ChatOllama

# Community Integration - ChatOllama

[ChatOllama](https://github.com/sugarforever/chat-ollama) is an open source chatbot based on LLMs. It supports a wide range of language models including:

- Ollama served models
- OpenAI
- Azure OpenAI
- Anthropic

ChatOllama supports multiple types of chat:

- Free chat with LLMs
- Chat with LLMs based on knowledge base

ChatOllama feature list:
- Ollama models management
- Knowledge bases management
- Chat
- Commercial LLMs API keys management

Changed files:
filename: README.md
patch: @@ -289,6 +289,7 @@ See the [API documentation](./docs/api.md) for all endpoints.
 - [AnythingLLM (Docker + MacOs/Windows/Linux native app)](https://github.com/Mintplex-Labs/anything-llm)
 - [Ollama Basic Chat: Uses HyperDiv Reactive UI](https://github.com/rapidarchitect/ollama_basic_chat)
 - [Ollama-chats RPG](https://github.com/drazdra/ollama-chats)
+- [ChatOllama: Open Source Chatbot based on Ollama with Knowledge Bases](https://github.com/sugarforever/chat-ollama)
 
 ### Terminal
Repository: nodejs/node
Pull request: doc: add support link for panva

as per the title

Changed files:
filename: README.md
patch: @@ -408,7 +408,7 @@ For information about the governance of the Node.js project, see
 * [MrJithil](https://github.com/MrJithil) -
   **Jithil P Ponnan** <<jithil@outlook.com>> (he/him)
 * [panva](https://github.com/panva) -
-  **Filip Skokan** <<panva.ip@gmail.com>> (he/him)
+  **Filip Skokan** <<panva.ip@gmail.com>> (he/him) - [Support me](https://github.com/sponsors/panva)
 * [pimterry](https://github.com/pimterry) -
   **Tim Perry** <<pimterry@gmail.com>> (he/him)
 * [pmarchini](https://github.com/pmarchini) -
Repository: facebook/react
Pull request: [ci] Fix prereleases reusable workflow

Stack from [ghstack](https://github.com/ezyang/ghstack) (oldest at bottom):
* __->__ #30498

Turns out I had configured the reusable workflow with the wrong `on`
command.

Also removes the workflow_dispatch config from the nightly workflow as
that was not meant to be triggered manually.

Changed files:
filename: .github/workflows/runtime_prereleases.yml
patch: @@ -1,18 +1,15 @@
 name: (Runtime) Publish Prereleases
 
 on:
-  workflow_dispatch:
+  workflow_call:
     inputs:
       commit_sha:
         required: true
         default: ''
         type: string
       release_channel:
         required: true
-        type: choice
-        options:
-          - stable
-          - experimental
+        type: string
       dist_tag:
         required: true
         type: string

filename: .github/workflows/runtime_prereleases_nightly.yml
patch: @@ -4,10 +4,6 @@ on:
   schedule:
     # At 10 minutes past 16:00 on Mon, Tue, Wed, Thu, and Fri
     - cron: 10 16 * * 1,2,3,4,5
-  workflow_dispatch:
-    inputs:
-      prerelease_commit_sha:
-        required: false
 
 env:
   TZ: /usr/share/zoneinfo/America/Los_Angeles
Repository: huggingface/transformers
Pull request: [testing] update `test_longcat_generation_cpu`

# What does this PR do?

Use "auto" instead of "cpu" to avoid the pytest process being killed. 

(#40132 has issue with using "auto" for this model, and we still need an fix for that)

Also using `max_new_tokens=3` to run this test within 8 minutes (on a single A10 CI runner)

The expected output is not updated yet: will do it after the above mentioned issue is fixed.

Changed files:
filename: tests/models/longcat_flash/test_modeling_longcat_flash.py
patch: @@ -435,16 +435,16 @@ def test_shortcat_generation(self):
     @require_large_cpu_ram
     def test_longcat_generation_cpu(self):
         # takes absolutely forever and a lot RAM, but allows to test the output in the CI
-        model = LongcatFlashForCausalLM.from_pretrained(self.model_id, device_map="cpu", dtype=torch.bfloat16)
+        model = LongcatFlashForCausalLM.from_pretrained(self.model_id, device_map="auto", dtype=torch.bfloat16)
         tokenizer = AutoTokenizer.from_pretrained(self.model_id)
 
         chat = [{"role": "user", "content": "Paris is..."}]
         inputs = tokenizer.apply_chat_template(chat, tokenize=True, add_generation_prompt=True, return_tensors="pt")
 
         with torch.no_grad():
-            outputs = model.generate(inputs, max_new_tokens=10, do_sample=False)
+            outputs = model.generate(inputs, max_new_tokens=3, do_sample=False)
 
         response = tokenizer.batch_decode(outputs, skip_special_tokens=False)[0]
-        expected_output = "[Round 0] USER:Paris is... ASSISTANT:Paris is... a city of timeless charm, where"
+        expected_output = "[Round 0] USER:Paris is... ASSISTANT:Paris is..."
 
         self.assertEqual(response, expected_output)
Repository: ggml-org/llama.cpp
Pull request: [SYCL] fix softmax for iGPU

Fix issue: https://github.com/ggml-org/llama.cpp/issues/17656.

Fix softmax for iGPU


Changed files:
filename: ggml/src/ggml-sycl/softmax.cpp
patch: @@ -277,7 +277,7 @@ static void soft_max_f32_sycl(const float *x, const T *mask,
     const int id       = get_current_device_id();
     const size_t smpbo = ggml_sycl_info().devices[id].smpbo;
 
-    if (nbytes_shared <= smpbo) {
+    if (nbytes_shared <= smpbo && ncols_x <= max_block_size) {
         launch_soft_max_kernels<32, 64, 128, 256, 512, 1024, 2048, 4096>(
             x, mask, sinks, dst, params, stream, block_dims, block_nums,
             nbytes_shared);
Repository: denoland/deno
Pull request: fix(permissions): allow /proc/pressure/* files with --allow-read

The /proc/pressure/* files (memory, cpu, io) are read-only system monitoring files that only expose PSI (Pressure Stall Information) metrics. These files are safe to read and commonly used for system monitoring and performance analysis.

Previously, these files required --allow-all permission which was overly restrictive. This change allows them to be read with just --allow-read permission while maintaining security for other potentially dangerous /proc files.

Closes: https://github.com/denoland/deno/issues/30779


Changed files:
filename: runtime/permissions/lib.rs
patch: @@ -4268,6 +4268,9 @@ impl PermissionsContainer {
       {
         if path.ends_with("/environ") {
           self.check_env_all()?;
+        } else if path.starts_with("/proc/pressure/") {
+          // Allow /proc/pressure/* files with just --allow-read since they are
+          // read-only system monitoring files that only expose performance metrics
         } else {
           self.check_has_all_permissions(&path)?;
         }

filename: tests/specs/permission/special/main.js
patch: @@ -6,6 +6,10 @@ const testCases = [
   [["darwin", "linux"], null, "/dev/null"],
   [["darwin", "linux"], null, "/etc/passwd"],
   [["windows"], null, "\\\\.\\nul"],
+  // Allowed with --allow-read, system monitoring files
+  [["linux"], null, "/proc/pressure/memory"],
+  [["linux"], null, "/proc/pressure/cpu"],
+  [["linux"], null, "/proc/pressure/io"],
   // Denied, requires `--allow-all`
   [["darwin", "linux"], /NotCapable/, "/dev/ptmx"],
   [["linux"], /NotCapable/, "/proc/self/environ"],
Repository: ollama/ollama
Pull request: Update ollama.iss

add arm64 support

Changed files:
filename: app/ollama.iss
patch: @@ -28,8 +28,8 @@ AppPublisher={#MyAppPublisher}
 AppPublisherURL={#MyAppURL}
 AppSupportURL={#MyAppURL}
 AppUpdatesURL={#MyAppURL}
-ArchitecturesAllowed=x64
-ArchitecturesInstallIn64BitMode=x64
+ArchitecturesAllowed=x64 arm64
+ArchitecturesInstallIn64BitMode=x64 arm64
 DefaultDirName={localappdata}\Programs\{#MyAppName}
 DefaultGroupName={#MyAppName}
 DisableProgramGroupPage=yes
Repository: nodejs/node
Pull request: sqlite: handle ?NNN bind params as positional

Fixes #59340


Changed files:
filename: src/node_sqlite.cc
patch: @@ -1941,7 +1941,9 @@ bool StatementSync::BindParams(const FunctionCallbackInfo<Value>& args) {
   }
 
   for (int i = anon_start; i < args.Length(); ++i) {
-    while (sqlite3_bind_parameter_name(statement_, anon_idx) != nullptr) {
+    while (1) {
+      const char* param = sqlite3_bind_parameter_name(statement_, anon_idx);
+      if (param == nullptr || param[0] == '?') break;
       anon_idx++;
     }
 

filename: test/parallel/test-sqlite-statement-sync.js
patch: @@ -240,6 +240,36 @@ suite('StatementSync.prototype.run()', () => {
       stmt.run({ k: 3, v: 30 }), { changes: 1, lastInsertRowid: 3 }
     );
   });
+
+  test('SQLite defaults unbound ?NNN parameters', (t) => {
+    const db = new DatabaseSync(nextDb());
+    t.after(() => { db.close(); });
+    const setup = db.exec(
+      'CREATE TABLE data(key INTEGER PRIMARY KEY, val INTEGER NOT NULL) STRICT;'
+    );
+    t.assert.strictEqual(setup, undefined);
+    const stmt = db.prepare('INSERT INTO data (key, val) VALUES (?1, ?3)');
+
+    t.assert.throws(() => {
+      stmt.run(1);
+    }, {
+      code: 'ERR_SQLITE_ERROR',
+      message: 'NOT NULL constraint failed: data.val',
+      errcode: 1299,
+      errstr: 'constraint failed',
+    });
+  });
+
+  test('binds ?NNN params by position', (t) => {
+    const db = new DatabaseSync(nextDb());
+    t.after(() => { db.close(); });
+    const setup = db.exec(
+      'CREATE TABLE data(key INTEGER PRIMARY KEY, val INTEGER NOT NULL) STRICT;'
+    );
+    t.assert.strictEqual(setup, undefined);
+    const stmt = db.prepare('INSERT INTO data (key, val) VALUES (?1, ?2)');
+    t.assert.deepStrictEqual(stmt.run(1, 2), { changes: 1, lastInsertRowid: 1 });
+  });
 });
 
 suite('StatementSync.prototype.sourceSQL', () => {
Repository: ollama/ollama
Pull request: Bump ROCm to 6.0.2 patch release

Fixes #2455 


Changed files:
filename: .github/workflows/test.yaml
patch: @@ -106,7 +106,7 @@ jobs:
     strategy:
       matrix:
         rocm-version:
-          - '6.0'
+          - '6.0.2'
     runs-on: linux
     container: rocm/dev-ubuntu-20.04:${{ matrix.rocm-version }}
     steps:

filename: Dockerfile
patch: @@ -2,7 +2,7 @@ ARG GOLANG_VERSION=1.22.1
 ARG CMAKE_VERSION=3.22.1
 # this CUDA_VERSION corresponds with the one specified in docs/gpu.md
 ARG CUDA_VERSION=11.3.1
-ARG ROCM_VERSION=6.0
+ARG ROCM_VERSION=6.0.2
 
 # Copy the minimal context we need to run the generate scripts
 FROM scratch AS llm-code
Repository: electron/electron
Pull request: fix: crash calling `Fetch.continueResponse` with `WebContentsView`

Backport of #47434

See that PR for details.


Notes: Fixed an issue where calling `Fetch.continueResponse` via debugger with `WebContentsView` could cause a crash.

Changed files:
filename: shell/browser/api/electron_api_debugger.cc
patch: @@ -81,7 +81,11 @@ void Debugger::DispatchProtocolMessage(DevToolsAgentHost* agent_host,
 
 void Debugger::RenderFrameHostChanged(content::RenderFrameHost* old_rfh,
                                       content::RenderFrameHost* new_rfh) {
-  if (agent_host_) {
+  // ConnectWebContents uses the primary main frame of the webContents,
+  // so if the new_rfh is not the primary main frame, we don't want to
+  // reconnect otherwise we'll end up trying to reconnect to a RenderFrameHost
+  // that already has a DevToolsAgentHost associated with it.
+  if (agent_host_ && new_rfh->IsInPrimaryMainFrame()) {
     agent_host_->DisconnectWebContents();
     auto* web_contents = content::WebContents::FromRenderFrameHost(new_rfh);
     agent_host_->ConnectWebContents(web_contents);
Repository: ollama/ollama
Pull request: fix: trim quotes on OLLAMA_ORIGINS

resolves #3365 

Changed files:
filename: server/routes.go
patch: @@ -1013,16 +1013,14 @@ func allowedHostsMiddleware(addr net.Addr) gin.HandlerFunc {
 }
 
 func (s *Server) GenerateRoutes() http.Handler {
-	var origins []string
-	if o := os.Getenv("OLLAMA_ORIGINS"); o != "" {
-		origins = strings.Split(o, ",")
-	}
-
 	config := cors.DefaultConfig()
 	config.AllowWildcard = true
 	config.AllowBrowserExtensions = true
 
-	config.AllowOrigins = origins
+	if allowedOrigins := strings.Trim(os.Getenv("OLLAMA_ORIGINS"), "\"'"); allowedOrigins != "" {
+		config.AllowOrigins = strings.Split(allowedOrigins, ",")
+	}
+
 	for _, allowOrigin := range defaultAllowOrigins {
 		config.AllowOrigins = append(config.AllowOrigins,
 			fmt.Sprintf("http://%s", allowOrigin),
Repository: nodejs/node
Pull request: node-api: link to other programming language bindings

Add a new doc section to highlight other programming language bindings on top of Node-API.

Refs: https://github.com/nodejs/node/pull/59498


Changed files:
filename: doc/api/n-api.md
patch: @@ -33,23 +33,28 @@ properties:
   using `napi_get_last_error_info`. More information can be found in the error
   handling section [Error handling][].
 
+## Writing addons in various programming languages
+
 Node-API is a C API that ensures ABI stability across Node.js versions
-and different compiler levels. A C++ API can be easier to use.
-To support using C++, the project maintains a
-C++ wrapper module called [`node-addon-api`][].
-This wrapper provides an inlinable C++ API. Binaries built
-with `node-addon-api` will depend on the symbols for the Node-API C-based
-functions exported by Node.js. `node-addon-api` is a more
-efficient way to write code that calls Node-API. Take, for example, the
-following `node-addon-api` code. The first section shows the
-`node-addon-api` code and the second section shows what actually gets
-used in the addon.
+and different compiler levels. With this stability guarantee, it is possible
+to write addons in other programming languages on top of Node-API. Refer
+to [language and engine bindings][] for more programming languages and engines
+support details.
+
+[`node-addon-api`][] is the official C++ binding that provides a more efficient way to
+write C++ code that calls Node-API. This wrapper is a header-only library that offers an inlinable C++ API.
+Binaries built with `node-addon-api` will depend on the symbols of the Node-API
+C-based functions exported by Node.js. The following code snippet is an example
+of `node-addon-api`:
 
 ```cpp
 Object obj = Object::New(env);
 obj["foo"] = String::New(env, "bar");
 ```
 
+The above `node-addon-api` C++ code is equivalent to the following C-based
+Node-API code:
+
 ```cpp
 napi_status status;
 napi_value object, string;
@@ -72,8 +77,9 @@ if (status != napi_ok) {
 }
 ```
 
-The end result is that the addon only uses the exported C APIs. As a result,
-it still gets the benefits of the ABI stability provided by the C API.
+The end result is that the addon only uses the exported C APIs. Even though
+the addon is written in C++, it still gets the benefits of the ABI stability
+provided by the C Node-API.
 
 When using `node-addon-api` instead of the C APIs, start with the API [docs][]
 for `node-addon-api`.
@@ -6887,6 +6893,7 @@ the add-on's file name during loading.
 [externals]: #napi_create_external
 [global scope]: globals.md
 [gyp-next]: https://github.com/nodejs/gyp-next
+[language and engine bindings]: https://github.com/nodejs/abi-stable-node/blob/doc/node-api-engine-bindings.md
 [module scope]: modules.md#the-module-scope
 [node-gyp]: https://github.com/nodejs/node-gyp
 [node-pre-gyp]: https://github.com/mapbox/node-pre-gyp