Skip to content

agents / Exports / AbstractAIProvider

Class: AbstractAIProvider<TConfig>

Base AI provider implementation with proper type constraints All AI providers should extend this class

======================================== CRITICAL IMPLEMENTATION GUIDELINES

ALL AI PROVIDER IMPLEMENTATIONS (OpenAI, Anthropic, Google, etc.) MUST:

  1. EXTEND THIS CLASS:

    typescript
    export class OpenAIProvider extends AbstractAIProvider {
        override readonly name = 'openai';
        override readonly version = '1.0.0';
  2. USE IMPORTS FROM @robota-sdk/agent-core:

    typescript
    import { AbstractAIProvider } from '@robota-sdk/agent-core';
    import type {
      TUniversalMessage,
      ChatOptions,
      IToolCall,
      ToolSchema,
      AssistantMessage,
    } from '@robota-sdk/agent-core';
  3. USE OVERRIDE KEYWORD FOR ALL INHERITED METHODS:

    • override async chat(...)
    • override async *chatStream(...)
    • override supportsTools()
    • override validateConfig()
    • override async dispose()
  4. DO NOT REDEFINE TYPES THAT EXIST IN @robota-sdk/agent-core:

    • TUniversalMessage
    • ChatOptions
    • IToolCall
    • ToolSchema
    • AssistantMessage
    • SystemMessage
    • UserMessage
    • ToolMessage
  5. HANDLE MESSAGE CONTENT PROPERLY:

    • For tool calls: content should be null (not empty string)
    • For regular messages: content can be string or null
    • Always preserve null values from API responses
  6. CALL SUPER() IN CONSTRUCTOR:

    typescript
    constructor(options: IProviderOptions) {
        super();
        // provider-specific initialization
    }

This ensures ExecutionService can properly identify providers and prevents type conflicts across the codebase.

========================================

Template

Message type (defaults to TUniversalMessage for backward compatibility)

Template

Response type (defaults to TUniversalMessage for backward compatibility)

Type parameters

NameTypeDescription
TConfigProviderConfigProvider configuration type (defaults to ProviderConfig for type safety)

Implements

Table of contents

Constructors

Properties

Methods

Constructors

constructor

new AbstractAIProvider<TConfig>(logger?): AbstractAIProvider<TConfig>

Type parameters

NameType
TConfigProviderConfig

Parameters

NameTypeDefault value
loggerAbstractLoggerDEFAULT_ABSTRACT_LOGGER

Returns

AbstractAIProvider<TConfig>

Defined in

packages/agents/src/abstracts/abstract-ai-provider.ts:145

Properties

name

Readonly Abstract name: string

Implementation of

TypeSafeAIProvider.name

Defined in

packages/agents/src/abstracts/abstract-ai-provider.ts:139


version

Readonly Abstract version: string

Implementation of

TypeSafeAIProvider.version

Defined in

packages/agents/src/abstracts/abstract-ai-provider.ts:140

Methods

configure

configure(config): Promise<void>

Configure the provider with type-safe configuration

Parameters

NameType
configTConfig

Returns

Promise<void>

Implementation of

TypeSafeAIProvider.configure

Defined in

packages/agents/src/abstracts/abstract-ai-provider.ts:152


chat

chat(messages, options?): Promise<TUniversalMessage>

Each provider must implement chat using their own native SDK types internally

Parameters

NameTypeDescription
messagesTUniversalMessage[]Array of messages from conversation history
options?IChatOptionsChat options including tools, model settings, etc.

Returns

Promise<TUniversalMessage>

Promise resolving to a response

Implementation of

TypeSafeAIProvider.chat

Defined in

packages/agents/src/abstracts/abstract-ai-provider.ts:171


chatStream

chatStream(messages, options?): AsyncIterable<TUniversalMessage, any, any>

Each provider must implement streaming chat using their own native SDK types internally

Parameters

NameTypeDescription
messagesTUniversalMessage[]Array of messages from conversation history
options?IChatOptionsChat options including tools, model settings, etc.

Returns

AsyncIterable<TUniversalMessage, any, any>

AsyncIterable of response chunks

Implementation of

TypeSafeAIProvider.chatStream

Defined in

packages/agents/src/abstracts/abstract-ai-provider.ts:179


generateResponse

generateResponse(payload): Promise<IRawProviderResponse>

Provider-agnostic raw response API.

This is the canonical "raw payload" entrypoint required by the AIProvider contract. The default implementation delegates to chat() and adapts the result into a RawProviderResponse shape.

Parameters

NameType
payloadIProviderRequest

Returns

Promise<IRawProviderResponse>

Implementation of

TypeSafeAIProvider.generateResponse

Defined in

packages/agents/src/abstracts/abstract-ai-provider.ts:188


generateStreamingResponse

generateStreamingResponse(payload): AsyncIterable<IRawProviderResponse, any, any>

Provider-agnostic raw streaming API.

If a provider does not implement chatStream, it does not support streaming.

Parameters

NameType
payloadIProviderRequest

Returns

AsyncIterable<IRawProviderResponse, any, any>

Implementation of

TypeSafeAIProvider.generateStreamingResponse

Defined in

packages/agents/src/abstracts/abstract-ai-provider.ts:209


supportsTools

supportsTools(): boolean

Default implementation - most modern providers support tools

Returns

boolean

true if tool calling is supported

Implementation of

TypeSafeAIProvider.supportsTools

Defined in

packages/agents/src/abstracts/abstract-ai-provider.ts:233


validateConfig

validateConfig(): boolean

Default implementation - providers can override for specific validation

Returns

boolean

true if configuration is valid

Implementation of

TypeSafeAIProvider.validateConfig

Defined in

packages/agents/src/abstracts/abstract-ai-provider.ts:241


dispose

dispose(): Promise<void>

Clean up resources when provider is no longer needed Override this method in subclasses for additional cleanup

Returns

Promise<void>

Implementation of

TypeSafeAIProvider.dispose

Defined in

packages/agents/src/abstracts/abstract-ai-provider.ts:363

Released under the MIT License.