Spaces:
No application file
No application file
| # from fastapi import FastAPI | |
| # from fastapi.middleware.cors import CORSMiddleware | |
| # from pydantic import BaseModel | |
| # from sentence_transformers import SentenceTransformer, util | |
| # app = FastAPI() | |
| # app.add_middleware( | |
| # CORSMiddleware, | |
| # allow_origins=["http://localhost:5173"], | |
| # allow_credentials=True, | |
| # allow_methods=["*"], | |
| # allow_headers=["*"], | |
| # ) | |
| # model = SentenceTransformer("sentence-transformers/all-MiniLM-L6-v2") | |
| # class Profile(BaseModel): | |
| # name: str | |
| # budget: float | |
| # lifestyle: dict | |
| # interests: list | |
| # class CompatibilityRequest(BaseModel): | |
| # user_profile: Profile | |
| # candidate_profiles: list[Profile] | |
| # @app.post("/compute_compatibility") | |
| # def compute_compatibility(data: CompatibilityRequest): | |
| # scores = [] | |
| # user_text = f"Budget: {data.user_profile.budget}, Lifestyle: {data.user_profile.lifestyle}, Interests: {', '.join(data.user_profile.interests)}" | |
| # user_embedding = model.encode(user_text, convert_to_tensor=True) | |
| # for candidate in data.candidate_profiles: | |
| # candidate_text = f"Budget: {candidate.budget}, Lifestyle: {candidate.lifestyle}, Interests: {', '.join(candidate.interests)}" | |
| # candidate_embedding = model.encode(candidate_text, convert_to_tensor=True) | |
| # similarity_score = util.pytorch_cos_sim(user_embedding, candidate_embedding).item() | |
| # match_reasons = [] | |
| # if similarity_score > 0.7: | |
| # match_reasons.append("Strong compatibility based on overall profile match") | |
| # elif similarity_score > 0.4: | |
| # match_reasons.append("Moderate compatibility with some common aspects") | |
| # else: | |
| # match_reasons.append("Low compatibility due to differing aspects") | |
| # scores.append({ | |
| # "profile": candidate.name, | |
| # "compatibility": round(similarity_score * 100), | |
| # "matchReasons": match_reasons | |
| # }) | |
| # return {"all_matches": scores} | |
| # if __name__ == "__main__": | |
| # import uvicorn | |
| # uvicorn.run("master:app", host="127.0.0.1", port=8000, reload=True) | |
| from fastapi import FastAPI | |
| from fastapi.middleware.cors import CORSMiddleware | |
| from pydantic import BaseModel | |
| from transformers import pipeline, AutoTokenizer, AutoModelForCausalLM | |
| import torch | |
| app = FastAPI() | |
| app.add_middleware( | |
| CORSMiddleware, | |
| allow_origins=["http://localhost:5173"], | |
| allow_credentials=True, | |
| allow_methods=["*"], | |
| allow_headers=["*"], | |
| ) | |
| model_name = "meta-llama/Meta-Llama-3-8B-Instruct" | |
| tokenizer = AutoTokenizer.from_pretrained(model_name) | |
| model = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype=torch.float16, device_map="auto") | |
| generator = pipeline("text-generation", model=model, tokenizer=tokenizer) | |
| class Profile(BaseModel): | |
| name: str | |
| budget: float | |
| lifestyle: dict | |
| interests: list | |
| class CompatibilityRequest(BaseModel): | |
| user_profile: Profile | |
| candidate_profiles: list[Profile] | |
| def compute_compatibility(data: CompatibilityRequest): | |
| scores = [] | |
| user_text = f"Budget: {data.user_profile.budget}, Lifestyle: {data.user_profile.lifestyle}, Interests: {', '.join(data.user_profile.interests)}" | |
| for candidate in data.candidate_profiles: | |
| candidate_text = f"Budget: {candidate.budget}, Lifestyle: {candidate.lifestyle}, Interests: {', '.join(candidate.interests)}" | |
| prompt = f"Compare the following profiles and rate their compatibility from 0 to 100:\nUser: {user_text}\nCandidate: {candidate_text}\nCompatibility Score:" | |
| response = generator(prompt, max_length=50, do_sample=True) | |
| compatibility_score = int(''.join(filter(str.isdigit, response[0]["generated_text"]))) | |
| scores.append({ | |
| "profile": candidate.name, | |
| "compatibility": compatibility_score, | |
| "matchReasons": f"Generated by Llama-3 based on textual profile similarities" | |
| }) | |
| return {"all_matches": scores} | |
| if __name__ == "__main__": | |
| import uvicorn | |
| uvicorn.run("master:app", host="127.0.0.1", port=8000, reload=True) | |