FluxyChat

Guides

Provider Options

Provider options let you pass provider-specific configuration beyond standard settings. They are namespaced by provider name so you can include options for mult

Provider Options

Provider options let you pass provider-specific configuration beyond standard settings. They are namespaced by provider name so you can include options for multiple providers in the same call.

Passing Provider Options

Provider options flow through AgentLoopOptions.providerOptions and are accessible via AgentLoopState.providerOptions in runStep:

import { runAgentLoop } from '@fluxy-chat/agent';

const result = await runAgentLoop({
  runStep: async (state) => {
    const openaiOpts = state.providerOptions?.openai;
    // Use provider options when building the model request
    const response = await model.generate({
      prompt: buildPrompt(state),
      providerOptions: state.providerOptions,
    });
    return { text: response.text, finishReason: response.finishReason };
  },
  providerOptions: {
    openai: {
      reasoningEffort: 'high',
    },
  },
});

PrepareStep Integration

Provider options can be changed mid-loop via prepareStep:

const result = await runAgentLoop({
  runStep: myRunStep,
  providerOptions: { openai: { reasoningEffort: 'low' } },

  prepareStep({ stepNumber }) {
    if (stepNumber > 2) {
      return {
        providerOptions: { openai: { reasoningEffort: 'high' } },
      };
    }
  },
});

Common Options Pattern

Provider options are Record<string, unknown> — each provider uses its own key:

providerOptions: {
  openai: { reasoningEffort: 'high', reasoningSummary: 'detailed' },
  anthropic: { thinking: { type: 'enabled', budgetTokens: 12000 }, effort: 'medium' },
}

Only the options matching the active provider are used by the model.

Type Reference

interface AgentLoopOptions {
  providerOptions?: Record<string, unknown>;
  // ...
}

interface AgentLoopState {
  providerOptions?: Record<string, unknown>;
  // ...
}

// In prepareStep:
interface PrepareStepResult {
  providerOptions?: Record<string, unknown>;
  // ...
}

See Also

On this page