Spaces:
Running
Running
File size: 2,054 Bytes
cc8a450 ae51d62 b4f3263 d5114e6 ae51d62 d5114e6 cc8a450 ae51d62 d5114e6 ae51d62 d5114e6 ae51d62 1c1651d ae51d62 1c1651d b4f3263 1c1651d b4f3263 1c1651d b4f3263 1c1651d b4f3263 1c1651d b4f3263 1c1651d b4f3263 1c1651d d5114e6 0729a48 d5114e6 b4f3263 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
from fastapi import FastAPI, Response, status
from pydantic import BaseModel
from hypothesis import BaseModelHypothesis
from random_forest_dependencies import RandomForestDependencies
from random_forest_model import RandomForestModel
from main_model import PredictMainModel
import numpy as np
from typing import List
app = FastAPI()
class PredictRequest(BaseModel):
question: str
answer: str
backspace_count: int
typing_duration: int
letter_click_counts: dict[str, int]
class RequestModel(BaseModel):
instances: List[PredictRequest]
@app.get("/health")
async def is_alive():
return Response(status_code=status.HTTP_200_OK)
@app.post("/predict")
async def predict(request: RequestModel):
responses = [process_instance(data) for data in request.instances]
return {"predictions": responses}
def process_instance(data: PredictRequest):
question = data.question
answer = data.answer
backspace_count = data.backspace_count
typing_duration = data.typing_duration
letter_click_counts = data.letter_click_counts
# Data preparation for 1st model
hypothesis = BaseModelHypothesis()
additional_features = hypothesis.calculate_features_dataframe(answer)
# 1st model prediction
main_model = PredictMainModel()
main_model_probability = main_model.predict(
answer, additional_features)
# Data preparation for 2nd model
random_forest_features = RandomForestDependencies()
secondary_model_features = random_forest_features.calculate_features(
answer, main_model_probability, backspace_count, typing_duration, letter_click_counts)
# 2nd model prediction
secondary_model = RandomForestModel()
secondary_model_prediction = secondary_model.predict(
secondary_model_features)
return {
"predicted_class": "AI" if secondary_model_prediction == 1 else "HUMAN",
"details": {
"main_model_probability": str(main_model_probability),
"final_prediction": secondary_model_prediction
}
}
|