askSMHI
Val Town is a collaborative website to build and scale JavaScript apps.
Deploy APIs, crons, & store data – all from the browser, and deployed in miliseconds.
Using OpenAI chat completion with function calls to SMHI api
The API is instructed to use the current time in Europe/Stockholm timezone. If the message can not be handled with the weather API endpoint, the Open AI assistant will reply instead.
/ask?q=What is the weather like in Stockholm today
{
answer?: string // If the message could not be answered with the SMHI API
error?:string //
data?: unknown // the actual data returned from SMHI, if the API is called
summary?: string // a summary of the data, by GPT API
}
- How is the weather in the Capital of Sweden tomorrow.
- How is the weather at Liseberg on Friday.
- Handle the API request and count the tokens in the question.
- Send the question to Open AI API moderation
- Create tool calling by converting schema to JSON schema
- Send the question to Open AI Chat Completion and expose tool calling
- Make the API call to the SMHI API with parameters from OPEN AI
- Add additional information to the SMHI response (converting numerical categories to text)
- Remove data from the response that was not requested by the Open AI parameters.
- Send the modified response to Open AI API together with the SMHI response JSON Schema.
- Send a summary of the forcast (by Open AI API) together with the forecast data as a response to the initial request.
- OPENAI_CHAT: Needs to be authorized to write chat completions and to the moderation API.
- openai: For typesafe API request and responses
- valibot: for describing the SMHI API response and function API input
- valibot/to-json-schema: Transform the schema to json schema (readable by the GPT API)
- gpt-tokenizer: count the number of tokens
- formkit/temporal: To handle dates in a specific timezone (Europe/Stockholm)