@@ -1,8 +1,9 @@
|
||||
import { acquireQvac, releaseQvac, loadAuxiliaryModel, qvacSdk, withQvacMaster } from './qvac-master.js';
|
||||
import { acquireQvac, releaseQvac, loadAuxiliaryModel, qvacSdk, withQvacMaster, qvacBusy } from './qvac-master.js';
|
||||
|
||||
export class QvacPerception {
|
||||
constructor({ model = process.env.JARVIS_OCR_MODEL || 'OCR_LATIN' } = {}) { this.model = model; this.modelId = null; }
|
||||
async ocr(image) {
|
||||
if (qvacBusy()) throw new Error('OCR skipped while the language model is answering');
|
||||
await acquireQvac();
|
||||
try {
|
||||
this.modelId ||= await loadAuxiliaryModel(this.model, {});
|
||||
|
||||
@@ -127,6 +127,15 @@ export async function unloadAuxiliaryModel(modelId) {
|
||||
|
||||
export function releaseQvac() { ownerCount = Math.max(0, ownerCount - 1); }
|
||||
|
||||
export function qvacBusy() {
|
||||
try {
|
||||
const loaded = Agent.engine.getLoaded?.();
|
||||
return Boolean(loaded && loaded.requestId);
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
export async function closeQvac() {
|
||||
if (ownerCount > 0) return;
|
||||
for (const modelId of auxiliaryModels.values()) await unloadAuxiliaryModel(modelId).catch(() => {});
|
||||
|
||||
Reference in New Issue
Block a user