from swarms.models.openai_function_caller import OpenAIFunctionCaller
from pydantic import BaseModel, Field


# Pydantic is a data validation library that provides data validation and parsing using Python type hints.
# It is used here to define the data structure for making API calls to retrieve weather information.
class Transaction(BaseModel):
    amount: float = Field(..., description="The amount of the transaction")
    category: str = Field(
        ...,
        description="The category of the transaction according to Xeros categories such as Dues & Subscriptions, Fees & Charges, Meals & Entertainment.",
    )
    date: str = Field(..., description="The date of the transaction")


class TransactionsToCut(BaseModel):
    transactions: list[Transaction]
    expense_analysis: str
    dollars_saved: float


# The WeatherAPI class is a Pydantic BaseModel that represents the data structure
# for making API calls to retrieve weather information. It has two attributes: city and date.


# Example usage:
# Initialize the function caller
function_caller = OpenAIFunctionCaller(
    system_prompt="You are a helpful assistant.",
    max_tokens=2000,
    temperature=0.5,
    base_model=TransactionsToCut,
)


# Task
logs = """

################################
Date	Description	Type	Amount	Balance	Action
Jul 31, 2024	MONTHLY SERVICE FEE 
Fee	-$15.00	-$986.49	
Jul 31, 2024	ORIG CO NAME:STRIPE ORIG ID:4270465600 DESC DATE: CO ENTRY DESCR:TRANSFER SEC:CCD TRACE#:111000028806182 EED:240731 IND ID:ST-R7Z6S6U2K5U1 IND NAME:KYE GOMEZ TRN: 2138806182TC	ACH credit	$18.46	-$971.49	
Jul 26, 2024	ORIG CO NAME:STRIPE ORIG ID:4270465600 DESC DATE: CO ENTRY DESCR:TRANSFER SEC:CCD TRACE#:111000027107200 EED:240726 IND ID:ST-F1B2H5X5P7A5 IND NAME:KYE GOMEZ TRN: 2087107200TC	ACH credit	$48.25	-$989.95	
Jul 24, 2024	ORIG CO NAME:STRIPE ORIG ID:4270465600 DESC DATE: CO ENTRY DESCR:TRANSFER SEC:CCD TRACE#:111000026863283 EED:240724 IND ID:ST-B3Q3I3S7G1C8 IND NAME:KYE GOMEZ TRN: 2066863283TC	ACH credit	$18.81	-$1,038.20	
Jul 23, 2024	ORIG CO NAME:STRIPE ORIG ID:4270465600 DESC DATE: CO ENTRY DESCR:TRANSFER SEC:CCD TRACE#:111000024970457 EED:240723 IND ID:ST-Y8V3O8K6B8Y2 IND NAME:KYE GOMEZ TRN: 2054970457TC	ACH credit	$48.15	-$1,057.01	
Jul 22, 2024	ORIG CO NAME:GitHub Sponsors ORIG ID:4270465600 DESC DATE: CO ENTRY DESCR:GitHub SpoSEC:CCD TRACE#:111000029548278 EED:240722 IND ID:ST-G1P1A1A3Y8L2 IND NAME:KYE GOMEZ TRN: 2049548278TC	Other	$8.33	-$1,105.16	
Jul 22, 2024	ORIG CO NAME:STRIPE ORIG ID:4270465600 DESC DATE: CO ENTRY DESCR:TRANSFER SEC:CCD TRACE#:111000029566827 EED:240722 IND ID:ST-A4F9I2H5H6I9 IND NAME:KYE GOMEZ TRN: 2049566827TC	ACH credit	$18.66	-$1,113.49	
Jul 19, 2024	ORIG CO NAME:STRIPE ORIG ID:4270465600 DESC DATE: CO ENTRY DESCR:TRANSFER SEC:CCD TRACE#:111000025982141 EED:240719 IND ID:ST-K4M7U0J6X3T3 IND NAME:KYE GOMEZ TRN: 2015982141TC	ACH credit	$19.11	-$1,132.15	
Jul 12, 2024	ORIG CO NAME:STRIPE ORIG ID:4270465600 DESC DATE: CO ENTRY DESCR:TRANSFER SEC:CCD TRACE#:111000023532836 EED:240712 IND ID:ST-L3F1Q6U7O2I4 IND NAME:KYE GOMEZ TRN: 1943532836TC	ACH credit	$1.58	-$1,151.26	
Jul 11, 2024	ORIG CO NAME:STRIPE ORIG ID:4270465600 DESC DATE: CO ENTRY DESCR:TRANSFER SEC:CCD TRACE#:111000027946637 EED:240711 IND ID:ST-T2S8O9G9L6Y6 IND NAME:KYE GOMEZ TRN: 1937946637TC	ACH credit	$19.11	-$1,152.84	
Jul 9, 2024	OVERDRAFT FEE FOR A $19.49 CARD PURCHASE - DETAILS: 0706TST* LULU'S - ALAMED WEST MENLO PA CA0############0029 07	Fee	-$34.00	-$1,171.95	
Jul 9, 2024	OVERDRAFT FEE FOR A $38.77 CARD PURCHASE - DETAILS: 0705TST* LULU'S - ALAMED WEST MENLO PA CA0############0029 07	Fee	-$34.00	-$1,137.95	
Jul 9, 2024	ORIG CO NAME:STRIPE ORIG ID:4270465600 DESC DATE: CO ENTRY DESCR:TRANSFER SEC:CCD TRACE#:111000021343065 EED:240709 IND ID:ST-G4X7Q1Z3O7P2 IND NAME:KYE GOMEZ TRN: 1911343065TC	ACH credit	$18.71	-$1,103.95	
Jul 8, 2024	OVERDRAFT FEE FOR A $66.00 ITEM - DETAILS: ORIG CO NAME:CAPITAL ONE ORIG ID:9541719318 DESC DATE:240704 CO ENTRY DESCR:CRCARDPMT SEC:CCD TRACE#:056073615999158 EED:240705 IND ID:3XS9ZC4R7RBL1JG IND NAME:KYE B GOMEZ TRN: 1875999158TC	Fee	-$34.00	-$1,122.66	
Jul 8, 2024	OVERDRAFT FEE FOR A $15.20 CARD PURCHASE - DETAILS: 0704STARBUCKS STORE 05798 MENLO PARK CA 0############0029 07	Fee	-$34.00	-$1,088.66	
Jul 8, 2024	OVERDRAFT FEE FOR A $11.35 CARD PURCHASE - DETAILS: 0703CHIPOTLE 0801 MOUNTAIN VIEW CA 0############0029 07	Fee	-$34.00	-$1,054.66	
Jul 8, 2024	OVERDRAFT FEE FOR A $26.17 CARD PURCHASE - DETAILS: 0703KFC/LJS #223 MOUNTAIN VIEW CA 0############0029 05	Fee	-$34.00	-$1,020.66	
Jul 8, 2024	TST* LULU'S - ALAMED WEST MENLO PA CA 07/06 (...0029)	Card	-$19.49	-$986.66	
Jul 8, 2024	TST* LULU'S - ALAMED WEST MENLO PA CA 07/05 (...0029)	Card	-$38.77	-$967.17	
Jul 5, 2024	OVERDRAFT FEE FOR A $13.97 CARD PURCHASE - DETAILS: 0702SAMOVAR MOUNTAIN VIEW CA 0############0029 05	Fee	-$34.00	-$928.40	
Jul 5, 2024	OVERDRAFT FEE FOR A $18.66 CARD PURCHASE - DETAILS: 0703LYFT *1 RIDE 07-01 HELP.LYFT.COM CA0############0029 01	Fee	-$34.00	-$894.40	
Jul 5, 2024	OVERDRAFT FEE FOR A $10.59 CARD PURCHASE - DETAILS: 0702PAYPAL *ELENA_SMIRNOV 402-935-7733 CA0############0029 00419	Fee	-$34.00	-$860.40	
Jul 5, 2024	ORIG CO NAME:CAPITAL ONE ORIG ID:9541719318 DESC DATE:240704 CO ENTRY DESCR:CRCARDPMT SEC:CCD TRACE#:056073615999158 EED:240705 IND ID:3XS9ZC4R7RBL1JG IND NAME:KYE B GOMEZ TRN: 1875999158TC	ACH debit	-$66.00	-$826.40	
Jul 5, 2024	UBER *TRIP SAN FRANCISCO CA 127199 07/04 (...0029)	Card	-$16.85	-$760.40	
Jul 5, 2024	STARBUCKS STORE 05798 MENLO PARK CA 07/04 (...0029)	Card	-$15.20	-$743.55	
Jul 5, 2024	CHIPOTLE 0801 MOUNTAIN VIEW CA 07/03 (...0029)	Card	-$11.35	-$728.35	
Jul 5, 2024	KFC/LJS #223 MOUNTAIN VIEW CA 07/03 (...0029)	Card	-$26.17	-$717.00	
Jul 5, 2024	ORIG CO NAME:STRIPE ORIG ID:4270465600 DESC DATE: CO ENTRY DESCR:TRANSFER SEC:CCD TRACE#:111000021739712 EED:240705 IND ID:ST-E7N6R7F0Y2B1 IND NAME:KYE GOMEZ TRN: 1871739712TC	ACH credit	$94.80	-$690.83	
Jul 3, 2024	OVERDRAFT FEE FOR A $23.68 CARD PURCHASE - DETAILS: 0701CHIPOTLE 0801 MOUNTAIN VIEW CA 0############0029 07	Fee	-$34.00	-$785.63	
Jul 3, 2024	OVERDRAFT FEE FOR A $46.59 CARD PURCHASE - DETAILS: 0702LYFT *4 RIDES 06-3 HELP.LYFT.COM CA0############0029 01	Fee	-$34.00	-$751.63	
Jul 3, 2024	SAMOVAR MOUNTAIN VIEW CA 07/02 (...0029)	Card	-$13.97	-$717.63	
Jul 3, 2024	LYFT *1 RIDE 07-01 HELP.LYFT.COM CA 07/03 (...0029)	Card	-$18.66	-$703.66	
Jul 3, 2024	PAYPAL *ELENA_SMIRNOV 402-935-7733 CA 07/02 (...0029)	Card	-$10.59	-$685.00	
Jul 2, 2024	OVERDRAFT FEE FOR A $18.35 CARD PURCHASE - DETAILS: 0629STARBUCKS STORE 05798 MENLO PARK CA 0############0029 07	Fee	-$34.00	-$674.41	
Jul 2, 2024	OVERDRAFT FEE FOR A $20.00 RECURRING CARD PURCHASE - DETAILS: 0629OPENAI *CHATGPT SUBS HTTPSOPENAI.C CA0############0029 01699	Fee	-$34.00	-$640.41	
Jul 2, 2024	OVERDRAFT FEE FOR A $31.27 CARD PURCHASE - DETAILS: 0629LULU'S ON THE ALAMEDA MENLO PARK CA 0############0029 07	Fee	-$34.00	-$606.41	
Jul 2, 2024	OVERDRAFT FEE FOR A $11.99 CARD PURCHASE - DETAILS: 0629LYFT *1 RIDE 06-27 HELP.LYFT.COM CA0############0029 01	Fee	-$34.00	-$572.41	
Jul 2, 2024	OVERDRAFT FEE FOR A $21.73 CARD PURCHASE - DETAILS: 0628SQ *BRIOCHE BAKERY & San Francisco CA0############0029 07	Fee	-$34.00	-$538.41	
Jul 2, 2024	OVERDRAFT FEE FOR A $16.04 CARD PURCHASE - DETAILS: 0628CHIPOTLE 0801 MOUNTAIN VIEW CA 0############0029 07	Fee	-$34.00	-$504.41	
Jul 2, 2024	CHIPOTLE 0801 MOUNTAIN VIEW CA 07/01 (...0029)	Card	-$23.68	-$470.41	
Jul 2, 2024	LYFT *4 RIDES 06-3 HELP.LYFT.COM CA 07/02 (...0029)	Card	-$46.59	-$446.73	
Jul 1, 2024	TACO BELL #28833 PALO ALTO CA 06/30 (...0029)	Card	-$21.80	-$400.14	
Jul 1, 2024	UBER *TRIP SAN FRANCISCO CA 336624 06/30 (...0029)	Card	-$8.16	-$378.34	
Jul 1, 2024	SAMOVAR MOUNTAIN VIEW CA 06/30 (...0029)	Card	-$15.27	-$370.18	
Jul 1, 2024	TST* DUTCH GOOSE Menlo Park CA 06/30 (...0029)	Card	-$40.23	-$354.91	
Jul 1, 2024	KEPLERS BOOKS MENLO PARK CA 06/30 (...0029)	Card	-$19.14	-$314.68	
Jul 1, 2024	LYFT *1 RIDE 06-29 HELP.LYFT.COM CA 07/01 (...0029)	Card	-$8.76	-$295.54	
Jul 1, 2024	WALGREENS #7087 MENLO PARK CA 06/29 (...0029)	Card	-$8.99	-$286.78	
Jul 1, 2024	STARBUCKS STORE 05798 MENLO PARK CA 06/29 (...0029)	Card	-$18.35	-$277.79	
Jul 1, 2024	OPENAI *CHATGPT SUBS HTTPSOPENAI.C CA 06/29 (...0029)	Card	-$20.00	-$259.44	
Jul 1, 2024	LULU'S ON THE ALAMEDA MENLO PARK CA 06/29 (...0029)	Card	-$31.27	-$239.44	
Jul 1, 2024	LYFT *1 RIDE 06-27 HELP.LYFT.COM CA 06/29 (...0029)	Card	-$11.99	-$208.17	
Jul 1, 2024	SQ *BRIOCHE BAKERY & San Francisco CA 06/28 (...0029)	Card	-$21.73	-$196.18	
Jul 1, 2024	CHIPOTLE 0801 MOUNTAIN VIEW CA 06/28 (...0029)	Card	-$16.04	-$174.45	
Jul 1, 2024	LYFT *4 RIDES 06-2 HELP.LYFT.COM CA 06/30 (...0029)	Card	-$167.26	-$158.41	
Jul 1, 2024	ORIG CO NAME:STRIPE ORIG ID:4270465600 DESC DATE: CO ENTRY DESCR:TRANSFER SEC:CCD TRACE#:111000028483776 EED:240701 IND ID:ST-D0P1O6R3S4R7 IND NAME:KYE GOMEZ TRN: 1838483776TC	ACH credit	$18.71	$8.85	
Jun 28, 2024	MONTHLY SERVICE FEE 
Fee	-$15.00	-$9.86	
Jun 28, 2024	ORIG CO NAME:STRIPE ORIG ID:1800948598 DESC DATE: CO ENTRY DESCR:TRANSFER SEC:CCD TRACE#:091000012519287 EED:240628 IND ID:ST-N8K5T9C8E2Y8 IND NAME:KYE GOMEZ TRN: 1802519287TC	ACH debit	-$175.20	$5.14	
Jun 28, 2024	LYFT *1 RIDE 06-26 HELP.LYFT.COM CA 06/28 (...0029)	Card	-$51.73	$180.34	
Jun 28, 2024	SQ *SHACK15 San Francisco CA 06/27 (...0029)	Card	-$5.37	$232.07	
Jun 28, 2024	CHIPOTLE 0801 MOUNTAIN VIEW CA 06/27 (...0029)	Card	-$25.86	$237.44	
Jun 28, 2024	PAYPAL *CANVAPTYLIM 35314369001 06/27 (...0029)	Card	-$250.00	$263.30	
Jun 27, 2024	UBER *TRIP SAN FRANCISCO CA 407732 06/26 (...0029)	Card	-$18.73	$513.30	
Jun 27, 2024	CHIPOTLE 0801 MOUNTAIN VIEW CA 06/26 (...0029)	Card	-$26.35	$532.03	
Jun 27, 2024	LULU'S ON THE ALAMEDA MENLO PARK CA 06/26 (...0029)	Card	-$30.28	$558.38	
Jun 27, 2024	LYFT *3 RIDES 06-2 HELP.LYFT.COM CA 06/27 (...0029)	Card	-$40.48	$588.66	
Jun 26, 2024	LULU'S ON THE ALAMEDA MENLO PARK CA 06/25 (...0029)	Card	-$41.21	$629.14	
Jun 26, 2024	LYFT *6 RIDES 06-2 HELP.LYFT.COM CA 06/26 (...0029)	Card	-$205.60	$670.35	
Jun 26, 2024	ORIG CO NAME:STRIPE ORIG ID:4270465600 DESC DATE: CO ENTRY DESCR:TRANSFER SEC:CCD TRACE#:111000022601747 EED:240626 IND ID:ST-M4C8I3J4I2U8 IND NAME:KYE GOMEZ TRN: 1782601747TC	ACH credit	$48.25	$875.95	
Jun 25, 2024	MCDONALDS F6641 SAN CARLOS CA 06/24 (...0029)	Card	-$16.26	$827.70	
Jun 25, 2024	SQ *SAPPORO ROCK-N-ROLL San Mateo CA 06/25 (...0029)	Card	-$52.24	$843.96	
Jun 25, 2024	LULU'S ON THE ALAMEDA MENLO PARK CA 06/24 (...0029)	Card	-$22.28	$896.20	
Jun 25, 2024	KEPLERS BOOKS MENLO PARK CA 06/24 (...0029)	Card	-$77.95	$918.48	
Jun 25, 2024	LYFT *1 RIDE 06-23 HELP.LYFT.COM CA 06/25 (...0029)	Card	-$7.99	$996.43	
Jun 25, 2024	ORIG CO NAME:STRIPE ORIG ID:4270465600 DESC DATE: CO ENTRY DESCR:TRANSFER SEC:CCD TRACE#:111000021325399 EED:240625 IND ID:ST-O1M2Y8X8B1Z1 IND NAME:KYE GOMEZ TRN: 1771325399TC	ACH credit	$9.26	$1,004.42	
Jun 24, 2024	LYFT *1 RIDE 06-22 HELP.LYFT.COM CA 06/24 (...0029)	Card	-$28.97	$995.16	
Jun 24, 2024	PY *CUN PALO ALTO PALO ALTO CA 06/23 (...0029)	Card	-$21.51	$1,024.13	
Jun 24, 2024	WALGREENS STORE 643 SA MENLO PARK CA 06/23 Purchase $5.79 Cash Back $20.00 (...0029)	Card	-$25.79	$1,045.64	
Jun 24, 2024	PAYPAL *ELENA_SMIRNOV 402-935-7733 CA 06/24 (...0029)	Card	-$10.59	$1,071.43	
Jun 24, 2024	LYFT *6 RIDES 06-2 HELP.LYFT.COM CA 06/23 (...0029)	Card	-$83.58	$1,082.02	
Jun 24, 2024	LULU'S ON THE ALAMEDA MENLO PARK CA 06/22 (...0029)	Card	-$26.35	$1,165.60	
Jun 24, 2024	LYFT *3 RIDES 06-2 HELP.LYFT.COM CA 06/22 (...0029)	Card	-$38.41	$1,191.95	
Jun 24, 2024	ORIG CO NAME:STRIPE ORIG ID:4270465600 DESC DATE: CO ENTRY DESCR:TRANSFER SEC:CCD TRACE#:111000026019819 EED:240624 IND ID:ST-M3H3N3G9F3G9 IND NAME:KYE GOMEZ TRN: 1766019819TC
"""

# Run
response = function_caller.run(
    f"Cut out all of the expenses on the transactions in the logs above that are not necessary expenses such as Meals and Entertainment and transportation, the startup is a bit tight on cash: {logs}, Analyze the expenses and provide a summary of the expenses that can be cut out and the amount of money that can be saved."
)

# The run() method of the OpenAIFunctionCaller class is used to make a function call to the API.
# It takes a string parameter that represents the user's request or query.
print(response)