Skip to content

Commit d4b05f4

Browse files
author
Sorra
authored
Merge pull request #185 from TheWizardsCode/ge-okh/embedding-test
WIP: Add npm script + docs to run embedding integration test (bge-okh)
2 parents 3317809 + 41aaf10 commit d4b05f4

4 files changed

Lines changed: 60 additions & 15 deletions

File tree

.beads/issues.jsonl

Lines changed: 4 additions & 2 deletions
Large diffs are not rendered by default.

.beads/sync_base.jsonl

Lines changed: 12 additions & 5 deletions
Large diffs are not rendered by default.

web/demo/README.md

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
11
# Demo notes
22

3-
Run the embedding integration test locally:
4-
5-
npm run test:integration:embedding
6-
7-
Set EMBED_NODE=1 to force Node fallback if needed.
3+
Run `npm run test:integration:embedding` locally; set `EMBED_NODE=1` to force the Node fallback if needed.

web/demo/js/embedding-service.js

Lines changed: 43 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,21 +53,61 @@ const NODE_FALLBACK_ENABLED = typeof process !== 'undefined' && process.env && (
5353
let nodeExtractorPromise = null;
5454
let nodeExtractorError = null;
5555

56+
function createSharpStub() {
57+
const stub = function sharpUnavailable() {
58+
throw new Error('sharp unavailable');
59+
};
60+
stub.default = stub;
61+
return stub;
62+
}
63+
64+
function withSharpStub(loadFn) {
65+
if (typeof require !== 'function') {
66+
return loadFn();
67+
}
68+
let Module = null;
69+
try {
70+
Module = require('module');
71+
} catch (err) {
72+
return loadFn();
73+
}
74+
let sharpPath = null;
75+
try {
76+
sharpPath = require.resolve('sharp');
77+
} catch (err) {
78+
return loadFn();
79+
}
80+
const existing = require.cache[sharpPath];
81+
const stubModule = new Module(sharpPath);
82+
stubModule.exports = createSharpStub();
83+
stubModule.loaded = true;
84+
require.cache[sharpPath] = stubModule;
85+
try {
86+
return loadFn();
87+
} finally {
88+
if (existing) {
89+
require.cache[sharpPath] = existing;
90+
} else {
91+
delete require.cache[sharpPath];
92+
}
93+
}
94+
}
95+
5696
async function getNodeExtractor() {
5797
if (!NODE_FALLBACK_ENABLED) return null;
5898
if (!nodeExtractorPromise) {
5999
nodeExtractorPromise = (async () => {
60100
let mod = null;
61101
try {
62102
if (typeof require === 'function') {
63-
mod = require('@xenova/transformers');
103+
mod = withSharpStub(() => require('@xenova/transformers'));
64104
} else {
65-
mod = await import('@xenova/transformers');
105+
mod = await withSharpStub(() => import('@xenova/transformers'));
66106
}
67107
} catch (primaryErr) {
68108
// Fallback to dynamic import if require failed, or vice versa
69109
try {
70-
mod = await import('@xenova/transformers');
110+
mod = await withSharpStub(() => import('@xenova/transformers'));
71111
} catch (importErr) {
72112
throw importErr || primaryErr;
73113
}

0 commit comments

Comments
 (0)