Aimform

Plugins

13 plugin interfaces. 25+ provider implementations. All swappable via adapter pattern.

Available Plugins

Plugin InterfaceAuto-Registered ToolsDefault Providers
FileStoragePluginlist_files, upload_file, read_file, delete_fileAimform Files, Cloudflare R2, In-Memory
FileConversionPluginconvert_fileCloudflare Workers AI
TranslationPlugintranslate_fileGemini, DeepSeek
VisionPluginanalyze_imageGemini, OpenAI
OCRPluginextract_text_from_imageCloudflare Workers AI
FileTransformPluginresize_imageCloudflare Images
WebSearchPluginweb_search, fetch_web_pageTavily, Brave
BrowserPluginbrowse_pageCloudflare Browser Rendering
ImageGenPlugingenerate_imageCloudflare Flux, DALL-E
CodeGenPlugingenerate_codeDeepSeek Coder, GPT-4o
CodeCompletionPlugincomplete_codeDeepSeek, OpenAI
IPRotationPlugin— (internal)Residential Proxy, Direct
EmbeddingPlugin— (internal)Interface ready

Configuration

const ai = new AI({
  plugins: {
    files: new AimformFilesPlugin({ uploadFile, listFiles, getFile, deleteFile }),
    fileConversion: new CloudflareFileConverter(env.AI),
    translation: new GeminiTranslationPlugin(env.GEMINI_API_KEY),
    vision: new GeminiVisionPlugin(env.GEMINI_API_KEY),
    ocr: new CloudflareOCRPlugin(env.AI),
    transform: new CloudflareImagesPlugin(accountId, token),
    webSearch: new TavilySearchPlugin(env.TAVILY_API_KEY),
    browser: new CloudflareBrowserPlugin(env.BROWSER),
    imageGen: new CloudflareAIPlugin(env.AI),
    codeGen: new DeepSeekCodePlugin(env.DEEPSEEK_API_KEY),
    codeCompletion: new DeepSeekCompletionPlugin(env.DEEPSEEK_API_KEY),
    ipRotation: new ResidentialProxyPlugin("https://proxy.example.com"),
  },
});

File Processing Pipeline

Files go through a multi-step pipeline:

Upload (Word/PDF/DOCX) → Convert to Markdown → Optional Translation → Store
// Upload a file — the AI can call upload_file
await ai.plugins.files.upload({
  name: "report.pdf",
  mimeType: "application/pdf",
  data: fileBuffer,
});
 
// Convert to Markdown — the AI can call convert_file
const result = await ai.plugins.fileConversion.toMarkdown({
  data: fileBuffer,
  mimeType: "application/pdf",
});
console.log(result.markdown); // Clean markdown
 
// Translate to another language — the AI can call translate_file
const translated = await ai.plugins.translation.translateMarkdown(
  result.markdown, "en", "ja"
);

Building a Custom Plugin

Implement any interface and plug it in:

import type { WebSearchPlugin, WebSearchResult } from "@aimform/ai";
 
class DuckDuckGoPlugin implements WebSearchPlugin {
  readonly provider = "duckduckgo";
 
  async search(query: string): Promise<WebSearchResult[]> {
    const res = await fetch(`https://api.duckduckgo.com/?q=${encodeURIComponent(query)}&format=json`);
    const data = await res.json();
    return data.Results.map((r: any) => ({
      title: r.Text, url: r.FirstURL, snippet: r.Text,
    }));
  }
 
  async fetchPage(url: string) {
    const res = await fetch(url);
    return { content: await res.text(), mimeType: "text/html" };
  }
}
 
// Use it
const ai = new AI({
  plugins: { webSearch: new DuckDuckGoPlugin() },
});

On this page