forked from tmssoftware/DelphiChatGPT
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathUChatGPT.pas
106 lines (89 loc) · 2.66 KB
/
UChatGPT.pas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
unit UChatGPT;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
{$I APIKEY.INC}
implementation
{$R *.dfm}
uses
System.JSON,
REST.Client,
REST.Types
;
function AskChatGPT(AQuestion: string): string;
var
LClient : TRESTClient;
LRequest : TRESTRequest;
LResponse : TRESTResponse;
LJsonPostData : TJSONObject;
LJsonValue: TJsonValue;
LJsonArray: TJsonArray;
LJSonString: TJsonString;
begin
Result := '';
LJsonPostData := nil;
LClient := nil;
LRequest := nil;
LResponse := nil;
try
LJsonPostData := TJSONObject.Create;
LJsonPostData.AddPair('model', 'text-davinci-003');
LJsonPostData.AddPair('prompt', AQuestion);
LJsonPostData.AddPair('max_tokens', TJSONNumber.Create(2048));
LJsonPostData.AddPair('temperature', TJSONNumber.Create(0));
LClient := TRESTClient.Create(nil);
LRequest := TRESTRequest.Create(nil);
LResponse := TRESTResponse.Create(nil);
LRequest.Client := LClient;
LRequest.Response := LResponse;
// Use JSON for the REST API calls and set API KEY via Authorization header
LRequest.AddAuthParameter('Authorization', 'Bearer ' + CHATGPT_APIKEY, TRESTRequestParameterKind.pkHTTPHEADER, [poDoNotEncode]);
LRequest.Accept := '*/*';
// Select HTTPS POST method, set POST data and specify endpoint URL
LRequest.Method := rmPOST;
LRequest.AddBody(LJsonPostData);
LClient.BaseURL := 'https://api.openai.com';
LRequest.Resource := 'v1/completions';
// Execute the HTTPS POST request synchronously (last param Async = false)
LRequest.Execute;
// Process returned JSON when request was successful
if LRequest.Response.StatusCode = 200 then
begin
LJsonValue := LResponse.JSONValue;
LJsonValue := LJsonValue.GetValue<TJSonValue>('choices');
if LJsonValue is TJSonArray then
begin
LJSonArray := LJsonValue as TJSonArray;
LJSonString := LJSonArray.Items[0].GetValue<TJSONString>('text');
Result := LJSonString.Value;
end
else
end
else
raise Exception.Create('HTTP response code: ' + LResponse.StatusCode.ToString);
finally
FreeAndNil(LResponse);
FreeAndNil(LRequest);
FreeAndNil(LClient);
FreeAndNil(LJsonPostData);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.Text := AskChatGPT(Edit1.Text);
end;
end.