| from fastapi import FastAPI, HTTPException |
| from fastapi.middleware.cors import CORSMiddleware |
| import google.generativeai as genai |
| import os |
| import requests |
| import pandas as pd |
| import validators |
| from sklearn.feature_extraction.text import TfidfVectorizer |
|
|
| from dotenv import load_dotenv |
| load_dotenv() |
| genai.configure(api_key=os.getenv("GOOGLE_API_KEY")) |
| df=pd.read_csv("salaries.csv") |
|
|
| app = FastAPI() |
|
|
| origins=[ |
| "http://localhost:5173", |
| |
| ] |
|
|
| app.add_middleware( |
| CORSMiddleware, |
| allow_origins=['*'], |
| allow_credentials=True, |
| allow_methods=['*'], |
| allow_headers=['*'] |
| ) |
|
|
| model=genai.GenerativeModel("gemini-2.0-flash-lite") |
|
|
|
|
| df_combined = df.astype(str).apply(lambda x: ' '.join(x), axis=1).tolist() |
|
|
| vectorizer = TfidfVectorizer() |
| X = vectorizer.fit_transform(df_combined) |
|
|
| def genetate_gemini_content(prompt,content): |
| response=model.generate_content([prompt,content]) |
| return response.text |
| |
| |
| work_year = df['work_year'] |
| job_titles = df['job_title'] |
| salaries = df['salary'] |
| experience_level = df['experience_level'] |
| employment_type = df['employment_type'] |
| salary_in_usd = df['salary_in_usd'] |
| company_size = df['company_size'] |
|
|
| |
| df_combined = df.astype(str).apply(lambda x: ' '.join(x), axis=1).tolist() |
|
|
| |
| vectorizer = TfidfVectorizer() |
| X = vectorizer.fit_transform(df_combined) |
|
|
| prompt = f""" |
| |
| I have a dataset with the following salary information: |
| |
| Work Year: {work_year.tolist()} |
| Job Titles: {job_titles.tolist()} |
| Salaries (in USD): {salary_in_usd.tolist()} |
| Experience Level: {experience_level.tolist()} |
| Employment Type: {employment_type.tolist()} |
| Company Size: {company_size.tolist()} |
| |
| Based on this data, can you answer the following question: |
| |
| |
| Please provide a short and direct answer based on the data. No extra explanations are needed, just the answer less than 2 lines and dont use "\ n" or any special charcher other than related to the data . |
| """ |
|
|
| @app.get("/hi") |
| async def ee(): |
| return {"de":"hehe"} |
|
|
| @app.post("/webqa") |
| async def webchat(question:str): |
| try: |
| response=model.generate_content([prompt,question]) |
| print(response.text) |
| return response.text |
| |
| except: |
| raise HTTPException(status_code=500, detail="Internal Server Error") |
| |
|
|
|
|