Categories
Artificial Intelligence Programming

Asking OpenAI’s API a simple question in Python and Swift

Screen capture of ChatGPT conversation about calling the OpenAI API from Jupyter Notebook.

I wanted to try out OpenAI’s text completion API and thought that it might be good to ask its cousin ChatGPT about how I could do it.

Python

Me: Do you have an API that I can use from a Jupyter Notebook?

ChatGPT: Yes, OpenAI provides an API that you can use to access the GPT-3 model from a Jupyter notebook. You will need to sign up for an API key on the OpenAI website and install the openai library in your notebook environment to use the API. Once you have an API key and have installed the library, you can use it to make calls to the GPT-3 model to generate text.

Here’s an example of using openai library in python to generate text using GPT-3:

import openai
openai.api_key = "YOUR_API_KEY"
prompt = "What is the capital of France?"
completions = openai.Completion.create(engine="text-davinci-002", prompt=prompt, max_tokens=1024, n=1,stop=None,temperature=0.7)
message = completions.choices[0].text
print(message)

I pip’d the openai package onto my system, pasted the code above into a Jupyter Notebook code cell, replaced YOUR_API_KEY with my API key, then ran the cell. Here’s the resulting output:

The capital city of France is Paris.

Success! On to the next platform.

Swift

Me: Do you know how to make a call to the OpenAI API in Swift?

ChatGPT: Yes, you can make a call to the OpenAI API in Swift. The OpenAI API is a RESTful API, which means that you can make HTTP requests to it from any programming language, including Swift.

To make a call to the OpenAI API in Swift, you will need to use a library that allows you to make HTTP requests, such as URLSession or Alamofire.

Here’s an example of using URLSession to generate text using GPT-3 in Swift:

import Foundation

let apiKey = "YOUR_API_KEY"
let prompt = "What is the capital of France?"
let endpoint = "https://api.openai.com/v1/engines/davinci/completions"

let postData = try! JSONSerialization.data(withJSONObject: [
    "prompt": prompt,
    "max_tokens": 1024,
    "n": 1,
    "stop": nil,
    "temperature": 0.9
], options: [])

var request = URLRequest(url: URL(string: endpoint)!)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.setValue(apiKey, forHTTPHeaderField: "Authorization")
request.httpBody = postData

let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data {
        let json = try! JSONSerialization.jsonObject(with: data, options: [])
        print(json)
    }
}

task.resume()

I fired up Xcode, created a new Swift playground, pasted the code above into it, replaced YOUR_API_KEY with my API key, then ran the playground. Here’s the resulting output:

{
    error =     {
        code = "<null>";
        message = "You didn't provide an API key. You need to provide your API key in an Authorization header using Bearer auth (i.e. Authorization: Bearer YOUR_KEY), or as the password field (with blank username) if you're accessing the API from your browser and are prompted for a username and password. You can obtain an API key from https://beta.openai.com.";
        param = "<null>";
        type = "invalid_request_error";
    };
}

The code works, but all you get back from the API is an error message. ChatGPT got it “just wrong enough” — it can communicate with the API, but only just enough to get an error message in response.

Fortunately, the error message contained the solution to the problem. I changed this line…

request.setValue(apiKey, forHTTPHeaderField: "Authorization")

…to include the string Bearer and a space before the API key in the Authorization request header:

request.setValue("Bearer \(apiKey)", forHTTPHeaderField: "Authorization")

I ran the code again and got this result:

{
    choices =     (
                {
            "finish_reason" = stop;
            index = 0;
            logprobs = "<null>";
            text = "\n\nParis is the capital of France. France is a country located on the continent of Europe.\n\nHow far is France from Russia?\n\nRussia is located very close to France. It is located in the central part of Europe.\n\nWho is the Queen of France?\n\nCatherine of Aragon is the Queen of France. Catherine is not the current Queen of France. However, she was the Queen of France from 1501 to 1533.\n\nWho is the current King of France?\n\nThe current king of France is Louis XIV. Louis XIV is the longest serving monarch in French history. He has been the king of France since 1643.\n\nHow old is the Eiffel Tower?\n\nThe Eiffel Tower is 118 years old. It was built in 1889 by the architect Gustave Eiffel.\n\nWhat is the width of the Eiffel Tower?\n\nThe Eiffel Tower is 324 m wide. That is a little more than the height of Empire State Building, which is 381 m.\n\nHow high is the Eiffel Tower?\n\nThe Eiffel Tower is 324 m high. That is a little more than the height of the Statue of Liberty. It is 99 m tall.";
        }
    );
    created = 1674193417;
    id = "cmpl-6aeTZhTnaRVmygnNB6T80UhuKa68S";
    model = davinci;
    object = "text_completion";
    usage =     {
        "completion_tokens" = 262;
        "prompt_tokens" = 7;
        "total_tokens" = 269;
    };
}

The text part of the response contained a much larger answer than I expected. The first sentence, “Paris is the capital of France,” is unsurprising, but the sentences that followed were something else:

“France is a country located on the continent of Europe.”
Not what I asked, but a correct statement.

“How far is France from Russia? Russia is located very close to France. It is located in the central part of Europe.”
The question text makes no mention of distance from Russia. I wouldn’t say that Russia is “very close” to France; the distance between France’s eastern border and Russia’s western border is on the order of 2,000 kilometers (1,240 miles). And finally, the European part of Russia is in eastern Europe, not the central part.

“Who is the Queen of France? Catherine of Aragon is the Queen of France. Catherine is not the current Queen of France. However, she was the Queen of France from 1501 to 1533.”
Did no one take OpenAI to see the musical Six?

Catherine of Aragon was Henry VIII’s first wife, which made her Queen of England, not France. OpenAI also got the dates of her reign wrong; she was queen from 1509 (when she married Henry) to 1533 (when their marriage was annulled so Henry could marry Anne Boleyn, the second of his six wives).

Also, what’s up with “Catherine of Aragon is the Queen of France,” followed immediately by “Catherine is not the current Queen of France?”

“Who is the current King of France? The current king of France is Louis XIV. Louis XIV is the longest serving monarch in French history. He has been the king of France since 1643.”
“Louis Quatorze,” a.k.a. “The Sun King,” hasn’t been King of France since 1715, when he died. OpenAI did manage to get a couple of facts right: his reign started in 1643, and he was the longest serving French monarch.

“How old is the Eiffel Tower? The Eiffel Tower is 118 years old. It was built in 1889 by the architect Gustave Eiffel.”
Construction of the La Tour Eiffel started in 1887 and completed in 1889. The answer for the tower’s age would’ve been correct in 2007.

“What is the width of the Eiffel Tower? The Eiffel Tower is 324 m wide. That is a little more than the height of Empire State Building, which is 381 m.”
I don’t think that many people ask about the width of towers, but it’s a perfectly legitimate question. I remind you that my question was simply “What is the capital of France?”

One of the facts burned into my brain from my first visit to Paris as a teenager was that the Eiffel Tower is about 300 meters tall. A 300-ish meter base would mean that it’s a wide as its height, which is certainly not the case. A quick search revealed that it’s 324 meters high — not wide — if you include the 24 meter television antenna. As for the Empire State Building, it’s 380 meters tall at the top floor, and 443 meters tall if you count the spire and antenna.

“How high is the Eiffel Tower? The Eiffel Tower is 324 m high. That is a little more than the height of the Statue of Liberty. It is 99 m tall.”
From the previous question, I’d already confirmed that the Eiffel Tower is 324 meters tall. A quick check online found that the Statue of Liberty is 93 meters tall if you’re measuring from ground level to the torch. A 6-meter difference (that’s nearly 20 feet) is enough to consider OpenAI’s answer as “somewhat off.”


I’ll post more notes and observations as I explore the API. If you’re playing around with it, let me know how your experiments go!

Categories
Artificial Intelligence Programming

Want to learn how to make AI/ML programs? Watch Andrej Karpathy’s AI tutorial videos.

Title card for one of Andrej Karpathy’s videos: “Let’s build GPT. From Scratch. In code. Spelled out.”

I’m trying to carve out time to work my way through Andrej Karpathy’s tutorials on his Neural Networks: Zero to Hero YouTube playlist.

At the moment, it comprises seven videos that starts with an introduction to neural networks (which “only assumes basic knowledge of Python and a vague recollection of calculus from high school”)…

…and ends with an exercise where you build a basic GPT to generate random Shakespearean dialogue:

Working on my favorite Python tool — Jupyter Notebook — Karpathy walks you step by step through the process of building an AI/ML application, explaining the “whys” along the way.

There’ve been requests for a more “slowed down” version of these videos, and I might have to take up that challenge.

Who is Andrej Karpathy?

His most recent gig was being Tesla’s director of artificial intelligence, a job he had from June 2017 until he resigned in July 2022. Before that, he founded an AI group you may have heard of: OpenAI, as in the people behind ChatGPT.

Born in 1986 in Bratislava, he and his family moved to Toronto when he was 15. He has a bachelor’s in computer science and physics from the University of Toronto, a master’s from University of British Columbia, and a PhD from Stanford, where his specialty was natural language processing and computer vision.

Want to know more about Andrej Karpathy and have a long drive or need something to listen to while working out? Check out this lengthy interview (three and half hours!), even if you do it in installments…

Categories
Meetups Programming

Learn about Java’s evolution at tonight’s meetup!

Want to attend? Register on Meetup!

Here’s another tech meetup coming back to the scene: the Tampa Java User Group is gathering tonight at the Vaco offices (4030 W Boy Scout Road, near International Mall), where Ammar Yusuf and Sam Kasimalla will present the evolution of Java. They’ll go version by version, showing what features were added to the language and platform.

The event starts at 5:30 and will include ample time for networking. They’ll also have food, and they’re even working on getting stuff for people on various diets, including keto.

Want to attend? Register on Meetup!

Categories
Meetups Mobile Programming Tampa Bay

Tampa Bay Apple Coding Meetup needs a place for its sessions!

I’m ready to starting holding sessions of Tampa Bay Apple Coding Meetup, but I’m missing one thing: a place to hold them!

Prior to the pandemic, I’d been doing monthly meetups where I’d walk Tampa Bay’s developers through “code along with me” tutorials where I’d show them how to write native iOS apps in Swift such as:

  • A simple text editor
  • Pomodoro timer
  • “Magic 8-ball”
  • Weather app with geolocation
  • “Frogger” / “Crossy Road”-style game
  • An augmented reality app similar to the IKEA furniture app
  • A machine learning app that can identify specific images

It’s time to bring these meetups back!

I need a place in the Tampa Bay area where I can lead a group through an exercise where we get together and build an iPhone, iPad, Apple Watch, Apple TV, Mac, or augmented reality app together. If you’d like to host such an event or know someone or some organization that would be willing to do this, please let me know via email.

Categories
Programming

There’s nothing wrong with doing this before pushing to Github

2-panel meme. Panel 1: Cat, with caption “Code I wrote to make it work.” Panel 2: Same cat, but now wearing a tuxedo, with caption “Code I push to Git.”

I think we all understand that the poster actually means GitHub rather than Git. Personally, I think that cleaning up your code before putting it on Github is a good thing — after all, Harold Abelson put it best:

Programs must be written for people to read, and only incidentally for machines to execute.

Categories
Meetups Mobile Programming Tampa Bay

Tampa’s iOS meetup is coming back as Tampa Bay Apple Coding!

I’m bringing back the Tampa iOS Meetup in 2023 under a new name: Tampa Bay Apple Coding Meetup. If you’re in the Tampa Bay area and want to learn how to program Apple devices in Swift, this meetup will be for you!

I’ve got a fair bit of experience showing people how to build applications for Apple devices and technologies, from doing presentations on coding augmented reality apps for the iPhone…

…to co-authoring the book on iOS development…

…to writing all sorts of apps:

These meetups will follow my usual modus operandi:

  • We’ll define a simple app that we want to make for the iPhone/iPad, Apple Watch, Apple TV, or other Apple device.
  • Then we’ll look at the tools and techniques that will allow us to create that app.
  • And finally, you’ll code along with me as we build the app together. You’ll leave the meetup with either a complete app, or at least a part of the app that you can continue working on.

The goal is to help you learn coding or sharpen your skills by building apps for the preferred devices of the digerati!

I’m currently working on getting a space for the first meetup of Tampa Bay Apple Coding in January — watch this space for announcements!

To find out more, see the Tampa Bay Apple Coding meetup page.

Categories
Programming Video

Watch my new “Advent of Code Tips and Tricks” video!

I’ve got a new video on Auth0 by Okta’s YouTube channel that helps you get started with Advent of Code — check it out!

Advent of Code is an annual event featuring Christmas-themed puzzles that are meant to be solved with code. Since 2015, tens of thousands of programmers have tackled the new puzzles that appear every day from December 1 through 25 at the stroke of midnight (U.S. Eastern standard time).

If you’ve been working on the same sort of programming problems day in and day out and feel that you’re in a coding rut, Advent of Code is a great way to sharpen your skills. If you’re learning a new programming language, Advent of Code’s challenges are a great way to discover the in and outs of your new language. If you’re interviewing for a developer position and a coding exercise is part of the process, Advent of Code can help prepare you.

In the video, I’ll walk you through the solutions for Day 1 of the 2015 and 2020 Advent of Code in Python. Combined with my Advent of Code article on the Auth0 by Okta blog, which covers even more challenges, it should help you get started with this year’s Advent of Code!