daniielyan commited on
Commit
9e0d988
Β·
1 Parent(s): ed44c7c

πŸ” Add debug logging to JobSearchService for Remotive API responses, including URL, parameters, job count, and error handling.

Browse files
.gitignore CHANGED
@@ -1,2 +1,3 @@
1
  .venv
2
- __pycache__
 
 
1
  .venv
2
+ __pycache__
3
+ .env
data/embeddings_metadata.json ADDED
The diff for this file is too large to render. See raw diff
 
data/jobs_cache.json ADDED
The diff for this file is too large to render. See raw diff
 
data/profiles.json ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "test_user_001": {
3
+ "user_id": "test_user_001",
4
+ "resume": "Experienced software developer with 5+ years in web development, API design, and cloud platforms",
5
+ "skills": [
6
+ "Python",
7
+ "JavaScript",
8
+ "React",
9
+ "Node.js",
10
+ "AWS"
11
+ ],
12
+ "salary_wish": "$80,000 - $120,000",
13
+ "career_goals": "Software Engineer seeking remote opportunities in full-stack development",
14
+ "experience_level": null,
15
+ "location": "Remote",
16
+ "education": null,
17
+ "certifications": null,
18
+ "created_at": "2025-06-07 15:09:40.290202",
19
+ "updated_at": "2025-06-07 15:09:40.290541"
20
+ }
21
+ }
job_search_results.json ADDED
@@ -0,0 +1,345 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "success": true,
3
+ "jobs": [
4
+ {
5
+ "id": "adzuna_5208183052",
6
+ "title": "Software Engineer",
7
+ "company": "Stott and May",
8
+ "location": "London, UK",
9
+ "description": "Software Engineer - SC Cleared We're looking for a Software Engineer with strong skills in Node.js, React, and TypeScript to build scalable web applications. You\u2019ll work across the stack, using Docker, Azure Web Apps, and ElasticSearch. Key Responsibilities:Develop full-stack applications with Node.js, React, and TypeScript Build and maintain RESTful APIs and responsive UIs Containerize and deploy apps using Docker and Azure Web Apps Implement and optimize search with ElasticSearch Collaborate \u2026",
10
+ "requirements": "Software Engineer - SC Cleared We're looking for a Software Engineer with strong skills in Node.js, React, and TypeScript to build scalable web applications. You\u2019ll work across the stack, using Docker, Azure Web Apps, and ElasticSearch. Key Responsibilities:Develop full-stack applications with Node.js, React, and TypeScript Build and maintain RESTful APIs and responsive UIs Containerize and deploy apps using Docker and Azure Web Apps Implement and optimize search with ElasticSearch Collaborate \u2026",
11
+ "salary": "1",
12
+ "url": "https://www.adzuna.co.uk/jobs/land/ad/5208183052?se=FD-jwY9D8BGV1lGWTncHCQ&utm_medium=api&utm_source=55ad9cb7&v=86D615C31801EF776C044736D483A06BD11DF397",
13
+ "posted_date": "2025-05-20T22:23:45Z",
14
+ "job_type": "full-time",
15
+ "source": "adzuna",
16
+ "fit_score": 68,
17
+ "match_reasons": [
18
+ "Skills match: React, Node.js",
19
+ "Good match for your experience",
20
+ "Aligns with career goals"
21
+ ]
22
+ },
23
+ {
24
+ "id": "adzuna_5208183052",
25
+ "title": "Software Engineer",
26
+ "company": "Stott and May",
27
+ "location": "London, UK",
28
+ "description": "Software Engineer - SC Cleared We're looking for a Software Engineer with strong skills in Node.js, React, and TypeScript to build scalable web applications. You\u2019ll work across the stack, using Docker, Azure Web Apps, and ElasticSearch. Key Responsibilities:Develop full-stack applications with Node.js, React, and TypeScript Build and maintain RESTful APIs and responsive UIs Containerize and deploy apps using Docker and Azure Web Apps Implement and optimize search with ElasticSearch Collaborate \u2026",
29
+ "requirements": "Software Engineer - SC Cleared We're looking for a Software Engineer with strong skills in Node.js, React, and TypeScript to build scalable web applications. You\u2019ll work across the stack, using Docker, Azure Web Apps, and ElasticSearch. Key Responsibilities:Develop full-stack applications with Node.js, React, and TypeScript Build and maintain RESTful APIs and responsive UIs Containerize and deploy apps using Docker and Azure Web Apps Implement and optimize search with ElasticSearch Collaborate \u2026",
30
+ "salary": "1",
31
+ "url": "https://www.adzuna.co.uk/jobs/land/ad/5208183052?se=FD-jwY9D8BGV1lGWTncHCQ&utm_medium=api&utm_source=55ad9cb7&v=86D615C31801EF776C044736D483A06BD11DF397",
32
+ "posted_date": "2025-05-20T22:23:45Z",
33
+ "job_type": "full-time",
34
+ "source": "adzuna",
35
+ "fit_score": 68,
36
+ "match_reasons": [
37
+ "Skills match: React, Node.js",
38
+ "Good match for your experience",
39
+ "Aligns with career goals"
40
+ ]
41
+ },
42
+ {
43
+ "id": "adzuna_5208183052",
44
+ "title": "Software Engineer",
45
+ "company": "Stott and May",
46
+ "location": "London, UK",
47
+ "description": "Software Engineer - SC Cleared We're looking for a Software Engineer with strong skills in Node.js, React, and TypeScript to build scalable web applications. You\u2019ll work across the stack, using Docker, Azure Web Apps, and ElasticSearch. Key Responsibilities:Develop full-stack applications with Node.js, React, and TypeScript Build and maintain RESTful APIs and responsive UIs Containerize and deploy apps using Docker and Azure Web Apps Implement and optimize search with ElasticSearch Collaborate \u2026",
48
+ "requirements": "Software Engineer - SC Cleared We're looking for a Software Engineer with strong skills in Node.js, React, and TypeScript to build scalable web applications. You\u2019ll work across the stack, using Docker, Azure Web Apps, and ElasticSearch. Key Responsibilities:Develop full-stack applications with Node.js, React, and TypeScript Build and maintain RESTful APIs and responsive UIs Containerize and deploy apps using Docker and Azure Web Apps Implement and optimize search with ElasticSearch Collaborate \u2026",
49
+ "salary": "1",
50
+ "url": "https://www.adzuna.co.uk/jobs/land/ad/5208183052?se=FD-jwY9D8BGV1lGWTncHCQ&utm_medium=api&utm_source=55ad9cb7&v=86D615C31801EF776C044736D483A06BD11DF397",
51
+ "posted_date": "2025-05-20T22:23:45Z",
52
+ "job_type": "full-time",
53
+ "source": "adzuna",
54
+ "fit_score": 68,
55
+ "match_reasons": [
56
+ "Skills match: React, Node.js",
57
+ "Good match for your experience",
58
+ "Aligns with career goals"
59
+ ]
60
+ },
61
+ {
62
+ "id": "adzuna_5225750696",
63
+ "title": "Software Engineer",
64
+ "company": "Harris Global",
65
+ "location": "Bromley, South East London",
66
+ "description": "Harris Global are currently looking for a Full Stack Software Engineer to join our client on a permanent basis. This role will require 3 days per week in the office, with 2 days working from home. Candidates will ideally possess Python, React and Vue.JS skills. Responsibilities will include: Build and maintain full stack web applications that scale well and perform reliably using modern tools and frameworks. Create and integrate RESTful APIs to connect front end interfaces with back-end service\u2026",
67
+ "requirements": "Harris Global are currently looking for a Full Stack Software Engineer to join our client on a permanent basis. This role will require 3 days per week in the office, with 2 days working from home. Candidates will ideally possess Python, React and Vue.JS skills. Responsibilities will include: Build and maintain full stack web applications that scale well and perform reliably using modern tools and frameworks. Create and integrate RESTful APIs to connect front end interfaces with back-end service\u2026",
68
+ "salary": "1",
69
+ "url": "https://www.adzuna.co.uk/jobs/land/ad/5225750696?se=FD-jwY9D8BGV1lGWTncHCQ&utm_medium=api&utm_source=55ad9cb7&v=A456781811625D4049618F922512D01AE53C6928",
70
+ "posted_date": "2025-06-01T04:15:19Z",
71
+ "job_type": "full-time",
72
+ "source": "adzuna",
73
+ "fit_score": 66,
74
+ "match_reasons": [
75
+ "Skills match: Python, React",
76
+ "Good match for your experience",
77
+ "Aligns with career goals"
78
+ ]
79
+ },
80
+ {
81
+ "id": "adzuna_5225750696",
82
+ "title": "Software Engineer",
83
+ "company": "Harris Global",
84
+ "location": "Bromley, South East London",
85
+ "description": "Harris Global are currently looking for a Full Stack Software Engineer to join our client on a permanent basis. This role will require 3 days per week in the office, with 2 days working from home. Candidates will ideally possess Python, React and Vue.JS skills. Responsibilities will include: Build and maintain full stack web applications that scale well and perform reliably using modern tools and frameworks. Create and integrate RESTful APIs to connect front end interfaces with back-end service\u2026",
86
+ "requirements": "Harris Global are currently looking for a Full Stack Software Engineer to join our client on a permanent basis. This role will require 3 days per week in the office, with 2 days working from home. Candidates will ideally possess Python, React and Vue.JS skills. Responsibilities will include: Build and maintain full stack web applications that scale well and perform reliably using modern tools and frameworks. Create and integrate RESTful APIs to connect front end interfaces with back-end service\u2026",
87
+ "salary": "1",
88
+ "url": "https://www.adzuna.co.uk/jobs/land/ad/5225750696?se=FD-jwY9D8BGV1lGWTncHCQ&utm_medium=api&utm_source=55ad9cb7&v=A456781811625D4049618F922512D01AE53C6928",
89
+ "posted_date": "2025-06-01T04:15:19Z",
90
+ "job_type": "full-time",
91
+ "source": "adzuna",
92
+ "fit_score": 66,
93
+ "match_reasons": [
94
+ "Skills match: Python, React",
95
+ "Good match for your experience",
96
+ "Aligns with career goals"
97
+ ]
98
+ },
99
+ {
100
+ "id": "adzuna_5225750696",
101
+ "title": "Software Engineer",
102
+ "company": "Harris Global",
103
+ "location": "Bromley, South East London",
104
+ "description": "Harris Global are currently looking for a Full Stack Software Engineer to join our client on a permanent basis. This role will require 3 days per week in the office, with 2 days working from home. Candidates will ideally possess Python, React and Vue.JS skills. Responsibilities will include: Build and maintain full stack web applications that scale well and perform reliably using modern tools and frameworks. Create and integrate RESTful APIs to connect front end interfaces with back-end service\u2026",
105
+ "requirements": "Harris Global are currently looking for a Full Stack Software Engineer to join our client on a permanent basis. This role will require 3 days per week in the office, with 2 days working from home. Candidates will ideally possess Python, React and Vue.JS skills. Responsibilities will include: Build and maintain full stack web applications that scale well and perform reliably using modern tools and frameworks. Create and integrate RESTful APIs to connect front end interfaces with back-end service\u2026",
106
+ "salary": "1",
107
+ "url": "https://www.adzuna.co.uk/jobs/land/ad/5225750696?se=FD-jwY9D8BGV1lGWTncHCQ&utm_medium=api&utm_source=55ad9cb7&v=A456781811625D4049618F922512D01AE53C6928",
108
+ "posted_date": "2025-06-01T04:15:19Z",
109
+ "job_type": "full-time",
110
+ "source": "adzuna",
111
+ "fit_score": 66,
112
+ "match_reasons": [
113
+ "Skills match: Python, React",
114
+ "Good match for your experience",
115
+ "Aligns with career goals"
116
+ ]
117
+ },
118
+ {
119
+ "id": "adzuna_5219054802",
120
+ "title": "Java Software Engineer",
121
+ "company": "4Square Recruitment Ltd",
122
+ "location": "London, UK",
123
+ "description": "Java Developer required for my manufacturing client in London. This role requires you to work in the office 3 times per week with 2 days at home. My client is looking for a Developer with 3-5 years experience in the following: Java (8) Spring/Spring Boot RESTful APIs MySQL/PostgreSQL Agile Desirable Skills: AWS, Azure or GCP Experience with Microservices architecture React.JS",
124
+ "requirements": "Java Developer required for my manufacturing client in London. This role requires you to work in the office 3 times per week with 2 days at home. My client is looking for a Developer with 3-5 years experience in the following: Java (8) Spring/Spring Boot RESTful APIs MySQL/PostgreSQL Agile Desirable Skills: AWS, Azure or GCP Experience with Microservices architecture React.JS",
125
+ "salary": "0",
126
+ "url": "https://www.adzuna.co.uk/jobs/land/ad/5219054802?se=FD-jwY9D8BGV1lGWTncHCQ&utm_medium=api&utm_source=55ad9cb7&v=97587EC5192CA3904938F242C6E5CF9EDCA2603D",
127
+ "posted_date": "2025-05-27T20:28:24Z",
128
+ "job_type": "full-time",
129
+ "source": "adzuna",
130
+ "fit_score": 56,
131
+ "match_reasons": [
132
+ "Skills match: React, AWS",
133
+ "Aligns with career goals"
134
+ ]
135
+ },
136
+ {
137
+ "id": "adzuna_5219054802",
138
+ "title": "Java Software Engineer",
139
+ "company": "4Square Recruitment Ltd",
140
+ "location": "London, UK",
141
+ "description": "Java Developer required for my manufacturing client in London. This role requires you to work in the office 3 times per week with 2 days at home. My client is looking for a Developer with 3-5 years experience in the following: Java (8) Spring/Spring Boot RESTful APIs MySQL/PostgreSQL Agile Desirable Skills: AWS, Azure or GCP Experience with Microservices architecture React.JS",
142
+ "requirements": "Java Developer required for my manufacturing client in London. This role requires you to work in the office 3 times per week with 2 days at home. My client is looking for a Developer with 3-5 years experience in the following: Java (8) Spring/Spring Boot RESTful APIs MySQL/PostgreSQL Agile Desirable Skills: AWS, Azure or GCP Experience with Microservices architecture React.JS",
143
+ "salary": "0",
144
+ "url": "https://www.adzuna.co.uk/jobs/land/ad/5219054802?se=FD-jwY9D8BGV1lGWTncHCQ&utm_medium=api&utm_source=55ad9cb7&v=97587EC5192CA3904938F242C6E5CF9EDCA2603D",
145
+ "posted_date": "2025-05-27T20:28:24Z",
146
+ "job_type": "full-time",
147
+ "source": "adzuna",
148
+ "fit_score": 56,
149
+ "match_reasons": [
150
+ "Skills match: React, AWS",
151
+ "Aligns with career goals"
152
+ ]
153
+ },
154
+ {
155
+ "id": "adzuna_5219054802",
156
+ "title": "Java Software Engineer",
157
+ "company": "4Square Recruitment Ltd",
158
+ "location": "London, UK",
159
+ "description": "Java Developer required for my manufacturing client in London. This role requires you to work in the office 3 times per week with 2 days at home. My client is looking for a Developer with 3-5 years experience in the following: Java (8) Spring/Spring Boot RESTful APIs MySQL/PostgreSQL Agile Desirable Skills: AWS, Azure or GCP Experience with Microservices architecture React.JS",
160
+ "requirements": "Java Developer required for my manufacturing client in London. This role requires you to work in the office 3 times per week with 2 days at home. My client is looking for a Developer with 3-5 years experience in the following: Java (8) Spring/Spring Boot RESTful APIs MySQL/PostgreSQL Agile Desirable Skills: AWS, Azure or GCP Experience with Microservices architecture React.JS",
161
+ "salary": "0",
162
+ "url": "https://www.adzuna.co.uk/jobs/land/ad/5219054802?se=FD-jwY9D8BGV1lGWTncHCQ&utm_medium=api&utm_source=55ad9cb7&v=97587EC5192CA3904938F242C6E5CF9EDCA2603D",
163
+ "posted_date": "2025-05-27T20:28:24Z",
164
+ "job_type": "full-time",
165
+ "source": "adzuna",
166
+ "fit_score": 56,
167
+ "match_reasons": [
168
+ "Skills match: React, AWS",
169
+ "Aligns with career goals"
170
+ ]
171
+ },
172
+ {
173
+ "id": "adzuna_5238172599",
174
+ "title": "Software Engineer",
175
+ "company": "Zygo People",
176
+ "location": "London, UK",
177
+ "description": "Software Engineer (React & Next.js) Location: London (Hybrid \u2013 2x/month on-site) Salary: \u00a336,625 \u2013 \u00a352,250 Join a global data and insights leader supporting critical industries like energy, agriculture, and weather. They're growing their London-based engineering team to build out a brand-new application within their Energy Division. The environment? Smart, supportive, and full of opportunity for technical and career growth. What You\u2019ll Do You\u2019ll be one of two engineers joining a close-knit, cro\u2026",
178
+ "requirements": "Software Engineer (React & Next.js) Location: London (Hybrid \u2013 2x/month on-site) Salary: \u00a336,625 \u2013 \u00a352,250 Join a global data and insights leader supporting critical industries like energy, agriculture, and weather. They're growing their London-based engineering team to build out a brand-new application within their Energy Division. The environment? Smart, supportive, and full of opportunity for technical and career growth. What You\u2019ll Do You\u2019ll be one of two engineers joining a close-knit, cro\u2026",
179
+ "salary": "1",
180
+ "url": "https://www.adzuna.co.uk/jobs/land/ad/5238172599?se=FD-jwY9D8BGV1lGWTncHCQ&utm_medium=api&utm_source=55ad9cb7&v=EB5D5E34684F520BBE399809889418E9FF326030",
181
+ "posted_date": "2025-06-07T07:57:54Z",
182
+ "job_type": "full-time",
183
+ "source": "adzuna",
184
+ "fit_score": 56,
185
+ "match_reasons": [
186
+ "Skills match: React",
187
+ "Aligns with career goals"
188
+ ]
189
+ },
190
+ {
191
+ "id": "adzuna_5238172599",
192
+ "title": "Software Engineer",
193
+ "company": "Zygo People",
194
+ "location": "London, UK",
195
+ "description": "Software Engineer (React & Next.js) Location: London (Hybrid \u2013 2x/month on-site) Salary: \u00a336,625 \u2013 \u00a352,250 Join a global data and insights leader supporting critical industries like energy, agriculture, and weather. They're growing their London-based engineering team to build out a brand-new application within their Energy Division. The environment? Smart, supportive, and full of opportunity for technical and career growth. What You\u2019ll Do You\u2019ll be one of two engineers joining a close-knit, cro\u2026",
196
+ "requirements": "Software Engineer (React & Next.js) Location: London (Hybrid \u2013 2x/month on-site) Salary: \u00a336,625 \u2013 \u00a352,250 Join a global data and insights leader supporting critical industries like energy, agriculture, and weather. They're growing their London-based engineering team to build out a brand-new application within their Energy Division. The environment? Smart, supportive, and full of opportunity for technical and career growth. What You\u2019ll Do You\u2019ll be one of two engineers joining a close-knit, cro\u2026",
197
+ "salary": "1",
198
+ "url": "https://www.adzuna.co.uk/jobs/land/ad/5238172599?se=FD-jwY9D8BGV1lGWTncHCQ&utm_medium=api&utm_source=55ad9cb7&v=EB5D5E34684F520BBE399809889418E9FF326030",
199
+ "posted_date": "2025-06-07T07:57:54Z",
200
+ "job_type": "full-time",
201
+ "source": "adzuna",
202
+ "fit_score": 56,
203
+ "match_reasons": [
204
+ "Skills match: React",
205
+ "Aligns with career goals"
206
+ ]
207
+ },
208
+ {
209
+ "id": "adzuna_5238172599",
210
+ "title": "Software Engineer",
211
+ "company": "Zygo People",
212
+ "location": "London, UK",
213
+ "description": "Software Engineer (React & Next.js) Location: London (Hybrid \u2013 2x/month on-site) Salary: \u00a336,625 \u2013 \u00a352,250 Join a global data and insights leader supporting critical industries like energy, agriculture, and weather. They're growing their London-based engineering team to build out a brand-new application within their Energy Division. The environment? Smart, supportive, and full of opportunity for technical and career growth. What You\u2019ll Do You\u2019ll be one of two engineers joining a close-knit, cro\u2026",
214
+ "requirements": "Software Engineer (React & Next.js) Location: London (Hybrid \u2013 2x/month on-site) Salary: \u00a336,625 \u2013 \u00a352,250 Join a global data and insights leader supporting critical industries like energy, agriculture, and weather. They're growing their London-based engineering team to build out a brand-new application within their Energy Division. The environment? Smart, supportive, and full of opportunity for technical and career growth. What You\u2019ll Do You\u2019ll be one of two engineers joining a close-knit, cro\u2026",
215
+ "salary": "1",
216
+ "url": "https://www.adzuna.co.uk/jobs/land/ad/5238172599?se=FD-jwY9D8BGV1lGWTncHCQ&utm_medium=api&utm_source=55ad9cb7&v=EB5D5E34684F520BBE399809889418E9FF326030",
217
+ "posted_date": "2025-06-07T07:57:54Z",
218
+ "job_type": "full-time",
219
+ "source": "adzuna",
220
+ "fit_score": 56,
221
+ "match_reasons": [
222
+ "Skills match: React",
223
+ "Aligns with career goals"
224
+ ]
225
+ },
226
+ {
227
+ "id": "adzuna_5219918516",
228
+ "title": "Software Engineer",
229
+ "company": "Executive Facilities",
230
+ "location": "London, UK",
231
+ "description": "Our client is a global software organisation with it\u2019s Uk headquarters based in central London. They are now seeking a Software Engineer for an interesting 6 month contract. Skills Expertise with one or more of: Javascript, Java, .NET, PHP, Node.js, Python, Ruby on rails. BSc/MSc in computer science or equivalent work experience. 5 years experience designing and/or developing web, software, or mobile applications for small business or consumer finance management. Strong relationship building to\u2026",
232
+ "requirements": "Our client is a global software organisation with it\u2019s Uk headquarters based in central London. They are now seeking a Software Engineer for an interesting 6 month contract. Skills Expertise with one or more of: Javascript, Java, .NET, PHP, Node.js, Python, Ruby on rails. BSc/MSc in computer science or equivalent work experience. 5 years experience designing and/or developing web, software, or mobile applications for small business or consumer finance management. Strong relationship building to\u2026",
233
+ "salary": "0",
234
+ "url": "https://www.adzuna.co.uk/jobs/land/ad/5219918516?se=FD-jwY9D8BGV1lGWTncHCQ&utm_medium=api&utm_source=55ad9cb7&v=D68B938D399C3F781BC280D7C29F76A6B95D78B1",
235
+ "posted_date": "2025-05-28T12:38:39Z",
236
+ "job_type": "full-time",
237
+ "source": "adzuna",
238
+ "fit_score": 54,
239
+ "match_reasons": [
240
+ "Skills match: Python, JavaScript, Node.js",
241
+ "Aligns with career goals"
242
+ ]
243
+ },
244
+ {
245
+ "id": "adzuna_5219918516",
246
+ "title": "Software Engineer",
247
+ "company": "Executive Facilities",
248
+ "location": "London, UK",
249
+ "description": "Our client is a global software organisation with it\u2019s Uk headquarters based in central London. They are now seeking a Software Engineer for an interesting 6 month contract. Skills Expertise with one or more of: Javascript, Java, .NET, PHP, Node.js, Python, Ruby on rails. BSc/MSc in computer science or equivalent work experience. 5 years experience designing and/or developing web, software, or mobile applications for small business or consumer finance management. Strong relationship building to\u2026",
250
+ "requirements": "Our client is a global software organisation with it\u2019s Uk headquarters based in central London. They are now seeking a Software Engineer for an interesting 6 month contract. Skills Expertise with one or more of: Javascript, Java, .NET, PHP, Node.js, Python, Ruby on rails. BSc/MSc in computer science or equivalent work experience. 5 years experience designing and/or developing web, software, or mobile applications for small business or consumer finance management. Strong relationship building to\u2026",
251
+ "salary": "0",
252
+ "url": "https://www.adzuna.co.uk/jobs/land/ad/5219918516?se=FD-jwY9D8BGV1lGWTncHCQ&utm_medium=api&utm_source=55ad9cb7&v=D68B938D399C3F781BC280D7C29F76A6B95D78B1",
253
+ "posted_date": "2025-05-28T12:38:39Z",
254
+ "job_type": "full-time",
255
+ "source": "adzuna",
256
+ "fit_score": 54,
257
+ "match_reasons": [
258
+ "Skills match: Python, JavaScript, Node.js",
259
+ "Aligns with career goals"
260
+ ]
261
+ },
262
+ {
263
+ "id": "adzuna_5219918516",
264
+ "title": "Software Engineer",
265
+ "company": "Executive Facilities",
266
+ "location": "London, UK",
267
+ "description": "Our client is a global software organisation with it\u2019s Uk headquarters based in central London. They are now seeking a Software Engineer for an interesting 6 month contract. Skills Expertise with one or more of: Javascript, Java, .NET, PHP, Node.js, Python, Ruby on rails. BSc/MSc in computer science or equivalent work experience. 5 years experience designing and/or developing web, software, or mobile applications for small business or consumer finance management. Strong relationship building to\u2026",
268
+ "requirements": "Our client is a global software organisation with it\u2019s Uk headquarters based in central London. They are now seeking a Software Engineer for an interesting 6 month contract. Skills Expertise with one or more of: Javascript, Java, .NET, PHP, Node.js, Python, Ruby on rails. BSc/MSc in computer science or equivalent work experience. 5 years experience designing and/or developing web, software, or mobile applications for small business or consumer finance management. Strong relationship building to\u2026",
269
+ "salary": "0",
270
+ "url": "https://www.adzuna.co.uk/jobs/land/ad/5219918516?se=FD-jwY9D8BGV1lGWTncHCQ&utm_medium=api&utm_source=55ad9cb7&v=D68B938D399C3F781BC280D7C29F76A6B95D78B1",
271
+ "posted_date": "2025-05-28T12:38:39Z",
272
+ "job_type": "full-time",
273
+ "source": "adzuna",
274
+ "fit_score": 54,
275
+ "match_reasons": [
276
+ "Skills match: Python, JavaScript, Node.js",
277
+ "Aligns with career goals"
278
+ ]
279
+ },
280
+ {
281
+ "id": "adzuna_5222886687",
282
+ "title": "Software Engineer",
283
+ "company": "Gravitas Recruitment Group Ltd",
284
+ "location": "London, UK",
285
+ "description": "Role : Product Engineer Salary range : 70 - 110k ( equity) Location: x3 days pw - Central London (Mon, Tues & Fri) Tech stack includes : React, Typescript, NextJS, Golang, AWS, Docker, Postgres, GraphQL Current team size: x3 Engineers Multiple Product engineers required on a permanent basis for a startup building a collaboration design platform for hardware engineering teams across the globe (think Rocket Ships!). They've raised over 9 mil in Seed funding, profitable, and are looking to close S\u2026",
286
+ "requirements": "Role : Product Engineer Salary range : 70 - 110k ( equity) Location: x3 days pw - Central London (Mon, Tues & Fri) Tech stack includes : React, Typescript, NextJS, Golang, AWS, Docker, Postgres, GraphQL Current team size: x3 Engineers Multiple Product engineers required on a permanent basis for a startup building a collaboration design platform for hardware engineering teams across the globe (think Rocket Ships!). They've raised over 9 mil in Seed funding, profitable, and are looking to close S\u2026",
287
+ "salary": "1",
288
+ "url": "https://www.adzuna.co.uk/jobs/land/ad/5222886687?se=FD-jwY9D8BGV1lGWTncHCQ&utm_medium=api&utm_source=55ad9cb7&v=DAEC2280308896EA35F92F59B6FC15589E4D24CD",
289
+ "posted_date": "2025-05-30T05:13:52Z",
290
+ "job_type": "full-time",
291
+ "source": "adzuna",
292
+ "fit_score": 52,
293
+ "match_reasons": [
294
+ "Skills match: React, AWS",
295
+ "Aligns with career goals"
296
+ ]
297
+ },
298
+ {
299
+ "id": "adzuna_5222886687",
300
+ "title": "Software Engineer",
301
+ "company": "Gravitas Recruitment Group Ltd",
302
+ "location": "London, UK",
303
+ "description": "Role : Product Engineer Salary range : 70 - 110k ( equity) Location: x3 days pw - Central London (Mon, Tues & Fri) Tech stack includes : React, Typescript, NextJS, Golang, AWS, Docker, Postgres, GraphQL Current team size: x3 Engineers Multiple Product engineers required on a permanent basis for a startup building a collaboration design platform for hardware engineering teams across the globe (think Rocket Ships!). They've raised over 9 mil in Seed funding, profitable, and are looking to close S\u2026",
304
+ "requirements": "Role : Product Engineer Salary range : 70 - 110k ( equity) Location: x3 days pw - Central London (Mon, Tues & Fri) Tech stack includes : React, Typescript, NextJS, Golang, AWS, Docker, Postgres, GraphQL Current team size: x3 Engineers Multiple Product engineers required on a permanent basis for a startup building a collaboration design platform for hardware engineering teams across the globe (think Rocket Ships!). They've raised over 9 mil in Seed funding, profitable, and are looking to close S\u2026",
305
+ "salary": "1",
306
+ "url": "https://www.adzuna.co.uk/jobs/land/ad/5222886687?se=FD-jwY9D8BGV1lGWTncHCQ&utm_medium=api&utm_source=55ad9cb7&v=DAEC2280308896EA35F92F59B6FC15589E4D24CD",
307
+ "posted_date": "2025-05-30T05:13:52Z",
308
+ "job_type": "full-time",
309
+ "source": "adzuna",
310
+ "fit_score": 52,
311
+ "match_reasons": [
312
+ "Skills match: React, AWS",
313
+ "Aligns with career goals"
314
+ ]
315
+ },
316
+ {
317
+ "id": "adzuna_5222886687",
318
+ "title": "Software Engineer",
319
+ "company": "Gravitas Recruitment Group Ltd",
320
+ "location": "London, UK",
321
+ "description": "Role : Product Engineer Salary range : 70 - 110k ( equity) Location: x3 days pw - Central London (Mon, Tues & Fri) Tech stack includes : React, Typescript, NextJS, Golang, AWS, Docker, Postgres, GraphQL Current team size: x3 Engineers Multiple Product engineers required on a permanent basis for a startup building a collaboration design platform for hardware engineering teams across the globe (think Rocket Ships!). They've raised over 9 mil in Seed funding, profitable, and are looking to close S\u2026",
322
+ "requirements": "Role : Product Engineer Salary range : 70 - 110k ( equity) Location: x3 days pw - Central London (Mon, Tues & Fri) Tech stack includes : React, Typescript, NextJS, Golang, AWS, Docker, Postgres, GraphQL Current team size: x3 Engineers Multiple Product engineers required on a permanent basis for a startup building a collaboration design platform for hardware engineering teams across the globe (think Rocket Ships!). They've raised over 9 mil in Seed funding, profitable, and are looking to close S\u2026",
323
+ "salary": "1",
324
+ "url": "https://www.adzuna.co.uk/jobs/land/ad/5222886687?se=FD-jwY9D8BGV1lGWTncHCQ&utm_medium=api&utm_source=55ad9cb7&v=DAEC2280308896EA35F92F59B6FC15589E4D24CD",
325
+ "posted_date": "2025-05-30T05:13:52Z",
326
+ "job_type": "full-time",
327
+ "source": "adzuna",
328
+ "fit_score": 52,
329
+ "match_reasons": [
330
+ "Skills match: React, AWS",
331
+ "Aligns with career goals"
332
+ ]
333
+ }
334
+ ],
335
+ "total_found": 18,
336
+ "search_params": {
337
+ "query": "software engineer",
338
+ "location": "london",
339
+ "job_type": "full-time"
340
+ },
341
+ "user_profile": {
342
+ "skills_count": 5,
343
+ "location": "Remote"
344
+ }
345
+ }
pyproject.toml CHANGED
@@ -24,7 +24,8 @@ dependencies = [
24
  "transformers>=4.30.0",
25
  "datasets>=2.14.0",
26
  "aiohttp>=3.8.0",
27
- "typing-extensions>=4.5.0"
 
28
  ]
29
 
30
  [project.optional-dependencies]
 
24
  "transformers>=4.30.0",
25
  "datasets>=2.14.0",
26
  "aiohttp>=3.8.0",
27
+ "typing-extensions>=4.5.0",
28
+ "pydantic-settings>=2.9.1",
29
  ]
30
 
31
  [project.optional-dependencies]
src/config/settings.py CHANGED
@@ -4,7 +4,8 @@ import os
4
  from functools import lru_cache
5
  from typing import Optional
6
 
7
- from pydantic import BaseSettings, Field
 
8
 
9
 
10
  class Settings(BaseSettings):
 
4
  from functools import lru_cache
5
  from typing import Optional
6
 
7
+ from pydantic import Field
8
+ from pydantic_settings import BaseSettings
9
 
10
 
11
  class Settings(BaseSettings):
src/services/job_search_service.py CHANGED
@@ -89,7 +89,7 @@ class JobSearchService:
89
  title = (
90
  title_elem.get_text(strip=True)
91
  if title_elem
92
- else f"Position {i+1}"
93
  )
94
 
95
  company_elem = card.find("span", class_="companyName")
@@ -203,13 +203,19 @@ class JobSearchService:
203
  if job_type:
204
  params["job_type"] = job_type
205
 
 
 
 
206
  response = requests.get(
207
- self.settings.remotive_api_url, params=params, timeout=10
208
  )
209
  response.raise_for_status()
210
  data = response.json()
211
 
212
- for item in data.get("jobs", []):
 
 
 
213
  job = {
214
  "id": f"remotive_{item.get('id')}",
215
  "title": item.get("title", ""),
@@ -224,7 +230,10 @@ class JobSearchService:
224
  "source": "remotive",
225
  }
226
  jobs.append(job)
 
 
227
  except Exception as e:
 
228
  logging.error("Error fetching Remotive jobs: %s", e)
229
 
230
  return jobs
@@ -239,9 +248,7 @@ class JobSearchService:
239
  return jobs
240
 
241
  try:
242
- base_url = (
243
- f"https://api.adzuna.com/v1/api/jobs/{self.settings.adzuna_country}/search/1"
244
- )
245
  params = {
246
  "app_id": self.settings.adzuna_app_id,
247
  "app_key": self.settings.adzuna_app_key,
@@ -250,7 +257,7 @@ class JobSearchService:
250
  "results_per_page": min(self.settings.max_jobs_per_search, 50),
251
  "content-type": "application/json",
252
  }
253
- response = requests.get(base_url, params=params, timeout=10)
254
  response.raise_for_status()
255
  data = response.json()
256
 
 
89
  title = (
90
  title_elem.get_text(strip=True)
91
  if title_elem
92
+ else f"Position {i + 1}"
93
  )
94
 
95
  company_elem = card.find("span", class_="companyName")
 
203
  if job_type:
204
  params["job_type"] = job_type
205
 
206
+ print(f"πŸ” Remotive Debug - URL: {self.settings.remotive_api_url}")
207
+ print(f"πŸ” Remotive Debug - Params: {params}")
208
+
209
  response = requests.get(
210
+ self.settings.remotive_api_url, params=params, timeout=30
211
  )
212
  response.raise_for_status()
213
  data = response.json()
214
 
215
+ remotive_jobs = data.get("jobs", [])
216
+ print(f"πŸ” Remotive Debug - Response: {len(remotive_jobs)} jobs found")
217
+
218
+ for item in remotive_jobs:
219
  job = {
220
  "id": f"remotive_{item.get('id')}",
221
  "title": item.get("title", ""),
 
230
  "source": "remotive",
231
  }
232
  jobs.append(job)
233
+
234
+ print(f"πŸ” Remotive Debug - Processed: {len(jobs)} jobs")
235
  except Exception as e:
236
+ print(f"πŸ” Remotive Debug - Error: {str(e)}")
237
  logging.error("Error fetching Remotive jobs: %s", e)
238
 
239
  return jobs
 
248
  return jobs
249
 
250
  try:
251
+ base_url = f"https://api.adzuna.com/v1/api/jobs/{self.settings.adzuna_country}/search/1"
 
 
252
  params = {
253
  "app_id": self.settings.adzuna_app_id,
254
  "app_key": self.settings.adzuna_app_key,
 
257
  "results_per_page": min(self.settings.max_jobs_per_search, 50),
258
  "content-type": "application/json",
259
  }
260
+ response = requests.get(base_url, params=params, timeout=30)
261
  response.raise_for_status()
262
  data = response.json()
263
 
tests/__init__.py ADDED
@@ -0,0 +1 @@
 
 
1
+ # Tests package
tests/test_job_search.py ADDED
@@ -0,0 +1,105 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from dotenv import load_dotenv
2
+ from src.services.job_search_service import JobSearchService
3
+ from src.services.profile_service import ProfileService
4
+ from src.config import get_settings
5
+ import json
6
+ import os
7
+
8
+ # Load environment variables from .env file
9
+ load_dotenv()
10
+
11
+ # Debug: Check if Adzuna credentials are loaded
12
+ settings = get_settings()
13
+ print(
14
+ f"πŸ” Debug - Adzuna App ID: {'βœ… Set' if settings.adzuna_app_id else '❌ Not set'}"
15
+ )
16
+ print(
17
+ f"πŸ” Debug - Adzuna App Key: {'βœ… Set' if settings.adzuna_app_key else '❌ Not set'}"
18
+ )
19
+ print(f"πŸ” Debug - Adzuna Country: {settings.adzuna_country}")
20
+
21
+ # Environment variables check
22
+ print(
23
+ f"πŸ” Debug - ADZUNA_APP_ID env: {'βœ… Set' if os.getenv('ADZUNA_APP_ID') else '❌ Not set'}"
24
+ )
25
+ print(
26
+ f"πŸ” Debug - ADZUNA_APP_KEY env: {'βœ… Set' if os.getenv('ADZUNA_APP_KEY') else '❌ Not set'}"
27
+ )
28
+
29
+ # Initialize services
30
+ jb = JobSearchService()
31
+ profile_service = ProfileService()
32
+
33
+ # Create a sample user profile first (required for job search)
34
+ user_id = "test_user_001"
35
+ profile_data = {
36
+ "skills": ["Python", "JavaScript", "React", "Node.js", "AWS"],
37
+ "career_goals": "Software Engineer seeking remote opportunities in full-stack development",
38
+ "location": "Remote",
39
+ "resume": "Experienced software developer with 5+ years in web development, API design, and cloud platforms",
40
+ "salary_wish": "$80,000 - $120,000",
41
+ }
42
+
43
+ # Create user profile
44
+ print("Creating user profile...")
45
+ profile_result = profile_service.upsert_profile(user_id, json.dumps(profile_data))
46
+ print(f"Profile created: {profile_result}")
47
+
48
+ # Search parameters
49
+ search_query = "software engineer"
50
+ location = "london"
51
+ job_type = "full-time"
52
+
53
+ print(f"\nπŸ” Searching for '{search_query}' jobs in '{location}' ({job_type})...")
54
+ print("=" * 60)
55
+
56
+ # Run job search (this will fetch from both Remotive and Adzuna)
57
+ search_results = jb.search_jobs(
58
+ user_id=user_id, query=search_query, location=location, job_type=job_type
59
+ )
60
+
61
+ # Display results
62
+ if search_results.get("success"):
63
+ jobs = search_results.get("jobs", [])
64
+ total_found = search_results.get("total_found", 0)
65
+
66
+ print(f"βœ… Found {total_found} jobs")
67
+ print(f"πŸ“Š Search parameters: {search_results.get('search_params', {})}")
68
+
69
+ # Group jobs by source
70
+ remotive_jobs = [job for job in jobs if job.get("source") == "remotive"]
71
+ adzuna_jobs = [job for job in jobs if job.get("source") == "adzuna"]
72
+ sample_jobs = [job for job in jobs if job.get("source") == "sample"]
73
+
74
+ print(f"\nπŸ“ˆ Results breakdown:")
75
+ print(f" β€’ Remotive jobs: {len(remotive_jobs)}")
76
+ print(f" β€’ Adzuna jobs: {len(adzuna_jobs)}")
77
+ print(f" β€’ Sample jobs: {len(sample_jobs)}")
78
+
79
+ # Display top jobs from each source
80
+ print(f"\nπŸ† TOP REMOTIVE JOBS:")
81
+ print("-" * 40)
82
+ for i, job in enumerate(remotive_jobs[:3], 1):
83
+ print(f"{i}. {job['title']} at {job['company']}")
84
+ print(f" πŸ“ {job['location']}")
85
+ print(f" 🎯 Fit Score: {job['fit_score']}%")
86
+ print(f" πŸ”— {job['url']}")
87
+ print()
88
+
89
+ print(f"\nπŸ† TOP ADZUNA JOBS:")
90
+ print("-" * 40)
91
+ for i, job in enumerate(adzuna_jobs[:3], 1):
92
+ print(f"{i}. {job['title']} at {job['company']}")
93
+ print(f" πŸ“ {job['location']}")
94
+ print(f" 🎯 Fit Score: {job['fit_score']}%")
95
+ print(f" πŸ”— {job['url']}")
96
+ print()
97
+
98
+ # Save detailed results to file
99
+ with open("job_search_results.json", "w", encoding="utf-8") as f:
100
+ json.dump(search_results, f, indent=2, default=str)
101
+
102
+ print(f"πŸ’Ύ Detailed results saved to 'job_search_results.json'")
103
+
104
+ else:
105
+ print(f"❌ Search failed: {search_results.get('message', 'Unknown error')}")
tests/test_job_search_debug.py ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from dotenv import load_dotenv
2
+ from src.config import get_settings
3
+ import requests
4
+ import json
5
+
6
+ # Load environment variables from .env file
7
+ load_dotenv()
8
+
9
+
10
+ def test_adzuna_api_variations():
11
+ """Test Adzuna API with different search variations."""
12
+ settings = get_settings()
13
+
14
+ print(f"πŸ” Testing Adzuna API with multiple variations...")
15
+ print(f"πŸ” App ID: {'βœ… Set' if settings.adzuna_app_id else '❌ Not set'}")
16
+ print(f"πŸ” App Key: {'βœ… Set' if settings.adzuna_app_key else '❌ Not set'}")
17
+
18
+ if not settings.adzuna_app_id or not settings.adzuna_app_key:
19
+ print("❌ Missing Adzuna credentials!")
20
+ return
21
+
22
+ # Test different combinations
23
+ test_cases = [
24
+ {"country": "gb", "what": "software engineer", "where": "london"},
25
+ {"country": "gb", "what": "python developer", "where": "london"},
26
+ {"country": "gb", "what": "software", "where": ""},
27
+ {"country": "us", "what": "software engineer", "where": "remote"},
28
+ {"country": "us", "what": "python", "where": "new york"},
29
+ {"country": "gb", "what": "", "where": "london"}, # Just location search
30
+ ]
31
+
32
+ for i, test_case in enumerate(test_cases, 1):
33
+ print(
34
+ f"\nπŸ“‹ Test {i}: Country={test_case['country']}, What='{test_case['what']}', Where='{test_case['where']}'"
35
+ )
36
+
37
+ try:
38
+ base_url = (
39
+ f"https://api.adzuna.com/v1/api/jobs/{test_case['country']}/search/1"
40
+ )
41
+ params = {
42
+ "app_id": settings.adzuna_app_id,
43
+ "app_key": settings.adzuna_app_key,
44
+ "what": test_case["what"],
45
+ "where": test_case["where"],
46
+ "results_per_page": 5,
47
+ "content-type": "application/json",
48
+ }
49
+
50
+ response = requests.get(base_url, params=params, timeout=10)
51
+
52
+ if response.status_code == 200:
53
+ data = response.json()
54
+ results = data.get("results", [])
55
+ count = data.get("count", 0)
56
+ print(
57
+ f" βœ… Status: {response.status_code} | Found: {len(results)} jobs | Total available: {count}"
58
+ )
59
+
60
+ if results:
61
+ sample_job = results[0]
62
+ print(
63
+ f" πŸ“‹ Sample: '{sample_job.get('title', 'N/A')}' at '{sample_job.get('company', {}).get('display_name', 'N/A')}' in '{sample_job.get('location', {}).get('display_name', 'N/A')}'"
64
+ )
65
+ break # Found some results, stop testing
66
+ else:
67
+ print(
68
+ f" ❌ Status: {response.status_code} | Error: {response.text[:100]}"
69
+ )
70
+
71
+ except Exception as e:
72
+ print(f" πŸ’₯ Exception: {str(e)}")
73
+
74
+
75
+ if __name__ == "__main__":
76
+ test_adzuna_api_variations()
tests/test_remotive_debug.py ADDED
@@ -0,0 +1,108 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from dotenv import load_dotenv
2
+ from src.config import get_settings
3
+ import requests
4
+ import json
5
+ import time
6
+
7
+ # Load environment variables from .env file
8
+ load_dotenv()
9
+
10
+
11
+ def test_remotive_api_directly():
12
+ """Test Remotive API directly to debug timeout issues."""
13
+ settings = get_settings()
14
+
15
+ print(f"πŸ” Testing Remotive API directly...")
16
+ print(f"🌐 API URL: {settings.remotive_api_url}")
17
+
18
+ # Test different search parameters and timeouts
19
+ test_cases = [
20
+ {"search": "software engineer", "location": "london", "timeout": 30},
21
+ {"search": "python", "location": "remote", "timeout": 30},
22
+ {"search": "software", "location": "", "timeout": 30}, # No location filter
23
+ {"search": "", "location": "", "timeout": 30}, # No filters - get all jobs
24
+ ]
25
+
26
+ for i, test_case in enumerate(test_cases, 1):
27
+ print(
28
+ f"\nπŸ“‹ Test {i}: search='{test_case['search']}', location='{test_case['location']}', timeout={test_case['timeout']}s"
29
+ )
30
+
31
+ try:
32
+ params = {}
33
+ if test_case["search"]:
34
+ params["search"] = test_case["search"]
35
+ if test_case["location"]:
36
+ params["location"] = test_case["location"]
37
+
38
+ print(f" πŸ“‹ Parameters: {params}")
39
+
40
+ start_time = time.time()
41
+ response = requests.get(
42
+ settings.remotive_api_url, params=params, timeout=test_case["timeout"]
43
+ )
44
+ end_time = time.time()
45
+
46
+ response_time = end_time - start_time
47
+ print(f" ⏱️ Response time: {response_time:.2f}s")
48
+
49
+ if response.status_code == 200:
50
+ data = response.json()
51
+ jobs = data.get("jobs", [])
52
+ print(f" βœ… Status: {response.status_code} | Found: {len(jobs)} jobs")
53
+
54
+ if jobs:
55
+ sample_job = jobs[0]
56
+ print(
57
+ f" πŸ“‹ Sample: '{sample_job.get('title', 'N/A')}' at '{sample_job.get('company_name', 'N/A')}' in '{sample_job.get('candidate_required_location', 'N/A')}'"
58
+ )
59
+ break # Found some results, stop testing
60
+ else:
61
+ print(f" ⚠️ Response OK but no jobs in results")
62
+ print(f" πŸ“„ Response keys: {list(data.keys())}")
63
+
64
+ else:
65
+ print(
66
+ f" ❌ Status: {response.status_code} | Error: {response.text[:100]}"
67
+ )
68
+
69
+ except requests.exceptions.Timeout:
70
+ print(f" ⏱️ TIMEOUT after {test_case['timeout']}s")
71
+ except Exception as e:
72
+ print(f" πŸ’₯ Exception: {str(e)}")
73
+
74
+
75
+ def test_remotive_simple():
76
+ """Simple test without any parameters."""
77
+ settings = get_settings()
78
+
79
+ print(f"\nπŸ” Testing Remotive API with no parameters (should be fastest)...")
80
+
81
+ try:
82
+ start_time = time.time()
83
+ response = requests.get(settings.remotive_api_url, timeout=30)
84
+ end_time = time.time()
85
+
86
+ response_time = end_time - start_time
87
+ print(f"⏱️ Response time: {response_time:.2f}s")
88
+
89
+ if response.status_code == 200:
90
+ data = response.json()
91
+ jobs = data.get("jobs", [])
92
+ print(f"βœ… Success! Found {len(jobs)} total jobs available")
93
+
94
+ if jobs:
95
+ print(
96
+ f"πŸ“‹ First job: '{jobs[0].get('title', 'N/A')}' at '{jobs[0].get('company_name', 'N/A')}'"
97
+ )
98
+ else:
99
+ print(f"❌ Status: {response.status_code}")
100
+ print(f"πŸ“„ Response: {response.text[:200]}")
101
+
102
+ except Exception as e:
103
+ print(f"πŸ’₯ Exception: {str(e)}")
104
+
105
+
106
+ if __name__ == "__main__":
107
+ test_remotive_simple()
108
+ test_remotive_api_directly()
uv.lock CHANGED
@@ -891,6 +891,7 @@ dependencies = [
891
  { name = "openai" },
892
  { name = "pandas" },
893
  { name = "pydantic" },
 
894
  { name = "python-dotenv" },
895
  { name = "python-multipart" },
896
  { name = "requests" },
@@ -928,6 +929,7 @@ requires-dist = [
928
  { name = "openai", specifier = ">=1.0.0" },
929
  { name = "pandas", specifier = ">=2.0.0" },
930
  { name = "pydantic", specifier = ">=2.0.0" },
 
931
  { name = "pytest", marker = "extra == 'dev'", specifier = ">=7.0.0" },
932
  { name = "python-dotenv", specifier = ">=1.0.0" },
933
  { name = "python-multipart", specifier = ">=0.0.6" },
 
891
  { name = "openai" },
892
  { name = "pandas" },
893
  { name = "pydantic" },
894
+ { name = "pydantic-settings" },
895
  { name = "python-dotenv" },
896
  { name = "python-multipart" },
897
  { name = "requests" },
 
929
  { name = "openai", specifier = ">=1.0.0" },
930
  { name = "pandas", specifier = ">=2.0.0" },
931
  { name = "pydantic", specifier = ">=2.0.0" },
932
+ { name = "pydantic-settings", specifier = ">=2.9.1" },
933
  { name = "pytest", marker = "extra == 'dev'", specifier = ">=7.0.0" },
934
  { name = "python-dotenv", specifier = ">=1.0.0" },
935
  { name = "python-multipart", specifier = ">=0.0.6" },