Spaces:
Running
Running
import { Tool } from 'openai-function-calling-tools'; | |
import { z } from 'zod'; | |
function createOddsApi({ apiKey }: { apiKey: string }) { | |
const paramsSchema = z.object({ | |
input: z.string(), | |
}); | |
const name = 'sports_odds'; | |
const description = 'A realtime Sports Odds API. Useful for when you need to answer questions about sports odds, currently NBA and NFL. Input should be a string including a sport (nba or nfl), optionally including type (h2h, spread or o/u). Outputs a JSON array of results.'; | |
const execute = async ({ input }: z.infer<typeof paramsSchema>) => { | |
try { | |
const oddsFormat = 'american'; | |
const dateFormat = 'iso'; | |
const regions = 'us'; | |
let sportKey; | |
let markets; | |
// americanfootball_nfl_super_bowl_winner | |
if (input.toLowerCase().includes('nba')) { | |
sportKey = 'basketball_nba'; | |
} else if (input.toLowerCase().includes('nfl')) { | |
sportKey = 'americanfootball_nfl'; | |
} else { | |
sportKey = 'upcoming'; | |
} | |
if (input.includes('money line')) { | |
markets = 'spread'; | |
} else if (input.includes('o/u')) { | |
markets = 'totals'; | |
} else { | |
markets = 'spreads'; | |
} | |
const activeSports = await fetch(`https://api.the-odds-api.com/v4/sports/${sportKey}/odds?apiKey=${apiKey}&oddsFormat=${oddsFormat}&dateFormat=${dateFormat}&markets=${markets}®ions=${regions}`); | |
const oddsResponse = await activeSports.json(); | |
return JSON.stringify(oddsResponse); | |
} catch (error) { | |
throw new Error(`Error in oddsApi: ${error}`); | |
} | |
}; | |
return new Tool(paramsSchema, name, description, execute).tool; | |
} | |
export { createOddsApi }; |