Spaces:
Running
Running
import { Tool } from 'openai-function-calling-tools'; | |
import { z } from 'zod'; | |
import { getJson } from 'serpapi'; | |
function createSportsResultsApi({ apiKey }: { apiKey: string }) { | |
const paramsSchema = z.object({ | |
input: z.string(), | |
}); | |
const name = 'sports_results'; | |
const description = 'A custom search engine for sports scores and results. Useful for when you need to answer questions about current sports scores (like nba or nfl). Input should be a search query. Outputs a JSON array of results.'; | |
const execute = async ({ input }: z.infer<typeof paramsSchema>) => { | |
try { | |
if (input.toLowerCase().includes('nba')) { | |
const results = await fetch("https://data.nba.com/data/10s/v2015/json/mobile_teams/nba/2023/scores/00_todays_scores.json"); | |
const games = await results.json(); | |
return JSON.stringify(games.gs.g); | |
} else { | |
const response = await getJson({ | |
engine: "google", | |
api_key: apiKey, | |
q: input, | |
location: "Seattle, Washington", | |
}); | |
return JSON.stringify(response['sports_results']); | |
} | |
} catch (error) { | |
throw new Error(`Error in serpApi or NBA API: ${error}`); | |
} | |
}; | |
return new Tool(paramsSchema, name, description, execute).tool; | |
} | |
export { createSportsResultsApi }; | |