> ISPO SDK documentation. [HTML](https://ispo.ai/docs/interfaces/core.AiApi.html) · [Documentation index](https://ispo.ai/docs/llms.txt)

# Interface AiApi

```typescript
interface AiApi {
    complete(
        input: AiRequest,
    ): Promise<
        {
            finishReason: "length"
            | "stop";
            text: string;
            tier: "local";
            turnId: string;
            usage: {
                decodeTokensPerSecond?: number;
                elapsedMs?: number;
                inputTokens?: number;
                outputTokens?: number;
                ttftMs?: number;
            };
        },
    >;
    stream(input: AiRequest): AiStream;
}
```

Types: [complete](#complete-1), [AiRequest](core.AiRequest.md), [stream](#stream-1), [AiStream](core.AiStream.md)

##### Index

### <a id="methods"></a>Methods

[complete](#complete) [stream](#stream)

## <a id="methods-1"></a>Methods

### <a id="complete"></a>complete

*   <a id="complete-1"></a>
    
    ```typescript
    complete(
        input: AiRequest,
    ): Promise<
        {
            finishReason: "length"
            | "stop";
            text: string;
            tier: "local";
            turnId: string;
            usage: {
                decodeTokensPerSecond?: number;
                elapsedMs?: number;
                inputTokens?: number;
                outputTokens?: number;
                ttftMs?: number;
            };
        },
    >
    ```
    
    Types: [AiRequest](core.AiRequest.md)
    
    #### Parameters
    
    *   input: [AiRequest](core.AiRequest.md)
    
    #### Returns Promise<  
        {  
            finishReason: "length"  
            | "stop";  
            text: string;  
            tier: "local";  
            turnId: string;  
            usage: {  
                decodeTokensPerSecond?: number;  
                elapsedMs?: number;  
                inputTokens?: number;  
                outputTokens?: number;  
                ttftMs?: number;  
            };  
        },  
    \>
    

**Authority for `ai.complete`**

Reviewed request token: `ai.local`. Standing capability: `ai.local`.

Handle structured `ProjectRpcError` failures. A timeout does not guarantee cancellation; do not automatically retry effects without a documented idempotency contract. [Method authority and recovery](/docs/documents/Method_authority.md).

### <a id="stream"></a>stream

*   <a id="stream-1"></a>
    
    ```typescript
    stream(input: AiRequest): AiStream
    ```
    
    Types: [AiRequest](core.AiRequest.md), [AiStream](core.AiStream.md)
    
    #### Parameters
    
    *   input: [AiRequest](core.AiRequest.md)
    
    #### Returns [AiStream](core.AiStream.md)
    

**Authority for `ai.stream`**

Reviewed request token: `ai.local`. Authority depends on the arguments, resource, and caller; check the live capability surface.

Handle structured `ProjectRpcError` failures. A timeout does not guarantee cancellation; do not automatically retry effects without a documented idempotency contract. [Method authority and recovery](/docs/documents/Method_authority.md).
