diff --git a/crates/goose-bench/src/assets/squirrel-data.csv b/crates/goose-bench/src/assets/squirrel-data.csv new file mode 100644 index 00000000..97580632 --- /dev/null +++ b/crates/goose-bench/src/assets/squirrel-data.csv @@ -0,0 +1 @@ +Area Name,Area ID,Park Name,Park ID,Squirrel ID,Primary Fur Color,Highlights in Fur Color,Color Notes,Location,Above Ground (Height in Feet),Specific Location,Activities,Interactions with Humans,Other Notes or Observations,Squirrel Latitude (DD.DDDDDD),Squirrel Longitude (-DD.DDDDDD) UPPER MANHATTAN,A,Fort Tryon Park,01,A-01-01,Gray,White,,Ground Plane,,,Foraging,Indifferent,,40.85941,-73.933936 UPPER MANHATTAN,A,Fort Tryon Park,01,A-01-02,Gray,White,,Ground Plane,,,Foraging,Indifferent,Looks skinny,40.859436,-73.933937 UPPER MANHATTAN,A,Fort Tryon Park,01,A-01-03,Gray,White,,Ground Plane,,,"Eating, Digging something",Indifferent,,40.859416,-73.933894 UPPER MANHATTAN,A,Fort Tryon Park,01,A-01-04,Gray,White,,Ground Plane,,,Running,Indifferent,,40.859418,-73.933895 UPPER MANHATTAN,A,Fort Tryon Park,01,A-01-05,Gray,Cinnamon,,Ground Plane,,,"Running, Eating",Indifferent,She left food,40.859493,-73.93359 UPPER MANHATTAN,A,Fort Tryon Park,01,A-01-06,Gray,Cinnamon,,Ground Plane,,,Climbing,Indifferent,,40.860825,-73.932871 UPPER MANHATTAN,A,Fort Tryon Park,01,A-01-07,Gray,White,,Ground Plane,,,Foraging,Indifferent,,40.860225,-73.933143 UPPER MANHATTAN,A,Fort Tryon Park,01,A-01-08,Black,Gray,,Above Ground,10,,Climbing,Runs From,,40.859965,-73.933412 UPPER MANHATTAN,A,Fort Tryon Park,01,A-01-09,Gray,White,,Ground Plane,,,Foraging,Indifferent,,40.859892,-73.933326 UPPER MANHATTAN,A,Fort Tryon Park,01,A-01-10,Gray,White,,Ground Plane,,,"Eating, Digging",Indifferent,,40.859636,-73.933717 UPPER MANHATTAN,A,Fort Tryon Park,01,A-01-11,Gray,Black,,Ground Plane,,,"Eating, Digging",Indifferent,was intimidated by a dog,40.859576,-73.933738 UPPER MANHATTAN,A,Fort Tryon Park,01,A-01-12,Gray,White,,Ground Plane,,,Running,Runs From,,40.859989,-73.934544 UPPER MANHATTAN,A,J. Hood Wright Park,02,A-02-01,Gray,Gray,,Ground Plane,,,Running,Indifferent,,40.845749,-73.9407 UPPER MANHATTAN,A,J. Hood Wright Park,02,A-02-02,Gray,Cinnamon,,Above Ground,2,,Foraging,Indifferent,,40.845875,-73.940808 UPPER MANHATTAN,A,J. Hood Wright Park,02,A-02-03,Gray,Cinnamon,,Ground Plane,,,Foraging,,,40.845875,-73.940808 UPPER MANHATTAN,A,J. Hood Wright Park,02,A-02-04,Gray,Cinnamon,,Ground Plane,,,Running,Indifferent,,40.846088,-73.940613 UPPER MANHATTAN,A,J. Hood Wright Park,02,A-02-05,Gray,Cinnamon,,Ground Plane,,,Running,Runs From,,40.846088,-73.940613 UPPER MANHATTAN,A,J. Hood Wright Park,02,A-02-06,Gray,Cinnamon,,Ground Plane,,,Foraging,Indifferent,,40.846088,-73.940613 UPPER MANHATTAN,A,J. Hood Wright Park,02,A-02-07,Gray,Gray,,Ground Plane,,,,Runs From,,40.846222,-73.94094 UPPER MANHATTAN,A,J. Hood Wright Park,02,A-02-08,Gray,Cinnamon,,Ground Plane,,,"Foraging, Nesting/gathering leaves",Indifferent,,40.846222,-73.94094 UPPER MANHATTAN,A,J. Hood Wright Park,02,A-02-09,Gray,Cinnamon,,Ground Plane,,,Chasing,Indifferent,,40.846197,-73.941026 UPPER MANHATTAN,A,J. Hood Wright Park,02,A-02-10,Gray,Cinnamon,,Ground Plane,,,Running,Indifferent,,40.846185,-73.940613 UPPER MANHATTAN,A,J. Hood Wright Park,02,A-02-11,Gray,Cinnamon,,Ground Plane,,,Eating,Runs From,,40.846271,-73.940579 UPPER MANHATTAN,A,J. Hood Wright Park,02,A-02-12,Gray,Cinnamon,,"Above Ground, Specific Location",15,tree,Climbing,Indifferent,,40.846332,-73.940369 UPPER MANHATTAN,A,J. Hood Wright Park,02,A-02-13,Gray,White,,"Above Ground, Specific Location",20,tree,Sleeping,Indifferent,,40.846332,-73.940369 UPPER MANHATTAN,A,J. Hood Wright Park,02,A-02-14,Gray,Gray,,Ground Plane,,,Running,Indifferent,,40.846332,-73.940369 UPPER MANHATTAN,A,J. Hood Wright Park,02,A-02-15,Gray,White,,Ground Plane,,,Running,Indifferent,,40.846458,-73.94103 UPPER MANHATTAN,A,J. Hood Wright Park,02,A-02-16,Gray,Cinnamon,,"Above Ground, Specific Location",20,tree,Eating,Indifferent,,40.846417,-73.941115 UPPER MANHATTAN,A,J. Hood Wright Park,02,A-02-17,Gray,Gray,,Ground Plane,,,Running,Indifferent,,40.846296,-73.941132 UPPER MANHATTAN,A,J. Hood Wright Park,02,A-02-18,Gray,Cinnamon,,Ground Plane,,,Foraging,Indifferent,,40.846064,-73.941497 UPPER MANHATTAN,A,J. Hood Wright Park,02,A-02-19,Gray,Cinnamon,,"Above Ground, Specific Location",2,tree,Climbing,Indifferent,,40.846065,-73.941498 UPPER MANHATTAN,A,J. Hood Wright Park,02,A-02-20,Gray,Cinnamon,,Ground Plane,,,Foraging,Indifferent,,40.847296,-73.942061 UPPER MANHATTAN,A,J. Hood Wright Park,02,A-02-21,Gray,Cinnamon,,Ground Plane,,,Foraging,Runs From,,40.847259,-73.941598 UPPER MANHATTAN,A,J. Hood Wright Park,02,A-02-22,Gray,Cinnamon,,Ground Plane,,,Foraging,Indifferent,,40.84719,-73.941308 UPPER MANHATTAN,A,J. Hood Wright Park,02,A-02-23,Gray,Cinnamon,,"Above Ground, Specific Location",2,fence,Eating,Indifferent,,40.84719,-73.941308 UPPER MANHATTAN,A,J. Hood Wright Park,02,A-02-24,Cinnamon,White,,"Above Ground, Specific Location",20,tree,Sitting,Indifferent,,40.847113,-73.940937 UPPER MANHATTAN,A,Highbridge Park,03,A-03-01,Gray,Cinnamon,,"Above Ground, Specific Location",2,in tree,"Chasing, Climbing",Watches us from tree,#1 and #2 chasing each other,40.841178,-73.935482 UPPER MANHATTAN,A,Highbridge Park,03,A-03-02,Gray,White,,"Above Ground, Specific Location",2,in tree,"Chasing, Climbing, Eating",Runs From,#1 and #2 chasing each other,40.841204,-73.935434 UPPER MANHATTAN,A,Highbridge Park,03,A-03-03,Gray,White,,"Above Ground, Specific Location",2,in tree,Running,,,40.841212,-73.934827 UPPER MANHATTAN,A,Highbridge Park,03,A-03-04,Gray,White,,Above Ground,3,,Climbing,,,40.841217,-73.934714 UPPER MANHATTAN,A,Highbridge Park,03,A-03-05,Gray,Cinnamon,,Ground Plane,,,Running,Runs From,"#5, #6 & #7 together in shrub area to East, a lot of acorns and Corona bottle caps on ground",40.841359,-73.934339 UPPER MANHATTAN,A,Highbridge Park,03,A-03-06,Gray,Gray,,"Above Ground, Specific Location",2,in tree,Running,"Runs From, watchful","#5, #6 & #7 together in shrub area to East, a lot of acorns and Corona bottle caps on ground",40.841375,-73.934242 UPPER MANHATTAN,A,Highbridge Park,03,A-03-07,Gray,Cinnamon,,"Above Ground, Specific Location",< 1,on log,Running,Runs From,"#5, #6 & #7 together in shrub area to East, a lot of acorns and Corona bottle caps on ground",40.841375,-73.934242 UPPER MANHATTAN,A,Highbridge Park,03,A-03-08,Gray,Cinnamon,,"Above Ground, Specific Location",3,in wall,"Running, Chasing, Climbing",Runs From,"#8 & #9 saw together at start of river overlook, hiding in cracks of cement wall! so cool!",40.842308,-73.933061 UPPER MANHATTAN,A,Highbridge Park,03,A-03-09,Gray,Cinnamon,,"Above Ground, Specific Location",3,in wall,,,"#8 & #9 saw together at start of river overlook, hiding in cracks of cement wall! so cool!",40.842401,-73.932986 UPPER MANHATTAN,A,Highbridge Park,03,A-03-10,Gray,Cinnamon,,"Ground Plane, Above Ground",618,"Started on ground, climbed 618 ft.","Climbing, Foraging",Watching us from tree - very interested in us,"Lots of garbage, near #8 & #9",40.842511,-73.932916 UPPER MANHATTAN,A,Highbridge Park,03,A-03-11,Gray,Cinnamon,,Above Ground,4,,Vocalization at us,"Approaches, watching us",,40.842673,-73.932793 UPPER MANHATTAN,A,Highbridge Park,03,A-03-12,Gray,White,,Ground Plane,,,"Running, Foraging",Runs From,,40.842795,-73.933002 UPPER MANHATTAN,A,Highbridge Park,03,A-03-13,Gray,Cinnamon,,Ground Plane,,,Running,,,, UPPER MANHATTAN,A,Highbridge Park,03,A-03-14,Gray,Cinnamon,,Ground Plane,,,"Running, Eating","Runs From, watches us in short tree",Loud sparrows in tree,40.842327,-73.934269 UPPER MANHATTAN,A,Highbridge Park,03,A-03-15,Gray,Cinnamon,,"Above Ground, Specific Location",9,in tree,Jumped to building,,,40.842359,-73.934177 UPPER MANHATTAN,A,Highbridge Park,03,A-03-16,Gray,Cinnamon,,Ground Plane,,,"Eating, Foraging",Indifferent,,40.842769,-73.934478 UPPER MANHATTAN,A,St. Nicholas Park,04,A-04-01,Gray,White,,Above Ground,,,Climbing,Indifferent,Jumping between,40.817593,-73.948855 UPPER MANHATTAN,A,St. Nicholas Park,04,A-04-02,Black,Black,,Ground Plane,,,Foraging,Indifferent,Chasing #3,40.817719,-73.948855 UPPER MANHATTAN,A,St. Nicholas Park,04,A-04-03,Gray,White,,Ground Plane,,,Eating,Indifferent,Being chased by #2,40.817719,-73.948914 UPPER MANHATTAN,A,St. Nicholas Park,04,A-04-04,Gray,White,,Ground Plane,,,Foraging,Indifferent,,40.817711,-73.949118 UPPER MANHATTAN,A,St. Nicholas Park,04,A-04-05,Gray,White,,Ground Plane,,,"Climbing, Eating",Indifferent,,40.817569,-73.948931 UPPER MANHATTAN,A,St. Nicholas Park,04,A-04-06,Gray,Gray,,Above Ground,,,"Chasing, Climbing",Indifferent,,40.817544,-73.949016 UPPER MANHATTAN,A,St. Nicholas Park,04,A-04-07,Gray,Gray,,Above Ground,,,"Chasing, Climbing",Indifferent,,40.817544,-73.949016 UPPER MANHATTAN,A,St. Nicholas Park,04,A-04-08,Gray,White,,Ground Plane,,,Running,Runs From,,40.817479,-73.949006 UPPER MANHATTAN,A,St. Nicholas Park,04,A-04-09,Gray,White,,Ground Plane,,,Foraging,Indifferent,Wooded area,40.816685,-73.949689 UPPER MANHATTAN,A,St. Nicholas Park,04,A-04-10,Gray,Gray,,Ground Plane,,,Foraging,Indifferent,Wooded area,40.816677,-73.949549 UPPER MANHATTAN,A,St. Nicholas Park,04,A-04-11,Black,Black,,Ground Plane,,,Foraging,Indifferent,Wooded area,40.816555,-73.949609 UPPER MANHATTAN,A,St. Nicholas Park,04,A-04-12,Gray,White,,Ground Plane,,,Foraging,Indifferent,Wooded area - would look but not fully approach,40.816506,-73.949587 UPPER MANHATTAN,A,St. Nicholas Park,04,A-04-13,Gray,White,,Ground Plane,,,Running,Indifferent,,40.816425,-73.949474 UPPER MANHATTAN,A,St. Nicholas Park,04,A-04-14,Gray,Gray,,Ground Plane,,,Foraging,Indifferent,,40.818308,-73.948952 UPPER MANHATTAN,A,St. Nicholas Park,04,A-04-15,Gray,Black,,Ground Plane,,,Foraging,Indifferent,,40.818263,-73.948909 UPPER MANHATTAN,A,Riverside Park (Section Near Grant Memorial),05,A-05-01,Gray,Gray,,Ground Plane,,,"Running, up tree",Runs From,,, UPPER MANHATTAN,A,Riverside Park (Section Near Grant Memorial),05,A-05-02,Gray,Gray,,Ground Plane,,,"Running, up tree",Runs From,,, UPPER MANHATTAN,A,Riverside Park (Section Near Grant Memorial),05,A-05-03,Gray,Gray,,Ground Plane,,,"Running, up tree",Indifferent,,, UPPER MANHATTAN,A,Riverside Park (Section Near Grant Memorial),05,A-05-04,Gray,Gray,,Ground Plane,,,Chasing,Indifferent,,, UPPER MANHATTAN,A,Riverside Park (Section Near Grant Memorial),05,A-05-05,Gray,Gray,,Ground Plane,,,Chasing,,,, UPPER MANHATTAN,A,Riverside Park (Section Near Grant Memorial),05,A-05-06,Gray,Gray,,Above Ground,15,,Sitting on branch,Indifferent,,, UPPER MANHATTAN,A,Riverside Park (Section Near Grant Memorial),05,A-05-07,Gray,Gray,,Ground Plane,,,"Running, up tree",Indifferent,Forever wild section,, UPPER MANHATTAN,A,Riverside Park (Section Near Grant Memorial),05,A-05-08,Gray,Gray,,Ground Plane,,,Eating,Indifferent,,, UPPER MANHATTAN,A,Riverside Park (Section Near Grant Memorial),05,A-05-09,Gray,Gray,,Ground Plane,,,Eating,Indifferent,,, UPPER MANHATTAN,A,Riverside Park (Section Near Grant Memorial),05,A-05-10,Gray,Gray,,Ground Plane,,,Eating,Indifferent,,, UPPER MANHATTAN,A,Riverside Park (Section Near Grant Memorial),05,A-05-11,Gray,Gray,,Ground Plane,,,Eating,Indifferent,,, UPPER MANHATTAN,A,Riverside Park (Section Near Grant Memorial),05,A-05-12,Gray,Gray,,Ground Plane,,,Eating,Indifferent,,, UPPER MANHATTAN,A,Riverside Park (Section Near Grant Memorial),05,A-05-13,Gray,Gray,,Ground Plane,,,Eating,Indifferent,,, UPPER MANHATTAN,A,Riverside Park (Section Near Grant Memorial),05,A-05-14,Gray,Gray,,Ground Plane,,,Eating,Indifferent,,, UPPER MANHATTAN,A,Riverside Park (Section Near Grant Memorial),05,A-05-15,Gray,Gray,,Ground Plane,,,Chasing,Indifferent,,, UPPER MANHATTAN,A,Riverside Park (Section Near Grant Memorial),05,A-05-16,Gray,Gray,,Ground Plane,,,Chasing,Indifferent,,, UPPER MANHATTAN,A,Riverside Park (Section Near Grant Memorial),05,A-05-17,Gray,Gray,,Ground Plane,,,Eating,Okay with people,,, UPPER MANHATTAN,A,Riverside Park (Section Near Grant Memorial),05,A-05-18,Gray,Gray,,Ground Plane,,,Running,Indifferent,,, UPPER MANHATTAN,A,Riverside Park (Section Near Grant Memorial),05,A-05-19,Gray,Gray,,"Above Ground, Specific Location",,Tree,Running,Indifferent,,, UPPER MANHATTAN,A,Riverside Park (Section Near Grant Memorial),05,A-05-20,Gray,Gray,,Ground Plane,,,Running,Indifferent,,, UPPER MANHATTAN,A,Riverside Park (Section Near Grant Memorial),05,A-05-21,Gray,Gray,,Ground Plane,,at tree,,Indifferent,,, UPPER MANHATTAN,A,Riverside Park (Section Near Grant Memorial),05,A-05-22,Gray,Gray,,Ground Plane,,,Chasing,,,, UPPER MANHATTAN,A,Riverside Park (Section Near Grant Memorial),05,A-05-23,Gray,Gray,,Ground Plane,,,Chasing,,,, UPPER MANHATTAN,A,Riverside Park (Section Near Grant Memorial),05,A-05-24,Gray,Gray,,,,,Sitting at attention,,,, UPPER MANHATTAN,A,Riverside Park (Section Near Grant Memorial),05,A-05-25,Gray,Gray,,Ground Plane,,,Eating,Indifferent,,, UPPER MANHATTAN,A,Riverside Park (Section Near Grant Memorial),05,A-05-26,Gray,Gray,,Ground Plane,,,Eating,Indifferent,,, UPPER MANHATTAN,A,Riverside Park (Section Near Grant Memorial),05,A-05-27,Gray,Gray,,Ground Plane,,,Foraging,Indifferent,,, UPPER MANHATTAN,A,Riverside Park (Section Near Grant Memorial),05,A-05-28,Gray,Gray,,Ground Plane,,,Foraging,Indifferent,,, UPPER MANHATTAN,A,Marcus Garvey Park,06,A-06-01,Gray,Gray,,Above Ground,2040,,Climbing,Indifferent,HAWK. HAAAAAWK. All in 1 tree.,40.804912,-73.943735 UPPER MANHATTAN,A,Marcus Garvey Park,06,A-06-02,Gray,Gray,,Above Ground,2040,,Climbing,Indifferent,HAWK. HAAAAAWK. All in 1 tree.,40.804912,-73.943736 UPPER MANHATTAN,A,Marcus Garvey Park,06,A-06-03,Gray,Gray,,Above Ground,2040,,Climbing,Indifferent,HAWK. HAAAAAWK. All in 1 tree.,40.804913,-73.943735 UPPER MANHATTAN,A,Marcus Garvey Park,06,A-06-04,Gray,Gray,,Above Ground,2040,,Climbing,Indifferent,HAWK. HAAAAAWK. All in 1 tree.,40.804915,-73.943737 UPPER MANHATTAN,A,Marcus Garvey Park,06,A-06-05,Gray,Gray,,Above Ground,2040,,Climbing,Indifferent,HAWK. HAAAAAWK. All in 1 tree.,40.804916,-73.943735 UPPER MANHATTAN,A,Marcus Garvey Park,06,A-06-06,Gray,Gray,,Above Ground,2040,,Climbing,Indifferent,HAWK. HAAAAAWK. All in 1 tree.,40.804914,-73.943736 UPPER MANHATTAN,A,Marcus Garvey Park,06,A-06-07,Gray,Gray,,Above Ground,2040,,Climbing,Indifferent,HAWK. HAAAAAWK. All in 1 tree.,40.804917,-73.943737 UPPER MANHATTAN,A,Marcus Garvey Park,06,A-06-08,Black,Black,,Above Ground,25,,Climbing,,Defending the tree from the HAAAAWK. The bravest.,40.804912,-73.943738 UPPER MANHATTAN,A,Marcus Garvey Park,06,A-06-09,Gray,Gray,,"Above Ground, Specific Location",26,small trees,"Chasing, Climbing, Eating",Indifferent,"2 were chasing each other through some short trees, others just sat",40.804701,-73.944118 UPPER MANHATTAN,A,Marcus Garvey Park,06,A-06-10,Gray,Gray,,"Above Ground, Specific Location",26,small trees,"Chasing, Climbing, Eating",Indifferent,"2 were chasing each other through some short trees, others just sat",40.804746,-73.94374 UPPER MANHATTAN,A,Marcus Garvey Park,06,A-06-11,Gray,Gray,,"Above Ground, Specific Location",26,small trees,"Chasing, Climbing, Eating",Indifferent,"2 were chasing each other through some short trees, others just sat",40.804912,-73.94408 UPPER MANHATTAN,A,Marcus Garvey Park,06,A-06-12,Gray,Gray,,"Above Ground, Specific Location",26,small trees,"Chasing, Climbing, Eating",Indifferent,"2 were chasing each other through some short trees, others just sat",40.804729,-73.944053 UPPER MANHATTAN,A,Marcus Garvey Park,06,A-06-13,Gray,Gray,,Above Ground,4...3...2...1,,Climbing,,"Slid down a signpost while spinning. Other squirrels flung leaves at it, cheering.",40.804713,-73.944032 UPPER MANHATTAN,A,Marcus Garvey Park,06,A-06-14,Gray,Gray,,Above Ground,15,,"Climbing, Eating",,Too far to observe human interactions,40.804613,-73.943829 UPPER MANHATTAN,A,Marcus Garvey Park,06,A-06-15,Gray,Gray,,Above Ground,15,,"Climbing, Eating",,Too far to observe human interactions,40.804564,-73.943824 UPPER MANHATTAN,A,Marcus Garvey Park,06,A-06-16,Gray,Gray,,Ground Plane,,,Running,,Ran up the the 3rd baseline of a Little League field. Wrong way!,40.804253,-73.944121 UPPER MANHATTAN,A,Marcus Garvey Park,06,A-06-17,Gray,Gray,,Ground Plane,,,Running,,Scampered across path,40.803758,-73.94433 UPPER MANHATTAN,A,Marcus Garvey Park,06,A-06-18,Gray,Gray,,Above Ground,4,,"Sitting, shouting",Indifferent,,40.803616,-73.944464 UPPER MANHATTAN,A,Marcus Garvey Park,06,A-06-19,Gray,Gray,,Above Ground,4,,"Sitting, shouting",Indifferent,,40.803413,-73.944207 UPPER MANHATTAN,A,Marcus Garvey Park,06,A-06-20,Gray,Gray,,Above Ground,4,,"Sitting, shouting",Indifferent,,40.80338,-73.944148 UPPER MANHATTAN,A,Marcus Garvey Park,06,A-06-21,Gray,Gray,,Above Ground,4,,"Sitting, shouting",Indifferent,,40.803392,-73.944228 UPPER MANHATTAN,A,Marcus Garvey Park,06,A-06-22,Gray,Gray,,Above Ground,,,"Defending tree, shouting","Indifferent, Preoccupied by HAAWK",HAWK. Same scene as 18. All gray.,40.803794,-73.944003 UPPER MANHATTAN,A,Marcus Garvey Park,06,A-06-23,Gray,Gray,,Above Ground,,,"Defending tree, shouting","Indifferent, Preoccupied by HAAWK",HAWK. Same scene as 18. All gray.,40.803795,-73.944003 UPPER MANHATTAN,A,Marcus Garvey Park,06,A-06-24,Gray,Gray,,Above Ground,,,"Defending tree, shouting","Indifferent, Preoccupied by HAAWK",HAWK. Same scene as 18. All gray.,40.803794,-73.944004 UPPER MANHATTAN,A,Marcus Garvey Park,06,A-06-25,Gray,Gray,,Above Ground,,,"Defending tree, shouting","Indifferent, Preoccupied by HAAWK",HAWK. Same scene as 18. All gray.,40.803794,-73.944005 UPPER MANHATTAN,A,Marcus Garvey Park,06,A-06-26,Gray,Gray,,Above Ground,,,"Defending tree, shouting","Indifferent, Preoccupied by HAAWK",HAWK. Same scene as 18. All gray.,40.803796,-73.944003 UPPER MANHATTAN,A,Marcus Garvey Park,06,A-06-27,Gray,Gray,,Above Ground,,,"Defending tree, shouting","Indifferent, Preoccupied by HAAWK",HAWK. Same scene as 18. All gray.,40.803795,-73.944004 UPPER MANHATTAN,A,Marcus Garvey Park,06,A-06-28,Gray,Gray,,Above Ground,3,,Eating,Indifferent,,40.80362,-73.944067 UPPER MANHATTAN,A,Marcus Garvey Park,06,A-06-29,Gray,Gray,,Above Ground,6,,"Chasing, Climbing",Runs From,,40.80352,-73.943629 UPPER MANHATTAN,A,Marcus Garvey Park,06,A-06-30,Gray,Gray,,Above Ground,6,,"Chasing, Climbing",Runs From,,40.803507,-73.943661 UPPER MANHATTAN,A,Marcus Garvey Park,06,A-06-31,Gray,Gray,,Above Ground,25,,Climbing,,,40.803981,-73.943327 UPPER MANHATTAN,A,Marcus Garvey Park,06,A-06-32,Gray,Gray,,Above Ground,25,,Climbing,,,40.804123,-73.943402 UPPER MANHATTAN,A,Marcus Garvey Park,06,A-06-33,Black,Cinnamon,Chestnut Brown?? May be black with sunlight??,Above Ground,25,,Cleaning,,Cleaning himself like a cat would.,40.803981,-73.943273 UPPER MANHATTAN,A,Marcus Garvey Park,06,A-06-34,Gray,Gray,,Above Ground,4,,Climbing,Runs From,,40.804878,-73.942781 CENTRAL MANHATTAN,B,Madison Square Park,07,B-07-01,Gray,,,Ground Plane,,,Foraging,Indifferent,Scar on forehead,40.74145,-73.987884 CENTRAL MANHATTAN,B,Madison Square Park,07,B-07-02,Gray,,,"Above Ground, Specific Location",30,in a tree,Sitting,,,40.742255,-73.987433 CENTRAL MANHATTAN,B,Madison Square Park,07,B-07-03,Gray,,,Ground Plane,,,Foraging,Indifferent,,40.742556,-73.986971 CENTRAL MANHATTAN,B,Madison Square Park,07,B-07-04,Gray,,,"Above Ground, Specific Location",10,in tree,Resting in tree,,,40.742792,-73.987046 CENTRAL MANHATTAN,B,Madison Square Park,07,B-07-05,Gray,,,"Ground Plane, Specific Location",,Farragut Lawn,Running,Indifferent,"Many pigeons lounging on lawn, tourist taking picture",40.74288,-73.987663 CENTRAL MANHATTAN,B,Madison Square Park,07,B-07-06,Gray,,,"Above Ground, Specific Location",15,in old tree (oval lawn),Sitting,Indifferent,#6 & #7 in same tree,40.742421,-73.98808 CENTRAL MANHATTAN,B,Madison Square Park,07,B-07-07,Gray,,,"Above Ground, Specific Location",20,in old tree (oval lawn),Sitting,Indifferent,"#6 & #7 in same tree - In general, visitors/people are trying to coax squirrels and take pictures. They are delighted to see squirrels.",40.742421,-73.98808 CENTRAL MANHATTAN,B,Madison Square Park,07,B-07-08,Gray,Cinnamon,,"Ground Plane, Specific Location",,base of tree,Foraging,Indifferent,Dog owners encouraging dogs to chase squirrels,40.742807,-73.988435 CENTRAL MANHATTAN,B,Madison Square Park,07,B-07-09,Gray,,,"Ground Plane, Specific Location",,base of tree,Foraging,Indifferent,Ran from base of tree to lawn about 20 feet away in search of food,40.741528,-73.988324 CENTRAL MANHATTAN,B,Madison Square Park,07,B-07-10,Gray,,,"Above Ground, Specific Location",10,in tree,"Climbing, Foraging",Indifferent,"First spotted in tree, then climbed down. Squirrel was small in stature.",40.741805,-73.988448 CENTRAL MANHATTAN,B,Madison Square Park,07,B-07-11,Gray,,,"Ground Plane, Above Ground",1,on bench,"Running, Climbing, Foraging",Indifferent,"First seen on bench. Then jumped to ground, ran across path and onto lawn in search of food.",40.741862,-73.988797 CENTRAL MANHATTAN,B,Union Square Park,08,B-08-01,Cinnamon,Cinnamon,,Ground Plane,,,Climbing,Friendly,,40.735981,-73.99062 CENTRAL MANHATTAN,B,Union Square Park,08,B-08-02,Gray,Gray,,Ground Plane,,,"Running, Eating, Foraging",Indifferent,,40.735847,-73.990115 CENTRAL MANHATTAN,B,Union Square Park,08,B-08-03,Cinnamon,,,Ground Plane,,,Foraging,Indifferent,,40.735896,-73.99041 CENTRAL MANHATTAN,B,Union Square Park,08,B-08-04,Gray,,,Ground Plane,,,Foraging,Indifferent,,40.73579,-73.990738 CENTRAL MANHATTAN,B,Union Square Park,08,B-08-05,Gray,,,Ground Plane,,,Digging,Indifferent,,40.735941,-73.99063 CENTRAL MANHATTAN,B,Union Square Park,08,B-08-06,Gray,,,"Above Ground, Specific Location",,in tree,Climbing,,,40.73566,-73.990351 CENTRAL MANHATTAN,B,Union Square Park,08,B-08-07,Gray,Cinnamon,Cinnamon tail,"Above Ground, Specific Location",,in tree,"Climbing, Eating",,Baby smaller,40.735636,-73.990426 CENTRAL MANHATTAN,B,Union Square Park,08,B-08-08,Gray,Black,,,,,Climbing,,Baby smaller,40.73566,-73.990351 CENTRAL MANHATTAN,B,Union Square Park,08,B-08-09,Gray,,,,,,"Running, Digging",Runs From,,40.735587,-73.990367 CENTRAL MANHATTAN,B,Union Square Park,08,B-08-10,Gray,,,Ground Plane,,,"Eating, Foraging","Indifferent, Staring",,40.73542,-73.990453 CENTRAL MANHATTAN,B,Union Square Park,08,B-08-11,Cinnamon,,,Ground Plane,,,Foraging,"Indifferent, Runs From (kids)",Ran away from kids and climbed up the tree,40.735514,-73.99033 CENTRAL MANHATTAN,B,Union Square Park,08,B-08-12,Gray,,,Ground Plane,,,"Eating, Foraging",,Big,40.735945,-73.990201 CENTRAL MANHATTAN,B,Union Square Park,08,B-08-13,Cinnamon,,,,,,Foraging,,Big,40.735947,-73.99023 CENTRAL MANHATTAN,B,Union Square Park,08,B-08-14,Gray,,,Ground Plane,,,"Eating, Foraging",,Big and chubby,40.73604,-73.98966 CENTRAL MANHATTAN,B,Union Square Park,08,B-08-15,Gray,,,Ground Plane,,,"Eating, Foraging",,,40.73618,-73.990683 CENTRAL MANHATTAN,B,Union Square Park,08,B-08-16,Cinnamon,,,Ground Plane,,,"Eating, Foraging",,,40.736298,-73.990559 CENTRAL MANHATTAN,B,Stuyvesant Square Park,09,B-09-01,Gray,Cinnamon,,Ground Plane,,,Foraging,Indifferent,Found nut and moved into tree,40.733753,-73.983682 CENTRAL MANHATTAN,B,Stuyvesant Square Park,09,B-09-02,Gray,Cinnamon,,Ground Plane,,,Foraging,Indifferent,,40.733648,-73.983483 CENTRAL MANHATTAN,B,Stuyvesant Square Park,09,B-09-03,Gray,Cinnamon,,Ground Plane,,,Foraging,Indifferent,,40.733631,-73.983419 CENTRAL MANHATTAN,B,Stuyvesant Square Park,09,B-09-04,Gray,Cinnamon,,Ground Plane,,,Climbing,Runs From,,40.733546,-73.983263 CENTRAL MANHATTAN,B,Stuyvesant Square Park,09,B-09-05,Gray,Cinnamon,,Above Ground,30,,Climbing,,,40.733591,-73.983263 CENTRAL MANHATTAN,B,Stuyvesant Square Park,09,B-09-06,Gray,Cinnamon,,Above Ground,15,,"Climbing, Eating",Indifferent,,40.733648,-73.984294 CENTRAL MANHATTAN,B,Stuyvesant Square Park,09,B-09-07,Gray,Cinnamon,,Ground Plane,,,Foraging,Approaches,"Curious, thinks we have food",40.733737,-73.98438 CENTRAL MANHATTAN,B,Stuyvesant Square Park,09,B-09-08,Gray,Cinnamon,,Ground Plane,,,Chasing,Indifferent,Being chased by #9,40.733501,-73.984417 CENTRAL MANHATTAN,B,Stuyvesant Square Park,09,B-09-09,Gray,Cinnamon,,Ground Plane,,,Chasing,Indifferent,Chasing #8,40.733575,-73.984391 CENTRAL MANHATTAN,B,Stuyvesant Square Park,09,B-09-10,Gray,Cinnamon,,Ground Plane,,,Foraging,Approaches,Expected food,40.733506,-73.984553 CENTRAL MANHATTAN,B,Stuyvesant Square Park,09,B-09-11,Gray,Cinnamon,,Above Ground,20,,Climbing,Indifferent,Juvenile? Playing with #12 in tree,40.733619,-73.984708 CENTRAL MANHATTAN,B,Stuyvesant Square Park,09,B-09-12,Gray,Cinnamon,,Above Ground,20,,Chasing,Indifferent,Juvenile? Playing with #11 in tree,40.733648,-73.984638 CENTRAL MANHATTAN,B,Stuyvesant Square Park,09,B-09-13,Gray,Cinnamon,,Above Ground,40,,Eating,,,40.733737,-73.984644 CENTRAL MANHATTAN,B,Stuyvesant Square Park,09,B-09-14,Black,Cinnamon,,Above Ground,10,,Eating,Approaches,,40.733932,-73.984612 CENTRAL MANHATTAN,B,Stuyvesant Square Park,09,B-09-15,Black,Cinnamon,,Above Ground,30,,Eating,,Far away,40.734014,-73.984461 CENTRAL MANHATTAN,B,Stuyvesant Square Park,09,B-09-16,Black,Cinnamon,,"Above Ground, Specific Location",60,in tree,,,,40.734221,-73.984397 CENTRAL MANHATTAN,B,Stuyvesant Square Park,09,B-09-17,Gray,Cinnamon,,"Above Ground, Specific Location",15,in tree,Eating,,,40.734083,-73.984322 CENTRAL MANHATTAN,B,Stuyvesant Square Park,09,B-09-18,Gray,Cinnamon,,Ground Plane,,,Foraging,Indifferent,,40.73403,-73.984199 CENTRAL MANHATTAN,B,Stuyvesant Square Park,09,B-09-19,Black,Cinnamon,,"Above Ground, Specific Location",40,in tree,Grooming,,,40.734204,-73.984242 CENTRAL MANHATTAN,B,Stuyvesant Square Park,09,B-09-20,Gray,Cinnamon,,Ground Plane,,,Foraging,Indifferent,,40.734314,-73.984231 CENTRAL MANHATTAN,B,Stuyvesant Square Park,09,B-09-21,Gray,Cinnamon,,"Above Ground, Specific Location",30,in tree,,,,40.734261,-73.984284 CENTRAL MANHATTAN,B,Stuyvesant Square Park,09,B-09-22,Gray,Cinnamon,,"Above Ground, Specific Location",30,in tree,,,,40.734144,-73.984059 CENTRAL MANHATTAN,B,Stuyvesant Square Park,09,B-09-23,Gray,Cinnamon,,Ground Plane,,,Foraging,Indifferent,,40.734335,-73.984038 CENTRAL MANHATTAN,B,Stuyvesant Square Park,09,B-09-24,Black,Cinnamon,,Ground Plane,,,Foraging,Indifferent,,40.734383,-73.984118 CENTRAL MANHATTAN,B,Stuyvesant Square Park,09,B-09-25,Black,Cinnamon,,Ground Plane,,,Foraging,Indifferent,,40.734356,-73.984062 CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-01,Gray,Gray,,Ground Plane,,,Foraging,Indifferent,Sun,40.730703,-73.995821 CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-02,Gray,Gray,,Ground Plane,,,Foraging,Indifferent,,40.730638,-73.995784 CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-03,Gray,Gray,,Ground Plane,,,Foraging,Indifferent,,40.730528,-73.995891 CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-04,Gray,Gray,,Ground Plane,,,Foraging,Indifferent,,40.730394,-73.996009 CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-05,Gray,,,,,,,Indifferent,,40.730341,-73.996052 CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-06,Gray,,,,,,,Indifferent,People eating at bench with dog,40.7303,-73.996106 CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-07,Gray,,,,,,,Indifferent,,40.730247,-73.996175 CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-08,Gray,,,,,,,Indifferent,,40.730231,-73.996138 CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-09,Gray,Gray,,Ground Plane,,,Foraging,Indifferent,,40.730223,-73.996132 CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-10,Gray,,,,,,,Indifferent,Shady,40.730077,-73.996277 CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-11,Gray,Gray,,Above Ground,20,,Nesting,Indifferent,In squirrel house (pic). Someone is trying to feed squirrel in house.,, CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-12,Gray,Gray,,Above Ground,25,,Climbing,Indifferent,,, CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-13,Gray,,,Ground Plane,,,Chasing,Indifferent,Chasing #15,, CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-14,Gray,,,"Above Ground, Specific Location",15,in tree,Eating,Indifferent,,, CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-15,Gray,,,,,,Chasing,Indifferent,Being chased by #13,40.729858,-73.996843 CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-16,Gray,,,,,,Chasing,Indifferent,,40.72985,-73.996778 CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-17,Gray,,,,,,Chasing,Indifferent,,40.729822,-73.996816 CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-18,Gray,,,,,,Chasing,Indifferent,,40.729809,-73.996762 CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-19,Gray,,,,,,Chasing,Indifferent,,40.729939,-73.997068 CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-20,Gray,,,Ground Plane,,,,Indifferent,,40.729976,-73.997154 CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-21,Gray,,,Ground Plane,,,,Indifferent,,40.72996,-73.997079 CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-22,Gray,,,Ground Plane,,,,Indifferent,,40.729927,-73.997036 CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-23,Gray,,,Ground Plane,,,,Indifferent,,40.729988,-73.997106 CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-24,Gray,,,Ground Plane,,,,Indifferent,,40.72998,-73.997031 CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-25,Gray,,,,,,,Indifferent,,40.730318,-73.997213 CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-26,Gray,,,,,,,Indifferent,,40.730301,-73.997251 CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-27,Gray,,,,,,,Indifferent,,40.730334,-73.997589 CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-28,Gray,,,,,,,Indifferent,,40.730411,-73.997589 CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-29,Gray,,,,,,,Indifferent,,40.730395,-73.997535 CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-30,Gray,,,"Above Ground, Specific Location",,tree,,Indifferent,,40.730411,-73.997766 CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-31,Gray,,,,,,,Indifferent,,40.731031,-73.999122 CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-32,Gray,,,"Above Ground, Specific Location",,in tree high,,Indifferent,,40.731504,-73.998977 CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-33,Gray,,,"Above Ground, Specific Location",,in tree high,,Indifferent,,40.731548,-73.998842 CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-34,Gray,,,"Above Ground, Specific Location",,in tree high,,Indifferent,,40.731608,-73.998928 CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-35,Gray,,,"Above Ground, Specific Location",,in tree high,,Indifferent,,40.731503,-73.999014 CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-36,Gray,,,"Above Ground, Specific Location",,"tree canopy, low down",,Indifferent,,40.731552,-73.998788 CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-37,Gray,,,"Above Ground, Specific Location",,tree high,,Indifferent,,40.731952,-73.998647 CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-38,Gray,,,"Above Ground, Specific Location",,tree high,,Indifferent,,40.731936,-73.998598 CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-39,Gray,,,"Above Ground, Specific Location",,tree low,,Indifferent,,40.732001,-73.998491 CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-40,Gray,,,Ground Plane,,,Foraging,Indifferent,Busy area,40.731974,-73.998482 CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-41,Gray,,,,,,,Indifferent,,40.731861,-73.998122 CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-42,Gray,,,,,,,Indifferent,,40.731804,-73.997999 CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-43,Gray,,,"Above Ground, Specific Location",,tree,,Indifferent,,40.731747,-73.997859 CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-44,Gray,,,"Above Ground, Specific Location",,tree,,Indifferent,,40.731665,-73.997747 CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-45,Gray,,,"Above Ground, Specific Location",,tree,,Indifferent,,40.731548,-73.99758 CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-46,Gray,,,"Above Ground, Specific Location",,tree high,,Indifferent,,40.731389,-73.997231 CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-47,Gray,,,,,,,Indifferent,Sun,40.7312,-73.996805 CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-48,Gray,,,"Above Ground, Specific Location",,small tree,,Indifferent,,40.731119,-73.996655 CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-49,Gray,,,Specific Location,,on bench,,Indifferent,,40.731103,-73.996601 CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-50,Gray,,,,,,,Indifferent,,40.73092,-73.996242 CENTRAL MANHATTAN,B,Washington Square Park,10,B-10-51,Gray,,,,,,,Indifferent,,40.730782,-73.996017 CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-01,Gray,Gray,,Specific Location,,Tree,Climbing,Runs From,"Nut in mouth, very fast moving",, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-02,Gray,Gray,,Ground Plane,,,Foraging,Indifferent,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-03,Black,Black,,Ground Plane,,,Foraging,Indifferent,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-04,Gray,Gray,,Ground Plane,,,Foraging,Indifferent,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-05,Gray,Gray,,Ground Plane,,,Running,Indifferent,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-06,Gray,Gray,,Ground Plane,,,Foraging,Indifferent,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-07,Gray,Gray,,Ground Plane,,,Foraging,Indifferent,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-08,Gray,Gray,,Above Ground,20,,Climbing,Indifferent,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-09,Gray,Gray,,Ground Plane,,,Foraging,Indifferent,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-10,Gray,Gray,,Above Ground,30,,Chasing,Indifferent,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-11,Gray,Gray,,Above Ground,30,,Chasing,Indifferent,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-12,Gray,Gray,,Ground Plane,,,Foraging,Indifferent,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-13,Gray,Gray,,Ground Plane,,,Foraging,Indifferent,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-14,Gray,Gray,,Ground Plane,,,Foraging,,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-15,Gray,Gray,,Specific Location,,Tree,Climbing (down tree),Indifferent,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-16,Gray,Gray,,Specific Location,,Tree,Climbing (down tree),Indifferent,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-17,Gray,Gray,,Specific Location,,Tree,Climbing,Indifferent,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-18,Gray,Gray,,Specific Location,,Tree,Climbing,Indifferent,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-19,Gray,Gray,,Ground Plane,,,Foraging,Indifferent,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-20,Gray,Gray,,Ground Plane,,,Foraging,Indifferent,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-21,Gray,Gray,,Specific Location,,Tree,Climbing,Indifferent,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-22,Gray,Gray,,Specific Location,,Tree,Sitting,Indifferent,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-23,Gray,Gray,,Specific Location,,Tree,Sitting (in tree hole),Indifferent,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-24,Gray,Gray,,Specific Location,,Tree,Lounging,Approaches,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-25,Gray,Gray,,Ground Plane,,,Foraging,Approaches,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-26,Gray,Gray,,Ground Plane,,,Foraging,Approaches,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-27,Gray,Gray,,Ground Plane,,,Foraging,Approaches,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-28,Gray,Gray,,Ground Plane,,,Foraging,Approaches,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-29,Gray,Gray,,Ground Plane,,,Foraging,Approaches,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-30,Gray,Gray,,Ground Plane,,,Foraging,Approaches,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-31,Gray,Gray,,Ground Plane,,,Running,,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-32,Gray,Gray,,Ground Plane,,,Foraging,Approaches,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-33,Gray,Gray,,Specific Location,,Tree,Sitting,Approaches,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-34,Gray,Gray,,Specific Location,,Tree,Climbing,Approaches,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-35,Gray,Gray,,Ground Plane,,,Foraging,Indifferent,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-36,Gray,Gray,,Specific Location,,Tree,Climbing (down),Indifferent,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-37,Gray,Gray,,Specific Location,,Tree,Climbing (down),Indifferent,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-38,Gray,Gray,,Ground Plane,,,Foraging,Indifferent,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-39,Gray,Gray,,Ground Plane,,,Foraging,Indifferent,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-40,Gray,Gray,,Ground Plane,,,Foraging,Indifferent,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-41,Gray,Gray,,Ground Plane,,,Foraging,Indifferent,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-42,Gray,Gray,,Ground Plane,,,Foraging,Indifferent,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-43,Gray,Gray,,Ground Plane,,,Foraging,Indifferent,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-44,Gray,Gray,,Ground Plane,,,Foraging,Indifferent,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-45,Gray,Gray,,Ground Plane,,,Foraging,Indifferent,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-46,Gray,Gray,,Ground Plane,,,Foraging,Indifferent,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-47,Gray,Gray,,Ground Plane,,,Foraging,Indifferent,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-48,Black,Black,,Ground Plane,,,Foraging,Indifferent,They (#48 & #49) are fat.,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-49,Black,Black,,Ground Plane,,,Foraging,Indifferent,They (#48 & #49) are fat.,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-50,Gray,Gray,,Ground Plane,,,Chasing,Indifferent,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-51,Black,Black,,Ground Plane,,,Chasing,Indifferent,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-52,Gray,Gray,,Ground Plane,,,Foraging,Indifferent,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-53,Gray,Gray,,Ground Plane,,,Foraging,Indifferent,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-54,Gray,Gray,,Specific Location,,Tree,Climbing,Indifferent,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-55,Gray,Gray,,Specific Location,,Tree,Climbing,,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-56,Gray,Gray,,Specific Location,,Tree,Climbing,,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-57,Gray,Gray,,Specific Location,,Tree,Climbing,,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-58,Gray,Gray,,Ground Plane,,,Foraging,,,, CENTRAL MANHATTAN,B,Tompkins Square Park,11,B-11-59,Gray,Gray,,Ground Plane,,,Foraging,,,, CENTRAL MANHATTAN,B,John V. Lindsay East River Park,12,B-12-01,Gray,Gray,,Ground Plane,,,"Running, Eating",Indifferent,Nibbling on shrubs?,40.725738,-73.972105 CENTRAL MANHATTAN,B,John V. Lindsay East River Park,12,B-12-02,Black,Black,,Ground Plane,,,"Running, Eating (peanuts)",,,40.722614,-73.972894 CENTRAL MANHATTAN,B,John V. Lindsay East River Park,12,B-12-03,Gray,Gray,,"Ground Plane, Above Ground",,,"Climbing, Watching #2",Approaches,Siblings? (with #4) Playing (with #4) in fenced yard,40.72263,-73.973001 CENTRAL MANHATTAN,B,John V. Lindsay East River Park,12,B-12-04,Gray,Gray,,"Ground Plane, Above Ground",,,"Running, Chasing, Eating",,Siblings? (with #3) Playing (with #3) in fenced yard,40.72263,-73.973109 CENTRAL MANHATTAN,B,John V. Lindsay East River Park,12,B-12-05,Gray,Gray,,Ground Plane,,,"Eating, Foraging",Approaches,,40.722614,-73.973033 CENTRAL MANHATTAN,B,John V. Lindsay East River Park,12,B-12-06,Gray,Gray,,Ground Plane,,,"Eating, Foraging",Approaches,,40.722173,-73.97272 CENTRAL MANHATTAN,B,John V. Lindsay East River Park,12,B-12-07,Gray,Gray,,"Ground Plane, Above Ground",8,,"Climbing, Foraging",Indifferent,,40.719379,-73.973504 CENTRAL MANHATTAN,B,John V. Lindsay East River Park,12,B-12-08,Gray,Gray,,"Ground Plane, Above Ground",8,,"Climbing, Foraging",Indifferent,,40.71935,-73.973445 CENTRAL MANHATTAN,B,John V. Lindsay East River Park,12,B-12-09,Gray,Gray,,"Above Ground, Specific Location",12,in a tree,Climbing,,,40.721923,-73.974121 CENTRAL MANHATTAN,B,John V. Lindsay East River Park,12,B-12-10,Gray,Gray,,Ground Plane,,,Eating,Approaches,,40.724011,-73.97313 CENTRAL MANHATTAN,B,John V. Lindsay East River Park,12,B-12-11,Gray,Gray,,Ground Plane,,,"Climbing, Eating, Foraging",Indifferent,Was very close to a dog and hid in a tree,40.724608,-73.972841 CENTRAL MANHATTAN,B,John V. Lindsay East River Park,12,B-12-12,Gray,Gray,,Ground Plane,,,"Eating, Foraging",Runs From,,40.724774,-73.97275 LOWER MANHATTAN,C,Seward Park,14,C-14-01,Gray,"Cinnamon, White",,Ground Plane,,,Eating,Runs From,,40.715415,-73.989567 LOWER MANHATTAN,C,Seward Park,14,C-14-02,Gray,Cinnamon,,Ground Plane,,,Eating,Indifferent,"Bushier and plump, big tail",40.715484,-73.989299 LOWER MANHATTAN,C,Seward Park,14,C-14-03,Gray,Cinnamon,,Ground Plane,,,Foraging,Runs From,,40.714749,-73.989577 LOWER MANHATTAN,C,Seward Park,14,C-14-04,Gray,Cinnamon,,Ground Plane,,,Climbing,Approaches,Looking to us for food! Climbed tree when we did not have any to give.,40.71468,-73.989776 LOWER MANHATTAN,C,Seward Park,14,C-14-05,Gray,Cinnamon,Cinnamon tail,"Ground Plane, Above Ground",9,,"Climbing, Foraging",Approaches,"Skinny tail, lots of digging, found an acorn and is eating",40.714846,-73.989679 LOWER MANHATTAN,C,Seward Park,14,C-14-06,Gray,Cinnamon,,Ground Plane,,,"Running, Chasing",Indifferent,"Medium bushy, maybe a little younger, agile, sprightly",40.715033,-73.989609 LOWER MANHATTAN,C,Seward Park,14,C-14-07,Gray,Cinnamon,,Ground Plane,,,"Running, Chasing",Indifferent,Too quick,40.715208,-73.989534 LOWER MANHATTAN,C,Corlears Hook Park,15,C-15-01,Gray,,,Above Ground,20,,"Running, Climbing, Eating",Runs From,Frantically zig-zagging whilst clutching a mid-afternoon snack,40.712159,-73.979415 LOWER MANHATTAN,C,Corlears Hook Park,15,C-15-02,Gray,,,,,,"Eating, Foraging",Indifferent,Digging in leaves carelessly,40.712199,-73.979519 LOWER MANHATTAN,C,Corlears Hook Park,15,C-15-03,Gray,,,,,,,,Multiple nut dives into the leaves; mostly successful,40.712118,-73.97968 LOWER MANHATTAN,C,Corlears Hook Park,15,C-15-04,Gray,Cinnamon,,,,,,,Playing tag with #5,40.712179,-73.979776 LOWER MANHATTAN,C,Corlears Hook Park,15,C-15-05,Gray,Cinnamon,,,,,,,Playing tag with #4,40.712216,-73.979857 LOWER MANHATTAN,C,Corlears Hook Park,15,C-15-06,Gray,,,Above Ground,15,,Ear scratching,,,40.712224,-73.979669 LOWER MANHATTAN,C,Corlears Hook Park,15,C-15-07,Gray,,,Above Ground,25,,,,,40.71224,-73.979744 LOWER MANHATTAN,C,Corlears Hook Park,15,C-15-08,Gray,,,,,,Frolicking,,Leaping from branch to branch,40.711927,-73.979658 LOWER MANHATTAN,C,Corlears Hook Park,15,C-15-09,Gray,Cinnamon,,Above Ground,8,,"Running, Climbing, Scratching",,Meandering among the branches,40.711866,-73.97976 LOWER MANHATTAN,C,Corlears Hook Park,15,C-15-10,Gray,Gray,,Above Ground,8,,"Running, Climbing",Approaches,"Came by to make sure we had proper Sighter buttons, looks like a Gerald",40.71174,-73.980539 LOWER MANHATTAN,C,Corlears Hook Park,15,C-15-11,Gray,White,,Specific Location,,Handrail,Posing,Approaches,Timidly approached but ran from a passing pooch,40.711442,-73.978354 LOWER MANHATTAN,C,Corlears Hook Park,15,C-15-12,Gray,,,Above Ground,15,,Guarding,Defensive,Very upset that we spotted him accessing his tree-hole stash,40.711316,-73.978343 LOWER MANHATTAN,C,Corlears Hook Park,15,C-15-13,Gray,Black,,"Ground Plane, Above Ground",30,,"Running, Chasing, Climbing",,"#13, #14 & #15: Scattering and teasing a Shih Tzu that chased them, runs from dog",40.711417,73.977767 LOWER MANHATTAN,C,Corlears Hook Park,15,C-15-14,Gray,Black,,"Ground Plane, Above Ground",30,,"Running, Chasing, Climbing",,"#13, #14 & #15: Scattering and teasing a Shih Tzu that chased them, runs from dog",40.711421,-73.977692 LOWER MANHATTAN,C,Corlears Hook Park,15,C-15-15,Gray,Black,,"Ground Plane, Above Ground",30,,"Running, Chasing, Climbing",,"#13, #14 & #15: Scattering and teasing a Shih Tzu that chased them, runs from dog",40.711409,-73.977719 LOWER MANHATTAN,C,Corlears Hook Park,15,C-15-16,Cinnamon,,,Above Ground,2030,,Foraging,Indifferent,So curious! A unique color and thirst for the unknown.,40.711303,-73.97759 LOWER MANHATTAN,C,Columbus Park,16,C-16-01,Gray,Cinnamon,Cinnamon streak down back,Ground Plane,,,"Climbing, Eating, Foraging",Approaches,"Boy, Alert lots of basketball close by",40.714867,-74.000236 LOWER MANHATTAN,C,Columbus Park,16,C-16-02,Gray,Cinnamon,,Ground Plane,,,"Running, Foraging",,,40.7159,-74.000167 LOWER MANHATTAN,C,Columbus Park,16,C-16-03,Gray,,,Above Ground,25,,,Indifferent,Nibbling on branches,40.714875,-74.000346 LOWER MANHATTAN,C,Columbus Park,16,C-16-04,Gray,,,Above Ground,35,,Climbing,Approaches,Patchy bald spots,40.715779,-73.999887 LOWER MANHATTAN,C,Teardrop Park,18,C-18-01,Gray,Cinnamon,,Ground Plane,,,"Running, Eating (or pretending to eat)",Runs From,"Ran up tree and down tree, tail vibration not a flag or twitch, kuk sound",40.716335,-74.015612 LOWER MANHATTAN,C,City Hall Park,19,C-19-01,Gray,White,,Ground Plane,,,Foraging,,,40.712828,-74.005072 LOWER MANHATTAN,C,City Hall Park,19,C-19-02,Gray,,,Above Ground,,,Climbing,,Chasing #3 up the tree,40.712938,-74.005152 LOWER MANHATTAN,C,City Hall Park,19,C-19-03,Gray,,,Above Ground,,,Climbing,,Chasing #2 up the tree,40.712938,-74.005152 LOWER MANHATTAN,C,City Hall Park,19,C-19-04,Gray,"Cinnamon, White",,Ground Plane,,,"Eating, Burying",Approaches,Very chubby cinnamon squirrel got peanuts from humans and buried them in leaves,40.712893,-74.005233 LOWER MANHATTAN,C,City Hall Park,19,C-19-05,Gray,"Cinnamon, White",,Ground Plane,,,"Eating, Burying",Approaches,Couldn't find a good spot to bury theirs (peanuts from humans),40.712893,-74.005233 LOWER MANHATTAN,C,City Hall Park,19,C-19-06,Gray,Cinnamon,,Ground Plane,,,Eating,Approaches,Being fed by people,40.712922,-74.005147 LOWER MANHATTAN,C,City Hall Park,19,C-19-07,Gray,Cinnamon,,Ground Plane,,,Eating,Approaches,Being fed by people,40.712922,-74.005147 LOWER MANHATTAN,C,City Hall Park,19,C-19-08,Gray,White,Very distinct white outlines on ears and ring around tail,Ground Plane,,,Eating,Approaches,Came out to get peanut from human,40.713044,-74.005404 LOWER MANHATTAN,C,City Hall Park,19,C-19-09,Gray,Gray,,Above Ground,5,,"Climbing, Foraging","Indifferent, Runs From","Perched in a bush, watched us and scampered off to eat - very little squirrel",40.712836,-74.005662 LOWER MANHATTAN,C,City Hall Park,19,C-19-10,Gray,White,,"Ground Plane, Specific Location",,on City Hall back steps,Running,Indifferent,,40.712881,-74.005823 LOWER MANHATTAN,C,City Hall Park,19,C-19-11,Gray,"Cinnamon, White",,"Ground Plane, Specific Location",,by back steps of City Hall,"Eating, Foraging",Indifferent,Found something to eat buried in leaves and then looked for more,40.712995,-74.005963 LOWER MANHATTAN,C,City Hall Park,19,C-19-12,Gray,White,,Ground Plane,,,Very carefully watching a cat,Indifferent,,40.713044,-74.006242 LOWER MANHATTAN,C,City Hall Park,19,C-19-13,Gray,,,Above Ground,30,,Chattering,Indifferent,"High up in a tree, lots of talking",40.713276,-74.006323 LOWER MANHATTAN,C,City Hall Park,19,C-19-14,Gray,White,,Ground Plane,,,"Eating (nuts), Foraging","Approaches, Runs From",,40.713339,-74.006313 LOWER MANHATTAN,C,City Hall Park,19,C-19-15,Gray,White,,Ground Plane,,,Running,,"Very active, darting around",40.713518,-74.006308 LOWER MANHATTAN,C,City Hall Park,19,C-19-16,Gray,White,Lots of white!,Above Ground,3,,"Climbing, Foraging",Watching,"Perched on knot of tree, watching us, then started foraging",40.71312,-74.006862 LOWER MANHATTAN,C,City Hall Park,19,C-19-17,Gray,White,,Ground Plane,,,"Eating, Foraging",Indifferent,Successfully finding buried food,40.712872,-74.006878 LOWER MANHATTAN,C,City Hall Park,19,C-19-18,Gray,White,,Ground Plane,,,"Eating, Foraging",Indifferent,"Rolling around in loose dirt with a ""swimming"" motion",40.712872,-74.006878 LOWER MANHATTAN,C,Battery Park,20,C-20-01,Gray,Cinnamon,,Above Ground,5,,,Interested in,#15 all together being fed by humans,40.704053,-74.01612 LOWER MANHATTAN,C,Battery Park,20,C-20-02,Gray,"Cinnamon, White",,Specific Location,,on fencing,"Climbing, Balancing on fencing",,#15 all together being fed by humans - Hungry,40.704011,-74.016134 LOWER MANHATTAN,C,Battery Park,20,C-20-03,Gray,"Cinnamon, White",,Ground Plane,,,,Indifferent,"#15 all together being fed by humans, Had a ton of leaves in his mouth for several minutes",40.703897,-74.016118 LOWER MANHATTAN,C,Battery Park,20,C-20-04,,,,Ground Plane,,,,Cautious of,#15 all together being fed by humans,40.703885,-74.016161 LOWER MANHATTAN,C,Battery Park,20,C-20-05,Gray,"Cinnamon, White",,Specific Location,,on fencing,,,#15 all together being fed by humans,40.703848,-74.016134 LOWER MANHATTAN,C,Battery Park,20,C-20-06,Cinnamon,"Gray, White",,Ground Plane,,,"Chillin', Rubbing butt on ground",,Seems left out,40.703882,-74.015955 LOWER MANHATTAN,C,Battery Park,20,C-20-07,Cinnamon,White,,Ground Plane,,,Running,Runs From,,40.704211,-74.015859 LOWER MANHATTAN,C,Battery Park,20,C-20-08,Gray,White,,Ground Plane,,,Foraging,,Obviously a couple with #9,40.704142,-74.015837 LOWER MANHATTAN,C,Battery Park,20,C-20-09,Gray,White,,Ground Plane,,,Foraging,,Obviously a couple with #8,40.704175,-74.015306 LOWER MANHATTAN,C,Battery Park,20,C-20-10,Gray,"Cinnamon, White",,Ground Plane,,,Running,Indifferent,Skinny with tiny ears,40.704171,-74.015242 LOWER MANHATTAN,C,Battery Park,20,C-20-11,Gray,White,,Ground Plane,,,Foraging,Indifferent,,40.704468,-74.014774 LOWER MANHATTAN,C,Battery Park,20,C-20-12,Gray,White,,Ground Plane,,,Foraging,Indifferent,,40.704453,-74.014757 LOWER MANHATTAN,C,Battery Park,20,C-20-13,Gray,White,,Ground Plane,,,Eating,Indifferent,,40.70442,-74.014741 LOWER MANHATTAN,C,Battery Park,20,C-20-14,Gray,Cinnamon,,"Above Ground, Specific Location",10,in tree,Sticking out of a tree,Indifferent,,40.704188,-74.014853 LOWER MANHATTAN,C,Battery Park,20,C-20-15,Gray,White,White bellies,,,,Chasing,,"Flirty, chasing #16, also eating urban farm debris",40.70352,-74.015273 LOWER MANHATTAN,C,Battery Park,20,C-20-16,Gray,White,White bellies,,,,Chasing,,"Flirty, being chased by #15, also eating urban farm debris",40.703487,-74.015278 LOWER MANHATTAN,C,Battery Park,20,C-20-17,Gray,White,,,,,Hangin' with #13 & #14,,,40.703989,-74.015202 LOWER MANHATTAN,C,Battery Park,20,C-20-18,Gray,,,Ground Plane,,,,,Looks like he has a patch of fur missing on his back,40.703383,-74.015584 LOWER MANHATTAN,C,Battery Park,20,C-20-19,Gray,Cinnamon,,Above Ground,2,,Climbing (tree),,,40.70295,-74.015813 LOWER MANHATTAN,C,Battery Park,20,C-20-20,Cinnamon,,,Ground Plane,,,,,,40.702934,-74.015775 LOWER MANHATTAN,C,Battery Park,20,C-20-21,Gray,White,,"Above Ground, Specific Location",20,in a tree,Snacking in a tree,,,40.702922,-74.016629 LOWER MANHATTAN,C,Battery Park,20,C-20-22,Cinnamon,,,Specific Location,,on a bench,,,,40.702411,-74.015896 LOWER MANHATTAN,C,Battery Park,20,C-20-23,Gray,,,,,,Prancing about,,,40.702313,-74.015644 LOWER MANHATTAN,C,Battery Park,20,C-20-24,Gray,Cinnamon,,Specific Location,,on fence,Climbing fence,,,40.702467,-74.015757 LOWER MANHATTAN,C,Battery Park,20,C-20-25,Gray,Cinnamon,,"Above Ground, Specific Location",15,in a tree,,,,40.702597,-74.016132 LOWER MANHATTAN,C,Battery Park,20,C-20-26,Gray,Cinnamon,,Specific Location,,on fence,Climbing fence,,,40.702618,-74.016556 BROOKLYN,D,Msgr. McGolrick Park,21,D-21-01,Gray,Cinnamon,,Above Ground,1012,,battery,Staring,"Looks cold, not moving, lethargic",40.725308,-73.942789 BROOKLYN,D,Msgr. McGolrick Park,21,D-21-02,Gray,Cinnamon,White underbelly,Above Ground,< 1,,"Climbing, Foraging, Self-cleaning",Indifferent,,40.725511,-73.943609 BROOKLYN,D,Msgr. McGolrick Park,21,D-21-03,Gray,Cinnamon,,Ground Plane,,,Chasing,Approaches,,40.725511,-73.943448 BROOKLYN,D,Msgr. McGolrick Park,21,D-21-04,Gray,,,Above Ground,15,,Climbing,,,40.725478,-73.944113 BROOKLYN,D,Msgr. McGolrick Park,21,D-21-05,Gray,,,Above Ground,30,,Eating,,,40.725527,-73.943974 BROOKLYN,D,Msgr. McGolrick Park,21,D-21-06,Gray,Cinnamon,,Ground Plane,,,Eating,Approaches,We fed him!,40.725397,-73.944124 BROOKLYN,D,Msgr. McGolrick Park,21,D-21-07,Gray,,,Above Ground,30,,Climbing,,,40.725413,-73.943984 BROOKLYN,D,Msgr. McGolrick Park,21,D-21-08,Gray,,,Ground Plane,,,Climbing (down),,,40.724755,-73.944006 BROOKLYN,D,Msgr. McGolrick Park,21,D-21-09,Gray,,,Ground Plane,,,Climbing (down),,,40.723974,-73.943845 BROOKLYN,D,Msgr. McGolrick Park,21,D-21-10,Gray,,,Ground Plane,,,Climbing (down),,,40.723462,-73.943952 BROOKLYN,D,Msgr. McGolrick Park,21,D-21-11,Gray,,,Ground Plane,,,Climbing (down),,,40.725372,-73.943652 BROOKLYN,D,Msgr. McGolrick Park,21,D-21-12,Gray,White,,"Above Ground, Specific Location",15,by playground,Sitting,Indifferent,,40.725364,-73.943512 BROOKLYN,D,Msgr. McGolrick Park,21,D-21-13,Gray,Gray,,Ground Plane,,at Nassau (Avenue) / Henry (Street) ,Running,Runs From,,40.725397,-73.943297 BROOKLYN,D,Msgr. McGolrick Park,21,D-21-14,Gray,Cinnamon,,Ground Plane,,,Running,Indifferent,,40.725197,-73.943273 BROOKLYN,D,McCarren Park,22,D-22-01,Cinnamon,White,,Ground Plane,,,Eating,Indifferent,,40.72167,-73.953364 BROOKLYN,D,McCarren Park,22,D-22-02,Gray,White,,Ground Plane,,,Eating,Approaches,,40.721768,-73.953192 BROOKLYN,D,McCarren Park,22,D-22-03,Gray,White,,Ground Plane,,,Running,Runs From,Ran in from baseball field,40.721662,-73.953278 BROOKLYN,D,McCarren Park,22,D-22-04,Gray,Cinnamon,,Above Ground,,,Climbing,Runs From,,40.721857,-73.953139 BROOKLYN,D,McCarren Park,22,D-22-05,Cinnamon,,,Ground Plane,,,Running,Approaches,Running around,40.721941,-73.952947 BROOKLYN,D,McCarren Park,22,D-22-06,Cinnamon,,,Above Ground,,,Climbing,Approaches,Perched up came close to us!,40.722039,-73.952796 BROOKLYN,D,McCarren Park,22,D-22-07,Cinnamon,,,Ground Plane,,,Chasing,Approaches,Skinny tail was in the baseball field,40.72147,-73.952857 BROOKLYN,D,McCarren Park,22,D-22-08,Cinnamon,White,,Ground Plane,,,Running,Runs From,,40.721713,-73.95305 BROOKLYN,D,McCarren Park,22,D-22-09,Gray,Gray,,"Ground Plane, Specific Location",,In a trash and metal heap next to baseball field,"Eating, Foraging",Indifferent,,40.721933,-73.953147 BROOKLYN,D,McCarren Park,22,D-22-10,Gray,"Cinnamon, White",,"Above Ground, Specific Location",12,in tree,Climbing,Runs From,Ran up a tree,40.722283,-73.953115 BROOKLYN,D,McCarren Park,22,D-22-11,Gray,Gray,,Ground Plane,,,Running,Runs From,Ran out of park,40.722698,-73.953198 BROOKLYN,D,McCarren Park,22,D-22-12,Gray,White,,Ground Plane,,,"Eating, Foraging",Indifferent,Birds walking nearby,40.722819,-73.952095 BROOKLYN,D,McCarren Park,22,D-22-13,Gray,White,,Above Ground,,,Climbing,Indifferent,Ran from ground to tree,40.722966,-73.951987 BROOKLYN,D,McCarren Park,22,D-22-14,Cinnamon,White,,"Above Ground, Specific Location",3,in short tree,"Climbing, Sitting in short tree",Indifferent,,40.723136,-73.951794 BROOKLYN,D,McCarren Park,22,D-22-15,Gray,White,,"Above Ground, Specific Location",,in tree,Eating,Indifferent,,40.723071,-73.951697 BROOKLYN,D,McCarren Park,22,D-22-16,Cinnamon,Gray,,"Ground Plane, Specific Location",,below park benches,"Foraging, Jumping",Indifferent,Great jumper,40.723006,-73.951655 BROOKLYN,D,McCarren Park,22,D-22-17,Gray,"Cinnamon, White",,Above Ground,9,,Chilling,Indifferent,"Perched on branch, just hanging out",40.722962,-73.951752 BROOKLYN,D,McCarren Park,22,D-22-18,Cinnamon,Cinnamon,,Above Ground,14,,Hanging,Indifferent,Perched on branch,40.722603,-73.951449 BROOKLYN,D,McCarren Park,22,D-22-19,Cinnamon,"Gray, White",,Above Ground,20,,"Running, Climbing",,"Very small, climbed from one tree to another",40.721247,-73.951609 BROOKLYN,D,McCarren Park,22,D-22-20,Gray,"Cinnamon, White",,Above Ground,75,,Climbing,Indifferent,"Small, on tree on branch, two others below it",40.720606,-73.952769 BROOKLYN,D,McCarren Park,22,D-22-21,Gray,"Cinnamon, White",,Above Ground,15,,"Chasing, Climbing",Indifferent,"Started in middle of tree, started chasing others up in branches, jumped from branch to branch",40.720582,-73.952694 BROOKLYN,D,McCarren Park,22,D-22-22,Gray,"Cinnamon, White",,Above Ground,20,,Climbing,Indifferent,One of three together on a tree,40.720533,-73.95272 BROOKLYN,D,McCarren Park,22,D-22-23,Gray,White,,Above Ground,20,,Climbing,Indifferent,Jumped from one tree to next,40.720488,-73.952806 BROOKLYN,D,McCarren Park,22,D-22-24,Gray,White,,Ground Plane,,,"Eating, Foraging",Indifferent,Dog chased it up a tree,40.720458,-73.954244 BROOKLYN,D,McCarren Park,22,D-22-25,Gray,"Cinnamon, White",,Ground Plane,,,Foraging,Skittish to humans,,40.720018,-73.953442 BROOKLYN,D,McCarren Park,22,D-22-26,Gray,White,,Ground Plane,,,"Running, Foraging",Indifferent,Fast,40.720026,-73.953652 BROOKLYN,D,McCarren Park,22,D-22-27,Gray,Cinnamon,,Ground Plane,,,"Eating (bread crumbs), Foraging",Indifferent,Near a lot of little birds,40.719777,-73.952774 BROOKLYN,D,McCarren Park,22,D-22-28,Gray,White,,Ground Plane,,,Running,Indifferent,Running against fence,40.720114,-73.952768 BROOKLYN,D,McCarren Park,22,D-22-29,Gray,"Cinnamon, White",,Ground Plane,,,Hanging out,Runs From,"Standing at base of tree, then climbed up",40.719944,-73.952505 BROOKLYN,D,McCarren Park,22,D-22-30,Gray,White,,Ground Plane,,,Foraging,Indifferent,,40.720448,-73.952521 BROOKLYN,D,McCarren Park,22,D-22-31,Cinnamon,White,,Ground Plane,,,Foraging,Indifferent,Walking around bushes,40.720412,-73.952353 BROOKLYN,D,McCarren Park,22,D-22-32,Gray,"Cinnamon, White",,Ground Plane,,,Foraging,Indifferent,A little on the robust side,40.720372,-73.952326 BROOKLYN,D,McCarren Park,22,D-22-33,Gray,Cinnamon,,Ground Plane,,,Foraging,Indifferent,Busy digging for something,40.720749,-73.951891 BROOKLYN,D,McCarren Park,22,D-22-34,Cinnamon,Cinnamon,,Above Ground,15,,Sleeping (Dead?),Indifferent,"It almost looks dead. Eyes open, curled up into itself in a nook in a tree with #35.",40.721181,-73.951255 BROOKLYN,D,McCarren Park,22,D-22-35,Cinnamon,Cinnamon,,Above Ground,15,,Sleeping (Dead?),,Curled up together with #34. One big furry ball of squirrel.,40.721181,-73.951255 BROOKLYN,D,McCarren Park,22,D-22-36,Cinnamon,"Gray, Cinnamon",Reddish tail,Ground Plane,,,Eating (tortilla/chip),,Pretty fat,40.72112,-73.95104 BROOKLYN,D,McCarren Park,22,D-22-37,Gray,Gray,,Ground Plane,,,Running,Indifferent,"Turning around, trying to eat",40.721315,-73.950943 BROOKLYN,D,McCarren Park,22,D-22-38,Gray,"Cinnamon, White",,Ground Plane,,,Eating,,Sitting next to #39 and eating,40.721258,-73.950799 BROOKLYN,D,McCarren Park,22,D-22-39,Gray,"Cinnamon, White",,Ground Plane,,,Eating,,Sitting next to #38 and eating,40.721217,-73.95077 BROOKLYN,D,McCarren Park,22,D-22-40,Cinnamon,White,,Ground Plane,,,Foraging,Indifferent,Fluffy,40.721173,-73.950781 BROOKLYN,D,McCarren Park,22,D-22-41,Cinnamon,Cinnamon,,Above Ground,,,"Running, Foraging",Indifferent,Skinny,40.721161,-73.950732 BROOKLYN,D,McCarren Park,22,D-22-42,Gray,Gray,,Above Ground,,,Climbing,Indifferent,Clinging to tree,40.721124,-73.950797 BROOKLYN,D,McCarren Park,22,D-22-43,Gray,White,,Above Ground,10,,"Running, Chasing, Climbing",Indifferent,Playing with another squirrel in a tree,40.721026,-73.950765 BROOKLYN,D,McCarren Park,22,D-22-44,Gray,"Cinnamon, White",,Ground Plane,,,Foraging,Runs From,Ran very quickly,40.719376,-73.952326 \ No newline at end of file diff --git a/crates/goose-bench/src/eval_suites/evaluation.rs b/crates/goose-bench/src/eval_suites/evaluation.rs index c049f4b8..ec4f5059 100644 --- a/crates/goose-bench/src/eval_suites/evaluation.rs +++ b/crates/goose-bench/src/eval_suites/evaluation.rs @@ -35,6 +35,9 @@ pub trait BenchAgent: Send + Sync { // Make get_errors async async fn get_errors(&self) -> Vec; + + // Get token usage information + async fn get_token_usage(&self) -> Option; } #[async_trait] diff --git a/crates/goose-bench/src/eval_suites/metrics.rs b/crates/goose-bench/src/eval_suites/metrics.rs new file mode 100644 index 00000000..ddc4c8eb --- /dev/null +++ b/crates/goose-bench/src/eval_suites/metrics.rs @@ -0,0 +1,105 @@ +use crate::eval_suites::{BenchAgent, EvaluationMetric}; +use goose::message::{Message, MessageContent}; +use std::collections::HashMap; +use std::time::Instant; + +/// Collect baseline metrics including execution time, tool usage, and token count +pub async fn collect_baseline_metrics( + agent: &mut Box, + prompt: String, +) -> (Vec, HashMap) { + // Initialize metrics map + let mut metrics = HashMap::new(); + + // Start timer + let start_time = Instant::now(); + + // Execute prompt + let messages = match agent.prompt(prompt).await { + Ok(msgs) => msgs, + Err(e) => { + metrics.insert( + "prompt_error".to_string(), + EvaluationMetric::String(format!("Error: {}", e)), + ); + Vec::new() + } + }; + + // Calculate execution time + let execution_time = start_time.elapsed(); + metrics.insert( + "prompt_execution_time_seconds".to_string(), + EvaluationMetric::Float(execution_time.as_secs_f64()), + ); + + // Count tool calls + let (total_tool_calls, tool_calls_by_name) = count_tool_calls(&messages); + metrics.insert( + "total_tool_calls".to_string(), + EvaluationMetric::Integer(total_tool_calls), + ); + + // Add tool calls by name metrics + for (tool_name, count) in tool_calls_by_name { + metrics.insert( + format!("tool_calls_{}", tool_name), + EvaluationMetric::Integer(count), + ); + } + + // Get token usage information if available + if let Some(token_count) = agent.get_token_usage().await { + metrics.insert( + "total_tokens".to_string(), + EvaluationMetric::Integer(token_count as i64), + ); + } + + (messages, metrics) +} + +/// Count all tool calls in messages and categorize by tool name +fn count_tool_calls(messages: &[Message]) -> (i64, HashMap) { + let mut total_count = 0; + let mut counts_by_name = HashMap::new(); + + for message in messages { + for content in &message.content { + if let MessageContent::ToolRequest(tool_req) = content { + if let Ok(tool_call) = tool_req.tool_call.as_ref() { + total_count += 1; + + // Count by name + *counts_by_name.entry(tool_call.name.clone()).or_insert(0) += 1; + } + } + } + } + + (total_count, counts_by_name) +} + +/// Convert HashMap of metrics to Vec +pub fn metrics_hashmap_to_vec( + metrics: HashMap, +) -> Vec<(String, EvaluationMetric)> { + metrics.into_iter().collect() +} + +/// Check if a specific tool was used in any of the messages +pub fn used_tool(messages: &[Message], tool_name: &str) -> bool { + messages.iter().any(|msg| { + msg.content.iter().any(|content| { + if let MessageContent::ToolRequest(tool_req) = content { + if let Ok(tool_call) = tool_req.tool_call.as_ref() { + tool_call.name.contains(tool_name) + } else { + false + } + } else { + false + } + }) + }) +} diff --git a/crates/goose-bench/src/eval_suites/mod.rs b/crates/goose-bench/src/eval_suites/mod.rs index 82404e34..0800cb79 100644 --- a/crates/goose-bench/src/eval_suites/mod.rs +++ b/crates/goose-bench/src/eval_suites/mod.rs @@ -1,6 +1,11 @@ mod core; mod evaluation; mod factory; +mod metrics; +mod utils; +mod vibes; pub use evaluation::*; pub use factory::{register_evaluation, EvaluationSuiteFactory}; +pub use metrics::*; +pub use utils::*; diff --git a/crates/goose-bench/src/eval_suites/utils.rs b/crates/goose-bench/src/eval_suites/utils.rs new file mode 100644 index 00000000..d860381b --- /dev/null +++ b/crates/goose-bench/src/eval_suites/utils.rs @@ -0,0 +1,69 @@ +use crate::bench_work_dir::BenchmarkWorkDir; +use anyhow::{Context, Result}; +use goose::message::Message; +use goose::session::storage; +use std::fs::{self, File}; +use std::io::Write; +use std::path::PathBuf; + +/// Write the last agent message to a file +/// Returns the content of the message and an error if writing failed +pub fn write_response_to_file( + messages: &[Message], + _work_dir: &mut BenchmarkWorkDir, // Kept for API compatibility + filename: &str, +) -> Result { + let last_msg = messages + .last() + .ok_or_else(|| anyhow::anyhow!("No messages to write to file"))?; + + let text_content = last_msg.as_concat_text(); + + // Create a file in the current directory + let output_path = PathBuf::from(filename); + + // Create and write to the file + let mut file = File::create(&output_path) + .with_context(|| format!("Failed to create file at {}", output_path.display()))?; + + file.write_all(text_content.as_bytes()) + .with_context(|| format!("Failed to write content to {}", output_path.display()))?; + + Ok(text_content) +} + +/// Copy the most recent session file to the current working directory +/// +/// This function finds the most recent Goose session file (.jsonl) and copies it +/// to the current working directory. Session files are stored by the Goose framework +/// in a platform-specific data directory. +/// +/// # Returns +/// - Ok(session_path) if successfully copied, where session_path is the path to the copied file +/// - Err if any errors occurred during the process +pub fn copy_session_to_cwd() -> Result { + // Try to get the most recent session file + let src_path = storage::get_most_recent_session() + .with_context(|| "Failed to find any recent session files")?; + + // Extract the filename from the path + let filename = src_path + .file_name() + .ok_or_else(|| anyhow::anyhow!("Invalid session filename"))?; + + // Create the destination path in the current directory + let dest_path = PathBuf::from(".").join(filename); + + // Copy the file + fs::copy(&src_path, &dest_path).with_context(|| { + format!( + "Failed to copy from '{}' to '{}'", + src_path.display(), + dest_path.display() + ) + })?; + + println!("Session file copied to: {}", dest_path.display()); + + Ok(dest_path) +} diff --git a/crates/goose-bench/src/eval_suites/vibes/blog_summary.rs b/crates/goose-bench/src/eval_suites/vibes/blog_summary.rs new file mode 100644 index 00000000..d7774d65 --- /dev/null +++ b/crates/goose-bench/src/eval_suites/vibes/blog_summary.rs @@ -0,0 +1,89 @@ +use crate::bench_work_dir::BenchmarkWorkDir; +use crate::eval_suites::{ + collect_baseline_metrics, copy_session_to_cwd, metrics_hashmap_to_vec, write_response_to_file, + BenchAgent, Evaluation, EvaluationMetric, ExtensionRequirements, +}; +use crate::register_evaluation; +use async_trait::async_trait; + +pub struct BlogSummary {} + +impl BlogSummary { + pub fn new() -> Self { + BlogSummary {} + } + + fn check_markdown_numbered_list(&self, text: &str) -> bool { + // Check if all numbers 1-5 exist in markdown numbered list format + (1..=5).all(|n| text.contains(&format!("{}.", n))) + } +} + +#[async_trait] +impl Evaluation for BlogSummary { + async fn run( + &self, + mut agent: Box, + work_dir: &mut BenchmarkWorkDir, + ) -> anyhow::Result> { + println!("BlogSummary - run"); + + // Collect baseline metrics (execution time, token usage, tool calls) + let (response, perf_metrics) = collect_baseline_metrics( + &mut agent, + "What are the top 5 most counterintuitive insights from this blog post? Format your response in Markdown with 5 numbered points (1. 2. 3. 4. 5.) https://huyenchip.com/2025/01/07/agents.html".to_string() + ).await; + + // Write response to file and get the text content + let response_text = + match write_response_to_file(&response, work_dir, "blog_summary_output.txt") { + Ok(text) => text, + Err(e) => { + println!("Warning: Failed to write blog summary output: {}", e); + // If file write fails, still continue with the evaluation + response + .last() + .map_or_else(String::new, |msg| msg.as_concat_text()) + } + }; + + // Convert HashMap to Vec for our metrics + let mut metrics = metrics_hashmap_to_vec(perf_metrics); + + // Check if the content follows the markdown numbered list format + let has_markdown_list = self.check_markdown_numbered_list(&response_text); + metrics.push(( + "valid_markdown_format".to_string(), + EvaluationMetric::Boolean(has_markdown_list), + )); + + // Check if the fetch tool was used + let used_fetch_tool = crate::eval_suites::used_tool(&response, "fetch"); + metrics.push(( + "used_fetch_tool".to_string(), + EvaluationMetric::Boolean(used_fetch_tool), + )); + + // Copy the session file to the current working directory + if let Err(e) = copy_session_to_cwd() { + println!("Warning: Failed to copy session file: {}", e); + } else { + println!("Successfully copied session file to current directory"); + } + + Ok(metrics) + } + + fn name(&self) -> &str { + "blog_summary" + } + + fn required_extensions(&self) -> ExtensionRequirements { + ExtensionRequirements { + builtin: vec!["developer".to_string()], + external: vec!["uvx mcp-server-fetch".to_string()], + } + } +} + +register_evaluation!("vibes", BlogSummary); diff --git a/crates/goose-bench/src/eval_suites/vibes/flappy_bird.rs b/crates/goose-bench/src/eval_suites/vibes/flappy_bird.rs new file mode 100644 index 00000000..0e477240 --- /dev/null +++ b/crates/goose-bench/src/eval_suites/vibes/flappy_bird.rs @@ -0,0 +1,121 @@ +use crate::bench_work_dir::BenchmarkWorkDir; +use crate::eval_suites::{ + collect_baseline_metrics, copy_session_to_cwd, metrics_hashmap_to_vec, BenchAgent, Evaluation, + EvaluationMetric, ExtensionRequirements, +}; +use crate::register_evaluation; +use async_trait::async_trait; +use goose::message::MessageContent; +use mcp_core::role::Role; +use serde_json::{self, Value}; +use std::fs; + +pub struct FlappyBird {} + +impl FlappyBird { + pub fn new() -> Self { + FlappyBird {} + } + + fn check_python_implementation(&self, content: &str) -> bool { + content.contains("import pygame") && + content.contains("pygame.init()") && + content.contains("while") && // Game loop + content.contains("pygame.event.get()") && // Event handling + content.contains("def main") && // Main function + content.contains("if __name__ == '__main__'") // Main guard + } +} + +#[async_trait] +impl Evaluation for FlappyBird { + async fn run( + &self, + mut agent: Box, + work_dir: &mut BenchmarkWorkDir, + ) -> anyhow::Result> { + println!("FlappyBird - run"); + + // Collect baseline metrics (execution time, token usage, tool calls) + let (messages, perf_metrics) = collect_baseline_metrics( + &mut agent, + "Create a Flappy Bird game in Python. Structure the code with a main function and use the if __name__ == '__main__': idiom. You must use pygame. The background color should be a light blue color. Pressing SPACE multiple times will accelerate the bird. The bird's shape should be a red circle. Place on the bottom some land colored as dark yellow chosen. Make a score shown on the top right side. Increment if you pass pipes and don't hit them. Make randomly spaced dark green pipes with enough space. When you lose, show the best score. Make the text inside the screen. Pressing q or Esc will quit the game. Restarting is pressing SPACE again. When trying to run the game, make sure to use pyenv and create the environment in the current working directory. The final game should be written to a file named flappy_bird.py. Remember to use your tools if applicable.".to_string() + ).await; + + // Convert HashMap to Vec for our metrics + let mut metrics = metrics_hashmap_to_vec(perf_metrics); + + // Check if the agent used the text editor tool correctly + let valid_tool_call = messages.iter().any(|msg| { + msg.role == Role::Assistant + && msg.content.iter().any(|content| { + if let MessageContent::ToolRequest(tool_req) = content { + if let Ok(tool_call) = tool_req.tool_call.as_ref() { + // Check tool name and basic parameters + if tool_call.name != "developer__text_editor" { + return false; + } + + // Parse the arguments as JSON + if let Ok(args) = + serde_json::from_value::(tool_call.arguments.clone()) + { + // Only check command is write and correct filename + args.get("command").and_then(Value::as_str) == Some("write") + && args + .get("path") + .and_then(Value::as_str) + .is_some_and(|s| s.contains("flappy_bird.py")) + } else { + false + } + } else { + false + } + } else { + false + } + }) + }); + + metrics.push(( + "used_write_tool".to_string(), + EvaluationMetric::Boolean(valid_tool_call), + )); + + // If tool was used correctly, check the actual file content + if valid_tool_call { + if let Ok(file_path) = work_dir.fs_get("flappy_bird.py".to_string()) { + if let Ok(content) = fs::read_to_string(file_path) { + let valid_implementation = self.check_python_implementation(&content); + metrics.push(( + "valid_implementation".to_string(), + EvaluationMetric::Boolean(valid_implementation), + )); + } + } + } + + // Copy the session file to the current working directory + if let Err(e) = copy_session_to_cwd() { + println!("Warning: Failed to copy session file: {}", e); + } else { + println!("Successfully copied session file to current directory"); + } + + Ok(metrics) + } + + fn name(&self) -> &str { + "flappy_bird" + } + + fn required_extensions(&self) -> ExtensionRequirements { + ExtensionRequirements { + builtin: vec!["developer".to_string()], + external: Vec::new(), + } + } +} + +register_evaluation!("vibes", FlappyBird); diff --git a/crates/goose-bench/src/eval_suites/vibes/goose_wiki.rs b/crates/goose-bench/src/eval_suites/vibes/goose_wiki.rs new file mode 100644 index 00000000..2b8dfe8b --- /dev/null +++ b/crates/goose-bench/src/eval_suites/vibes/goose_wiki.rs @@ -0,0 +1,99 @@ +use crate::bench_work_dir::BenchmarkWorkDir; +use crate::eval_suites::{ + collect_baseline_metrics, copy_session_to_cwd, metrics_hashmap_to_vec, BenchAgent, Evaluation, + EvaluationMetric, ExtensionRequirements, +}; +use crate::register_evaluation; +use async_trait::async_trait; +use goose::message::MessageContent; +use mcp_core::role::Role; +use serde_json::{self, Value}; + +pub struct GooseWiki {} + +impl GooseWiki { + pub fn new() -> Self { + GooseWiki {} + } +} + +#[async_trait] +impl Evaluation for GooseWiki { + async fn run( + &self, + mut agent: Box, + _: &mut BenchmarkWorkDir, + ) -> anyhow::Result> { + println!("GooseWiki - run"); + + // Collect baseline metrics (execution time, token usage, tool calls) + let (messages, perf_metrics) = collect_baseline_metrics( + &mut agent, + "Create a Wikipedia-style web page about Goose (Block's AI agent) in a new index.html file. The page should be a complete, well-structured HTML document with proper head and body sections. Use heading tags (h1, h2, h3) to organize the content into clear sections. Include comprehensive information about Goose organized in a way similar to how Wikipedia presents technical topics. Remember to use your tools if applicable.".to_string() + ).await; + + // Convert HashMap to Vec for our metrics + let mut metrics = metrics_hashmap_to_vec(perf_metrics); + + // Check if the agent used the text editor tool to create index.html + let valid_tool_call = messages.iter().any(|msg| { + msg.role == Role::Assistant && + msg.content.iter().any(|content| { + if let MessageContent::ToolRequest(tool_req) = content { + if let Ok(tool_call) = tool_req.tool_call.as_ref() { + // Check tool name is correct + if tool_call.name != "developer__text_editor" { + return false; + } + + // Parse the arguments as JSON + if let Ok(args) = serde_json::from_value::(tool_call.arguments.clone()) { + // Check command is write and path contains index.html + args.get("command").and_then(Value::as_str) == Some("write") && + args.get("path").and_then(Value::as_str).is_some_and(|s| s.contains("index.html")) && + // Verify file_text contains basic HTML structure + args.get("file_text").and_then(Value::as_str).is_some_and(|s| { + s.contains("") && + s.contains("") && + s.contains("") + }) + } else { + false + } + } else { + false + } + } else { + false + } + }) + }); + + metrics.push(( + "created_valid_html".to_string(), + EvaluationMetric::Boolean(valid_tool_call), + )); + + // Copy the session file to the current working directory + if let Err(e) = copy_session_to_cwd() { + println!("Warning: Failed to copy session file: {}", e); + } else { + println!("Successfully copied session file to current directory"); + } + + Ok(metrics) + } + + fn name(&self) -> &str { + "goose_wiki" + } + + fn required_extensions(&self) -> ExtensionRequirements { + ExtensionRequirements { + builtin: vec!["developer".to_string()], + external: Vec::new(), + } + } +} + +register_evaluation!("vibes", GooseWiki); diff --git a/crates/goose-bench/src/eval_suites/vibes/mod.rs b/crates/goose-bench/src/eval_suites/vibes/mod.rs new file mode 100644 index 00000000..b09844a9 --- /dev/null +++ b/crates/goose-bench/src/eval_suites/vibes/mod.rs @@ -0,0 +1,5 @@ +mod blog_summary; +mod flappy_bird; +mod goose_wiki; +mod restaurant_research; +mod squirrel_census; diff --git a/crates/goose-bench/src/eval_suites/vibes/restaurant_research.rs b/crates/goose-bench/src/eval_suites/vibes/restaurant_research.rs new file mode 100644 index 00000000..beb20dfc --- /dev/null +++ b/crates/goose-bench/src/eval_suites/vibes/restaurant_research.rs @@ -0,0 +1,109 @@ +use crate::bench_work_dir::BenchmarkWorkDir; +use crate::eval_suites::{ + collect_baseline_metrics, copy_session_to_cwd, metrics_hashmap_to_vec, write_response_to_file, + BenchAgent, Evaluation, EvaluationMetric, ExtensionRequirements, +}; +use crate::register_evaluation; +use async_trait::async_trait; + +pub struct RestaurantResearch {} + +impl RestaurantResearch { + pub fn new() -> Self { + RestaurantResearch {} + } + + fn check_markdown_bullets(&self, text: &str) -> bool { + // Check if there's at least one bullet point and proper markdown formatting + text.contains("- ") || text.contains("* ") + } + + fn count_bullet_points(&self, text: &str) -> i64 { + // Count total bullet points (either - or * style) + let dash_bullets = text.matches("- ").count(); + let star_bullets = text.matches("* ").count(); + (dash_bullets + star_bullets) as i64 + } +} + +#[async_trait] +impl Evaluation for RestaurantResearch { + async fn run( + &self, + mut agent: Box, + work_dir: &mut BenchmarkWorkDir, + ) -> anyhow::Result> { + println!("RestaurantResearch - run"); + + // Collect baseline metrics (execution time, token usage, tool calls) + let (response, perf_metrics) = collect_baseline_metrics( + &mut agent, + "Search the internet for and provide a current, detailed list of the best Sichuanese restaurants specifically in the East Village neighborhood of NYC. Format your response in Markdown using bullet points (either - or *) for each restaurant. For each restaurant include: +- Restaurant name and what they're known for +- Signature dishes +- Atmosphere/setting +- Any relevant details about reservations or dining experience +- What distinguishes them from others + +Present the information in order of significance or quality. Focus specifically on Sichuanese establishments, not general Chinese restaurants. If you encounter a page you cannot access, try another one. Do not ask me for confirmation just conduct the searches yourself until you find the needed information. Remember to use your tools if applicable.".to_string() + ).await; + + // Write response to file and get the text content + let response_text = + match write_response_to_file(&response, work_dir, "restaurant_research_output.txt") { + Ok(text) => text, + Err(e) => { + println!("Warning: Failed to write restaurant research output: {}", e); + // If file write fails, still continue with the evaluation + response + .last() + .map_or_else(String::new, |msg| msg.as_concat_text()) + } + }; + + // Convert HashMap to Vec for our metrics + let mut metrics = metrics_hashmap_to_vec(perf_metrics); + + // Check markdown formatting + let has_markdown_bullets = self.check_markdown_bullets(&response_text); + let bullet_count = self.count_bullet_points(&response_text); + + metrics.push(( + "valid_markdown_format".to_string(), + EvaluationMetric::Boolean(has_markdown_bullets), + )); + metrics.push(( + "bullet_point_count".to_string(), + EvaluationMetric::Integer(bullet_count), + )); + + // Check if the fetch tool was used + let used_fetch_tool = crate::eval_suites::used_tool(&response, "fetch"); + metrics.push(( + "used_fetch_tool".to_string(), + EvaluationMetric::Boolean(used_fetch_tool), + )); + + // Copy the session file to the current working directory + if let Err(e) = copy_session_to_cwd() { + println!("Warning: Failed to copy session file: {}", e); + } else { + println!("Successfully copied session file to current directory"); + } + + Ok(metrics) + } + + fn name(&self) -> &str { + "restaurant_research" + } + + fn required_extensions(&self) -> ExtensionRequirements { + ExtensionRequirements { + builtin: vec!["developer".to_string()], + external: vec!["uvx mcp-server-fetch".to_string()], + } + } +} + +register_evaluation!("vibes", RestaurantResearch); diff --git a/crates/goose-bench/src/eval_suites/vibes/squirrel_census.rs b/crates/goose-bench/src/eval_suites/vibes/squirrel_census.rs new file mode 100644 index 00000000..4e48be03 --- /dev/null +++ b/crates/goose-bench/src/eval_suites/vibes/squirrel_census.rs @@ -0,0 +1,177 @@ +use crate::bench_work_dir::BenchmarkWorkDir; +use crate::eval_suites::{ + collect_baseline_metrics, copy_session_to_cwd, metrics_hashmap_to_vec, BenchAgent, Evaluation, + EvaluationMetric, ExtensionRequirements, +}; +use crate::register_evaluation; +use async_trait::async_trait; +use goose::message::MessageContent; +use mcp_core::role::Role; +use serde_json::{self, Value}; + +pub struct SquirrelCensus {} + +impl SquirrelCensus { + pub fn new() -> Self { + SquirrelCensus {} + } + + fn check_analysis_results(&self, text: &str) -> (bool, bool, bool) { + let text_lower = text.to_lowercase(); + let has_central_manhattan = + text_lower.contains("central manhattan") && text.contains("174"); + let has_tompkins = text_lower.contains("tompkins square park") && text.contains("59"); + let has_gray = text_lower.contains("gray") || text_lower.contains("grey"); + (has_central_manhattan, has_tompkins, has_gray) + } +} + +#[async_trait] +impl Evaluation for SquirrelCensus { + async fn run( + &self, + mut agent: Box, + work_dir: &mut BenchmarkWorkDir, + ) -> anyhow::Result> { + println!("SquirrelCensus - run"); + + // Get the path to the squirrel data file + let squirrel_data_path = match work_dir.fs_get("./assets/squirrel-data.csv".to_string()) { + Ok(file) => file, + Err(_) => return Err(anyhow::anyhow!("Could not find squirrel-data.csv file")), + }; + + println!("squirrel_data_path: {:?}", squirrel_data_path); + + // Collect baseline metrics (execution time, token usage, tool calls) + let (messages, perf_metrics) = collect_baseline_metrics( + &mut agent, + format!( + "Create a Python script called analyze_squirrels.py that analyzes the CSV file at {}. Do not ask for any clarification or further instructions - proceed with the implementation as specified below. + +The script should use pandas to answer these specific questions: +1. Which area (Area column) has the most squirrels spotted? For this area, what is the most common Primary Fur Color of squirrels? +2. Which specific park location (Park Name column) has the most squirrels spotted? For this location, what is the most common Primary Fur Color of squirrels? + +The script should: +- Use pandas to read and analyze the data +- Print results in EXACTLY this format (including the markers): + [AREA_RESULT] - squirrels spotted + [AREA_COLOR] Most common fur color: ( squirrels) + [PARK_RESULT] - squirrels spotted + [PARK_COLOR] Most common fur color: ( squirrels) + +After writing the script, run it using python3 and show the results. Do not ask for confirmation or further instructions. Remember to use your tools if applicable.", + squirrel_data_path.display() + ) + ).await; + + // Convert HashMap to Vec for our metrics + let mut metrics = metrics_hashmap_to_vec(perf_metrics); + + // Check if agent wrote the Python script + let wrote_script = messages.iter().any(|msg| { + msg.role == Role::Assistant + && msg.content.iter().any(|content| { + if let MessageContent::ToolRequest(tool_req) = content { + if let Ok(tool_call) = tool_req.tool_call.as_ref() { + if tool_call.name != "developer__text_editor" { + return false; + } + + if let Ok(args) = + serde_json::from_value::(tool_call.arguments.clone()) + { + args.get("command").and_then(Value::as_str) == Some("write") + && args + .get("path") + .and_then(Value::as_str) + .is_some_and(|s| s.contains("analyze_squirrels.py")) + } else { + false + } + } else { + false + } + } else { + false + } + }) + }); + + // Check if agent ran the script + let ran_script = messages.iter().any(|msg| { + msg.role == Role::Assistant + && msg.content.iter().any(|content| { + if let MessageContent::ToolRequest(tool_req) = content { + if let Ok(tool_call) = tool_req.tool_call.as_ref() { + if tool_call.name != "developer__shell" { + return false; + } + + if let Ok(args) = + serde_json::from_value::(tool_call.arguments.clone()) + { + args.get("command") + .and_then(Value::as_str) + .is_some_and(|s| { + s.contains("python") && s.contains("analyze_squirrels.py") + }) + } else { + false + } + } else { + false + } + } else { + false + } + }) + }); + + // Check the last message for correct results + let correct_results = if let Some(last_msg) = messages.last() { + let text_content = last_msg.as_concat_text(); + let (has_central_manhattan, has_tompkins, has_gray) = + self.check_analysis_results(&text_content); + has_central_manhattan && has_tompkins && has_gray + } else { + false + }; + + metrics.push(( + "wrote_script".to_string(), + EvaluationMetric::Boolean(wrote_script), + )); + metrics.push(( + "ran_script".to_string(), + EvaluationMetric::Boolean(ran_script), + )); + metrics.push(( + "correct_results".to_string(), + EvaluationMetric::Boolean(correct_results), + )); + + // Copy the session file to the current working directory + if let Err(e) = copy_session_to_cwd() { + println!("Warning: Failed to copy session file: {}", e); + } else { + println!("Successfully copied session file to current directory"); + } + + Ok(metrics) + } + + fn name(&self) -> &str { + "squirrel_census" + } + + fn required_extensions(&self) -> ExtensionRequirements { + ExtensionRequirements { + builtin: vec!["developer".to_string()], + external: Vec::new(), + } + } +} + +register_evaluation!("vibes", SquirrelCensus); diff --git a/crates/goose-cli/src/commands/bench.rs b/crates/goose-cli/src/commands/bench.rs index 677547cf..4c96f74d 100644 --- a/crates/goose-cli/src/commands/bench.rs +++ b/crates/goose-cli/src/commands/bench.rs @@ -56,6 +56,20 @@ impl BenchAgent for BenchSession { let errors = self.errors.lock().await; errors.clone() } + + async fn get_token_usage(&self) -> Option { + // Get token usage from the provider + if let Ok(usage) = self.session.get_usage().await { + // Sum up total tokens across all usage entries + let total_tokens = usage + .iter() + .map(|u| u.usage.total_tokens.unwrap_or(0)) + .sum(); + Some(total_tokens) + } else { + None + } + } } // Wrapper struct to implement BenchAgent for Arc> @@ -72,6 +86,11 @@ impl BenchAgent for BenchAgentWrapper { let session = self.0.lock().await; session.get_errors().await } + + async fn get_token_usage(&self) -> Option { + let session = self.0.lock().await; + session.get_token_usage().await + } } async fn run_eval( diff --git a/crates/goose-cli/src/session/mod.rs b/crates/goose-cli/src/session/mod.rs index ba251026..1f7a5fd4 100644 --- a/crates/goose-cli/src/session/mod.rs +++ b/crates/goose-cli/src/session/mod.rs @@ -16,6 +16,7 @@ use goose::agents::extension::{Envs, ExtensionConfig}; use goose::agents::{Agent, SessionConfig}; use goose::config::Config; use goose::message::{Message, MessageContent}; +use goose::providers::base::ProviderUsage; use goose::session; use mcp_core::handler::ToolError; use mcp_core::prompt::PromptMessage; @@ -643,4 +644,9 @@ impl Session { pub fn message_history(&self) -> Vec { self.messages.clone() } + + /// Get the token usage from the agent + pub async fn get_usage(&self) -> Result> { + Ok(self.agent.usage().await) + } } diff --git a/scripts/run-benchmarks.sh b/scripts/run-benchmarks.sh index 169caeb3..42c07479 100755 --- a/scripts/run-benchmarks.sh +++ b/scripts/run-benchmarks.sh @@ -12,6 +12,8 @@ function show_usage() { echo " -s, --suites Comma-separated list of benchmark suites to run (e.g., 'core,small_models')" echo " -o, --output-dir Directory to store benchmark results (default: './benchmark-results')" echo " -d, --debug Use debug build instead of release build" + echo " -t, --toolshim Enable toolshim mode by setting GOOSE_TOOLSHIM=1" + echo " -m, --toolshim-model Set the toolshim model (sets GOOSE_TOOLSHIM_MODEL)" echo " -h, --help Show this help message" echo "" echo "Example:" @@ -23,6 +25,8 @@ PROVIDER_MODELS="" SUITES="" OUTPUT_DIR="./benchmark-results" DEBUG_MODE=false +TOOLSHIM=false +TOOLSHIM_MODEL="" while [[ $# -gt 0 ]]; do case "$1" in @@ -42,6 +46,14 @@ while [[ $# -gt 0 ]]; do DEBUG_MODE=true shift ;; + -t|--toolshim) + TOOLSHIM=true + shift + ;; + -m|--toolshim-model) + TOOLSHIM_MODEL="$2" + shift 2 + ;; -h|--help) show_usage exit 0 @@ -80,6 +92,12 @@ if [ "$DEBUG_MODE" = true ]; then else echo "Mode: Release" >> "$SUMMARY_FILE" fi +if [ "$TOOLSHIM" = true ]; then + echo "Toolshim: Enabled" >> "$SUMMARY_FILE" + if [[ -n "$TOOLSHIM_MODEL" ]]; then + echo "Toolshim Model: $TOOLSHIM_MODEL" >> "$SUMMARY_FILE" + fi +fi echo "" >> "$SUMMARY_FILE" # Determine which binary to use @@ -140,6 +158,14 @@ for ((i=0; i<$COUNT; i++)); do export GOOSE_PROVIDER="$provider" export GOOSE_MODEL="$model" + # Set toolshim environment variables if enabled + if [ "$TOOLSHIM" = true ]; then + export GOOSE_TOOLSHIM=1 + if [[ -n "$TOOLSHIM_MODEL" ]]; then + export GOOSE_TOOLSHIM_MODEL="$TOOLSHIM_MODEL" + fi + fi + # Run the benchmark and save results to JSON echo "Running benchmark for $provider/$model with suites: $SUITES" OUTPUT_FILE="$OUTPUT_DIR/${provider}-${model}.json" @@ -174,6 +200,7 @@ for ((i=0; i<$COUNT; i++)); do TOTAL_METRICS=0 FAILED_METRICS=0 PASSED_METRICS=0 + OTHER_METRICS=0 TOTAL_ERRORS=0 # Process each suite @@ -194,14 +221,28 @@ for ((i=0; i<$COUNT; i++)); do ERROR_COUNT=$(jq ".suites[$j].evaluations[$k].errors | length" "$OUTPUT_FILE") TOTAL_ERRORS=$((TOTAL_ERRORS + ERROR_COUNT)) - # Check for failures in metrics + # Count boolean metrics (passed and failed) + BOOLEAN_COUNT=$(jq -r ".suites[$j].evaluations[$k].metrics[] | + select(.[1].Boolean != null) | .[0]" "$OUTPUT_FILE" | wc -l | tr -d ' ') + + # Count failed boolean metrics FAILURES=$(jq -r ".suites[$j].evaluations[$k].metrics[] | select( .[1].Boolean == false or .[1].Boolean == \"false\" or .[1].Boolean == 0 or .[1].Boolean == \"0\" ) | .[0]" "$OUTPUT_FILE" | wc -l | tr -d ' ') + # Count passed boolean metrics + PASSES=$((BOOLEAN_COUNT - FAILURES)) + + # Count non-boolean metrics + NON_BOOLEAN=$((METRIC_COUNT - BOOLEAN_COUNT)) + + # Update global counters + FAILED_METRICS=$((FAILED_METRICS + FAILURES)) + PASSED_METRICS=$((PASSED_METRICS + PASSES)) + OTHER_METRICS=$((OTHER_METRICS + NON_BOOLEAN)) + if [ "$FAILURES" -gt 0 ] || [ "$ERROR_COUNT" -gt 0 ]; then - FAILED_METRICS=$((FAILED_METRICS + FAILURES)) echo " ❌ $EVAL_NAME:" >> "$ANALYSIS_FILE" if [ "$FAILURES" -gt 0 ]; then @@ -221,7 +262,7 @@ for ((i=0; i<$COUNT; i++)); do jq -r ".suites[$j].evaluations[$k].errors[] | \" [\(.level)] \(.message)\"" "$OUTPUT_FILE" >> "$ANALYSIS_FILE" fi else - PASSED_METRICS=$((PASSED_METRICS + METRIC_COUNT)) + # This line is no longer needed since we count passes/fails/others individually echo " ✅ $EVAL_NAME: All metrics passed, no errors" >> "$ANALYSIS_FILE" fi done @@ -235,8 +276,15 @@ for ((i=0; i<$COUNT; i++)); do echo "Total Metrics: $TOTAL_METRICS" >> "$ANALYSIS_FILE" echo "Passed Metrics: $PASSED_METRICS" >> "$ANALYSIS_FILE" echo "Failed Metrics: $FAILED_METRICS" >> "$ANALYSIS_FILE" + echo "Other Metrics: $OTHER_METRICS" >> "$ANALYSIS_FILE" echo "Total Errors: $TOTAL_ERRORS" >> "$ANALYSIS_FILE" + # Verification of metrics counting + COUNTED_METRICS=$((PASSED_METRICS + FAILED_METRICS + OTHER_METRICS)) + if [ "$COUNTED_METRICS" -ne "$TOTAL_METRICS" ]; then + echo "⚠️ Metrics counting discrepancy: $COUNTED_METRICS counted vs $TOTAL_METRICS total" >> "$ANALYSIS_FILE" + fi + # Determine success/failure if [ "$FAILED_METRICS" -gt 0 ] || [ "$TOTAL_ERRORS" -gt 0 ]; then if [ "$FAILED_METRICS" -gt 0 ]; then