Sample code for 30+ languages & platforms
Pascal (Lazarus/Delphi)

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 Pascal (Lazarus/Delphi) Downloads

Pascal (Lazarus/Delphi)
program ChilkatDemo;

// Demonstrates using the Chilkat Pascal wrapper via the C bridge DLL.
// Builds as a console application under Lazarus (FPC) or Delphi.

{$IFDEF FPC}
  {$MODE DELPHI}
{$ENDIF}
{$APPTYPE CONSOLE}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  SysUtils,
  CkDllLoader,
  Chilkat.Http,
  Chilkat.StringBuilder,
  Chilkat.JsonObject;

// ---------------------------------------------------------------------------

procedure RunDemo;
var
  success: Boolean;
  http: THttp;
  sbResponseBody: TStringBuilder;
  jResp: TJsonObject;
  respStatusCode: Integer;
  id: string;
  created: Integer;
  owned_by: string;
  root: string;
  parent: string;
  j: Integer;
  count_j: Integer;
  allow_create_engine: Boolean;
  allow_sampling: Boolean;
  allow_logprobs: Boolean;
  allow_search_indices: Boolean;
  allow_view: Boolean;
  allow_fine_tuning: Boolean;
  organization: string;
  group: string;
  is_blocking: Boolean;
  v_object: string;
  i: Integer;
  count_i: Integer;

begin
  success := False;

  //  This example assumes the Chilkat API to have been previously unlocked.
  //  See Global Unlock Sample for sample code.

  http := THttp.Create;

  //  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.AuthToken := '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';

  sbResponseBody := TStringBuilder.Create;
  success := http.QuickGetSb('https://api.openai.com/v1/models',sbResponseBody);
  if (success = False) then
    begin
      WriteLn(http.LastErrorText);
      Exit;
    end;

  jResp := TJsonObject.Create;
  jResp.LoadSb(sbResponseBody);
  jResp.EmitCompact := False;

  WriteLn('Response Body:');
  WriteLn(jResp.Emit());

  respStatusCode := http.LastStatus;
  WriteLn('Response Status Code = ' + respStatusCode);
  if (respStatusCode >= 400) then
    begin
      WriteLn('Response Header:');
      WriteLn(http.LastHeader);
      WriteLn('Failed.');
      Exit;
    end;

  //  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

  v_object := jResp.StringOf('object');
  i := 0;
  count_i := jResp.SizeOfArray('data');
  while i < count_i do
    begin
      jResp.I := i;
      id := jResp.StringOf('data[i].id');
      v_object := jResp.StringOf('data[i].object');
      created := jResp.IntOf('data[i].created');
      owned_by := jResp.StringOf('data[i].owned_by');
      root := jResp.StringOf('data[i].root');
      parent := jResp.StringOf('data[i].parent');
      j := 0;
      count_j := jResp.SizeOfArray('data[i].permission');
      while j < count_j do
        begin
          jResp.J := j;
          id := jResp.StringOf('data[i].permission[j].id');
          v_object := jResp.StringOf('data[i].permission[j].object');
          created := jResp.IntOf('data[i].permission[j].created');
          allow_create_engine := jResp.BoolOf('data[i].permission[j].allow_create_engine');
          allow_sampling := jResp.BoolOf('data[i].permission[j].allow_sampling');
          allow_logprobs := jResp.BoolOf('data[i].permission[j].allow_logprobs');
          allow_search_indices := jResp.BoolOf('data[i].permission[j].allow_search_indices');
          allow_view := jResp.BoolOf('data[i].permission[j].allow_view');
          allow_fine_tuning := jResp.BoolOf('data[i].permission[j].allow_fine_tuning');
          organization := jResp.StringOf('data[i].permission[j].organization');
          group := jResp.StringOf('data[i].permission[j].group');
          is_blocking := jResp.BoolOf('data[i].permission[j].is_blocking');
          j := j + 1;
        end;

      i := i + 1;
    end;



  http.Free;
  sbResponseBody.Free;
  jResp.Free;

end;

// ---------------------------------------------------------------------------

begin

  try
    RunDemo;
  except
    on E: Exception do
      WriteLn('Unhandled exception: ', E.ClassName, ': ', E.Message);
  end;

  WriteLn;
  {$IFDEF MSWINDOWS}
  WriteLn('Press Enter to exit...');
  ReadLn;
  {$ENDIF}
end.