Connecting to ChatGPT using API
    223 views (last 30 days)
  
       Show older comments
    
I tried connecting to Chat GPT with the following web instructions and get the error as reflected ...
prompt = 'What is the capital of France?';
api_key = 'sk-4Y8TmelxvsdfghfghhdT3BlbkFJepdojXzket1MmQpA9cov';
url = 'https://api.openai.com/v1/engines/davinci/completions';
options = weboptions('KeyName','Authorization','KeyValue',['Bearer ' api_key],'MediaType','application/json');
data = webwrite(url,'prompt',prompt,'max_tokens',2048,'model','text-davinci-003','stop','',options);
answer = loadjson(data);
answer = answer.choices{1}.text;
disp(answer)
Does anyone know how to connect MATLAB to Chat GPT to send prompts and retrieve back the responses. Also how to send data over to fine tune the model and then to further prompt that model?
It would be good for Mathworks to double quick release a toolbox on FileExchange for this as Python already has an OpenAI library. Seems like Mathworks is always one step behind Python these days.
Thx
4 Comments
  Wii Che
 on 19 Feb 2023
				% Extract the response text
response_text = response.Body.Data;
response_text = response_text.choices(1).text;
disp(response_text);
There is an error, is it a version problem
Accepted Answer
  Hans Scharler
    
 on 23 Jan 2023
        I have been researching the davinci/completions space and have working MATLAB code using net http. Get your API Key at OpenAPI: https://beta.openai.com/account/api-keys
import matlab.net.*
import matlab.net.http.*
% Define the API endpoint Davinci
api_endpoint = "https://api.openai.com/v1/engines/davinci/completions";
% Define the API key from https://beta.openai.com/account/api-keys
api_key = "XXXYYYZZZ";
% Define the parameters for the API request
prompt = "How many tablespoons are in 2 cups?"
parameters = struct('prompt',prompt, 'max_tokens',100);
% Define the headers for the API request
headers = matlab.net.http.HeaderField('Content-Type', 'application/json');
headers(2) = matlab.net.http.HeaderField('Authorization', ['Bearer ' + api_key]);
% Define the request message
request = matlab.net.http.RequestMessage('post',headers,parameters);
% Send the request and store the response
response = send(request, URI(api_endpoint));
% Extract the response text
response_text = response.Body.Data;
response_text = response_text.choices(1).text;
disp(response_text);
9 Comments
  Georgi Nalbantov
 on 18 Jun 2023
				Sometimes one gets a "10 sec" timeout error and therefore no response. One fix for this is:
% Send the request and store the response.
opt = 2;
if opt == 1 % org
    response = send(request, URI(api_endpoint));
else
    options = HTTPOptions;
    options.ConnectTimeout = 60;
    response = send(request, URI(api_endpoint),options);
end 
The original value is: options.ConnectTimeout = 10;
  O.Hubert
      
 on 25 Apr 2024
				I have tried to provided code in MATLAB R2017a but it returns an error:
Error using matlab.net.http.field.AuthorizationField/scalarToString (line 119)
The "xxx" value in an AuthInfo is an encoded username/password that can only appear for the "Basic" Scheme, and it must be the only other property. 
The xxx stand for the API key that I have hidden for obvious reasons.
How do I set a Scheme so that I can create the HeaderField?
Thank you.
More Answers (3)
  Duncan Carlsmith
      
 on 23 Feb 2023
        See Generate MATLAB code using ChatGPT API at  https://www.mathworks.com/matlabcentral/fileexchange/125220-generate-matlab-code-using-chatgpt-api for a Live Script that implements the great answers here. Thank you all so much!
You get different code for the same prompt each time. For the prompt used, there is often a minor bug. Great for teaching debugging skills. ;) I'll let you find the bugs in the example I provided.
2 Comments
  Hans Scharler
    
 on 27 Sep 2023
        % Define the prompt
prompt = "What is the capital of France?";
% Define the API endpoint
api_endpoint = 'https://api.openai.com/v1/chat/completions';
% Define the API key from https://platform.openai.com/account/api-keys
api_key = "sk-XXXYYYZZZ";
% Define the headers
headers = ["Content-Type", "application/json"; "Authorization", "Bearer " + api_key];
% Define the data
message = containers.Map({'role', 'content'}, {'user', prompt});
data = containers.Map({'model', 'messages'}, {'gpt-3.5-turbo', {message}});
% Convert the data to JSON
data = jsonencode(data);
% Send the POST request
options = weboptions('RequestMethod', 'post', 'HeaderFields', headers);
response = webwrite(api_endpoint, data, options);
% Return the response
response = response.choices.message.content;
disp(prompt)
disp(response)
1 Comment
  thijs buuron
 on 20 Jan 2023
        If you have the curl command (get it from the network part of the console of you webbrowser). You could use: https://curlconverter.com/matlab/ wich converts it to matlab code for you. 
2 Comments
  Gregorio Ariel Guerrero Moral
 on 6 Apr 2023
				
      Edited: Gregorio Ariel Guerrero Moral
 on 6 Apr 2023
  
			works very well the two options
%% Option1: https://curlconverter.com/matlab/
uri = 'https://api.openai.com/v1/chat/completions';
body = struct(...
    'model', 'gpt-3.5-turbo',...
    'messages', {{
        struct(...
            'role', 'user',...
            'content', 'What is the capital of France?'...
        )
    }}...
);
options = weboptions(...
    'MediaType', 'application/json',...
    'HeaderFields', {'Authorization' ['Bearer ' getenv('OPENAI_API_KEY')]}...
);
response = webwrite(uri, body, options);
disp(response.choices.message.content)
And the second options
%% Option 2: HTTP Interface https://curlconverter.com/matlab/
import matlab.net.*
import matlab.net.http.*
import matlab.net.http.io.*
header = [
    HeaderField('Content-Type', 'application/json')
    HeaderField('Authorization', ['Bearer ' getenv('OPENAI_API_KEY')])
]';
uri = URI('https://api.openai.com/v1/chat/completions');
body = JSONProvider(struct(...
    'model', 'gpt-3.5-turbo',...
    'messages', {{
        struct(...
            'role', 'user',...
            'content', 'What is the capital of France?'...
        )
    }}...
));
response = RequestMessage('post', header, body).send(uri.EncodedURI);
disp(response.choices.message.content)
Remember to setup in you OS the variable OPENAI_API_KEY.
The result of this chat is:

See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



 
      







