Skip to content

Commit

Permalink
🤖 Merge PR DefinitelyTyped#70757 [dom-chromium-ai] Add typings for th…
Browse files Browse the repository at this point in the history
…e translation API by @christianliebel
  • Loading branch information
christianliebel authored Nov 23, 2024
1 parent db960f3 commit 3e784a6
Show file tree
Hide file tree
Showing 2 changed files with 135 additions and 0 deletions.
62 changes: 62 additions & 0 deletions types/dom-chromium-ai/dom-chromium-ai-tests.ts
Original file line number Diff line number Diff line change
Expand Up @@ -167,4 +167,66 @@ async function topLevel() {
}

rewriter.destroy();

// Translator

const translator = await window.ai.translator.create({
sourceLanguage: "de",
targetLanguage: "en",
signal: (new AbortController()).signal,
monitor(m: AICreateMonitor) {
m.addEventListener("downloadprogress", (e) => {
console.log(e.loaded, e.total);
});
},
});

console.log(
translator.sourceLanguage,
translator.targetLanguage,
);

const translatorCapabilities = await window.ai.translator.capabilities();
console.log(
translatorCapabilities.available,
translatorCapabilities.canTranslate("de", "en"),
);

const translatorResult: string = await translator.translate("foo", {
signal: (new AbortController()).signal,
});
console.log(translatorResult);

for await (
const chunk of translator.translateStreaming("foo", { signal: (new AbortController()).signal })
) {
console.log(chunk);
}

translator.destroy();

// Language detector

const languageDetector = await window.ai.languageDetector.create({
signal: (new AbortController()).signal,
monitor(m: AICreateMonitor) {
m.addEventListener("downloadprogress", (e) => {
console.log(e.loaded, e.total);
});
},
});

const languageDetectorCapabilities = await window.ai.languageDetector.capabilities();
console.log(
languageDetectorCapabilities.available,
languageDetectorCapabilities.canDetect("de"),
);

const [languageDetectorResult]: LanguageDetectionResult[] = await languageDetector.detect("foo", {
signal: (new AbortController()).signal,
});
console.log(languageDetectorResult.detectedLanguage);
console.log(languageDetectorResult.confidence);

languageDetector.destroy();
}
73 changes: 73 additions & 0 deletions types/dom-chromium-ai/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ interface AI {
readonly summarizer: AISummarizerFactory;
readonly writer: AIWriterFactory;
readonly rewriter: AIRewriterFactory;
readonly translator: AITranslatorFactory;
readonly languageDetector: AILanguageDetectorFactory;
}

interface AICreateMonitor extends EventTarget {
Expand Down Expand Up @@ -303,3 +305,74 @@ interface AIRewriterCapabilities {

supportsInputLanguage(languageTag: Intl.UnicodeBCP47LocaleIdentifier): AICapabilityAvailability;
}

// Translator
// https://github.com/WICG/translation-api?tab=readme-ov-file#full-api-surface-in-web-idl

interface AITranslatorFactory {
create(options: AITranslatorCreateOptions): Promise<AITranslator>;
capabilities(): Promise<AITranslatorCapabilities>;
}

interface AITranslator {
translate(input: string, options?: AITranslatorTranslateOptions): Promise<string>;
translateStreaming(input: string, options?: AITranslatorTranslateOptions): ReadableStream;

readonly sourceLanguage: string;
readonly targetLanguage: string;

destroy(): void;
}

interface AITranslatorCapabilities {
readonly available: AICapabilityAvailability;

canTranslate(sourceLanguage: string, targetLanguage: string): AICapabilityAvailability;
}

interface AITranslatorCreateOptions {
signal?: AbortSignal;
monitor?: AICreateMonitorCallback;

sourceLanguage: string;
targetLanguage: string;
}

interface AITranslatorTranslateOptions {
signal?: AbortSignal;
}

// Language detector
// https://github.com/WICG/translation-api?tab=readme-ov-file#full-api-surface-in-web-idl

interface AILanguageDetectorFactory {
create(options?: AILanguageDetectorCreateOptions): Promise<AILanguageDetector>;
capabilities(): Promise<AILanguageDetectorCapabilities>;
}

interface AILanguageDetector {
detect(input: string, options?: AILanguageDetectorDetectOptions): Promise<LanguageDetectionResult[]>;

destroy(): void;
}

interface AILanguageDetectorCapabilities {
readonly available: AICapabilityAvailability;

canDetect(languageTag: string): AICapabilityAvailability;
}

interface AILanguageDetectorCreateOptions {
signal?: AbortSignal;
monitor?: AICreateMonitorCallback;
}

interface AILanguageDetectorDetectOptions {
signal?: AbortSignal;
}

interface LanguageDetectionResult {
/** null represents unknown language */
detectedLanguage: string | null;
confidence: number;
}

0 comments on commit 3e784a6

Please sign in to comment.