Exception hierarchy
KiteFishAIError
├── AuthenticationError # 401 — invalid or missing API key
├── RateLimitError # 429 — too many requests
├── NotFoundError # 404 — model or resource not found
└── APIError # any other non-2xx response
Basic pattern
import kitefishai
client = kitefishai.Client(api_key="kf-...")
try:
response = client.chat.complete(
model="kf-reasoning-10b",
messages=[{"role": "user", "content": "Hello"}],
)
except kitefishai.AuthenticationError:
print("Invalid API key — check KITEFISH_API_KEY")
except kitefishai.RateLimitError:
print("Rate limit hit — back off and retry")
except kitefishai.NotFoundError as e:
print(f"Model not found: {e}")
except kitefishai.APIError as e:
print(f"API error {e.status_code}: {e.message}")
except kitefishai.KiteFishAIError as e:
print(f"SDK error: {e}")
Timeouts
The default timeout is 60 seconds. Increase it for long completions:
client = kitefishai.Client(
api_key="kf-...",
timeout=120.0,
)
If a request times out, a KiteFishAIError is raised with a descriptive message.
Retries
The SDK automatically retries on timeout and network errors. Default is 2 retries:
client = kitefishai.Client(
api_key="kf-...",
max_retries=3,
)
To disable retries:
client = kitefishai.Client(api_key="kf-...", max_retries=0)
Retries are only attempted on network-level failures and timeouts — not on API errors like 401 or 429.