I am trying to POST a question to openAI API via SWIFT. It works fine, if I use the same payload via Postman, but in the Xcode-Condole I got the following response from openAI:
Response data string:
{
"error": {
"message": "you must provide a model parameter",
"type": "invalid_request_error",
"param": null,
"code": null
}
}
This is my code:
func getActivityAnalysis(){
let url = URL(string: "https://api.openai.com/v1/completions")
guard let requestUrl = url else { fatalError() }
// Prepare URL Request Object
var request = URLRequest(url: requestUrl)
request.setValue("Bearer blaaaablaa", forHTTPHeaderField: "Authorization")
request.httpMethod = "POST"
let prompt = "just a test"
let requestBody = OpenAIRequest(model: "text-davinci-003", prompt: prompt, max_tokens: 300, temperature: 0.5)
let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted
let data = try! encoder.encode(requestBody)
print(String(data: data, encoding: .utf8)!)
// Set HTTP Request Body
request.httpBody = data
print("\(request.httpMethod!) \(request.url!)")
print(request.allHTTPHeaderFields!)
print(String(data: request.httpBody ?? Data(), encoding: .utf8)!)
// Perform HTTP Request
let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
// Check for Error
if let error = error {
print("Error took place \(error)")
return
}
// Convert HTTP Response Data to a String
if let data = data, let dataString = String(data: data, encoding: .utf8) {
print("Response data string:\n \(dataString)")
self.openAIResponse = dataString
}
}
task.resume()
}`
If I print the http request, it seems fine for me as well:
POST https://api.openai.com/v1/completions
["Authorization": "Bearer blaaaaa"]
{
"temperature" : 0.5,
"model" : "text-davinci-003",
"prompt" : "just a test",
"max_tokens" : 300
}
I tried to use the same payload in my Postman request. It worked fine here. I also tried to use different encodings, but it always throws the same error.
Not sure, what I am doing wrong. Maybe someone can help?
Thank you in advance.
Bets, Tobi