Cachowanie works dla AI

This commit is contained in:
gzub04 2024-06-16 18:04:50 +02:00
parent f702d18251
commit a1f48c2c4f
2 changed files with 63 additions and 8 deletions

View File

@ -0,0 +1,15 @@
### GET request to example server
GET http://127.0.0.1:5000/boop
###
POST http://127.0.0.1:5000/api/v3/AI_recommendations
Content-Type: application/json
[
49026,
155,
312113
]
###

View File

@ -1,8 +1,26 @@
import hashlib
import json
from datetime import datetime
import pandas as pd import pandas as pd
import numpy as np import numpy as np
from ast import literal_eval from ast import literal_eval
from sklearn.feature_extraction.text import CountVectorizer from sklearn.feature_extraction.text import CountVectorizer
from sklearn.metrics.pairwise import cosine_similarity from sklearn.metrics.pairwise import cosine_similarity
from flask import Flask, request, jsonify
from flask_caching import Cache
config = {
"DEBUG": True, # some Flask specific configs
"CACHE_TYPE": "SimpleCache",
"CACHE_DEFAULT_TIMEOUT": 300
}
app = Flask(__name__)
app.config.from_mapping(config)
cache = Cache(app)
def get_director(x): def get_director(x):
@ -104,16 +122,38 @@ class MovieRecommender:
if recommended_id in movie_ids: if recommended_id in movie_ids:
continue continue
if recommended_movies.get(recommended_id) is None: if recommended_movies.get(int(recommended_id)) is None:
recommended_movies[recommended_id] = sim_score / len(movie_ids) recommended_movies[int(recommended_id)] = float(round((sim_score / len(movie_ids)), 4))
else: else:
recommended_movies[recommended_id] += sim_score / len(movie_ids) recommended_movies[int(recommended_id)] += float(round((sim_score / len(movie_ids)), 4))
return recommended_movies return recommended_movies
recommender = MovieRecommender()
recommender.fit('movie_recommendations/datasets/tmdb_5000_credits.csv',
'movie_recommendations/datasets/tmdb_5000_movies.csv')
def make_cache_key():
data = request.get_json()
if isinstance(data, list):
data = sorted(data)
key = hashlib.md5(json.dumps(data).encode('utf-8')).hexdigest()
return key
@app.route("/api/v3/AI_recommendations", methods=["POST"])
@cache.cached(timeout=300, key_prefix=make_cache_key)
def AI_recommendations():
ids = request.get_json()
recommendations = recommender.get_recommendations(ids)
recommendations[0] = datetime.now()
return jsonify(recommendations)
# Przykładowe użycie: # Przykładowe użycie:
if __name__ == "__main__": # if __name__ == "__main__":
recommender = MovieRecommender() # recommender = MovieRecommender()
recommender.fit('datasets/tmdb_5000_credits.csv', 'datasets/tmdb_5000_movies.csv') # recommender.fit('datasets/tmdb_5000_credits.csv', 'datasets/tmdb_5000_movies.csv')
recommendations = recommender.get_recommendations([49026, 155, 312113]) # recommendations = recommender.get_recommendations([49026, 155, 312113])
print(recommendations) # print(recommendations)