getOrCreateClassifierSession function application

Last updated: 2026-03-03T18:32:34.140Z

Metrics

LOC: 62 Complexity: 12 Params: 0

Signature

getOrCreateClassifierSession(): : Promise<LanguageModelSession | null>

Architecture violations

View all

  • [warning] max-cyclomatic-complexity: 'getOrCreateClassifierSession' has cyclomatic complexity 12 (max 10)

Source Code

async function getOrCreateClassifierSession(): Promise<LanguageModelSession | null> {
  if (classifierSession) {
    // Recycle when context window is almost exhausted
    const remaining = classifierSession.tokensRemaining;
    const max = classifierSession.maxTokens;
    if (remaining !== undefined && max !== undefined && max > 0) {
      const usedRatio = (max - remaining) / max;
      if (usedRatio >= 0.85) {
        log.debug(
          `Contexto do classifier quase cheio (${remaining}/${max} tokens). Reciclando...`,
        );
        classifierSession.destroy();
        classifierSession = null;
      }
    }
  }

  if (classifierSession) return classifierSession;

  // Skip retry if session creation failed recently
  if (
    sessionFailedAt &&
    Date.now() - sessionFailedAt < SESSION_FAILURE_TTL_MS
  ) {
    return null;
  }

  try {
    const api = getLanguageModelApi();
    if (!api) {
      log.warn(
        "LanguageModel API não encontrada no background service worker.",
      );
      sessionFailedAt = Date.now();
      return null;
    }

    const avail = await api.availability({
      expectedInputs: [{ type: "text", languages: ["en"] }],
      expectedOutputs: [{ type: "text", languages: ["en"] }],
    });
    if (avail === "unavailable") {
      log.warn(
        `Chrome AI indisponível para classificação (status: "${avail}").`,
      );
      sessionFailedAt = Date.now();
      return null;
    }

    log.debug(`Criando sessão de classificação (availability: "${avail}")...`);
    classifierSession = await api.create({
      expectedOutputs: [{ type: "text", languages: ["en"] }],
    });
    log.info("Sessão Chrome AI Classifier (background) criada com sucesso.");
    sessionFailedAt = null;
    return classifierSession;
  } catch (err) {
    log.warn("Falha ao criar sessão de classificação:", err);
    sessionFailedAt = Date.now();
    return null;
  }
}

Dependencies (Outgoing)

graph LR getOrCreateClassifierSession["getOrCreateClassifierSession"] getLanguageModelApi["getLanguageModelApi"] getOrCreateClassifierSession -->|calls| getLanguageModelApi style getOrCreateClassifierSession fill:#dbeafe,stroke:#2563eb,stroke-width:2px click getOrCreateClassifierSession "ea7741b25c685b3f.html" click getLanguageModelApi "410ff2233e0b1dc2.html"
TargetType
getLanguageModelApi calls

Impact (Incoming)

graph LR getOrCreateClassifierSession["getOrCreateClassifierSession"] classifyField["classifyField"] classifyField -->|calls| getOrCreateClassifierSession style getOrCreateClassifierSession fill:#dbeafe,stroke:#2563eb,stroke-width:2px click getOrCreateClassifierSession "ea7741b25c685b3f.html" click classifyField "9847427f97e12b6f.html"
SourceType
classifyField calls