matt HOFFNER
naming typo
2a6e164
raw
history blame
No virus
1.75 kB
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}&regions=${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 };