Skip to content

Commit a038630

Browse files
committed
adding new models.
1 parent 7e789c3 commit a038630

File tree

3 files changed

+40
-10
lines changed

3 files changed

+40
-10
lines changed

extractOpenAIEmbeddings.m

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,21 @@
1414
%
1515
% 'TimeOut' - Connection Timeout in seconds (default: 10 secs)
1616
%
17+
% 'Dimensions' - Number of dimensions the resulting output
18+
% embeddings should have.
19+
%
1720
% [emb, response] = EXTRACTOPENAIEMBEDDINGS(...) also returns the full
1821
% response from the OpenAI API call.
1922
%
2023
% Copyright 2023 The MathWorks, Inc.
2124

2225
arguments
23-
text (1,:) {mustBeText}
24-
nvp.ModelName (1,1) {mustBeMember(nvp.ModelName,"text-embedding-ada-002")} = "text-embedding-ada-002"
25-
nvp.TimeOut (1,1) {mustBeReal,mustBePositive} = 10
26-
nvp.ApiKey {llms.utils.mustBeNonzeroLengthTextScalar}
26+
text (1,:) {mustBeText}
27+
nvp.ModelName (1,1) {mustBeMember(nvp.ModelName,["text-embedding-ada-002", ...
28+
"text-embedding-3-large", "text-embedding-3-small"])} = "text-embedding-ada-002"
29+
nvp.TimeOut (1,1) {mustBeReal,mustBePositive} = 10
30+
nvp.Dimensions (1,1) {mustBeInteger}
31+
nvp.ApiKey {llms.utils.mustBeNonzeroLengthTextScalar}
2732
end
2833

2934
END_POINT = "https://api.openai.com/v1/embeddings";
@@ -32,6 +37,15 @@
3237

3338
parameters = struct("input",text,"model",nvp.ModelName);
3439

40+
if isfield(nvp, "Dimensions")
41+
if nvp.ModelName=="text-embedding-ada-002"
42+
error("llms:invalidOptionForModel", ...
43+
llms.utils.errorMessageCatalog.getMessage("llms:invalidOptionForModel", "Dimensions", nvp.ModelName));
44+
end
45+
parameters.dimensions = nvp.Dimensions;
46+
end
47+
48+
3549
response = llms.internal.sendRequest(parameters,key, END_POINT, nvp.TimeOut);
3650

3751
if isfield(response.Body.Data, "data")

openAIChat.m

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@
117117
nvp.ModelName (1,1) {mustBeMember(nvp.ModelName,["gpt-4", "gpt-4-0613", "gpt-4-32k", ...
118118
"gpt-3.5-turbo", "gpt-3.5-turbo-16k",...
119119
"gpt-4-1106-preview","gpt-3.5-turbo-1106", ...
120-
"gpt-4-vision-preview"])} = "gpt-3.5-turbo"
120+
"gpt-4-vision-preview", "gpt-4-turbo-preview"])} = "gpt-3.5-turbo"
121121
nvp.Temperature {mustBeValidTemperature} = 1
122122
nvp.TopProbabilityMass {mustBeValidTopP} = 1
123123
nvp.StopSequences {mustBeValidStop} = {}
@@ -132,7 +132,7 @@
132132
if isfield(nvp,"StreamFun")
133133
this.StreamFun = nvp.StreamFun;
134134
if strcmp(nvp.ModelName,'gpt-4-vision-preview')
135-
error("llms:invalidOptionAndValueForModel", ...
135+
error("llms:invalidOptionForModel", ...
136136
llms.utils.errorMessageCatalog.getMessage("llms:invalidOptionForModel", "StreamFun", nvp.ModelName));
137137
end
138138
else
@@ -147,7 +147,7 @@
147147
this.Tools = nvp.Tools;
148148
[this.FunctionsStruct, this.FunctionNames] = functionAsStruct(nvp.Tools);
149149
if strcmp(nvp.ModelName,'gpt-4-vision-preview')
150-
error("llms:invalidOptionAndValueForModel", ...
150+
error("llms:invalidOptionForModel", ...
151151
llms.utils.errorMessageCatalog.getMessage("llms:invalidOptionForModel", "Tools", nvp.ModelName));
152152
end
153153
end
@@ -164,7 +164,7 @@
164164
this.TopProbabilityMass = nvp.TopProbabilityMass;
165165
this.StopSequences = nvp.StopSequences;
166166
if ~isempty(nvp.StopSequences) && strcmp(nvp.ModelName,'gpt-4-vision-preview')
167-
error("llms:invalidOptionAndValueForModel", ...
167+
error("llms:invalidOptionForModel", ...
168168
llms.utils.errorMessageCatalog.getMessage("llms:invalidOptionForModel", "StopSequences", nvp.ModelName));
169169
end
170170

@@ -222,13 +222,13 @@
222222
end
223223

224224
if nvp.MaxNumTokens ~= Inf && strcmp(this.ModelName,'gpt-4-vision-preview')
225-
error("llms:invalidOptionAndValueForModel", ...
225+
error("llms:invalidOptionForModel", ...
226226
llms.utils.errorMessageCatalog.getMessage("llms:invalidOptionForModel", "MaxNumTokens", this.ModelName));
227227
end
228228

229229
toolChoice = convertToolChoice(this, nvp.ToolChoice);
230230
if ~isempty(nvp.ToolChoice) && strcmp(this.ModelName,'gpt-4-vision-preview')
231-
error("llms:invalidOptionAndValueForModel", ...
231+
error("llms:invalidOptionForModel", ...
232232
llms.utils.errorMessageCatalog.getMessage("llms:invalidOptionForModel", "ToolChoice", this.ModelName));
233233
end
234234

tests/textractOpenAIEmbeddings.m

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,14 @@ function keyNotFound(testCase)
3131
testCase.verifyError(@()extractOpenAIEmbeddings("bla"), "llms:keyMustBeSpecified");
3232
end
3333

34+
function invalidCombinationOfModelAndDimension(testCase)
35+
testCase.verifyError(@()extractOpenAIEmbeddings("bla", ...
36+
Dimensions=10,...
37+
ModelName="text-embedding-ada-002", ...
38+
ApiKey="not-real"), ...
39+
"llms:invalidOptionForModel")
40+
end
41+
3442
function useAllNVP(testCase)
3543
testCase.verifyWarningFree(@()extractOpenAIEmbeddings("bla", ModelName="text-embedding-ada-002", ...
3644
ApiKey="this-is-not-a-real-key", TimeOut=10));
@@ -72,6 +80,14 @@ function testInvalidInputs(testCase, InvalidInput)
7280
"Input",{{"bla", "ModelName", "gpt" }},...
7381
"Error","MATLAB:validators:mustBeMember"),...
7482
...
83+
"InvalidDimensionType",struct( ...
84+
"Input",{{"bla", "Dimensions", "123" }},...
85+
"Error","MATLAB:validators:mustBeNumericOrLogical"),...
86+
...
87+
"InvalidDimensionSize",struct( ...
88+
"Input",{{"bla", "Dimensions", [123, 123] }},...
89+
"Error","MATLAB:validation:IncompatibleSize"),...
90+
...
7591
"InvalidApiKeyType",struct( ...
7692
"Input",{{"bla", "ApiKey" 123 }},...
7793
"Error","MATLAB:validators:mustBeNonzeroLengthText"),...

0 commit comments

Comments
 (0)