Skip to content

Providers

MITM decouples agents from LLM providers via the IModelProvider interface.

OpenAI (Built-in)

ts
import { OpenAIProvider } from "mitm-ai";

new OpenAIProvider({
  apiKey: "sk-...",                          // defaults to OPENAI_API_KEY env var
  baseURL: "https://api.openai.com/v1",     // any OpenAI-compatible endpoint
  model: "gpt-4o-mini",                     // default
})

Works with any OpenAI-compatible API — OpenRouter, Groq, Together, local Ollama, etc:

ts
new OpenAIProvider({
  apiKey: "...",
  baseURL: "https://openrouter.ai/api/v1",
  model: "anthropic/claude-3.5-sonnet",
})

Custom Provider

Implement IModelProvider for any LLM:

ts
import type { IModelProvider, IMessage, IModelResponse } from "mitm-ai";

class GeminiProvider implements IModelProvider {
  async chat(
    systemPrompt: string,
    history: IMessage[],
  ): Promise<IModelResponse> {
    // call Google Gemini API
    const response = await callGemini(systemPrompt, history);
    return {
      text: response.text,
      usage: {
        promptTokens: response.usageMetadata.promptTokenCount,
        completionTokens: response.usageMetadata.candidatesTokenCount,
        totalTokens: response.usageMetadata.totalTokenCount,
      },
    };
  }
}

Agent.builder()
  .setProvider(new GeminiProvider())
  .build();

IModelResponse

Every provider must return:

ts
interface IModelResponse {
  text: string;          // the model's raw text response
  usage: {
    promptTokens: number;
    completionTokens: number;
    totalTokens: number;
  };
}

Token usage is accumulated into the run trace automatically.

Released under the MIT License.