diff --git a/.gitignore b/.gitignore index a583f8c4d85f7834c727b0dd3d11e1216c5fcd90..71c7f10a3efe591ef1baa2dee89ec8c6e18c36b1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +.DS_Store # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] @@ -163,3 +164,4 @@ cython_debug/ .claudesync .aider* +llm_cache.db \ No newline at end of file diff --git a/enum_classifier_results.json b/enum_classifier_results.json new file mode 100644 index 0000000000000000000000000000000000000000..3a822ecb7476a9188dfc2fe1f156351882be6535 --- /dev/null +++ b/enum_classifier_results.json @@ -0,0 +1,1450 @@ +[ + { + "profile_name": "Siddharth Saxena", + "correct_enums": 22, + "total_enums": 23, + "accuracy": 0.9565217391304348, + "additional_enums_in_actual": 1, + "comparisons": { + "Education: Brown University": { + "expected": "Undergraduate (Completed)", + "actual": "Undergraduate (Completed)", + "confidence": 1.0, + "reasoning": "The specific Linkedin education item indicates that the candidate completed a Bachelor of Arts (B.A.) in Architectural Studies from Brown University between 2011 and 2015. This aligns perfectly with the educational background provided in the full resume, confirming that the undergraduate degree is completed. Therefore, it is classified as UNDERGRAD_COMPLETED." + }, + "Education: Horace Mann School": { + "expected": "Primary / Secondary School", + "actual": "Primary / Secondary School", + "confidence": 1.0, + "reasoning": "The specific Linkedin education item refers to Horace Mann School, which is a primary/secondary educational institution. The resume confirms that the candidate attended Horace Mann School from 2004 to 2011, indicating completion of secondary education. Therefore, this educational item clearly fits the PRIMARY_SECONDARY category." + }, + "Job: Investor at Vedanta Capital": { + "primary_job_type": { + "expected": "Full-time", + "actual": "Full-time", + "confidence": 1.0, + "reasoning": "The specific work experience item indicates that the candidate is currently employed as an Investor at Vedanta Capital, which is a full-time position. This aligns with the full-time employment indicated in the resume. The responsibilities involve investing in start-ups and venture funds, which clearly falls under the category of INVESTING as it involves analyzing and making investment decisions. Therefore, the primary job type is FULL_TIME and the secondary job type is INVESTING." + }, + "secondary_job_type": { + "expected": "Investing", + "actual": "Investing", + "confidence": 1.0, + "reasoning": "The specific work experience item indicates that the candidate is currently employed as an Investor at Vedanta Capital, which is a full-time position. This aligns with the full-time employment indicated in the resume. The responsibilities involve investing in start-ups and venture funds, which clearly falls under the category of INVESTING as it involves analyzing and making investment decisions. Therefore, the primary job type is FULL_TIME and the secondary job type is INVESTING." + }, + "investing_focus_asset_class": { + "expected": "Multi-stage VC", + "actual": "Multi-stage VC", + "confidence": 0.8, + "reasoning": "The specific work experience at Vedanta Capital involves investing in start-ups across various sectors, which aligns with early-stage venture capital. Additionally, the mention of investing in \"venture and growth equity funds\" indicates a broader investment strategy that encompasses both early and later-stage investments. This combination supports the classification as MULTI_STAGE_VC, as it reflects a focus on multiple stages of venture capital investment." + }, + "investing_focus_sector": { + "expected": "Generalist", + "actual": "Generalist", + "confidence": 0.6, + "reasoning": "The specific work experience as an Investor at Vedanta Capital involves investing in a diverse range of start-ups, including robotics, defense tech, VR/AR, space, AI/ML, and health tech. This broad focus across multiple sectors suggests a generalist approach rather than a specialization in one particular area. However, the inclusion of health tech does indicate some sector-specific focus, which is why the confidence level is not higher." + } + }, + "Job: Associate at Vedanta Capital": { + "primary_job_type": { + "expected": "Full-time", + "actual": "Full-time", + "confidence": 1.0, + "reasoning": "The work experience item indicates that the candidate held a full-time position as an Associate at Vedanta Capital, which aligns with the classification of FULL_TIME for the Primary Job Type. The responsibilities described involve investing in start-ups and venture funds, which fits the INVESTING category for the Secondary Job Type, as it directly relates to professional investing roles. This classification is supported by the candidate's resume, which also lists similar responsibilities in their current role as an Investor at Vedanta Capital." + }, + "secondary_job_type": { + "expected": "Investing", + "actual": "Investing", + "confidence": 1.0, + "reasoning": "The work experience item indicates that the candidate held a full-time position as an Associate at Vedanta Capital, which aligns with the classification of FULL_TIME for the Primary Job Type. The responsibilities described involve investing in start-ups and venture funds, which fits the INVESTING category for the Secondary Job Type, as it directly relates to professional investing roles. This classification is supported by the candidate's resume, which also lists similar responsibilities in their current role as an Investor at Vedanta Capital." + }, + "investing_focus_asset_class": { + "expected": "Multi-stage VC", + "actual": "Multi-stage VC", + "confidence": 0.8, + "reasoning": "The specific work experience as an Associate at Vedanta Capital involved investing in start-ups across various sectors, which indicates a focus on early-stage investments. However, the mention of investing in \"venture and growth equity funds\" suggests a broader approach that includes later-stage investments as well. This aligns with the MULTI_STAGE_VC classification, as it encompasses investments across different stages of company development. The confidence level is high due to the clear indication of both early-stage and growth equity investments in the description." + }, + "investing_focus_sector": { + "expected": "Generalist", + "actual": "Generalist", + "confidence": 0.6, + "reasoning": "The specific work experience as an Associate at Vedanta Capital involves investing in a diverse range of start-ups, including robotics, defense tech, VR/AR, space, AI/ML, and health tech. This broad focus across multiple sectors indicates a generalist approach rather than a specialization in one particular sector. However, the inclusion of health tech does suggest some focus on healthcare, but the overall diversity of sectors leads to a classification as GENERALIST. The confidence level is moderate due to the presence of health tech, which could imply a healthcare focus, but the overall range of sectors dilutes that specificity." + } + }, + "Job: Advisor at Carbon Origins Inc.": { + "primary_job_type": { + "expected": "Advisory / Board / Independent Investor", + "actual": "Advisory / Board / Independent Investor", + "confidence": 0.9, + "reasoning": "The work experience as an Advisor at Carbon Origins Inc. is classified as PART_TIME, which aligns with the PRIMARY_JOB_TYPE of ADVISORY_BOARD_INVESTOR due to the advisory nature of the role. The candidate's resume indicates they are currently an Advisor at Carbon Origins Inc., which is a part-time position, fitting the criteria for advisory roles. The secondary job type is classified as OTHER since there are no specific investment or consulting activities mentioned in the description, and it does not fit into the other defined categories." + }, + "secondary_job_type": { + "expected": "Other", + "actual": "Other", + "confidence": 0.9, + "reasoning": "The work experience as an Advisor at Carbon Origins Inc. is classified as PART_TIME, which aligns with the PRIMARY_JOB_TYPE of ADVISORY_BOARD_INVESTOR due to the advisory nature of the role. The candidate's resume indicates they are currently an Advisor at Carbon Origins Inc., which is a part-time position, fitting the criteria for advisory roles. The secondary job type is classified as OTHER since there are no specific investment or consulting activities mentioned in the description, and it does not fit into the other defined categories." + } + }, + "Job: Co-Founder & COO at Reactiv": { + "primary_job_type": { + "expected": "Full-time", + "actual": "Full-time", + "confidence": 0.9, + "reasoning": "The work experience as Co-Founder & COO at Reactiv is classified as FULL_TIME because it is a full-time position held for a significant duration (over a year and a half). The role involves leadership and operational responsibilities in a startup environment, which aligns with the entrepreneurial nature of the position. For the secondary job type, it is classified as ENTREPRENEUR_FOUNDER since the candidate co-founded the company, which fits the definition of founding or co-founding a company. This classification is supported by the description of the role and the context of the candidate's overall work experience." + }, + "secondary_job_type": { + "expected": "Entrepreneur / Founder", + "actual": "Entrepreneur / Founder", + "confidence": 0.9, + "reasoning": "The work experience as Co-Founder & COO at Reactiv is classified as FULL_TIME because it is a full-time position held for a significant duration (over a year and a half). The role involves leadership and operational responsibilities in a startup environment, which aligns with the entrepreneurial nature of the position. For the secondary job type, it is classified as ENTREPRENEUR_FOUNDER since the candidate co-founded the company, which fits the definition of founding or co-founding a company. This classification is supported by the description of the role and the context of the candidate's overall work experience." + } + }, + "Job: Consultant, Technical & Product at Reactiv": { + "primary_job_type": { + "expected": "Advisory / Board / Independent Investor", + "actual": "Full-time", + "confidence": 0.9, + "reasoning": "The work experience as a \"Consultant, Technical & Product\" at Reactiv lasted from December 2019 to October 2020, which is a duration of nearly 11 months. This duration suggests it is not an internship, and since it is a consulting role within a company, it is classified as FULL_TIME. The role involves technical and product consulting, which aligns with the consulting category for secondary job type, as it likely involves advising on product development and technical strategies." + }, + "secondary_job_type": { + "expected": null, + "actual": "Consulting", + "confidence": 0.9, + "reasoning": "The work experience as a \"Consultant, Technical & Product\" at Reactiv lasted from December 2019 to October 2020, which is a duration of nearly 11 months. This duration suggests it is not an internship, and since it is a consulting role within a company, it is classified as FULL_TIME. The role involves technical and product consulting, which aligns with the consulting category for secondary job type, as it likely involves advising on product development and technical strategies." + } + }, + "Job: Founder & CEO at Oblix": { + "primary_job_type": { + "expected": "Full-time", + "actual": "Full-time", + "confidence": 1.0, + "reasoning": "The work experience as Founder & CEO at Oblix is classified as FULL_TIME because it spans over five years, indicating a long-term commitment typical of a full-time role. Additionally, the role involves significant responsibilities associated with leading a start-up, which aligns with the characteristics of a full-time position. For the secondary job type, it is classified as ENTREPRENEUR_FOUNDER since the candidate founded and led the company, which fits the definition of founding or co-founding a company. This classification is supported by the description of Oblix as an angel-funded start-up and the candidate's role in its development." + }, + "secondary_job_type": { + "expected": "Entrepreneur / Founder", + "actual": "Entrepreneur / Founder", + "confidence": 1.0, + "reasoning": "The work experience as Founder & CEO at Oblix is classified as FULL_TIME because it spans over five years, indicating a long-term commitment typical of a full-time role. Additionally, the role involves significant responsibilities associated with leading a start-up, which aligns with the characteristics of a full-time position. For the secondary job type, it is classified as ENTREPRENEUR_FOUNDER since the candidate founded and led the company, which fits the definition of founding or co-founding a company. This classification is supported by the description of Oblix as an angel-funded start-up and the candidate's role in its development." + } + }, + "Job: Acting Chief Strategy Officer at GAROU": { + "primary_job_type": { + "expected": "Full-time", + "actual": "Full-time", + "confidence": 0.9, + "reasoning": "The role of Acting Chief Strategy Officer at GAROU lasted for four months, which is a relatively short duration and suggests it was a temporary position rather than a full-time role. Given that it was a leadership position in a company, it does not fit the criteria for an internship or extracurricular activity. Therefore, it is classified as FULL_TIME. In terms of secondary job type, the responsibilities included developing business strategies and managing a business development pipeline, which aligns with CORPDEV_STRATEGY as it involves strategic planning and development within a corporate context." + }, + "secondary_job_type": { + "expected": "CorpDev / Strategy", + "actual": "CorpDev / Strategy", + "confidence": 0.9, + "reasoning": "The role of Acting Chief Strategy Officer at GAROU lasted for four months, which is a relatively short duration and suggests it was a temporary position rather than a full-time role. Given that it was a leadership position in a company, it does not fit the criteria for an internship or extracurricular activity. Therefore, it is classified as FULL_TIME. In terms of secondary job type, the responsibilities included developing business strategies and managing a business development pipeline, which aligns with CORPDEV_STRATEGY as it involves strategic planning and development within a corporate context." + } + }, + "Job: Intern at Architizer": { + "primary_job_type": { + "expected": "Internship", + "actual": "Internship", + "confidence": 0.9, + "reasoning": "The specific work experience item is classified as an INTERNSHIP because it explicitly states the title \"Intern\" and the duration of the role was from June 2014 to August 2014, which is a typical summer internship timeframe. Additionally, the candidate was still in school during this period, as they graduated from Brown University in 2015. The secondary job type is classified as OTHER because the role involved developing a project related to architecture and data management, which does not fit into the defined secondary categories like INVESTING or CONSULTING." + }, + "secondary_job_type": { + "expected": "Other", + "actual": "Other", + "confidence": 0.9, + "reasoning": "The specific work experience item is classified as an INTERNSHIP because it explicitly states the title \"Intern\" and the duration of the role was from June 2014 to August 2014, which is a typical summer internship timeframe. Additionally, the candidate was still in school during this period, as they graduated from Brown University in 2015. The secondary job type is classified as OTHER because the role involved developing a project related to architecture and data management, which does not fit into the defined secondary categories like INVESTING or CONSULTING." + } + }, + "Job: Co-Founder at CasualEat": { + "primary_job_type": { + "expected": "Full-time", + "actual": "Full-time", + "confidence": 0.9, + "reasoning": "The work experience as a Co-Founder at CasualEat is classified as FULL_TIME because it involved developing a business model and managing a team, indicating a significant commitment of time and effort typical of a full-time role. Additionally, the role is classified as ENTREPRENEUR_FOUNDER since it involves founding a company, which aligns with the secondary job type category for entrepreneurial activities. The duration of the role from April 2012 to September 2012 also supports the classification as a full-time commitment rather than a short-term internship or extracurricular activity." + }, + "secondary_job_type": { + "expected": "Entrepreneur / Founder", + "actual": "Entrepreneur / Founder", + "confidence": 0.9, + "reasoning": "The work experience as a Co-Founder at CasualEat is classified as FULL_TIME because it involved developing a business model and managing a team, indicating a significant commitment of time and effort typical of a full-time role. Additionally, the role is classified as ENTREPRENEUR_FOUNDER since it involves founding a company, which aligns with the secondary job type category for entrepreneurial activities. The duration of the role from April 2012 to September 2012 also supports the classification as a full-time commitment rather than a short-term internship or extracurricular activity." + } + } + } + }, + { + "profile_name": "Peter Tagliaferri", + "correct_enums": 12, + "total_enums": 14, + "accuracy": 0.8571428571428571, + "additional_enums_in_actual": 3, + "comparisons": { + "Education: Georgetown University": { + "expected": "Undergraduate (Completed)", + "actual": "Undergraduate (Completed)", + "confidence": 1.0, + "reasoning": "The educational item from Linkedin clearly states that the candidate has a Bachelor of Arts (BA) in Economics from Georgetown University, which matches the completed undergraduate degree listed in the full resume. The presence of honors and activities further supports the classification as a completed undergraduate degree." + }, + "Education: San Ramon Valley High School": { + "expected": "Primary / Secondary School", + "actual": "Primary / Secondary School", + "confidence": 1.0, + "reasoning": "The specific Linkedin education item indicates that the candidate has a \"High School Diploma\" from \"San Ramon Valley High School,\" which directly corresponds to the educational background listed in the full resume. This clearly fits the category of PRIMARY_SECONDARY, as it pertains to secondary education. The confidence level is high because the information is consistent and directly matches the resume details." + }, + "Job: Senior Associate at Accel-KKR": { + "primary_job_type": { + "expected": "Full-time", + "actual": "Full-time", + "confidence": 1.0, + "reasoning": "The work experience item indicates that the candidate is currently employed as a Senior Associate at Accel-KKR, which is classified as full-time employment. This aligns with the resume, where the candidate has a history of working in investment roles, including private equity. Given that the position is in a private equity firm and the candidate's previous roles also include investment professional positions, the secondary job type is classified as INVESTING." + }, + "secondary_job_type": { + "expected": "Investing", + "actual": "Investing", + "confidence": 1.0, + "reasoning": "The work experience item indicates that the candidate is currently employed as a Senior Associate at Accel-KKR, which is classified as full-time employment. This aligns with the resume, where the candidate has a history of working in investment roles, including private equity. Given that the position is in a private equity firm and the candidate's previous roles also include investment professional positions, the secondary job type is classified as INVESTING." + }, + "investing_focus_asset_class": { + "expected": "Private Equity / Buyouts", + "actual": "Private Equity / Buyouts", + "confidence": 0.7, + "reasoning": "The candidate's role as a Senior Associate at Accel-KKR, a firm known for its focus on both venture capital and private equity, suggests involvement in private equity investments. Given the candidate's previous experience in private equity at Accel-KKR and the nature of the firm, it is reasonable to classify this specific work experience under private equity buyouts. However, the lack of detailed responsibilities in the description lowers the confidence slightly." + }, + "investing_focus_sector": { + "expected": null, + "actual": "Generalist", + "confidence": 0.4, + "reasoning": "The specific work experience item indicates the candidate is a Senior Associate at Accel-KKR, a firm involved in venture capital and private equity. However, there is no detailed description of the sectors or industries the candidate focuses on within this role. Given the nature of private equity and venture capital, which often spans multiple sectors, I classified it as GENERALIST. The lack of specific sector focus in the description leads to a lower confidence level." + } + }, + "Job: Investment Professional at Accel-KKR": { + "primary_job_type": { + "expected": "Full-time", + "actual": "Full-time", + "confidence": 1.0, + "reasoning": "The work experience item indicates that the candidate held the position of \"Investment Professional\" at Accel-KKR from November 2020 to February 2024, which is a full-time role. This aligns with the classification of FULL_TIME for the Primary Job Type. For the Secondary Job Type, since the role is within a private equity firm and involves investment activities, it should be classified as INVESTING. This is supported by the candidate's previous roles in investment banking and private equity, indicating a strong focus on investment-related activities throughout their career." + }, + "secondary_job_type": { + "expected": "Investing", + "actual": "Investing", + "confidence": 1.0, + "reasoning": "The work experience item indicates that the candidate held the position of \"Investment Professional\" at Accel-KKR from November 2020 to February 2024, which is a full-time role. This aligns with the classification of FULL_TIME for the Primary Job Type. For the Secondary Job Type, since the role is within a private equity firm and involves investment activities, it should be classified as INVESTING. This is supported by the candidate's previous roles in investment banking and private equity, indicating a strong focus on investment-related activities throughout their career." + }, + "investing_focus_asset_class": { + "expected": "Private Equity / Buyouts", + "actual": "Multi-stage VC", + "confidence": 0.7, + "reasoning": "The candidate worked as an Investment Professional at Accel-KKR, a firm that operates in both venture capital and private equity. Given the nature of Accel-KKR's investment strategy, which typically includes investments across various stages of company development, this experience aligns with the MULTI_STAGE_VC classification. However, the lack of specific details in the job description about the types of investments made during this period leads to a slightly lower confidence level." + }, + "investing_focus_sector": { + "expected": null, + "actual": "Generalist", + "confidence": 0.4, + "reasoning": "The specific work experience item indicates the candidate worked as an Investment Professional at Accel-KKR, a firm focused on Venture Capital & Private Equity. However, the description does not provide specific details about the sectors they invested in during this role. Given that Accel-KKR operates across various sectors in private equity, the classification leans towards GENERALIST, but the lack of specific sector focus in the description leads to a lower confidence level." + } + }, + "Job: Investment Banking Professional at Stifel Financial Corp.": { + "primary_job_type": { + "expected": "Full-time", + "actual": "Full-time", + "confidence": 1.0, + "reasoning": "The work experience item is for the role of \"Investment Banking Professional\" at Stifel Financial Corp., which is clearly a full-time position given the duration from July 2018 to October 2020. This aligns with the candidate's previous experience in investment banking, indicating a consistent career path in that field. Therefore, the Primary Job Type is classified as FULL_TIME. For the Secondary Job Type, since the role is specifically in investment banking, it is classified as INVESTMENT_BANKING." + }, + "secondary_job_type": { + "expected": "Investment Banking", + "actual": "Investment Banking", + "confidence": 1.0, + "reasoning": "The work experience item is for the role of \"Investment Banking Professional\" at Stifel Financial Corp., which is clearly a full-time position given the duration from July 2018 to October 2020. This aligns with the candidate's previous experience in investment banking, indicating a consistent career path in that field. Therefore, the Primary Job Type is classified as FULL_TIME. For the Secondary Job Type, since the role is specifically in investment banking, it is classified as INVESTMENT_BANKING." + }, + "investment_banking_group": { + "expected": null, + "actual": "Generalist", + "confidence": 0.7, + "reasoning": "The candidate worked as an \"Investment Banking Professional\" at Stifel Financial Corp., a firm known for providing a wide range of investment banking services. The lack of specific details in the job description suggests a generalist role, as the candidate's experience does not indicate a focus on a particular sector or type of transaction. Additionally, the candidate's subsequent roles in private equity and investment at Accel-KKR further support a broad investment banking background rather than specialization in a specific group." + } + }, + "Job: None at Accel-KKR": { + "primary_job_type": { + "expected": "Internship", + "actual": "Internship", + "confidence": 0.9, + "reasoning": "The work experience at Accel-KKR as a Private Equity professional lasted for two months in the summer of 2017, which fits the criteria for an INTERNSHIP. The candidate's resume shows a progression in investment roles, indicating a focus on finance and investment, which aligns with the secondary job type of INVESTING due to the nature of private equity work." + }, + "secondary_job_type": { + "expected": "Investing", + "actual": "Investing", + "confidence": 0.9, + "reasoning": "The work experience at Accel-KKR as a Private Equity professional lasted for two months in the summer of 2017, which fits the criteria for an INTERNSHIP. The candidate's resume shows a progression in investment roles, indicating a focus on finance and investment, which aligns with the secondary job type of INVESTING due to the nature of private equity work." + } + }, + "Job: Analyst at Securian Financial Group": { + "primary_job_type": { + "expected": "Internship", + "actual": "Internship", + "confidence": 0.9, + "reasoning": "The work experience as an Analyst at Securian Financial Group lasted from June 2016 to December 2016, which is a duration of six months. Given that this role occurred before the candidate's first full-time position and does not explicitly state it was an internship, it is classified as an INTERNSHIP. The role is also in the financial services sector, which aligns with the candidate's subsequent positions in investment banking and private equity, indicating a focus on financial analysis and support roles, thus classifying it as BACK_OFFICE for the secondary job type." + }, + "secondary_job_type": { + "expected": "Other - [ ]", + "actual": "Back Office", + "confidence": 0.9, + "reasoning": "The work experience as an Analyst at Securian Financial Group lasted from June 2016 to December 2016, which is a duration of six months. Given that this role occurred before the candidate's first full-time position and does not explicitly state it was an internship, it is classified as an INTERNSHIP. The role is also in the financial services sector, which aligns with the candidate's subsequent positions in investment banking and private equity, indicating a focus on financial analysis and support roles, thus classifying it as BACK_OFFICE for the secondary job type." + } + } + } + }, + { + "profile_name": "Chanson Zhao", + "correct_enums": 16, + "total_enums": 19, + "accuracy": 0.8421052631578947, + "additional_enums_in_actual": 4, + "comparisons": { + "Education: University of Southern California": { + "expected": "Undergraduate (Completed)", + "actual": "Undergraduate (Completed)", + "confidence": 1.0, + "reasoning": "The educational item from Linkedin clearly states that the candidate earned a Bachelor of Science (BS) degree in Business Administration and Management from the University of Southern California, with a completion period from 2018 to 2022. This aligns perfectly with the information in the full resume, which also confirms the completion of the same degree during the same timeframe. Therefore, it is classified as a completed undergraduate degree." + }, + "Education: Valencia High School": { + "expected": "Primary / Secondary School", + "actual": "Primary / Secondary School", + "confidence": 1.0, + "reasoning": "The specific Linkedin education item clearly indicates that the candidate attended Valencia High School from 2014 to 2018, which falls under the category of primary or secondary education. The full resume also confirms this educational background, further supporting the classification as PRIMARY_SECONDARY." + }, + "Job: Investment Banking Analyst at Barclays": { + "primary_job_type": { + "expected": "Full-time", + "actual": "Full-time", + "confidence": 1.0, + "reasoning": "The specific work experience item indicates that the candidate is currently employed as an Investment Banking Analyst at Barclays, which is a full-time position. This aligns with the full resume, where the candidate's role at Barclays is also classified as an Investment Banking Analyst. Given the nature of the role and the employment type specified, it is classified as FULL_TIME for the primary job type. For the secondary job type, since the role is in investment banking, it is classified as INVESTMENT_BANKING." + }, + "secondary_job_type": { + "expected": "Investment Banking", + "actual": "Investment Banking", + "confidence": 1.0, + "reasoning": "The specific work experience item indicates that the candidate is currently employed as an Investment Banking Analyst at Barclays, which is a full-time position. This aligns with the full resume, where the candidate's role at Barclays is also classified as an Investment Banking Analyst. Given the nature of the role and the employment type specified, it is classified as FULL_TIME for the primary job type. For the secondary job type, since the role is in investment banking, it is classified as INVESTMENT_BANKING." + }, + "investment_banking_group": { + "expected": "Technology / Software / TMT", + "actual": "Technology / Software / TMT", + "confidence": 0.9, + "reasoning": "The candidate's current role as an Investment Banking Analyst at Barclays is specifically described as \"Technology Coverage,\" indicating a focus on the technology sector. Additionally, their summer analyst position at Barclays also involved technology coverage, reinforcing their specialization in this area. Given these details, it is highly likely that they are part of the Technology, Media, and Telecom group." + } + }, + "Job: Portfolio Manager - Undergraduate Student Investment Fund (USIF) at University of Southern California - Marshall School of Business": { + "primary_job_type": { + "expected": "Extracurricular", + "actual": "Internship", + "confidence": 0.9, + "reasoning": "The work experience as a Portfolio Manager at the Undergraduate Student Investment Fund (USIF) is classified as an INTERNSHIP because it is a role held during the candidate's time at university, which aligns with the criteria for internships. The position is also unpaid and related to their education, further supporting this classification. For the secondary job type, it is classified as INVESTING due to the nature of managing an investment fund, which involves analyzing and making decisions on investments. This aligns with the candidate's experience in investment banking and private equity, reinforcing the investing focus." + }, + "secondary_job_type": { + "expected": "Investing", + "actual": "Investing", + "confidence": 0.9, + "reasoning": "The work experience as a Portfolio Manager at the Undergraduate Student Investment Fund (USIF) is classified as an INTERNSHIP because it is a role held during the candidate's time at university, which aligns with the criteria for internships. The position is also unpaid and related to their education, further supporting this classification. For the secondary job type, it is classified as INVESTING due to the nature of managing an investment fund, which involves analyzing and making decisions on investments. This aligns with the candidate's experience in investment banking and private equity, reinforcing the investing focus." + } + }, + "Job: Investment Banking Summer Analyst at Barclays": { + "primary_job_type": { + "expected": "Internship", + "actual": "Internship", + "confidence": 1.0, + "reasoning": "The specific work experience item is classified as an INTERNSHIP because it is explicitly labeled as \"Investment Banking Summer Analyst\" and occurred over a short duration from June 2021 to August 2021, which aligns with typical summer internship timelines. The primary job type reflects the nature of the employment as a temporary position for a student. For the secondary job type, it is classified as INVESTMENT_BANKING since the role is within an investment banking context at Barclays, a financial services firm, focusing on technology coverage. This aligns with the candidate's full resume, which also lists a current position as an Investment Banking Analyst at Barclays." + }, + "secondary_job_type": { + "expected": "Investment Banking", + "actual": "Investment Banking", + "confidence": 1.0, + "reasoning": "The specific work experience item is classified as an INTERNSHIP because it is explicitly labeled as \"Investment Banking Summer Analyst\" and occurred over a short duration from June 2021 to August 2021, which aligns with typical summer internship timelines. The primary job type reflects the nature of the employment as a temporary position for a student. For the secondary job type, it is classified as INVESTMENT_BANKING since the role is within an investment banking context at Barclays, a financial services firm, focusing on technology coverage. This aligns with the candidate's full resume, which also lists a current position as an Investment Banking Analyst at Barclays." + } + }, + "Job: VP Finance at Delta Sigma Pi": { + "primary_job_type": { + "expected": "Extracurricular", + "actual": "Extracurricular", + "confidence": 0.9, + "reasoning": "The work experience as VP Finance at Delta Sigma Pi is a leadership role within a professional fraternity, which typically involves managing finances and budgeting for the organization. Given that this position is unpaid and relates to a student organization, it fits the EXTRACURRICULAR category for the Primary Job Type. For the Secondary Job Type, it does not align with any of the professional categories such as INVESTING or CONSULTING, so it is classified as OTHER." + }, + "secondary_job_type": { + "expected": null, + "actual": "Other", + "confidence": 0.9, + "reasoning": "The work experience as VP Finance at Delta Sigma Pi is a leadership role within a professional fraternity, which typically involves managing finances and budgeting for the organization. Given that this position is unpaid and relates to a student organization, it fits the EXTRACURRICULAR category for the Primary Job Type. For the Secondary Job Type, it does not align with any of the professional categories such as INVESTING or CONSULTING, so it is classified as OTHER." + } + }, + "Job: Senior Vice President at Trojan Investing Society": { + "primary_job_type": { + "expected": "Extracurricular", + "actual": "Extracurricular", + "confidence": 0.9, + "reasoning": "The work experience as Senior Vice President at Trojan Investing Society is classified as EXTRACURRICULAR because it is an unpaid position within a student organization related to finance, which aligns with the candidate's educational background. The role does not involve formal employment or compensation, and it is directly tied to the candidate's university experience. The secondary job type is classified as OTHER since it does not fit into the defined categories of investing, consulting, or any other specific professional role, but rather represents a leadership position in a student organization." + }, + "secondary_job_type": { + "expected": null, + "actual": "Other", + "confidence": 0.9, + "reasoning": "The work experience as Senior Vice President at Trojan Investing Society is classified as EXTRACURRICULAR because it is an unpaid position within a student organization related to finance, which aligns with the candidate's educational background. The role does not involve formal employment or compensation, and it is directly tied to the candidate's university experience. The secondary job type is classified as OTHER since it does not fit into the defined categories of investing, consulting, or any other specific professional role, but rather represents a leadership position in a student organization." + } + }, + "Job: Mentorship Program at Trojan Investing Society": { + "primary_job_type": { + "expected": "Extracurricular", + "actual": "Extracurricular", + "confidence": 0.9, + "reasoning": "The specific work experience item titled \"Mentorship Program\" at the Trojan Investing Society is likely an extracurricular activity, as it involves mentorship and is associated with a student organization rather than a formal job. The candidate's resume indicates significant involvement in student organizations related to finance, which supports this classification. Additionally, the absence of compensation or formal employment type further suggests it is not a full-time or internship role. Therefore, the primary job type is classified as EXTRACURRICULAR. The secondary job type is classified as OTHER, as it does not fit into the defined categories of investing, consulting, or any other specific role type." + }, + "secondary_job_type": { + "expected": null, + "actual": "Other", + "confidence": 0.9, + "reasoning": "The specific work experience item titled \"Mentorship Program\" at the Trojan Investing Society is likely an extracurricular activity, as it involves mentorship and is associated with a student organization rather than a formal job. The candidate's resume indicates significant involvement in student organizations related to finance, which supports this classification. Additionally, the absence of compensation or formal employment type further suggests it is not a full-time or internship role. Therefore, the primary job type is classified as EXTRACURRICULAR. The secondary job type is classified as OTHER, as it does not fit into the defined categories of investing, consulting, or any other specific role type." + } + }, + "Job: Leaders Program at Trojan Investing Society": { + "primary_job_type": { + "expected": "Extracurricular", + "actual": "Extracurricular", + "confidence": 0.9, + "reasoning": "The work experience item titled \"Leaders Program\" at Trojan Investing Society is a short-term role that took place from August 2019 to November 2019, which aligns with the characteristics of an extracurricular activity rather than a formal job. The Trojan Investing Society is a student organization, and this role likely involved leadership or participation in activities related to finance, making it an EXTRACURRICULAR experience. Since there is no indication of professional investing or banking activities in this role, it does not fit into any secondary job type categories, thus classified as OTHER." + }, + "secondary_job_type": { + "expected": null, + "actual": "Other", + "confidence": 0.9, + "reasoning": "The work experience item titled \"Leaders Program\" at Trojan Investing Society is a short-term role that took place from August 2019 to November 2019, which aligns with the characteristics of an extracurricular activity rather than a formal job. The Trojan Investing Society is a student organization, and this role likely involved leadership or participation in activities related to finance, making it an EXTRACURRICULAR experience. Since there is no indication of professional investing or banking activities in this role, it does not fit into any secondary job type categories, thus classified as OTHER." + } + }, + "Job: Private Equity Intern at Teleo Capital": { + "primary_job_type": { + "expected": "Internship", + "actual": "Internship", + "confidence": 0.9, + "reasoning": "The work experience item is classified as an INTERNSHIP because it is explicitly labeled as such and falls within the timeframe of a typical summer internship (May to August 2020). The candidate's role as a Private Equity Intern at TELEO Capital aligns with their educational background and prior experience in finance. For the secondary job type, it is classified as INVESTING since the role is in private equity, which involves analyzing and managing investments in companies. This aligns with the candidate's experience in investment banking and their involvement in finance-related organizations." + }, + "secondary_job_type": { + "expected": "Investing", + "actual": "Investing", + "confidence": 0.9, + "reasoning": "The work experience item is classified as an INTERNSHIP because it is explicitly labeled as such and falls within the timeframe of a typical summer internship (May to August 2020). The candidate's role as a Private Equity Intern at TELEO Capital aligns with their educational background and prior experience in finance. For the secondary job type, it is classified as INVESTING since the role is in private equity, which involves analyzing and managing investments in companies. This aligns with the candidate's experience in investment banking and their involvement in finance-related organizations." + } + }, + "Job: VP Operations at Business Technology Group": { + "primary_job_type": { + "expected": "Internship", + "actual": "Full-time", + "confidence": 0.9, + "reasoning": "The work experience as VP Operations at Business Technology Group lasted from August 2019 to January 2020, which is a duration of about 5 months. Given that this role is not explicitly stated as an internship and is a leadership position within a consulting firm, it does not fit the criteria for an INTERNSHIP. Therefore, it is classified as FULL_TIME. The secondary job type is classified as CONSULTING since the company operates in the management consulting industry, and the role likely involved strategic operations management." + }, + "secondary_job_type": { + "expected": "Other", + "actual": "Consulting", + "confidence": 0.9, + "reasoning": "The work experience as VP Operations at Business Technology Group lasted from August 2019 to January 2020, which is a duration of about 5 months. Given that this role is not explicitly stated as an internship and is a leadership position within a consulting firm, it does not fit the criteria for an INTERNSHIP. Therefore, it is classified as FULL_TIME. The secondary job type is classified as CONSULTING since the company operates in the management consulting industry, and the role likely involved strategic operations management." + } + }, + "Job: Consultant at USC Association of Innovative Marketing (AIM) Consulting": { + "primary_job_type": { + "expected": "Extracurricular", + "actual": "Extracurricular", + "confidence": 0.9, + "reasoning": "The specific work experience as a Consultant at USC Association of Innovative Marketing (AIM) Consulting lasted from February 2019 to August 2019, which is a duration of over six months. Given that this role is associated with a university organization and involves consulting, it aligns with the candidate's educational background and is likely an extracurricular activity rather than a full-time job. Therefore, it should be classified as EXTRACURRICULAR. The role does not fit into any of the secondary job type categories since it does not involve professional investing, banking, or consulting in a corporate context, so it is classified as OTHER." + }, + "secondary_job_type": { + "expected": "Other", + "actual": "Other", + "confidence": 0.9, + "reasoning": "The specific work experience as a Consultant at USC Association of Innovative Marketing (AIM) Consulting lasted from February 2019 to August 2019, which is a duration of over six months. Given that this role is associated with a university organization and involves consulting, it aligns with the candidate's educational background and is likely an extracurricular activity rather than a full-time job. Therefore, it should be classified as EXTRACURRICULAR. The role does not fit into any of the secondary job type categories since it does not involve professional investing, banking, or consulting in a corporate context, so it is classified as OTHER." + } + } + } + }, + { + "profile_name": "Hansae Catlett", + "correct_enums": 13, + "total_enums": 23, + "accuracy": 0.5652173913043478, + "additional_enums_in_actual": 7, + "comparisons": { + "Education: Stanford University Graduate School of Business": { + "expected": "MBA", + "actual": "MBA", + "confidence": 1.0, + "reasoning": "The specific Linkedin education item clearly states that the candidate obtained a Master of Business Administration (M.B.A.) from Stanford University Graduate School of Business between 2016 and 2019. This aligns perfectly with the information in the full resume, which also lists the same degree and institution. The details provided in both sources confirm the completion of the MBA, making this classification accurate and certain." + }, + "Education: Stanford University": { + "expected": "graduate_school", + "actual": "Graduate School", + "confidence": 1.0, + "reasoning": "The specific Linkedin education item indicates that the candidate earned a Master of Public Policy (M.P.P.) from Stanford University, which aligns with the completed graduate degree listed in the full resume. This classification fits the GRAD_SCHOOL category as it is a Master's degree in a field other than Business Administration or Law. The details provided confirm the completion of this degree during the specified period." + }, + "Education: Harvard University": { + "expected": "Undergraduate (Completed)", + "actual": "Undergraduate (Completed)", + "confidence": 1.0, + "reasoning": "The specific Linkedin education item details a Bachelor of Arts degree in Biomedical Engineering and Philosophy from Harvard University, which aligns perfectly with the information provided in the full resume. The resume confirms the completion of this undergraduate degree, as it states the same degree and institution, along with the graduation period from 2007 to 2011. Therefore, it is classified as a completed undergraduate degree." + }, + "Education: UNSW": { + "expected": "Undergraduate (Incomplete)", + "actual": "Undergraduate (Incomplete)", + "confidence": 0.9, + "reasoning": "The specific Linkedin education item indicates a \"Study Abroad\" program at the University of New South Wales, which aligns with the incomplete undergraduate studies mentioned in the resume. The resume lists a completed undergraduate degree from Harvard University, but the study abroad experience does not constitute a completed degree itself, thus fitting the category of UNDERGRAD_INCOMPLETE. The confidence level is high due to the clear distinction between completed and incomplete educational experiences." + }, + "Job: Partner at HOF Capital": { + "primary_job_type": { + "expected": "Full-time", + "actual": "Full-time", + "confidence": 0.9, + "reasoning": "The work experience as a Partner at HOF Capital is a full-time role in a venture capital firm, which aligns with the candidate's ongoing career in investing. Given that the position is recent and does not indicate any part-time or temporary nature, it is classified as FULL_TIME. Additionally, since HOF Capital operates in the venture capital space, this role is classified under INVESTING as it involves professional investing activities." + }, + "secondary_job_type": { + "expected": "Investing", + "actual": "Investing", + "confidence": 0.9, + "reasoning": "The work experience as a Partner at HOF Capital is a full-time role in a venture capital firm, which aligns with the candidate's ongoing career in investing. Given that the position is recent and does not indicate any part-time or temporary nature, it is classified as FULL_TIME. Additionally, since HOF Capital operates in the venture capital space, this role is classified under INVESTING as it involves professional investing activities." + }, + "investing_focus_asset_class": { + "expected": "Multi-stage VC", + "actual": "Multi-stage VC", + "confidence": 0.7, + "reasoning": "The candidate's role as a Partner at HOF Capital, a firm that operates in the venture capital space, suggests a focus on investments across various stages. While the specific work experience item does not provide detailed descriptions of the investments made at HOF Capital, the candidate's previous experience as a Co-Founder and General Partner at The MBA Fund, which targets early-stage founders, indicates a broader engagement with multiple stages of venture capital. This leads to a classification of MULTI_STAGE_VC, though the lack of specific details in the HOF Capital description lowers the confidence slightly." + }, + "investing_focus_sector": { + "expected": null, + "actual": "Generalist", + "confidence": 0.4, + "reasoning": "The specific work experience item indicates the candidate is a Partner at HOF Capital, a venture capital firm. However, the description does not provide specific details about the sectors HOF Capital focuses on. Given the candidate's broader experience in venture capital and their involvement with various startups, it suggests a generalist approach rather than a focus on a specific sector. The lack of detailed information about the firm's investment focus leads to a lower confidence level in this classification." + } + }, + "Job: Co-Founder, General Partner at The MBA Fund": { + "primary_job_type": { + "expected": "Other", + "actual": "Full-time", + "confidence": 0.9, + "reasoning": "The work experience at The MBA Fund is classified as FULL_TIME because it is a co-founding role in a venture capital firm, indicating ongoing and regular employment. The responsibilities described involve significant engagement with startups and investment activities, which aligns with a full-time commitment. For the secondary job type, it is classified as INVESTING since the role involves backing and supporting startup founders, which is characteristic of venture capital activities. This is supported by the description of the firm and the candidate's role in making investments in various companies." + }, + "secondary_job_type": { + "expected": "Investing", + "actual": "Investing", + "confidence": 0.9, + "reasoning": "The work experience at The MBA Fund is classified as FULL_TIME because it is a co-founding role in a venture capital firm, indicating ongoing and regular employment. The responsibilities described involve significant engagement with startups and investment activities, which aligns with a full-time commitment. For the secondary job type, it is classified as INVESTING since the role involves backing and supporting startup founders, which is characteristic of venture capital activities. This is supported by the description of the firm and the candidate's role in making investments in various companies." + }, + "investing_focus_asset_class": { + "expected": "Early-stage VC", + "actual": "Early-stage VC", + "confidence": 0.9, + "reasoning": "The MBA Fund focuses on backing founders who are just getting started, particularly students, alumni, and dropouts from top universities. This aligns with early-stage venture capital investments, as indicated by their description of taking \"the riskiest leaps\" with new founders. The specific investments listed, such as Jeeves and Dandy, further support this classification as they are typically associated with early-stage companies." + }, + "investing_focus_sector": { + "expected": null, + "actual": "Generalist", + "confidence": 0.7, + "reasoning": "The MBA Fund is a venture capital firm that invests in a variety of startups, primarily from top universities, indicating a broad focus across multiple sectors. The description highlights backing founders from diverse backgrounds and industries, which aligns with a generalist approach rather than a specific sector focus. However, the lack of detailed information on the specific sectors of the portfolio companies leads to a moderate confidence level." + } + }, + "Job: Vice President at Bessemer Venture Partners": { + "primary_job_type": { + "expected": "Full-time", + "actual": "Full-time", + "confidence": 1.0, + "reasoning": "The work experience as Vice President at Bessemer Venture Partners is classified as FULL_TIME because it is a full-time position that spans over four years, which aligns with the primary job type criteria. Additionally, the role is in a venture capital firm, which fits the INVESTING category for secondary job type due to the nature of the work involving investment activities. The candidate's extensive background in venture capital, including their role as Co-Founder and General Partner at The MBA Fund, further supports this classification." + }, + "secondary_job_type": { + "expected": "Investing", + "actual": "Investing", + "confidence": 1.0, + "reasoning": "The work experience as Vice President at Bessemer Venture Partners is classified as FULL_TIME because it is a full-time position that spans over four years, which aligns with the primary job type criteria. Additionally, the role is in a venture capital firm, which fits the INVESTING category for secondary job type due to the nature of the work involving investment activities. The candidate's extensive background in venture capital, including their role as Co-Founder and General Partner at The MBA Fund, further supports this classification." + }, + "investing_focus_asset_class": { + "expected": "Multi-stage VC", + "actual": "Multi-stage VC", + "confidence": 0.8, + "reasoning": "The candidate served as Vice President at Bessemer Venture Partners, a well-known venture capital firm that typically invests across various stages of company development. While the specific work experience item does not provide detailed descriptions of the investments made during this time, Bessemer is recognized for its multi-stage investment strategy, which includes early-stage and growth-stage companies. This aligns with the MULTI_STAGE_VC classification, and the candidate's role suggests involvement in a range of investment activities." + }, + "investing_focus_sector": { + "expected": null, + "actual": "Generalist", + "confidence": 0.4, + "reasoning": "The specific work experience as Vice President at Bessemer Venture Partners does not provide detailed information about the sectors the firm focuses on. While Bessemer is known for investing across various sectors, the lack of specific sector focus in the description leads to uncertainty. Therefore, I classified it as GENERALIST, but with a lower confidence level due to insufficient evidence to pinpoint a more specific sector." + } + }, + "Job: Venture Associate at Omidyar Network": { + "primary_job_type": { + "expected": "Internship", + "actual": "Other", + "confidence": 0.9, + "reasoning": "The work experience as a Board Observer at Rillavoice is a role that typically involves providing guidance and oversight to the company's management team, which aligns with advisory responsibilities. Given that this position is not a full-time employment role and does not fit the criteria for an internship, it is classified as OTHER for the primary job type. For the secondary job type, since the role involves oversight in a software company and is not directly related to investing or banking, it fits best under the category of OTHER as well." + }, + "secondary_job_type": { + "expected": "Investing", + "actual": "Other", + "confidence": 0.9, + "reasoning": "The work experience as a Board Observer at Rillavoice is a role that typically involves providing guidance and oversight to the company's management team, which aligns with advisory responsibilities. Given that this position is not a full-time employment role and does not fit the criteria for an internship, it is classified as OTHER for the primary job type. For the secondary job type, since the role involves oversight in a software company and is not directly related to investing or banking, it fits best under the category of OTHER as well." + } + }, + "Job: Venture Associate at Slow Ventures": { + "primary_job_type": { + "expected": "Internship", + "actual": "Other", + "confidence": 0.9, + "reasoning": "The work experience at Archy is classified as an INVESTING role because the title \"Investor\" indicates a professional investing position, which aligns with the candidate's experience in venture capital as seen in their role as Vice President at Bessemer Venture Partners and Co-Founder at The MBA Fund. The duration from 2022 to 2024 suggests a longer-term commitment, which is typical for investing roles rather than internships. The primary job type is classified as OTHER since there is no indication of regular employment or a formal structure like full-time or internship; it appears to be a role that fits more into the category of independent investing activities." + }, + "secondary_job_type": { + "expected": "Investing", + "actual": "Investing", + "confidence": 0.9, + "reasoning": "The work experience at Archy is classified as an INVESTING role because the title \"Investor\" indicates a professional investing position, which aligns with the candidate's experience in venture capital as seen in their role as Vice President at Bessemer Venture Partners and Co-Founder at The MBA Fund. The duration from 2022 to 2024 suggests a longer-term commitment, which is typical for investing roles rather than internships. The primary job type is classified as OTHER since there is no indication of regular employment or a formal structure like full-time or internship; it appears to be a role that fits more into the category of independent investing activities." + }, + "investing_focus_asset_class": { + "expected": null, + "actual": "Early-stage VC", + "confidence": 0.6, + "reasoning": "The specific work experience as an Investor at Archy, a company in the computer software industry with a staff count of 11-50, suggests involvement in early-stage investments. The candidate's broader experience at The MBA Fund, which focuses on backing founders from top universities and emphasizes taking risks with early-stage companies, supports this classification. However, the lack of detailed description for the Archy role leads to a moderate confidence level." + }, + "investing_focus_sector": { + "expected": null, + "actual": "Technology / Software / TMT", + "confidence": 0.8, + "reasoning": "The specific work experience at Archy is classified under the \"Computer Software\" industry, which aligns with the TECHNOLOGY_SOFTWARE_TMT sector. The candidate's role as an Investor suggests a focus on technology-driven companies, particularly in software, which is further supported by their broader experience in venture capital and investments in tech-related startups. The confidence level is high due to the clear indication of the company's industry, although the lack of a detailed description limits absolute certainty." + } + }, + "Job: Venture Investor & Consultant at The Bridgespan Group": { + "primary_job_type": { + "expected": "Full-time", + "actual": "Advisory / Board / Independent Investor", + "confidence": 0.9, + "reasoning": "The role of Board Observer at MaintainX is a part-time advisory position rather than a full-time job, which aligns with the characteristics of an advisory role. Given that the candidate has been involved in this position from 2021 to 2024, it does not fit the criteria for an internship or full-time employment. The secondary job type is classified as OTHER since it does not fit into the specific categories of investing, consulting, or any other defined roles." + }, + "secondary_job_type": { + "expected": "Early-stage VC", + "actual": "Other", + "confidence": 0.9, + "reasoning": "The role of Board Observer at MaintainX is a part-time advisory position rather than a full-time job, which aligns with the characteristics of an advisory role. Given that the candidate has been involved in this position from 2021 to 2024, it does not fit the criteria for an internship or full-time employment. The secondary job type is classified as OTHER since it does not fit into the specific categories of investing, consulting, or any other defined roles." + } + }, + "Job: Co-Founder & Head of Product at Soundscope": { + "primary_job_type": { + "expected": "Full-time", + "actual": "Full-time", + "confidence": 0.9, + "reasoning": "The work experience as an \"Investor\" at Spot AI from 2021 to 2024 indicates a professional investing role, which aligns with the secondary job type category of INVESTING. The candidate's full resume shows a strong background in venture capital and investment roles, including being a Vice President at Bessemer Venture Partners and a Co-Founder at The MBA Fund, both of which further support the classification as INVESTING. Since the role spans multiple years and is not a short-term internship or part-time position, it is classified as FULL_TIME for the primary job type." + }, + "secondary_job_type": { + "expected": "Entrepreneur / Founder", + "actual": "Investing", + "confidence": 0.9, + "reasoning": "The work experience as an \"Investor\" at Spot AI from 2021 to 2024 indicates a professional investing role, which aligns with the secondary job type category of INVESTING. The candidate's full resume shows a strong background in venture capital and investment roles, including being a Vice President at Bessemer Venture Partners and a Co-Founder at The MBA Fund, both of which further support the classification as INVESTING. Since the role spans multiple years and is not a short-term internship or part-time position, it is classified as FULL_TIME for the primary job type." + }, + "investing_focus_asset_class": { + "expected": null, + "actual": "Early-stage VC", + "confidence": 0.6, + "reasoning": "The specific work experience as an Investor at Spot AI suggests involvement in early-stage investments, particularly in the technology sector, which aligns with the candidate's broader experience in venture capital. The candidate's role at The MBA Fund, which focuses on backing founders from top universities, further supports this classification as it indicates a commitment to early-stage ventures. However, the lack of detailed description for the Spot AI role limits the confidence in this classification." + }, + "investing_focus_sector": { + "expected": null, + "actual": "Technology / Software / TMT", + "confidence": 0.9, + "reasoning": "The specific work experience item indicates that the candidate was an investor at Spot AI, which is categorized under the Computer Software industry. This aligns directly with the TECHNOLOGY_SOFTWARE_TMT sector. Given the candidate's background in venture capital and their focus on technology-related investments, this classification is strongly supported by the industry designation of the company." + } + }, + "Job: Venture Analyst at Pacific Community Ventures": { + "primary_job_type": { + "expected": "Full-time", + "actual": "Other", + "confidence": 0.9, + "reasoning": "The work experience as a Board Observer at VendorPM is a role that typically involves providing guidance and oversight to the company's management, which aligns with advisory roles rather than traditional employment. Given that this position spans from 2021 to 2024, it suggests a long-term commitment but does not indicate full-time employment, making it fit the OTHER category for primary job type. For the secondary job type, since the role involves oversight and strategic input in a software company, it does not fit into the categories of investing, banking, or consulting, thus it is classified as OTHER as well." + }, + "secondary_job_type": { + "expected": "Investing", + "actual": "Other", + "confidence": 0.9, + "reasoning": "The work experience as a Board Observer at VendorPM is a role that typically involves providing guidance and oversight to the company's management, which aligns with advisory roles rather than traditional employment. Given that this position spans from 2021 to 2024, it suggests a long-term commitment but does not indicate full-time employment, making it fit the OTHER category for primary job type. For the secondary job type, since the role involves oversight and strategic input in a software company, it does not fit into the categories of investing, banking, or consulting, thus it is classified as OTHER as well." + } + } + } + }, + { + "profile_name": "Nicholas Penske", + "correct_enums": 17, + "total_enums": 19, + "accuracy": 0.8947368421052632, + "additional_enums_in_actual": 7, + "comparisons": { + "Education: Cornell University": { + "expected": "Undergraduate (Completed)", + "actual": "Undergraduate (Completed)", + "confidence": 1.0, + "reasoning": "The educational item from Linkedin clearly states that the candidate earned a Bachelor of Arts (BA) degree in American Government and Politics from Cornell University, with a completion period from 2015 to 2019. This aligns perfectly with the information in the full resume, which also lists the same degree and institution, confirming that it is a completed undergraduate degree." + }, + "Education: Harvard Westlake School": { + "expected": "Primary / Secondary School", + "actual": "Primary / Secondary School", + "confidence": 1.0, + "reasoning": "The educational item from Linkedin refers to Harvard Westlake School, which is a secondary school attended from 2009 to 2015. This aligns with the classification of PRIMARY_SECONDARY, as it pertains to high school education. The full resume confirms this by listing the same school and period, reinforcing the classification." + }, + "Job: Investor at 8VC": { + "primary_job_type": { + "expected": "Full-time", + "actual": "Full-time", + "confidence": 0.9, + "reasoning": "The work experience item indicates that the candidate is currently employed as an Investor at 8VC, which is classified as full-time employment. This aligns with the candidate's previous roles in private equity and investment, suggesting a consistent career path in investing. The secondary job type is classified as INVESTING due to the nature of the role, which involves investment activities in a venture capital context." + }, + "secondary_job_type": { + "expected": "Investing", + "actual": "Investing", + "confidence": 0.9, + "reasoning": "The work experience item indicates that the candidate is currently employed as an Investor at 8VC, which is classified as full-time employment. This aligns with the candidate's previous roles in private equity and investment, suggesting a consistent career path in investing. The secondary job type is classified as INVESTING due to the nature of the role, which involves investment activities in a venture capital context." + }, + "investing_focus_asset_class": { + "expected": "Multi-stage VC", + "actual": "Multi-stage VC", + "confidence": 0.6, + "reasoning": "The candidate's current position as an Investor at 8VC, a firm that operates in both venture capital and private equity, suggests a focus on investments across multiple stages. However, the specific work experience item does not provide detailed information about the types of investments being made, leading to a moderate confidence level in this classification. The candidate's previous roles in private equity also support a broader investment focus, but without explicit details from the current role, the classification remains somewhat uncertain." + }, + "investing_focus_sector": { + "expected": null, + "actual": "Financial Institutions Group (FIG) / Fintech", + "confidence": 0.4, + "reasoning": "The specific work experience item indicates the candidate is an Investor at 8VC, which operates in the Venture Capital & Private Equity sector. While this suggests a focus on financial investments, the lack of detailed responsibilities or sector-specific focus in the description limits the ability to classify it definitively. Therefore, I classified it under FINANCIAL_INSTITUTIONS, but with a lower confidence due to insufficient information about the specific investment focus." + } + }, + "Job: Private Equity Associate at TRP Capital Partners": { + "primary_job_type": { + "expected": "Full-time", + "actual": "Full-time", + "confidence": 1.0, + "reasoning": "The work experience item is for a Private Equity Associate at TRP Capital Partners, which is classified as a full-time role. This aligns with the candidate's resume, where they have a history of working in private equity, indicating a focus on investment roles. The primary job type is FULL_TIME due to the ongoing nature of the employment, and the secondary job type is INVESTING, as the role is directly related to private equity activities, which involve analyzing and managing investments." + }, + "secondary_job_type": { + "expected": "Investing", + "actual": "Investing", + "confidence": 1.0, + "reasoning": "The work experience item is for a Private Equity Associate at TRP Capital Partners, which is classified as a full-time role. This aligns with the candidate's resume, where they have a history of working in private equity, indicating a focus on investment roles. The primary job type is FULL_TIME due to the ongoing nature of the employment, and the secondary job type is INVESTING, as the role is directly related to private equity activities, which involve analyzing and managing investments." + }, + "investing_focus_asset_class": { + "expected": "Private Equity / Buyouts", + "actual": "Private Equity / Buyouts", + "confidence": 0.7, + "reasoning": "The candidate's role as a Private Equity Associate at TRP Capital Partners suggests a focus on private equity investments. While the specific description of the work experience does not provide detailed information, the title and the nature of the firm (a private equity firm) indicate involvement in private equity buyouts. The candidate's previous experience in private equity as an analyst further supports this classification, although the lack of detailed responsibilities in the specific work experience item lowers the confidence slightly." + }, + "investing_focus_sector": { + "expected": null, + "actual": "Financial Institutions Group (FIG) / Fintech", + "confidence": 0.8, + "reasoning": "The specific work experience item indicates that the candidate worked as a Private Equity Associate at TRP Capital Partners, which is classified under the financial services industry. This role typically involves investment activities related to private equity, aligning closely with the financial institutions sector. The lack of a detailed description does not detract significantly from this classification, as the job title and company industry provide strong evidence for this focus." + } + }, + "Job: Private Equity Analyst at TRP Capital Partners": { + "primary_job_type": { + "expected": "Full-time", + "actual": "Full-time", + "confidence": 1.0, + "reasoning": "The work experience item indicates that the candidate held the position of Private Equity Analyst at TRP Capital Partners from October 2021 to September 2023, which is a full-time role. This aligns with the primary job type classification of FULL_TIME. Additionally, since the role is in private equity, it fits the secondary job type classification of INVESTING, as it involves analyzing potential investments and working within a financial services context." + }, + "secondary_job_type": { + "expected": "Investing", + "actual": "Investing", + "confidence": 1.0, + "reasoning": "The work experience item indicates that the candidate held the position of Private Equity Analyst at TRP Capital Partners from October 2021 to September 2023, which is a full-time role. This aligns with the primary job type classification of FULL_TIME. Additionally, since the role is in private equity, it fits the secondary job type classification of INVESTING, as it involves analyzing potential investments and working within a financial services context." + }, + "investing_focus_asset_class": { + "expected": "Private Equity / Buyouts", + "actual": "Private Equity / Buyouts", + "confidence": 0.7, + "reasoning": "The candidate worked as a Private Equity Analyst at TRP Capital Partners, which is a role typically associated with private equity investments, particularly in buyouts. Although the specific description of responsibilities is not provided, the title and the nature of the firm suggest a focus on private equity buyouts, which aligns with the classification. The confidence level is moderate due to the lack of detailed descriptions of the specific investments or strategies employed during this role." + }, + "investing_focus_sector": { + "expected": null, + "actual": "Financial Institutions Group (FIG) / Fintech", + "confidence": 0.7, + "reasoning": "The specific work experience as a Private Equity Analyst at TRP Capital Partners falls under the financial services industry, which is directly related to the financial institutions sector. Although the description does not provide detailed responsibilities, the title and the company's industry classification strongly indicate a focus on financial activities, particularly in private equity, which is a subset of financial institutions." + } + }, + "Job: Self-employed at Hotel Investments": { + "primary_job_type": { + "expected": "Full-time", + "actual": "Other", + "confidence": 0.9, + "reasoning": "The work experience titled \"Hotel Investments\" is classified as OTHER for the primary job type because it is self-employed work related to a hospitality start-up, which does not fit into the categories of full-time, internship, or extracurricular activities. For the secondary job type, it is classified as ENTREPRENEUR_FOUNDER since the candidate was involved in a start-up focused on acquiring and repositioning hotels, indicating a founding or co-founding role in a business venture. This aligns with the self-employed status and the nature of the work described." + }, + "secondary_job_type": { + "expected": "Entrepreneur / Founder", + "actual": "Entrepreneur / Founder", + "confidence": 0.9, + "reasoning": "The work experience titled \"Hotel Investments\" is classified as OTHER for the primary job type because it is self-employed work related to a hospitality start-up, which does not fit into the categories of full-time, internship, or extracurricular activities. For the secondary job type, it is classified as ENTREPRENEUR_FOUNDER since the candidate was involved in a start-up focused on acquiring and repositioning hotels, indicating a founding or co-founding role in a business venture. This aligns with the self-employed status and the nature of the work described." + } + }, + "Job: Analyst at Hudson Pacific Properties": { + "primary_job_type": { + "expected": "Full-time", + "actual": "Full-time", + "confidence": 0.9, + "reasoning": "The work experience at Hudson Pacific Properties is classified as FULL_TIME because it is explicitly stated as a full-time position and lasted for over a year, which aligns with the criteria for full-time employment. The secondary job type is classified as BACK_OFFICE since the role of an analyst in a real estate company typically involves supporting functions such as data analysis, reporting, and operational support, which are characteristic of back-office roles." + }, + "secondary_job_type": { + "expected": "Other", + "actual": "Back Office", + "confidence": 0.9, + "reasoning": "The work experience at Hudson Pacific Properties is classified as FULL_TIME because it is explicitly stated as a full-time position and lasted for over a year, which aligns with the criteria for full-time employment. The secondary job type is classified as BACK_OFFICE since the role of an analyst in a real estate company typically involves supporting functions such as data analysis, reporting, and operational support, which are characteristic of back-office roles." + } + }, + "Job: Summer Intern at Ares Management, L.P.": { + "primary_job_type": { + "expected": "Internship", + "actual": "Internship", + "confidence": 1.0, + "reasoning": "The specific work experience item is classified as an INTERNSHIP because it is a summer intern position at Ares Management, L.P., which is explicitly stated in the title. The duration of the internship from June 2018 to August 2018 aligns with typical summer internship timelines. The primary job type is therefore INTERNSHIP. For the secondary job type, since Ares Management operates in financial services and the role is an internship, it does not fit into any of the specific secondary categories like INVESTING or CONSULTING, so it is classified as OTHER." + }, + "secondary_job_type": { + "expected": null, + "actual": "Other", + "confidence": 1.0, + "reasoning": "The specific work experience item is classified as an INTERNSHIP because it is a summer intern position at Ares Management, L.P., which is explicitly stated in the title. The duration of the internship from June 2018 to August 2018 aligns with typical summer internship timelines. The primary job type is therefore INTERNSHIP. For the secondary job type, since Ares Management operates in financial services and the role is an internship, it does not fit into any of the specific secondary categories like INVESTING or CONSULTING, so it is classified as OTHER." + } + }, + "Job: Summer Associate, Operations at Caruso Affiliated": { + "primary_job_type": { + "expected": "Internship", + "actual": "Internship", + "confidence": 0.9, + "reasoning": "The work experience as a \"Summer Associate, Operations\" at Caruso Affiliated took place during the summer of 2017 for a duration of approximately two months, which aligns with the characteristics of an INTERNSHIP. Given that this role is a summer position and the title includes \"Summer Associate,\" it clearly fits the criteria for an internship. In terms of the secondary job type, the role is in operations within a real estate company, which does not directly align with any of the specific secondary categories like INVESTING or CONSULTING, so it is best classified as OTHER." + }, + "secondary_job_type": { + "expected": null, + "actual": "Other", + "confidence": 0.9, + "reasoning": "The work experience as a \"Summer Associate, Operations\" at Caruso Affiliated took place during the summer of 2017 for a duration of approximately two months, which aligns with the characteristics of an INTERNSHIP. Given that this role is a summer position and the title includes \"Summer Associate,\" it clearly fits the criteria for an internship. In terms of the secondary job type, the role is in operations within a real estate company, which does not directly align with any of the specific secondary categories like INVESTING or CONSULTING, so it is best classified as OTHER." + } + }, + "Job: Summer Intern at WME (William Morris Endeavor)": { + "primary_job_type": { + "expected": "Internship", + "actual": "Internship", + "confidence": 0.9, + "reasoning": "The specific work experience item is classified as an INTERNSHIP because it is a summer intern position at WME (William Morris Endeavor) that took place for two months in 2016, which aligns with the criteria for internships. The candidate's resume also indicates that they have held multiple internship roles during their education, further supporting this classification. The secondary job type is classified as OTHER since the role does not fit into any of the defined secondary categories such as investing or consulting, and it is not a professional role in a financial context." + }, + "secondary_job_type": { + "expected": null, + "actual": "Other", + "confidence": 0.9, + "reasoning": "The specific work experience item is classified as an INTERNSHIP because it is a summer intern position at WME (William Morris Endeavor) that took place for two months in 2016, which aligns with the criteria for internships. The candidate's resume also indicates that they have held multiple internship roles during their education, further supporting this classification. The secondary job type is classified as OTHER since the role does not fit into any of the defined secondary categories such as investing or consulting, and it is not a professional role in a financial context." + } + }, + "Job: Summer Intern at Longo Toyota / Scion": { + "primary_job_type": { + "expected": "Internship", + "actual": "Internship", + "confidence": 0.9, + "reasoning": "The specific work experience item is classified as an INTERNSHIP because it is labeled as a \"Summer Intern\" position at Longo Toyota/Scion, which indicates a short-term role typically associated with students or recent graduates. The duration from June 2013 to August 2015 also suggests it was a summer position, fitting the criteria for an internship. The secondary job type is classified as OTHER since the role does not fit into any of the specific categories like INVESTING, BACK_OFFICE, etc., and there is no indication of a professional investing role or similar responsibilities in the automotive industry context." + }, + "secondary_job_type": { + "expected": null, + "actual": "Other", + "confidence": 0.9, + "reasoning": "The specific work experience item is classified as an INTERNSHIP because it is labeled as a \"Summer Intern\" position at Longo Toyota/Scion, which indicates a short-term role typically associated with students or recent graduates. The duration from June 2013 to August 2015 also suggests it was a summer position, fitting the criteria for an internship. The secondary job type is classified as OTHER since the role does not fit into any of the specific categories like INVESTING, BACK_OFFICE, etc., and there is no indication of a professional investing role or similar responsibilities in the automotive industry context." + } + } + } + }, + { + "profile_name": "Lauren Hipple", + "correct_enums": 15, + "total_enums": 18, + "accuracy": 0.8333333333333334, + "additional_enums_in_actual": 2, + "comparisons": { + "Education: Rice University": { + "expected": "Undergraduate (Completed)", + "actual": "Undergraduate (Completed)", + "confidence": 0.9, + "reasoning": "The candidate's resume indicates that they studied Mathematics and Statistics at Rice University, which is a recognized institution for undergraduate degrees. The specific Linkedin education item confirms this field of study but does not specify a degree. However, given the context of the resume and the typical educational path, it is reasonable to conclude that this represents a completed undergraduate degree, as there is no indication of incompleteness or ongoing studies. The high confidence level reflects the strong alignment between the resume and the Linkedin information." + }, + "Education: Laurel School": { + "expected": "Primary / Secondary School", + "actual": "Primary / Secondary School", + "confidence": 0.9, + "reasoning": "The educational item from Linkedin lists \"Laurel School\" without any degree or field of study, which indicates it is likely a primary or secondary school. Given that the full resume does not provide any additional information about this institution, it aligns with the category of PRIMARY_SECONDARY, as it suggests the candidate's high school education. The confidence level is high due to the lack of any indication of higher education associated with this school." + }, + "Job: Private Equity Vice President at Long Arc Capital": { + "primary_job_type": { + "expected": "Full-time", + "actual": "Full-time", + "confidence": 1.0, + "reasoning": "The work experience item indicates that the candidate is currently employed as a Private Equity Vice President at Long Arc Capital, which is a full-time position. This aligns with the full-time employment classification. Additionally, the role is in private equity, which fits the INVESTING category for secondary job type, as it involves managing investments in companies. The candidate's previous roles in private equity and investment banking further support this classification." + }, + "secondary_job_type": { + "expected": "Investing", + "actual": "Investing", + "confidence": 1.0, + "reasoning": "The work experience item indicates that the candidate is currently employed as a Private Equity Vice President at Long Arc Capital, which is a full-time position. This aligns with the full-time employment classification. Additionally, the role is in private equity, which fits the INVESTING category for secondary job type, as it involves managing investments in companies. The candidate's previous roles in private equity and investment banking further support this classification." + }, + "investing_focus_asset_class": { + "expected": "Growth Equity", + "actual": "Growth Equity", + "confidence": 0.8, + "reasoning": "The specific work experience at Long Arc Capital indicates that the firm specializes in providing growth capital to companies, which aligns with the GROWTH_EQUITY classification. The focus on sectors undergoing technology-driven transformations further supports this classification, as growth equity typically involves investing in companies that are expanding and require capital to scale. The candidate's title as Private Equity Vice President also suggests a role that involves significant investment decision-making in growth-oriented companies." + }, + "investing_focus_sector": { + "expected": "Financial Institutions Group (FIG) / Fintech, Business Services, Technology / Software / TMT", + "actual": "Business Services", + "confidence": 0.6, + "reasoning": "The specific work experience at Long Arc Capital indicates a focus on providing growth capital to companies in the Financial Services, Business Services, and TMT sectors. While the description mentions multiple sectors, the emphasis on Business Services as one of the primary areas of investment suggests a classification in this sector. However, since the work experience also includes TMT and Financial Services, my confidence is moderate rather than high." + } + }, + "Job: M&A at Forum Brands": { + "primary_job_type": { + "expected": "Full-time", + "actual": "Full-time", + "confidence": 0.9, + "reasoning": "The specific work experience at Forum Brands is classified as FULL_TIME because it is explicitly stated as a full-time position and lasted for six months, which is a typical duration for a full-time role. The responsibilities involved co-leading an M&A team, which aligns with investment banking activities. Therefore, the secondary job type is classified as INVESTMENT_BANKING, as the role is focused on mergers and acquisitions within a corporate setting, which is characteristic of investment banking roles." + }, + "secondary_job_type": { + "expected": "CorpDev / Strategy", + "actual": "Investment Banking", + "confidence": 0.9, + "reasoning": "The specific work experience at Forum Brands is classified as FULL_TIME because it is explicitly stated as a full-time position and lasted for six months, which is a typical duration for a full-time role. The responsibilities involved co-leading an M&A team, which aligns with investment banking activities. Therefore, the secondary job type is classified as INVESTMENT_BANKING, as the role is focused on mergers and acquisitions within a corporate setting, which is characteristic of investment banking roles." + }, + "investment_banking_group": { + "expected": null, + "actual": "M&A", + "confidence": 1.0, + "reasoning": "The candidate's specific work experience at Forum Brands clearly indicates a focus on mergers and acquisitions, as they co-led the M&A team at a company specializing in acquiring digitally native brands. This aligns directly with the M&A investment banking group. Additionally, the candidate's previous experience in Energy M&A at UBS further supports their expertise in this area, reinforcing the classification." + } + }, + "Job: Vice President at FocusGrowth Asset Management, LP.": { + "primary_job_type": { + "expected": "Full-time", + "actual": "Full-time", + "confidence": 0.9, + "reasoning": "The work experience as Vice President at FocusGrowth Asset Management, LP. lasted from 2020 to 2022, which is a significant duration indicating a full-time role rather than an internship or part-time position. The responsibilities described align with a senior role in asset management, which is consistent with the candidate's background in private credit and special situations. Therefore, this experience is classified as FULL_TIME. Additionally, since the role is in asset management, it falls under the category of INVESTING, as it involves managing private credit and special situations investments." + }, + "secondary_job_type": { + "expected": "Investing", + "actual": "Investing", + "confidence": 0.9, + "reasoning": "The work experience as Vice President at FocusGrowth Asset Management, LP. lasted from 2020 to 2022, which is a significant duration indicating a full-time role rather than an internship or part-time position. The responsibilities described align with a senior role in asset management, which is consistent with the candidate's background in private credit and special situations. Therefore, this experience is classified as FULL_TIME. Additionally, since the role is in asset management, it falls under the category of INVESTING, as it involves managing private credit and special situations investments." + }, + "investing_focus_asset_class": { + "expected": "Credit", + "actual": "Credit", + "confidence": 0.8, + "reasoning": "The specific work experience at FocusGrowth Asset Management, LP. is described as a \"Private Credit and Special Situations Asset Manager.\" This clearly indicates a focus on credit investments, particularly in private credit, which aligns with the CREDIT asset class. The confidence level is high due to the explicit mention of \"Private Credit\" in the job description, which directly supports the classification." + }, + "investing_focus_sector": { + "expected": null, + "actual": "Financial Institutions Group (FIG) / Fintech", + "confidence": 0.8, + "reasoning": "The specific work experience item describes the candidate's role as Vice President at FocusGrowth Asset Management, LP., which is identified as a Private Credit and Special Situations Asset Manager within the Financial Services industry. This aligns directly with the Financial Institutions sector, as it involves managing financial assets and providing credit solutions. The confidence level is high due to the clear indication of the financial services focus in both the company description and the candidate's role." + } + }, + "Job: Private Equity Associate at Alinda Capital Partners": { + "primary_job_type": { + "expected": "Full-time", + "actual": "Full-time", + "confidence": 1.0, + "reasoning": "The work experience as a Private Equity Associate at Alinda Capital Partners LLC is classified as FULL_TIME because it is a full-time position held from 2017 to 2019, which aligns with the primary job type criteria. The secondary job type is classified as INVESTING since the role is within a private equity firm, which involves managing investments and focusing on specific sectors, consistent with the candidate's experience in private equity as noted in their resume." + }, + "secondary_job_type": { + "expected": "Investing", + "actual": "Investing", + "confidence": 1.0, + "reasoning": "The work experience as a Private Equity Associate at Alinda Capital Partners LLC is classified as FULL_TIME because it is a full-time position held from 2017 to 2019, which aligns with the primary job type criteria. The secondary job type is classified as INVESTING since the role is within a private equity firm, which involves managing investments and focusing on specific sectors, consistent with the candidate's experience in private equity as noted in their resume." + }, + "investing_focus_asset_class": { + "expected": "Private Equity / Buyouts", + "actual": "Private Equity / Buyouts", + "confidence": 0.8, + "reasoning": "The specific work experience as a Private Equity Associate at Alinda Capital Partners LLC involved working with private equity funds focused on sectors such as transportation, logistics, telecommunications, and energy infrastructure. This aligns with the characteristics of private equity buyouts, where firms typically invest in established companies to enhance their value. The mention of managing over $8 billion in assets further supports this classification, indicating a significant involvement in private equity activities." + }, + "investing_focus_sector": { + "expected": "Infrastructure / Transportation , Energy / Natural Resources / Cleantech / Utilities", + "actual": "Infrastructure / Transportation", + "confidence": 0.8, + "reasoning": "The specific work experience as a Private Equity Associate at Alinda Capital Partners LLC indicates a focus on \"transportation & logistics, telecommunications, and energy infrastructure.\" This aligns well with the INFRASTRUCTURE_TRANSPORTATION sector, as it encompasses both transportation and energy-related investments. The description clearly outlines the areas of focus, supporting a strong classification in this sector." + } + }, + "Job: Investment Banking Analyst at UBS": { + "primary_job_type": { + "expected": "Full-time", + "actual": "Full-time", + "confidence": 1.0, + "reasoning": "The specific work experience item is for the role of Investment Banking Analyst at UBS, which is classified as FULL_TIME due to the employment type being full-time and the duration being two years. Additionally, the responsibilities of the role, which include Energy M&A and Coverage, align with the INVESTMENT_BANKING secondary job type, as it involves activities typical of investment banking roles. This classification is consistent with the candidate's overall experience in investment banking as noted in their resume." + }, + "secondary_job_type": { + "expected": "Investment Banking", + "actual": "Investment Banking", + "confidence": 1.0, + "reasoning": "The specific work experience item is for the role of Investment Banking Analyst at UBS, which is classified as FULL_TIME due to the employment type being full-time and the duration being two years. Additionally, the responsibilities of the role, which include Energy M&A and Coverage, align with the INVESTMENT_BANKING secondary job type, as it involves activities typical of investment banking roles. This classification is consistent with the candidate's overall experience in investment banking as noted in their resume." + }, + "investment_banking_group": { + "expected": "Energy / Natural Resources / Cleantech / Utilities", + "actual": "Energy / Natural Resources / Cleantech / Utilities", + "confidence": 0.9, + "reasoning": "The candidate worked as an Investment Banking Analyst at UBS, specifically in \"Energy M&A and Coverage,\" which directly indicates a focus on energy-related mergers and acquisitions. This aligns with the ENERGY_NATURAL_RESOURCES group classification. Additionally, the candidate's experience in private equity and asset management in sectors like transportation and energy infrastructure further supports their expertise in the energy sector, reinforcing the classification." + } + } + } + }, + { + "profile_name": "Zac Mohring", + "correct_enums": 18, + "total_enums": 18, + "accuracy": 1.0, + "additional_enums_in_actual": 4, + "comparisons": { + "Education: Stanford University": { + "expected": "MBA", + "actual": "MBA", + "confidence": 1.0, + "reasoning": "The specific Linkedin education item clearly states that the candidate has a Master of Business Administration (MBA) from Stanford University Graduate School of Business. This aligns perfectly with the information provided in the full resume, which also lists the same MBA degree from the same institution. Therefore, it is classified as an MBA with complete confidence." + }, + "Education: Yale Universty": { + "expected": "Undergraduate (Completed)", + "actual": "Undergraduate (Completed)", + "confidence": 1.0, + "reasoning": "The specific Linkedin education item clearly states that the candidate earned a Bachelor of Arts (B.A.) degree in Ethics, Politics & Economics from Yale University. This aligns perfectly with the information provided in the full resume, which also lists Yale University as the institution where the candidate completed their undergraduate degree. Since the degree is completed and falls under the category of an undergraduate degree, it is classified as UNDERGRAD_COMPLETED." + }, + "Education: University of Cambridge": { + "expected": "Undergraduate (Incomplete)", + "actual": "Undergraduate (Incomplete)", + "confidence": 0.9, + "reasoning": "The specific Linkedin education item indicates a \"Study abroad\" program at the University of Cambridge, which suggests that it is part of an undergraduate experience rather than a completed degree. The full resume confirms that the candidate has a completed undergraduate degree (B.A. from Yale University) and lists the study abroad as a separate educational experience, indicating it is not a completed degree but rather an incomplete or in-progress aspect of their undergraduate education." + }, + "Education: St. Paul Academy and Summit School": { + "expected": "Primary / Secondary School", + "actual": "Primary / Secondary School", + "confidence": 1.0, + "reasoning": "The specific Linkedin education item clearly states that the candidate received a \"High School Diploma\" from \"St. Paul Academy and Summit School.\" This aligns perfectly with the category of PRIMARY_SECONDARY, which includes high school education. The full resume also confirms this by listing the same high school diploma, reinforcing the classification." + }, + "Job: Principal at Altos Ventures": { + "primary_job_type": { + "expected": "Full-time", + "actual": "Full-time", + "confidence": 0.9, + "reasoning": "The work experience as a Principal at Altos Ventures is a full-time role, as it is a senior position in a venture capital firm and is currently ongoing since 2022. Given the nature of the role, it falls under the category of FULL_TIME. Additionally, since Altos Ventures is a venture capital firm, this position is classified as INVESTING, which aligns with the secondary job type for roles in venture capital." + }, + "secondary_job_type": { + "expected": "Investing", + "actual": "Investing", + "confidence": 0.9, + "reasoning": "The work experience as a Principal at Altos Ventures is a full-time role, as it is a senior position in a venture capital firm and is currently ongoing since 2022. Given the nature of the role, it falls under the category of FULL_TIME. Additionally, since Altos Ventures is a venture capital firm, this position is classified as INVESTING, which aligns with the secondary job type for roles in venture capital." + }, + "investing_focus_asset_class": { + "expected": "Multi-stage VC", + "actual": "Multi-stage VC", + "confidence": 0.6, + "reasoning": "The candidate's role as a Principal at Altos Ventures, a firm that operates in the venture capital space, suggests a focus on venture capital investments. While the specific description of the role is not provided, the candidate's previous experience at Darlington Partners, which primarily invested in public equities, indicates a diverse investment background. Given the nature of Altos Ventures and the candidate's experience, it is reasonable to classify this role under MULTI_STAGE_VC, as it likely involves investments across various stages of company development. However, the lack of detailed information about the specific investments made at Altos Ventures lowers the confidence level." + }, + "investing_focus_sector": { + "expected": null, + "actual": "Generalist", + "confidence": 0.4, + "reasoning": "The specific work experience at Altos Ventures is classified as \"Venture Capital & Private Equity,\" which typically involves a broad investment mandate across various sectors. However, the lack of detailed information about the specific types of companies or sectors Altos Ventures focuses on leads to uncertainty. Given the candidate's previous roles in private equity and the general nature of venture capital, I classified it as GENERALIST, but with low confidence due to insufficient details." + } + }, + "Job: Analyst at Darlington Partners": { + "primary_job_type": { + "expected": "Full-time", + "actual": "Full-time", + "confidence": 0.9, + "reasoning": "The work experience as an Analyst at Darlington Partners from 2019 to 2021 is a full-time role, as it spans over two years and does not indicate any part-time or internship status. Given the description of the role, which involves investment activities in a partnership focused on high-quality companies, it aligns with the INVESTING category for secondary job type. The candidate's previous roles in private equity further support this classification." + }, + "secondary_job_type": { + "expected": "Investing", + "actual": "Investing", + "confidence": 0.9, + "reasoning": "The work experience as an Analyst at Darlington Partners from 2019 to 2021 is a full-time role, as it spans over two years and does not indicate any part-time or internship status. Given the description of the role, which involves investment activities in a partnership focused on high-quality companies, it aligns with the INVESTING category for secondary job type. The candidate's previous roles in private equity further support this classification." + }, + "investing_focus_asset_class": { + "expected": "Public Equities", + "actual": "Public Equities", + "confidence": 0.8, + "reasoning": "The specific work experience at Darlington Partners indicates that the firm primarily invests in US public equities, which aligns directly with the PUBLIC_EQUITIES asset class. The description mentions a value-oriented investment strategy with a focus on high-quality companies, further supporting this classification. While the firm has a broad investment mandate, the emphasis on public equities is clear, leading to a high confidence in this classification." + }, + "investing_focus_sector": { + "expected": null, + "actual": "Financial Institutions Group (FIG) / Fintech", + "confidence": 0.7, + "reasoning": "The specific work experience at Darlington Partners is described as a value-oriented investment partnership focused on investing in high-quality companies, primarily in US public equities. This aligns closely with the financial services sector, particularly within the realm of investment management and private equity, which falls under the category of Financial Institutions. The broad investment mandate further supports this classification, indicating a focus on financial assets." + } + }, + "Job: Private Equity Associate at Bain Capital": { + "primary_job_type": { + "expected": "Full-time", + "actual": "Full-time", + "confidence": 1.0, + "reasoning": "The work experience item is for a Private Equity Associate at Bain Capital, which is a full-time role that lasted from 2018 to 2019. Given the duration and the nature of the position, it fits the FULL_TIME category for Primary Job Type. For Secondary Job Type, this role is clearly in the private equity sector, which aligns with the INVESTING category, as it involves managing investments in companies. The candidate's previous roles at Bain Capital also support this classification as they are all in private equity." + }, + "secondary_job_type": { + "expected": "Investing", + "actual": "Investing", + "confidence": 1.0, + "reasoning": "The work experience item is for a Private Equity Associate at Bain Capital, which is a full-time role that lasted from 2018 to 2019. Given the duration and the nature of the position, it fits the FULL_TIME category for Primary Job Type. For Secondary Job Type, this role is clearly in the private equity sector, which aligns with the INVESTING category, as it involves managing investments in companies. The candidate's previous roles at Bain Capital also support this classification as they are all in private equity." + }, + "investing_focus_asset_class": { + "expected": "Private Equity / Buyouts", + "actual": "Private Equity / Buyouts", + "confidence": 0.8, + "reasoning": "The specific work experience as a Private Equity Associate at Bain Capital indicates a focus on private equity investments, which typically involve buyouts of companies. Bain Capital is well-known for its private equity activities, and the candidate's role in this position aligns with the private equity buyout asset class. While the description is sparse, the context of Bain Capital's operations supports this classification." + }, + "investing_focus_sector": { + "expected": null, + "actual": "Financial Institutions Group (FIG) / Fintech", + "confidence": 0.9, + "reasoning": "The specific work experience item indicates that the candidate worked as a Private Equity Associate at Bain Capital, a firm categorized under financial services. The role in private equity directly aligns with the financial institutions sector, which encompasses investment firms, banks, and other financial services. The absence of a detailed description does not detract from the strong association with financial institutions, leading to a high confidence level in this classification." + } + }, + "Job: Private Equity Analyst at Bain Capital": { + "primary_job_type": { + "expected": "Full-time", + "actual": "Full-time", + "confidence": 1.0, + "reasoning": "The work experience item is for a Private Equity Analyst at Bain Capital from 2016 to 2018, which indicates a full-time role in a private equity firm. Given the duration of the employment (over 6 months) and the nature of the position, it is classified as FULL_TIME. As this role is specifically in private equity, it falls under the INVESTING category for secondary job type. The candidate's resume supports this classification with their previous roles at Bain Capital and their current position at Altos Ventures, which is also in the investment field." + }, + "secondary_job_type": { + "expected": "Investing", + "actual": "Investing", + "confidence": 1.0, + "reasoning": "The work experience item is for a Private Equity Analyst at Bain Capital from 2016 to 2018, which indicates a full-time role in a private equity firm. Given the duration of the employment (over 6 months) and the nature of the position, it is classified as FULL_TIME. As this role is specifically in private equity, it falls under the INVESTING category for secondary job type. The candidate's resume supports this classification with their previous roles at Bain Capital and their current position at Altos Ventures, which is also in the investment field." + }, + "investing_focus_asset_class": { + "expected": "Private Equity / Buyouts", + "actual": "Private Equity / Buyouts", + "confidence": 0.8, + "reasoning": "The specific work experience as a Private Equity Analyst at Bain Capital indicates a focus on private equity investments. Bain Capital is known for its buyout strategies, which typically involve acquiring companies and improving their operations for eventual sale or public offering. Although the description does not provide detailed responsibilities, the title and the firm's reputation strongly suggest involvement in private equity buyouts." + }, + "investing_focus_sector": { + "expected": null, + "actual": "Financial Institutions Group (FIG) / Fintech", + "confidence": 0.8, + "reasoning": "The specific work experience item indicates that the candidate worked as a Private Equity Analyst at Bain Capital, a firm categorized under Financial Services. The role in private equity directly aligns with the focus on financial institutions, as it involves investment activities related to equity financing and asset management. While the description lacks detail, the context of Bain Capital's operations strongly supports this classification." + } + }, + "Job: Private Equity Summer Analyst at Bain Capital": { + "primary_job_type": { + "expected": "Internship", + "actual": "Internship", + "confidence": 1.0, + "reasoning": "The work experience item is classified as an INTERNSHIP because it is explicitly labeled as a \"Private Equity Summer Analyst\" position and occurred in 2015, which aligns with typical summer internship timelines. The candidate's resume indicates a progression in private equity roles, starting with this internship at Bain Capital, which further supports the classification. The secondary job type is INVESTING, as the role is within private equity, which involves analyzing and managing investments in companies." + }, + "secondary_job_type": { + "expected": "Investing", + "actual": "Investing", + "confidence": 1.0, + "reasoning": "The work experience item is classified as an INTERNSHIP because it is explicitly labeled as a \"Private Equity Summer Analyst\" position and occurred in 2015, which aligns with typical summer internship timelines. The candidate's resume indicates a progression in private equity roles, starting with this internship at Bain Capital, which further supports the classification. The secondary job type is INVESTING, as the role is within private equity, which involves analyzing and managing investments in companies." + } + } + } + }, + { + "profile_name": "Jeffrey Bai", + "correct_enums": 15, + "total_enums": 16, + "accuracy": 0.9375, + "additional_enums_in_actual": 0, + "comparisons": { + "Education: The Wharton School": { + "expected": "Undergraduate (Completed)", + "actual": "Undergraduate (Completed)", + "confidence": 1.0, + "reasoning": "The educational item from Linkedin clearly states that the candidate earned a Bachelor of Science (BS) in Economics from the University of Pennsylvania - The Wharton School, completing their studies between 2015 and 2019. This aligns perfectly with the information in the full resume, which also lists the same degree and institution, confirming that it is a completed undergraduate degree." + }, + "Job: Senior Associate at Rubicon Technology Partners": { + "primary_job_type": { + "expected": "Full-time", + "actual": "Full-time", + "confidence": 0.9, + "reasoning": "The work experience item is for a Senior Associate position at Rubicon Technology Partners, which is a private equity firm. Given that this role is ongoing and the candidate has been in this position since August 2023, it qualifies as FULL_TIME. The secondary job type is classified as INVESTING because the role is directly related to private equity, which involves analyzing and managing investments in enterprise software. This aligns with the candidate's previous experience in private equity and investment banking, further supporting the classification." + }, + "secondary_job_type": { + "expected": "Investing", + "actual": "Investing", + "confidence": 0.9, + "reasoning": "The work experience item is for a Senior Associate position at Rubicon Technology Partners, which is a private equity firm. Given that this role is ongoing and the candidate has been in this position since August 2023, it qualifies as FULL_TIME. The secondary job type is classified as INVESTING because the role is directly related to private equity, which involves analyzing and managing investments in enterprise software. This aligns with the candidate's previous experience in private equity and investment banking, further supporting the classification." + }, + "investing_focus_asset_class": { + "expected": "Private Equity / Buyouts", + "actual": "Private Equity / Buyouts", + "confidence": 0.8, + "reasoning": "The specific work experience item indicates that the candidate is a Senior Associate at Rubicon Technology Partners, focusing on Private Equity in the Enterprise Software sector. This aligns with the classification of PRIVATE_EQUITY_BUYOUTS, as the role is centered around private equity investments, specifically in the enterprise software industry. The candidate's previous role as an Associate at the same firm further supports this classification, indicating a consistent focus on private equity." + }, + "investing_focus_sector": { + "expected": "Technology / Software / TMT", + "actual": "Technology / Software / TMT", + "confidence": 0.8, + "reasoning": "The specific work experience item indicates that the candidate is a Senior Associate at Rubicon Technology Partners, focusing on Private Equity in the Enterprise Software sector. This aligns with the TECHNOLOGY_SOFTWARE_TMT category, as enterprise software is a key area within technology investments. The candidate's previous roles in technology and software M&A further support this classification, indicating a strong focus on the technology sector." + } + }, + "Job: Associate at Rubicon Technology Partners": { + "primary_job_type": { + "expected": "Full-time", + "actual": "Full-time", + "confidence": 0.9, + "reasoning": "The work experience item is for the role of Associate at Rubicon Technology Partners, which lasted from August 2021 to July 2023. This duration indicates a full-time position rather than an internship or part-time role. The responsibilities described align with private equity, which is a professional investing role, thus classifying it as INVESTING for the secondary job type. The candidate's previous roles also support this classification, as they have a clear trajectory in private equity and investment banking." + }, + "secondary_job_type": { + "expected": "Investing", + "actual": "Investing", + "confidence": 0.9, + "reasoning": "The work experience item is for the role of Associate at Rubicon Technology Partners, which lasted from August 2021 to July 2023. This duration indicates a full-time position rather than an internship or part-time role. The responsibilities described align with private equity, which is a professional investing role, thus classifying it as INVESTING for the secondary job type. The candidate's previous roles also support this classification, as they have a clear trajectory in private equity and investment banking." + }, + "investing_focus_asset_class": { + "expected": "Private Equity / Buyouts", + "actual": "Private Equity / Buyouts", + "confidence": 0.8, + "reasoning": "The specific work experience item indicates that the candidate worked as an Associate at Rubicon Technology Partners, focusing on Private Equity in the Enterprise Software sector. This aligns with the classification of PRIVATE_EQUITY_BUYOUTS, as the role is centered around private equity investments, specifically in the enterprise software industry. The candidate's previous experience in private equity further supports this classification." + }, + "investing_focus_sector": { + "expected": "Technology / Software / TMT", + "actual": "Technology / Software / TMT", + "confidence": 0.8, + "reasoning": "The specific work experience item indicates that the candidate worked as an Associate at Rubicon Technology Partners, focusing on Private Equity in the Enterprise Software sector. This aligns with the TECHNOLOGY_SOFTWARE_TMT category, as enterprise software is a key area within technology investments. The candidate's previous roles in technology and software M&A further support this classification, indicating a strong focus on the technology sector throughout their career." + } + }, + "Job: Investment Banking Analyst at DC Advisory": { + "primary_job_type": { + "expected": "Full-time", + "actual": "Full-time", + "confidence": 1.0, + "reasoning": "The work experience item is for the role of Investment Banking Analyst at DC Advisory, which lasted from July 2019 to July 2021. This duration indicates a full-time position rather than an internship, as it spans over two years. The responsibilities related to Technology and Software M&A further confirm that this role is aligned with investment banking activities. Therefore, the Primary Job Type is classified as FULL_TIME. For the Secondary Job Type, since the role is explicitly in investment banking, it is classified as INVESTMENT_BANKING." + }, + "secondary_job_type": { + "expected": "Investment Banking", + "actual": "Investment Banking", + "confidence": 1.0, + "reasoning": "The work experience item is for the role of Investment Banking Analyst at DC Advisory, which lasted from July 2019 to July 2021. This duration indicates a full-time position rather than an internship, as it spans over two years. The responsibilities related to Technology and Software M&A further confirm that this role is aligned with investment banking activities. Therefore, the Primary Job Type is classified as FULL_TIME. For the Secondary Job Type, since the role is explicitly in investment banking, it is classified as INVESTMENT_BANKING." + }, + "investment_banking_group": { + "expected": "Technology / Software / TMT, M&A", + "actual": "M&A", + "confidence": 0.9, + "reasoning": "The candidate worked as an Investment Banking Analyst at DC Advisory, focusing on \"Technology and Software M&A,\" which directly indicates involvement in mergers and acquisitions within the technology sector. This aligns with the M&A group classification. Additionally, the candidate's background in private equity and technology further supports their expertise in this area, reinforcing the classification with high confidence." + } + }, + "Job: Corporate Development Summer Analyst at Payoneer": { + "primary_job_type": { + "expected": "Internship", + "actual": "Internship", + "confidence": 0.9, + "reasoning": "The work experience as a Corporate Development Summer Analyst at Payoneer is a short-term position that took place during the summer of 2018, which aligns with the criteria for an INTERNSHIP. The candidate's resume indicates that this role was a summer analyst position, further supporting the classification. For the secondary job type, since the role is in corporate development, it involves strategic planning and analysis, which fits the CORPDEV_STRATEGY category." + }, + "secondary_job_type": { + "expected": "CorpDev / Strategy", + "actual": "CorpDev / Strategy", + "confidence": 0.9, + "reasoning": "The work experience as a Corporate Development Summer Analyst at Payoneer is a short-term position that took place during the summer of 2018, which aligns with the criteria for an INTERNSHIP. The candidate's resume indicates that this role was a summer analyst position, further supporting the classification. For the secondary job type, since the role is in corporate development, it involves strategic planning and analysis, which fits the CORPDEV_STRATEGY category." + } + }, + "Job: XLP Capital at Summer Analyst": { + "primary_job_type": { + "expected": "Internship", + "actual": "Internship", + "confidence": 1.0, + "reasoning": "The work experience as a Summer Analyst at XLP Capital is a short-term position that took place during the summer of 2017, which aligns with the criteria for an INTERNSHIP. The role explicitly states \"Summer Analyst,\" confirming its classification as an internship. Additionally, the description indicates a focus on technology and investment strategies, which suggests a professional investing context, thus classifying it as INVESTING for the secondary job type." + }, + "secondary_job_type": { + "expected": "Investing", + "actual": "Investing", + "confidence": 1.0, + "reasoning": "The work experience as a Summer Analyst at XLP Capital is a short-term position that took place during the summer of 2017, which aligns with the criteria for an INTERNSHIP. The role explicitly states \"Summer Analyst,\" confirming its classification as an internship. Additionally, the description indicates a focus on technology and investment strategies, which suggests a professional investing context, thus classifying it as INVESTING for the secondary job type." + } + } + } + }, + { + "profile_name": "Jake Kugler", + "correct_enums": 13, + "total_enums": 16, + "accuracy": 0.8125, + "additional_enums_in_actual": 1, + "comparisons": { + "Education: Harvard Business School": { + "expected": "MBA", + "actual": "MBA", + "confidence": 1.0, + "reasoning": "The specific Linkedin education item clearly states that the candidate has a Master of Business Administration (MBA) from Harvard Business School, which matches the information provided in the full resume. The resume also confirms that the candidate is currently an MBA candidate at Harvard Business School, indicating that this degree is indeed completed or in the process of being completed. Therefore, it fits perfectly into the MBA category." + }, + "Education: Northeastern University": { + "expected": "Undergraduate (Completed)", + "actual": "Undergraduate (Completed)", + "confidence": 1.0, + "reasoning": "The specific Linkedin education item indicates that the candidate completed a Bachelor of Science in Business Administration (BSBA) with a focus on Finance from Northeastern University, which aligns with the completed undergraduate degree listed in the full resume. The \"Magna Cum Laude\" distinction further confirms the completion and excellence of this degree, placing it firmly in the UNDERGRAD_COMPLETED category." + }, + "Job: MBA Candidate at Harvard Business School": { + "primary_job_type": { + "expected": "Other", + "actual": "Education", + "confidence": 0.9, + "reasoning": "The work experience item indicates that the candidate is currently an MBA Candidate at Harvard Business School, which is an educational experience rather than a traditional job. This aligns with the EDUCATION category for Primary Job Type. Since the role does not involve any professional responsibilities or job functions typical of a work position, it does not fit into any of the Secondary Job Type categories, thus it is classified as OTHER." + }, + "secondary_job_type": { + "expected": "Other", + "actual": "Other", + "confidence": 0.9, + "reasoning": "The work experience item indicates that the candidate is currently an MBA Candidate at Harvard Business School, which is an educational experience rather than a traditional job. This aligns with the EDUCATION category for Primary Job Type. Since the role does not involve any professional responsibilities or job functions typical of a work position, it does not fit into any of the Secondary Job Type categories, thus it is classified as OTHER." + } + }, + "Job: Advisor - Growth Equity at Declaration Partners": { + "primary_job_type": { + "expected": "Advisory / Board / Independent Investor", + "actual": "Internship", + "confidence": 0.9, + "reasoning": "The work experience as an \"Advisor - Growth Equity\" at Declaration Partners is classified as PART_TIME, which aligns with the definition of an INTERNSHIP due to its part-time nature and the timeframe of the role being less than a year. However, since it is a professional advisory role in a private investment firm, it also fits the criteria for the secondary job type of INVESTING, as it involves advising on growth equity investments." + }, + "secondary_job_type": { + "expected": "Investing", + "actual": "Investing", + "confidence": 0.9, + "reasoning": "The work experience as an \"Advisor - Growth Equity\" at Declaration Partners is classified as PART_TIME, which aligns with the definition of an INTERNSHIP due to its part-time nature and the timeframe of the role being less than a year. However, since it is a professional advisory role in a private investment firm, it also fits the criteria for the secondary job type of INVESTING, as it involves advising on growth equity investments." + } + }, + "Job: Investment Professional at BayPine": { + "primary_job_type": { + "expected": "Full-time", + "actual": "Full-time", + "confidence": 0.9, + "reasoning": "The work experience at BayPine as an \"Investment Professional\" lasted from September 2020 to July 2022, which is a duration of nearly two years, indicating a full-time role rather than an internship. Given the nature of the position and the context of the candidate's previous roles in investment firms, this aligns with a full-time employment classification. For the secondary job type, the role is clearly in the investment sector, specifically in private equity, which fits the INVESTING category." + }, + "secondary_job_type": { + "expected": "Investing", + "actual": "Investing", + "confidence": 0.9, + "reasoning": "The work experience at BayPine as an \"Investment Professional\" lasted from September 2020 to July 2022, which is a duration of nearly two years, indicating a full-time role rather than an internship. Given the nature of the position and the context of the candidate's previous roles in investment firms, this aligns with a full-time employment classification. For the secondary job type, the role is clearly in the investment sector, specifically in private equity, which fits the INVESTING category." + }, + "investing_focus_asset_class": { + "expected": "Private Equity / Buyouts", + "actual": "Private Equity / Buyouts", + "confidence": 0.6, + "reasoning": "The candidate worked as an Investment Professional at BayPine, which is a private investment firm. While the specific description of their role at BayPine is not provided, the context of the firm being involved in private investments suggests a focus on private equity. Given the candidate's previous experience at General Atlantic, which is known for growth equity, and the nature of BayPine's operations, it is reasonable to classify this experience under private equity buyouts, albeit with moderate confidence due to the lack of detailed responsibilities in the specific work experience item." + }, + "investing_focus_sector": { + "expected": null, + "actual": "Generalist", + "confidence": 0.4, + "reasoning": "The specific work experience at BayPine is classified as \"Financial Services,\" which is broad and does not indicate a specific focus on any one sector. The lack of detailed description about the types of investments made or sectors targeted during the candidate's time as an Investment Professional makes it difficult to classify this experience into a more specific category. Therefore, I opted for GENERALIST, but with low confidence due to the ambiguity of the information provided." + } + }, + "Job: Investment Professional at General Atlantic": { + "primary_job_type": { + "expected": "Full-time", + "actual": "Full-time", + "confidence": 0.9, + "reasoning": "The work experience at General Atlantic as an Investment Professional lasted from July 2017 to August 2020, which is over three years, indicating a full-time role rather than an internship. The role is clearly defined within the financial services sector, specifically in a technology group, which aligns with investment roles. Therefore, the primary job type is classified as FULL_TIME. For the secondary job type, since the position involves professional investing activities, it is classified as INVESTING." + }, + "secondary_job_type": { + "expected": "Investing", + "actual": "Investing", + "confidence": 0.9, + "reasoning": "The work experience at General Atlantic as an Investment Professional lasted from July 2017 to August 2020, which is over three years, indicating a full-time role rather than an internship. The role is clearly defined within the financial services sector, specifically in a technology group, which aligns with investment roles. Therefore, the primary job type is classified as FULL_TIME. For the secondary job type, since the position involves professional investing activities, it is classified as INVESTING." + }, + "investing_focus_asset_class": { + "expected": "Growth Equity", + "actual": "Growth Equity", + "confidence": 0.8, + "reasoning": "The candidate worked as an Investment Professional at General Atlantic, which is known for its focus on growth equity investments, particularly in the technology sector. The description \"Technology Group\" suggests a specialization in investing in growth-stage technology companies, aligning well with the GROWTH_EQUITY classification. While the specific responsibilities are not detailed, the firm's reputation and focus provide strong support for this classification." + }, + "investing_focus_sector": { + "expected": "Technology / Software / TMT", + "actual": "Technology / Software / TMT", + "confidence": 0.9, + "reasoning": "The specific work experience at General Atlantic is categorized under the \"Technology Group,\" indicating a clear focus on technology investments. This aligns with the investing focus sector of TECHNOLOGY_SOFTWARE_TMT. The candidate's role as an Investment Professional in a firm known for its technology investments further supports this classification." + } + }, + "Job: Investment Banking at Morgan Stanley": { + "primary_job_type": { + "expected": "Full-time", + "actual": "Full-time", + "confidence": 1.0, + "reasoning": "The work experience at Morgan Stanley is classified as FULL_TIME because it spans over two years, which is longer than the typical duration for an internship. The role is explicitly titled \"Investment Banking,\" indicating a professional position rather than a temporary or student role. For the secondary job type, it is classified as INVESTMENT_BANKING since the position is directly related to investment banking activities at a well-known financial institution. This aligns with the candidate's previous experience in investment banking and their overall career trajectory in finance." + }, + "secondary_job_type": { + "expected": "Investment Banking", + "actual": "Investment Banking", + "confidence": 1.0, + "reasoning": "The work experience at Morgan Stanley is classified as FULL_TIME because it spans over two years, which is longer than the typical duration for an internship. The role is explicitly titled \"Investment Banking,\" indicating a professional position rather than a temporary or student role. For the secondary job type, it is classified as INVESTMENT_BANKING since the position is directly related to investment banking activities at a well-known financial institution. This aligns with the candidate's previous experience in investment banking and their overall career trajectory in finance." + }, + "investment_banking_group": { + "expected": "Not Specified", + "actual": "Generalist", + "confidence": 0.8, + "reasoning": "The candidate worked in the Investment Banking division at Morgan Stanley, a leading investment bank known for its generalist approach, covering a wide range of industries. The lack of specific details in the work experience description does not indicate a focus on M&A, ECM, or any specialized sector, which supports the classification as a generalist. Additionally, the candidate's subsequent roles in growth equity and technology further suggest a broad exposure to various sectors rather than a specialization." + } + } + } + }, + { + "profile_name": "Eric Armagost", + "correct_enums": 6, + "total_enums": 11, + "accuracy": 0.5454545454545454, + "additional_enums_in_actual": 1, + "comparisons": { + "Education: Brown University": { + "expected": "Undergraduate (Completed)", + "actual": "Undergraduate (Completed)", + "confidence": 1.0, + "reasoning": "The educational item from Linkedin clearly states that the candidate has a Bachelor of Arts (B.A.) degree in Business Economics from Brown University. This matches the information provided in the full resume, which also lists the same degree and field of study. Since the degree is completed and aligns perfectly with the resume, it falls under the category of a completed undergraduate degree." + }, + "Job: Investment Professional at Accel-KKR": { + "primary_job_type": { + "expected": "Full-time", + "actual": "Full-time", + "confidence": 1.0, + "reasoning": "The work experience at Accel-KKR is classified as FULL_TIME because it is a long-term position that has been held since May 2017, indicating ongoing employment. The role of Investment Professional at a private equity firm aligns with the INVESTING category, as it involves activities related to acquiring and investing in companies, which is characteristic of private equity roles. The candidate's resume supports this classification, as it lists Accel-KKR as a leading private equity firm, further confirming the nature of the work." + }, + "secondary_job_type": { + "expected": "Investing", + "actual": "Investing", + "confidence": 1.0, + "reasoning": "The work experience at Accel-KKR is classified as FULL_TIME because it is a long-term position that has been held since May 2017, indicating ongoing employment. The role of Investment Professional at a private equity firm aligns with the INVESTING category, as it involves activities related to acquiring and investing in companies, which is characteristic of private equity roles. The candidate's resume supports this classification, as it lists Accel-KKR as a leading private equity firm, further confirming the nature of the work." + }, + "investing_focus_asset_class": { + "expected": "Growth Equity", + "actual": "Private Equity / Buyouts", + "confidence": 0.8, + "reasoning": "The specific work experience at Accel-KKR indicates a focus on private equity investments, particularly in technology and software sectors. The description highlights typical transactions such as acquisitions, buyouts of divisions from public companies, and take-private transactions, which are characteristic of private equity buyouts. This aligns well with the classification of PRIVATE_EQUITY_BUYOUTS. The confidence level is high due to the clear emphasis on buyouts and private company investments in the provided details." + }, + "investing_focus_sector": { + "expected": null, + "actual": "Technology / Software / TMT", + "confidence": 0.9, + "reasoning": "The specific work experience at Accel-KKR clearly indicates a focus on investing in software and technology-enabled services companies. The description highlights that the firm is dedicated exclusively to this sector, which aligns with the TECHNOLOGY_SOFTWARE_TMT category. The confidence level is high due to the explicit mention of technology focus in both the resume and the work experience item." + } + }, + "Job: None at William Blair & Company": { + "primary_job_type": { + "expected": "Full-time", + "actual": "Full-time", + "confidence": 1.0, + "reasoning": "The work experience at William Blair & Company is classified as FULL_TIME because it spans nearly two years, which is longer than the typical duration for an internship. The role is explicitly titled \"Investment Banking,\" which aligns with the secondary job type of INVESTMENT_BANKING, as it involves activities typical of investment banking roles. The candidate's resume also supports this classification, as it lists this position as part of their professional experience in the financial services sector." + }, + "secondary_job_type": { + "expected": "Investment Banking", + "actual": "Investment Banking", + "confidence": 1.0, + "reasoning": "The work experience at William Blair & Company is classified as FULL_TIME because it spans nearly two years, which is longer than the typical duration for an internship. The role is explicitly titled \"Investment Banking,\" which aligns with the secondary job type of INVESTMENT_BANKING, as it involves activities typical of investment banking roles. The candidate's resume also supports this classification, as it lists this position as part of their professional experience in the financial services sector." + }, + "investment_banking_group": { + "expected": "Not Specified", + "actual": "Generalist", + "confidence": 0.8, + "reasoning": "The candidate worked in the Investment Banking division at William Blair & Company, a firm known for providing a wide range of financial advisory services, which suggests a generalist role. The absence of specific details in the work experience description indicates that the candidate may have been involved in various transactions across different sectors rather than specializing in a particular area. Additionally, their subsequent role at Accel-KKR, a private equity firm focused on technology, further supports the idea of a generalist background prior to specializing." + } + }, + "Job: None at Fidelity Investments": { + "primary_job_type": { + "expected": "Full-time", + "actual": "Internship", + "confidence": 0.9, + "reasoning": "The work experience at Fidelity Investments as \"PI Corporate Finance\" took place from June 2013 to May 2014, which is a duration of nearly one year. Given that this role is part of the candidate's early career before their full-time positions, it is classified as an INTERNSHIP. The role is also in the financial services sector, which aligns with the candidate's subsequent investment banking and private equity roles. Therefore, the secondary job type is classified as INVESTMENT_BANKING, as corporate finance roles typically involve investment banking activities." + }, + "secondary_job_type": { + "expected": "Other", + "actual": "Investment Banking", + "confidence": 0.9, + "reasoning": "The work experience at Fidelity Investments as \"PI Corporate Finance\" took place from June 2013 to May 2014, which is a duration of nearly one year. Given that this role is part of the candidate's early career before their full-time positions, it is classified as an INTERNSHIP. The role is also in the financial services sector, which aligns with the candidate's subsequent investment banking and private equity roles. Therefore, the secondary job type is classified as INVESTMENT_BANKING, as corporate finance roles typically involve investment banking activities." + } + } + } + } +] \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index c18115acf616a2485e82796dd0d6728efc0bde38..4071706bd29aaa24d6acfd1b44efce40da17ed4e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,7 +11,9 @@ dependencies = [ "pydantic>=2.8.2", "pytimeparse>=1.1.8", "requests>=2.32.3", + "rich>=13.8.1", "structlog>=24.4.0", + "tabulate>=0.9.0", "tenacity>=9.0.0", "tomli>=2.0.1", ] diff --git a/src/notebooks/classifiers/education_classifier.ipynb b/src/notebooks/classifiers/education_classifier.ipynb index a0e802b06b8caabfc69265366150235e4bdb88a9..e0844aef2a330656aac927c16fdd8fed8391757e 100644 --- a/src/notebooks/classifiers/education_classifier.ipynb +++ b/src/notebooks/classifiers/education_classifier.ipynb @@ -4,13 +4,33 @@ "cell_type": "code", "execution_count": 1, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "/Volumes/code/geometric/VSP-data-enrichment/src\n" + ] + } + ], "source": [ "import json\n", + "import os\n", + "import subprocess\n", "\n", "from vsp.app.model.linkedin.linkedin_models import LinkedinProfile\n", "\n", - "with open(\"data/hansae_catlett.json\") as f:\n", + "\n", + "def get_git_root():\n", + " return subprocess.check_output([\"git\", \"rev-parse\", \"--show-toplevel\"]).decode().strip()\n", + "\n", + "\n", + "git_root = get_git_root()\n", + "os.chdir(path=get_git_root() + \"/src\")\n", + "print(os.getcwd())\n", + "\n", + "\n", + "with open(\"../tests/test_data/hansae_catlett.json\") as f:\n", " data = json.load(f)\n", " # convert to linkedin profile\n", "\n", @@ -19,60 +39,50 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "\u001b[2m2024-09-07 15:31:47\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mOpenAI API called \u001b[0m \u001b[36mmodel\u001b[0m=\u001b[35mgpt-4o-mini\u001b[0m\n", - "\u001b[2m2024-09-07 15:31:47\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mToken usage \u001b[0m \u001b[36minput_tokens\u001b[0m=\u001b[35m1069\u001b[0m \u001b[36moutput_tokens\u001b[0m=\u001b[35m122\u001b[0m\n", - "\u001b[2m2024-09-07 15:31:47\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mOpenAI API called \u001b[0m \u001b[36mmodel\u001b[0m=\u001b[35mgpt-4o-mini\u001b[0m\n", - "\u001b[2m2024-09-07 15:31:47\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mToken usage \u001b[0m \u001b[36minput_tokens\u001b[0m=\u001b[35m1023\u001b[0m \u001b[36moutput_tokens\u001b[0m=\u001b[35m117\u001b[0m\n", - "\u001b[2m2024-09-07 15:31:47\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mOpenAI API called \u001b[0m \u001b[36mmodel\u001b[0m=\u001b[35mgpt-4o-mini\u001b[0m\n", - "\u001b[2m2024-09-07 15:31:47\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mToken usage \u001b[0m \u001b[36minput_tokens\u001b[0m=\u001b[35m988\u001b[0m \u001b[36moutput_tokens\u001b[0m=\u001b[35m145\u001b[0m\n", - "\u001b[2m2024-09-07 15:31:47\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mOpenAI API called \u001b[0m \u001b[36mmodel\u001b[0m=\u001b[35mgpt-4o-mini\u001b[0m\n", - "\u001b[2m2024-09-07 15:31:47\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mToken usage \u001b[0m \u001b[36minput_tokens\u001b[0m=\u001b[35m1031\u001b[0m \u001b[36moutput_tokens\u001b[0m=\u001b[35m127\u001b[0m\n", - "{\n", - " \"output\": \"MBA\",\n", - " \"confidence\": 1.0,\n", - " \"reasoning\": \"The specific LinkedIn education item clearly states that the candidate obtained a Master of Business Administration (M.B.A.) from Stanford University Graduate School of Business, with a period of study from 2016 to 2019. This matches exactly with the educational background provided in the full resume, which also lists the same degree and institution. The presence of additional activities and awards in the LinkedIn item further supports the classification as an MBA, confirming the candidate's engagement and accomplishments during their studies. Therefore, the classification is confidently categorized as \\\"MBA.\\\"\"\n", - "}\n", + "\u001b[2m2024-09-11 14:33:11\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mFetching parameter from Parameter Store\u001b[0m \u001b[36mparameter\u001b[0m=\u001b[35m/secrets/openai/api_key\u001b[0m\n", + "\u001b[2m2024-09-11 14:33:11\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mCreating boto3 client \u001b[0m \u001b[36mservice\u001b[0m=\u001b[35mssm\u001b[0m\n", + "\u001b[2m2024-09-11 14:33:11\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mAssuming role \u001b[0m \u001b[36mrole_arn\u001b[0m=\u001b[35marn:aws:iam::339713096219:role/ReadWrite\u001b[0m\n", + "\u001b[2m2024-09-11 14:33:12\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mRole assumed successfully \u001b[0m\n", + "\u001b[2m2024-09-11 14:33:12\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mSuccessfully fetched parameter\u001b[0m \u001b[36mparameter\u001b[0m=\u001b[35m/secrets/openai/api_key\u001b[0m\n", + "\u001b[2m2024-09-11 14:33:12\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mFetching parameter from Parameter Store\u001b[0m \u001b[36mparameter\u001b[0m=\u001b[35m/secrets/rapidapi/linkedin\u001b[0m\n", + "\u001b[2m2024-09-11 14:33:12\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mCreating boto3 client \u001b[0m \u001b[36mservice\u001b[0m=\u001b[35mssm\u001b[0m\n", + "\u001b[2m2024-09-11 14:33:12\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mAssuming role \u001b[0m \u001b[36mrole_arn\u001b[0m=\u001b[35marn:aws:iam::339713096219:role/ReadWrite\u001b[0m\n", + "\u001b[2m2024-09-11 14:33:13\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mRole assumed successfully \u001b[0m\n", + "\u001b[2m2024-09-11 14:33:13\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mSuccessfully fetched parameter\u001b[0m \u001b[36mparameter\u001b[0m=\u001b[35m/secrets/rapidapi/linkedin\u001b[0m\n", + "\u001b[2m2024-09-11 14:33:14\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mOpenAI API called \u001b[0m \u001b[36mmodel\u001b[0m=\u001b[35mgpt-4o-mini\u001b[0m\n", + "\u001b[2m2024-09-11 14:33:14\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mToken usage \u001b[0m \u001b[36minput_tokens\u001b[0m=\u001b[35m1018\u001b[0m \u001b[36moutput_tokens\u001b[0m=\u001b[35m116\u001b[0m\n", + "\u001b[2m2024-09-11 14:33:14\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mOpenAI API called \u001b[0m \u001b[36mmodel\u001b[0m=\u001b[35mgpt-4o-mini\u001b[0m\n", + "\u001b[2m2024-09-11 14:33:14\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mToken usage \u001b[0m \u001b[36minput_tokens\u001b[0m=\u001b[35m975\u001b[0m \u001b[36moutput_tokens\u001b[0m=\u001b[35m140\u001b[0m\n", + "\u001b[2m2024-09-11 14:33:15\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mOpenAI API called \u001b[0m \u001b[36mmodel\u001b[0m=\u001b[35mgpt-4o-mini\u001b[0m\n", + "\u001b[2m2024-09-11 14:33:15\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mToken usage \u001b[0m \u001b[36minput_tokens\u001b[0m=\u001b[35m1064\u001b[0m \u001b[36moutput_tokens\u001b[0m=\u001b[35m109\u001b[0m\n", + "\u001b[2m2024-09-11 14:33:15\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mOpenAI API called \u001b[0m \u001b[36mmodel\u001b[0m=\u001b[35mgpt-4o-mini\u001b[0m\n", + "\u001b[2m2024-09-11 14:33:15\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mToken usage \u001b[0m \u001b[36minput_tokens\u001b[0m=\u001b[35m1026\u001b[0m \u001b[36moutput_tokens\u001b[0m=\u001b[35m111\u001b[0m\n", "{\n", " \"output\": \"Graduate School\",\n", " \"confidence\": 1.0,\n", - " \"reasoning\": \"The specific LinkedIn education item clearly states that the candidate obtained a Master of Public Policy (M.P.P.) from Stanford University, which aligns perfectly with the information provided in the full resume. The degree is a graduate-level qualification, and the period of study (2016 to 2019) matches the timeline in the resume. Additionally, the description of the candidate's work during this program further supports the classification as a graduate school education. Therefore, it is accurately classified as GRAD_SCHOOL.\"\n", + " \"reasoning\": \"The specific Linkedin education item clearly states that the candidate obtained a Master of Public Policy (M.P.P.) from Stanford University, which aligns perfectly with the information provided in the full resume. The degree is a graduate-level qualification, and the period of study (2016 to 2019) matches the timeline in the resume. Additionally, the description of the candidate's work during this program further supports the classification as a graduate school education. Therefore, it is accurately classified as GRAD_SCHOOL.\"\n", "}\n", "{\n", " \"output\": \"Undergraduate (Incomplete)\",\n", " \"confidence\": 0.9,\n", - " \"reasoning\": \"The specific LinkedIn education item indicates that the candidate participated in a \\\"Study Abroad\\\" program at the University of New South Wales, which is typically associated with undergraduate studies. The resume shows that the candidate completed a Bachelor of Arts at Harvard University, and the study abroad experience aligns with the undergraduate level of education. Since the degree type is explicitly labeled as \\\"Study Abroad,\\\" it falls under the category of \\\"Undergraduate (Incomplete)\\\" as it does not represent a completed degree but rather an additional educational experience during their undergraduate studies. The confidence level is high due to the clear context provided by both the resume and the LinkedIn item.\"\n", - "}\n", - "{\n", - " \"output\": \"Undergraduate (Completed)\",\n", - " \"confidence\": 1.0,\n", - " \"reasoning\": \"The specific LinkedIn education item clearly states that the candidate earned a Bachelor of Arts degree in Biomedical Engineering and Philosophy from Harvard University, with a graduation period from 2007 to 2011. This aligns perfectly with the information provided in the full resume, which also lists the same degree and institution, confirming its completion. Since the degree is a completed undergraduate degree, it fits squarely into the \\\"Undergraduate (Completed)\\\" category. The additional details about graduating with honors and involvement in various activities further support the classification as a completed undergraduate education.\"\n", + " \"reasoning\": \"The specific Linkedin education item indicates that the candidate participated in a \\\"Study Abroad\\\" program at the University of New South Wales, focusing on Engineering, Philosophy, and Finance. This aligns with the resume, which shows that the candidate completed a Bachelor of Arts at Harvard University, suggesting that the study abroad experience was part of their undergraduate education. Since the degree is classified as \\\"Study Abroad\\\" and does not indicate completion of a separate degree, it falls under the category of \\\"Undergraduate (Incomplete).\\\" The high confidence level is due to the clear connection between the study abroad experience and the candidate's undergraduate studies.\"\n", "}\n", "{\n", " \"output\": \"MBA\",\n", " \"confidence\": 1.0,\n", - " \"reasoning\": \"The specific LinkedIn education item clearly states that the candidate obtained a Master of Business Administration (M.B.A.) from Stanford University Graduate School of Business, with a period of study from 2016 to 2019. This matches exactly with the educational background provided in the full resume, which also lists the same degree and institution. The presence of additional activities and awards in the LinkedIn item further supports the classification as an MBA, confirming the candidate's engagement and accomplishments during their studies. Therefore, the classification is confidently categorized as \\\"MBA.\\\"\"\n", - "}\n", - "{\n", - " \"output\": \"Graduate School\",\n", - " \"confidence\": 1.0,\n", - " \"reasoning\": \"The specific LinkedIn education item clearly states that the candidate obtained a Master of Public Policy (M.P.P.) from Stanford University, which aligns perfectly with the information provided in the full resume. The degree is a graduate-level qualification, and the period of study (2016 to 2019) matches the timeline in the resume. Additionally, the description of the candidate's work during this program further supports the classification as a graduate school education. Therefore, it is accurately classified as GRAD_SCHOOL.\"\n", - "}\n", - "{\n", - " \"output\": \"Undergraduate (Incomplete)\",\n", - " \"confidence\": 0.9,\n", - " \"reasoning\": \"The specific LinkedIn education item indicates that the candidate participated in a \\\"Study Abroad\\\" program at the University of New South Wales, which is typically associated with undergraduate studies. The resume shows that the candidate completed a Bachelor of Arts at Harvard University, and the study abroad experience aligns with the undergraduate level of education. Since the degree type is explicitly labeled as \\\"Study Abroad,\\\" it falls under the category of \\\"Undergraduate (Incomplete)\\\" as it does not represent a completed degree but rather an additional educational experience during their undergraduate studies. The confidence level is high due to the clear context provided by both the resume and the LinkedIn item.\"\n", + " \"reasoning\": \"The specific Linkedin education item clearly states that the candidate obtained a Master of Business Administration (M.B.A.) from Stanford University Graduate School of Business, with the period of study from 2016 to 2019. This matches exactly with the information provided in the full resume, which also lists the same degree and institution. The presence of various activities and awards associated with the MBA program further supports the classification as an MBA. Therefore, the classification is confidently categorized as \\\"MBA.\\\"\"\n", "}\n", "{\n", " \"output\": \"Undergraduate (Completed)\",\n", " \"confidence\": 1.0,\n", - " \"reasoning\": \"The specific LinkedIn education item clearly states that the candidate earned a Bachelor of Arts degree in Biomedical Engineering and Philosophy from Harvard University, with a graduation period from 2007 to 2011. This aligns perfectly with the information provided in the full resume, which also lists the same degree and institution, confirming its completion. Since the degree is a completed undergraduate degree, it fits squarely into the \\\"Undergraduate (Completed)\\\" category. The additional details about graduating with honors and involvement in various activities further support the classification as a completed undergraduate education.\"\n", + " \"reasoning\": \"The specific Linkedin education item clearly states that the candidate earned a Bachelor of Arts degree in Biomedical Engineering and Philosophy from Harvard University, with a graduation period from 2007 to 2011. This aligns perfectly with the information provided in the full resume, which also lists the same degree and institution, confirming its completion. The description \\\"Graduated with Honors\\\" further supports that this is a completed undergraduate degree. Therefore, it is classified as \\\"Undergraduate (Completed).\\\"\"\n", "}\n" ] } diff --git a/src/notebooks/classifiers/work_experience/investment_banking_group_classifier.ipynb b/src/notebooks/classifiers/work_experience/investment_banking_group_classifier.ipynb index b526dec4dc2ff6fce0bb9716c514ab34deb6b82a..8584cbcad00562bd6876b693c2e0f8a8a05333b4 100644 --- a/src/notebooks/classifiers/work_experience/investment_banking_group_classifier.ipynb +++ b/src/notebooks/classifiers/work_experience/investment_banking_group_classifier.ipynb @@ -1,17 +1,5 @@ { "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "\n", - "os.getcwd()\n", - "os.chdir(path=os.getcwd() + \"/../../../\")" - ] - }, { "cell_type": "code", "execution_count": null, @@ -19,13 +7,24 @@ "outputs": [], "source": [ "import json\n", + "import os\n", + "import subprocess\n", "\n", "from vsp.app.model.linkedin.linkedin_models import LinkedinProfile\n", "\n", + "\n", + "def get_git_root():\n", + " return subprocess.check_output([\"git\", \"rev-parse\", \"--show-toplevel\"]).decode().strip()\n", + "\n", + "\n", + "git_root = get_git_root()\n", + "os.chdir(path=get_git_root() + \"/src\")\n", "print(os.getcwd())\n", "\n", - "with open(\"notebooks/data/eric_armagost.json\") as f:\n", + "\n", + "with open(\"../tests/test_data/eric_armagost.json\") as f:\n", " data = json.load(f)\n", + " # convert to linkedin profile\n", "\n", "profile = LinkedinProfile.profile_from_json(data)" ] diff --git a/src/notebooks/classifiers/work_experience/investment_focus_asset_class_classifier.ipynb b/src/notebooks/classifiers/work_experience/investment_focus_asset_class_classifier.ipynb index 4ca119992e35e93d23b5ad244f0cea8fd1ee45fe..305dd3b0ba7eedc16140a8c602b334be39b0c1a8 100644 --- a/src/notebooks/classifiers/work_experience/investment_focus_asset_class_classifier.ipynb +++ b/src/notebooks/classifiers/work_experience/investment_focus_asset_class_classifier.ipynb @@ -2,91 +2,38 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, "outputs": [], - "source": [ - "import os\n", - "\n", - "os.getcwd()\n", - "os.chdir(path=os.getcwd() + \"/../../../\")" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "/Volumes/code/geometric/VSP-data-enrichment/src\n" - ] - } - ], "source": [ "import json\n", + "import os\n", + "import subprocess\n", "\n", "from vsp.app.model.linkedin.linkedin_models import LinkedinProfile\n", "\n", + "\n", + "def get_git_root():\n", + " return subprocess.check_output([\"git\", \"rev-parse\", \"--show-toplevel\"]).decode().strip()\n", + "\n", + "\n", + "git_root = get_git_root()\n", + "os.chdir(path=get_git_root() + \"/src\")\n", "print(os.getcwd())\n", "\n", - "with open(\"notebooks/data/eric_armagost.json\") as f:\n", + "\n", + "with open(\"../tests/test_data/eric_armagost.json\") as f:\n", " data = json.load(f)\n", + " # convert to linkedin profile\n", "\n", "profile = LinkedinProfile.profile_from_json(data)" ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[2m2024-09-10 13:03:31\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mFetching parameter from Parameter Store\u001b[0m \u001b[36mparameter\u001b[0m=\u001b[35m/secrets/openai/api_key\u001b[0m\n", - "\u001b[2m2024-09-10 13:03:31\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mCreating boto3 client \u001b[0m \u001b[36mservice\u001b[0m=\u001b[35mssm\u001b[0m\n", - "\u001b[2m2024-09-10 13:03:31\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mAssuming role \u001b[0m \u001b[36mrole_arn\u001b[0m=\u001b[35marn:aws:iam::339713096219:role/ReadWrite\u001b[0m\n", - "\u001b[2m2024-09-10 13:03:31\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mRole assumed successfully \u001b[0m\n", - "\u001b[2m2024-09-10 13:03:32\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mSuccessfully fetched parameter\u001b[0m \u001b[36mparameter\u001b[0m=\u001b[35m/secrets/openai/api_key\u001b[0m\n", - "\u001b[2m2024-09-10 13:03:33\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mOpenAI API called \u001b[0m \u001b[36mmodel\u001b[0m=\u001b[35mgpt-4o-mini\u001b[0m\n", - "\u001b[2m2024-09-10 13:03:33\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mToken usage \u001b[0m \u001b[36minput_tokens\u001b[0m=\u001b[35m1062\u001b[0m \u001b[36moutput_tokens\u001b[0m=\u001b[35m102\u001b[0m\n", - "\u001b[2m2024-09-10 13:03:33\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mOpenAI API called \u001b[0m \u001b[36mmodel\u001b[0m=\u001b[35mgpt-4o-mini\u001b[0m\n", - "\u001b[2m2024-09-10 13:03:33\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mToken usage \u001b[0m \u001b[36minput_tokens\u001b[0m=\u001b[35m1139\u001b[0m \u001b[36moutput_tokens\u001b[0m=\u001b[35m97\u001b[0m\n", - "\u001b[2m2024-09-10 13:03:33\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mOpenAI API called \u001b[0m \u001b[36mmodel\u001b[0m=\u001b[35mgpt-4o-mini\u001b[0m\n", - "\u001b[2m2024-09-10 13:03:33\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mToken usage \u001b[0m \u001b[36minput_tokens\u001b[0m=\u001b[35m1062\u001b[0m \u001b[36moutput_tokens\u001b[0m=\u001b[35m116\u001b[0m\n", - "\u001b[2m2024-09-10 13:03:33\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mOpenAI API called \u001b[0m \u001b[36mmodel\u001b[0m=\u001b[35mgpt-4o-mini\u001b[0m\n", - "\u001b[2m2024-09-10 13:03:33\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mToken usage \u001b[0m \u001b[36minput_tokens\u001b[0m=\u001b[35m1061\u001b[0m \u001b[36moutput_tokens\u001b[0m=\u001b[35m114\u001b[0m\n", - "{\n", - " \"investing_focus_asset_class\": \"Other\",\n", - " \"confidence\": 0.4,\n", - " \"reasoning\": \"The specific work experience at William Blair & Company is categorized as \\\"Investment Banking,\\\" which primarily focuses on advisory services rather than direct investments in asset classes like venture capital or private equity. The lack of detailed investment-related responsibilities in the description further supports this classification, leading to a lower confidence level.\",\n", - " \"other_description\": \"Investment banking typically involves advisory services for mergers and acquisitions, capital raising, and financial restructuring, rather than direct investments.\"\n", - "}\n", - "{\n", - " \"investing_focus_asset_class\": \"Private Equity / Buyouts\",\n", - " \"confidence\": 0.9,\n", - " \"reasoning\": \"The specific work experience at Accel-KKR indicates a focus on private equity investments, particularly in technology and software sectors. The description highlights typical transactions such as acquisitions, buyouts of divisions from public companies, and take-private transactions, which are all characteristic of private equity buyouts. This aligns well with the classification of PRIVATE_EQUITY_BUYOUTS.\",\n", - " \"other_description\": null\n", - "}\n", - "{\n", - " \"investing_focus_asset_class\": \"Other\",\n", - " \"confidence\": 0.4,\n", - " \"reasoning\": \"The specific work experience at Fidelity Investments as FFAS Corporate Finance does not provide clear evidence of a direct focus on any of the predefined investing categories. The role likely involved corporate finance activities, which may include advisory services rather than direct investment activities in the specified asset classes. Therefore, I classified it as OTHER, with a low confidence level due to the lack of detailed investment-related responsibilities in the description.\",\n", - " \"other_description\": \"Corporate finance within a financial services context, focusing on financial advisory and capital raising.\"\n", - "}\n", - "{\n", - " \"investing_focus_asset_class\": \"Other\",\n", - " \"confidence\": 0.4,\n", - " \"reasoning\": \"The specific work experience at Fidelity Investments as a PI Corporate Finance professional does not provide enough detail to classify it into one of the predefined investing focus or asset class categories. The lack of a description of responsibilities or specific investment activities makes it difficult to ascertain a clear focus. Therefore, I classified it as OTHER, reflecting its general corporate finance nature within the financial services sector.\",\n", - " \"other_description\": \"Corporate finance role focused on financial services, not directly tied to a specific investing focus or asset class.\"\n", - "}\n" - ] - } - ], + "outputs": [], "source": [ "import asyncio\n", "\n", diff --git a/src/notebooks/classifiers/work_experience/investment_focus_sectors_classifier.ipynb b/src/notebooks/classifiers/work_experience/investment_focus_sectors_classifier.ipynb index d798dd0ee007df728e5b8f3c3f1debe5f6bcceea..3929a457e6c0920cc06b70aa5c825345c714efd1 100644 --- a/src/notebooks/classifiers/work_experience/investment_focus_sectors_classifier.ipynb +++ b/src/notebooks/classifiers/work_experience/investment_focus_sectors_classifier.ipynb @@ -2,87 +2,38 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, "outputs": [], - "source": [ - "import os\n", - "\n", - "os.getcwd()\n", - "os.chdir(path=os.getcwd() + \"/../../../\")" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "/Volumes/code/geometric/VSP-data-enrichment/src\n" - ] - } - ], "source": [ "import json\n", + "import os\n", + "import subprocess\n", "\n", "from vsp.app.model.linkedin.linkedin_models import LinkedinProfile\n", "\n", + "\n", + "def get_git_root():\n", + " return subprocess.check_output([\"git\", \"rev-parse\", \"--show-toplevel\"]).decode().strip()\n", + "\n", + "\n", + "git_root = get_git_root()\n", + "os.chdir(path=get_git_root() + \"/src\")\n", "print(os.getcwd())\n", "\n", - "with open(\"notebooks/data/eric_armagost.json\") as f:\n", + "\n", + "with open(\"../tests/test_data/eric_armagost.json\") as f:\n", " data = json.load(f)\n", + " # convert to linkedin profile\n", "\n", "profile = LinkedinProfile.profile_from_json(data)" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[2m2024-09-10 14:00:22\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mFetching parameter from Parameter Store\u001b[0m \u001b[36mparameter\u001b[0m=\u001b[35m/secrets/openai/api_key\u001b[0m\n", - "\u001b[2m2024-09-10 14:00:22\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mCreating boto3 client \u001b[0m \u001b[36mservice\u001b[0m=\u001b[35mssm\u001b[0m\n", - "\u001b[2m2024-09-10 14:00:22\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mAssuming role \u001b[0m \u001b[36mrole_arn\u001b[0m=\u001b[35marn:aws:iam::339713096219:role/ReadWrite\u001b[0m\n", - "\u001b[2m2024-09-10 14:00:23\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mRole assumed successfully \u001b[0m\n", - "\u001b[2m2024-09-10 14:00:23\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mSuccessfully fetched parameter\u001b[0m \u001b[36mparameter\u001b[0m=\u001b[35m/secrets/openai/api_key\u001b[0m\n", - "\u001b[2m2024-09-10 14:00:24\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mOpenAI API called \u001b[0m \u001b[36mmodel\u001b[0m=\u001b[35mgpt-4o-mini\u001b[0m\n", - "\u001b[2m2024-09-10 14:00:24\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mToken usage \u001b[0m \u001b[36minput_tokens\u001b[0m=\u001b[35m1138\u001b[0m \u001b[36moutput_tokens\u001b[0m=\u001b[35m92\u001b[0m\n", - "\u001b[2m2024-09-10 14:00:24\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mOpenAI API called \u001b[0m \u001b[36mmodel\u001b[0m=\u001b[35mgpt-4o-mini\u001b[0m\n", - "\u001b[2m2024-09-10 14:00:24\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mToken usage \u001b[0m \u001b[36minput_tokens\u001b[0m=\u001b[35m1061\u001b[0m \u001b[36moutput_tokens\u001b[0m=\u001b[35m99\u001b[0m\n", - "\u001b[2m2024-09-10 14:00:24\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mOpenAI API called \u001b[0m \u001b[36mmodel\u001b[0m=\u001b[35mgpt-4o-mini\u001b[0m\n", - "\u001b[2m2024-09-10 14:00:24\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mToken usage \u001b[0m \u001b[36minput_tokens\u001b[0m=\u001b[35m1060\u001b[0m \u001b[36moutput_tokens\u001b[0m=\u001b[35m95\u001b[0m\n", - "\u001b[2m2024-09-10 14:00:24\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mOpenAI API called \u001b[0m \u001b[36mmodel\u001b[0m=\u001b[35mgpt-4o-mini\u001b[0m\n", - "\u001b[2m2024-09-10 14:00:24\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mToken usage \u001b[0m \u001b[36minput_tokens\u001b[0m=\u001b[35m1061\u001b[0m \u001b[36moutput_tokens\u001b[0m=\u001b[35m115\u001b[0m\n", - "{\n", - " \"investing_focus_sector\": \"Technology / Software / TMT\",\n", - " \"confidence\": 0.9,\n", - " \"reasoning\": \"The specific work experience at Accel-KKR clearly indicates a focus on investing in software and technology-enabled services companies. The description highlights that the firm is dedicated exclusively to this sector, which aligns with the TECHNOLOGY_SOFTWARE_TMT category. The candidate's role as an Investment Professional further supports this classification, as it involves transactions related to technology companies.\"\n", - "}\n", - "{\n", - " \"investing_focus_sector\": \"Financial Institutions Group (FIG) / Fintech\",\n", - " \"confidence\": 0.8,\n", - " \"reasoning\": \"The specific work experience at Fidelity Investments is clearly within the financial services sector, as indicated by the company name and industry classification. The role in FFAS Corporate Finance suggests involvement in financial analysis and corporate finance activities, which aligns with the focus on financial institutions. While the description lacks detail, the context of Fidelity Investments as a major player in financial services supports a strong classification in this sector.\"\n", - "}\n", - "{\n", - " \"investing_focus_sector\": \"Financial Institutions Group (FIG) / Fintech\",\n", - " \"confidence\": 0.8,\n", - " \"reasoning\": \"The specific work experience item is from Fidelity Investments, a company clearly identified within the financial services sector. The job title \\\"PI Corporate Finance\\\" suggests a focus on corporate finance activities, which are typically associated with financial institutions. While the description lacks detail, the context of the company and the role strongly indicate a focus on financial services, justifying a high confidence level.\"\n", - "}\n", - "{\n", - " \"investing_focus_sector\": \"Financial Institutions Group (FIG) / Fintech\",\n", - " \"confidence\": 0.8,\n", - " \"reasoning\": \"The specific work experience item indicates that the candidate worked in Investment Banking at William Blair & Company, which is categorized under Financial Services. This aligns with the focus on financial institutions, as investment banking involves services related to capital raising, mergers and acquisitions, and financial advisory, all of which are core functions of financial institutions. The absence of a detailed description does not detract significantly from this classification, as the job title and company industry provide strong evidence for the sector classification.\"\n", - "}\n" - ] - } - ], + "outputs": [], "source": [ "import asyncio\n", "\n", diff --git a/src/notebooks/classifiers/work_experience/work_experience_classifier.ipynb b/src/notebooks/classifiers/work_experience/work_experience_classifier.ipynb index 292b07ef5e37d5077d669c46e6380f3db03b6441..6272a9408fc3d158efd95eba076cde4b8c687280 100644 --- a/src/notebooks/classifiers/work_experience/work_experience_classifier.ipynb +++ b/src/notebooks/classifiers/work_experience/work_experience_classifier.ipynb @@ -2,27 +2,27 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "\n", - "os.getcwd()\n", - "os.chdir(path=os.getcwd() + \"/../\")" - ] - }, - { - "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import json\n", + "import os\n", + "import subprocess\n", "\n", "from vsp.app.model.linkedin.linkedin_models import LinkedinProfile\n", "\n", - "with open(\"notebooks/data/hansae_catlett.json\") as f:\n", + "\n", + "def get_git_root():\n", + " return subprocess.check_output([\"git\", \"rev-parse\", \"--show-toplevel\"]).decode().strip()\n", + "\n", + "\n", + "git_root = get_git_root()\n", + "os.chdir(path=get_git_root() + \"/src\")\n", + "print(os.getcwd())\n", + "\n", + "\n", + "with open(\"../tests/test_data/hansae_catlett.json\") as f:\n", " data = json.load(f)\n", " # convert to linkedin profile\n", "\n", @@ -31,101 +31,9 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[2m2024-09-08 23:16:22\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mFetching parameter from Parameter Store\u001b[0m \u001b[36mparameter\u001b[0m=\u001b[35m/secrets/openai/api_key\u001b[0m\n", - "\u001b[2m2024-09-08 23:16:22\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mCreating boto3 client \u001b[0m \u001b[36mservice\u001b[0m=\u001b[35mssm\u001b[0m\n", - "\u001b[2m2024-09-08 23:16:22\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mAssuming role \u001b[0m \u001b[36mrole_arn\u001b[0m=\u001b[35marn:aws:iam::339713096219:role/ReadWrite\u001b[0m\n", - "\u001b[2m2024-09-08 23:16:22\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mRole assumed successfully \u001b[0m\n", - "\u001b[2m2024-09-08 23:16:23\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mSuccessfully fetched parameter\u001b[0m \u001b[36mparameter\u001b[0m=\u001b[35m/secrets/openai/api_key\u001b[0m\n", - "\u001b[2m2024-09-08 23:16:24\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mOpenAI API called \u001b[0m \u001b[36mmodel\u001b[0m=\u001b[35mgpt-4o-mini\u001b[0m\n", - "\u001b[2m2024-09-08 23:16:24\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mToken usage \u001b[0m \u001b[36minput_tokens\u001b[0m=\u001b[35m1350\u001b[0m \u001b[36moutput_tokens\u001b[0m=\u001b[35m114\u001b[0m\n", - "\u001b[2m2024-09-08 23:16:24\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mOpenAI API called \u001b[0m \u001b[36mmodel\u001b[0m=\u001b[35mgpt-4o-mini\u001b[0m\n", - "\u001b[2m2024-09-08 23:16:24\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mToken usage \u001b[0m \u001b[36minput_tokens\u001b[0m=\u001b[35m1386\u001b[0m \u001b[36moutput_tokens\u001b[0m=\u001b[35m116\u001b[0m\n", - "\u001b[2m2024-09-08 23:16:24\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mOpenAI API called \u001b[0m \u001b[36mmodel\u001b[0m=\u001b[35mgpt-4o-mini\u001b[0m\n", - "\u001b[2m2024-09-08 23:16:24\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mToken usage \u001b[0m \u001b[36minput_tokens\u001b[0m=\u001b[35m1548\u001b[0m \u001b[36moutput_tokens\u001b[0m=\u001b[35m130\u001b[0m\n", - "\u001b[2m2024-09-08 23:16:24\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mOpenAI API called \u001b[0m \u001b[36mmodel\u001b[0m=\u001b[35mgpt-4o-mini\u001b[0m\n", - "\u001b[2m2024-09-08 23:16:24\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mToken usage \u001b[0m \u001b[36minput_tokens\u001b[0m=\u001b[35m1354\u001b[0m \u001b[36moutput_tokens\u001b[0m=\u001b[35m119\u001b[0m\n", - "\u001b[2m2024-09-08 23:16:24\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mOpenAI API called \u001b[0m \u001b[36mmodel\u001b[0m=\u001b[35mgpt-4o-mini\u001b[0m\n", - "\u001b[2m2024-09-08 23:16:24\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mToken usage \u001b[0m \u001b[36minput_tokens\u001b[0m=\u001b[35m1355\u001b[0m \u001b[36moutput_tokens\u001b[0m=\u001b[35m115\u001b[0m\n", - "\u001b[2m2024-09-08 23:16:24\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mOpenAI API called \u001b[0m \u001b[36mmodel\u001b[0m=\u001b[35mgpt-4o-mini\u001b[0m\n", - "\u001b[2m2024-09-08 23:16:24\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mToken usage \u001b[0m \u001b[36minput_tokens\u001b[0m=\u001b[35m1353\u001b[0m \u001b[36moutput_tokens\u001b[0m=\u001b[35m110\u001b[0m\n", - "\u001b[2m2024-09-08 23:16:24\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mOpenAI API called \u001b[0m \u001b[36mmodel\u001b[0m=\u001b[35mgpt-4o-mini\u001b[0m\n", - "\u001b[2m2024-09-08 23:16:24\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mToken usage \u001b[0m \u001b[36minput_tokens\u001b[0m=\u001b[35m1354\u001b[0m \u001b[36moutput_tokens\u001b[0m=\u001b[35m116\u001b[0m\n", - "\u001b[2m2024-09-08 23:16:24\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mOpenAI API called \u001b[0m \u001b[36mmodel\u001b[0m=\u001b[35mgpt-4o-mini\u001b[0m\n", - "\u001b[2m2024-09-08 23:16:24\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mToken usage \u001b[0m \u001b[36minput_tokens\u001b[0m=\u001b[35m1355\u001b[0m \u001b[36moutput_tokens\u001b[0m=\u001b[35m124\u001b[0m\n", - "\u001b[2m2024-09-08 23:16:24\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mOpenAI API called \u001b[0m \u001b[36mmodel\u001b[0m=\u001b[35mgpt-4o-mini\u001b[0m\n", - "\u001b[2m2024-09-08 23:16:24\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mToken usage \u001b[0m \u001b[36minput_tokens\u001b[0m=\u001b[35m1351\u001b[0m \u001b[36moutput_tokens\u001b[0m=\u001b[35m144\u001b[0m\n", - "\u001b[2m2024-09-08 23:16:25\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mOpenAI API called \u001b[0m \u001b[36mmodel\u001b[0m=\u001b[35mgpt-4o-mini\u001b[0m\n", - "\u001b[2m2024-09-08 23:16:25\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mToken usage \u001b[0m \u001b[36minput_tokens\u001b[0m=\u001b[35m1352\u001b[0m \u001b[36moutput_tokens\u001b[0m=\u001b[35m114\u001b[0m\n", - "{\n", - " \"primary_job_type\": \"Other\",\n", - " \"secondary_job_type\": \"Investing\",\n", - " \"confidence\": 0.9,\n", - " \"reasoning\": \"The work experience as an \\\"Investor\\\" at Spot AI indicates a role focused on investing in a company, which aligns with the secondary job type of INVESTING. The primary job type is classified as OTHER because this position does not represent a full-time role or a traditional employment structure; it is more of an investment role without a specified employment type. The candidate's extensive background in venture capital and investment roles, as seen in their resume, supports this classification.\"\n", - "}\n", - "{\n", - " \"primary_job_type\": \"Full-time\",\n", - " \"secondary_job_type\": \"Investing\",\n", - " \"confidence\": 1.0,\n", - " \"reasoning\": \"The work experience item indicates that the candidate held a full-time position as Vice President at Bessemer Venture Partners, which is a venture capital firm. This aligns with the primary job type classification of FULL_TIME. Additionally, the role is clearly within the venture capital sector, which fits the secondary job type classification of INVESTING, as it involves professional investing activities. The candidate's resume also supports this classification, highlighting their extensive experience in venture capital and investment roles.\"\n", - "}\n", - "{\n", - " \"primary_job_type\": \"Full-time\",\n", - " \"secondary_job_type\": \"Entrepreneur / Founder\",\n", - " \"confidence\": 0.9,\n", - " \"reasoning\": \"The candidate is a Co-Founder and General Partner at The MBA Fund, which is a venture capital firm, indicating a significant and ongoing role in a business they helped establish. This aligns with the FULL_TIME classification as it suggests a regular, ongoing employment status. Additionally, the role of Co-Founder clearly fits the ENTREPRENEUR_FOUNDER category, as they are actively involved in creating and managing a venture capital firm. The detailed description of their responsibilities and the nature of the firm further supports this classification.\"\n", - "}\n", - "{\n", - " \"primary_job_type\": \"Other\",\n", - " \"secondary_job_type\": \"Investing\",\n", - " \"confidence\": 0.9,\n", - " \"reasoning\": \"The work experience item lists the candidate as an \\\"Investor\\\" at ServiceTitan, which aligns with their roles in venture capital and investment as seen in their resume. Given that this position does not indicate a full-time employment status and lacks a detailed description, it is classified as \\\"OTHER.\\\" The secondary job type is classified as \\\"INVESTING\\\" due to the nature of the role, which involves investment activities in a software company, consistent with the candidate's background in venture capital.\"\n", - "}\n", - "{\n", - " \"primary_job_type\": \"Other\",\n", - " \"secondary_job_type\": \"Consulting\",\n", - " \"confidence\": 0.8,\n", - " \"reasoning\": \"The role of \\\"Board Observer\\\" at Rillavoice is not a full-time position but rather an advisory role, which aligns it with the OTHER category for primary job type. The responsibilities typically associated with board observer roles often involve providing strategic guidance and insights, which can be classified under CONSULTING for the secondary job type. The candidate's extensive experience in venture capital and advisory roles supports this classification, as they are likely leveraging their expertise to guide the company.\"\n", - "}\n", - "{\n", - " \"primary_job_type\": \"Other\",\n", - " \"secondary_job_type\": \"Other\",\n", - " \"confidence\": 0.9,\n", - " \"reasoning\": \"The role of \\\"Board Observer\\\" at MaintainX is not a full-time position and does not fit into traditional employment categories like full-time or internship. It is more of an advisory role, which aligns with the \\\"OTHER\\\" category for both primary and secondary job types. The candidate's extensive experience in venture capital and board roles, as seen in their resume, supports this classification, indicating a focus on advisory and oversight rather than operational responsibilities.\"\n", - "}\n", - "{\n", - " \"primary_job_type\": \"Full-time\",\n", - " \"secondary_job_type\": \"Investing\",\n", - " \"confidence\": 0.9,\n", - " \"reasoning\": \"The candidate's role as a Partner at HOF Capital, which is classified under Venture Capital & Private Equity, indicates a full-time, ongoing position in a professional investment firm. This aligns with the primary job type of FULL_TIME. Additionally, the nature of the role involves making investment decisions and managing a portfolio, which fits the secondary job type of INVESTING. The confidence level is high due to the clear alignment of the job title and industry with the classifications.\"\n", - "}\n", - "{\n", - " \"primary_job_type\": \"Other\",\n", - " \"secondary_job_type\": \"Other\",\n", - " \"confidence\": 0.8,\n", - " \"reasoning\": \"The work experience as a Board Director at Luxury Presence is not a full-time role but rather a board position, which typically does not fit into traditional employment categories. Therefore, it is classified as OTHER for the primary job type. For the secondary job type, while it involves oversight and strategic input, it does not align with the specific categories like INVESTING or CONSULTING, leading to the classification of OTHER as well. The confidence level is 0.8 due to the ambiguity of board roles in categorization.\"\n", - "}\n", - "{\n", - " \"primary_job_type\": \"Full-time\",\n", - " \"secondary_job_type\": \"Investing\",\n", - " \"confidence\": 0.9,\n", - " \"reasoning\": \"The work experience as an \\\"Investor\\\" at Archy from 2022 to 2024 indicates a full-time role in a venture capital context, aligning with the candidate's other roles in investment and venture capital, such as Vice President at Bessemer Venture Partners and Co-Founder at The MBA Fund. The primary job type is classified as FULL_TIME due to the ongoing nature of the position and its alignment with the candidate's professional career in investing. The secondary job type is INVESTING, as the role directly involves investment activities in a venture capital firm, consistent with the candidate's overall career focus.\"\n", - "}\n", - "{\n", - " \"primary_job_type\": \"Other\",\n", - " \"secondary_job_type\": \"Investing\",\n", - " \"confidence\": 0.9,\n", - " \"reasoning\": \"The work experience as a Board Observer at VendorPM is not a full-time position but rather a role that involves oversight and advisory responsibilities, which aligns with the OTHER category. Additionally, the candidate's extensive background in venture capital and investing, as evidenced by their roles at HOF Capital and Bessemer Venture Partners, supports classifying this position under INVESTING. The confidence level is high due to the clear alignment of the candidate's experience with investment activities.\"\n", - "}\n" - ] - } - ], + "outputs": [], "source": [ "import asyncio\n", "\n", diff --git a/src/notebooks/data/eric_armagost.json b/src/notebooks/data/eric_armagost.json deleted file mode 100644 index 7658b3963bcf02e33dc6d666200042fac07364d8..0000000000000000000000000000000000000000 --- a/src/notebooks/data/eric_armagost.json +++ /dev/null @@ -1,395 +0,0 @@ -{ - "urn": "ACoAAApkrrAB8nFEIP2l00BAXgSQ78iUNprebWc", - "username": "eric-armagost-a144904a", - "firstName": "Eric", - "lastName": "Armagost", - "isCreator": false, - "isOpenToWork": false, - "isHiring": false, - "profilePicture": "https://media.licdn.com/dms/image/v2/C5603AQGiv3LeddNxgQ/profile-displayphoto-shrink_800_800/profile-displayphoto-shrink_800_800/0/1656093036751?e=1730332800&v=beta&t=HruxzTkWpJZ9iro3k20ZKxPXHBerz1altnRU3PPXdUI", - "backgroundImage": null, - "summary": "", - "headline": "Investor at Accel-KKR", - "geo": { - "country": "United States", - "city": "San Francisco, California", - "full": "San Francisco, California, United States" - }, - "languages": [ - { - "name": "German", - "proficiency": "LIMITED_WORKING" - } - ], - "educations": [ - { - "start": { - "year": 0, - "month": 0, - "day": 0 - }, - "end": { - "year": 0, - "month": 0, - "day": 0 - }, - "fieldOfStudy": "Business Economics", - "degree": "Bachelor of Arts (B.A.)", - "grade": "", - "schoolName": "Brown University", - "description": "", - "activities": "", - "url": "https://www.linkedin.com/school/brown-university/", - "schoolId": "157343" - } - ], - "position": [ - { - "companyId": 57752, - "companyName": "Accel-KKR", - "companyUsername": "accel-kkr", - "companyURL": "https://www.linkedin.com/company/accel-kkr/", - "companyLogo": "https://media.licdn.com/dms/image/v2/C4D0BAQHJ-Smp3x90Yg/company-logo_400_400/company-logo_400_400/0/1630565829245/accel_kkr_logo?e=1733356800&v=beta&t=MuqS5XhM4c0BNCvk0cCsWIE5YzOWMu7HaFpld467P0w", - "companyIndustry": "Venture Capital & Private Equity", - "companyStaffCountRange": "51 - 200", - "title": "Investment Professional", - "multiLocaleTitle": { - "en_US": "Investment Professional" - }, - "multiLocaleCompanyName": { - "en_US": "Accel-KKR" - }, - "location": "Menlo Park, California", - "description": "Founded in 2000, Accel-KKR is a leading technology-focused private equity firm dedicated exclusively to investing in software and technology-enabled services companies. \n\nOur typical transactions include: \n\u2022 Acquisitions and recapitalizations of founder-owned or closely-held private companies \n\u2022 Buyouts of divisions, subsidiaries and business units from public companies \n\u2022 Take-private transactions of small public companies\n\u2022 Structured minority equity and debt investments\n\nwww.accel-kkr.com", - "employmentType": "", - "start": { - "year": 2017, - "month": 5, - "day": 0 - }, - "end": { - "year": 0, - "month": 0, - "day": 0 - } - }, - { - "companyId": 166939, - "companyName": "William Blair & Company", - "companyUsername": "william-blair-company", - "companyURL": "https://www.linkedin.com/company/william-blair-company/", - "companyLogo": "https://media.licdn.com/dms/image/v2/C560BAQE63WLd1DEgkw/company-logo_400_400/company-logo_400_400/0/1669143293900/william_blair__company_logo?e=1733356800&v=beta&t=lpEb9QzV4aUl3rBk_cyFI2qbyc3fVHQohUoO7kju8PM", - "companyIndustry": "Financial Services", - "companyStaffCountRange": "1001 - 5000", - "title": "Investment Banking", - "multiLocaleTitle": { - "en_US": "Investment Banking" - }, - "multiLocaleCompanyName": { - "en_US": "William Blair & Company" - }, - "location": "Chicago", - "description": "", - "employmentType": "", - "start": { - "year": 2015, - "month": 6, - "day": 0 - }, - "end": { - "year": 2017, - "month": 5, - "day": 0 - } - }, - { - "companyId": 1307, - "companyName": "Fidelity Investments", - "companyUsername": "fidelity-investments", - "companyURL": "https://www.linkedin.com/company/fidelity-investments/", - "companyLogo": "https://media.licdn.com/dms/image/v2/D4E0BAQF6iwa5VSk-PQ/company-logo_400_400/company-logo_400_400/0/1724950881853/fidelity_investments_logo?e=1733356800&v=beta&t=aUkLhTRKySJtcU9mrvOCDYVYFVH2jStpOVaepBbdO80", - "companyIndustry": "Financial Services", - "companyStaffCountRange": "10001 - 0", - "title": "FFAS Corporate Finance", - "multiLocaleTitle": { - "en_US": "FFAS Corporate Finance" - }, - "multiLocaleCompanyName": { - "en_US": "Fidelity Investments" - }, - "location": "Smithfield, RI", - "description": "", - "employmentType": "", - "start": { - "year": 2014, - "month": 6, - "day": 0 - }, - "end": { - "year": 2015, - "month": 5, - "day": 0 - } - }, - { - "companyId": 1307, - "companyName": "Fidelity Investments", - "companyUsername": "fidelity-investments", - "companyURL": "https://www.linkedin.com/company/fidelity-investments/", - "companyLogo": "https://media.licdn.com/dms/image/v2/D4E0BAQF6iwa5VSk-PQ/company-logo_400_400/company-logo_400_400/0/1724950881853/fidelity_investments_logo?e=1733356800&v=beta&t=aUkLhTRKySJtcU9mrvOCDYVYFVH2jStpOVaepBbdO80", - "companyIndustry": "Financial Services", - "companyStaffCountRange": "10001 - 0", - "title": "PI Corporate Finance", - "multiLocaleTitle": { - "en_US": "PI Corporate Finance" - }, - "multiLocaleCompanyName": { - "en_US": "Fidelity Investments" - }, - "location": "Smithfield, RI", - "description": "", - "employmentType": "", - "start": { - "year": 2013, - "month": 6, - "day": 0 - }, - "end": { - "year": 2014, - "month": 5, - "day": 0 - } - } - ], - "fullPositions": [ - { - "companyId": 57752, - "companyName": "Accel-KKR", - "companyUsername": "accel-kkr", - "companyURL": "https://www.linkedin.com/company/accel-kkr/", - "companyLogo": "https://media.licdn.com/dms/image/v2/C4D0BAQHJ-Smp3x90Yg/company-logo_400_400/company-logo_400_400/0/1630565829245/accel_kkr_logo?e=1733356800&v=beta&t=MuqS5XhM4c0BNCvk0cCsWIE5YzOWMu7HaFpld467P0w", - "companyIndustry": "Venture Capital & Private Equity", - "companyStaffCountRange": "51 - 200", - "title": "Investment Professional", - "multiLocaleTitle": { - "en_US": "Investment Professional" - }, - "multiLocaleCompanyName": { - "en_US": "Accel-KKR" - }, - "location": "Menlo Park, California", - "description": "Founded in 2000, Accel-KKR is a leading technology-focused private equity firm dedicated exclusively to investing in software and technology-enabled services companies. \n\nOur typical transactions include: \n\u2022 Acquisitions and recapitalizations of founder-owned or closely-held private companies \n\u2022 Buyouts of divisions, subsidiaries and business units from public companies \n\u2022 Take-private transactions of small public companies\n\u2022 Structured minority equity and debt investments\n\nwww.accel-kkr.com", - "employmentType": "", - "start": { - "year": 2017, - "month": 5, - "day": 0 - }, - "end": { - "year": 0, - "month": 0, - "day": 0 - } - }, - { - "companyId": 166939, - "companyName": "William Blair & Company", - "companyUsername": "william-blair-company", - "companyURL": "https://www.linkedin.com/company/william-blair-company/", - "companyLogo": "https://media.licdn.com/dms/image/v2/C560BAQE63WLd1DEgkw/company-logo_400_400/company-logo_400_400/0/1669143293900/william_blair__company_logo?e=1733356800&v=beta&t=lpEb9QzV4aUl3rBk_cyFI2qbyc3fVHQohUoO7kju8PM", - "companyIndustry": "Financial Services", - "companyStaffCountRange": "1001 - 5000", - "title": "Investment Banking", - "multiLocaleTitle": { - "en_US": "Investment Banking" - }, - "multiLocaleCompanyName": { - "en_US": "William Blair & Company" - }, - "location": "Chicago", - "description": "", - "employmentType": "", - "start": { - "year": 2015, - "month": 6, - "day": 0 - }, - "end": { - "year": 2017, - "month": 5, - "day": 0 - } - }, - { - "companyId": 1307, - "companyName": "Fidelity Investments", - "companyUsername": "fidelity-investments", - "companyURL": "https://www.linkedin.com/company/fidelity-investments/", - "companyLogo": "https://media.licdn.com/dms/image/v2/D4E0BAQF6iwa5VSk-PQ/company-logo_400_400/company-logo_400_400/0/1724950881853/fidelity_investments_logo?e=1733356800&v=beta&t=aUkLhTRKySJtcU9mrvOCDYVYFVH2jStpOVaepBbdO80", - "companyIndustry": "Financial Services", - "companyStaffCountRange": "10001 - 0", - "title": "FFAS Corporate Finance", - "multiLocaleTitle": { - "en_US": "FFAS Corporate Finance" - }, - "multiLocaleCompanyName": { - "en_US": "Fidelity Investments" - }, - "location": "Smithfield, RI", - "description": "", - "employmentType": "", - "start": { - "year": 2014, - "month": 6, - "day": 0 - }, - "end": { - "year": 2015, - "month": 5, - "day": 0 - } - }, - { - "companyId": 1307, - "companyName": "Fidelity Investments", - "companyUsername": "fidelity-investments", - "companyURL": "https://www.linkedin.com/company/fidelity-investments/", - "companyLogo": "https://media.licdn.com/dms/image/v2/D4E0BAQF6iwa5VSk-PQ/company-logo_400_400/company-logo_400_400/0/1724950881853/fidelity_investments_logo?e=1733356800&v=beta&t=aUkLhTRKySJtcU9mrvOCDYVYFVH2jStpOVaepBbdO80", - "companyIndustry": "Financial Services", - "companyStaffCountRange": "10001 - 0", - "title": "PI Corporate Finance", - "multiLocaleTitle": { - "en_US": "PI Corporate Finance" - }, - "multiLocaleCompanyName": { - "en_US": "Fidelity Investments" - }, - "location": "Smithfield, RI", - "description": "", - "employmentType": "", - "start": { - "year": 2013, - "month": 6, - "day": 0 - }, - "end": { - "year": 2014, - "month": 5, - "day": 0 - } - } - ], - "skills": [ - { - "name": "Microsoft Office", - "passedSkillAssessment": false, - "endorsementsCount": 5 - }, - { - "name": "Microsoft Excel", - "passedSkillAssessment": false, - "endorsementsCount": 2 - }, - { - "name": "Microsoft Word", - "passedSkillAssessment": false, - "endorsementsCount": 7 - }, - { - "name": "Customer Service", - "passedSkillAssessment": false - }, - { - "name": "PowerPoint", - "passedSkillAssessment": false, - "endorsementsCount": 4 - }, - { - "name": "English", - "passedSkillAssessment": false - }, - { - "name": "Windows", - "passedSkillAssessment": false - }, - { - "name": "Research", - "passedSkillAssessment": false, - "endorsementsCount": 2 - }, - { - "name": "Outlook", - "passedSkillAssessment": false - }, - { - "name": "Teaching", - "passedSkillAssessment": false - }, - { - "name": "Photoshop", - "passedSkillAssessment": false - }, - { - "name": "Public Speaking", - "passedSkillAssessment": false, - "endorsementsCount": 2 - }, - { - "name": "HTML", - "passedSkillAssessment": false - }, - { - "name": "Strategic Planning", - "passedSkillAssessment": false - }, - { - "name": "Budgets", - "passedSkillAssessment": false - } - ], - "givenRecommendation": null, - "givenRecommendationCount": 0, - "receivedRecommendation": null, - "receivedRecommendationCount": 0, - "courses": null, - "certifications": null, - "honors": null, - "projects": { - "total": 0, - "items": null - }, - "volunteering": [ - { - "title": "Fundraiser Leader", - "start": { - "year": 2014, - "month": 7, - "day": 0 - }, - "end": { - "year": 2014, - "month": 7, - "day": 0 - }, - "companyName": "AHA", - "CompanyId": "", - "companyUrl": "", - "companyLogo": "" - } - ], - "supportedLocales": [ - { - "country": "US", - "language": "en" - } - ], - "multiLocaleFirstName": { - "en": "Eric" - }, - "multiLocaleLastName": { - "en": "Armagost" - }, - "multiLocaleHeadline": { - "en": "Investor at Accel-KKR" - } - } \ No newline at end of file diff --git a/src/notebooks/data/hansae_catlett.json b/src/notebooks/data/hansae_catlett.json deleted file mode 100644 index 53ddbe9bdfc9be9bc435656c19b48a1713094a98..0000000000000000000000000000000000000000 --- a/src/notebooks/data/hansae_catlett.json +++ /dev/null @@ -1,1054 +0,0 @@ -{ - "urn": "ACoAAAScLaoBojlZZh9af6GI5G566vDOTj50KOw", - "username": "hansae-catlett-436a9b21", - "firstName": "Hansae", - "lastName": "Catlett", - "isCreator": false, - "isOpenToWork": false, - "isHiring": false, - "profilePicture": "https://media.licdn.com/dms/image/v2/D5603AQEVfJQVTKPvYw/profile-displayphoto-shrink_800_800/profile-displayphoto-shrink_800_800/0/1710971553153?e=1730332800&v=beta&t=D40AmtyFPi_BuJ2JPycWFbv0jSQhf3IqrVnf22BxSZA", - "backgroundImage": null, - "summary": "", - "headline": "Partner at HOF Capital | Co-founder & GP at The MBA Fund", - "geo": { - "country": "United States", - "city": "New York, New York", - "full": "New York, New York, United States" - }, - "languages": null, - "educations": [ - { - "start": { - "year": 2016, - "month": 0, - "day": 0 - }, - "end": { - "year": 2019, - "month": 0, - "day": 0 - }, - "fieldOfStudy": "", - "degree": "Master of Business Administration (M.B.A.)", - "grade": "", - "schoolName": "Stanford University Graduate School of Business", - "description": "", - "activities": "Ernest C. Arbuckle Award Finalist; Miller Social Change Leadership Award Winner; Arbuckle Leadership Fellow; Venture Capital Club; GSB Impact Fund; Co-President Social Innovation Club; Co-President Government & Politics Club; LOWkeynote (main stage featured speaker); TALK Coach; GSB Show", - "url": "https://www.linkedin.com/school/stanford-graduate-school-of-business/", - "schoolId": "1791" - }, - { - "start": { - "year": 2016, - "month": 0, - "day": 0 - }, - "end": { - "year": 2019, - "month": 0, - "day": 0 - }, - "fieldOfStudy": "", - "degree": "Master of Public Policy (M.P.P.)", - "grade": "", - "schoolName": "Stanford University", - "description": "Led CalFresh/SNAP (food stamps) policy & impact analysis with California State Senator", - "activities": "", - "url": "https://www.linkedin.com/school/stanford-university/", - "schoolId": "1792" - }, - { - "start": { - "year": 2007, - "month": 0, - "day": 0 - }, - "end": { - "year": 2011, - "month": 0, - "day": 0 - }, - "fieldOfStudy": "Biomedical Engineering, Philosophy", - "degree": "Bachelor of Arts", - "grade": "", - "schoolName": "Harvard University", - "description": "Graduated with Honors", - "activities": "Club Basketball, College Bound Mentoring, Veritas Financial Group, Rugby, Crew", - "url": "https://www.linkedin.com/school/harvard-university/", - "schoolId": "1646" - }, - { - "start": { - "year": 0, - "month": 0, - "day": 0 - }, - "end": { - "year": 0, - "month": 0, - "day": 0 - }, - "fieldOfStudy": "Engineering, Philosophy, Finance", - "degree": "Study Abroad", - "grade": "", - "schoolName": "University of New South Wales", - "description": "", - "activities": "Premier League Basketball Team", - "url": "https://www.linkedin.com/school/unsw/", - "schoolId": "6096" - } - ], - "position": [ - { - "companyId": 9217965, - "companyName": "HOF Capital", - "companyUsername": "hof-capital", - "companyURL": "https://www.linkedin.com/company/hof-capital/", - "companyLogo": "https://media.licdn.com/dms/image/v2/C4D0BAQFAy04TxfOQ1w/company-logo_400_400/company-logo_400_400/0/1631336133602?e=1733356800&v=beta&t=XT3nnr1M-X8_dEx8Wp2wMOLyu6NXc_9c1CFa1xdu-dY", - "companyIndustry": "Venture Capital & Private Equity", - "companyStaffCountRange": "11 - 50", - "title": "Partner", - "multiLocaleTitle": { - "en_US": "Partner" - }, - "multiLocaleCompanyName": { - "en_US": "HOF Capital" - }, - "location": "New York City Metropolitan Area", - "description": "", - "employmentType": "", - "start": { - "year": 2024, - "month": 3, - "day": 0 - }, - "end": { - "year": 0, - "month": 0, - "day": 0 - } - }, - { - "companyId": 33433434, - "companyName": "The MBA Fund", - "companyUsername": "thembafund", - "companyURL": "https://www.linkedin.com/company/thembafund/", - "companyLogo": "https://media.licdn.com/dms/image/v2/C4D0BAQHh7Q_nr-3JiA/company-logo_400_400/company-logo_400_400/0/1630572463370/thembafund_logo?e=1733356800&v=beta&t=BJUl211JX6J1xxnvUU4Hy0pNd8lIKesF5XpHEdiJP6M", - "companyIndustry": "Venture Capital & Private Equity", - "companyStaffCountRange": "11 - 50", - "title": "Co-Founder, General Partner", - "multiLocaleTitle": { - "en_US": "Co-Founder, General Partner" - }, - "multiLocaleCompanyName": { - "en_US": "The MBA Fund" - }, - "location": "San Francisco Bay Area", - "description": "The MBA Fund is a venture capital firm that helps founders from the top startup-producing universities create legendary companies. We most frequently back student, alumni and dropout founders from Harvard, Stanford, and Wharton (expanding presence nationally!). \n\nWe\u2019re a community of investors and operators who aren\u2019t afraid to take the riskiest leaps with founders who are just getting started. Our backers include top-tier VC firms, repeat founders, experienced execs, and super angels with ties to the communities where we invest. This network is ready and willing to help founders in our portfolio with financing, hiring, customer growth and more.\n\nSelect investments include:\n* Jeeves ($2B)\n* Dandy ($1B)\n* TRM Labs ($600M+)\n* Hightouch ($450M+)\n* Luxury Presence ($200M+)\n* FlutterFlow ($150M+)\n* Legacy ($150M+)\n* Seso ($150M+)\n* Peachy ($100M+)", - "employmentType": "", - "start": { - "year": 2018, - "month": 0, - "day": 0 - }, - "end": { - "year": 0, - "month": 0, - "day": 0 - } - }, - { - "companyId": 16754, - "companyName": "Bessemer Venture Partners", - "companyUsername": "bessemer-venture-partners", - "companyURL": "https://www.linkedin.com/company/bessemer-venture-partners/", - "companyLogo": "https://media.licdn.com/dms/image/v2/D560BAQF2-_rRIldZpw/company-logo_400_400/company-logo_400_400/0/1719862419823/bessemer_venture_partners_logo?e=1733356800&v=beta&t=rX0N0rY1b8HL1G1_MpwJi16BhGWtBC-dyE2cBFi644A", - "companyIndustry": "Venture Capital & Private Equity", - "companyStaffCountRange": "11 - 50", - "title": "Vice President", - "multiLocaleTitle": { - "en_US": "Vice President" - }, - "multiLocaleCompanyName": { - "en_US": "Bessemer Venture Partners" - }, - "location": "New York City Metropolitan Area", - "description": "", - "employmentType": "Full-time", - "start": { - "year": 2019, - "month": 7, - "day": 0 - }, - "end": { - "year": 2024, - "month": 2, - "day": 0 - } - }, - { - "companyId": 11745039, - "companyName": "Rillavoice", - "companyUsername": "rilla-co", - "companyURL": "https://www.linkedin.com/company/rilla-co/", - "companyLogo": "https://media.licdn.com/dms/image/v2/D560BAQGckOgzxr2p4g/company-logo_400_400/company-logo_400_400/0/1709081270062/rilla_co_logo?e=1733356800&v=beta&t=MvfFWJNVqsB3jaJxROLxP896fz5akuU8pndekbJ3C5g", - "companyIndustry": "Computer Software", - "companyStaffCountRange": "11 - 50", - "title": "Board Observer", - "multiLocaleTitle": { - "en_US": "Board Observer" - }, - "multiLocaleCompanyName": { - "en_US": "Rillavoice" - }, - "location": "New York City Metropolitan Area", - "description": "", - "employmentType": "", - "start": { - "year": 2023, - "month": 0, - "day": 0 - }, - "end": { - "year": 2024, - "month": 0, - "day": 0 - } - }, - { - "companyId": 74099951, - "companyName": "Archy", - "companyUsername": "archydental", - "companyURL": "https://www.linkedin.com/company/archydental/", - "companyLogo": "https://media.licdn.com/dms/image/v2/D4E0BAQG13A6MTBOt5w/company-logo_400_400/company-logo_400_400/0/1724949981185/archydental_logo?e=1733356800&v=beta&t=prnsqQ4vb9F4cnt5_4Cmc6LHXYKt1ceIU6Z_G4AlzCw", - "companyIndustry": "Computer Software", - "companyStaffCountRange": "11 - 50", - "title": "Investor", - "multiLocaleTitle": { - "en_US": "Investor" - }, - "multiLocaleCompanyName": { - "en_US": "Archy" - }, - "location": "San Francisco Bay Area", - "description": "", - "employmentType": "", - "start": { - "year": 2022, - "month": 0, - "day": 0 - }, - "end": { - "year": 2024, - "month": 0, - "day": 0 - } - }, - { - "companyId": 18762446, - "companyName": "MaintainX", - "companyUsername": "getmaintainx", - "companyURL": "https://www.linkedin.com/company/getmaintainx/", - "companyLogo": "https://media.licdn.com/dms/image/v2/D560BAQEOOm1IB8UHxQ/company-logo_400_400/company-logo_400_400/0/1719257689258/getmaintainx_logo?e=1733356800&v=beta&t=bQzUQXAg00rNpk8-C34bicPL4Dnxwbyl-pp-Z47Ydr8", - "companyIndustry": "Computer Software", - "companyStaffCountRange": "201 - 500", - "title": "Board Observer", - "multiLocaleTitle": { - "en_US": "Board Observer" - }, - "multiLocaleCompanyName": { - "en_US": "MaintainX" - }, - "location": "San Francisco Bay Area", - "description": "", - "employmentType": "", - "start": { - "year": 2021, - "month": 0, - "day": 0 - }, - "end": { - "year": 2024, - "month": 0, - "day": 0 - } - }, - { - "companyId": 18927115, - "companyName": "Spot AI", - "companyUsername": "spot-ai", - "companyURL": "https://www.linkedin.com/company/spot-ai/", - "companyLogo": "https://media.licdn.com/dms/image/v2/C560BAQG2LOnQKbIi4A/company-logo_400_400/company-logo_400_400/0/1630635635761/spot_ai_logo?e=1733356800&v=beta&t=eJx_hAO6SMYTUTnHrmE4-7bz37xkTh1rzjh0CqRBwCs", - "companyIndustry": "Computer Software", - "companyStaffCountRange": "51 - 200", - "title": "Investor", - "multiLocaleTitle": { - "en_US": "Investor" - }, - "multiLocaleCompanyName": { - "en_US": "Spot AI" - }, - "location": "San Francisco Bay Area", - "description": "", - "employmentType": "", - "start": { - "year": 2021, - "month": 0, - "day": 0 - }, - "end": { - "year": 2024, - "month": 0, - "day": 0 - } - }, - { - "companyId": 31404660, - "companyName": "VendorPM", - "companyUsername": "vendorpm", - "companyURL": "https://www.linkedin.com/company/vendorpm/", - "companyLogo": "https://media.licdn.com/dms/image/v2/D560BAQEglOi17VDAUg/company-logo_400_400/company-logo_400_400/0/1688751388502/vendorpm_logo?e=1733356800&v=beta&t=g36lpENHyHRFusF-KOJfJvh97fsAezDC1FAqYzG7zUg", - "companyIndustry": "Computer Software", - "companyStaffCountRange": "11 - 50", - "title": "Board Observer", - "multiLocaleTitle": { - "en_US": "Board Observer" - }, - "multiLocaleCompanyName": { - "en_US": "VendorPM" - }, - "location": "Toronto, Ontario, Canada", - "description": "", - "employmentType": "", - "start": { - "year": 2021, - "month": 0, - "day": 0 - }, - "end": { - "year": 2024, - "month": 0, - "day": 0 - } - }, - { - "companyId": 18872387, - "companyName": "Luxury Presence", - "companyUsername": "luxurypresence", - "companyURL": "https://www.linkedin.com/company/luxurypresence/", - "companyLogo": "https://media.licdn.com/dms/image/v2/C560BAQEv9eTo6golbw/company-logo_400_400/company-logo_400_400/0/1655397407777/luxurypresence_logo?e=1733356800&v=beta&t=SKKunif574CP6v1Z2LjF1sk6ZM254eu5VWN7ESZ1ylc", - "companyIndustry": "Computer Software", - "companyStaffCountRange": "501 - 1000", - "title": "Board Director", - "multiLocaleTitle": { - "en_US": "Board Director" - }, - "multiLocaleCompanyName": { - "en_US": "Luxury Presence" - }, - "location": "Los Angeles Metropolitan Area", - "description": "", - "employmentType": "", - "start": { - "year": 2021, - "month": 0, - "day": 0 - }, - "end": { - "year": 2024, - "month": 0, - "day": 0 - } - }, - { - "companyId": 3157549, - "companyName": "ServiceTitan", - "companyUsername": "servicetitan", - "companyURL": "https://www.linkedin.com/company/servicetitan/", - "companyLogo": "https://media.licdn.com/dms/image/v2/C560BAQEZXBsypK75Fg/company-logo_400_400/company-logo_400_400/0/1660079842958/servicetitan_logo?e=1733356800&v=beta&t=Ly_gt1iDc0qfGCBWgwrUHqnamNy7TZMPEDARe-tlJVA", - "companyIndustry": "Computer Software", - "companyStaffCountRange": "1001 - 5000", - "title": "Investor", - "multiLocaleTitle": { - "en_US": "Investor" - }, - "multiLocaleCompanyName": { - "en_US": "ServiceTitan" - }, - "location": "Los Angeles Metropolitan Area", - "description": "", - "employmentType": "", - "start": { - "year": 2021, - "month": 0, - "day": 0 - }, - "end": { - "year": 2024, - "month": 0, - "day": 0 - } - } - ], - "fullPositions": [ - { - "companyId": 9217965, - "companyName": "HOF Capital", - "companyUsername": "hof-capital", - "companyURL": "https://www.linkedin.com/company/hof-capital", - "companyLogo": "https://media.licdn.com/dms/image/v2/C4D0BAQFAy04TxfOQ1w/company-logo_400_400/company-logo_400_400/0/1631336133602?e=1733356800&v=beta&t=XT3nnr1M-X8_dEx8Wp2wMOLyu6NXc_9c1CFa1xdu-dY", - "companyIndustry": "Venture Capital & Private Equity", - "companyStaffCountRange": "11 - 50", - "title": "Partner", - "multiLocaleTitle": null, - "multiLocaleCompanyName": null, - "location": "New York City Metropolitan Area", - "description": "", - "employmentType": "", - "start": { - "year": 2024, - "month": 3, - "day": 0 - }, - "end": { - "year": 0, - "month": 0, - "day": 0 - } - }, - { - "companyId": 33433434, - "companyName": "The MBA Fund", - "companyUsername": "thembafund", - "companyURL": "https://www.linkedin.com/company/thembafund", - "companyLogo": "https://media.licdn.com/dms/image/v2/C4D0BAQHh7Q_nr-3JiA/company-logo_400_400/company-logo_400_400/0/1630572463370/thembafund_logo?e=1733356800&v=beta&t=BJUl211JX6J1xxnvUU4Hy0pNd8lIKesF5XpHEdiJP6M", - "companyIndustry": "Venture Capital & Private Equity", - "companyStaffCountRange": "11 - 50", - "title": "Co-Founder, General Partner", - "multiLocaleTitle": null, - "multiLocaleCompanyName": null, - "location": "San Francisco Bay Area", - "description": "The MBA Fund is a venture capital firm that helps founders from the top startup-producing universities create legendary companies. We most frequently back student, alumni and dropout founders from Harvard, Stanford, and Wharton (expanding presence nationally!). \n\nWe\u2019re a community of investors and operators who aren\u2019t afraid to take the riskiest leaps with founders who are just getting started. Our backers include top-tier VC firms, repeat founders, experienced execs, and super angels with ties to the communities where we invest. This network is ready and willing to help founders in our portfolio with financing, hiring, customer growth and more.\n\nSelect investments include:\n* Jeeves ($2B)\n* Dandy ($1B)\n* TRM Labs ($600M+)\n* Hightouch ($450M+)\n* Luxury Presence ($200M+)\n* FlutterFlow ($150M+)\n* Legacy ($150M+)\n* Seso ($150M+)\n* Peachy ($100M+)", - "employmentType": "", - "start": { - "year": 2018, - "month": 0, - "day": 0 - }, - "end": { - "year": 0, - "month": 0, - "day": 0 - } - }, - { - "companyId": 16754, - "companyName": "Bessemer Venture Partners", - "companyUsername": "bessemer-venture-partners", - "companyURL": "https://www.linkedin.com/company/bessemer-venture-partners", - "companyLogo": "https://media.licdn.com/dms/image/v2/D560BAQF2-_rRIldZpw/company-logo_400_400/company-logo_400_400/0/1719862419823/bessemer_venture_partners_logo?e=1733356800&v=beta&t=rX0N0rY1b8HL1G1_MpwJi16BhGWtBC-dyE2cBFi644A", - "companyIndustry": "Venture Capital & Private Equity", - "companyStaffCountRange": "11 - 50", - "title": "Vice President", - "multiLocaleTitle": null, - "multiLocaleCompanyName": null, - "location": "New York City Metropolitan Area", - "description": "", - "employmentType": "", - "start": { - "year": 2019, - "month": 7, - "day": 0 - }, - "end": { - "year": 2024, - "month": 2, - "day": 0 - } - }, - { - "companyId": 11745039, - "companyName": "Rillavoice", - "companyUsername": "rilla-co", - "companyURL": "https://www.linkedin.com/company/rilla-co", - "companyLogo": "https://media.licdn.com/dms/image/v2/D560BAQGckOgzxr2p4g/company-logo_400_400/company-logo_400_400/0/1709081270062/rilla_co_logo?e=1733356800&v=beta&t=MvfFWJNVqsB3jaJxROLxP896fz5akuU8pndekbJ3C5g", - "companyIndustry": "Computer Software", - "companyStaffCountRange": "11 - 50", - "title": "Board Observer", - "multiLocaleTitle": null, - "multiLocaleCompanyName": null, - "location": "New York City Metropolitan Area", - "description": "", - "employmentType": "", - "start": { - "year": 2023, - "month": 0, - "day": 0 - }, - "end": { - "year": 2024, - "month": 0, - "day": 0 - } - }, - { - "companyId": 74099951, - "companyName": "Archy", - "companyUsername": "archydental", - "companyURL": "https://www.linkedin.com/company/archydental", - "companyLogo": "https://media.licdn.com/dms/image/v2/D4E0BAQG13A6MTBOt5w/company-logo_400_400/company-logo_400_400/0/1724949981185/archydental_logo?e=1733356800&v=beta&t=prnsqQ4vb9F4cnt5_4Cmc6LHXYKt1ceIU6Z_G4AlzCw", - "companyIndustry": "Computer Software", - "companyStaffCountRange": "11 - 50", - "title": "Investor", - "multiLocaleTitle": null, - "multiLocaleCompanyName": null, - "location": "San Francisco Bay Area", - "description": "", - "employmentType": "", - "start": { - "year": 2022, - "month": 0, - "day": 0 - }, - "end": { - "year": 2024, - "month": 0, - "day": 0 - } - }, - { - "companyId": 18762446, - "companyName": "MaintainX", - "companyUsername": "getmaintainx", - "companyURL": "https://www.linkedin.com/company/getmaintainx", - "companyLogo": "https://media.licdn.com/dms/image/v2/D560BAQEOOm1IB8UHxQ/company-logo_400_400/company-logo_400_400/0/1719257689258/getmaintainx_logo?e=1733356800&v=beta&t=bQzUQXAg00rNpk8-C34bicPL4Dnxwbyl-pp-Z47Ydr8", - "companyIndustry": "Computer Software", - "companyStaffCountRange": "201 - 500", - "title": "Board Observer", - "multiLocaleTitle": null, - "multiLocaleCompanyName": null, - "location": "San Francisco Bay Area", - "description": "", - "employmentType": "", - "start": { - "year": 2021, - "month": 0, - "day": 0 - }, - "end": { - "year": 2024, - "month": 0, - "day": 0 - } - }, - { - "companyId": 18927115, - "companyName": "Spot AI", - "companyUsername": "spot-ai", - "companyURL": "https://www.linkedin.com/company/spot-ai", - "companyLogo": "https://media.licdn.com/dms/image/v2/C560BAQG2LOnQKbIi4A/company-logo_400_400/company-logo_400_400/0/1630635635761/spot_ai_logo?e=1733356800&v=beta&t=eJx_hAO6SMYTUTnHrmE4-7bz37xkTh1rzjh0CqRBwCs", - "companyIndustry": "Computer Software", - "companyStaffCountRange": "51 - 200", - "title": "Investor", - "multiLocaleTitle": null, - "multiLocaleCompanyName": null, - "location": "San Francisco Bay Area", - "description": "", - "employmentType": "", - "start": { - "year": 2021, - "month": 0, - "day": 0 - }, - "end": { - "year": 2024, - "month": 0, - "day": 0 - } - }, - { - "companyId": 31404660, - "companyName": "VendorPM", - "companyUsername": "vendorpm", - "companyURL": "https://www.linkedin.com/company/vendorpm", - "companyLogo": "https://media.licdn.com/dms/image/v2/D560BAQEglOi17VDAUg/company-logo_400_400/company-logo_400_400/0/1688751388502/vendorpm_logo?e=1733356800&v=beta&t=g36lpENHyHRFusF-KOJfJvh97fsAezDC1FAqYzG7zUg", - "companyIndustry": "Computer Software", - "companyStaffCountRange": "11 - 50", - "title": "Board Observer", - "multiLocaleTitle": null, - "multiLocaleCompanyName": null, - "location": "Toronto, Ontario, Canada", - "description": "", - "employmentType": "", - "start": { - "year": 2021, - "month": 0, - "day": 0 - }, - "end": { - "year": 2024, - "month": 0, - "day": 0 - } - }, - { - "companyId": 18872387, - "companyName": "Luxury Presence", - "companyUsername": "luxurypresence", - "companyURL": "https://www.linkedin.com/company/luxurypresence", - "companyLogo": "https://media.licdn.com/dms/image/v2/C560BAQEv9eTo6golbw/company-logo_400_400/company-logo_400_400/0/1655397407777/luxurypresence_logo?e=1733356800&v=beta&t=SKKunif574CP6v1Z2LjF1sk6ZM254eu5VWN7ESZ1ylc", - "companyIndustry": "Computer Software", - "companyStaffCountRange": "501 - 1000", - "title": "Board Director", - "multiLocaleTitle": null, - "multiLocaleCompanyName": null, - "location": "Los Angeles Metropolitan Area", - "description": "", - "employmentType": "", - "start": { - "year": 2021, - "month": 0, - "day": 0 - }, - "end": { - "year": 2024, - "month": 0, - "day": 0 - } - }, - { - "companyId": 3157549, - "companyName": "ServiceTitan", - "companyUsername": "servicetitan", - "companyURL": "https://www.linkedin.com/company/servicetitan", - "companyLogo": "https://media.licdn.com/dms/image/v2/C560BAQEZXBsypK75Fg/company-logo_400_400/company-logo_400_400/0/1660079842958/servicetitan_logo?e=1733356800&v=beta&t=Ly_gt1iDc0qfGCBWgwrUHqnamNy7TZMPEDARe-tlJVA", - "companyIndustry": "Computer Software", - "companyStaffCountRange": "1001 - 5000", - "title": "Investor", - "multiLocaleTitle": null, - "multiLocaleCompanyName": null, - "location": "Los Angeles Metropolitan Area", - "description": "", - "employmentType": "", - "start": { - "year": 2021, - "month": 0, - "day": 0 - }, - "end": { - "year": 2024, - "month": 0, - "day": 0 - } - }, - { - "companyId": 18319862, - "companyName": "NALA", - "companyUsername": "nalamoney", - "companyURL": "https://www.linkedin.com/company/nalamoney", - "companyLogo": "https://media.licdn.com/dms/image/v2/D4D0BAQGjdH4F8iQgGg/company-logo_400_400/company-logo_400_400/0/1704710437688/nalamoney_logo?e=1733356800&v=beta&t=vrKr_YzZMgCUv0XjRVWlWkxSBZLnNpl42wU87xvAZTM", - "companyIndustry": "Financial Services", - "companyStaffCountRange": "11 - 50", - "title": "Investor", - "multiLocaleTitle": null, - "multiLocaleCompanyName": null, - "location": "", - "description": "", - "employmentType": "", - "start": { - "year": 2021, - "month": 0, - "day": 0 - }, - "end": { - "year": 2024, - "month": 0, - "day": 0 - } - }, - { - "companyId": 70904927, - "companyName": "Jasper", - "companyUsername": "heyjasperai", - "companyURL": "https://www.linkedin.com/company/heyjasperai", - "companyLogo": "https://media.licdn.com/dms/image/v2/D560BAQHsWD7LHz0Ekw/company-logo_400_400/company-logo_400_400/0/1719256081254?e=1733356800&v=beta&t=MknEiRcpHfjOrS4QK4FpHIisWPG7yvD1Mv8LFkrMl4k", - "companyIndustry": "Computer Software", - "companyStaffCountRange": "51 - 200", - "title": "Investor", - "multiLocaleTitle": null, - "multiLocaleCompanyName": null, - "location": "San Francisco Bay Area", - "description": "", - "employmentType": "", - "start": { - "year": 2021, - "month": 0, - "day": 0 - }, - "end": { - "year": 2024, - "month": 0, - "day": 0 - } - }, - { - "companyId": 18364911, - "companyName": "Shopmonkey", - "companyUsername": "shopmonkey", - "companyURL": "https://www.linkedin.com/company/shopmonkey", - "companyLogo": "https://media.licdn.com/dms/image/v2/C4D0BAQGgBRI5FdMkug/company-logo_400_400/company-logo_400_400/0/1630537505248/shopmonkey_logo?e=1733356800&v=beta&t=4NG5tw0Oam6ezsJeCcvYl8dZ7OgnhOygV3f1Bl9WWyI", - "companyIndustry": "Computer Software", - "companyStaffCountRange": "51 - 200", - "title": "Board Observer", - "multiLocaleTitle": null, - "multiLocaleCompanyName": null, - "location": "San Francisco Bay Area", - "description": "", - "employmentType": "", - "start": { - "year": 2020, - "month": 0, - "day": 0 - }, - "end": { - "year": 2024, - "month": 0, - "day": 0 - } - }, - { - "companyId": 1292340, - "companyName": "Syndio", - "companyUsername": "syndioinc", - "companyURL": "https://www.linkedin.com/company/syndioinc", - "companyLogo": "https://media.licdn.com/dms/image/v2/D560BAQEDBc5ZaUmvWQ/company-logo_400_400/company-logo_400_400/0/1681938104635/syndioinc_logo?e=1733356800&v=beta&t=qIFwJgc8zf8xSgpjGqxuNmPm4HgsndG4AYQ1b61x3zM", - "companyIndustry": "Computer Software", - "companyStaffCountRange": "51 - 200", - "title": "Investor", - "multiLocaleTitle": null, - "multiLocaleCompanyName": null, - "location": "", - "description": "", - "employmentType": "", - "start": { - "year": 2020, - "month": 0, - "day": 0 - }, - "end": { - "year": 2024, - "month": 0, - "day": 0 - } - }, - { - "companyId": 18742807, - "companyName": "TRM Labs", - "companyUsername": "trmlabs", - "companyURL": "https://www.linkedin.com/company/trmlabs", - "companyLogo": "https://media.licdn.com/dms/image/v2/C4E0BAQGk-xkrdUoBpg/company-logo_400_400/company-logo_400_400/0/1638543126715/trmlabs_logo?e=1733356800&v=beta&t=7uFH1kBZBJRaHtBSTG3jq6ChQlI1ZQM3XoZIGQyBq7Y", - "companyIndustry": "Information Services", - "companyStaffCountRange": "201 - 500", - "title": "Board Observer", - "multiLocaleTitle": null, - "multiLocaleCompanyName": null, - "location": "San Francisco Bay Area", - "description": "", - "employmentType": "", - "start": { - "year": 2020, - "month": 0, - "day": 0 - }, - "end": { - "year": 2024, - "month": 0, - "day": 0 - } - }, - { - "companyId": 5903162, - "companyName": "Sila Nanotechnologies Inc.", - "companyUsername": "sila-nanotechnologies-inc-", - "companyURL": "https://www.linkedin.com/company/sila-nanotechnologies-inc-", - "companyLogo": "https://media.licdn.com/dms/image/v2/C4D0BAQF7zqbzbyb9pQ/company-logo_400_400/company-logo_400_400/0/1639412633827/sila_nanotechnologies_inc__logo?e=1733356800&v=beta&t=2ei9-L8B4AfuZaEgu7zoHhu098YYcL2b5xUcsPMuwho", - "companyIndustry": "Renewables & Environment", - "companyStaffCountRange": "201 - 500", - "title": "Investor", - "multiLocaleTitle": null, - "multiLocaleCompanyName": null, - "location": "San Francisco Bay Areas", - "description": "", - "employmentType": "", - "start": { - "year": 2020, - "month": 0, - "day": 0 - }, - "end": { - "year": 2024, - "month": 0, - "day": 0 - } - }, - { - "companyId": 18960490, - "companyName": "Courier", - "companyUsername": "trycourier", - "companyURL": "https://www.linkedin.com/company/trycourier", - "companyLogo": "https://media.licdn.com/dms/image/v2/D560BAQGhsLWH5Oz1PA/company-logo_400_400/company-logo_400_400/0/1718748389821/trycourier_logo?e=1733356800&v=beta&t=fqs9mj9F17GSAQhALd6Et-BSRsZMxT51GrGLWStPcjg", - "companyIndustry": "Computer Software", - "companyStaffCountRange": "11 - 50", - "title": "Board Observer", - "multiLocaleTitle": null, - "multiLocaleCompanyName": null, - "location": "San Francisco Bay Area", - "description": "", - "employmentType": "", - "start": { - "year": 2019, - "month": 0, - "day": 0 - }, - "end": { - "year": 2024, - "month": 0, - "day": 0 - } - }, - { - "companyId": 5324440, - "companyName": "Productboard", - "companyUsername": "productboard", - "companyURL": "https://www.linkedin.com/company/productboard", - "companyLogo": "https://media.licdn.com/dms/image/v2/D560BAQGNdwi0nLUPTg/company-logo_400_400/company-logo_400_400/0/1719256300453/productboard_logo?e=1733356800&v=beta&t=2cf3ZSkvsgxTY1dqhR-bl32uJgIiV7nmcIvqAIn9VTw", - "companyIndustry": "Computer Software", - "companyStaffCountRange": "201 - 500", - "title": "Board Observer", - "multiLocaleTitle": null, - "multiLocaleCompanyName": null, - "location": "", - "description": "", - "employmentType": "", - "start": { - "year": 2019, - "month": 0, - "day": 0 - }, - "end": { - "year": 2024, - "month": 0, - "day": 0 - } - }, - { - "companyId": 6588485, - "companyName": "Guild", - "companyUsername": "guildeducation", - "companyURL": "https://www.linkedin.com/company/guildeducation", - "companyLogo": "https://media.licdn.com/dms/image/v2/D560BAQFQjfjzaP-wmA/company-logo_400_400/company-logo_400_400/0/1681301994500/guildeducation_logo?e=1733356800&v=beta&t=8eSaHxcOPerDLCZtagOPVDl5rmeBNY0TDiSK0Jiu1GY", - "companyIndustry": "Higher Education", - "companyStaffCountRange": "1001 - 5000", - "title": "Investor", - "multiLocaleTitle": null, - "multiLocaleCompanyName": null, - "location": "Denver Metropolitan Area", - "description": "", - "employmentType": "", - "start": { - "year": 2019, - "month": 0, - "day": 0 - }, - "end": { - "year": 2024, - "month": 0, - "day": 0 - } - }, - { - "companyId": 2850862, - "companyName": "Canva", - "companyUsername": "canva", - "companyURL": "https://www.linkedin.com/company/canva", - "companyLogo": "https://media.licdn.com/dms/image/v2/C4D0BAQGO1uzGzmVB-A/company-logo_400_400/company-logo_400_400/0/1656630679668/canva_logo?e=1733356800&v=beta&t=f-EU-W2e0K0IW1-sDDiwpYG0GsRBK2Nh2UX__pbjF38", - "companyIndustry": "Computer Software", - "companyStaffCountRange": "1001 - 5000", - "title": "Investor", - "multiLocaleTitle": null, - "multiLocaleCompanyName": null, - "location": "", - "description": "", - "employmentType": "", - "start": { - "year": 2019, - "month": 0, - "day": 0 - }, - "end": { - "year": 2024, - "month": 0, - "day": 0 - } - } - ], - "skills": [ - { - "name": "Project Planning", - "passedSkillAssessment": false, - "endorsementsCount": 2 - }, - { - "name": "Research", - "passedSkillAssessment": false, - "endorsementsCount": 14 - }, - { - "name": "Project Exec", - "passedSkillAssessment": false - }, - { - "name": "Strategic Planning", - "passedSkillAssessment": false - }, - { - "name": "Market Research", - "passedSkillAssessment": false, - "endorsementsCount": 6 - }, - { - "name": "Nonprofits", - "passedSkillAssessment": false, - "endorsementsCount": 11 - }, - { - "name": "Leadership", - "passedSkillAssessment": false, - "endorsementsCount": 9 - }, - { - "name": "Strategy", - "passedSkillAssessment": false, - "endorsementsCount": 23 - }, - { - "name": "Entrepreneurship", - "passedSkillAssessment": false, - "endorsementsCount": 7 - }, - { - "name": "Economics", - "passedSkillAssessment": false, - "endorsementsCount": 3 - }, - { - "name": "Public Speaking", - "passedSkillAssessment": false, - "endorsementsCount": 16 - }, - { - "name": "Data Analysis", - "passedSkillAssessment": false, - "endorsementsCount": 8 - }, - { - "name": "Fundraising", - "passedSkillAssessment": false, - "endorsementsCount": 4 - }, - { - "name": "Venture Capital", - "passedSkillAssessment": false, - "endorsementsCount": 3 - }, - { - "name": "Spanish", - "passedSkillAssessment": false, - "endorsementsCount": 4 - }, - { - "name": "Financial Modeling", - "passedSkillAssessment": false, - "endorsementsCount": 2 - } - ], - "givenRecommendation": null, - "givenRecommendationCount": 0, - "receivedRecommendation": null, - "receivedRecommendationCount": 0, - "courses": null, - "certifications": null, - "honors": null, - "projects": { - "total": 0, - "items": null - }, - "volunteering": [ - { - "title": "Venture Capital Advisor & Mentor", - "start": { - "year": 2011, - "month": 11, - "day": 0 - }, - "end": { - "year": 2015, - "month": 10, - "day": 0 - }, - "companyName": "BUILD", - "CompanyId": "513390", - "companyUrl": "https://www.linkedin.com/company/513390", - "companyLogo": "https://media.licdn.com/dms/image/v2/C560BAQGT3pm5lHpqVQ/company-logo_400_400/company-logo_400_400/0/1630640162308/build_logo?e=1733356800&v=beta&t=u9inGRmQwmaTL-DDgPc6nPPqVI630FhJ-PSK_xil_Vw" - }, - { - "title": "Alumni Board Member, Mentor", - "start": { - "year": 2012, - "month": 11, - "day": 0 - }, - "end": { - "year": 2016, - "month": 8, - "day": 0 - }, - "companyName": "New Sector Alliance", - "CompanyId": "24636", - "companyUrl": "https://www.linkedin.com/company/24636", - "companyLogo": "https://media.licdn.com/dms/image/v2/C560BAQFXSfHrJYz7Cw/company-logo_400_400/company-logo_400_400/0/1669748969129/new_sector_alliance_logo?e=1733356800&v=beta&t=-G5ciTX5xibgKUH4ox1ABzNNtReauNHLlmYAMglU7nA" - }, - { - "title": "Mentor", - "start": { - "year": 2014, - "month": 9, - "day": 0 - }, - "end": { - "year": 2015, - "month": 9, - "day": 0 - }, - "companyName": "Year Up", - "CompanyId": "28447", - "companyUrl": "https://www.linkedin.com/company/28447", - "companyLogo": "https://media.licdn.com/dms/image/v2/C560BAQFsfLcEADumZg/company-logo_400_400/company-logo_400_400/0/1631350820683?e=1733356800&v=beta&t=-GRlO3yQYdYJUK6a6iP_jRzhVKartf6FaZ0sxKOQH1g" - } - ], - "supportedLocales": [ - { - "country": "US", - "language": "en" - } - ], - "multiLocaleFirstName": { - "en": "Hansae" - }, - "multiLocaleLastName": { - "en": "Catlett" - }, - "multiLocaleHeadline": { - "en": "Partner at HOF Capital | Co-founder & GP at The MBA Fund" - } - } \ No newline at end of file diff --git a/src/vsp/app/bindings.py b/src/vsp/app/bindings.py index b6f0163b06b02f7186b85353b9186f07dabdff64..60207bcd02a6373aa636156a67135cdffa54fa2d 100644 --- a/src/vsp/app/bindings.py +++ b/src/vsp/app/bindings.py @@ -1,8 +1,11 @@ from vsp.app.prompts.prompt_loader import PromptLoader from vsp.app.scrapers.linkedin_downloader import LinkedinDownloader +from vsp.llm.cached_llm_service import CachedLLMService +from vsp.llm.llm_cache import LLMCache from vsp.llm.openai.openai import AsyncOpenAIService from vsp.llm.openai.openai_model import OpenAIModel prompt_loader = PromptLoader() -open_ai_service = AsyncOpenAIService(OpenAIModel.GPT_4_MINI) +llm_cache = LLMCache() +open_ai_service = CachedLLMService(llm_service=AsyncOpenAIService(OpenAIModel.GPT_4_MINI), cache=llm_cache) linkedin_downloader = LinkedinDownloader() diff --git a/src/vsp/app/classifiers/education_classifier.py b/src/vsp/app/classifiers/education_classifier.py index 87704c63a172163aed77801ed01e889c28e9fcfb..0b0479ed12a399581c4aacb12be0cd7ab6f68687 100644 --- a/src/vsp/app/classifiers/education_classifier.py +++ b/src/vsp/app/classifiers/education_classifier.py @@ -56,10 +56,10 @@ class EducationClassification(BaseModel): class EducationClassifier: """ - A class for classifying education items from LinkedIn profiles. + A class for classifying education items from Linkedin profiles. This classifier uses a language model to determine the type of educational - institution and program based on the information provided in a LinkedIn profile. + institution and program based on the information provided in a Linkedin profile. Attributes: _llm_service (LLMService): The language model service used for classification. @@ -114,13 +114,13 @@ class EducationClassifier: self, linkedin_profile: LinkedinProfile, education: Education ) -> EducationClassification: """ - Classify a single education item from a LinkedIn profile. + Classify a single education item from a Linkedin profile. This method prepares the input for the language model, sends the query, and processes the result to classify the education item. Args: - linkedin_profile (LinkedinProfile): The full LinkedIn profile of the individual. + linkedin_profile (LinkedinProfile): The full Linkedin profile of the individual. education (Education): The specific education item to classify. Returns: diff --git a/src/vsp/app/classifiers/work_experience/general_work_experience_classifier.py b/src/vsp/app/classifiers/work_experience/general_work_experience_classifier.py index 7626120a1bbe8925db9d44ed6b1f3df8a5825b40..57d7130052a2bfe86a25acfd2f192c6f0d08b8c3 100644 --- a/src/vsp/app/classifiers/work_experience/general_work_experience_classifier.py +++ b/src/vsp/app/classifiers/work_experience/general_work_experience_classifier.py @@ -1,9 +1,9 @@ """ work_experience_classifier.py -This module provides functionality for classifying work experiences from LinkedIn profiles. +This module provides functionality for classifying work experiences from Linkedin profiles. It uses a language model to determine the primary and secondary job types based on the -information provided in a LinkedIn profile and specific work experience. +information provided in a Linkedin profile and specific work experience. Classes: PrimaryJobType: Enum representing different primary job types. @@ -78,10 +78,10 @@ class WorkExperienceClassification(BaseModel): class WorkExperienceClassifier: """ - A class for classifying work experiences from LinkedIn profiles. + A class for classifying work experiences from Linkedin profiles. This classifier uses a language model to determine the primary and secondary job types - based on the information provided in a LinkedIn profile and specific work experience. + based on the information provided in a Linkedin profile and specific work experience. Attributes: _llm_service (LLMService): The language model service used for classification. @@ -122,6 +122,8 @@ class WorkExperienceClassifier: lines = output.strip().split("\n") parsed: dict[str, Any] = {} for line in lines: + if not line: + continue key, value = line.split(":", 1) parsed[key.strip()] = value.strip() @@ -150,13 +152,13 @@ class WorkExperienceClassifier: self, linkedin_profile: LinkedinProfile, work_experience: Position ) -> WorkExperienceClassification: """ - Classify a single work experience item from a LinkedIn profile. + Classify a single work experience item from a Linkedin profile. This method prepares the input for the language model, sends the query, and processes the result to classify the work experience item. Args: - linkedin_profile (LinkedinProfile): The full LinkedIn profile of the individual. + linkedin_profile (LinkedinProfile): The full Linkedin profile of the individual. work_experience (Position): The specific work experience item to classify. Returns: diff --git a/src/vsp/app/classifiers/work_experience/investing_focus_asset_class_classifier.py b/src/vsp/app/classifiers/work_experience/investing_focus_asset_class_classifier.py index 908ab75a8fd86ee7bf551bd1000a995e346743f6..3effb3275c6e4eab10c6aa9004bbeea8944e1fd2 100644 --- a/src/vsp/app/classifiers/work_experience/investing_focus_asset_class_classifier.py +++ b/src/vsp/app/classifiers/work_experience/investing_focus_asset_class_classifier.py @@ -2,7 +2,7 @@ investing_focus_asset_class_classifier.py This module provides functionality for classifying investing focus and asset classes -based on work experiences from LinkedIn profiles. It uses a language model to +based on work experiences from Linkedin profiles. It uses a language model to determine the specific investing focus or asset class a position belongs to. Classes: @@ -42,6 +42,7 @@ class InvestingFocusAssetClass(str, Enum): CREDIT = "Credit" SECONDARIES = "Secondaries" OTHER = "Other" + UNCLASSIFIABLE = "Unclassifiable" _INVESTING_FOCUS_ASSET_CLASS_MAPPINGS: Final[dict[str, InvestingFocusAssetClass]] = { @@ -69,10 +70,10 @@ class InvestingFocusAssetClassClassification(BaseModel): class InvestingFocusAssetClassClassifier: """ - A class for classifying investing focus and asset classes based on work experiences from LinkedIn profiles. + A class for classifying investing focus and asset classes based on work experiences from Linkedin profiles. This classifier uses a language model to determine the specific investing focus or asset class - a position belongs to based on the information provided in a LinkedIn profile and specific work experience. + a position belongs to based on the information provided in a Linkedin profile and specific work experience. Attributes: _llm_service (LLMService): The language model service used for classification. @@ -151,13 +152,13 @@ class InvestingFocusAssetClassClassifier: self, linkedin_profile: LinkedinProfile, work_experience: Position ) -> InvestingFocusAssetClassClassification: """ - Classify a single work experience item from a LinkedIn profile into an investing focus or asset class. + Classify a single work experience item from a Linkedin profile into an investing focus or asset class. This method prepares the input for the language model, sends the query, and processes the result to classify the work experience item into an investing focus or asset class. Args: - linkedin_profile (LinkedinProfile): The full LinkedIn profile of the individual. + linkedin_profile (LinkedinProfile): The full Linkedin profile of the individual. work_experience (Position): The specific work experience item to classify. Returns: diff --git a/src/vsp/app/classifiers/work_experience/investing_focus_sector_classifier.py b/src/vsp/app/classifiers/work_experience/investing_focus_sector_classifier.py index 1bb8cd2edc36f17cb4f8a13ea2a10a6f61a7a6dc..46a1152e8f42a8db177242e8bf1676374b18ae9b 100644 --- a/src/vsp/app/classifiers/work_experience/investing_focus_sector_classifier.py +++ b/src/vsp/app/classifiers/work_experience/investing_focus_sector_classifier.py @@ -2,7 +2,7 @@ investing_focus_sector_classifier.py This module provides functionality for classifying investing focus sectors -based on work experiences from LinkedIn profiles. It uses a language model to +based on work experiences from Linkedin profiles. It uses a language model to determine the specific sector a position focuses on in terms of investments. Classes: @@ -42,6 +42,7 @@ class InvestingFocusSector(str, Enum): FINANCIAL_INSTITUTIONS = "Financial Institutions Group (FIG) / Fintech" INFRASTRUCTURE_TRANSPORTATION = "Infrastructure / Transportation" OTHER = "Other" + UNCLASSIFIABLE = "Unclassifiable" _INVESTING_FOCUS_SECTOR_MAPPINGS: Final[dict[str, InvestingFocusSector]] = { @@ -67,11 +68,11 @@ class InvestingFocusSectorClassification(BaseModel): class InvestingFocusSectorClassifier: """ - A class for classifying investing focus sectors based on work experiences from LinkedIn profiles. + A class for classifying investing focus sectors based on work experiences from Linkedin profiles. This classifier uses a language model to determine the specific sector a position focuses on in terms of investments, based on the information - provided in a LinkedIn profile and specific work experience. + provided in a Linkedin profile and specific work experience. Attributes: _llm_service (LLMService): The language model service used for classification. @@ -140,13 +141,13 @@ class InvestingFocusSectorClassifier: self, linkedin_profile: LinkedinProfile, work_experience: Position ) -> InvestingFocusSectorClassification: """ - Classify a single work experience item from a LinkedIn profile into an investing focus sector. + Classify a single work experience item from a Linkedin profile into an investing focus sector. This method prepares the input for the language model, sends the query, and processes the result to classify the work experience item into an investing focus sector. Args: - linkedin_profile (LinkedinProfile): The full LinkedIn profile of the individual. + linkedin_profile (LinkedinProfile): The full Linkedin profile of the individual. work_experience (Position): The specific work experience item to classify. Returns: diff --git a/src/vsp/app/classifiers/work_experience/investment_banking_group_classifier.py b/src/vsp/app/classifiers/work_experience/investment_banking_group_classifier.py index 21fdcc36a3fe9d4cd4277e252235a02259b0150a..57fff03efd69c827c66ab69d80a429a10f5e03d3 100644 --- a/src/vsp/app/classifiers/work_experience/investment_banking_group_classifier.py +++ b/src/vsp/app/classifiers/work_experience/investment_banking_group_classifier.py @@ -2,7 +2,7 @@ investment_banking_group_classifier.py This module provides functionality for classifying investment banking groups -based on work experiences from LinkedIn profiles. It uses a language model to +based on work experiences from Linkedin profiles. It uses a language model to determine the specific investment banking group a position belongs to. Classes: @@ -50,6 +50,7 @@ class InvestmentBankingGroup(str, Enum): FINANCIAL_INSTITUTIONS = "Financial Institutions Group (FIG) / Fintech" INFRASTRUCTURE = "Infrastructure / Transportation" OTHER = "Other" + UNCLASSIFIABLE = "Unclassifiable" _INVESTMENT_BANKING_GROUP_MAPPINGS: Final[dict[str, InvestmentBankingGroup]] = { @@ -75,10 +76,10 @@ class InvestmentBankingGroupClassification(BaseModel): class InvestmentBankingGroupClassifier: """ - A class for classifying investment banking groups based on work experiences from LinkedIn profiles. + A class for classifying investment banking groups based on work experiences from Linkedin profiles. This classifier uses a language model to determine the specific investment banking group - a position belongs to based on the information provided in a LinkedIn profile and specific work experience. + a position belongs to based on the information provided in a Linkedin profile and specific work experience. Attributes: _llm_service (LLMService): The language model service used for classification. @@ -146,13 +147,13 @@ class InvestmentBankingGroupClassifier: self, linkedin_profile: LinkedinProfile, work_experience: Position ) -> InvestmentBankingGroupClassification: """ - Classify a single work experience item from a LinkedIn profile into an investment banking group. + Classify a single work experience item from a Linkedin profile into an investment banking group. This method prepares the input for the language model, sends the query, and processes the result to classify the work experience item into an investment banking group. Args: - linkedin_profile (LinkedinProfile): The full LinkedIn profile of the individual. + linkedin_profile (LinkedinProfile): The full Linkedin profile of the individual. work_experience (Position): The specific work experience item to classify. Returns: diff --git a/src/vsp/app/main.py b/src/vsp/app/main.py index 3e98164368697fd3c2b9ea662e7118bbea53e93f..d73d14e86aa12c3cde97c586a33f0b385b2463c9 100644 --- a/src/vsp/app/main.py +++ b/src/vsp/app/main.py @@ -1,32 +1,4 @@ -""" -main.py - -This module provides functionality for processing and classifying LinkedIn profiles. -It uses various classifiers to analyze education and work experience data, -including specific classifications for investment banking roles. - -The main components are: -1. Data models for classified education and work experience. -2. A function to process a LinkedIn profile and generate classification results. -3. An example usage demonstrating how to use the module with a JSON file input. - -This module leverages asyncio for concurrent processing of profile data. - -Classes: - ClassifiedEducation: Represents a classified education item. - ClassifiedWorkExperience: Represents a classified work experience item. - LinkedinProfileClassificationResults: Holds the classification results for a LinkedIn profile. - -Functions: - process_linkedin_profile: Asynchronously processes a LinkedIn profile and returns classification results. - main: An example async function demonstrating how to use the module. - -Usage: - This script can be run directly to process a sample LinkedIn profile: - $ python main.py - - Or the `process_linkedin_profile` function can be imported and used in other modules. -""" +# src/vsp/app/main.py import asyncio import json @@ -36,6 +8,7 @@ from pydantic import BaseModel, Field from vsp.app.classifiers.education_classifier import EducationClassification, EducationClassifier from vsp.app.classifiers.work_experience.general_work_experience_classifier import ( + PrimaryJobType, SecondaryJobType, WorkExperienceClassification, WorkExperienceClassifier, @@ -56,32 +29,14 @@ from vsp.app.model.linkedin.linkedin_models import Education, LinkedinProfile, P class ClassifiedEducation(BaseModel): - """ - Represents a classified education item from a LinkedIn profile. - - Attributes: - education (Education): The original education data from the LinkedIn profile. - classification (EducationClassification): The classification results for the education item. - """ + """Represents a classified education item.""" education: Education classification: EducationClassification class ClassifiedWorkExperience(BaseModel): - """ - Represents a classified work experience item from a LinkedIn profile. - - Attributes: - position (Position): The original position data from the LinkedIn profile. - work_experience_classification (WorkExperienceClassification): The general work experience classification. - investment_banking_classification (InvestmentBankingGroupClassification | None): - The investment banking group classification, if applicable. - investing_focus_asset_class_classification (InvestingFocusAssetClassClassification | None): - The investing focus or asset class classification, if applicable. - investing_focus_sector_classification (InvestingFocusSectorClassification | None): - The investing focus sector classification, if applicable. - """ + """Represents a classified work experience item.""" position: Position work_experience_classification: WorkExperienceClassification @@ -91,13 +46,7 @@ class ClassifiedWorkExperience(BaseModel): class LinkedinProfileClassificationResults(BaseModel): - """ - Holds the classification results for a LinkedIn profile. - - Attributes: - classified_educations (Sequence[ClassifiedEducation]): List of classified education items. - classified_work_experiences (Sequence[ClassifiedWorkExperience]): List of classified work experience items. - """ + """Represents the classification results for a LinkedIn profile.""" classified_educations: Sequence[ClassifiedEducation] = Field(default_factory=list) classified_work_experiences: Sequence[ClassifiedWorkExperience] = Field(default_factory=list) @@ -105,15 +54,10 @@ class LinkedinProfileClassificationResults(BaseModel): async def process_linkedin_profile(profile: LinkedinProfile) -> LinkedinProfileClassificationResults: """ - Asynchronously process a LinkedIn profile and generate classification results. + Process a LinkedIn profile and classify its education and work experiences. - This function performs the following steps: - 1. Classifies all education items in the profile. - 2. Classifies all work experience items in the profile. - 3. For work experiences classified as investment banking, performs an additional - investment banking group classification. - 4. For work experiences classified as investing, performs an additional - investing focus or asset class classification. + This function maintains the original order of educations and work experiences + from the input profile while performing asynchronous classification tasks. Args: profile (LinkedinProfile): The LinkedIn profile to process. @@ -127,63 +71,65 @@ async def process_linkedin_profile(profile: LinkedinProfile) -> LinkedinProfileC investing_focus_asset_class_classifier = InvestingFocusAssetClassClassifier() investing_focus_sector_classifier = InvestingFocusSectorClassifier() - # Classify educations - education_tasks = [education_classifier.classify_education(profile, education) for education in profile.educations] - education_classifications = await asyncio.gather(*education_tasks) - - # Classify work experiences - work_experience_tasks = [ - work_experience_classifier.classify_work_experience(profile, position) for position in profile.positions + # Create tasks for education classification + education_tasks = { + education: education_classifier.classify_education(profile, education) for education in profile.educations + } + + # Create tasks for work experience classification + work_experience_tasks = { + position: work_experience_classifier.classify_work_experience(profile, position) + for position in profile.positions + } + + # Wait for all education and work experience classifications to complete + education_results = await asyncio.gather(*education_tasks.values()) + work_experience_results = await asyncio.gather(*work_experience_tasks.values()) + + # Create ClassifiedEducation objects in the original order + classified_educations = [ + ClassifiedEducation(education=education, classification=classification) + for education, classification in zip(profile.educations, education_results) ] - work_experience_classifications = await asyncio.gather(*work_experience_tasks) - # Classify investment banking groups and investing focus/asset classes for relevant positions + # Process work experiences and create ClassifiedWorkExperience objects classified_work_experiences = [] - for position, work_classification in zip(profile.positions, work_experience_classifications): + for position, work_classification in zip(profile.positions, work_experience_results): classified_work_experience = ClassifiedWorkExperience( position=position, work_experience_classification=work_classification ) - if work_classification.secondary_job_type == SecondaryJobType.INVESTMENT_BANKING: - ib_classification = await investment_banking_classifier.classify_investment_banking_group(profile, position) - classified_work_experience.investment_banking_classification = ib_classification + if work_classification.primary_job_type not in {PrimaryJobType.INTERNSHIP, PrimaryJobType.EXTRACURRICULAR}: + if work_classification.secondary_job_type == SecondaryJobType.INVESTMENT_BANKING: + ib_classification = await investment_banking_classifier.classify_investment_banking_group( + profile, position + ) + classified_work_experience.investment_banking_classification = ib_classification + + if work_classification.secondary_job_type == SecondaryJobType.INVESTING: + asset_class_task = investing_focus_asset_class_classifier.classify_investing_focus_asset_class( + profile, position + ) + sector_task = investing_focus_sector_classifier.classify_investing_focus_sector(profile, position) - if work_classification.secondary_job_type == SecondaryJobType.INVESTING: - investing_asset_class_classification = ( - await investing_focus_asset_class_classifier.classify_investing_focus_asset_class(profile, position) - ) - classified_work_experience.investing_focus_asset_class_classification = investing_asset_class_classification + asset_class_result, sector_result = await asyncio.gather(asset_class_task, sector_task) - investing_sector_classification = await investing_focus_sector_classifier.classify_investing_focus_sector( - profile, position - ) - classified_work_experience.investing_focus_sector_classification = investing_sector_classification + classified_work_experience.investing_focus_asset_class_classification = asset_class_result + classified_work_experience.investing_focus_sector_classification = sector_result classified_work_experiences.append(classified_work_experience) - # Prepare the results using Pydantic models return LinkedinProfileClassificationResults( - classified_educations=[ - ClassifiedEducation(education=education, classification=classification) - for education, classification in zip(profile.educations, education_classifications) - ], - classified_work_experiences=classified_work_experiences, + classified_educations=classified_educations, classified_work_experiences=classified_work_experiences ) async def main() -> None: """ - Example usage of the LinkedIn profile processing functionality. - - This function demonstrates how to: - 1. Load a LinkedIn profile from a JSON file. - 2. Process the profile using the `process_linkedin_profile` function. - 3. Print the classification results. - - The function is asynchronous and should be run in an event loop. + Main function to demonstrate the usage of process_linkedin_profile. """ - with open("src/notebooks/data/eric_armagost.json") as f: - profile = LinkedinProfile.profile_from_json(json.load(f)) + with open("tests/test_data/sample_profiles/eric_armagost.json") as f: + profile = LinkedinProfile.model_validate(json.load(f)) results = await process_linkedin_profile(profile) print(results.model_dump_json(indent=2)) diff --git a/src/vsp/app/model/linkedin/linkedin_formatters.py b/src/vsp/app/model/linkedin/linkedin_formatters.py index faa7c859a699b7596a2966f009de3070f6f6f1c6..0d99dfd8132ae38d88a2c21f7f0b3e16b4aec74c 100644 --- a/src/vsp/app/model/linkedin/linkedin_formatters.py +++ b/src/vsp/app/model/linkedin/linkedin_formatters.py @@ -83,7 +83,7 @@ def format_education_human(education: List[Education]) -> str: def _format_work_experience_human(positions: List[Position]) -> str: """ - Formats the work experience section of a LinkedIn profile in a human-readable format. + Formats the work experience section of a Linkedin profile in a human-readable format. Args: positions (List[Position]): A list of Position objects representing work experience. @@ -111,10 +111,10 @@ def _format_work_experience_human(positions: List[Position]) -> str: def format_profile_as_resume(profile: LinkedinProfile) -> str: """ - Formats the given LinkedIn profile as a resume. + Formats the given Linkedin profile as a resume. Args: - profile (Profile): The LinkedIn profile to be formatted. + profile (Profile): The Linkedin profile to be formatted. Returns: str: The formatted resume as a string. @@ -151,10 +151,10 @@ def format_profile_as_resume(profile: LinkedinProfile) -> str: def format_profile_for_llm(profile: LinkedinProfile) -> str: """ - Formats the given LinkedIn profile for input to the LLM. Uses XML-like tags for each section. + Formats the given Linkedin profile for input to the LLM. Uses XML-like tags for each section. Args: - profile (Profile): The LinkedIn profile to be formatted. + profile (Profile): The Linkedin profile to be formatted. Returns: str: The formatted profile as a string. diff --git a/src/vsp/app/model/linkedin/linkedin_models.py b/src/vsp/app/model/linkedin/linkedin_models.py index 98ed351e6cd73c4efddd89f061f8ebd027b8b014..a65acc5d695da71717aa0dd5a88f3bd28d53bd0e 100644 --- a/src/vsp/app/model/linkedin/linkedin_models.py +++ b/src/vsp/app/model/linkedin/linkedin_models.py @@ -25,6 +25,7 @@ class DateComponent(BaseSchema): year: int | None = None month: int | None = None day: int | None = None + model_config = {"frozen": True} # This makes the model immutable and hashable @field_validator("year", "month", "day", mode="before") @classmethod @@ -70,6 +71,7 @@ class Education(StartEndMixin): school_name: str | None = None description: str | None = None activities: str | None = None + model_config = {"frozen": True} # This makes the model immutable and hashable class Position(StartEndMixin): @@ -82,6 +84,7 @@ class Position(StartEndMixin): location: str | None = None description: str | None = None employment_type: str | None = None + model_config = {"frozen": True} # This makes the model immutable and hashable class Skill(BaseSchema): diff --git a/src/vsp/app/model/vsp/vsp_models.py b/src/vsp/app/model/vsp/vsp_models.py new file mode 100644 index 0000000000000000000000000000000000000000..fcf2ab641fdbaed4b27aea5ad8f69af19f6473d6 --- /dev/null +++ b/src/vsp/app/model/vsp/vsp_models.py @@ -0,0 +1,74 @@ +from typing import Optional, Sequence + +from pydantic import BaseModel, Field, field_validator + + +class General(BaseModel): + linkedin_url: str + first_name: str + last_name: str + current_location: Optional[str] = None + + +class EducationItem(BaseModel): + school: str + beginning_year: Optional[str] = None + ending_year: Optional[str] = None + degree_type: Optional[str] = None + degree_characterization: str + school_type: str + school_location: Optional[str] = None + + @field_validator("beginning_year", "ending_year", mode="before") + @classmethod + def convert_year_to_string(cls, v: int | str | None) -> str | None: + if isinstance(v, int): + return str(v) + return v + + +class Education(BaseModel): + undergraduate_school: Optional[str] = None + undergraduate_year: Optional[int] = None + graduate_school: Optional[str] = None + graduate_school_year: Optional[int] = None + education_history: Sequence[EducationItem] = Field(default_factory=list) + + +class ExperienceBySecondaryJobType(BaseModel): + investing: Optional[float] = None + back_office: Optional[float] = None + investment_banking: Optional[float] = None + consulting: Optional[float] = None + engineering: Optional[float] = None + entrepreneur_founder: Optional[float] = None + corpdev_strategy: Optional[float] = None + other: Optional[float] = None + + +class ExperienceHistoryItem(BaseModel): + company: str + title: Optional[str] + location: Optional[str] = None + start_date: str + end_date: str + duration: str + description: Optional[str] = None + primary_job_type: str + secondary_job_type: Optional[str] = None + investing_focus_stage: Optional[str] = None + investing_focus_sector: Optional[str] = None + investment_banking_focus: Optional[str] = None + + +class ProfessionalExperience(BaseModel): + total_years_of_experience: float + experience_by_secondary_job_type: ExperienceBySecondaryJobType + linkedin_title: str + experience_history: Sequence[ExperienceHistoryItem] = Field(default_factory=list) + + +class VSPProfile(BaseModel): + general: General + education: Education + professional_experience: ProfessionalExperience diff --git a/src/vsp/app/prompts/education_classifier/1 - education_classifier_human.txt b/src/vsp/app/prompts/education_classifier/1 - education_classifier_human.txt index 75577ddebcb978176236c3c77222e7c2904e3c64..04240ae185464376cf42dfd8a5d03a2e9c21fe76 100644 --- a/src/vsp/app/prompts/education_classifier/1 - education_classifier_human.txt +++ b/src/vsp/app/prompts/education_classifier/1 - education_classifier_human.txt @@ -1,9 +1,9 @@ -Please classify the following educational item based on the job candidate's full resume and the specific LinkedIn education information provided. Analyze both sources of information carefully to determine the most accurate classification. +Please classify the following educational item based on the job candidate's full resume and the specific Linkedin education information provided. Analyze both sources of information carefully to determine the most accurate classification. Full Resume: {resume} -Specific LinkedIn Education Item: +Specific Linkedin Education Item: {education} -Provide your classification, confidence level (0.0 to 1.0), and reasoning in the specified format. Ensure your reasoning refers to specific details from both the resume and the LinkedIn education item that support your decision. \ No newline at end of file +Provide your classification, confidence level (0.0 to 1.0), and reasoning in the specified format. Ensure your reasoning refers to specific details from both the resume and the Linkedin education item that support your decision. \ No newline at end of file diff --git a/src/vsp/app/prompts/education_classifier/1 - education_classifier_system.txt b/src/vsp/app/prompts/education_classifier/1 - education_classifier_system.txt index ab17401fbb01d3a28546a02b54c393fc0a5422d1..a292e26fdafd72b8e7d8a9f3420216129560c312 100644 --- a/src/vsp/app/prompts/education_classifier/1 - education_classifier_system.txt +++ b/src/vsp/app/prompts/education_classifier/1 - education_classifier_system.txt @@ -1,16 +1,16 @@ -You are an expert in analyzing educational backgrounds and classifying them according to specific categories. Your task is to examine a founder's full resume and a specific educational item from LinkedIn, then classify the educational item into one of the predefined categories. Use the provided information carefully to make an accurate classification. +You are an expert in analyzing educational backgrounds and classifying them according to specific categories. Your task is to examine a founder's full resume and a specific educational item from Linkedin, then classify the educational item into one of the predefined categories. Use the provided information carefully to make an accurate classification. The classification categories are: -1. PRIMARY_SECONDARY: "Primary / Secondary School" -2. UNDERGRAD_INCOMPLETE: "Undergraduate (Incomplete)" (Includes things like study abroad) -3. UNDERGRAD_COMPLETED: "Undergraduate (Completed)" -4. MBA: "MBA" -5. LAW_SCHOOL: "Law School" -6. GRAD_SCHOOL: "Graduate School" -7. PHD: "PhD" -8. OTHER: "Other" +1. PRIMARY_SECONDARY: Primary / Secondary School. This includes high school, middle school, and elementary school. +2. UNDERGRAD_INCOMPLETE: An incomplete / in-progress undergraduate degree. This includes study-abroad programs, transfer credits, and other incomplete undergraduate studies. +3. UNDERGRAD_COMPLETED: A completed undergraduate degree. +4. MBA: A Master of Business Administration degree. This includes Executive MBA programs. This is not the same as a Master's degree in Business Analytics, Finance, or other fields. +5. LAW_SCHOOL: Successful completion of law school. +6. GRAD_SCHOOL: A Master's degree in a field other than Business Administration or Law. +7. PHD: A PhD or doctorate degree in any field. +8. OTHER: Any other educational experience that doesn't fit the above categories. -Pay close attention to the degree type, field of study, and any other relevant information provided in both the resume and the specific LinkedIn education item. Consider the context of the entire educational background when making your classification. +Pay close attention to the degree type, field of study, and any other relevant information provided in both the resume and the specific Linkedin education item. Consider the context of the entire educational background when making your classification. Provide your response in the following format: @@ -18,4 +18,4 @@ output: [CATEGORY_NAME] confidence: [0.0 to 1.0] reasoning: [Your explanation here] -Ensure each part of your response is on a separate line, exactly as shown above. \ No newline at end of file +Ensure each part of your response is on a separate line, exactly as shown above. There should be exactly three lines. \ No newline at end of file diff --git a/src/vsp/app/prompts/prompt_loader.py b/src/vsp/app/prompts/prompt_loader.py index bc2610f8bd052ca065761647285b8fd29338ec96..6c94f4505111e07b29512f4fec276895e8a10599 100644 --- a/src/vsp/app/prompts/prompt_loader.py +++ b/src/vsp/app/prompts/prompt_loader.py @@ -56,7 +56,7 @@ class PromptLoader: temperature=0.7, output_formatter=lambda x: {"classification": x}, resume="Full resume text...", - education="Specific LinkedIn education item..." + education="Specific Linkedin education item..." ) # Load and create the narrative generator prompt diff --git a/src/vsp/app/prompts/work_experience_classifier/1 - work_experience_classifier_human.txt b/src/vsp/app/prompts/work_experience_classifier/1 - work_experience_classifier_human.txt index 32c3717db64077918ef43e578ea7e445c990d561..037208ee7333d6ee8471ca86aa9c9917b8cdddc3 100644 --- a/src/vsp/app/prompts/work_experience_classifier/1 - work_experience_classifier_human.txt +++ b/src/vsp/app/prompts/work_experience_classifier/1 - work_experience_classifier_human.txt @@ -1,4 +1,4 @@ -Please classify the following work experience item based on the job candidate's full resume and the specific work experience information provided from their LinkedIn profile. Analyze both sources of information carefully to determine the most accurate classification for both Primary Job Type and Secondary Job Type. +Please classify the following work experience item based on the job candidate's full resume and the specific work experience information provided from their Linkedin profile. Analyze both sources of information carefully to determine the most accurate classification for both Primary Job Type and Secondary Job Type. Full Resume: {resume} diff --git a/src/vsp/app/prompts/work_experience_classifier/1 - work_experience_classifier_system.txt b/src/vsp/app/prompts/work_experience_classifier/1 - work_experience_classifier_system.txt index f854ed964e000dd72b0b16f25e7a95a8ff73759d..518c52994ac71627d8b83584533347957b3a6c40 100644 --- a/src/vsp/app/prompts/work_experience_classifier/1 - work_experience_classifier_system.txt +++ b/src/vsp/app/prompts/work_experience_classifier/1 - work_experience_classifier_system.txt @@ -6,33 +6,45 @@ Primary Job Type categories: 1. FULL_TIME: Regular, ongoing employment 2. ADVISORY_BOARD_INVESTOR: Advisory roles, board memberships, or independent investing activities 3. INTERNSHIP: Short-term positions for students or recent graduates, including summer/seasonal analyst roles -4. EXTRACURRICULAR: Non-professional activities related to career development +4. EXTRACURRICULAR: Unpaid activities related to career development, such as student clubs or competitions 5. EDUCATION: When educational experiences are listed as work experiences 6. OTHER: Volunteer work or any other type that doesn't fit the above categories +Some tips for primary job type categories: +- Primary job categories are used to describe the hours and compensation setup of the work experience, as opposed to the industry of focus. +- It cannot be ENTREPRENEUR_FOUNDER: Founding or co-founding a company, as this is a secondary job type category. +- If the role is a 2-4 month job that happened in the summer, it's likely an INTERNSHIP. Something that's longer than 6 months is unlikely to be an internship unless it meets the other criteria below. +- If the role is a part-time job while the candidate was in school, it's likely an INTERNSHIP. +- If the role is before the first full-time job, it's probably during school and should be classified as INTERNSHIP. +- If the role explicitly says "intern", "internship", or "externship", 'summer analyst', 'summer associate', 'winter analyst', or 'winter associate' it's almost certainly an INTERNSHIP. +- If the role is a student club, a competition, or something related to the college of the job candidate, it's likely EXTRACURRICULAR. +- If the role's company is a fraternity, a sorority, or a business fraternity, it's likely EXTRACURRICULAR. + Secondary Job Type categories: -1. INVESTING: Professional investing roles, such as venture capital, private equity, or hedge fund positions +1. INVESTING: Professional investing roles, such as venture capital, private equity, or hedge fund positions (Note: Roles in private equity should be classified as INVESTING) 2. BACK_OFFICE: Supporting roles in financial firms, such as operations, accounting, or IT -3. INVESTMENT_BANKING: Roles in investment banks or related financial services +3. INVESTMENT_BANKING: Roles in investment banks or related financial services (Note: **Exclude roles in private equity and venture capital**) 4. CONSULTING: Management or strategy consulting roles 5. ENGINEERING: Software development, hardware engineering, or other technical roles 6. ENTREPRENEUR_FOUNDER: Founding or co-founding a company 7. CORPDEV_STRATEGY: Corporate development or strategic planning roles 8. OTHER: Any role that doesn't fit the above categories +Some tips for secondary job type categories: +- If the role involves analyzing potential investments, it's likely INVESTING. +- Roles in private equity, venture capital, or hedge fund positions should be classified as INVESTING. Exclude these roles from INVESTMENT_BANKING. +- A candidate can be doing investment banking activities in a corp dev role. In this case, the role should be classified as CORPDEV_STRATEGY. You can tell if the role is corp dev if the candidate is working for a company and not a bank. + Provide your response in the following format exactly: -primary_job_type: [PRIMARY_JOB_TYPE] -secondary_job_type: [SECONDARY_JOB_TYPE] -confidence: [0.0 to 1.0] reasoning: [Your explanation here] +confidence: [0.0 to 1.0] +primary_job_type: [one of: FULL_TIME, ADVISORY_BOARD_INVESTOR, INTERNSHIP, EXTRACURRICULAR, EDUCATION, OTHER] +secondary_job_type: [one of: INVESTING, BACK_OFFICE, INVESTMENT_BANKING, CONSULTING, ENGINEERING, ENTREPRENEUR_FOUNDER, CORPDEV_STRATEGY, OTHER] -Ensure each part of your response is on a separate line, exactly as shown above. There should be only four lines. +Ensure each part of your response is on a separate line, exactly as shown above. There should be EXACTLY four lines. The PRIMARY_JOB_TYPE must be one of: FULL_TIME, ADVISORY_BOARD_INVESTOR, INTERNSHIP, EXTRACURRICULAR, EDUCATION, OTHER - The SECONDARY_JOB_TYPE must be one of: INVESTING, BACK_OFFICE, INVESTMENT_BANKING, CONSULTING, ENGINEERING, ENTREPRENEUR_FOUNDER, CORPDEV_STRATEGY, OTHER -Your confidence level should reflect how certain you are about your classification based on the information provided. - -In your reasoning, briefly explain why you chose these classifications, referencing specific details from the resume and work experience item that support your decision. \ No newline at end of file +Your confidence level should reflect how certain you are about your classification based on the information provided. In your reasoning, briefly explain why you chose these classifications, referencing specific details from the resume and work experience item that support your decision. \ No newline at end of file diff --git a/src/vsp/app/prompts/work_experience_classifier/investing_focus_asset_class/1 - investing_focus_asset_class_classifier_human.txt b/src/vsp/app/prompts/work_experience_classifier/investing_focus_asset_class/1 - investing_focus_asset_class_classifier_human.txt index a25d352fdcb043e92b6d8cb8101f90525737f0b9..954264f6c079020b59c12e3034bf3476ba54c4d1 100644 --- a/src/vsp/app/prompts/work_experience_classifier/investing_focus_asset_class/1 - investing_focus_asset_class_classifier_human.txt +++ b/src/vsp/app/prompts/work_experience_classifier/investing_focus_asset_class/1 - investing_focus_asset_class_classifier_human.txt @@ -1,4 +1,4 @@ -Please classify the following work experience item based on the job candidate's full resume and the specific work experience information provided from their LinkedIn profile. Analyze both sources of information carefully to determine the most accurate classification for the investing focus or asset class. +Please classify the following work experience item based on the job candidate's full resume and the specific work experience information provided from their Linkedin profile. Analyze both sources of information carefully to determine the most accurate classification for the investing focus or asset class. Full Resume: {resume} diff --git a/src/vsp/app/prompts/work_experience_classifier/investing_focus_asset_class/1 - investing_focus_asset_class_classifier_system.txt b/src/vsp/app/prompts/work_experience_classifier/investing_focus_asset_class/1 - investing_focus_asset_class_classifier_system.txt index 45c0877d3f314e54a9af5e2a13b1a81a24541b36..58e6b2db0471a13ac3542dc6341190a377c3e683 100644 --- a/src/vsp/app/prompts/work_experience_classifier/investing_focus_asset_class/1 - investing_focus_asset_class_classifier_system.txt +++ b/src/vsp/app/prompts/work_experience_classifier/investing_focus_asset_class/1 - investing_focus_asset_class_classifier_system.txt @@ -1,4 +1,4 @@ -You are an expert in analyzing professional work experiences and classifying them according to specific investing focus and asset classes. Your task is to examine a job candidate's full resume and a specific work experience item from their LinkedIn profile, then classify the work experience into one of the predefined investing focus or asset class categories. +You are an expert in analyzing professional work experiences and classifying them according to specific investing focus and asset classes. Your task is to examine a job candidate's full resume and a specific work experience item from their Linkedin profile, then classify the work experience into one of the predefined investing focus or asset class categories. Use the provided information carefully to make an accurate classification. Pay close attention to job titles, responsibilities, company descriptions, and any other relevant information provided in both the resume and the specific work experience item. @@ -11,10 +11,11 @@ Investing Focus / Asset Class categories: 6. PUBLIC_EQUITIES: Investments in publicly traded equities 7. REAL_ESTATE: Real estate investments 8. PRIVATE_EQUITY_BUYOUTS: Private equity and buyout investments -9. HEDGE_FUND: Hedge fund investments +9. HEDGE_FUND: Hedge fund investments, such as fund-of-funds 10. CREDIT: Credit investments 11. SECONDARIES: Secondary market investments 12. OTHER: Any focus or asset class that doesn't fit the above categories +13. UNCLASSIFIABLE: If the information provided is insufficient to make a classification Provide your response in the following format exactly: diff --git a/src/vsp/app/prompts/work_experience_classifier/investing_focus_sector/1 - investing_focus_sector_classifier_human.txt b/src/vsp/app/prompts/work_experience_classifier/investing_focus_sector/1 - investing_focus_sector_classifier_human.txt index d99d50aa183ceb451bac7a8a215eaf132f496143..3af45a507e483c8b31376b581179f8267580dc5b 100644 --- a/src/vsp/app/prompts/work_experience_classifier/investing_focus_sector/1 - investing_focus_sector_classifier_human.txt +++ b/src/vsp/app/prompts/work_experience_classifier/investing_focus_sector/1 - investing_focus_sector_classifier_human.txt @@ -1,4 +1,4 @@ -Please classify the following work experience item based on the job candidate's full resume and the specific work experience information provided from their LinkedIn profile. Analyze both sources of information carefully to determine the most accurate classification for the investing focus sector. +Please classify the following work experience item based on the job candidate's full resume and the specific work experience information provided from their Linkedin profile. Analyze both sources of information carefully to determine the most accurate classification for the investing focus sector. Full Resume: {resume} diff --git a/src/vsp/app/prompts/work_experience_classifier/investing_focus_sector/1 - investing_focus_sector_classifier_system.txt b/src/vsp/app/prompts/work_experience_classifier/investing_focus_sector/1 - investing_focus_sector_classifier_system.txt index d3177ed0a036dd66348dc0fc24eb4b9d2f91be13..d21be554f76909167b6f0c523b303f2d6a4286af 100644 --- a/src/vsp/app/prompts/work_experience_classifier/investing_focus_sector/1 - investing_focus_sector_classifier_system.txt +++ b/src/vsp/app/prompts/work_experience_classifier/investing_focus_sector/1 - investing_focus_sector_classifier_system.txt @@ -1,4 +1,4 @@ -You are an expert in analyzing professional work experiences and classifying them according to specific investing focus sectors. Your task is to examine a job candidate's full resume and a specific work experience item from their LinkedIn profile, then classify the work experience into one of the predefined investing focus sector categories. +You are an expert in analyzing professional work experiences and classifying them according to specific investing focus sectors. Your task is to examine a job candidate's full resume and a specific work experience item from their Linkedin profile, then classify the work experience into one of the predefined investing focus sector categories. Use the provided information carefully to make an accurate classification. Pay close attention to job titles, responsibilities, company descriptions, and any other relevant information provided in both the resume and the specific work experience item. @@ -15,6 +15,7 @@ Investing Focus Sector categories: 10. FINANCIAL_INSTITUTIONS: Focus on banks, insurance, fintech, and other financial services 11. INFRASTRUCTURE_TRANSPORTATION: Focus on infrastructure projects and transportation 12. OTHER: Any focus that doesn't fit the above categories +13. UNCLASSIFIABLE: If the information provided is insufficient to make a classification. Provide your response in the following format exactly: @@ -24,8 +25,6 @@ reasoning: [Your explanation here] Ensure each part of your response is on a separate line, exactly as shown above. There should be exactly three lines. -The investing_focus_sector must be one of: GENERALIST, HEALTHCARE, INDUSTRIALS, BUSINESS_SERVICES, CONSUMER_RETAIL, ENERGY_NATURAL_RESOURCES, REAL_ESTATE_GAMING_LODGING, TECHNOLOGY_SOFTWARE_TMT, MEDIA_ENTERTAINMENT, FINANCIAL_INSTITUTIONS, INFRASTRUCTURE_TRANSPORTATION, OTHER. +The investing_focus_sector must be one of: GENERALIST, HEALTHCARE, INDUSTRIALS, BUSINESS_SERVICES, CONSUMER_RETAIL, ENERGY_NATURAL_RESOURCES, REAL_ESTATE_GAMING_LODGING, TECHNOLOGY_SOFTWARE_TMT, MEDIA_ENTERTAINMENT, FINANCIAL_INSTITUTIONS, INFRASTRUCTURE_TRANSPORTATION, OTHER, UNCLASSIFIABLE. -Your confidence level should reflect how certain you are about your classification based on the information provided. - -In your reasoning, briefly explain why you chose this classification, referencing specific details from the resume and work experience item that support your decision. \ No newline at end of file +Your confidence level should reflect how certain you are about your classification based on the information provided. In your reasoning, briefly explain why you chose this classification, referencing specific details from the resume and work experience item that support your decision. \ No newline at end of file diff --git a/src/vsp/app/prompts/work_experience_classifier/investment_banking_group/1 - investment_banking_group_classifier_human.txt b/src/vsp/app/prompts/work_experience_classifier/investment_banking_group/1 - investment_banking_group_classifier_human.txt index 739334252b863a72290e71f04c066aee125b6de8..b6939f347330a7c4668aad6e0c75d5c979cf89df 100644 --- a/src/vsp/app/prompts/work_experience_classifier/investment_banking_group/1 - investment_banking_group_classifier_human.txt +++ b/src/vsp/app/prompts/work_experience_classifier/investment_banking_group/1 - investment_banking_group_classifier_human.txt @@ -1,4 +1,4 @@ -Please classify the following investment banking work experience item based on the job candidate's full resume and the specific investment banking work experience information provided from their LinkedIn profile. Analyze both sources of information carefully to determine the most accurate classification for the investment banking group the candidate worked in. +Please classify the following investment banking work experience item based on the job candidate's full resume and the specific investment banking work experience information provided from their Linkedin profile. Analyze both sources of information carefully to determine the most accurate classification for the investment banking group the candidate worked in. Full Resume: {resume} diff --git a/src/vsp/app/prompts/work_experience_classifier/investment_banking_group/1 - investment_banking_group_classifier_system.txt b/src/vsp/app/prompts/work_experience_classifier/investment_banking_group/1 - investment_banking_group_classifier_system.txt index 8ef64bd41bffe41301244177f879892d3c0790f8..ad297456d45f8ffc7aa99f3f46ad727f8148df88 100644 --- a/src/vsp/app/prompts/work_experience_classifier/investment_banking_group/1 - investment_banking_group_classifier_system.txt +++ b/src/vsp/app/prompts/work_experience_classifier/investment_banking_group/1 - investment_banking_group_classifier_system.txt @@ -1,4 +1,4 @@ -You are an expert investment banking recruiter. You have been asked to analyze a specific investment banking work experience item from a job candidate's LinkedIn profile. Your task is to accurately classify the investment banking group the candidate worked in. +You are an expert investment banking recruiter. You have been asked to analyze a specific investment banking work experience item from a job candidate's Linkedin profile. Your task is to accurately classify the investment banking group the candidate worked in. You can use your understanding of the investment banking industry as an expert recruiter in investment banking to make the best guess. Use the provided information carefully to make accurate classifications. @@ -23,6 +23,7 @@ Investment banking groups: 18. FINANCIAL_INSTITUTIONS: A group focused on financial institutions and banking transactions. 19. INFRASTRUCTURE: A group specializing in infrastructure and transportation transactions. 20. OTHER: Any group that doesn't fit the above categories. +21. UNCLASSIFIABLE: If the information provided is insufficient to make a classification Provide your response in the following format exactly: diff --git a/src/vsp/app/scrapers/linkedin_downloader.py b/src/vsp/app/scrapers/linkedin_downloader.py index a7e9c43d04229253ac689f579633acaa881034c9..82c83d88b0da39fbd3363c365bd4f2796d498264 100644 --- a/src/vsp/app/scrapers/linkedin_downloader.py +++ b/src/vsp/app/scrapers/linkedin_downloader.py @@ -1,14 +1,14 @@ """ linkedin_downloader.py -This module provides functionality for asynchronously downloading LinkedIn profile data -using the RapidAPI LinkedIn API. It handles authentication, rate limiting, and retrying +This module provides functionality for asynchronously downloading Linkedin profile data +using the RapidAPI Linkedin API. It handles authentication, rate limiting, and retrying of requests in case of failures. Classes: - LinkedInFetchFailedError: Custom exception for LinkedIn fetch failures. + LinkedinFetchFailedError: Custom exception for Linkedin fetch failures. RateLimiter: Token bucket algorithm implementation for rate limiting. - LinkedinDownloader: Main class for downloading LinkedIn profile data. + LinkedinDownloader: Main class for downloading Linkedin profile data. Usage: downloader = LinkedinDownloader() @@ -29,8 +29,8 @@ from vsp.shared import aws_clients, config, logger_factory logger = logger_factory.get_logger(__name__) -class LinkedInFetchFailedError(Exception): - """Custom exception raised when fetching LinkedIn profile data fails.""" +class LinkedinFetchFailedError(Exception): + """Custom exception raised when fetching Linkedin profile data fails.""" class RateLimiter: @@ -76,14 +76,14 @@ class RateLimiter: class LinkedinDownloader: """ - A class for asynchronously downloading LinkedIn profile data. + A class for asynchronously downloading Linkedin profile data. This class handles authentication, rate limiting, and retrying of requests - when interacting with the RapidAPI LinkedIn API. + when interacting with the RapidAPI Linkedin API. Attributes: - _URL (Final[str]): The RapidAPI endpoint for LinkedIn data. - _X_RAPIDAPI_HOST (Final[str]): The RapidAPI host for LinkedIn API. + _URL (Final[str]): The RapidAPI endpoint for Linkedin data. + _X_RAPIDAPI_HOST (Final[str]): The RapidAPI host for Linkedin API. _api_key (str): The RapidAPI key for authentication. _semaphore (asyncio.Semaphore): Semaphore for limiting concurrent requests. _rate_limiter (RateLimiter): Rate limiter for controlling requests per minute. @@ -107,10 +107,10 @@ class LinkedinDownloader: @staticmethod def _fetch_api_key() -> str: """ - Fetch the LinkedIn RapidAPI key from AWS Parameter Store. + Fetch the Linkedin RapidAPI key from AWS Parameter Store. Returns: - str: The LinkedIn RapidAPI key. + str: The Linkedin RapidAPI key. Raises: ValueError: If the API key is not found in the Parameter Store. @@ -119,18 +119,18 @@ class LinkedinDownloader: try: return aws_clients.fetch_from_parameter_store(config.get_linkedin_key_path(), is_secret=True) except aws_clients.ParameterNotFoundError as e: - logger.error("LinkedIn RapidAPI key not found in Parameter Store", error=str(e)) - raise ValueError("LinkedIn RapidAPI key not found") from e + logger.error("Linkedin RapidAPI key not found in Parameter Store", error=str(e)) + raise ValueError("Linkedin RapidAPI key not found") from e except aws_clients.ParameterStoreAccessError as e: logger.error("Error accessing Parameter Store", error=str(e)) - raise RuntimeError("Unable to access LinkedIn RapidAPI key") from e + raise RuntimeError("Unable to access Linkedin RapidAPI key") from e def _compose_request(self, linkedin_url: str) -> tuple[dict[str, str], dict[str, str]]: """ Compose the request headers and query parameters for the API call. Args: - linkedin_url (str): The LinkedIn profile URL. + linkedin_url (str): The Linkedin profile URL. Returns: tuple[dict[str, str], dict[str, str]]: A tuple containing the headers and query parameters. @@ -143,34 +143,34 @@ class LinkedinDownloader: @retry( wait=wait_random_exponential(min=1, max=60), stop=stop_after_attempt(3), - retry=retry_if_exception_type(LinkedInFetchFailedError), + retry=retry_if_exception_type(LinkedinFetchFailedError), reraise=True, ) async def fetch_linkedin_data(self, linkedin_url: str) -> LinkedinProfile: """ - Fetch LinkedIn profile data for a given URL. + Fetch Linkedin profile data for a given URL. This method is decorated with a retry mechanism that will attempt to retry - the call up to 3 times with exponential backoff if a LinkedInFetchFailedError is raised. + the call up to 3 times with exponential backoff if a LinkedinFetchFailedError is raised. Args: - linkedin_url (str): The LinkedIn profile URL to fetch data for. + linkedin_url (str): The Linkedin profile URL to fetch data for. Returns: - LinkedinProfile: The fetched LinkedIn profile data. + LinkedinProfile: The fetched Linkedin profile data. Raises: - LinkedInFetchFailedError: If the API call fails after all retry attempts. + LinkedinFetchFailedError: If the API call fails after all retry attempts. """ async with self._semaphore: await self._rate_limiter.acquire() # Acquire a token from the rate limiter headers, querystring = self._compose_request(linkedin_url) - logger.info("Fetching LinkedIn profile", url=linkedin_url) + logger.info("Fetching Linkedin profile", url=linkedin_url) async with aiohttp.ClientSession() as session: async with session.get(self._URL, headers=headers, params=querystring) as response: if response.status == 200: data = await response.json() return LinkedinProfile.profile_from_json(data) else: - logger.error("Failed to fetch LinkedIn profile", url=linkedin_url, status=response.status) - raise LinkedInFetchFailedError(f"Failed to fetch LinkedIn profile for {linkedin_url}") + logger.error("Failed to fetch Linkedin profile", url=linkedin_url, status=response.status) + raise LinkedinFetchFailedError(f"Failed to fetch Linkedin profile for {linkedin_url}") diff --git a/src/vsp/llm/cached_llm_service.py b/src/vsp/llm/cached_llm_service.py new file mode 100644 index 0000000000000000000000000000000000000000..f8380de44b9da74a45e80023c69c952a96f4e2b9 --- /dev/null +++ b/src/vsp/llm/cached_llm_service.py @@ -0,0 +1,38 @@ +from vsp.llm.llm_cache import LLMCache +from vsp.llm.llm_service import LLMService +from vsp.shared import logger_factory + +logger = logger_factory.get_logger(__name__) + + +class CachedLLMService(LLMService): + def __init__(self, llm_service: LLMService, cache: LLMCache | None = None): + self.llm_service = llm_service + self.cache = cache or LLMCache() + + async def invoke( + self, + user_prompt: str | None = None, + system_prompt: str | None = None, + partial_assistant_prompt: str | None = None, + max_tokens: int = 1000, + temperature: float = 0.0, + ) -> str | None: + cache_key = f"{user_prompt}_{system_prompt}_{partial_assistant_prompt}_{max_tokens}_{temperature}" + cached_response = self.cache.get(cache_key, {}) + if cached_response is not None: + logger.debug("LLM cache hit") + return cached_response + + response = await self.llm_service.invoke( + user_prompt=user_prompt, + system_prompt=system_prompt, + partial_assistant_prompt=partial_assistant_prompt, + max_tokens=max_tokens, + temperature=temperature, + ) + + if response is not None: + self.cache.set(cache_key, response, {}) + + return response diff --git a/src/vsp/llm/llm_cache.py b/src/vsp/llm/llm_cache.py new file mode 100644 index 0000000000000000000000000000000000000000..072a7417bcadd41ce08f865163c388add730ec48 --- /dev/null +++ b/src/vsp/llm/llm_cache.py @@ -0,0 +1,49 @@ +# llm_cache.py +import hashlib +import json +import sqlite3 +from pathlib import Path +from typing import Any + + +class LLMCache: + def __init__(self, db_path: str | Path = "llm_cache.db"): + self.db_path = Path(db_path) + self._init_db() + + def _init_db(self) -> None: + with sqlite3.connect(self.db_path) as conn: + conn.execute( + """ + CREATE TABLE IF NOT EXISTS llm_cache ( + prompt_hash TEXT PRIMARY KEY, + prompt TEXT, + response TEXT, + metadata TEXT + ) + """ + ) + + def _hash_prompt(self, prompt: str, metadata: dict[str, Any]) -> str: + combined = json.dumps({"prompt": prompt, "metadata": metadata}, sort_keys=True) + return hashlib.sha256(combined.encode()).hexdigest() + + def get(self, prompt: str, metadata: dict[str, Any]) -> str | None: + prompt_hash = self._hash_prompt(prompt, metadata) + with sqlite3.connect(self.db_path) as conn: + cursor = conn.cursor() + cursor.execute("SELECT response FROM llm_cache WHERE prompt_hash = ?", (prompt_hash,)) + result = cursor.fetchone() + return result[0] if result else None + + def set(self, prompt: str, response: str, metadata: dict[str, Any]) -> None: + prompt_hash = self._hash_prompt(prompt, metadata) + with sqlite3.connect(self.db_path) as conn: + conn.execute( + "INSERT OR REPLACE INTO llm_cache (prompt_hash, prompt, response, metadata) VALUES (?, ?, ?, ?)", + (prompt_hash, prompt, response, json.dumps(metadata)), + ) + + def clear(self) -> None: + with sqlite3.connect(self.db_path) as conn: + conn.execute("DELETE FROM llm_cache") diff --git a/src/vsp/llm/openai/openai.py b/src/vsp/llm/openai/openai.py index b8a24b6ac724232207b7dd111fe315b6df36a392..09758b11838553383109bd9e9f6ec02c659d7a37 100644 --- a/src/vsp/llm/openai/openai.py +++ b/src/vsp/llm/openai/openai.py @@ -44,7 +44,7 @@ class AsyncOpenAIService(LLMService): when interacting with OpenAI's language models. """ - def __init__(self, model: OpenAIModel, max_concurrency: int = 10): + def __init__(self, model: OpenAIModel, max_concurrency: int = 30): """ Initialize the AsyncOpenAIService. diff --git a/src/vsp/shared/config.py b/src/vsp/shared/config.py index ce1c41ce357ebe7f24a4309903c1326ed0fe4f82..8c1685773be5b0f460f0a84e24fd06425c785da0 100644 --- a/src/vsp/shared/config.py +++ b/src/vsp/shared/config.py @@ -106,7 +106,7 @@ def get_openrouter_api_key_path() -> str: @cache def get_linkedin_key_path() -> str: """ - Reads the RapidAPI key path from the TOML configuration file for LinkedIn. + Reads the RapidAPI key path from the TOML configuration file for Linkedin. Key is in AWS parameter store """ config = _get_config() diff --git a/tests/test_data/sample_profiles/chanson_zhao.json b/tests/test_data/sample_profiles/chanson_zhao.json new file mode 100644 index 0000000000000000000000000000000000000000..e588a00d087861565accf79893287c12fd3c95e2 --- /dev/null +++ b/tests/test_data/sample_profiles/chanson_zhao.json @@ -0,0 +1,527 @@ +{ + "first_name": "Chanson", + "last_name": "Zhao", + "is_open_to_work": false, + "is_hiring": false, + "profile_picture": "https://media.licdn.com/dms/image/v2/C5603AQFgxjJgSDk0rg/profile-displayphoto-shrink_800_800/profile-displayphoto-shrink_800_800/0/1631210582540?e=1731542400&v=beta&t=lL5-tBPruy_78Wvb9Uc3U6owV3wDisWNlcKLmlqvRAQ", + "summary": "USC grad and investment banking analyst at Barclays. Passionate about the intersection of finance and technology.", + "headline": "Investment Banking Analyst at Barclays", + "geo": { + "country": "United States", + "city": "San Francisco, California", + "full": "San Francisco, California, United States" + }, + "languages": null, + "educations": [ + { + "start": { + "year": 2018, + "month": null, + "day": null + }, + "end": { + "year": 2022, + "month": null, + "day": null + }, + "field_of_study": "Business Administration and Management, General", + "degree": "Bachelor of Science - BS", + "grade": "", + "school_name": "University of Southern California", + "description": "", + "activities": "Trojan Investing Society, Delta Sigma Pi, Undergraduate Student Investment Fund (USIF), Marshall Global Leadership Program" + }, + { + "start": { + "year": 2014, + "month": null, + "day": null + }, + "end": { + "year": 2018, + "month": null, + "day": null + }, + "field_of_study": "", + "degree": "", + "grade": "", + "school_name": "Valencia High School", + "description": "", + "activities": "Chemistry Olympiad, Future Business Leaders of America, National AP Scholar" + } + ], + "positions": [ + { + "start": { + "year": 2022, + "month": 7, + "day": null + }, + "end": { + "year": null, + "month": null, + "day": null + }, + "company_name": "Barclays", + "company_username": "barclays-bank", + "company_url": null, + "company_industry": "Financial Services", + "company_staff_count_range": "10001 - 0", + "title": "Investment Banking Analyst", + "location": "San Francisco Bay Area", + "description": "Technology Coverage", + "employment_type": "Full-time" + }, + { + "start": { + "year": 2021, + "month": 3, + "day": null + }, + "end": { + "year": 2022, + "month": 5, + "day": null + }, + "company_name": "University of Southern California - Marshall School of Business", + "company_username": "uscmarshallschoolofbusiness", + "company_url": null, + "company_industry": "Higher Education", + "company_staff_count_range": "10001 - 0", + "title": "Portfolio Manager - Undergraduate Student Investment Fund (USIF)", + "location": "Los Angeles, California, United States", + "description": "AUM: $5.3MM", + "employment_type": "" + }, + { + "start": { + "year": 2021, + "month": 6, + "day": null + }, + "end": { + "year": 2021, + "month": 8, + "day": null + }, + "company_name": "Barclays", + "company_username": "barclays-bank", + "company_url": null, + "company_industry": "Financial Services", + "company_staff_count_range": "10001 - 0", + "title": "Investment Banking Summer Analyst", + "location": "San Francisco Bay Area", + "description": "Technology Coverage", + "employment_type": "Internship" + }, + { + "start": { + "year": 2019, + "month": 2, + "day": null + }, + "end": { + "year": 2021, + "month": 6, + "day": null + }, + "company_name": "Delta Sigma Pi", + "company_username": "delta-sigma-pi", + "company_url": null, + "company_industry": "Professional Training & Coaching", + "company_staff_count_range": "11 - 50", + "title": "VP Finance", + "location": "Los Angeles, CA", + "description": "", + "employment_type": "" + }, + { + "start": { + "year": 2019, + "month": 11, + "day": null + }, + "end": { + "year": 2020, + "month": 12, + "day": null + }, + "company_name": "Trojan Investing Society", + "company_username": "trojaninvestingsociety", + "company_url": null, + "company_industry": "Investment Banking", + "company_staff_count_range": "201 - 500", + "title": "Senior Vice President", + "location": "Los Angeles, CA", + "description": "USC's premier undergraduate finance organization comprised of 450+ members", + "employment_type": "" + }, + { + "start": { + "year": 2020, + "month": 1, + "day": null + }, + "end": { + "year": 2020, + "month": 6, + "day": null + }, + "company_name": "Trojan Investing Society", + "company_username": "trojaninvestingsociety", + "company_url": null, + "company_industry": "Investment Banking", + "company_staff_count_range": "201 - 500", + "title": "Mentorship Program", + "location": "Los Angeles, California", + "description": "", + "employment_type": "" + }, + { + "start": { + "year": 2019, + "month": 8, + "day": null + }, + "end": { + "year": 2019, + "month": 11, + "day": null + }, + "company_name": "Trojan Investing Society", + "company_username": "trojaninvestingsociety", + "company_url": null, + "company_industry": "Investment Banking", + "company_staff_count_range": "201 - 500", + "title": "Leaders Program", + "location": "Los Angeles, CA", + "description": "", + "employment_type": "" + }, + { + "start": { + "year": 2020, + "month": 5, + "day": null + }, + "end": { + "year": 2020, + "month": 8, + "day": null + }, + "company_name": "TELEO Capital", + "company_username": "teleo-capital", + "company_url": null, + "company_industry": "Venture Capital & Private Equity", + "company_staff_count_range": "11 - 50", + "title": "Private Equity Intern", + "location": "Los Angeles, CA", + "description": "Private equity firm targeting opportunities in the software & technology, healthcare IT, and industrial sectors", + "employment_type": "Internship" + }, + { + "start": { + "year": 2019, + "month": 8, + "day": null + }, + "end": { + "year": 2020, + "month": 1, + "day": null + }, + "company_name": "Business Technology Group", + "company_username": "business-tech-group", + "company_url": null, + "company_industry": "Management Consulting", + "company_staff_count_range": "11 - 50", + "title": "VP Operations", + "location": "Los Angeles, CA", + "description": "", + "employment_type": "" + }, + { + "start": { + "year": 2019, + "month": 2, + "day": null + }, + "end": { + "year": 2019, + "month": 8, + "day": null + }, + "company_name": "USC Association of Innovative Marketing (AIM) Consulting", + "company_username": "usc-aim-consulting", + "company_url": null, + "company_industry": "Marketing & Advertising", + "company_staff_count_range": "11 - 50", + "title": "Consultant", + "location": "Los Angeles, CA", + "description": "", + "employment_type": "" + } + ], + "full_positions": [ + { + "start": { + "year": 2022, + "month": 7, + "day": null + }, + "end": { + "year": null, + "month": null, + "day": null + }, + "company_name": "Barclays", + "company_username": "barclays-bank", + "company_url": null, + "company_industry": "Financial Services", + "company_staff_count_range": "10001 - 0", + "title": "Investment Banking Analyst", + "location": "San Francisco Bay Area", + "description": "Technology Coverage", + "employment_type": "Full-time" + }, + { + "start": { + "year": 2021, + "month": 3, + "day": null + }, + "end": { + "year": 2022, + "month": 5, + "day": null + }, + "company_name": "University of Southern California - Marshall School of Business", + "company_username": "uscmarshallschoolofbusiness", + "company_url": null, + "company_industry": "Higher Education", + "company_staff_count_range": "10001 - 0", + "title": "Portfolio Manager - Undergraduate Student Investment Fund (USIF)", + "location": "Los Angeles, California, United States", + "description": "AUM: $5.3MM", + "employment_type": "" + }, + { + "start": { + "year": 2021, + "month": 6, + "day": null + }, + "end": { + "year": 2021, + "month": 8, + "day": null + }, + "company_name": "Barclays", + "company_username": "barclays-bank", + "company_url": null, + "company_industry": "Financial Services", + "company_staff_count_range": "10001 - 0", + "title": "Investment Banking Summer Analyst", + "location": "San Francisco Bay Area", + "description": "Technology Coverage", + "employment_type": "Internship" + }, + { + "start": { + "year": 2019, + "month": 2, + "day": null + }, + "end": { + "year": 2021, + "month": 6, + "day": null + }, + "company_name": "Delta Sigma Pi", + "company_username": "delta-sigma-pi", + "company_url": null, + "company_industry": "Professional Training & Coaching", + "company_staff_count_range": "11 - 50", + "title": "VP Finance", + "location": "Los Angeles, CA", + "description": "", + "employment_type": "" + }, + { + "start": { + "year": 2019, + "month": 11, + "day": null + }, + "end": { + "year": 2020, + "month": 12, + "day": null + }, + "company_name": "Trojan Investing Society", + "company_username": "trojaninvestingsociety", + "company_url": null, + "company_industry": "Investment Banking", + "company_staff_count_range": "201 - 500", + "title": "Senior Vice President", + "location": "Los Angeles, CA", + "description": "USC's premier undergraduate finance organization comprised of 450+ members", + "employment_type": "" + }, + { + "start": { + "year": 2020, + "month": 1, + "day": null + }, + "end": { + "year": 2020, + "month": 6, + "day": null + }, + "company_name": "Trojan Investing Society", + "company_username": "trojaninvestingsociety", + "company_url": null, + "company_industry": "Investment Banking", + "company_staff_count_range": "201 - 500", + "title": "Mentorship Program", + "location": "Los Angeles, California", + "description": "", + "employment_type": "" + }, + { + "start": { + "year": 2019, + "month": 8, + "day": null + }, + "end": { + "year": 2019, + "month": 11, + "day": null + }, + "company_name": "Trojan Investing Society", + "company_username": "trojaninvestingsociety", + "company_url": null, + "company_industry": "Investment Banking", + "company_staff_count_range": "201 - 500", + "title": "Leaders Program", + "location": "Los Angeles, CA", + "description": "", + "employment_type": "" + }, + { + "start": { + "year": 2020, + "month": 5, + "day": null + }, + "end": { + "year": 2020, + "month": 8, + "day": null + }, + "company_name": "TELEO Capital", + "company_username": "teleo-capital", + "company_url": null, + "company_industry": "Venture Capital & Private Equity", + "company_staff_count_range": "11 - 50", + "title": "Private Equity Intern", + "location": "Los Angeles, CA", + "description": "Private equity firm targeting opportunities in the software & technology, healthcare IT, and industrial sectors", + "employment_type": "Internship" + }, + { + "start": { + "year": 2019, + "month": 8, + "day": null + }, + "end": { + "year": 2020, + "month": 1, + "day": null + }, + "company_name": "Business Technology Group", + "company_username": "business-tech-group", + "company_url": null, + "company_industry": "Management Consulting", + "company_staff_count_range": "11 - 50", + "title": "VP Operations", + "location": "Los Angeles, CA", + "description": "", + "employment_type": "" + }, + { + "start": { + "year": 2019, + "month": 2, + "day": null + }, + "end": { + "year": 2019, + "month": 8, + "day": null + }, + "company_name": "USC Association of Innovative Marketing (AIM) Consulting", + "company_username": "usc-aim-consulting", + "company_url": null, + "company_industry": "Marketing & Advertising", + "company_staff_count_range": "11 - 50", + "title": "Consultant", + "location": "Los Angeles, CA", + "description": "", + "employment_type": "" + } + ], + "skills": [ + { + "name": "Leadership" + }, + { + "name": "Microsoft Office" + }, + { + "name": "Teamwork" + } + ], + "courses": [ + { + "name": "Business Finance", + "number": "" + }, + { + "name": "Business Statistics", + "number": "" + }, + { + "name": "Financial Accounting", + "number": "" + }, + { + "name": "Financial Analysis and Valuation", + "number": "" + }, + { + "name": "Macroeconomics", + "number": "" + }, + { + "name": "Managerial Accounting", + "number": "" + }, + { + "name": "Marketing", + "number": "" + }, + { + "name": "Microeconomics", + "number": "" + }, + { + "name": "Operations Management", + "number": "" + } + ], + "certifications": null +} \ No newline at end of file diff --git a/tests/test_data/sample_profiles/eric_armagost.json b/tests/test_data/sample_profiles/eric_armagost.json new file mode 100644 index 0000000000000000000000000000000000000000..6878c2b8fa19e732833e1bfbde5a83ba9594e485 --- /dev/null +++ b/tests/test_data/sample_profiles/eric_armagost.json @@ -0,0 +1,261 @@ +{ + "first_name": "Eric", + "last_name": "Armagost", + "is_open_to_work": false, + "is_hiring": false, + "profile_picture": "https://media.licdn.com/dms/image/v2/C5603AQGiv3LeddNxgQ/profile-displayphoto-shrink_800_800/profile-displayphoto-shrink_800_800/0/1656093036751?e=1731542400&v=beta&t=sCbIQ-lAwATDVl_dEBBk-5Y35Z62aqJGL4utGStw26Y", + "summary": "", + "headline": "Investor at Accel-KKR", + "geo": { + "country": "United States", + "city": "San Francisco, California", + "full": "San Francisco, California, United States" + }, + "languages": [ + { + "name": "German", + "proficiency": "LIMITED_WORKING" + } + ], + "educations": [ + { + "start": { + "year": null, + "month": null, + "day": null + }, + "end": { + "year": null, + "month": null, + "day": null + }, + "field_of_study": "Business Economics", + "degree": "Bachelor of Arts (B.A.)", + "grade": "", + "school_name": "Brown University", + "description": "", + "activities": "" + } + ], + "positions": [ + { + "start": { + "year": 2017, + "month": 5, + "day": null + }, + "end": { + "year": null, + "month": null, + "day": null + }, + "company_name": "Accel-KKR", + "company_username": "accel-kkr", + "company_url": null, + "company_industry": "Venture Capital & Private Equity", + "company_staff_count_range": "51 - 200", + "title": "Investment Professional", + "location": "Menlo Park, California", + "description": "Founded in 2000, Accel-KKR is a leading technology-focused private equity firm dedicated exclusively to investing in software and technology-enabled services companies. \n\nOur typical transactions include: \n• Acquisitions and recapitalizations of founder-owned or closely-held private companies \n• Buyouts of divisions, subsidiaries and business units from public companies \n• Take-private transactions of small public companies\n• Structured minority equity and debt investments\n\nwww.accel-kkr.com", + "employment_type": "" + }, + { + "start": { + "year": 2015, + "month": 6, + "day": null + }, + "end": { + "year": 2017, + "month": 5, + "day": null + }, + "company_name": "William Blair & Company", + "company_username": "william-blair-company", + "company_url": null, + "company_industry": "Financial Services", + "company_staff_count_range": "1001 - 5000", + "title": "Investment Banking", + "location": "Chicago", + "description": "", + "employment_type": "" + }, + { + "start": { + "year": 2014, + "month": 6, + "day": null + }, + "end": { + "year": 2015, + "month": 5, + "day": null + }, + "company_name": "Fidelity Investments", + "company_username": "fidelity-investments", + "company_url": null, + "company_industry": "Financial Services", + "company_staff_count_range": "10001 - 0", + "title": "FFAS Corporate Finance", + "location": "Smithfield, RI", + "description": "", + "employment_type": "" + }, + { + "start": { + "year": 2013, + "month": 6, + "day": null + }, + "end": { + "year": 2014, + "month": 5, + "day": null + }, + "company_name": "Fidelity Investments", + "company_username": "fidelity-investments", + "company_url": null, + "company_industry": "Financial Services", + "company_staff_count_range": "10001 - 0", + "title": "PI Corporate Finance", + "location": "Smithfield, RI", + "description": "", + "employment_type": "" + } + ], + "full_positions": [ + { + "start": { + "year": 2017, + "month": 5, + "day": null + }, + "end": { + "year": null, + "month": null, + "day": null + }, + "company_name": "Accel-KKR", + "company_username": "accel-kkr", + "company_url": null, + "company_industry": "Venture Capital & Private Equity", + "company_staff_count_range": "51 - 200", + "title": "Investment Professional", + "location": "Menlo Park, California", + "description": "Founded in 2000, Accel-KKR is a leading technology-focused private equity firm dedicated exclusively to investing in software and technology-enabled services companies. \n\nOur typical transactions include: \n• Acquisitions and recapitalizations of founder-owned or closely-held private companies \n• Buyouts of divisions, subsidiaries and business units from public companies \n• Take-private transactions of small public companies\n• Structured minority equity and debt investments\n\nwww.accel-kkr.com", + "employment_type": "" + }, + { + "start": { + "year": 2015, + "month": 6, + "day": null + }, + "end": { + "year": 2017, + "month": 5, + "day": null + }, + "company_name": "William Blair & Company", + "company_username": "william-blair-company", + "company_url": null, + "company_industry": "Financial Services", + "company_staff_count_range": "1001 - 5000", + "title": "Investment Banking", + "location": "Chicago", + "description": "", + "employment_type": "" + }, + { + "start": { + "year": 2014, + "month": 6, + "day": null + }, + "end": { + "year": 2015, + "month": 5, + "day": null + }, + "company_name": "Fidelity Investments", + "company_username": "fidelity-investments", + "company_url": null, + "company_industry": "Financial Services", + "company_staff_count_range": "10001 - 0", + "title": "FFAS Corporate Finance", + "location": "Smithfield, RI", + "description": "", + "employment_type": "" + }, + { + "start": { + "year": 2013, + "month": 6, + "day": null + }, + "end": { + "year": 2014, + "month": 5, + "day": null + }, + "company_name": "Fidelity Investments", + "company_username": "fidelity-investments", + "company_url": null, + "company_industry": "Financial Services", + "company_staff_count_range": "10001 - 0", + "title": "PI Corporate Finance", + "location": "Smithfield, RI", + "description": "", + "employment_type": "" + } + ], + "skills": [ + { + "name": "Microsoft Office" + }, + { + "name": "Microsoft Excel" + }, + { + "name": "Microsoft Word" + }, + { + "name": "Customer Service" + }, + { + "name": "PowerPoint" + }, + { + "name": "English" + }, + { + "name": "Windows" + }, + { + "name": "Research" + }, + { + "name": "Outlook" + }, + { + "name": "Teaching" + }, + { + "name": "Photoshop" + }, + { + "name": "Public Speaking" + }, + { + "name": "HTML" + }, + { + "name": "Strategic Planning" + }, + { + "name": "Budgets" + } + ], + "courses": null, + "certifications": null +} \ No newline at end of file diff --git a/tests/test_data/sample_profiles/hansae_catlett.json b/tests/test_data/sample_profiles/hansae_catlett.json new file mode 100644 index 0000000000000000000000000000000000000000..ef429b799e8eb3b92c2d3f491dd17b13f73a89bc --- /dev/null +++ b/tests/test_data/sample_profiles/hansae_catlett.json @@ -0,0 +1,565 @@ +{ + "first_name": "Hansae", + "last_name": "Catlett", + "is_open_to_work": false, + "is_hiring": false, + "profile_picture": "https://media.licdn.com/dms/image/v2/D5603AQEVfJQVTKPvYw/profile-displayphoto-shrink_800_800/profile-displayphoto-shrink_800_800/0/1710971553153?e=1731542400&v=beta&t=IigcCEXSLIAg6PkoARvbzNXarj2O2n8BbSu-wrS8vkQ", + "summary": "", + "headline": "Partner at HOF Capital | Co-founder & GP at The MBA Fund", + "geo": { + "country": "United States", + "city": "New York, New York", + "full": "New York, New York, United States" + }, + "languages": null, + "educations": [ + { + "start": { + "year": 2016, + "month": null, + "day": null + }, + "end": { + "year": 2019, + "month": null, + "day": null + }, + "field_of_study": "", + "degree": "Master of Business Administration (M.B.A.)", + "grade": "", + "school_name": "Stanford University Graduate School of Business", + "description": "", + "activities": "Ernest C. Arbuckle Award Finalist; Miller Social Change Leadership Award Winner; Arbuckle Leadership Fellow; Venture Capital Club; GSB Impact Fund; Co-President Social Innovation Club; Co-President Government & Politics Club; LOWkeynote (main stage featured speaker); TALK Coach; GSB Show" + }, + { + "start": { + "year": 2016, + "month": null, + "day": null + }, + "end": { + "year": 2019, + "month": null, + "day": null + }, + "field_of_study": "", + "degree": "Master of Public Policy (M.P.P.)", + "grade": "", + "school_name": "Stanford University", + "description": "Led CalFresh/SNAP (food stamps) policy & impact analysis with California State Senator", + "activities": "" + }, + { + "start": { + "year": 2007, + "month": null, + "day": null + }, + "end": { + "year": 2011, + "month": null, + "day": null + }, + "field_of_study": "Biomedical Engineering, Philosophy", + "degree": "Bachelor of Arts", + "grade": "", + "school_name": "Harvard University", + "description": "Graduated with Honors", + "activities": "Club Basketball, College Bound Mentoring, Veritas Financial Group, Rugby, Crew" + }, + { + "start": { + "year": null, + "month": null, + "day": null + }, + "end": { + "year": null, + "month": null, + "day": null + }, + "field_of_study": "Engineering, Philosophy, Finance", + "degree": "Study Abroad", + "grade": "", + "school_name": "University of New South Wales", + "description": "", + "activities": "Premier League Basketball Team" + } + ], + "positions": [ + { + "start": { + "year": 2024, + "month": 3, + "day": null + }, + "end": { + "year": null, + "month": null, + "day": null + }, + "company_name": "HOF Capital", + "company_username": "hof-capital", + "company_url": null, + "company_industry": "Venture Capital & Private Equity", + "company_staff_count_range": "11 - 50", + "title": "Partner", + "location": "New York City Metropolitan Area", + "description": "", + "employment_type": "" + }, + { + "start": { + "year": 2018, + "month": null, + "day": null + }, + "end": { + "year": null, + "month": null, + "day": null + }, + "company_name": "The MBA Fund", + "company_username": "thembafund", + "company_url": null, + "company_industry": "Venture Capital & Private Equity", + "company_staff_count_range": "11 - 50", + "title": "Co-Founder, General Partner", + "location": "San Francisco Bay Area", + "description": "The MBA Fund is a venture capital firm that helps founders from the top startup-producing universities create legendary companies. We most frequently back student, alumni and dropout founders from Harvard, Stanford, and Wharton (expanding presence nationally!). \n\nWe’re a community of investors and operators who aren’t afraid to take the riskiest leaps with founders who are just getting started. Our backers include top-tier VC firms, repeat founders, experienced execs, and super angels with ties to the communities where we invest. This network is ready and willing to help founders in our portfolio with financing, hiring, customer growth and more.\n\nSelect investments include:\n* Jeeves ($2B)\n* Dandy ($1B)\n* TRM Labs ($600M+)\n* Hightouch ($450M+)\n* Luxury Presence ($200M+)\n* FlutterFlow ($150M+)\n* Legacy ($150M+)\n* Seso ($150M+)\n* Peachy ($100M+)", + "employment_type": "" + }, + { + "start": { + "year": 2019, + "month": 7, + "day": null + }, + "end": { + "year": 2024, + "month": 2, + "day": null + }, + "company_name": "Bessemer Venture Partners", + "company_username": "bessemer-venture-partners", + "company_url": null, + "company_industry": "Venture Capital & Private Equity", + "company_staff_count_range": "11 - 50", + "title": "Vice President", + "location": "New York City Metropolitan Area", + "description": "", + "employment_type": "Full-time" + }, + { + "start": { + "year": 2023, + "month": null, + "day": null + }, + "end": { + "year": 2024, + "month": null, + "day": null + }, + "company_name": "Rillavoice", + "company_username": "rilla-co", + "company_url": null, + "company_industry": "Computer Software", + "company_staff_count_range": "11 - 50", + "title": "Board Observer", + "location": "New York City Metropolitan Area", + "description": "", + "employment_type": "" + }, + { + "start": { + "year": 2022, + "month": null, + "day": null + }, + "end": { + "year": 2024, + "month": null, + "day": null + }, + "company_name": "Archy", + "company_username": "archydental", + "company_url": null, + "company_industry": "Computer Software", + "company_staff_count_range": "11 - 50", + "title": "Investor", + "location": "San Francisco Bay Area", + "description": "", + "employment_type": "" + }, + { + "start": { + "year": 2021, + "month": null, + "day": null + }, + "end": { + "year": 2024, + "month": null, + "day": null + }, + "company_name": "MaintainX", + "company_username": "getmaintainx", + "company_url": null, + "company_industry": "Computer Software", + "company_staff_count_range": "201 - 500", + "title": "Board Observer", + "location": "San Francisco Bay Area", + "description": "", + "employment_type": "" + }, + { + "start": { + "year": 2021, + "month": null, + "day": null + }, + "end": { + "year": 2024, + "month": null, + "day": null + }, + "company_name": "Spot AI", + "company_username": "spot-ai", + "company_url": null, + "company_industry": "Computer Software", + "company_staff_count_range": "51 - 200", + "title": "Investor", + "location": "San Francisco Bay Area", + "description": "", + "employment_type": "" + }, + { + "start": { + "year": 2021, + "month": null, + "day": null + }, + "end": { + "year": 2024, + "month": null, + "day": null + }, + "company_name": "VendorPM", + "company_username": "vendorpm", + "company_url": null, + "company_industry": "Computer Software", + "company_staff_count_range": "11 - 50", + "title": "Board Observer", + "location": "Toronto, Ontario, Canada", + "description": "", + "employment_type": "" + }, + { + "start": { + "year": 2021, + "month": null, + "day": null + }, + "end": { + "year": 2024, + "month": null, + "day": null + }, + "company_name": "Luxury Presence", + "company_username": "luxurypresence", + "company_url": null, + "company_industry": "Computer Software", + "company_staff_count_range": "501 - 1000", + "title": "Board Director", + "location": "Los Angeles Metropolitan Area", + "description": "", + "employment_type": "" + }, + { + "start": { + "year": 2021, + "month": null, + "day": null + }, + "end": { + "year": 2024, + "month": null, + "day": null + }, + "company_name": "ServiceTitan", + "company_username": "servicetitan", + "company_url": null, + "company_industry": "Computer Software", + "company_staff_count_range": "1001 - 5000", + "title": "Investor", + "location": "Los Angeles Metropolitan Area", + "description": "", + "employment_type": "" + } + ], + "full_positions": [ + { + "start": { + "year": 2024, + "month": 3, + "day": null + }, + "end": { + "year": null, + "month": null, + "day": null + }, + "company_name": "HOF Capital", + "company_username": "hof-capital", + "company_url": null, + "company_industry": "Venture Capital & Private Equity", + "company_staff_count_range": "11 - 50", + "title": "Partner", + "location": "New York City Metropolitan Area", + "description": "", + "employment_type": "" + }, + { + "start": { + "year": 2018, + "month": null, + "day": null + }, + "end": { + "year": null, + "month": null, + "day": null + }, + "company_name": "The MBA Fund", + "company_username": "thembafund", + "company_url": null, + "company_industry": "Venture Capital & Private Equity", + "company_staff_count_range": "11 - 50", + "title": "Co-Founder, General Partner", + "location": "San Francisco Bay Area", + "description": "The MBA Fund is a venture capital firm that helps founders from the top startup-producing universities create legendary companies. We most frequently back student, alumni and dropout founders from Harvard, Stanford, and Wharton (expanding presence nationally!). \n\nWe’re a community of investors and operators who aren’t afraid to take the riskiest leaps with founders who are just getting started. Our backers include top-tier VC firms, repeat founders, experienced execs, and super angels with ties to the communities where we invest. This network is ready and willing to help founders in our portfolio with financing, hiring, customer growth and more.\n\nSelect investments include:\n* Jeeves ($2B)\n* Dandy ($1B)\n* TRM Labs ($600M+)\n* Hightouch ($450M+)\n* Luxury Presence ($200M+)\n* FlutterFlow ($150M+)\n* Legacy ($150M+)\n* Seso ($150M+)\n* Peachy ($100M+)", + "employment_type": "" + }, + { + "start": { + "year": 2019, + "month": 7, + "day": null + }, + "end": { + "year": 2024, + "month": 2, + "day": null + }, + "company_name": "Bessemer Venture Partners", + "company_username": "bessemer-venture-partners", + "company_url": null, + "company_industry": "Venture Capital & Private Equity", + "company_staff_count_range": "11 - 50", + "title": "Vice President", + "location": "New York City Metropolitan Area", + "description": "", + "employment_type": "Full-time" + }, + { + "start": { + "year": 2023, + "month": null, + "day": null + }, + "end": { + "year": 2024, + "month": null, + "day": null + }, + "company_name": "Rillavoice", + "company_username": "rilla-co", + "company_url": null, + "company_industry": "Computer Software", + "company_staff_count_range": "11 - 50", + "title": "Board Observer", + "location": "New York City Metropolitan Area", + "description": "", + "employment_type": "" + }, + { + "start": { + "year": 2022, + "month": null, + "day": null + }, + "end": { + "year": 2024, + "month": null, + "day": null + }, + "company_name": "Archy", + "company_username": "archydental", + "company_url": null, + "company_industry": "Computer Software", + "company_staff_count_range": "11 - 50", + "title": "Investor", + "location": "San Francisco Bay Area", + "description": "", + "employment_type": "" + }, + { + "start": { + "year": 2021, + "month": null, + "day": null + }, + "end": { + "year": 2024, + "month": null, + "day": null + }, + "company_name": "MaintainX", + "company_username": "getmaintainx", + "company_url": null, + "company_industry": "Computer Software", + "company_staff_count_range": "201 - 500", + "title": "Board Observer", + "location": "San Francisco Bay Area", + "description": "", + "employment_type": "" + }, + { + "start": { + "year": 2021, + "month": null, + "day": null + }, + "end": { + "year": 2024, + "month": null, + "day": null + }, + "company_name": "Spot AI", + "company_username": "spot-ai", + "company_url": null, + "company_industry": "Computer Software", + "company_staff_count_range": "51 - 200", + "title": "Investor", + "location": "San Francisco Bay Area", + "description": "", + "employment_type": "" + }, + { + "start": { + "year": 2021, + "month": null, + "day": null + }, + "end": { + "year": 2024, + "month": null, + "day": null + }, + "company_name": "VendorPM", + "company_username": "vendorpm", + "company_url": null, + "company_industry": "Computer Software", + "company_staff_count_range": "11 - 50", + "title": "Board Observer", + "location": "Toronto, Ontario, Canada", + "description": "", + "employment_type": "" + }, + { + "start": { + "year": 2021, + "month": null, + "day": null + }, + "end": { + "year": 2024, + "month": null, + "day": null + }, + "company_name": "Luxury Presence", + "company_username": "luxurypresence", + "company_url": null, + "company_industry": "Computer Software", + "company_staff_count_range": "501 - 1000", + "title": "Board Director", + "location": "Los Angeles Metropolitan Area", + "description": "", + "employment_type": "" + }, + { + "start": { + "year": 2021, + "month": null, + "day": null + }, + "end": { + "year": 2024, + "month": null, + "day": null + }, + "company_name": "ServiceTitan", + "company_username": "servicetitan", + "company_url": null, + "company_industry": "Computer Software", + "company_staff_count_range": "1001 - 5000", + "title": "Investor", + "location": "Los Angeles Metropolitan Area", + "description": "", + "employment_type": "" + } + ], + "skills": [ + { + "name": "Project Planning" + }, + { + "name": "Research" + }, + { + "name": "Project Exec" + }, + { + "name": "Strategic Planning" + }, + { + "name": "Market Research" + }, + { + "name": "Nonprofits" + }, + { + "name": "Leadership" + }, + { + "name": "Strategy" + }, + { + "name": "Entrepreneurship" + }, + { + "name": "Economics" + }, + { + "name": "Public Speaking" + }, + { + "name": "Data Analysis" + }, + { + "name": "Fundraising" + }, + { + "name": "Venture Capital" + }, + { + "name": "Spanish" + }, + { + "name": "Financial Modeling" + } + ], + "courses": null, + "certifications": null +} \ No newline at end of file diff --git a/tests/test_data/sample_profiles/jake_kugler.json b/tests/test_data/sample_profiles/jake_kugler.json new file mode 100644 index 0000000000000000000000000000000000000000..53c971a79182141e2a78373344aa50ea7bca86af --- /dev/null +++ b/tests/test_data/sample_profiles/jake_kugler.json @@ -0,0 +1,270 @@ +{ + "first_name": "Jake", + "last_name": "Kugler", + "is_open_to_work": false, + "is_hiring": false, + "profile_picture": "https://media.licdn.com/dms/image/v2/C5103AQFSyxD4FYivpw/profile-displayphoto-shrink_800_800/profile-displayphoto-shrink_800_800/0/1517033032014?e=1731542400&v=beta&t=wrLJPExyTUe2YunjMnSaXftEHnE0SB_ArtYqBzlBVEo", + "summary": "", + "headline": "MBA Candidate at Harvard Business School", + "geo": { + "country": "United States", + "city": "Cambridge, Massachusetts", + "full": "Cambridge, Massachusetts, United States" + }, + "languages": null, + "educations": [ + { + "start": { + "year": null, + "month": null, + "day": null + }, + "end": { + "year": null, + "month": null, + "day": null + }, + "field_of_study": "", + "degree": "Master of Business Administration - MBA", + "grade": "", + "school_name": "Harvard Business School", + "description": "", + "activities": "" + }, + { + "start": { + "year": null, + "month": null, + "day": null + }, + "end": { + "year": null, + "month": null, + "day": null + }, + "field_of_study": "Finance", + "degree": "BSBA", + "grade": "Magna Cum Laude", + "school_name": "Northeastern University", + "description": "", + "activities": "" + } + ], + "positions": [ + { + "start": { + "year": 2022, + "month": 8, + "day": null + }, + "end": { + "year": null, + "month": null, + "day": null + }, + "company_name": "Harvard Business School", + "company_username": "harvard-business-school", + "company_url": null, + "company_industry": "Higher Education", + "company_staff_count_range": "1001 - 5000", + "title": "MBA Candidate", + "location": "Boston, Massachusetts, United States", + "description": "", + "employment_type": "" + }, + { + "start": { + "year": 2022, + "month": 1, + "day": null + }, + "end": { + "year": 2022, + "month": 7, + "day": null + }, + "company_name": "Declaration Partners", + "company_username": "declaration-partners", + "company_url": null, + "company_industry": "Financial Services", + "company_staff_count_range": "11 - 50", + "title": "Advisor - Growth Equity", + "location": "New York, United States", + "description": "BayPine's Sister Firm. Anchored by the family office of Carlyle Co-Founder and philanthropist David M. Rubenstein, Declaration is a private investment firm with approximately $2.5B in AUM.", + "employment_type": "Part-time" + }, + { + "start": { + "year": 2020, + "month": 9, + "day": null + }, + "end": { + "year": 2022, + "month": 7, + "day": null + }, + "company_name": "BayPine", + "company_username": "baypine", + "company_url": null, + "company_industry": "Financial Services", + "company_staff_count_range": "11 - 50", + "title": "Investment Professional", + "location": "New York, United States", + "description": "", + "employment_type": "" + }, + { + "start": { + "year": 2017, + "month": 7, + "day": null + }, + "end": { + "year": 2020, + "month": 8, + "day": null + }, + "company_name": "General Atlantic", + "company_username": "general-atlantic", + "company_url": null, + "company_industry": "Financial Services", + "company_staff_count_range": "201 - 500", + "title": "Investment Professional", + "location": "San Francisco Bay Area", + "description": "Technology Group", + "employment_type": "" + }, + { + "start": { + "year": 2015, + "month": 6, + "day": null + }, + "end": { + "year": 2017, + "month": 7, + "day": null + }, + "company_name": "Morgan Stanley", + "company_username": "morgan-stanley", + "company_url": null, + "company_industry": "Financial Services", + "company_staff_count_range": "10001 - 0", + "title": "Investment Banking", + "location": "Greater New York City Area", + "description": "", + "employment_type": "" + } + ], + "full_positions": [ + { + "start": { + "year": 2022, + "month": 8, + "day": null + }, + "end": { + "year": null, + "month": null, + "day": null + }, + "company_name": "Harvard Business School", + "company_username": "harvard-business-school", + "company_url": null, + "company_industry": "Higher Education", + "company_staff_count_range": "1001 - 5000", + "title": "MBA Candidate", + "location": "Boston, Massachusetts, United States", + "description": "", + "employment_type": "" + }, + { + "start": { + "year": 2022, + "month": 1, + "day": null + }, + "end": { + "year": 2022, + "month": 7, + "day": null + }, + "company_name": "Declaration Partners", + "company_username": "declaration-partners", + "company_url": null, + "company_industry": "Financial Services", + "company_staff_count_range": "11 - 50", + "title": "Advisor - Growth Equity", + "location": "New York, United States", + "description": "BayPine's Sister Firm. Anchored by the family office of Carlyle Co-Founder and philanthropist David M. Rubenstein, Declaration is a private investment firm with approximately $2.5B in AUM.", + "employment_type": "Part-time" + }, + { + "start": { + "year": 2020, + "month": 9, + "day": null + }, + "end": { + "year": 2022, + "month": 7, + "day": null + }, + "company_name": "BayPine", + "company_username": "baypine", + "company_url": null, + "company_industry": "Financial Services", + "company_staff_count_range": "11 - 50", + "title": "Investment Professional", + "location": "New York, United States", + "description": "", + "employment_type": "" + }, + { + "start": { + "year": 2017, + "month": 7, + "day": null + }, + "end": { + "year": 2020, + "month": 8, + "day": null + }, + "company_name": "General Atlantic", + "company_username": "general-atlantic", + "company_url": null, + "company_industry": "Financial Services", + "company_staff_count_range": "201 - 500", + "title": "Investment Professional", + "location": "San Francisco Bay Area", + "description": "Technology Group", + "employment_type": "" + }, + { + "start": { + "year": 2015, + "month": 6, + "day": null + }, + "end": { + "year": 2017, + "month": 7, + "day": null + }, + "company_name": "Morgan Stanley", + "company_username": "morgan-stanley", + "company_url": null, + "company_industry": "Financial Services", + "company_staff_count_range": "10001 - 0", + "title": "Investment Banking", + "location": "Greater New York City Area", + "description": "", + "employment_type": "" + } + ], + "skills": null, + "courses": null, + "certifications": null +} \ No newline at end of file diff --git a/tests/test_data/sample_profiles/jeffrey_bai.json b/tests/test_data/sample_profiles/jeffrey_bai.json new file mode 100644 index 0000000000000000000000000000000000000000..18870eb388478631ff2c3497e46983bbc84a7313 --- /dev/null +++ b/tests/test_data/sample_profiles/jeffrey_bai.json @@ -0,0 +1,297 @@ +{ + "first_name": "Jeffrey", + "last_name": "Bai", + "is_open_to_work": false, + "is_hiring": false, + "profile_picture": "", + "summary": "", + "headline": "Senior Associate at Rubicon Technology Partners", + "geo": { + "country": "United States", + "city": "Boulder, Colorado", + "full": "Boulder, Colorado, United States" + }, + "languages": [ + { + "name": "Chinese (Simplified)", + "proficiency": "NATIVE_OR_BILINGUAL" + }, + { + "name": "English", + "proficiency": "NATIVE_OR_BILINGUAL" + }, + { + "name": "German", + "proficiency": "LIMITED_WORKING" + }, + { + "name": "Spanish", + "proficiency": "LIMITED_WORKING" + } + ], + "educations": [ + { + "start": { + "year": 2015, + "month": null, + "day": null + }, + "end": { + "year": 2019, + "month": null, + "day": null + }, + "field_of_study": "Finance and Management ", + "degree": "Bachelor of Science (BS) in Economics", + "grade": "", + "school_name": "University of Pennsylvania - The Wharton School", + "description": "", + "activities": "" + } + ], + "positions": [ + { + "start": { + "year": 2023, + "month": 8, + "day": null + }, + "end": { + "year": null, + "month": null, + "day": null + }, + "company_name": "Rubicon Technology Partners", + "company_username": "rubicon-technology-partners", + "company_url": null, + "company_industry": "Venture Capital & Private Equity", + "company_staff_count_range": "11 - 50", + "title": "Senior Associate", + "location": "Boulder, Colorado, United States", + "description": "Private Equity – Enterprise Software", + "employment_type": "" + }, + { + "start": { + "year": 2021, + "month": 8, + "day": null + }, + "end": { + "year": 2023, + "month": 7, + "day": null + }, + "company_name": "Rubicon Technology Partners", + "company_username": "rubicon-technology-partners", + "company_url": null, + "company_industry": "Venture Capital & Private Equity", + "company_staff_count_range": "11 - 50", + "title": "Associate", + "location": "Boulder, Colorado", + "description": "Private Equity – Enterprise Software", + "employment_type": "" + }, + { + "start": { + "year": 2019, + "month": 7, + "day": null + }, + "end": { + "year": 2021, + "month": 7, + "day": null + }, + "company_name": "DC Advisory", + "company_username": "dcadvisory", + "company_url": null, + "company_industry": "Investment Banking", + "company_staff_count_range": "501 - 1000", + "title": "Investment Banking Analyst", + "location": "Washington D.C. Metro Area", + "description": "Technology and Software M&A", + "employment_type": "" + }, + { + "start": { + "year": 2018, + "month": 6, + "day": null + }, + "end": { + "year": 2018, + "month": 8, + "day": null + }, + "company_name": "Payoneer", + "company_username": "payoneer", + "company_url": null, + "company_industry": "Financial Services", + "company_staff_count_range": "1001 - 5000", + "title": "Corporate Development Summer Analyst", + "location": "Hong Kong", + "description": "", + "employment_type": "" + }, + { + "start": { + "year": 2017, + "month": 6, + "day": null + }, + "end": { + "year": 2017, + "month": 8, + "day": null + }, + "company_name": "XLP Capital", + "company_username": "xlp-capital", + "company_url": null, + "company_industry": "Financial Services", + "company_staff_count_range": "2 - 10", + "title": "Summer Analyst", + "location": "Greater New York City Area", + "description": "Technology-focused; short-bias strategy", + "employment_type": "" + } + ], + "full_positions": [ + { + "start": { + "year": 2023, + "month": 8, + "day": null + }, + "end": { + "year": null, + "month": null, + "day": null + }, + "company_name": "Rubicon Technology Partners", + "company_username": "rubicon-technology-partners", + "company_url": null, + "company_industry": "Venture Capital & Private Equity", + "company_staff_count_range": "11 - 50", + "title": "Senior Associate", + "location": "Boulder, Colorado, United States", + "description": "Private Equity – Enterprise Software", + "employment_type": "" + }, + { + "start": { + "year": 2021, + "month": 8, + "day": null + }, + "end": { + "year": 2023, + "month": 7, + "day": null + }, + "company_name": "Rubicon Technology Partners", + "company_username": "rubicon-technology-partners", + "company_url": null, + "company_industry": "Venture Capital & Private Equity", + "company_staff_count_range": "11 - 50", + "title": "Associate", + "location": "Boulder, Colorado", + "description": "Private Equity – Enterprise Software", + "employment_type": "" + }, + { + "start": { + "year": 2019, + "month": 7, + "day": null + }, + "end": { + "year": 2021, + "month": 7, + "day": null + }, + "company_name": "DC Advisory", + "company_username": "dcadvisory", + "company_url": null, + "company_industry": "Investment Banking", + "company_staff_count_range": "501 - 1000", + "title": "Investment Banking Analyst", + "location": "Washington D.C. Metro Area", + "description": "Technology and Software M&A", + "employment_type": "" + }, + { + "start": { + "year": 2018, + "month": 6, + "day": null + }, + "end": { + "year": 2018, + "month": 8, + "day": null + }, + "company_name": "Payoneer", + "company_username": "payoneer", + "company_url": null, + "company_industry": "Financial Services", + "company_staff_count_range": "1001 - 5000", + "title": "Corporate Development Summer Analyst", + "location": "Hong Kong", + "description": "", + "employment_type": "" + }, + { + "start": { + "year": 2017, + "month": 6, + "day": null + }, + "end": { + "year": 2017, + "month": 8, + "day": null + }, + "company_name": "XLP Capital", + "company_username": "xlp-capital", + "company_url": null, + "company_industry": "Financial Services", + "company_staff_count_range": "2 - 10", + "title": "Summer Analyst", + "location": "Greater New York City Area", + "description": "Technology-focused; short-bias strategy", + "employment_type": "" + } + ], + "skills": [ + { + "name": "Management" + }, + { + "name": "Sales" + }, + { + "name": "Research" + }, + { + "name": "Business Development" + }, + { + "name": "Start-ups" + }, + { + "name": "Entrepreneurship" + }, + { + "name": "Data Analysis" + }, + { + "name": "Teamwork" + }, + { + "name": "Public Speaking" + } + ], + "courses": null, + "certifications": null +} \ No newline at end of file diff --git a/tests/test_data/sample_profiles/lauren_hipple.json b/tests/test_data/sample_profiles/lauren_hipple.json new file mode 100644 index 0000000000000000000000000000000000000000..6a2f334ebcdbb10025d54dc00bafd76ab2978020 --- /dev/null +++ b/tests/test_data/sample_profiles/lauren_hipple.json @@ -0,0 +1,411 @@ +{ + "first_name": "Lauren", + "last_name": "Hipple", + "is_open_to_work": false, + "is_hiring": false, + "profile_picture": "", + "summary": "Dedicated and entrepreneurial investment professional with experience across a diverse set of industries and assets classes. Experience includes control buyouts, structured credit products, minority equity investments, and bolt-on acquisitions. Proven capability in effectively sourcing, performing diligence, executing transactions, and managing post-transaction investments / strategic initiatives.\n\nPlease reach out to me if you have a relevant investment opportunity that you would like to discuss.", + "headline": "Long Arc Capital", + "geo": { + "country": "United States", + "city": "New York, New York", + "full": "New York, New York, United States" + }, + "languages": null, + "educations": [ + { + "start": { + "year": null, + "month": null, + "day": null + }, + "end": { + "year": null, + "month": null, + "day": null + }, + "field_of_study": "Mathematics and Statistics", + "degree": "", + "grade": "", + "school_name": "Rice University", + "description": "", + "activities": "" + }, + { + "start": { + "year": null, + "month": null, + "day": null + }, + "end": { + "year": null, + "month": null, + "day": null + }, + "field_of_study": "", + "degree": "", + "grade": "", + "school_name": "Laurel School", + "description": "", + "activities": "" + } + ], + "positions": [ + { + "start": { + "year": 2023, + "month": 3, + "day": null + }, + "end": { + "year": null, + "month": null, + "day": null + }, + "company_name": "Long Arc Capital", + "company_username": "long-arc-capital", + "company_url": null, + "company_industry": "Venture Capital & Private Equity", + "company_staff_count_range": "11 - 50", + "title": "Private Equity Vice President", + "location": "New York, United States", + "description": "~$500 million AUM private equity firm specializing in providing growth capital to companies in the Financial Services, Business Services, and TMT sectors undergoing technology-driven transformations", + "employment_type": "Full-time" + }, + { + "start": { + "year": 2022, + "month": 7, + "day": null + }, + "end": { + "year": 2022, + "month": 12, + "day": null + }, + "company_name": "Forum Brands", + "company_username": "forumbrands", + "company_url": null, + "company_industry": "Retail", + "company_staff_count_range": "51 - 200", + "title": "M&A", + "location": "New York, New York, United States", + "description": "Co-Led M&A team at a series A e-commerce company focused on acquiring digitally native brands", + "employment_type": "Full-time" + }, + { + "start": { + "year": 2020, + "month": null, + "day": null + }, + "end": { + "year": 2022, + "month": null, + "day": null + }, + "company_name": "FocusGrowth Asset Management, LP.", + "company_username": "focusgrowth-asset-management-lp", + "company_url": null, + "company_industry": "Financial Services", + "company_staff_count_range": "2 - 10", + "title": "Vice President", + "location": "", + "description": "Private Credit and Special Situations Asset Manager", + "employment_type": "" + }, + { + "start": { + "year": 2017, + "month": null, + "day": null + }, + "end": { + "year": 2019, + "month": null, + "day": null + }, + "company_name": "Alinda Capital Partners LLC", + "company_username": "alinda-capital-partners-llc", + "company_url": null, + "company_industry": "Financial Services", + "company_staff_count_range": "11 - 50", + "title": "Private Equity Associate", + "location": "Greater New York City Area", + "description": "Private equity funds, with over $8Bn under management. Focused on transportation & logistics, telecommunications, and energy infrastructure.", + "employment_type": "Full-time" + }, + { + "start": { + "year": 2015, + "month": 7, + "day": null + }, + "end": { + "year": 2017, + "month": 6, + "day": null + }, + "company_name": "UBS", + "company_username": "ubs", + "company_url": null, + "company_industry": "Financial Services", + "company_staff_count_range": "10001 - 0", + "title": "Investment Banking Analyst", + "location": "New York, United States", + "description": "Energy M&A and Coverage", + "employment_type": "Full-time" + } + ], + "full_positions": [ + { + "start": { + "year": 2023, + "month": 3, + "day": null + }, + "end": { + "year": null, + "month": null, + "day": null + }, + "company_name": "Long Arc Capital", + "company_username": "long-arc-capital", + "company_url": null, + "company_industry": "Venture Capital & Private Equity", + "company_staff_count_range": "11 - 50", + "title": "Private Equity Vice President", + "location": "New York, United States", + "description": "~$500 million AUM private equity firm specializing in providing growth capital to companies in the Financial Services, Business Services, and TMT sectors undergoing technology-driven transformations", + "employment_type": "Full-time" + }, + { + "start": { + "year": 2022, + "month": 7, + "day": null + }, + "end": { + "year": 2022, + "month": 12, + "day": null + }, + "company_name": "Forum Brands", + "company_username": "forumbrands", + "company_url": null, + "company_industry": "Retail", + "company_staff_count_range": "51 - 200", + "title": "M&A", + "location": "New York, New York, United States", + "description": "Co-Led M&A team at a series A e-commerce company focused on acquiring digitally native brands", + "employment_type": "Full-time" + }, + { + "start": { + "year": 2020, + "month": null, + "day": null + }, + "end": { + "year": 2022, + "month": null, + "day": null + }, + "company_name": "FocusGrowth Asset Management, LP.", + "company_username": "focusgrowth-asset-management-lp", + "company_url": null, + "company_industry": "Financial Services", + "company_staff_count_range": "2 - 10", + "title": "Vice President", + "location": "", + "description": "Private Credit and Special Situations Asset Manager", + "employment_type": "" + }, + { + "start": { + "year": 2017, + "month": null, + "day": null + }, + "end": { + "year": 2019, + "month": null, + "day": null + }, + "company_name": "Alinda Capital Partners LLC", + "company_username": "alinda-capital-partners-llc", + "company_url": null, + "company_industry": "Financial Services", + "company_staff_count_range": "11 - 50", + "title": "Private Equity Associate", + "location": "Greater New York City Area", + "description": "Private equity funds, with over $8Bn under management. Focused on transportation & logistics, telecommunications, and energy infrastructure.", + "employment_type": "Full-time" + }, + { + "start": { + "year": 2015, + "month": 7, + "day": null + }, + "end": { + "year": 2017, + "month": 6, + "day": null + }, + "company_name": "UBS", + "company_username": "ubs", + "company_url": null, + "company_industry": "Financial Services", + "company_staff_count_range": "10001 - 0", + "title": "Investment Banking Analyst", + "location": "New York, United States", + "description": "Energy M&A and Coverage", + "employment_type": "Full-time" + } + ], + "skills": [ + { + "name": "Special Situations Investing" + }, + { + "name": "Private Credit" + }, + { + "name": "Transportation" + }, + { + "name": "Infrastructure" + }, + { + "name": "Energy Industry" + }, + { + "name": "B2B Software" + }, + { + "name": "Business-to-Business (B2B)" + }, + { + "name": "Relationship Building" + }, + { + "name": "Strategic Partnerships" + }, + { + "name": "Financial Literacy" + }, + { + "name": "Mergers & Acquisitions (M&A)" + }, + { + "name": "Bridging Gaps" + }, + { + "name": "Timelines" + }, + { + "name": "Confidentiality" + }, + { + "name": "Investor Relations" + }, + { + "name": "Problem Solving" + }, + { + "name": "Negotiation" + }, + { + "name": "Analytical Skills" + }, + { + "name": "Presentations" + }, + { + "name": "Strategic Initiatives" + }, + { + "name": "External Communications" + }, + { + "name": "Oral Communication" + }, + { + "name": "Insurance Industry" + }, + { + "name": "Corporate Finance" + }, + { + "name": "Financial Analysis" + }, + { + "name": "Business Strategy" + }, + { + "name": "Microsoft Office" + }, + { + "name": "Management" + }, + { + "name": "Business Requirements" + }, + { + "name": "Competitive Assessment" + }, + { + "name": "Financial Performance" + }, + { + "name": "Presentation Skills" + }, + { + "name": "Financial Forecasting" + }, + { + "name": "Corporate Strategy" + }, + { + "name": "Business Insights" + }, + { + "name": "Board of Directors" + } + ], + "courses": null, + "certifications": [ + { + "start": { + "year": 2015, + "month": 8, + "day": null + }, + "end": { + "year": null, + "month": null, + "day": null + }, + "name": "Series 79", + "authority": "Financial Industry Regulatory Authority (FINRA)", + "company": { + "name": null, + "universal_name": null, + "logo": null + }, + "time_period": { + "start": { + "year": null, + "month": null, + "day": null + }, + "end": { + "year": null, + "month": null, + "day": null + } + } + } + ] +} \ No newline at end of file diff --git a/tests/test_data/sample_profiles/nicholas_penske.json b/tests/test_data/sample_profiles/nicholas_penske.json new file mode 100644 index 0000000000000000000000000000000000000000..7a687411f0dba1b59360e968f29318864c27fc1a --- /dev/null +++ b/tests/test_data/sample_profiles/nicholas_penske.json @@ -0,0 +1,465 @@ +{ + "first_name": "Nicholas", + "last_name": "Penske", + "is_open_to_work": false, + "is_hiring": false, + "profile_picture": "https://media.licdn.com/dms/image/v2/D4E03AQGjJjhVrT2S5g/profile-displayphoto-shrink_800_800/profile-displayphoto-shrink_800_800/0/1720543826672?e=1731542400&v=beta&t=gIrnl3W-K6gXUXVaPm4SjSe0o_bfJQfBkJswmfZ7x98", + "summary": "", + "headline": "Investor at 8VC", + "geo": { + "country": "United States", + "city": "New York, New York", + "full": "New York, New York, United States" + }, + "languages": [ + { + "name": "Spanish", + "proficiency": "PROFESSIONAL_WORKING" + } + ], + "educations": [ + { + "start": { + "year": 2015, + "month": null, + "day": null + }, + "end": { + "year": 2019, + "month": null, + "day": null + }, + "field_of_study": "American Government and Politics (United States)", + "degree": "Bachelor of Arts - BA", + "grade": "", + "school_name": "Cornell University", + "description": "", + "activities": "" + }, + { + "start": { + "year": 2009, + "month": null, + "day": null + }, + "end": { + "year": 2015, + "month": null, + "day": null + }, + "field_of_study": "", + "degree": "", + "grade": "", + "school_name": "Harvard Westlake School", + "description": "", + "activities": "Student Ambassador, Varsity Lacrosse" + } + ], + "positions": [ + { + "start": { + "year": 2024, + "month": 4, + "day": null + }, + "end": { + "year": null, + "month": null, + "day": null + }, + "company_name": "8VC", + "company_username": "8vc", + "company_url": null, + "company_industry": "Venture Capital & Private Equity", + "company_staff_count_range": "11 - 50", + "title": "Investor", + "location": "New York City Metropolitan Area", + "description": "", + "employment_type": "Full-time" + }, + { + "start": { + "year": 2023, + "month": 9, + "day": null + }, + "end": { + "year": 2024, + "month": 4, + "day": null + }, + "company_name": "TRP Capital Partners", + "company_username": "trp-capital-partners", + "company_url": null, + "company_industry": "Financial Services", + "company_staff_count_range": "2 - 10", + "title": "Private Equity Associate", + "location": "New York, New York, United States", + "description": "", + "employment_type": "Full-time" + }, + { + "start": { + "year": 2021, + "month": 10, + "day": null + }, + "end": { + "year": 2023, + "month": 9, + "day": null + }, + "company_name": "TRP Capital Partners", + "company_username": "trp-capital-partners", + "company_url": null, + "company_industry": "Financial Services", + "company_staff_count_range": "2 - 10", + "title": "Private Equity Analyst", + "location": "Detroit, Michigan, United States", + "description": "", + "employment_type": "Full-time" + }, + { + "start": { + "year": 2020, + "month": null, + "day": null + }, + "end": { + "year": 2021, + "month": null, + "day": null + }, + "company_name": "", + "company_username": "", + "company_url": null, + "company_industry": "", + "company_staff_count_range": "", + "title": "Hotel Investments", + "location": "New York, New York, United States", + "description": "Hospitality start-up looking to acquire and reposition unbranded bed and breakfasts, hotels, and motels.", + "employment_type": "Self-employed" + }, + { + "start": { + "year": 2019, + "month": 7, + "day": null + }, + "end": { + "year": 2020, + "month": 11, + "day": null + }, + "company_name": "Hudson Pacific Properties", + "company_username": "hudson-pacific-properties-inc-", + "company_url": null, + "company_industry": "Real Estate", + "company_staff_count_range": "201 - 500", + "title": "Analyst", + "location": "Los Angeles, California, United States", + "description": "", + "employment_type": "Full-time" + }, + { + "start": { + "year": 2018, + "month": 6, + "day": null + }, + "end": { + "year": 2018, + "month": 8, + "day": null + }, + "company_name": "Ares Management, L.P.", + "company_username": "ares-management", + "company_url": null, + "company_industry": "Financial Services", + "company_staff_count_range": "1001 - 5000", + "title": "Summer Intern", + "location": "Greater Los Angeles Area", + "description": "", + "employment_type": "" + }, + { + "start": { + "year": 2017, + "month": 6, + "day": null + }, + "end": { + "year": 2017, + "month": 8, + "day": null + }, + "company_name": "Caruso Affiliated", + "company_username": "caruso", + "company_url": null, + "company_industry": "Real Estate", + "company_staff_count_range": "51 - 200", + "title": "Summer Associate, Operations", + "location": "Greater Los Angeles Area", + "description": "", + "employment_type": "" + }, + { + "start": { + "year": 2016, + "month": 7, + "day": null + }, + "end": { + "year": 2016, + "month": 8, + "day": null + }, + "company_name": "WME (William Morris Endeavor)", + "company_username": "william-morris-endeavor", + "company_url": null, + "company_industry": "Entertainment", + "company_staff_count_range": "5001 - 10000", + "title": "Summer Intern", + "location": "Greater Los Angeles Area", + "description": "", + "employment_type": "" + }, + { + "start": { + "year": 2013, + "month": 6, + "day": null + }, + "end": { + "year": 2015, + "month": 8, + "day": null + }, + "company_name": "Longo Toyota/Scion", + "company_username": "longo-toyota-scion", + "company_url": null, + "company_industry": "Automotive", + "company_staff_count_range": "501 - 1000", + "title": "Summer Intern", + "location": "Greater Los Angeles Area", + "description": "", + "employment_type": "" + } + ], + "full_positions": [ + { + "start": { + "year": 2024, + "month": 4, + "day": null + }, + "end": { + "year": null, + "month": null, + "day": null + }, + "company_name": "8VC", + "company_username": "8vc", + "company_url": null, + "company_industry": "Venture Capital & Private Equity", + "company_staff_count_range": "11 - 50", + "title": "Investor", + "location": "New York City Metropolitan Area", + "description": "", + "employment_type": "Full-time" + }, + { + "start": { + "year": 2023, + "month": 9, + "day": null + }, + "end": { + "year": 2024, + "month": 4, + "day": null + }, + "company_name": "TRP Capital Partners", + "company_username": "trp-capital-partners", + "company_url": null, + "company_industry": "Financial Services", + "company_staff_count_range": "2 - 10", + "title": "Private Equity Associate", + "location": "New York, New York, United States", + "description": "", + "employment_type": "Full-time" + }, + { + "start": { + "year": 2021, + "month": 10, + "day": null + }, + "end": { + "year": 2023, + "month": 9, + "day": null + }, + "company_name": "TRP Capital Partners", + "company_username": "trp-capital-partners", + "company_url": null, + "company_industry": "Financial Services", + "company_staff_count_range": "2 - 10", + "title": "Private Equity Analyst", + "location": "Detroit, Michigan, United States", + "description": "", + "employment_type": "Full-time" + }, + { + "start": { + "year": 2020, + "month": null, + "day": null + }, + "end": { + "year": 2021, + "month": null, + "day": null + }, + "company_name": "", + "company_username": "", + "company_url": null, + "company_industry": "", + "company_staff_count_range": "", + "title": "Hotel Investments", + "location": "New York, New York, United States", + "description": "Hospitality start-up looking to acquire and reposition unbranded bed and breakfasts, hotels, and motels.", + "employment_type": "Self-employed" + }, + { + "start": { + "year": 2019, + "month": 7, + "day": null + }, + "end": { + "year": 2020, + "month": 11, + "day": null + }, + "company_name": "Hudson Pacific Properties", + "company_username": "hudson-pacific-properties-inc-", + "company_url": null, + "company_industry": "Real Estate", + "company_staff_count_range": "201 - 500", + "title": "Analyst", + "location": "Los Angeles, California, United States", + "description": "", + "employment_type": "Full-time" + }, + { + "start": { + "year": 2018, + "month": 6, + "day": null + }, + "end": { + "year": 2018, + "month": 8, + "day": null + }, + "company_name": "Ares Management, L.P.", + "company_username": "ares-management", + "company_url": null, + "company_industry": "Financial Services", + "company_staff_count_range": "1001 - 5000", + "title": "Summer Intern", + "location": "Greater Los Angeles Area", + "description": "", + "employment_type": "" + }, + { + "start": { + "year": 2017, + "month": 6, + "day": null + }, + "end": { + "year": 2017, + "month": 8, + "day": null + }, + "company_name": "Caruso Affiliated", + "company_username": "caruso", + "company_url": null, + "company_industry": "Real Estate", + "company_staff_count_range": "51 - 200", + "title": "Summer Associate, Operations", + "location": "Greater Los Angeles Area", + "description": "", + "employment_type": "" + }, + { + "start": { + "year": 2016, + "month": 7, + "day": null + }, + "end": { + "year": 2016, + "month": 8, + "day": null + }, + "company_name": "WME (William Morris Endeavor)", + "company_username": "william-morris-endeavor", + "company_url": null, + "company_industry": "Entertainment", + "company_staff_count_range": "5001 - 10000", + "title": "Summer Intern", + "location": "Greater Los Angeles Area", + "description": "", + "employment_type": "" + }, + { + "start": { + "year": 2013, + "month": 6, + "day": null + }, + "end": { + "year": 2015, + "month": 8, + "day": null + }, + "company_name": "Longo Toyota/Scion", + "company_username": "longo-toyota-scion", + "company_url": null, + "company_industry": "Automotive", + "company_staff_count_range": "501 - 1000", + "title": "Summer Intern", + "location": "Greater Los Angeles Area", + "description": "", + "employment_type": "" + } + ], + "skills": [ + { + "name": "Microsoft Office" + }, + { + "name": "Customer Service" + }, + { + "name": "Hospitality Industry" + }, + { + "name": "Public Speaking" + }, + { + "name": "Microsoft Excel" + }, + { + "name": "Microsoft Word" + }, + { + "name": "Microsoft PowerPoint" + } + ], + "courses": null, + "certifications": null +} \ No newline at end of file diff --git a/tests/test_data/sample_profiles/peter_tagliaferri.json b/tests/test_data/sample_profiles/peter_tagliaferri.json new file mode 100644 index 0000000000000000000000000000000000000000..0aea54f92961bc3d2c92dc6e35ab8d3620380d29 --- /dev/null +++ b/tests/test_data/sample_profiles/peter_tagliaferri.json @@ -0,0 +1,316 @@ +{ + "first_name": "Peter", + "last_name": "Tagliaferri", + "is_open_to_work": false, + "is_hiring": false, + "profile_picture": "https://media.licdn.com/dms/image/v2/C4E03AQFlo8eRarRnSA/profile-displayphoto-shrink_800_800/profile-displayphoto-shrink_800_800/0/1570065735671?e=1731542400&v=beta&t=bU0FVhun7ur1CckwLMHHugFK4uzP5Ar3hUF_ewsDO-k", + "summary": "", + "headline": "Software Investor at Accel-KKR", + "geo": { + "country": "United States", + "city": "San Francisco Bay Area", + "full": "San Francisco Bay Area" + }, + "languages": null, + "educations": [ + { + "start": { + "year": null, + "month": null, + "day": null + }, + "end": { + "year": null, + "month": null, + "day": null + }, + "field_of_study": "Economics", + "degree": "Bachelor of Arts - BA", + "grade": "Second Honors, Dean's List", + "school_name": "Georgetown University", + "description": "", + "activities": "Men's Varsity Lacrosse" + }, + { + "start": { + "year": null, + "month": null, + "day": null + }, + "end": { + "year": null, + "month": null, + "day": null + }, + "field_of_study": "", + "degree": "High School Diploma", + "grade": "", + "school_name": "San Ramon Valley High School", + "description": "", + "activities": "" + } + ], + "positions": [ + { + "start": { + "year": 2024, + "month": 1, + "day": null + }, + "end": { + "year": null, + "month": null, + "day": null + }, + "company_name": "Accel-KKR", + "company_username": "accel-kkr", + "company_url": null, + "company_industry": "Venture Capital & Private Equity", + "company_staff_count_range": "51 - 200", + "title": "Senior Associate", + "location": "Menlo Park, California, United States", + "description": "", + "employment_type": "Full-time" + }, + { + "start": { + "year": 2020, + "month": 11, + "day": null + }, + "end": { + "year": 2024, + "month": 2, + "day": null + }, + "company_name": "Accel-KKR", + "company_username": "accel-kkr", + "company_url": null, + "company_industry": "Venture Capital & Private Equity", + "company_staff_count_range": "51 - 200", + "title": "Investment Professional", + "location": "Menlo Park, California, United States", + "description": "", + "employment_type": "Full-time" + }, + { + "start": { + "year": 2018, + "month": 7, + "day": null + }, + "end": { + "year": 2020, + "month": 10, + "day": null + }, + "company_name": "Stifel Financial Corp.", + "company_username": "stifel-financial-corp-", + "company_url": null, + "company_industry": "Financial Services", + "company_staff_count_range": "5001 - 10000", + "title": "Investment Banking Professional", + "location": "San Francisco Bay Area", + "description": "", + "employment_type": "" + }, + { + "start": { + "year": 2017, + "month": 6, + "day": null + }, + "end": { + "year": 2017, + "month": 8, + "day": null + }, + "company_name": "Accel-KKR", + "company_username": "accel-kkr", + "company_url": null, + "company_industry": "Venture Capital & Private Equity", + "company_staff_count_range": "51 - 200", + "title": "Private Equity", + "location": "Menlo Park, CA", + "description": "", + "employment_type": "" + }, + { + "start": { + "year": 2016, + "month": 6, + "day": null + }, + "end": { + "year": 2016, + "month": 12, + "day": null + }, + "company_name": "Securian Financial Group", + "company_username": "securian-financial", + "company_url": null, + "company_industry": "Financial Services", + "company_staff_count_range": "1001 - 5000", + "title": "Analyst", + "location": "Danville, California", + "description": "", + "employment_type": "" + } + ], + "full_positions": [ + { + "start": { + "year": 2024, + "month": 1, + "day": null + }, + "end": { + "year": null, + "month": null, + "day": null + }, + "company_name": "Accel-KKR", + "company_username": "accel-kkr", + "company_url": null, + "company_industry": "Venture Capital & Private Equity", + "company_staff_count_range": "51 - 200", + "title": "Senior Associate", + "location": "Menlo Park, California, United States", + "description": "", + "employment_type": "Full-time" + }, + { + "start": { + "year": 2020, + "month": 11, + "day": null + }, + "end": { + "year": 2024, + "month": 2, + "day": null + }, + "company_name": "Accel-KKR", + "company_username": "accel-kkr", + "company_url": null, + "company_industry": "Venture Capital & Private Equity", + "company_staff_count_range": "51 - 200", + "title": "Investment Professional", + "location": "Menlo Park, California, United States", + "description": "", + "employment_type": "Full-time" + }, + { + "start": { + "year": 2018, + "month": 7, + "day": null + }, + "end": { + "year": 2020, + "month": 10, + "day": null + }, + "company_name": "Stifel Financial Corp.", + "company_username": "stifel-financial-corp-", + "company_url": null, + "company_industry": "Financial Services", + "company_staff_count_range": "5001 - 10000", + "title": "Investment Banking Professional", + "location": "San Francisco Bay Area", + "description": "", + "employment_type": "" + }, + { + "start": { + "year": 2017, + "month": 6, + "day": null + }, + "end": { + "year": 2017, + "month": 8, + "day": null + }, + "company_name": "Accel-KKR", + "company_username": "accel-kkr", + "company_url": null, + "company_industry": "Venture Capital & Private Equity", + "company_staff_count_range": "51 - 200", + "title": "Private Equity", + "location": "Menlo Park, CA", + "description": "", + "employment_type": "" + }, + { + "start": { + "year": 2016, + "month": 6, + "day": null + }, + "end": { + "year": 2016, + "month": 12, + "day": null + }, + "company_name": "Securian Financial Group", + "company_username": "securian-financial", + "company_url": null, + "company_industry": "Financial Services", + "company_staff_count_range": "1001 - 5000", + "title": "Analyst", + "location": "Danville, California", + "description": "", + "employment_type": "" + } + ], + "skills": [ + { + "name": "Microsoft Excel" + }, + { + "name": "Leadership" + }, + { + "name": "PowerPoint" + }, + { + "name": "Research" + }, + { + "name": "Public Speaking" + }, + { + "name": "Project Management" + }, + { + "name": "Strategic Planning" + }, + { + "name": "Sales" + }, + { + "name": "Sports" + }, + { + "name": "Microsoft Office" + }, + { + "name": "Microsoft Word" + }, + { + "name": "Customer Service" + }, + { + "name": "Management" + }, + { + "name": "Microsoft PowerPoint" + }, + { + "name": "Teamwork" + } + ], + "courses": null, + "certifications": null +} \ No newline at end of file diff --git a/tests/test_data/sample_profiles/siddharth_saxena.json b/tests/test_data/sample_profiles/siddharth_saxena.json new file mode 100644 index 0000000000000000000000000000000000000000..be86a564046b2132466edb65c960e6734eedd4bb --- /dev/null +++ b/tests/test_data/sample_profiles/siddharth_saxena.json @@ -0,0 +1,625 @@ +{ + "first_name": "Siddharth", + "last_name": "Saxena", + "is_open_to_work": false, + "is_hiring": false, + "profile_picture": "https://media.licdn.com/dms/image/v2/D4D03AQHgeX32k__sWw/profile-displayphoto-shrink_800_800/profile-displayphoto-shrink_800_800/0/1713830613767?e=1731542400&v=beta&t=5T2Ps0uAVC3hiq4iTL4zmYbSpPn6zzZzEIFokzuSC0Q", + "summary": "", + "headline": "Investor @ Vedanta Capital", + "geo": { + "country": "United States", + "city": "New York City Metropolitan Area", + "full": "New York City Metropolitan Area" + }, + "languages": [ + { + "name": "English", + "proficiency": "NATIVE_OR_BILINGUAL" + }, + { + "name": "Japanese", + "proficiency": "LIMITED_WORKING" + } + ], + "educations": [ + { + "start": { + "year": 2011, + "month": null, + "day": null + }, + "end": { + "year": 2015, + "month": null, + "day": null + }, + "field_of_study": "Architectural Studies", + "degree": "Bachelor of Arts (B.A.)", + "grade": "", + "school_name": "Brown University", + "description": "", + "activities": "" + }, + { + "start": { + "year": 2004, + "month": null, + "day": null + }, + "end": { + "year": 2011, + "month": null, + "day": null + }, + "field_of_study": "", + "degree": "", + "grade": "", + "school_name": "Horace Mann School", + "description": "", + "activities": "" + } + ], + "positions": [ + { + "start": { + "year": 2024, + "month": 4, + "day": null + }, + "end": { + "year": null, + "month": null, + "day": null + }, + "company_name": "Vedanta Capital", + "company_username": "vedacap", + "company_url": null, + "company_industry": "Venture Capital & Private Equity", + "company_staff_count_range": "2 - 10", + "title": "Investor", + "location": "New York, New York, United States", + "description": "Investing in start-ups (robotics, defense tech, VR/AR, space, AI/ML, health tech and more), and in venture and growth equity funds.", + "employment_type": "Full-time" + }, + { + "start": { + "year": 2022, + "month": 8, + "day": null + }, + "end": { + "year": 2024, + "month": 4, + "day": null + }, + "company_name": "Vedanta Capital", + "company_username": "vedacap", + "company_url": null, + "company_industry": "Venture Capital & Private Equity", + "company_staff_count_range": "2 - 10", + "title": "Associate", + "location": "New York, New York, United States", + "description": "Investing in start-ups (robotics, defense tech, VR/AR, space, AI/ML, health tech and more), and in venture and growth equity funds.", + "employment_type": "Full-time" + }, + { + "start": { + "year": 2024, + "month": 4, + "day": null + }, + "end": { + "year": null, + "month": null, + "day": null + }, + "company_name": "Carbon Origins Inc.", + "company_username": "carbon-origins", + "company_url": null, + "company_industry": "Information Technology & Services", + "company_staff_count_range": "2 - 10", + "title": "Advisor", + "location": "", + "description": "", + "employment_type": "Part-time" + }, + { + "start": { + "year": 2020, + "month": 11, + "day": null + }, + "end": { + "year": 2022, + "month": 4, + "day": null + }, + "company_name": "Reactiv", + "company_username": "reactivrehab", + "company_url": null, + "company_industry": "Health, Wellness & Fitness", + "company_staff_count_range": "2 - 10", + "title": "Co-Founder & COO", + "location": "Brooklyn, New York, United States", + "description": "Reactiv (UnitedHealthcare / Techstars '21) is the virtual clinic for people with chronic joint pain, offering clinician support and interactive experiences to promote healthy movements.", + "employment_type": "Full-time" + }, + { + "start": { + "year": 2019, + "month": 12, + "day": null + }, + "end": { + "year": 2020, + "month": 10, + "day": null + }, + "company_name": "Reactiv", + "company_username": "reactivrehab", + "company_url": null, + "company_industry": "Health, Wellness & Fitness", + "company_staff_count_range": "2 - 10", + "title": "Consultant, Technical & Product", + "location": "", + "description": "", + "employment_type": "" + }, + { + "start": { + "year": 2015, + "month": 6, + "day": null + }, + "end": { + "year": 2020, + "month": 10, + "day": null + }, + "company_name": "Oblix", + "company_username": "oblix-vr", + "company_url": null, + "company_industry": "Computer Software", + "company_staff_count_range": "2 - 10", + "title": "Founder & CEO", + "location": "Greater New York City Area", + "description": "Oblix is an angel-funded, virtual reality start-up based in Brooklyn, NY, and the developer behind Go Guess, a social, geographic guessing game for the Oculus Rift and HTC Vive. Go Guess is currently live on the Oculus Store, Steam and Viveport.", + "employment_type": "" + }, + { + "start": { + "year": 2019, + "month": 4, + "day": null + }, + "end": { + "year": 2019, + "month": 8, + "day": null + }, + "company_name": "GAROU", + "company_username": "mira.world", + "company_url": null, + "company_industry": "Computer Software", + "company_staff_count_range": "11 - 50", + "title": "Acting Chief Strategy Officer", + "location": "Greater New York City Area", + "description": "Acted as Chief Strategy Officer for Garou through a partnership with Oblix. Developed custom VR experiences for clients such as Viacom, Fujitsu and SNCF in entertainment, e-commerce and real estate. Developed and managed the Business Development pipeline. Led Garou's application to Verizon's Built on 5G Challenge, resulting in a $500K award.", + "employment_type": "" + }, + { + "start": { + "year": 2014, + "month": 6, + "day": null + }, + "end": { + "year": 2014, + "month": 8, + "day": null + }, + "company_name": "Architizer", + "company_username": "architizer", + "company_url": null, + "company_industry": "Computer Software", + "company_staff_count_range": "11 - 50", + "title": "Intern", + "location": "", + "description": "Developed and led the Architecture Genome Project. Collaborated closely with Marc Kushner and TED on The Future of Architecture in 100 Buildings. Systematically identified and routed dirty data from Architizer servers.", + "employment_type": "" + }, + { + "start": { + "year": 2012, + "month": 4, + "day": null + }, + "end": { + "year": 2012, + "month": 9, + "day": null + }, + "company_name": "CasualEat", + "company_username": "", + "company_url": null, + "company_industry": "", + "company_staff_count_range": "", + "title": "Co-Founder", + "location": "Providence, Rhode Island Area", + "description": "Developed a model alongside three other Brown University students to bring an internet-based product to food services businesses in India and the United Arab Emirates. Personally managed a team of Bangalore-based software developers and a Palo Alto-based graphic designer and organized workflow among the founding partners.", + "employment_type": "" + }, + { + "start": { + "year": 2011, + "month": 8, + "day": null + }, + "end": { + "year": 2011, + "month": 8, + "day": null + }, + "company_name": "Weikfield Foods Private Limited", + "company_username": "", + "company_url": null, + "company_industry": "", + "company_staff_count_range": "", + "title": "Marketing Intern", + "location": "Pune, India", + "description": "Produced original marketing materials alongside another intern with oversight from senior management for this multi-generational food-products business.", + "employment_type": "" + }, + { + "start": { + "year": 2011, + "month": 7, + "day": null + }, + "end": { + "year": 2011, + "month": 8, + "day": null + }, + "company_name": "Kirloskar Oil Engines Ltd", + "company_username": "kirloskar-oil-engines", + "company_url": null, + "company_industry": "Mechanical Or Industrial Engineering", + "company_staff_count_range": "5001 - 10000", + "title": "Intern", + "location": "", + "description": "Developed a comprehensive report detailing potential manufacturing and logistical improvements to shop-floor operating practices as defined by the Toyota Production System.", + "employment_type": "" + }, + { + "start": { + "year": 2010, + "month": 6, + "day": null + }, + "end": { + "year": 2010, + "month": 8, + "day": null + }, + "company_name": "New Silk Route", + "company_username": "new-silk-route", + "company_url": null, + "company_industry": "Venture Capital & Private Equity", + "company_staff_count_range": "11 - 50", + "title": "Intern", + "location": "", + "description": "Led a team of interns in analyzing the social impact of this $1.4 billion Asia-focused private equity fund’s investments, measuring job creation and tax revenue generation among other data then distributed to limited partners.", + "employment_type": "" + } + ], + "full_positions": [ + { + "start": { + "year": 2024, + "month": 4, + "day": null + }, + "end": { + "year": null, + "month": null, + "day": null + }, + "company_name": "Vedanta Capital", + "company_username": "vedacap", + "company_url": null, + "company_industry": "Venture Capital & Private Equity", + "company_staff_count_range": "2 - 10", + "title": "Investor", + "location": "New York, New York, United States", + "description": "Investing in start-ups (robotics, defense tech, VR/AR, space, AI/ML, health tech and more), and in venture and growth equity funds.", + "employment_type": "Full-time" + }, + { + "start": { + "year": 2022, + "month": 8, + "day": null + }, + "end": { + "year": 2024, + "month": 4, + "day": null + }, + "company_name": "Vedanta Capital", + "company_username": "vedacap", + "company_url": null, + "company_industry": "Venture Capital & Private Equity", + "company_staff_count_range": "2 - 10", + "title": "Associate", + "location": "New York, New York, United States", + "description": "Investing in start-ups (robotics, defense tech, VR/AR, space, AI/ML, health tech and more), and in venture and growth equity funds.", + "employment_type": "Full-time" + }, + { + "start": { + "year": 2024, + "month": 4, + "day": null + }, + "end": { + "year": null, + "month": null, + "day": null + }, + "company_name": "Carbon Origins Inc.", + "company_username": "carbon-origins", + "company_url": null, + "company_industry": "Information Technology & Services", + "company_staff_count_range": "2 - 10", + "title": "Advisor", + "location": "", + "description": "", + "employment_type": "Part-time" + }, + { + "start": { + "year": 2020, + "month": 11, + "day": null + }, + "end": { + "year": 2022, + "month": 4, + "day": null + }, + "company_name": "Reactiv", + "company_username": "reactivrehab", + "company_url": null, + "company_industry": "Health, Wellness & Fitness", + "company_staff_count_range": "2 - 10", + "title": "Co-Founder & COO", + "location": "Brooklyn, New York, United States", + "description": "Reactiv (UnitedHealthcare / Techstars '21) is the virtual clinic for people with chronic joint pain, offering clinician support and interactive experiences to promote healthy movements.", + "employment_type": "Full-time" + }, + { + "start": { + "year": 2019, + "month": 12, + "day": null + }, + "end": { + "year": 2020, + "month": 10, + "day": null + }, + "company_name": "Reactiv", + "company_username": "reactivrehab", + "company_url": null, + "company_industry": "Health, Wellness & Fitness", + "company_staff_count_range": "2 - 10", + "title": "Consultant, Technical & Product", + "location": "", + "description": "", + "employment_type": "" + }, + { + "start": { + "year": 2015, + "month": 6, + "day": null + }, + "end": { + "year": 2020, + "month": 10, + "day": null + }, + "company_name": "Oblix", + "company_username": "oblix-vr", + "company_url": null, + "company_industry": "Computer Software", + "company_staff_count_range": "2 - 10", + "title": "Founder & CEO", + "location": "Greater New York City Area", + "description": "Oblix is an angel-funded, virtual reality start-up based in Brooklyn, NY, and the developer behind Go Guess, a social, geographic guessing game for the Oculus Rift and HTC Vive. Go Guess is currently live on the Oculus Store, Steam and Viveport.", + "employment_type": "" + }, + { + "start": { + "year": 2019, + "month": 4, + "day": null + }, + "end": { + "year": 2019, + "month": 8, + "day": null + }, + "company_name": "GAROU", + "company_username": "mira.world", + "company_url": null, + "company_industry": "Computer Software", + "company_staff_count_range": "11 - 50", + "title": "Acting Chief Strategy Officer", + "location": "Greater New York City Area", + "description": "Acted as Chief Strategy Officer for Garou through a partnership with Oblix. Developed custom VR experiences for clients such as Viacom, Fujitsu and SNCF in entertainment, e-commerce and real estate. Developed and managed the Business Development pipeline. Led Garou's application to Verizon's Built on 5G Challenge, resulting in a $500K award.", + "employment_type": "" + }, + { + "start": { + "year": 2014, + "month": 6, + "day": null + }, + "end": { + "year": 2014, + "month": 8, + "day": null + }, + "company_name": "Architizer", + "company_username": "architizer", + "company_url": null, + "company_industry": "Computer Software", + "company_staff_count_range": "11 - 50", + "title": "Intern", + "location": "", + "description": "Developed and led the Architecture Genome Project. Collaborated closely with Marc Kushner and TED on The Future of Architecture in 100 Buildings. Systematically identified and routed dirty data from Architizer servers.", + "employment_type": "" + }, + { + "start": { + "year": 2012, + "month": 4, + "day": null + }, + "end": { + "year": 2012, + "month": 9, + "day": null + }, + "company_name": "CasualEat", + "company_username": "", + "company_url": null, + "company_industry": "", + "company_staff_count_range": "", + "title": "Co-Founder", + "location": "Providence, Rhode Island Area", + "description": "Developed a model alongside three other Brown University students to bring an internet-based product to food services businesses in India and the United Arab Emirates. Personally managed a team of Bangalore-based software developers and a Palo Alto-based graphic designer and organized workflow among the founding partners.", + "employment_type": "" + }, + { + "start": { + "year": 2011, + "month": 8, + "day": null + }, + "end": { + "year": 2011, + "month": 8, + "day": null + }, + "company_name": "Weikfield Foods Private Limited", + "company_username": "", + "company_url": null, + "company_industry": "", + "company_staff_count_range": "", + "title": "Marketing Intern", + "location": "Pune, India", + "description": "Produced original marketing materials alongside another intern with oversight from senior management for this multi-generational food-products business.", + "employment_type": "" + }, + { + "start": { + "year": 2011, + "month": 7, + "day": null + }, + "end": { + "year": 2011, + "month": 8, + "day": null + }, + "company_name": "Kirloskar Oil Engines Ltd", + "company_username": "kirloskar-oil-engines", + "company_url": null, + "company_industry": "Mechanical Or Industrial Engineering", + "company_staff_count_range": "5001 - 10000", + "title": "Intern", + "location": "", + "description": "Developed a comprehensive report detailing potential manufacturing and logistical improvements to shop-floor operating practices as defined by the Toyota Production System.", + "employment_type": "" + }, + { + "start": { + "year": 2010, + "month": 6, + "day": null + }, + "end": { + "year": 2010, + "month": 8, + "day": null + }, + "company_name": "New Silk Route", + "company_username": "new-silk-route", + "company_url": null, + "company_industry": "Venture Capital & Private Equity", + "company_staff_count_range": "11 - 50", + "title": "Intern", + "location": "", + "description": "Led a team of interns in analyzing the social impact of this $1.4 billion Asia-focused private equity fund’s investments, measuring job creation and tax revenue generation among other data then distributed to limited partners.", + "employment_type": "" + } + ], + "skills": [ + { + "name": "HTML" + }, + { + "name": "CSS" + }, + { + "name": "JavaScript" + }, + { + "name": "jQuery" + }, + { + "name": "PHP" + }, + { + "name": "Photoshop" + }, + { + "name": "Microsoft Office" + }, + { + "name": "Microsoft Word" + }, + { + "name": "Microsoft Excel" + }, + { + "name": "PowerPoint" + }, + { + "name": "Research" + }, + { + "name": "Social Media" + }, + { + "name": "Process Improvement" + }, + { + "name": "English" + }, + { + "name": "Public Speaking" + }, + { + "name": "Customer Service" + }, + { + "name": "Teamwork" + } + ], + "courses": null, + "certifications": null +} \ No newline at end of file diff --git a/tests/test_data/sample_profiles/zac_mohring.json b/tests/test_data/sample_profiles/zac_mohring.json new file mode 100644 index 0000000000000000000000000000000000000000..dbd962f82ec2956f68597130c4407e59e4f5aab6 --- /dev/null +++ b/tests/test_data/sample_profiles/zac_mohring.json @@ -0,0 +1,363 @@ +{ + "first_name": "Zac", + "last_name": "Mohring", + "is_open_to_work": false, + "is_hiring": false, + "profile_picture": "https://media.licdn.com/dms/image/v2/D5603AQFTdCS9WznD7w/profile-displayphoto-shrink_800_800/profile-displayphoto-shrink_800_800/0/1708043869042?e=1731542400&v=beta&t=kiIH3KY6CIXTRzuIEvyA2JpZSnbd6SR9Z3v2NXrParo", + "summary": "", + "headline": "Altos Ventures", + "geo": { + "country": "United States", + "city": "San Francisco, California", + "full": "San Francisco, California, United States" + }, + "languages": [ + { + "name": "English", + "proficiency": "" + }, + { + "name": "German", + "proficiency": "" + }, + { + "name": "Greek", + "proficiency": "" + }, + { + "name": "Spanish", + "proficiency": "" + } + ], + "educations": [ + { + "start": { + "year": null, + "month": null, + "day": null + }, + "end": { + "year": null, + "month": null, + "day": null + }, + "field_of_study": "", + "degree": "Master of Business Administration - MBA", + "grade": "", + "school_name": "Stanford University Graduate School of Business", + "description": "", + "activities": "" + }, + { + "start": { + "year": null, + "month": null, + "day": null + }, + "end": { + "year": null, + "month": null, + "day": null + }, + "field_of_study": "Ethics, Politics & Economics", + "degree": "Bachelor of Arts (B.A.)", + "grade": "", + "school_name": "Yale University", + "description": "", + "activities": "" + }, + { + "start": { + "year": null, + "month": null, + "day": null + }, + "end": { + "year": null, + "month": null, + "day": null + }, + "field_of_study": "", + "degree": "Study abroad", + "grade": "", + "school_name": "University of Cambridge", + "description": "", + "activities": "" + }, + { + "start": { + "year": null, + "month": null, + "day": null + }, + "end": { + "year": null, + "month": null, + "day": null + }, + "field_of_study": "", + "degree": "High School Diploma", + "grade": "", + "school_name": "St. Paul Academy and Summit School", + "description": "", + "activities": "" + } + ], + "positions": [ + { + "start": { + "year": 2022, + "month": null, + "day": null + }, + "end": { + "year": null, + "month": null, + "day": null + }, + "company_name": "Altos Ventures", + "company_username": "altos-ventures", + "company_url": null, + "company_industry": "Venture Capital & Private Equity", + "company_staff_count_range": "11 - 50", + "title": "Principal", + "location": "Menlo Park, California, United States", + "description": "", + "employment_type": "" + }, + { + "start": { + "year": 2019, + "month": null, + "day": null + }, + "end": { + "year": 2021, + "month": null, + "day": null + }, + "company_name": "Darlington Partners", + "company_username": "darlington-partners-capital", + "company_url": null, + "company_industry": "Financial Services", + "company_staff_count_range": "2 - 10", + "title": "Analyst", + "location": "San Francisco Bay Area", + "description": "Darlington Partners is a value-oriented investment partnership that invests in a small number of high-quality companies with a multi-year investment horizon. Most investments are in US public equities, though the fund has a broad investment mandate.", + "employment_type": "" + }, + { + "start": { + "year": 2018, + "month": null, + "day": null + }, + "end": { + "year": 2019, + "month": null, + "day": null + }, + "company_name": "Bain Capital", + "company_username": "bain-capital", + "company_url": null, + "company_industry": "Financial Services", + "company_staff_count_range": "1001 - 5000", + "title": "Private Equity Associate", + "location": "Greater Boston Area", + "description": "", + "employment_type": "" + }, + { + "start": { + "year": 2016, + "month": null, + "day": null + }, + "end": { + "year": 2018, + "month": null, + "day": null + }, + "company_name": "Bain Capital", + "company_username": "bain-capital", + "company_url": null, + "company_industry": "Financial Services", + "company_staff_count_range": "1001 - 5000", + "title": "Private Equity Analyst", + "location": "Greater Boston Area", + "description": "", + "employment_type": "" + }, + { + "start": { + "year": 2015, + "month": null, + "day": null + }, + "end": { + "year": 2015, + "month": null, + "day": null + }, + "company_name": "Bain Capital", + "company_username": "bain-capital", + "company_url": null, + "company_industry": "Financial Services", + "company_staff_count_range": "1001 - 5000", + "title": "Private Equity Summer Analyst", + "location": "", + "description": "", + "employment_type": "Internship" + } + ], + "full_positions": [ + { + "start": { + "year": 2022, + "month": null, + "day": null + }, + "end": { + "year": null, + "month": null, + "day": null + }, + "company_name": "Altos Ventures", + "company_username": "altos-ventures", + "company_url": null, + "company_industry": "Venture Capital & Private Equity", + "company_staff_count_range": "11 - 50", + "title": "Principal", + "location": "Menlo Park, California, United States", + "description": "", + "employment_type": "" + }, + { + "start": { + "year": 2019, + "month": null, + "day": null + }, + "end": { + "year": 2021, + "month": null, + "day": null + }, + "company_name": "Darlington Partners", + "company_username": "darlington-partners-capital", + "company_url": null, + "company_industry": "Financial Services", + "company_staff_count_range": "2 - 10", + "title": "Analyst", + "location": "San Francisco Bay Area", + "description": "Darlington Partners is a value-oriented investment partnership that invests in a small number of high-quality companies with a multi-year investment horizon. Most investments are in US public equities, though the fund has a broad investment mandate.", + "employment_type": "" + }, + { + "start": { + "year": 2018, + "month": null, + "day": null + }, + "end": { + "year": 2019, + "month": null, + "day": null + }, + "company_name": "Bain Capital", + "company_username": "bain-capital", + "company_url": null, + "company_industry": "Financial Services", + "company_staff_count_range": "1001 - 5000", + "title": "Private Equity Associate", + "location": "Greater Boston Area", + "description": "", + "employment_type": "" + }, + { + "start": { + "year": 2016, + "month": null, + "day": null + }, + "end": { + "year": 2018, + "month": null, + "day": null + }, + "company_name": "Bain Capital", + "company_username": "bain-capital", + "company_url": null, + "company_industry": "Financial Services", + "company_staff_count_range": "1001 - 5000", + "title": "Private Equity Analyst", + "location": "Greater Boston Area", + "description": "", + "employment_type": "" + }, + { + "start": { + "year": 2015, + "month": null, + "day": null + }, + "end": { + "year": 2015, + "month": null, + "day": null + }, + "company_name": "Bain Capital", + "company_username": "bain-capital", + "company_url": null, + "company_industry": "Financial Services", + "company_staff_count_range": "1001 - 5000", + "title": "Private Equity Summer Analyst", + "location": "", + "description": "", + "employment_type": "Internship" + } + ], + "skills": [ + { + "name": "Microsoft Excel" + }, + { + "name": "Customer Service" + }, + { + "name": "Microsoft Office" + }, + { + "name": "Policy Analysis" + }, + { + "name": "PowerPoint" + }, + { + "name": "Microsoft Word" + }, + { + "name": "Financial Analysis" + }, + { + "name": "Analysis" + }, + { + "name": "Financial Modeling" + }, + { + "name": "Leadership" + }, + { + "name": "Editing" + }, + { + "name": "Public Speaking" + }, + { + "name": "Data Analysis" + } + ], + "courses": null, + "certifications": null +} \ No newline at end of file diff --git a/tests/test_data/sample_profiles_classified/chanson_zhao.json b/tests/test_data/sample_profiles_classified/chanson_zhao.json new file mode 100644 index 0000000000000000000000000000000000000000..0e5680f42e4ba31722234cba1b6881618236bb41 --- /dev/null +++ b/tests/test_data/sample_profiles_classified/chanson_zhao.json @@ -0,0 +1,190 @@ +{ + "general": { + "linkedin_url": "https://www.linkedin.com/in/chansonzhao/", + "first_name": "Chanson", + "last_name": "Zhao", + "current_location": "San Francisco, CA" + }, + "education": { + "undergraduate_school": "University of Southern California", + "undergraduate_year": 2022, + "graduate_school": null, + "graduate_school_year": null, + "education_history": [ + { + "school": "University of Southern California", + "beginning_year": 2018, + "ending_year": 2022, + "degree_type": "Bachelor of Science - BS, Business Administration and Management, general", + "degree_characterization": "Undergraduate (Completed)", + "school_type": "Higher Education", + "school_location": "Los Angeles, CA" + }, + { + "school": "Valencia High School", + "beginning_year": 2014, + "ending_year": 2018, + "degree_type": "High School Diploma", + "degree_characterization": "Primary / Secondary School", + "school_type": "Primary and Secondary School", + "school_location": "Valencia, CA" + } + ] + }, + "professional_experience": { + "total_years_of_experience": 2.0, + "experience_by_secondary_job_type": { + "investing": 0.0, + "back_office": null, + "investment_banking": null, + "consulting": null, + "engineering": null, + "entrepreneur_founder": null, + "corpdev_strategy": null, + "Other": null + }, + "linkedin_title": "Investment Banking Analyst at Barclays", + "experience_history": [ + { + "company": "Barclays", + "title": "Investment Banking Analyst", + "location": "San Francisco, CA", + "start_date": "07/2022", + "end_date": "Current", + "duration": "2 (2/12) years", + "description": "Technology Coverage", + "primary_job_type": "Full-time", + "secondary_job_type": "Investment Banking", + "investing_focus_stage": null, + "investing_focus_sector": null, + "investment_banking_focus": "Technology / Software / TMT" + }, + { + "company": "University of Southern California - Marshall School of Business", + "title": "Portfolio Manager - Undergraduate Student Investment Fund (USIF)", + "location": "Los Angeles, CA", + "start_date": "03/2021", + "end_date": "05/2022", + "duration": "1 (3 / 12) years", + "description": "AUM: $5.3MM", + "primary_job_type": "Extracurricular", + "secondary_job_type": "Investing", + "investing_focus_stage": null, + "investing_focus_sector": null, + "investment_banking_focus": null + }, + { + "company": "Barclays", + "title": "Investment Banking Summer Analyst", + "location": "San Francisco, CA", + "start_date": "06/2021", + "end_date": "08/2021", + "duration": "(3 / 12) years", + "description": "Technology Coverage", + "primary_job_type": "Internship", + "secondary_job_type": "Investment Banking", + "investing_focus_stage": "Investment Banking", + "investing_focus_sector": null, + "investment_banking_focus": "Technology / Software / TMT" + }, + { + "company": "Delta Sigma Pi", + "title": "VP Finance", + "location": "Los Angeles, CA", + "start_date": "02/2019", + "end_date": "06/2021", + "duration": "2 (5/12) years", + "description": null, + "primary_job_type": "Extracurricular", + "secondary_job_type": null, + "investing_focus_stage": null, + "investing_focus_sector": null, + "investment_banking_focus": null + }, + { + "company": "Trojan Investing Society", + "title": "Senior Vice President", + "location": "Los Angeles, CA", + "start_date": "11/2019", + "end_date": "12/2020", + "duration": "2 (1/12) years", + "description": "USC's premier undergraduate finance organization comprised of 450+ members", + "primary_job_type": "Extracurricular", + "secondary_job_type": null, + "investing_focus_stage": null, + "investing_focus_sector": null, + "investment_banking_focus": null + }, + { + "company": "Trojan Investing Society", + "title": "Mentorship Program", + "location": "Los Angeles, CA", + "start_date": "01/2020", + "end_date": "06/2020", + "duration": "(6/12) years", + "description": "", + "primary_job_type": "Extracurricular", + "secondary_job_type": null, + "investing_focus_stage": null, + "investing_focus_sector": null, + "investment_banking_focus": null + }, + { + "company": "Trojan Investing Society", + "title": "Leaders Program", + "location": "Los Angeles, CA", + "start_date": "08/2019", + "end_date": "11/2020", + "duration": "(3/12) years", + "description": "", + "primary_job_type": "Extracurricular", + "secondary_job_type": null, + "investing_focus_stage": null, + "investing_focus_sector": null, + "investment_banking_focus": null + }, + { + "company": "Teleo Capital", + "title": "Private Equity Intern", + "location": "Los Angeles, CA", + "start_date": "05/2020", + "end_date": "08/2020", + "duration": "(3/12) years", + "description": "Private equity firm targeting opportunities in the software & technology, healthcare IT, and industrial sectors", + "primary_job_type": "Internship", + "secondary_job_type": "Investing", + "investing_focus_stage": "Private Equity / Buyouts", + "investing_focus_sector": null, + "investment_banking_focus": null + }, + { + "company": "Business Technology Group", + "title": "VP Operations", + "location": "Los Angeles, CA", + "start_date": "08/2019", + "end_date": "01/2020", + "duration": "(6 / 12) years", + "description": null, + "primary_job_type": "Internship", + "secondary_job_type": "Other", + "investing_focus_stage": null, + "investing_focus_sector": null, + "investment_banking_focus": null + }, + { + "company": "USC Association of Innovative Marketing (AIM) Consulting", + "title": "Consultant", + "location": "Los Angeles, CA", + "start_date": "02/2019", + "end_date": "08/2019", + "duration": "(7 / 12) years", + "description": null, + "primary_job_type": "Extracurricular", + "secondary_job_type": "Other", + "investing_focus_stage": null, + "investing_focus_sector": null, + "investment_banking_focus": null + } + ] + } + } \ No newline at end of file diff --git a/tests/test_data/sample_profiles_classified/eric_armagost.json b/tests/test_data/sample_profiles_classified/eric_armagost.json new file mode 100644 index 0000000000000000000000000000000000000000..8984faf3ecb2881dc15a8486d010422e2c806541 --- /dev/null +++ b/tests/test_data/sample_profiles_classified/eric_armagost.json @@ -0,0 +1,97 @@ +{ + "general": { + "linkedin_url": "https://www.linkedin.com/in/eric-armagost-a144904a/", + "first_name": "Eric", + "last_name": "Armagost", + "current_location": "San Francisco, CA" + }, + "education": { + "undergraduate_school": "Brown University", + "undergraduate_year": 2013, + "graduate_school": null, + "graduate_school_year": null, + "education_history": [ + { + "school": "Brown University", + "beginning_year": null, + "ending_year": null, + "degree_type": "Bachelor of Arts (B.A.), Business Economics", + "degree_characterization": "Undergraduate (Completed)", + "school_type": "Higher Education", + "school_location": "Providence, RI" + } + ] + }, + "professional_experience": { + "total_years_of_experience": 11.0, + "experience_by_secondary_job_type": { + "investing": 7.3, + "back_office": null, + "investment_banking": null, + "consulting": null, + "engineering": null, + "entrepreneur_founder": null, + "corpdev_strategy": null, + "Other": null + }, + "linkedin_title": "Investor at Accel-KKR", + "experience_history": [ + { + "company": "Accel-KKR", + "title": "Investment Professional", + "location": "Menlo Park, CA", + "start_date": "05/2017", + "end_date": "Current", + "duration": "7 (3 / 12) years", + "description": "Founded in 2000, Accel-KKR is a leading technology-focused private equity firm dedicated exclusively to investing in software and technology-enabled services companies. \n\nOur typical transactions include: \n• Acquisitions and recapitalizations of founder-owned or closely-held private companies \n• Buyouts of divisions, subsidiaries and business units from public companies \n• Take-private transactions of small public companies\n• Structured minority equity and debt investments\n\nwww.accel-kkr.com", + "primary_job_type": "Full-time", + "secondary_job_type": "Investing", + "investing_focus_stage": "Growth Equity", + "investing_focus_sector": null, + "investment_banking_focus": null + }, + { + "company": "William Blair & Company", + "title": null, + "location": "Chicago, Illinois", + "start_date": "06/2015", + "end_date": "05/2017", + "duration": "2 years", + "description": null, + "primary_job_type": "Full-time", + "secondary_job_type": "Investment Banking", + "investing_focus_stage": null, + "investing_focus_sector": null, + "investment_banking_focus": "Not Specified" + }, + { + "company": "Fidelity Investments", + "title": null, + "location": "Smithfiled, Rhode Island", + "start_date": "06/2014", + "end_date": "05/2015", + "duration": "1 year", + "description": null, + "primary_job_type": "Full-time", + "secondary_job_type": "Other", + "investing_focus_stage": "Other - [ ]", + "investing_focus_sector": null, + "investment_banking_focus": null + }, + { + "company": "Fidelity Investments", + "title": null, + "location": "Smithfield, Rhode Island", + "start_date": "06/2013", + "end_date": "05/2014", + "duration": "1 year", + "description": null, + "primary_job_type": "Full-time", + "secondary_job_type": "Other", + "investing_focus_stage": "Other - [ ]", + "investing_focus_sector": null, + "investment_banking_focus": null + } + ] + } + } \ No newline at end of file diff --git a/tests/test_data/sample_profiles_classified/hansae_catlett.json b/tests/test_data/sample_profiles_classified/hansae_catlett.json new file mode 100644 index 0000000000000000000000000000000000000000..cb2e80623763b3e9e4ae5a316f3f31be1cb13758 --- /dev/null +++ b/tests/test_data/sample_profiles_classified/hansae_catlett.json @@ -0,0 +1,180 @@ +{ + "general": { + "linkedin_url": "https://www.linkedin.com/in/hansae-catlett-436a9b21/details/experience/", + "first_name": "Hansae", + "last_name": "Catlett", + "current_location": null + }, + "education": { + "undergraduate_school": "Harvard University", + "undergraduate_year": 2011, + "graduate_school": "Stanford", + "graduate_school_year": 2019, + "education_history": [ + { + "school": "Stanford University Graduate School of Business", + "beginning_year": 2016, + "ending_year": 2019, + "degree_type": "Master of Business Administration, M.B.A.", + "degree_characterization": "MBA", + "school_type": "Higher Education", + "school_location": "Stanford, CA" + }, + { + "school": "Stanford University", + "beginning_year": 2016, + "ending_year": 2019, + "degree_type": "Master of Public Policy (M.P.P.)", + "degree_characterization": "graduate_school", + "school_type": "Higher Education", + "school_location": "Stanford, CA" + }, + { + "school": "Harvard University", + "beginning_year": 2007, + "ending_year": 2011, + "degree_type": "Bachelor of Arts, Biomedical Engineering, Philosophy", + "degree_characterization": "Undergraduate (Completed)", + "school_type": "Higher Education", + "school_location": "Cambridge, MA" + }, + { + "school": "UNSW", + "beginning_year": null, + "ending_year": null, + "degree_type": "Engineering, Philosophy, Finance", + "degree_characterization": "Undergraduate (Incomplete)", + "school_type": "Higher Education", + "school_location": "Sydney, New South Wales" + } + ] + }, + "professional_experience": { + "total_years_of_experience": 13.0, + "experience_by_secondary_job_type": { + "investing": 9.2, + "back_office": null, + "investment_banking": null, + "consulting": null, + "engineering": null, + "entrepreneur_founder": null, + "corpdev_strategy": null, + "Other": null + }, + "linkedin_title": "Partner at HOF Capital | Co-founder & GP at The MBA Fund", + "experience_history": [ + { + "company": "HOF Capital", + "title": "Partner", + "location": "New York, New York", + "start_date": "04/2024", + "end_date": "Present", + "duration": "(6 / 12) years", + "description": null, + "primary_job_type": "Full-time", + "secondary_job_type": "Investing", + "investing_focus_stage": "Multi-stage VC", + "investing_focus_sector": null, + "investment_banking_focus": null + }, + { + "company": "The MBA Fund", + "title": "Co-Founder, General Partner", + "location": "San Francisco, CA", + "start_date": "2018", + "end_date": "Present", + "duration": "6 (8 / 12) years", + "description": "The MBA Fund is a venture capital firm that helps founders from the top startup-producing universities create legendary companies. We most frequently back student, alumni and dropout founders from Harvard, Stanford, and Wharton (expanding presence nationally!). \n\nWe're a community of investors and operators who aren't afraid to take the riskiest leaps with founders who are just getting started. Our backers include top-tier VC firms, repeat founders, experienced execs, and super angels with ties to the communities where we invest. This network is ready and willing to help founders in our portfolio with financing, hiring, customer growth and more.\n\nSelect investments include:\n* Jeeves ($2B)\n* Dandy ($1B)\n* TRM Labs ($600M+)\n* Hightouch ($450M+)\n* Luxury Presence ($200M+)\n* FlutterFlow ($150M+)\n* Legacy ($150M+)\n* Seso ($150M+)\n* Peachy ($100M+)", + "primary_job_type": "Other", + "secondary_job_type": "Investing", + "investing_focus_stage": "Early-stage VC", + "investing_focus_sector": null, + "investment_banking_focus": null + }, + { + "company": "Bessemer Venture Partners", + "title": "Vice President", + "location": "New York, New York", + "start_date": "07/2019", + "end_date": "02/2024", + "duration": "4 (8 / 12) years", + "description": null, + "primary_job_type": "Full-time", + "secondary_job_type": "Investing", + "investing_focus_stage": "Multi-stage VC", + "investing_focus_sector": null, + "investment_banking_focus": null + }, + { + "company": "Omidyar Network", + "title": "Venture Associate", + "location": "San Francisco, CA", + "start_date": "2017", + "end_date": "2018", + "duration": "1 year", + "description": null, + "primary_job_type": "Internship", + "secondary_job_type": "Investing", + "investing_focus_stage": null, + "investing_focus_sector": null, + "investment_banking_focus": null + }, + { + "company": "Slow Ventures", + "title": "Venture Associate", + "location": "San Francisco, CA", + "start_date": "2016", + "end_date": "2017", + "duration": "1 year", + "description": null, + "primary_job_type": "Internship", + "secondary_job_type": "Investing", + "investing_focus_stage": null, + "investing_focus_sector": null, + "investment_banking_focus": null + }, + { + "company": "The Bridgespan Group", + "title": "Venture Investor & Consultant", + "location": "San Francisco, CA", + "start_date": "09/2013", + "end_date": "09/2016", + "duration": "3 (1 /12) years", + "description": "Led/Co-led Seed through Series C financings for biomedical informatics/computational biology, enterprise & edtech startups on behalf of Intuit founder, Scott Cook's family office.", + "primary_job_type": "Full-time", + "secondary_job_type": "Early-stage VC", + "investing_focus_stage": null, + "investing_focus_sector": null, + "investment_banking_focus": null + }, + { + "company": "Soundscope", + "title": "Co-Founder & Head of Product", + "location": "New York, New York", + "start_date": "2012", + "end_date": "2014", + "duration": "2 years", + "description": "Musician/entertainer discovery & data analytics application based on research conducted at Duke University on how people move through cities and engage with mobile devices. Acquired in 2015.", + "primary_job_type": "Full-time", + "secondary_job_type": "Entrepreneur / Founder", + "investing_focus_stage": null, + "investing_focus_sector": null, + "investment_banking_focus": null + }, + { + "company": "Pacific Community Ventures", + "title": "Venture Analyst", + "location": "San Francisco, CA", + "start_date": "09/2011", + "end_date": "07/2012", + "duration": "(11 / 12) years", + "description": null, + "primary_job_type": "Full-time", + "secondary_job_type": "Investing", + "investing_focus_stage": null, + "investing_focus_sector": null, + "investment_banking_focus": null + } + ] + } + } \ No newline at end of file diff --git a/tests/test_data/sample_profiles_classified/jake_kugler.json b/tests/test_data/sample_profiles_classified/jake_kugler.json new file mode 100644 index 0000000000000000000000000000000000000000..4b28d30fff347d8c1a8d68934dbbaaca6b24e50c --- /dev/null +++ b/tests/test_data/sample_profiles_classified/jake_kugler.json @@ -0,0 +1,120 @@ +{ + "general": { + "linkedin_url": "https://www.linkedin.com/in/jake-kugler-0371a958/", + "first_name": "Jake", + "last_name": "Kugler", + "current_location": null + }, + "education": { + "undergraduate_school": "Northeastern University", + "undergraduate_year": 2015, + "graduate_school": "Harvard University", + "graduate_school_year": 2024, + "education_history": [ + { + "school": "Harvard Business School", + "beginning_year": 2022, + "ending_year": "Present", + "degree_type": "Master of Business Administration - MBA", + "degree_characterization": "MBA", + "school_type": "Higher Education", + "school_location": "Boston, MA" + }, + { + "school": "Northeastern University", + "beginning_year": 2011, + "ending_year": 2015, + "degree_type": "BSBA, Finance", + "degree_characterization": "Undergraduate (Completed)", + "school_type": "Higher Education", + "school_location": null + } + ] + }, + "professional_experience": { + "total_years_of_experience": 9.0, + "experience_by_secondary_job_type": { + "investing": 5.1, + "back_office": null, + "investment_banking": null, + "consulting": null, + "engineering": null, + "entrepreneur_founder": null, + "corpdev_strategy": null, + "Other": null + }, + "linkedin_title": "MBA Candidate at Harvard Busine School", + "experience_history": [ + { + "company": "Harvard Business School", + "title": "MBA Candidate", + "location": "Boston, MA", + "start_date": "08/2022", + "end_date": "Present", + "duration": "2 years", + "description": "[ ]", + "primary_job_type": "Other", + "secondary_job_type": "Other", + "investing_focus_stage": null, + "investing_focus_sector": null, + "investment_banking_focus": null + }, + { + "company": "Declaration Partners", + "title": "Advisor - Growth Equity", + "location": "New York, New York", + "start_date": "01/2022", + "end_date": "07/2022", + "duration": "(7 / 12) years", + "description": "BayPine's Sister Firm. Anchored by the family office of Carlyle Co-Founder and philanthropist David M. Rubenstein, Declaration is a private investment firm with approximately $2.5B in AUM.", + "primary_job_type": "Advisory / Board / Independent Investor", + "secondary_job_type": "Investing", + "investing_focus_stage": "Growth Equity", + "investing_focus_sector": null, + "investment_banking_focus": null + }, + { + "company": "BayPine", + "title": "Investment Professional", + "location": "New York, New York", + "start_date": "09/2020", + "end_date": "08/2022", + "duration": "1 (11 / 12) years", + "description": null, + "primary_job_type": "Full-time", + "secondary_job_type": "Investing", + "investing_focus_stage": "Private Equity / Buyouts", + "investing_focus_sector": null, + "investment_banking_focus": "generalist" + }, + { + "company": "General Atlantic", + "title": "Investment Professional", + "location": "San Francisco, CA", + "start_date": "07/2017", + "end_date": "08/2020", + "duration": "3 (2 / 12) years", + "description": "Technology Group", + "primary_job_type": "Full-time", + "secondary_job_type": "Investing", + "investing_focus_stage": "Growth Equity", + "investing_focus_sector": "Technology / Software / TMT", + "investment_banking_focus": null + }, + { + "company": "Morgan Stanley", + "title": "Investment Banking", + "location": "New York, New York", + "start_date": "06/2015", + "end_date": "08/2017", + "duration": "2 (2 / 12) years", + "description": null, + "primary_job_type": "Full-time", + "secondary_job_type": "Investment Banking", + "investing_focus_stage": null, + "investing_focus_sector": null, + "investment_banking_focus": "Not Specified" + } + ] + } + } \ No newline at end of file diff --git a/tests/test_data/sample_profiles_classified/jeffrey_bai.json b/tests/test_data/sample_profiles_classified/jeffrey_bai.json new file mode 100644 index 0000000000000000000000000000000000000000..74cb703652d295da25d59f5124a356671e51d369 --- /dev/null +++ b/tests/test_data/sample_profiles_classified/jeffrey_bai.json @@ -0,0 +1,111 @@ +{ + "general": { + "linkedin_url": "https://www.linkedin.com/in/jeffreybai/", + "first_name": "Jeffrey", + "last_name": "Bai", + "current_location": "Boulder, CO" + }, + "education": { + "undergraduate_school": "The Wharton School", + "undergraduate_year": 2019, + "graduate_school": null, + "graduate_school_year": null, + "education_history": [ + { + "school": "The Wharton School", + "beginning_year": 2015, + "ending_year": 2019, + "degree_type": "Bachelor of Science - BS, Economics, Finance, and Management", + "degree_characterization": "Undergraduate (Completed)", + "school_type": "Higher Education", + "school_location": "Philedelphia, PA" + } + ] + }, + "professional_experience": { + "total_years_of_experience": 5.0, + "experience_by_secondary_job_type": { + "investing": 3.1, + "back_office": null, + "investment_banking": null, + "consulting": null, + "engineering": null, + "entrepreneur_founder": null, + "corpdev_strategy": null, + "Other": null + }, + "linkedin_title": "Senior Associate at Rubicon Technology Partners", + "experience_history": [ + { + "company": "Rubicon Technology Partners", + "title": "Senior Associate", + "location": "Boulder, CO", + "start_date": "08/2023", + "end_date": "Current", + "duration": "1 (1 /12) years", + "description": "Private Equity – Enterprise Software", + "primary_job_type": "Full-time", + "secondary_job_type": "Investing", + "investing_focus_stage": "Private Equity / Buyouts", + "investing_focus_sector": "Technology / Software / TMT", + "investment_banking_focus": null + }, + { + "company": "Rubicon Technology Partners", + "title": "Associate", + "location": "Boulder, CO", + "start_date": "08/2021", + "end_date": "07/2023", + "duration": "2 years", + "description": "Private Equity – Enterprise Software", + "primary_job_type": "Full-time", + "secondary_job_type": "Investing", + "investing_focus_stage": "Private Equity / Buyouts", + "investing_focus_sector": "Technology / Software / TMT", + "investment_banking_focus": null + }, + { + "company": "DC Advisory", + "title": "Investment Banking Analyst", + "location": "Washington D.C.", + "start_date": "07/2019", + "end_date": "07/2021", + "duration": "2 (1 /12) years", + "description": "Technology and Software M&A", + "primary_job_type": "Full-time", + "secondary_job_type": "Investment Banking", + "investing_focus_stage": null, + "investing_focus_sector": null, + "investment_banking_focus": "Technology / Software / TMT, M&A" + }, + { + "company": "Payoneer", + "title": "Corporate Development Summer Analyst", + "location": "Hong Kong", + "start_date": "06/2018", + "end_date": "08/2018", + "duration": "(3 /12) years", + "description": "[]", + "primary_job_type": "Internship", + "secondary_job_type": "CorpDev / Strategy", + "investing_focus_stage": null, + "investing_focus_sector": null, + "investment_banking_focus": null + }, + { + "company": "Summer Analyst", + "title": "XLP Capital", + "location": "New York, New York", + "start_date": "06/2017", + "end_date": "08/2017", + "duration": "(3 /12) years", + "description": "Technology-focused; short-bias strategy", + "primary_job_type": "Internship", + "secondary_job_type": "Investing", + "investing_focus_stage": "Hedge Fund", + "investing_focus_sector": null, + "investment_banking_focus": null + } + ] + } + } \ No newline at end of file diff --git a/tests/test_data/sample_profiles_classified/lauren_hipple.json b/tests/test_data/sample_profiles_classified/lauren_hipple.json new file mode 100644 index 0000000000000000000000000000000000000000..ca9a2b91f052e447066802d5c30f78beb4d6db6b --- /dev/null +++ b/tests/test_data/sample_profiles_classified/lauren_hipple.json @@ -0,0 +1,120 @@ +{ + "general": { + "linkedin_url": "https://www.linkedin.com/in/lauren-hipple-84277373/", + "first_name": "Lauren", + "last_name": "Hipple", + "current_location": null + }, + "education": { + "undergraduate_school": "Rice University", + "undergraduate_year": 2015, + "graduate_school": null, + "graduate_school_year": null, + "education_history": [ + { + "school": "Rice University", + "beginning_year": null, + "ending_year": null, + "degree_type": "Mathematics and Statistics", + "degree_characterization": "Undergraduate (Completed)", + "school_type": "Higher Education", + "school_location": "Houston, TX" + }, + { + "school": "Laurel School", + "beginning_year": null, + "ending_year": null, + "degree_type": null, + "degree_characterization": "Primary / Secondary School", + "school_type": "Primary and Secondary School", + "school_location": "Shaker Heights, OH" + } + ] + }, + "professional_experience": { + "total_years_of_experience": 9.0, + "experience_by_secondary_job_type": { + "investing": 5.5, + "back_office": null, + "investment_banking": null, + "consulting": null, + "engineering": null, + "entrepreneur_founder": null, + "corpdev_strategy": null, + "Other": null + }, + "linkedin_title": "Long Arc Capital", + "experience_history": [ + { + "company": "Long Arc Capital", + "title": "Private Equity Vice President", + "location": "New York, New York", + "start_date": "03/2023", + "end_date": "Present", + "duration": "1 ( 6 / 12) years", + "description": "~$500 million AUM private equity firm specializing in providing growth capital to companies in the Financial Services, Business Services, and TMT sectors undergoing technology-driven transformations", + "primary_job_type": "Full-time", + "secondary_job_type": "Investing", + "investing_focus_stage": "Growth Equity", + "investing_focus_sector": "Financial Institutions Group (FIG) / Fintech, Business Services, Technology / Software / TMT", + "investment_banking_focus": null + }, + { + "company": "Forum Brands", + "title": "M&A", + "location": "New York, New York", + "start_date": "07/2022", + "end_date": "12/2022", + "duration": "(6 / 12) years", + "description": "Co-Led M&A team at a series A e-commerce company focused on acquiring digitally native brands", + "primary_job_type": "Full-time", + "secondary_job_type": "CorpDev / Strategy", + "investing_focus_stage": null, + "investing_focus_sector": null, + "investment_banking_focus": null + }, + { + "company": "FocusGrowth Asset Management, LP.", + "title": "Vice President", + "location": null, + "start_date": "2020", + "end_date": "2022", + "duration": "2 years", + "description": "Private Credit and Special Situations Asset Manager", + "primary_job_type": "Full-time", + "secondary_job_type": "Investing", + "investing_focus_stage": "Credit", + "investing_focus_sector": null, + "investment_banking_focus": null + }, + { + "company": "Alinda Capital Partners", + "title": "Private Equity Associate", + "location": "New York, New York", + "start_date": "2017", + "end_date": "2019", + "duration": "2 years", + "description": "Private equity funds, with over $8Bn under management. Focused on transportation & logistics, telecommunications, and energy infrastructure.", + "primary_job_type": "Full-time", + "secondary_job_type": "Investing", + "investing_focus_stage": "Private Equity / Buyouts", + "investing_focus_sector": "Infrastructure / Transportation , Energy / Natural Resources / Cleantech / Utilities", + "investment_banking_focus": null + }, + { + "company": "UBS", + "title": "Investment Banking Analyst", + "location": "New York, New York", + "start_date": "07/2015", + "end_date": "06/2017", + "duration": "2 years", + "description": "Energy M&A and Coverage", + "primary_job_type": "Full-time", + "secondary_job_type": "Investment Banking", + "investing_focus_stage": null, + "investing_focus_sector": null, + "investment_banking_focus": "Energy / Natural Resources / Cleantech / Utilities" + } + ] + } + } \ No newline at end of file diff --git a/tests/test_data/sample_profiles_classified/nicholas_penske.json b/tests/test_data/sample_profiles_classified/nicholas_penske.json new file mode 100644 index 0000000000000000000000000000000000000000..ced8ca408760cf465c8fb3069f0aef2ff40cab94 --- /dev/null +++ b/tests/test_data/sample_profiles_classified/nicholas_penske.json @@ -0,0 +1,176 @@ +{ + "general": { + "linkedin_url": "https://www.linkedin.com/in/nicholas-penske-846419120/", + "first_name": "Nicholas", + "last_name": "Penske", + "current_location": "New York, NY" + }, + "education": { + "undergraduate_school": "Cornell University", + "undergraduate_year": 2019, + "graduate_school": null, + "graduate_school_year": null, + "education_history": [ + { + "school": "Cornell University", + "beginning_year": 2015, + "ending_year": 2019, + "degree_type": "Bachelor of Arts - BA, American Government and Politics (United States)", + "degree_characterization": "Undergraduate (Completed)", + "school_type": "Higher Education", + "school_location": "Ithaca, NY" + }, + { + "school": "Harvard Westlake School", + "beginning_year": 2009, + "ending_year": 2015, + "degree_type": null, + "degree_characterization": "Primary / Secondary School", + "school_type": "Primary and Secondary School", + "school_location": "Studio City, CA" + } + ] + }, + "professional_experience": { + "total_years_of_experience": 5.0, + "experience_by_secondary_job_type": { + "investing": 1.1, + "back_office": null, + "investment_banking": null, + "consulting": null, + "engineering": null, + "entrepreneur_founder": null, + "corpdev_strategy": null, + "Other": null + }, + "linkedin_title": "Investor at 8VC", + "experience_history": [ + { + "company": "8VC", + "title": "Investor", + "location": "New York City", + "start_date": "04/2024", + "end_date": "Current", + "duration": "(5 / 12) years", + "description": null, + "primary_job_type": "Full-time", + "secondary_job_type": "Investing", + "investing_focus_stage": "Multi-stage VC", + "investing_focus_sector": null, + "investment_banking_focus": null + }, + { + "company": "TRP Capital Partners", + "title": "Private Equity Associate", + "location": "New York, New York", + "start_date": "09/2023", + "end_date": "04/2024", + "duration": "(8 / 12) years", + "description": null, + "primary_job_type": "Full-time", + "secondary_job_type": "Investing", + "investing_focus_stage": "Private Equity / Buyouts", + "investing_focus_sector": null, + "investment_banking_focus": null + }, + { + "company": "TRP Capital Partners", + "title": "Private Equity Analyst", + "location": "New York, New York", + "start_date": "10/2021", + "end_date": "09/2023", + "duration": "2(11 / 12) years", + "description": null, + "primary_job_type": "Full-time", + "secondary_job_type": "Investing", + "investing_focus_stage": "Private Equity / Buyouts", + "investing_focus_sector": null, + "investment_banking_focus": null + }, + { + "company": "Hotel Investments", + "title": "Self-employed", + "location": "New York, New York", + "start_date": "2020", + "end_date": "2021", + "duration": "1 year", + "description": "Hospitality start-up looking to acquire and reposition unbranded bed and breakfasts, hotels, and motels", + "primary_job_type": "Full-time", + "secondary_job_type": "Entrepreneur / Founder", + "investing_focus_stage": "Other - [ ]", + "investing_focus_sector": null, + "investment_banking_focus": null + }, + { + "company": "Hudson Pacific Properties", + "title": "Analyst", + "location": "Los Angeles, CA", + "start_date": "07/2019", + "end_date": "11/2020", + "duration": "(17 / 12) years", + "description": null, + "primary_job_type": "Full-time", + "secondary_job_type": "Other", + "investing_focus_stage": "Real Estate", + "investing_focus_sector": null, + "investment_banking_focus": null + }, + { + "company": "Ares Management, L.P.", + "title": "Summer Intern", + "location": "Greater Los Angeles Area", + "start_date": "06/2018", + "end_date": "08/2018", + "duration": "(3 / 12) years", + "description": null, + "primary_job_type": "Internship", + "secondary_job_type": null, + "investing_focus_stage": null, + "investing_focus_sector": null, + "investment_banking_focus": null + }, + { + "company": "Caruso Affiliated", + "title": "Summer Associate, Operations", + "location": "Greater Los Angeles Area", + "start_date": "06/2017", + "end_date": "08/2017", + "duration": "(3 / 12) years", + "description": null, + "primary_job_type": "Internship", + "secondary_job_type": null, + "investing_focus_stage": null, + "investing_focus_sector": null, + "investment_banking_focus": null + }, + { + "company": "WME (William Morris Endeavor)", + "title": "Summer Intern", + "location": "Greater Los Angeles Area", + "start_date": "07/2016", + "end_date": "08/2016", + "duration": "(2 / 12) years", + "description": null, + "primary_job_type": "Internship", + "secondary_job_type": null, + "investing_focus_stage": null, + "investing_focus_sector": null, + "investment_banking_focus": null + }, + { + "company": "Longo Toyota / Scion", + "title": "Summer Intern", + "location": "Greater Los Angeles Area", + "start_date": "06/2013", + "end_date": "08/2015", + "duration": "(27 / 12) years", + "description": null, + "primary_job_type": "Internship", + "secondary_job_type": null, + "investing_focus_stage": null, + "investing_focus_sector": null, + "investment_banking_focus": null + } + ] + } + } \ No newline at end of file diff --git a/tests/test_data/sample_profiles_classified/peter_tagliaferri.json b/tests/test_data/sample_profiles_classified/peter_tagliaferri.json new file mode 100644 index 0000000000000000000000000000000000000000..8269c97701ae59e8de888ed721af886967488365 --- /dev/null +++ b/tests/test_data/sample_profiles_classified/peter_tagliaferri.json @@ -0,0 +1,120 @@ +{ + "general": { + "linkedin_url": "https://www.linkedin.com/in/jeffreybai/", + "first_name": "Peter", + "last_name": "Tagliaferri", + "current_location": "San Francisco Bay Area" + }, + "education": { + "undergraduate_school": "Georgetown University", + "undergraduate_year": 2018, + "graduate_school": null, + "graduate_school_year": null, + "education_history": [ + { + "school": "Georgetown University", + "beginning_year": null, + "ending_year": null, + "degree_type": "Bachelor of Arts - BA, Economics", + "degree_characterization": "Undergraduate (Completed)", + "school_type": "Higher Education", + "school_location": "Washington, DC" + }, + { + "school": "San Ramon Valley High School", + "beginning_year": null, + "ending_year": null, + "degree_type": null, + "degree_characterization": "Primary / Secondary School", + "school_type": "Primary and Secondary School", + "school_location": "Danville, CA" + } + ] + }, + "professional_experience": { + "total_years_of_experience": 6.0, + "experience_by_secondary_job_type": { + "investing": 4.0, + "back_office": null, + "investment_banking": null, + "consulting": null, + "engineering": null, + "entrepreneur_founder": null, + "corpdev_strategy": null, + "Other": null + }, + "linkedin_title": "Software Investor at Accel-KKR", + "experience_history": [ + { + "company": "Accel-KKR", + "title": "Senior Associate", + "location": "Menlo Park, CA", + "start_date": "01/2024", + "end_date": "Current", + "duration": "(8 / 12) years", + "description": null, + "primary_job_type": "Full-time", + "secondary_job_type": "Investing", + "investing_focus_stage": "Private Equity / Buyouts", + "investing_focus_sector": null, + "investment_banking_focus": null + }, + { + "company": "Accel-KKR", + "title": "Investment Professional", + "location": "Menlo Park, CA", + "start_date": "11/2020", + "end_date": "02/2024", + "duration": "3 (4 / 12) years", + "description": "[ ]", + "primary_job_type": "Full-time", + "secondary_job_type": "Investing", + "investing_focus_stage": "Private Equity / Buyouts", + "investing_focus_sector": null, + "investment_banking_focus": null + }, + { + "company": "Stifel Financial Corp.", + "title": "Investment Banking Professional", + "location": "San Francisco, CA", + "start_date": "07/2018", + "end_date": "10/2020", + "duration": "2 ( 4 / 12) years", + "description": "[]", + "primary_job_type": "Full-time", + "secondary_job_type": "Investment Banking", + "investing_focus_stage": "Not Specified", + "investing_focus_sector": null, + "investment_banking_focus": null + }, + { + "company": "Accel-KKR", + "title": null, + "location": "Menlo Park, CA", + "start_date": "06/2017", + "end_date": "08/2017", + "duration": "(3 / 12) years", + "description": "[]", + "primary_job_type": "Internship", + "secondary_job_type": "Investing", + "investing_focus_stage": null, + "investing_focus_sector": null, + "investment_banking_focus": null + }, + { + "company": "Securian Financial Group", + "title": "Analyst", + "location": "Danville, CA", + "start_date": "06/2016", + "end_date": "12/2016", + "duration": "(7 / 12) years", + "description": "[ ]", + "primary_job_type": "Internship", + "secondary_job_type": "Other - [ ]", + "investing_focus_stage": null, + "investing_focus_sector": null, + "investment_banking_focus": null + } + ] + } + } \ No newline at end of file diff --git a/tests/test_data/sample_profiles_classified/siddharth_saxena.json b/tests/test_data/sample_profiles_classified/siddharth_saxena.json new file mode 100644 index 0000000000000000000000000000000000000000..4901f3c7e1f1f7ad3b979c8959b506376e96584f --- /dev/null +++ b/tests/test_data/sample_profiles_classified/siddharth_saxena.json @@ -0,0 +1,176 @@ +{ + "general": { + "linkedin_url": "https://www.linkedin.com/in/siddharth-saxena-08671857/", + "first_name": "Siddharth", + "last_name": "Saxena", + "current_location": null + }, + "education": { + "undergraduate_school": "Brown University", + "undergraduate_year": 2015, + "graduate_school": null, + "graduate_school_year": null, + "education_history": [ + { + "school": "Brown University", + "beginning_year": 2011, + "ending_year": 2015, + "degree_type": "Bachelor of Arts (B.A.), Architectural Studies", + "degree_characterization": "Undergraduate (Completed)", + "school_type": "Higher Education", + "school_location": "Providence, RI" + }, + { + "school": "Horace Mann School", + "beginning_year": 2004, + "ending_year": 2011, + "degree_type": "High School Diploma", + "degree_characterization": "Primary / Secondary School", + "school_type": "Primary and Secondary School", + "school_location": null + } + ] + }, + "professional_experience": { + "total_years_of_experience": 9.0, + "experience_by_secondary_job_type": { + "investing": 2.2, + "back_office": null, + "investment_banking": null, + "consulting": null, + "engineering": null, + "entrepreneur_founder": null, + "corpdev_strategy": null, + "Other": null + }, + "linkedin_title": "Investor @ Vedanta Capital", + "experience_history": [ + { + "company": "Vedanta Capital", + "title": "Investor", + "location": "New York, New York", + "start_date": "04/2024", + "end_date": "Present", + "duration": "(5 / 12) years", + "description": "Investing in start-ups (robotics, defense tech, VR/AR, space, AI/ML, health tech and more), and in venture and growth equity funds.", + "primary_job_type": "Full-time", + "secondary_job_type": "Investing", + "investing_focus_stage": "Multi-stage VC", + "investing_focus_sector": "Generalist", + "investment_banking_focus": null + }, + { + "company": "Vedanta Capital", + "title": "Associate", + "location": "New York, New York", + "start_date": "08/2022", + "end_date": "04/2024", + "duration": "1 (9 / 12) years", + "description": "Investing in start-ups (robotics, defense tech, VR/AR, space, AI/ML, health tech and more), and in venture and growth equity funds.", + "primary_job_type": "Full-time", + "secondary_job_type": "Investing", + "investing_focus_stage": "Multi-stage VC", + "investing_focus_sector": "Generalist", + "investment_banking_focus": null + }, + { + "company": "Carbon Origins Inc.", + "title": "Advisor", + "location": null, + "start_date": "04/2024", + "end_date": "Present", + "duration": "(5 / 12) years", + "description": null, + "primary_job_type": "Advisory / Board / Independent Investor", + "secondary_job_type": "Other", + "investing_focus_stage": null, + "investing_focus_sector": null, + "investment_banking_focus": null + }, + { + "company": "Reactiv", + "title": "Co-Founder & COO", + "location": "Brooklyn, New York", + "start_date": "11/2020", + "end_date": "04/2022", + "duration": "1 (6 / 12) years", + "description": "Reactiv (UnitedHealthcare / Techstars '21) is the virtual clinic for people with chronic joint pain, offering clinician support and interactive experiences to promote healthy movements.", + "primary_job_type": "Full-time", + "secondary_job_type": "Entrepreneur / Founder", + "investing_focus_stage": null, + "investing_focus_sector": null, + "investment_banking_focus": null + }, + { + "company": "Reactiv", + "title": "Consultant, Technical & Product", + "location": "Brooklyn, New York", + "start_date": "12/2019", + "end_date": "10/2020", + "duration": "(11 / 12) years", + "description": null, + "primary_job_type": "Advisory / Board / Independent Investor", + "secondary_job_type": null, + "investing_focus_stage": null, + "investing_focus_sector": null, + "investment_banking_focus": null + }, + { + "company": "Oblix", + "title": "Founder & CEO", + "location": "New York, New York", + "start_date": "06/2015", + "end_date": "10/2020", + "duration": "5 ( 5 / 12) years", + "description": "Oblix is an angel-funded, virtual reality start-up based in Brooklyn, NY, and the developer behind Go Guess, a social, geographic guessing game for the Oculus Rift and HTC Vive. Go Guess is currently live on the Oculus Store, Steam and Viveport.", + "primary_job_type": "Full-time", + "secondary_job_type": "Entrepreneur / Founder", + "investing_focus_stage": null, + "investing_focus_sector": null, + "investment_banking_focus": null + }, + { + "company": "GAROU", + "title": "Acting Chief Strategy Officer", + "location": "New York, New York", + "start_date": "04/2019", + "end_date": "08/2019", + "duration": "(5 / 12) years", + "description": "Acted as Chief Strategy Officer for Garou through a partnership with Oblix. Developed custom VR experiences for clients such as Viacom, Fujitsu and SNCF in entertainment, e-commerce and real estate. Developed and managed the Business Development pipeline. Led Garou's application to Verizon's Built on 5G Challenge, resulting in a $500K award.", + "primary_job_type": "Full-time", + "secondary_job_type": "CorpDev / Strategy", + "investing_focus_stage": null, + "investing_focus_sector": null, + "investment_banking_focus": null + }, + { + "company": "Architizer", + "title": "Intern", + "location": "New York, New York", + "start_date": "06/2014", + "end_date": "08/2014", + "duration": "(3 / 12) years", + "description": "Developed and led the Architecture Genome Project. Collaborated closely with Marc Kushner and TED on The Future of Architecture in 100 Buildings. Systematically identified and routed dirty data from Architizer servers.", + "primary_job_type": "Internship", + "secondary_job_type": "Other", + "investing_focus_stage": null, + "investing_focus_sector": null, + "investment_banking_focus": null + }, + { + "company": "CasualEat", + "title": "Co-Founder", + "location": "Providence, RI", + "start_date": "04/2012", + "end_date": "09/2012", + "duration": "(6 / 12) years", + "description": "Developed a model alongside three other Brown University students to bring an internet-based product to food services businesses in India and the United Arab Emirates. Personally managed a team of Bangalore-based software developers and a Palo Alto-based graphic designer and organized workflow among the founding partners.", + "primary_job_type": "Full-time", + "secondary_job_type": "Entrepreneur / Founder", + "investing_focus_stage": null, + "investing_focus_sector": null, + "investment_banking_focus": null + } + ] + } + } \ No newline at end of file diff --git a/tests/test_data/sample_profiles_classified/zac_mohring.json b/tests/test_data/sample_profiles_classified/zac_mohring.json new file mode 100644 index 0000000000000000000000000000000000000000..18bcefb9dd9fe025c113b4e914661f9ab7bebd71 --- /dev/null +++ b/tests/test_data/sample_profiles_classified/zac_mohring.json @@ -0,0 +1,138 @@ +{ + "general": { + "linkedin_url": "https://www.linkedin.com/in/zachary-mohring/", + "first_name": "Zac", + "last_name": "Mohring", + "current_location": "San Francisco, CA" + }, + "education": { + "undergraduate_school": "Yale University", + "undergraduate_year": 2016, + "graduate_school": "Stanford University", + "graduate_school_year": null, + "education_history": [ + { + "school": "Stanford University", + "beginning_year": null, + "ending_year": null, + "degree_type": "Master of Business Administration - MBA", + "degree_characterization": "MBA", + "school_type": "Higher Education", + "school_location": "Stanford, CA" + }, + { + "school": "Yale Universty", + "beginning_year": null, + "ending_year": null, + "degree_type": "Bachelor of Arts - BA, Ethics, Politics, & Economics", + "degree_characterization": "Undergraduate (Completed)", + "school_type": "Higher Education", + "school_location": "New Haven, CT" + }, + { + "school": "University of Cambridge", + "beginning_year": null, + "ending_year": null, + "degree_type": "Study Abroad", + "degree_characterization": "Undergraduate (Incomplete)", + "school_type": "Research Services", + "school_location": "Cambridge, England" + }, + { + "school": "St. Paul Academy and Summit School", + "beginning_year": null, + "ending_year": null, + "degree_type": "High School Diploma", + "degree_characterization": "Primary / Secondary School", + "school_type": "Primary and Secondary School", + "school_location": "St. Paul, MN" + } + ] + }, + "professional_experience": { + "total_years_of_experience": 8.0, + "experience_by_secondary_job_type": { + "investing": 7.7, + "back_office": null, + "investment_banking": null, + "consulting": null, + "engineering": null, + "entrepreneur_founder": null, + "corpdev_strategy": null, + "Other": null + }, + "linkedin_title": "Altos Ventures", + "experience_history": [ + { + "company": "Altos Ventures", + "title": "Principal", + "location": "Menlo Park, CA", + "start_date": "2022", + "end_date": "Current", + "duration": "2 (8 / 12) years", + "description": null, + "primary_job_type": "Full-time", + "secondary_job_type": "Investing", + "investing_focus_stage": "Multi-stage VC", + "investing_focus_sector": null, + "investment_banking_focus": null + }, + { + "company": "Darlington Partners", + "title": "Analyst", + "location": "San Francisco, CA", + "start_date": "2021", + "end_date": "2019", + "duration": "2 years", + "description": "Darlington Partners is a value-oriented investment partnership that invests in a small number of high-quality companies with a multi-year investment horizon. Most investments are in US public equities, though the fund has a broad investment mandate.", + "primary_job_type": "Full-time", + "secondary_job_type": "Investing", + "investing_focus_stage": "Public Equities", + "investing_focus_sector": null, + "investment_banking_focus": null + }, + { + "company": "Bain Capital", + "title": "Private Equity Associate", + "location": "Boston, MA", + "start_date": "2018", + "end_date": "2019", + "duration": "1 year", + "description": "[ ]", + "primary_job_type": "Full-time", + "secondary_job_type": "Investing", + "investing_focus_stage": "Private Equity / Buyouts", + "investing_focus_sector": null, + "investment_banking_focus": null + }, + { + "company": "Bain Capital", + "title": "Private Equity Analyst", + "location": "Boston, MA", + "start_date": "2016", + "end_date": "2018", + "duration": "2 years", + "description": "[]", + "primary_job_type": "Full-time", + "secondary_job_type": "Investing", + "investing_focus_stage": "Private Equity / Buyouts", + "investing_focus_sector": null, + "investment_banking_focus": null + }, + { + "company": "Bain Capital", + "title": "Private Equity Summer Analyst", + "location": "Boston, MA", + "start_date": "2015", + "end_date": "2015", + "duration": "(3 / 12) years", + "description": "[ ]", + "primary_job_type": "Internship", + "secondary_job_type": "Investing", + "investing_focus_stage": "Private Equity / Buyouts", + "investing_focus_sector": null, + "investment_banking_focus": null + } + ] + } + } \ No newline at end of file diff --git a/tests/test_data/test_data_loader.py b/tests/test_data/test_data_loader.py new file mode 100644 index 0000000000000000000000000000000000000000..9c64d831da51403d258375790779929b33a7a3d3 --- /dev/null +++ b/tests/test_data/test_data_loader.py @@ -0,0 +1,42 @@ +import asyncio +import os + +from vsp.app.scrapers.linkedin_downloader import LinkedinDownloader + + +async def main() -> None: + """ + Main function to fetch Linkedin data for multiple profiles and process saved data. + """ + profiles = [ + "https://www.linkedin.com/in/nicholas-penske-846419120/", + "https://www.linkedin.com/in/eric-armagost-a144904a/", + "https://www.linkedin.com/in/peter-tagliaferri-ba3057113/", + "https://www.linkedin.com/in/zachary-mohring/", + "https://www.linkedin.com/in/jeffreybai/", + "https://www.linkedin.com/in/chansonzhao/", + "https://www.linkedin.com/in/jake-kugler-0371a958/", + "https://www.linkedin.com/in/siddharth-saxena-08671857/", + "https://www.linkedin.com/in/lauren-hipple-84277373/", + "https://www.linkedin.com/in/hansae-catlett-436a9b21", + ] + + linkedin_downloader = LinkedinDownloader() + file_path = os.path.abspath(__file__) + directory = os.path.dirname(file_path) + "/sample_profiles" + tasks = [fetch_profile(linkedin_downloader, directory, profile_url) for profile_url in profiles] + await asyncio.gather(*tasks) + + +async def fetch_profile(linkedin_downloader, directory, profile_url): + profile = await linkedin_downloader.fetch_linkedin_data(profile_url) + json = profile.model_dump_json(indent=2) + file_name = f"{profile.first_name}_{profile.last_name}.json".lower() + file_path = os.path.join(directory, file_name) + + with open(file_path, "w") as f: + f.write(json) + + +if __name__ == "__main__": + asyncio.run(main()) diff --git a/tests/test_harness/enum_classifier_test.py b/tests/test_harness/enum_classifier_test.py new file mode 100644 index 0000000000000000000000000000000000000000..0ce48b17cc838c39cbf2f7dff487a852413be4c8 --- /dev/null +++ b/tests/test_harness/enum_classifier_test.py @@ -0,0 +1,190 @@ +import asyncio +import json +from pathlib import Path +from typing import Any + +from pydantic import BaseModel + +from vsp.app.main import process_linkedin_profile +from vsp.app.model.linkedin.linkedin_models import LinkedinProfile +from vsp.app.model.vsp.vsp_models import VSPProfile +from vsp.shared import logger_factory + +logger = logger_factory.get_logger(__name__) + + +class ComparisonResult(BaseModel): + profile_name: str + correct_enums: int + total_enums: int + accuracy: float + additional_enums_in_actual: int + comparisons: dict[str, Any] + + +def load_profiles() -> dict[str, tuple[LinkedinProfile, VSPProfile]]: + sample_profiles_dir = Path("tests/test_data/sample_profiles") + classified_profiles_dir = Path("tests/test_data/sample_profiles_classified") + profiles = {} + + for profile_file in sample_profiles_dir.glob("*.json"): + name = profile_file.stem + with profile_file.open() as f: + linkedin_data = json.load(f) + linkedin_profile = LinkedinProfile.model_validate(linkedin_data) + + classified_file = classified_profiles_dir / f"{name}.json" + if classified_file.exists(): + with classified_file.open() as f: + classified_data = json.load(f) + classified_profile = VSPProfile.model_validate(classified_data) + + profiles[name] = (linkedin_profile, classified_profile) + + return profiles + + +async def compare_profiles(linkedin_profile: LinkedinProfile, classified_profile: VSPProfile) -> ComparisonResult: + result = await process_linkedin_profile(linkedin_profile) + comparisons = {} + correct_enums = 0 + total_enums = 0 + additional_enums_in_actual = 0 + + # Compare educations + for classified_edu, result_edu in zip(classified_profile.education.education_history, result.classified_educations): + comparisons[f"Education: {classified_edu.school}"] = { + "expected": classified_edu.degree_characterization, + "actual": result_edu.classification.output.value, + "confidence": result_edu.classification.confidence, + "reasoning": result_edu.classification.reasoning, + } + if classified_edu.degree_characterization is not None: + total_enums += 1 + if classified_edu.degree_characterization == result_edu.classification.output.value: + correct_enums += 1 + elif result_edu.classification.output.value is not None: + additional_enums_in_actual += 1 + + # Compare work experiences + for classified_exp, result_exp in zip( + classified_profile.professional_experience.experience_history, result.classified_work_experiences + ): + exp_key = f"Job: {classified_exp.title} at {classified_exp.company}" + comparisons[exp_key] = { + "primary_job_type": { + "expected": classified_exp.primary_job_type, + "actual": result_exp.work_experience_classification.primary_job_type.value, + "confidence": result_exp.work_experience_classification.confidence, + "reasoning": result_exp.work_experience_classification.reasoning, + }, + "secondary_job_type": { + "expected": classified_exp.secondary_job_type, + "actual": result_exp.work_experience_classification.secondary_job_type.value, + "confidence": result_exp.work_experience_classification.confidence, + "reasoning": result_exp.work_experience_classification.reasoning, + }, + } + if classified_exp.primary_job_type is not None: + total_enums += 1 + if classified_exp.primary_job_type == result_exp.work_experience_classification.primary_job_type.value: + correct_enums += 1 + elif result_exp.work_experience_classification.primary_job_type.value is not None: + additional_enums_in_actual += 1 + + if classified_exp.secondary_job_type is not None: + total_enums += 1 + if classified_exp.secondary_job_type == result_exp.work_experience_classification.secondary_job_type.value: + correct_enums += 1 + elif result_exp.work_experience_classification.secondary_job_type.value is not None: + additional_enums_in_actual += 1 + + # Add comparisons for investment banking, investing focus, etc. if available + if result_exp.investment_banking_classification: + comparisons[exp_key]["investment_banking_group"] = { + "expected": classified_exp.investment_banking_focus, + "actual": result_exp.investment_banking_classification.investment_banking_group.value, + "confidence": result_exp.investment_banking_classification.confidence, + "reasoning": result_exp.investment_banking_classification.reasoning, + } + if classified_exp.investment_banking_focus is not None: + total_enums += 1 + if ( + classified_exp.investment_banking_focus + == result_exp.investment_banking_classification.investment_banking_group.value + ): + correct_enums += 1 + elif result_exp.investment_banking_classification.investment_banking_group.value is not None: + additional_enums_in_actual += 1 + + if result_exp.investing_focus_asset_class_classification: + comparisons[exp_key]["investing_focus_asset_class"] = { + "expected": classified_exp.investing_focus_stage, + "actual": result_exp.investing_focus_asset_class_classification.investing_focus_asset_class.value, + "confidence": result_exp.investing_focus_asset_class_classification.confidence, + "reasoning": result_exp.investing_focus_asset_class_classification.reasoning, + } + if classified_exp.investing_focus_stage is not None: + total_enums += 1 + if ( + classified_exp.investing_focus_stage + == result_exp.investing_focus_asset_class_classification.investing_focus_asset_class.value + ): + correct_enums += 1 + elif result_exp.investing_focus_asset_class_classification.investing_focus_asset_class.value is not None: + additional_enums_in_actual += 1 + + if result_exp.investing_focus_sector_classification: + comparisons[exp_key]["investing_focus_sector"] = { + "expected": classified_exp.investing_focus_sector, + "actual": result_exp.investing_focus_sector_classification.investing_focus_sector.value, + "confidence": result_exp.investing_focus_sector_classification.confidence, + "reasoning": result_exp.investing_focus_sector_classification.reasoning, + } + if classified_exp.investing_focus_sector is not None: + total_enums += 1 + if ( + classified_exp.investing_focus_sector + == result_exp.investing_focus_sector_classification.investing_focus_sector.value + ): + correct_enums += 1 + elif result_exp.investing_focus_sector_classification.investing_focus_sector.value is not None: + additional_enums_in_actual += 1 + + accuracy = correct_enums / total_enums if total_enums > 0 else 0 + return ComparisonResult( + profile_name=f"{linkedin_profile.first_name} {linkedin_profile.last_name}", + correct_enums=correct_enums, + total_enums=total_enums, + accuracy=accuracy, + additional_enums_in_actual=additional_enums_in_actual, + comparisons=comparisons, + ) + + +async def run_tests() -> None: + profiles = load_profiles() + results = [] + + for _, (linkedin_profile, classified_profile) in profiles.items(): + result = await compare_profiles(linkedin_profile, classified_profile) + results.append(result) + logger.info( + f"Processed {result.profile_name}: Accuracy {result.accuracy:.2%}, " + f"Additional enums in actual: {result.additional_enums_in_actual}" + ) + + overall_accuracy = sum(r.accuracy for r in results) / len(results) + total_additional_enums = sum(r.additional_enums_in_actual for r in results) + logger.info(f"Overall accuracy: {overall_accuracy:.2%}") + logger.info(f"Total additional enums in actual: {total_additional_enums}") + + # Save detailed results to a JSON file + with open("enum_classifier_results.json", "w") as f: + json.dump([r.model_dump() for r in results], f, indent=2) + + logger.info("Detailed results saved to enum_classifier_results.json") + + +if __name__ == "__main__": + asyncio.run(run_tests()) diff --git a/tests/vsp/app/scrapers/test_integration_linkedin_downloader.py b/tests/vsp/app/scrapers/test_integration_linkedin_downloader.py index 61c4d1c142550c9a254d53a0ed8b6ee3fe92e567..c7699a5bfb5e45649bd998db84e1f6720bde3c87 100644 --- a/tests/vsp/app/scrapers/test_integration_linkedin_downloader.py +++ b/tests/vsp/app/scrapers/test_integration_linkedin_downloader.py @@ -13,7 +13,7 @@ async def test_fetch_linkedin_data_integration(): """ Integration test for LinkedinDownloader. - This test makes an actual network request to fetch the LinkedIn profile of 'navkast'. + This test makes an actual network request to fetch the Linkedin profile of 'navkast'. It requires a valid RapidAPI key to be set in the AWS Parameter Store. Note: This test should be run sparingly to avoid unnecessary API calls and potential rate limiting. @@ -25,7 +25,7 @@ async def test_fetch_linkedin_data_integration(): profile = await downloader.fetch_linkedin_data(linkedin_url) # Log the fetched profile data - logger.info("Fetched LinkedIn profile", first_name=profile.first_name, last_name=profile.last_name) + logger.info("Fetched Linkedin profile", first_name=profile.first_name, last_name=profile.last_name) # Assertions to verify the fetched data assert profile.first_name == "Naveen" diff --git a/uv.lock b/uv.lock index 124866a8013ca6440ec5a9d0bfcff151e74e6946..84ed53116b6c71957b2720da08d6d1ed4362cf75 100644 --- a/uv.lock +++ b/uv.lock @@ -515,6 +515,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c9/fb/108ecd1fe961941959ad0ee4e12ee7b8b1477247f30b1fdfd83ceaf017f0/jupyter_core-5.7.2-py3-none-any.whl", hash = "sha256:4f7315d2f6b4bcf2e3e7cb6e46772eba760ae459cd1f59d29eb57b0a01bd7409", size = 28965 }, ] +[[package]] +name = "markdown-it-py" +version = "3.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mdurl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528 }, +] + [[package]] name = "matplotlib-inline" version = "0.1.7" @@ -527,6 +539,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/8f/8e/9ad090d3553c280a8060fbf6e24dc1c0c29704ee7d1c372f0c174aa59285/matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca", size = 9899 }, ] +[[package]] +name = "mdurl" +version = "0.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979 }, +] + [[package]] name = "multidict" version = "6.0.5" @@ -930,6 +951,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", size = 64928 }, ] +[[package]] +name = "rich" +version = "13.8.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/92/76/40f084cb7db51c9d1fa29a7120717892aeda9a7711f6225692c957a93535/rich-13.8.1.tar.gz", hash = "sha256:8260cda28e3db6bf04d2d1ef4dbc03ba80a824c88b0e7668a0f23126a424844a", size = 222080 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b0/11/dadb85e2bd6b1f1ae56669c3e1f0410797f9605d752d68fb47b77f525b31/rich-13.8.1-py3-none-any.whl", hash = "sha256:1760a3c0848469b97b558fc61c85233e3dafb69c7a071b4d60c38099d3cd4c06", size = 241608 }, +] + [[package]] name = "ruff" version = "0.6.3" @@ -1008,6 +1042,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/bf/65/813fc133609ebcb1299be6a42e5aea99d6344afb35ccb43f67e7daaa3b92/structlog-24.4.0-py3-none-any.whl", hash = "sha256:597f61e80a91cc0749a9fd2a098ed76715a1c8a01f73e336b746504d1aad7610", size = 67180 }, ] +[[package]] +name = "tabulate" +version = "0.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ec/fe/802052aecb21e3797b8f7902564ab6ea0d60ff8ca23952079064155d1ae1/tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c", size = 81090 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f", size = 35252 }, +] + [[package]] name = "template" version = "0.1.0" @@ -1020,7 +1063,9 @@ dependencies = [ { name = "pydantic" }, { name = "pytimeparse" }, { name = "requests" }, + { name = "rich" }, { name = "structlog" }, + { name = "tabulate" }, { name = "tenacity" }, { name = "tomli" }, ] @@ -1058,8 +1103,10 @@ requires-dist = [ { name = "pytest-asyncio", marker = "extra == 'dev'", specifier = ">=0.21.0" }, { name = "pytimeparse", specifier = ">=1.1.8" }, { name = "requests", specifier = ">=2.32.3" }, + { name = "rich", specifier = ">=13.8.1" }, { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.2.0" }, { name = "structlog", specifier = ">=24.4.0" }, + { name = "tabulate", specifier = ">=0.9.0" }, { name = "tenacity", specifier = ">=9.0.0" }, { name = "tomli", specifier = ">=2.0.1" }, { name = "types-requests", marker = "extra == 'dev'", specifier = ">=2.32.0.20240905" },