Zig
Zig
OpenAI (ChatGPT) List Models
See more OpenAI ChatGPT Examples
Show how to list available OpenAI models and shows how to parse the JSON model information.Chilkat Zig Downloads
const std = @import("std");
const chilkat = @import("chilkat");
pub fn main(init: std.process.Init) !void {
const alloc = init.arena.allocator();
// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
const http = try chilkat.Http.init();
defer http.deinit();
// Implements the following CURL command:
// curl https://api.openai.com/v1/models \
// -H "Authorization: Bearer $OPENAI_API_KEY"
// Use the following online tool to generate HTTP code from a CURL command
// Convert a cURL Command to HTTP Source Code
// Adds the "Authorization: Bearer $OPENAI_API_KEY" header.
// This is NOT a real key. Change the "sk-vi...." to your own key.
http.setAuthToken("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");
const sb_response_body = try chilkat.StringBuilder.init();
defer sb_response_body.deinit();
http.quickGetSb("https://api.openai.com/v1/models", sb_response_body) catch {
std.debug.print("{s}\n", .{try http.getLastErrorText(alloc)});
return;
};
const j_resp = try chilkat.JsonObject.init();
defer j_resp.deinit();
j_resp.loadSb(sb_response_body) catch {};
j_resp.setEmitCompact(false);
std.debug.print("Response Body:\n", .{});
std.debug.print("{s}\n", .{try j_resp.emit(alloc)});
const resp_status_code = http.getLastStatus();
std.debug.print("Response Status Code = {d}\n", .{resp_status_code});
if (resp_status_code >= 400) {
std.debug.print("Response Header:\n", .{});
std.debug.print("{s}\n", .{try http.getLastHeader(alloc)});
std.debug.print("Failed.\n", .{});
return;
}
// Sample JSON response:
// (Sample code for parsing the JSON response is shown below)
// {
// "object": "list",
// "data": [
// {
// "id": "babbage",
// "object": "model",
// "created": 1649358449,
// "owned_by": "openai",
// "permission": [
// {
// "id": "modelperm-49FUp5v084tBB49tC4z8LPH5",
// "object": "model_permission",
// "created": 1669085501,
// "allow_create_engine": false,
// "allow_sampling": true,
// "allow_logprobs": true,
// "allow_search_indices": false,
// "allow_view": true,
// "allow_fine_tuning": false,
// "organization": "*",
// "group": null,
// "is_blocking": false
// }
// ],
// "root": "babbage",
// "parent": null
// },
// {
// "id": "davinci",
// "object": "model",
// "created": 1649359874,
// "owned_by": "openai",
// "permission": [
// {
// "id": "modelperm-U6ZwlyAd0LyMk4rcMdz33Yc3",
// "object": "model_permission",
// "created": 1669066355,
// "allow_create_engine": false,
// "allow_sampling": true,
// "allow_logprobs": true,
// "allow_search_indices": false,
// "allow_view": true,
// "allow_fine_tuning": false,
// "organization": "*",
// "group": null,
// "is_blocking": false
// }
// ],
// "root": "davinci",
// "parent": null
// },
// ...
// ...
// Sample code for parsing the JSON response...
// Use the following online tool to generate parsing code from sample JSON:
// Generate Parsing Code from JSON
var id: [:0]const u8 = "";
var created: i32 = 0;
var owned_by: [:0]const u8 = "";
var root: [:0]const u8 = "";
var parent: [:0]const u8 = "";
var j: i32 = 0;
var count_j: i32 = 0;
var allow_create_engine: bool = false;
var allow_sampling: bool = false;
var allow_logprobs: bool = false;
var allow_search_indices: bool = false;
var allow_view: bool = false;
var allow_fine_tuning: bool = false;
var organization: [:0]const u8 = "";
var group: [:0]const u8 = "";
var is_blocking: bool = false;
var v_object: [:0]const u8 = try j_resp.stringOf(alloc, "object");
var i: i32 = 0;
const count_i = j_resp.sizeOfArray("data");
while (i < count_i) {
j_resp.setI(i);
id = try j_resp.stringOf(alloc, "data[i].id");
v_object = try j_resp.stringOf(alloc, "data[i].object");
created = j_resp.intOf("data[i].created");
owned_by = try j_resp.stringOf(alloc, "data[i].owned_by");
root = try j_resp.stringOf(alloc, "data[i].root");
parent = try j_resp.stringOf(alloc, "data[i].parent");
j = 0;
count_j = j_resp.sizeOfArray("data[i].permission");
while (j < count_j) {
j_resp.setJ(j);
id = try j_resp.stringOf(alloc, "data[i].permission[j].id");
v_object = try j_resp.stringOf(alloc, "data[i].permission[j].object");
created = j_resp.intOf("data[i].permission[j].created");
allow_create_engine = j_resp.boolOf("data[i].permission[j].allow_create_engine");
allow_sampling = j_resp.boolOf("data[i].permission[j].allow_sampling");
allow_logprobs = j_resp.boolOf("data[i].permission[j].allow_logprobs");
allow_search_indices = j_resp.boolOf("data[i].permission[j].allow_search_indices");
allow_view = j_resp.boolOf("data[i].permission[j].allow_view");
allow_fine_tuning = j_resp.boolOf("data[i].permission[j].allow_fine_tuning");
organization = try j_resp.stringOf(alloc, "data[i].permission[j].organization");
group = try j_resp.stringOf(alloc, "data[i].permission[j].group");
is_blocking = j_resp.boolOf("data[i].permission[j].is_blocking");
j = j + 1;
}
i = i + 1;
}
}