Error Handling & Retry Strategies

ModelMart returns standard OpenAI-compatible error objects:

{
  "error": {
    "type": "invalid_request_error",
    "code": "balance_too_low",
    "message": "Insufficient account balance to reserve request."
  }
}

1. HTTP Status & Error Codes

StatusCodeCauseResolution
400invalid_requestMalformed JSON or invalid parameter.Validate schema and messages array.
401invalid_api_keyMissing or invalid API key.Check MODELMART_API_KEY in environment.
402balance_too_lowAccount balance exhausted.Top up balance via Dashboard.
404model_not_foundInvalid model ID.Check model ID in catalog.
413request_too_largeToken limit exceeded.Shorten prompt or history.
429rate_limit_exceededRPM/TPM limit hit.Implement exponential backoff retry.
502upstream_errorUpstream provider error.Automatic retry handled by router.
504upstream_timeoutRequest processing timeout.Reduce max_tokens.

2. Exponential Backoff Pattern (Python)

import time
import random
from openai import OpenAI, RateLimitError, APIConnectionError, InternalServerError

client = OpenAI(
    api_key="mm_live_xxxxxxxxxxxx",
    base_url="https://api.modelmart.io.vn/v1"
)

def safe_completion(messages, model="claude-sonnet-5", retries=3):
    for i in range(retries):
        try:
            return client.chat.completions.create(model=model, messages=messages)
        except (RateLimitError, APIConnectionError, InternalServerError) as e:
            if i == retries - 1:
                raise e
            wait = (1.0 * (2 ** i)) + random.uniform(0, 0.5)
            time.sleep(wait)