import gradio as gr import hopsworks import joblib import pandas as pd features = ['work_year', 'experience_level', 'company_size', 'eur', 'gbp', 'usd', 'engineer', 'scientist', 'research', 'analyst', 'analytics_engineer', 'applied_scientist', 'bi_developer', 'business_intelligence_analyst', 'business_intelligence_engineer', 'data_analyst', 'data_architect', 'data_engineer', 'data_manager', 'data_science_consultant', 'data_science_manager', 'data_scientist', 'ml_engineer', 'machine_learning_engineer', 'machine_learning_scientist', 'research_analyst', 'research_engineer', 'research_scientist', 'gdp', 'cpi'] labels = ['(16454.999, 122000.0]', '(122000.0, 170000.0]', '(170000.0, 329700.0]'] project = hopsworks.login() fs = project.get_feature_store() mr = project.get_model_registry() model = mr.get_model("salary_model", version=5) model_dir = model.download() model = joblib.load(model_dir + "/model.pkl") print("Model downloaded") import requests def get_gdp_by_country_code(country_code, year=2023, index='FP.CPI.TOTL'): # World Bank API endpoint for GDP data api_url = f'http://api.worldbank.org/v2/country/{country_code}/indicator/{index}?data={year}&format=json' # Make a GET request to the API response = requests.get(api_url) # Check if the request was successful (status code 200) if response.status_code == 200: # Parse the JSON response data = response.json() # Extract the GDP value from the response gdp_value = data[1][0]['value'] if data[1] else None return gdp_value else: # If the request was not successful, print an error message print(f"Error: Unable to fetch data. Status code: {response.status_code}") return None def salary(work_year, experience_level, company_size, currency, job_title, country)-> str: other_param = {} other_param['gdp'] = get_gdp_by_country_code(country, work_year, 'NY.GDP.MKTP.CD') other_param['cpi'] = get_gdp_by_country_code(country, work_year, 'FP.CPI.TOTL') jobs = ['analytics_engineer', 'applied_scientist', 'bi_developer', 'business_intelligence_analyst', 'business_intelligence_engineer', 'data_analyst', 'data_architect', 'data_engineer', 'data_manager', 'data_science_consultant', 'data_science_manager', 'data_scientist', 'ml_engineer', 'machine_learning_engineer', 'machine_learning_scientist', 'research_analyst', 'research_engineer', 'research_scientist'] jobs_flag ={} for name in jobs: if name == job_title.lower().replace(' ', '_'): jobs_flag[name] = True else: jobs_flag[name] = False role = [ 'engineer', 'scientist', 'research', 'analyst' ] role_flag = {} for name in role: if role in job_title.lower(): role_flag[name]= True else: role_flag[name] = False currency_flag = { 'eur': False, 'gbp': False, 'usd': False } currency_flag[currency.lower()] = True company_size_dic = { 'S': 0, 'M': 1, 'L': 2, } other_param['company_size'] = company_size_dic[company_size] experience_level_map = { 'EN': 0, 'MI': 1, 'SE': 2, 'EX': 3 } other_param['experience_level'] = experience_level_map[experience_level] params = {} params.update(other_param) params.update(jobs_flag) params.update(currency_flag) params.update(role_flag) df = pd.DataFrame(params) print("Predicting") print(df) res = model.predict(df) print(f"{labels[res[0]]} $") return f"{labels[res[0]]} $" job_title_options = [ 'Analytics Engineer', 'Applied Scientist', 'BI Developer', 'Business Intelligence Analyst', 'Business Intelligence Engineer', 'Data Analyst', 'Data Architect', 'Data Engineer', 'Data Manager', 'Data Science Consultant', 'Data Science Manager', 'Data Scientist', 'ML Engineer', 'Machine Learning Engineer', 'Machine Learning Scientist', 'Research Analyst', 'Research Engineer', 'Research Scientist' ] demo = gr.Interface( fn=salary, title="Salary prediction", description="Prediction of the salary in USD", allow_flagging="never", inputs=[ gr.components.Number(label='work_year'), gr.components.Select(label='experience_level', options=['EN', 'MI', 'SE', 'EX']), gr.components.Select(label='company_size', options=['S', 'M', 'L']), gr.components.Select(label='currency', options=['EUR', 'GBP', 'USD']), gr.components.Select(label='job_title', options=job_title_options), gr.components.TextInput(label='country') ], outputs=gr.Text()) demo.launch(debug=True)