Spaces:
Running
Running
from io import BytesIO | |
from dotenv import load_dotenv | |
import os | |
from gamification.objects import SimpleIndividualUserLevel | |
from controller.utils import * | |
from fastapi import FastAPI, File, HTTPException, Header, UploadFile,status | |
from controller.tokenManagement import * | |
from controller.jwtcoding import * | |
from fastapi.responses import JSONResponse | |
import docx | |
import fitz | |
from gamification.routes import gamification | |
from controller.scraper import scrapeCourse | |
import asyncio | |
from google import genai | |
from typing import Optional,List | |
from pydantic import BaseModel | |
import re | |
from bson.json_util import dumps | |
import threading | |
import concurrent.futures | |
from gamification.pointLogic import get_all_simple_points_func,get_dream_job | |
from pydantic import BaseModel | |
from datetime import datetime | |
from bson import ObjectId | |
import os | |
import re | |
from urllib.parse import urlparse | |
from concurrent.futures import ThreadPoolExecutor | |
executor = ThreadPoolExecutor(max_workers=5) | |
load_dotenv() | |
CX = os.getenv("SEARCH_ENGINE_ID") | |
API_KEY = os.getenv("GOOGLE_API_KEY") | |
PINECONE_API_KEY=os.getenv("PINECONE_API_KEY") | |
GEMINI_API_KEY=os.getenv("GEMINI_API_KEY") | |
MONGO_URI=os.getenv("MONGO_URI") | |
class UserBody(BaseModel): | |
firstName: Optional[str] = None | |
lastName: Optional[str] = None | |
email:str | |
password:str | |
class AiAnalysis(BaseModel): | |
query:str | |
class Token(BaseModel): | |
refreshToken:str | |
class RecommendedCourse(BaseModel): | |
courseTitle:Optional[str]=None | |
courseLink:Optional[str]=None | |
duration:Optional[str]=None | |
courseLevel:Optional[str]=None | |
interimRoleBenefit:Optional[str]=None | |
dreamRoleBenefit:Optional[str]=None | |
courseDescription:Optional[str]=None | |
courseProvider:Optional[str]=None | |
class UserCourse(BaseModel): | |
employmentStatus:str | |
interimRole:bool | |
interimRoleOptions:Optional[List[str]]=None | |
dreamRole:str | |
motivation:str | |
learningPreference:str | |
timeCommitmentPerDay:str | |
challenges:list | |
timeframeToAchieveDreamRole:str | |
recommendedCourses: Optional[List[RecommendedCourse]]=None | |
class LeaderBoardRanking(BaseModel): | |
userId:str | |
firstName:str | |
lastName:str | |
totalpoints:float | |
lastUpdated:datetime | |
careerPath:str | |
class Config: | |
json_encoder ={ | |
ObjectId:str | |
} | |
class CourseRecommendation(BaseModel): | |
courseName: str | |
completionTime: str | |
def extract_provider(url): | |
# Parse the URL | |
parsed_url = urlparse(url) | |
# Extract domain and split it to get the main part | |
domain = parsed_url.netloc.split('.')[1] | |
# Extract course name | |
match = re.search(r'/course/([^/]+)/', url) | |
course_name = match.group(1) if match else "Not found" | |
return domain | |
def get_course_func(query): | |
# Example search query | |
results = google_search(query, API_KEY, CX) | |
content=[] | |
if results: | |
for item in results.get('items', []): | |
title = item.get('title') | |
link = item.get('link') | |
snippet = item.get('snippet') | |
provider = extract_provider(link) | |
content_structure={} | |
content_structure["courseTitle"]=title | |
content_structure["courseLink"]=link | |
content_structure["courseSnippet"]= snippet | |
content_structure["scrapedCourseDetails"]= scrapeCourse(url=link) | |
content.append(content_structure) | |
return content | |
def extract_course_info(text: str) -> CourseRecommendation: | |
# Example regex patterns – adjust these as needed based on the response format. | |
course_pattern =r'"coursename":\s*"([^"]+)"' | |
time_pattern = r"(\d+\s*-\s*\d+\s*months)" | |
course_match = re.search(course_pattern, text) | |
time_match = re.search(time_pattern, text) | |
coursename = course_match.group(1).strip() if course_match else "Unknown" | |
completiontime = time_match.group(0).strip() if time_match else "Unknown" | |
return CourseRecommendation(courseName=coursename, completionTime=completiontime) | |