navkast
commited on
Update location of the VSP module (#1)
Browse files* Move the code up one level
* Fixup startendmixin validation
This view is limited to 50 files because it contains too many changes. Β
See raw diff
- {vsp-data-enrichment/.vscode β .vscode}/settings.json +0 -0
- vsp-data-enrichment/Makefile β Makefile +0 -0
- vsp-data-enrichment/pyproject.toml β pyproject.toml +0 -0
- {vsp-data-enrichment/src β src}/notebooks/data/hansae_catlett.json +0 -0
- {vsp-data-enrichment/src β src}/notebooks/education_classifier.ipynb +1 -1
- {vsp-data-enrichment/src β src}/notebooks/work_experience_classifier.ipynb +67 -48
- {vsp-data-enrichment/src β src}/vsp/__init__.py +0 -0
- {vsp-data-enrichment/src β src}/vsp/app/__init__.py +0 -0
- {vsp-data-enrichment/src β src}/vsp/app/bindings.py +0 -0
- {vsp-data-enrichment/src β src}/vsp/app/education_classifier.py +0 -0
- {vsp-data-enrichment/src β src}/vsp/app/model/linkedin/linkedin_formatters.py +0 -0
- {vsp-data-enrichment/src β src}/vsp/app/model/linkedin/linkedin_models.py +4 -2
- {vsp-data-enrichment/src β src}/vsp/app/prompts/__init__.py +0 -0
- {vsp-data-enrichment/src β src}/vsp/app/prompts/education_classifier/1 - education_classifier_human.txt +0 -0
- {vsp-data-enrichment/src β src}/vsp/app/prompts/education_classifier/1 - education_classifier_system.txt +0 -0
- {vsp-data-enrichment/src β src}/vsp/app/prompts/prompt_loader.py +0 -0
- {vsp-data-enrichment/src β src}/vsp/app/prompts/work_experience_classifier/1 - work_experience_classifier_human.txt +0 -0
- {vsp-data-enrichment/src β src}/vsp/app/prompts/work_experience_classifier/1 - work_experience_classifier_system.txt +0 -0
- {vsp-data-enrichment/src β src}/vsp/app/work_experience_classifier.py +0 -0
- {vsp-data-enrichment/src β src}/vsp/llm/__init__.py +0 -0
- {vsp-data-enrichment/src β src}/vsp/llm/bedrock/__init__.py +0 -0
- {vsp-data-enrichment/src β src}/vsp/llm/bedrock/bedrock.py +0 -0
- {vsp-data-enrichment/src β src}/vsp/llm/bedrock/bedrock_model.py +0 -0
- {vsp-data-enrichment/src β src}/vsp/llm/bedrock/bedrock_rate_limiter.py +0 -0
- {vsp-data-enrichment/src β src}/vsp/llm/llm_service.py +0 -0
- {vsp-data-enrichment/src β src}/vsp/llm/openai/__init__.py +0 -0
- {vsp-data-enrichment/src β src}/vsp/llm/openai/openai.py +0 -0
- {vsp-data-enrichment/src β src}/vsp/llm/openai/openai_model.py +0 -0
- {vsp-data-enrichment/src β src}/vsp/llm/openai/openai_rate_limiter.py +0 -0
- {vsp-data-enrichment/src β src}/vsp/llm/openrouter/__init__.py +0 -0
- {vsp-data-enrichment/src β src}/vsp/llm/prompt.py +0 -0
- {vsp-data-enrichment/src β src}/vsp/llm/prompt_chain.py +0 -0
- {vsp-data-enrichment/src β src}/vsp/llm/prompt_template.py +0 -0
- {vsp-data-enrichment/src β src}/vsp/llm/prompt_text.py +0 -0
- {vsp-data-enrichment/src β src}/vsp/shared/__init__.py +0 -0
- {vsp-data-enrichment/src β src}/vsp/shared/aws_clients.py +0 -0
- {vsp-data-enrichment/src β src}/vsp/shared/config.py +0 -0
- {vsp-data-enrichment/src β src}/vsp/shared/config.toml +0 -0
- {vsp-data-enrichment/src β src}/vsp/shared/logger_factory.py +0 -0
- {vsp-data-enrichment/tests β tests}/__init__.py +0 -0
- {vsp-data-enrichment/tests β tests}/app/__init__.py +0 -0
- {vsp-data-enrichment/tests β tests}/app/prompts/__init__.py +0 -0
- {vsp-data-enrichment/tests β tests}/app/prompts/test_prompt_loader.py +0 -0
- {vsp-data-enrichment/tests β tests}/app/prompts/test_prompts/basic_test/1 - test_human.txt +0 -0
- {vsp-data-enrichment/tests β tests}/app/prompts/test_prompts/basic_test/1 - test_system.txt +0 -0
- {vsp-data-enrichment/tests β tests}/app/prompts/test_prompts/basic_test/2 - test2_human.txt +0 -0
- {vsp-data-enrichment/tests β tests}/app/test_education_classifier.py +0 -0
- {vsp-data-enrichment/tests β tests}/app/test_work_experience_classifier.py +0 -0
- {vsp-data-enrichment/tests β tests}/llm/__ini__.py +0 -0
- {vsp-data-enrichment/tests β tests}/llm/test_integration.py +0 -0
{vsp-data-enrichment/.vscode β .vscode}/settings.json
RENAMED
|
File without changes
|
vsp-data-enrichment/Makefile β Makefile
RENAMED
|
File without changes
|
vsp-data-enrichment/pyproject.toml β pyproject.toml
RENAMED
|
File without changes
|
{vsp-data-enrichment/src β src}/notebooks/data/hansae_catlett.json
RENAMED
|
File without changes
|
{vsp-data-enrichment/src β src}/notebooks/education_classifier.ipynb
RENAMED
|
@@ -129,7 +129,7 @@
|
|
| 129 |
"name": "python",
|
| 130 |
"nbconvert_exporter": "python",
|
| 131 |
"pygments_lexer": "ipython3",
|
| 132 |
-
"version": "3.12.
|
| 133 |
}
|
| 134 |
},
|
| 135 |
"nbformat": 4,
|
|
|
|
| 129 |
"name": "python",
|
| 130 |
"nbconvert_exporter": "python",
|
| 131 |
"pygments_lexer": "ipython3",
|
| 132 |
+
"version": "3.12.5"
|
| 133 |
}
|
| 134 |
},
|
| 135 |
"nbformat": 4,
|
{vsp-data-enrichment/src β src}/notebooks/work_experience_classifier.ipynb
RENAMED
|
@@ -5,12 +5,31 @@
|
|
| 5 |
"execution_count": 1,
|
| 6 |
"metadata": {},
|
| 7 |
"outputs": [],
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 8 |
"source": [
|
| 9 |
"import json\n",
|
| 10 |
"\n",
|
| 11 |
"from vsp.app.model.linkedin.linkedin_models import profile_from_json\n",
|
| 12 |
"\n",
|
| 13 |
-
"with open(\"data/hansae_catlett.json\") as f:\n",
|
| 14 |
" data = json.load(f)\n",
|
| 15 |
" # convert to linkedin profile\n",
|
| 16 |
"\n",
|
|
@@ -19,97 +38,97 @@
|
|
| 19 |
},
|
| 20 |
{
|
| 21 |
"cell_type": "code",
|
| 22 |
-
"execution_count":
|
| 23 |
"metadata": {},
|
| 24 |
"outputs": [
|
| 25 |
{
|
| 26 |
"name": "stdout",
|
| 27 |
"output_type": "stream",
|
| 28 |
"text": [
|
| 29 |
-
"\u001b[2m2024-09-
|
| 30 |
-
"\u001b[2m2024-09-
|
| 31 |
-
"\u001b[2m2024-09-
|
| 32 |
-
"\u001b[2m2024-09-
|
| 33 |
-
"\u001b[2m2024-09-
|
| 34 |
-
"\u001b[2m2024-09-
|
| 35 |
-
"\u001b[2m2024-09-
|
| 36 |
-
"\u001b[2m2024-09-
|
| 37 |
-
"\u001b[2m2024-09-
|
| 38 |
-
"\u001b[2m2024-09-
|
| 39 |
-
"\u001b[2m2024-09-
|
| 40 |
-
"\u001b[2m2024-09-
|
| 41 |
-
"\u001b[2m2024-09-
|
| 42 |
-
"\u001b[2m2024-09-
|
| 43 |
-
"\u001b[2m2024-09-
|
| 44 |
-
"\u001b[2m2024-09-
|
| 45 |
-
"\u001b[2m2024-09-
|
| 46 |
-
"\u001b[2m2024-09-
|
| 47 |
-
"\u001b[2m2024-09-
|
| 48 |
-
"\u001b[2m2024-09-
|
| 49 |
-
"\u001b[2m2024-09-
|
| 50 |
-
"\u001b[2m2024-09-
|
| 51 |
-
"\u001b[2m2024-09-
|
| 52 |
-
"\u001b[2m2024-09-
|
| 53 |
-
"\u001b[2m2024-09-
|
| 54 |
"{\n",
|
| 55 |
" \"primary_job_type\": \"Other\",\n",
|
| 56 |
" \"secondary_job_type\": \"Investing\",\n",
|
| 57 |
" \"confidence\": 0.9,\n",
|
| 58 |
-
" \"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
|
| 59 |
"}\n",
|
| 60 |
"{\n",
|
| 61 |
" \"primary_job_type\": \"Full-time\",\n",
|
| 62 |
" \"secondary_job_type\": \"Investing\",\n",
|
| 63 |
-
" \"confidence\": 0
|
| 64 |
-
" \"reasoning\": \"The work experience
|
| 65 |
"}\n",
|
| 66 |
"{\n",
|
| 67 |
" \"primary_job_type\": \"Full-time\",\n",
|
| 68 |
" \"secondary_job_type\": \"Entrepreneur / Founder\",\n",
|
| 69 |
" \"confidence\": 0.9,\n",
|
| 70 |
-
" \"reasoning\": \"The
|
| 71 |
"}\n",
|
| 72 |
"{\n",
|
| 73 |
" \"primary_job_type\": \"Other\",\n",
|
| 74 |
-
" \"secondary_job_type\": \"
|
| 75 |
" \"confidence\": 0.9,\n",
|
| 76 |
-
" \"reasoning\": \"The
|
| 77 |
"}\n",
|
| 78 |
"{\n",
|
| 79 |
" \"primary_job_type\": \"Other\",\n",
|
| 80 |
-
" \"secondary_job_type\": \"
|
| 81 |
-
" \"confidence\": 0.
|
| 82 |
-
" \"reasoning\": \"The
|
| 83 |
"}\n",
|
| 84 |
"{\n",
|
| 85 |
" \"primary_job_type\": \"Other\",\n",
|
| 86 |
" \"secondary_job_type\": \"Other\",\n",
|
| 87 |
" \"confidence\": 0.9,\n",
|
| 88 |
-
" \"reasoning\": \"The
|
| 89 |
-
"}\n",
|
| 90 |
-
"{\n",
|
| 91 |
-
" \"primary_job_type\": \"Other\",\n",
|
| 92 |
-
" \"secondary_job_type\": \"Consulting\",\n",
|
| 93 |
-
" \"confidence\": 0.8,\n",
|
| 94 |
-
" \"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",
|
| 95 |
"}\n",
|
| 96 |
"{\n",
|
| 97 |
" \"primary_job_type\": \"Full-time\",\n",
|
| 98 |
" \"secondary_job_type\": \"Investing\",\n",
|
| 99 |
" \"confidence\": 0.9,\n",
|
| 100 |
-
" \"reasoning\": \"The candidate's role as a Partner at HOF Capital, which is classified under Venture Capital & Private Equity, indicates a full-time position in a professional
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 101 |
"}\n",
|
| 102 |
"{\n",
|
| 103 |
" \"primary_job_type\": \"Full-time\",\n",
|
| 104 |
" \"secondary_job_type\": \"Investing\",\n",
|
| 105 |
-
" \"confidence\":
|
| 106 |
-
" \"reasoning\": \"The work experience
|
| 107 |
"}\n",
|
| 108 |
"{\n",
|
| 109 |
" \"primary_job_type\": \"Other\",\n",
|
| 110 |
" \"secondary_job_type\": \"Investing\",\n",
|
| 111 |
" \"confidence\": 0.9,\n",
|
| 112 |
-
" \"reasoning\": \"The work experience
|
| 113 |
"}\n"
|
| 114 |
]
|
| 115 |
}
|
|
@@ -152,7 +171,7 @@
|
|
| 152 |
"name": "python",
|
| 153 |
"nbconvert_exporter": "python",
|
| 154 |
"pygments_lexer": "ipython3",
|
| 155 |
-
"version": "3.12.
|
| 156 |
}
|
| 157 |
},
|
| 158 |
"nbformat": 4,
|
|
|
|
| 5 |
"execution_count": 1,
|
| 6 |
"metadata": {},
|
| 7 |
"outputs": [],
|
| 8 |
+
"source": [
|
| 9 |
+
"import os\n",
|
| 10 |
+
"\n",
|
| 11 |
+
"os.getcwd()\n",
|
| 12 |
+
"os.chdir(path=os.getcwd() + \"/../\")"
|
| 13 |
+
]
|
| 14 |
+
},
|
| 15 |
+
{
|
| 16 |
+
"cell_type": "code",
|
| 17 |
+
"execution_count": null,
|
| 18 |
+
"metadata": {},
|
| 19 |
+
"outputs": [],
|
| 20 |
+
"source": []
|
| 21 |
+
},
|
| 22 |
+
{
|
| 23 |
+
"cell_type": "code",
|
| 24 |
+
"execution_count": 2,
|
| 25 |
+
"metadata": {},
|
| 26 |
+
"outputs": [],
|
| 27 |
"source": [
|
| 28 |
"import json\n",
|
| 29 |
"\n",
|
| 30 |
"from vsp.app.model.linkedin.linkedin_models import profile_from_json\n",
|
| 31 |
"\n",
|
| 32 |
+
"with open(\"notebooks/data/hansae_catlett.json\") as f:\n",
|
| 33 |
" data = json.load(f)\n",
|
| 34 |
" # convert to linkedin profile\n",
|
| 35 |
"\n",
|
|
|
|
| 38 |
},
|
| 39 |
{
|
| 40 |
"cell_type": "code",
|
| 41 |
+
"execution_count": 3,
|
| 42 |
"metadata": {},
|
| 43 |
"outputs": [
|
| 44 |
{
|
| 45 |
"name": "stdout",
|
| 46 |
"output_type": "stream",
|
| 47 |
"text": [
|
| 48 |
+
"\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",
|
| 49 |
+
"\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",
|
| 50 |
+
"\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",
|
| 51 |
+
"\u001b[2m2024-09-08 23:16:22\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mRole assumed successfully \u001b[0m\n",
|
| 52 |
+
"\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",
|
| 53 |
+
"\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",
|
| 54 |
+
"\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",
|
| 55 |
+
"\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",
|
| 56 |
+
"\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",
|
| 57 |
+
"\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",
|
| 58 |
+
"\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",
|
| 59 |
+
"\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",
|
| 60 |
+
"\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",
|
| 61 |
+
"\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",
|
| 62 |
+
"\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",
|
| 63 |
+
"\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",
|
| 64 |
+
"\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",
|
| 65 |
+
"\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",
|
| 66 |
+
"\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",
|
| 67 |
+
"\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",
|
| 68 |
+
"\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",
|
| 69 |
+
"\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",
|
| 70 |
+
"\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",
|
| 71 |
+
"\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",
|
| 72 |
+
"\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",
|
| 73 |
"{\n",
|
| 74 |
" \"primary_job_type\": \"Other\",\n",
|
| 75 |
" \"secondary_job_type\": \"Investing\",\n",
|
| 76 |
" \"confidence\": 0.9,\n",
|
| 77 |
+
" \"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",
|
| 78 |
"}\n",
|
| 79 |
"{\n",
|
| 80 |
" \"primary_job_type\": \"Full-time\",\n",
|
| 81 |
" \"secondary_job_type\": \"Investing\",\n",
|
| 82 |
+
" \"confidence\": 1.0,\n",
|
| 83 |
+
" \"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",
|
| 84 |
"}\n",
|
| 85 |
"{\n",
|
| 86 |
" \"primary_job_type\": \"Full-time\",\n",
|
| 87 |
" \"secondary_job_type\": \"Entrepreneur / Founder\",\n",
|
| 88 |
" \"confidence\": 0.9,\n",
|
| 89 |
+
" \"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",
|
| 90 |
"}\n",
|
| 91 |
"{\n",
|
| 92 |
" \"primary_job_type\": \"Other\",\n",
|
| 93 |
+
" \"secondary_job_type\": \"Investing\",\n",
|
| 94 |
" \"confidence\": 0.9,\n",
|
| 95 |
+
" \"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",
|
| 96 |
"}\n",
|
| 97 |
"{\n",
|
| 98 |
" \"primary_job_type\": \"Other\",\n",
|
| 99 |
+
" \"secondary_job_type\": \"Consulting\",\n",
|
| 100 |
+
" \"confidence\": 0.8,\n",
|
| 101 |
+
" \"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",
|
| 102 |
"}\n",
|
| 103 |
"{\n",
|
| 104 |
" \"primary_job_type\": \"Other\",\n",
|
| 105 |
" \"secondary_job_type\": \"Other\",\n",
|
| 106 |
" \"confidence\": 0.9,\n",
|
| 107 |
+
" \"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",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 108 |
"}\n",
|
| 109 |
"{\n",
|
| 110 |
" \"primary_job_type\": \"Full-time\",\n",
|
| 111 |
" \"secondary_job_type\": \"Investing\",\n",
|
| 112 |
" \"confidence\": 0.9,\n",
|
| 113 |
+
" \"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",
|
| 114 |
+
"}\n",
|
| 115 |
+
"{\n",
|
| 116 |
+
" \"primary_job_type\": \"Other\",\n",
|
| 117 |
+
" \"secondary_job_type\": \"Other\",\n",
|
| 118 |
+
" \"confidence\": 0.8,\n",
|
| 119 |
+
" \"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",
|
| 120 |
"}\n",
|
| 121 |
"{\n",
|
| 122 |
" \"primary_job_type\": \"Full-time\",\n",
|
| 123 |
" \"secondary_job_type\": \"Investing\",\n",
|
| 124 |
+
" \"confidence\": 0.9,\n",
|
| 125 |
+
" \"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",
|
| 126 |
"}\n",
|
| 127 |
"{\n",
|
| 128 |
" \"primary_job_type\": \"Other\",\n",
|
| 129 |
" \"secondary_job_type\": \"Investing\",\n",
|
| 130 |
" \"confidence\": 0.9,\n",
|
| 131 |
+
" \"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",
|
| 132 |
"}\n"
|
| 133 |
]
|
| 134 |
}
|
|
|
|
| 171 |
"name": "python",
|
| 172 |
"nbconvert_exporter": "python",
|
| 173 |
"pygments_lexer": "ipython3",
|
| 174 |
+
"version": "3.12.5"
|
| 175 |
}
|
| 176 |
},
|
| 177 |
"nbformat": 4,
|
{vsp-data-enrichment/src β src}/vsp/__init__.py
RENAMED
|
File without changes
|
{vsp-data-enrichment/src β src}/vsp/app/__init__.py
RENAMED
|
File without changes
|
{vsp-data-enrichment/src β src}/vsp/app/bindings.py
RENAMED
|
File without changes
|
{vsp-data-enrichment/src β src}/vsp/app/education_classifier.py
RENAMED
|
File without changes
|
{vsp-data-enrichment/src β src}/vsp/app/model/linkedin/linkedin_formatters.py
RENAMED
|
File without changes
|
{vsp-data-enrichment/src β src}/vsp/app/model/linkedin/linkedin_models.py
RENAMED
|
@@ -44,8 +44,10 @@ class StartEndMixin(BaseSchema):
|
|
| 44 |
|
| 45 |
@field_validator("start", "end", mode="before")
|
| 46 |
@classmethod
|
| 47 |
-
def validate_date(cls, v: DateComponent) -> DateComponent | None:
|
| 48 |
-
if
|
|
|
|
|
|
|
| 49 |
return None
|
| 50 |
return v
|
| 51 |
|
|
|
|
| 44 |
|
| 45 |
@field_validator("start", "end", mode="before")
|
| 46 |
@classmethod
|
| 47 |
+
def validate_date(cls, v: dict[str, str] | DateComponent) -> dict[str, str] | DateComponent | None:
|
| 48 |
+
if isinstance(v, DateComponent):
|
| 49 |
+
return v
|
| 50 |
+
if not v or v.get("year") is None:
|
| 51 |
return None
|
| 52 |
return v
|
| 53 |
|
{vsp-data-enrichment/src β src}/vsp/app/prompts/__init__.py
RENAMED
|
File without changes
|
{vsp-data-enrichment/src β src}/vsp/app/prompts/education_classifier/1 - education_classifier_human.txt
RENAMED
|
File without changes
|
{vsp-data-enrichment/src β src}/vsp/app/prompts/education_classifier/1 - education_classifier_system.txt
RENAMED
|
File without changes
|
{vsp-data-enrichment/src β src}/vsp/app/prompts/prompt_loader.py
RENAMED
|
File without changes
|
{vsp-data-enrichment/src β src}/vsp/app/prompts/work_experience_classifier/1 - work_experience_classifier_human.txt
RENAMED
|
File without changes
|
{vsp-data-enrichment/src β src}/vsp/app/prompts/work_experience_classifier/1 - work_experience_classifier_system.txt
RENAMED
|
File without changes
|
{vsp-data-enrichment/src β src}/vsp/app/work_experience_classifier.py
RENAMED
|
File without changes
|
{vsp-data-enrichment/src β src}/vsp/llm/__init__.py
RENAMED
|
File without changes
|
{vsp-data-enrichment/src β src}/vsp/llm/bedrock/__init__.py
RENAMED
|
File without changes
|
{vsp-data-enrichment/src β src}/vsp/llm/bedrock/bedrock.py
RENAMED
|
File without changes
|
{vsp-data-enrichment/src β src}/vsp/llm/bedrock/bedrock_model.py
RENAMED
|
File without changes
|
{vsp-data-enrichment/src β src}/vsp/llm/bedrock/bedrock_rate_limiter.py
RENAMED
|
File without changes
|
{vsp-data-enrichment/src β src}/vsp/llm/llm_service.py
RENAMED
|
File without changes
|
{vsp-data-enrichment/src β src}/vsp/llm/openai/__init__.py
RENAMED
|
File without changes
|
{vsp-data-enrichment/src β src}/vsp/llm/openai/openai.py
RENAMED
|
File without changes
|
{vsp-data-enrichment/src β src}/vsp/llm/openai/openai_model.py
RENAMED
|
File without changes
|
{vsp-data-enrichment/src β src}/vsp/llm/openai/openai_rate_limiter.py
RENAMED
|
File without changes
|
{vsp-data-enrichment/src β src}/vsp/llm/openrouter/__init__.py
RENAMED
|
File without changes
|
{vsp-data-enrichment/src β src}/vsp/llm/prompt.py
RENAMED
|
File without changes
|
{vsp-data-enrichment/src β src}/vsp/llm/prompt_chain.py
RENAMED
|
File without changes
|
{vsp-data-enrichment/src β src}/vsp/llm/prompt_template.py
RENAMED
|
File without changes
|
{vsp-data-enrichment/src β src}/vsp/llm/prompt_text.py
RENAMED
|
File without changes
|
{vsp-data-enrichment/src β src}/vsp/shared/__init__.py
RENAMED
|
File without changes
|
{vsp-data-enrichment/src β src}/vsp/shared/aws_clients.py
RENAMED
|
File without changes
|
{vsp-data-enrichment/src β src}/vsp/shared/config.py
RENAMED
|
File without changes
|
{vsp-data-enrichment/src β src}/vsp/shared/config.toml
RENAMED
|
File without changes
|
{vsp-data-enrichment/src β src}/vsp/shared/logger_factory.py
RENAMED
|
File without changes
|
{vsp-data-enrichment/tests β tests}/__init__.py
RENAMED
|
File without changes
|
{vsp-data-enrichment/tests β tests}/app/__init__.py
RENAMED
|
File without changes
|
{vsp-data-enrichment/tests β tests}/app/prompts/__init__.py
RENAMED
|
File without changes
|
{vsp-data-enrichment/tests β tests}/app/prompts/test_prompt_loader.py
RENAMED
|
File without changes
|
{vsp-data-enrichment/tests β tests}/app/prompts/test_prompts/basic_test/1 - test_human.txt
RENAMED
|
File without changes
|
{vsp-data-enrichment/tests β tests}/app/prompts/test_prompts/basic_test/1 - test_system.txt
RENAMED
|
File without changes
|
{vsp-data-enrichment/tests β tests}/app/prompts/test_prompts/basic_test/2 - test2_human.txt
RENAMED
|
File without changes
|
{vsp-data-enrichment/tests β tests}/app/test_education_classifier.py
RENAMED
|
File without changes
|
{vsp-data-enrichment/tests β tests}/app/test_work_experience_classifier.py
RENAMED
|
File without changes
|
{vsp-data-enrichment/tests β tests}/llm/__ini__.py
RENAMED
|
File without changes
|
{vsp-data-enrichment/tests β tests}/llm/test_integration.py
RENAMED
|
File without changes
|