StateWeave does not require a provider SDK. A model adapter only needs complete and stream.
import type { Model } from "stateweave";

export const model: Model = {
  async complete(input) {
    let text = "";
    for await (const token of this.stream(input)) text += token.token;
    return { text };
  },

  async *stream(input) {
    const response = await fetch("https://provider.example.com/v1/generate", {
      method: "POST",
      headers: {
        "content-type": "application/json",
        authorization: `Bearer ${process.env.PROVIDER_API_KEY}`
      },
      body: JSON.stringify({
        model: "your-model",
        prompt: input.prompt,
        temperature: input.parameters?.temperature ?? 0
      })
    });

    const text = await response.text();
    yield { type: "token", token: text };
  }
};
Then pass it to the agent.
import { StateWeaveAgent } from "stateweave";

const agent = new StateWeaveAgent({
  model,
  tools: [],
  maxSteps: 5
});

Anthropic-compatible adapter

This repo includes a thin Anthropic HTTP adapter.
import { AnthropicModel } from "stateweave";

const model = new AnthropicModel({
  apiKey: process.env.ANTHROPIC_API_KEY!,
  baseUrl: "https://api.anthropic.com",
  model: "claude-3-5-sonnet-latest",
  maxTokens: 1024,
  temperature: 0
});
The StateWeave SDK surface remains GraphFrame -> GraphOps -> StateGraph even when a provider has its own wire format internally.