diff --git a/src/init.luau b/src/init.luau index 91c573b..3b4735e 100644 --- a/src/init.luau +++ b/src/init.luau @@ -197,19 +197,32 @@ export type LanguageModel = { version: string } -export type LangaugeModelsResponse = { +export type LanguageModelsResponse = { models: { LanguageModel } } +type ApiResponse = { + success: boolean +} + +export type SuccessfulApiResponse = ApiResponse & { + response: CompletionsResponse | ModelsResponse | LanguageModelsResponse +} + +export type FailedApiResponse = ApiResponse & { + status: number, + message: string +} + local xai = {} local baseUrl = "https://api.x.ai/v1" function xai.create(api_key: string) local client = {} - function client:completions(request: CompletionsRequest): CompletionsResponse + function client:completions(request: CompletionsRequest): SuccessfulApiResponse | FailedApiResponse local config = { url = `{baseUrl}/completions`, method = "POST", @@ -222,13 +235,13 @@ function xai.create(api_key: string) local response = net.request(config) if response.ok then local decoded: CompletionsResponse = serde.decode("json", response.body) - return decoded + return { success = true, response = decoded } :: SuccessfulApiResponse else - error(`API request failed with status {response.statusCode}: {response.statusMessage}`) + return { success = false, status = response.status, message = response.body } :: FailedApiResponse end end - function client:models(): ModelsResponse + function client:models(): SuccessfulApiResponse | FailedApiResponse local config = { url = `{baseUrl}/models`, method = "GET", @@ -239,13 +252,13 @@ function xai.create(api_key: string) local response = net.request(config) if response.ok then local decoded: ModelsResponse = serde.decode("json", response.body) - return decoded + return { success = true, response = decoded } :: SuccessfulApiResponse else - error(`API request failed with status {response.statusCode}: {response.statusMessage}`) + return { success = false, status = response.status, message = response.body } :: FailedApiResponse end end - function client:language_models(): LangaugeModelsResponse + function client:language_models(): SuccessfulApiResponse | FailedApiResponse local config = { url = `{baseUrl}/language-models`, method = "GET", @@ -255,17 +268,17 @@ function xai.create(api_key: string) } local response = net.request(config) if response.ok then - local decoded: LangaugeModelsResponse = serde.decode("json", response.body) - return decoded + local decoded: LanguageModelsResponse = serde.decode("json", response.body) + return { success = true, response = decoded } :: SuccessfulApiResponse else - error(`API request failed with status {response.statusCode}: {response.statusMessage}`) + return { success = false, status = response.status, message = response.body } :: FailedApiResponse end end return client end -function xai.completions(api_key: string, request: CompletionsRequest): CompletionsResponse +function xai.completions(api_key: string, request: CompletionsRequest): ApiResponse return xai.create(api_key):completions(request) end