Max Bushuev
commited on
Commit
•
cf509fc
1
Parent(s):
2751beb
- __pycache__/app.cpython-39.pyc +0 -0
- __pycache__/main.cpython-39.pyc +0 -0
- api/__pycache__/base_router.cpython-39.pyc +0 -0
- api/__pycache__/ml.cpython-39.pyc +0 -0
- api/__pycache__/prediction.cpython-39.pyc +0 -0
- api/base_router.py +11 -0
- api/prediction.py +23 -0
- app.py +19 -0
- core/__pycache__/settings.cpython-39.pyc +0 -0
- core/settings.py +2 -0
- main.py +9 -0
- models/__pycache__/prediction.cpython-39.pyc +0 -0
- models/prediction.py +12 -0
- repositories/__pycache__/answers_repository.cpython-39.pyc +0 -0
- repositories/__pycache__/repository.cpython-39.pyc +0 -0
- repositories/answers_repository.py +21 -0
- repositories/intents_repository.py +13 -0
- repositories/repository.py +4 -0
- requirements.txt +5 -0
- services/__pycache__/answers_service.cpython-39.pyc +0 -0
- services/answers_service.py +14 -0
- services/intents_service.py +8 -0
__pycache__/app.cpython-39.pyc
ADDED
Binary file (487 Bytes). View file
|
|
__pycache__/main.cpython-39.pyc
ADDED
Binary file (807 Bytes). View file
|
|
api/__pycache__/base_router.cpython-39.pyc
ADDED
Binary file (457 Bytes). View file
|
|
api/__pycache__/ml.cpython-39.pyc
ADDED
Binary file (694 Bytes). View file
|
|
api/__pycache__/prediction.cpython-39.pyc
ADDED
Binary file (920 Bytes). View file
|
|
api/base_router.py
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from fastapi import APIRouter
|
2 |
+
from api import prediction
|
3 |
+
|
4 |
+
|
5 |
+
base_router = APIRouter()
|
6 |
+
base_router.include_router(prediction.router)
|
7 |
+
|
8 |
+
|
9 |
+
@base_router.get('/', name='Default page')
|
10 |
+
async def default():
|
11 |
+
return 'Привет!'
|
api/prediction.py
ADDED
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from transformers import pipeline
|
2 |
+
import os
|
3 |
+
from fastapi import APIRouter
|
4 |
+
from models.prediction import Prediction
|
5 |
+
|
6 |
+
from services.answers_service import AnswersService
|
7 |
+
router = APIRouter(
|
8 |
+
prefix='/prediction',
|
9 |
+
tags=['prediction'],
|
10 |
+
)
|
11 |
+
|
12 |
+
|
13 |
+
nlp_task = os.getenv('NLP_TASK')
|
14 |
+
model_name = os.getenv('MODEL')
|
15 |
+
model = pipeline(nlp_task, model=model_name)
|
16 |
+
|
17 |
+
|
18 |
+
@router.post("/get_prediction", name='Получение предсказания модели')
|
19 |
+
def get_prediction(message_from_user: str):
|
20 |
+
output = model(message_from_user)
|
21 |
+
prediction = Prediction.from_output(dictionary=output[0])
|
22 |
+
answer = AnswersService.get_answer_by_id(prediction=prediction)
|
23 |
+
return answer
|
app.py
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from fastapi import FastAPI
|
2 |
+
from fastapi.middleware.cors import CORSMiddleware
|
3 |
+
|
4 |
+
from api.base_router import base_router
|
5 |
+
|
6 |
+
|
7 |
+
app = FastAPI(
|
8 |
+
docs_url='/docs',
|
9 |
+
)
|
10 |
+
|
11 |
+
app.include_router(base_router)
|
12 |
+
|
13 |
+
app.add_middleware(
|
14 |
+
CORSMiddleware,
|
15 |
+
allow_origins=["*"],
|
16 |
+
allow_credentials=True,
|
17 |
+
allow_methods=["*"],
|
18 |
+
allow_headers=["*"],
|
19 |
+
)
|
core/__pycache__/settings.cpython-39.pyc
ADDED
Binary file (323 Bytes). View file
|
|
core/settings.py
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
1 |
+
class Config:
|
2 |
+
threshold = 0.5
|
main.py
ADDED
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import uvicorn
|
2 |
+
from dotenv import load_dotenv
|
3 |
+
|
4 |
+
if __name__ == '__main__':
|
5 |
+
load_dotenv()
|
6 |
+
uvicorn.run(
|
7 |
+
'app:app',
|
8 |
+
reload=True,
|
9 |
+
)
|
models/__pycache__/prediction.cpython-39.pyc
ADDED
Binary file (866 Bytes). View file
|
|
models/prediction.py
ADDED
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
class Prediction:
|
2 |
+
def __init__(self, label: str, score: float):
|
3 |
+
self.label = label
|
4 |
+
self.score = score
|
5 |
+
|
6 |
+
@staticmethod
|
7 |
+
def from_output(dictionary: dict):
|
8 |
+
return Prediction(Prediction.get_label(dictionary["label"]), dictionary["score"])
|
9 |
+
|
10 |
+
@staticmethod
|
11 |
+
def get_label(label: str):
|
12 |
+
return int(label.split('_')[1])
|
repositories/__pycache__/answers_repository.cpython-39.pyc
ADDED
Binary file (6.48 kB). View file
|
|
repositories/__pycache__/repository.cpython-39.pyc
ADDED
Binary file (479 Bytes). View file
|
|
repositories/answers_repository.py
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from repositories.repository import Repository
|
2 |
+
|
3 |
+
|
4 |
+
class AnswersRepository(Repository):
|
5 |
+
|
6 |
+
answers = ["Общее количество бюджетных мест составляет 2 598 по 90 программам бакалавриата, специалитета и магистратуры. Из них на очной форме обучения: 1 724 – бакалавриат, 518 – магистратура, 296 – специалитет. 60 мест (42 – бакалавриат, 18 – магистратура) выделены для очно-заочной (вечерней) формы обучения. Еще 150 мест выделено в колледже технического университета – там доступно 9 специальностей и 1 профессия. Распределение мест представлено в информационных бюллетенях.",
|
7 |
+
"Среди испытаний: информационные технологии; безопасность жизнедеятельности; метрология, стандартизация и сертификация; история изобразительного искусства; основы педагогики и психологии; менеджмент; экономика организации.",
|
8 |
+
"Молодые люди, имеющие гражданство РФ и получившие среднее профессиональное образование, проходят вступительные испытания по предметам профессиональной направленности и по русскому языку либо по результатам ЕГЭ общеобразовательных предметов.",
|
9 |
+
"Абитуриенты могут получить дополнительные баллы за различные достижения, такие как аттестат или диплом с отличием, высокий балл по ЕГЭ или вступительным испытаниям, а также за знаки ГТО (золотой, серебряный, бронзовый). В этом году расширился перечень способов подтверждения достижений, и награды могут быть проверены онлайн. В общей сложности, абитуриенты могут получить до 10 дополнительных баллов, учитываемых при поступлении на бюджетное место. Полный список индивидуальных достижений доступен на сайте ОмГТУ в разделе «Абитуриенту».",
|
10 |
+
"Абитуриент политеха вправе подать документы на 5 направлений подготовки бакалавриата и программ специалитета. Он может участвовать в конкурсе и на бюджет, и на коммерческое место, если предусмотрены обе формы финансирования.",
|
11 |
+
"ОмГТУ имеет 6 общежитий, всего 2,374 спальных мест. Общежития предоставляются студентам и аспирантам с гражданством РФ, не имеющим омской прописки, а также иностранным студентам на время обучения. Иногородние студенты заочной формы обучения могут воспользоваться общежитием во время сессии и сдачи выпускных работ при наличии свободных мест. Также иногородние абитуриенты могут получить общежитие на время вступительных испытаний.",
|
12 |
+
"Необходимо подготовить следующие документы: документ, удостоверяющий личность; документ об образовании; СНИЛС (для граждан РФ); фото в электронном виде; документы об особых правах; индивидуальные достижения. Подать документы можно: лично в приемной комиссии (пр. Мира, 11, корпус 8, кабинет 115), онлайн через личный кабинет на сайте ОмГТУ во вкладке «Абитуриенту», с помощью суперсервиса «Поступление в вуз онлайн», с помощью почты/курьерской доставки на адрес приемной комиссии. ",
|
13 |
+
"Приемная кампания завершится 20 июля для тех, кто поступает по направлениям подготовки с дополнительными вступительными испытаниями и по результатам вступительных испытаний. Для абитуриентов, поступающих по результатам ЕГЭ, срок окончания - 25 июля. Абитуриенты магистратуры на бюджетные места могут подавать документы до 10 августа.",
|
14 |
+
"Нет, очередность значения не имеет. Распределение кандидатов на поступление будет осуществляться по указанным в заявлении приоритетным направлениям или специальностям.",
|
15 |
+
]
|
16 |
+
|
17 |
+
default_answer = "Затрудняюсь ответить на ваш вопрос. Уточните свой вопрос, пожалуйста."
|
18 |
+
|
19 |
+
@staticmethod
|
20 |
+
def get_elem_by_id(id: int):
|
21 |
+
return AnswersRepository.answers[id]
|
repositories/intents_repository.py
ADDED
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from repositories.repository import Repository
|
2 |
+
|
3 |
+
|
4 |
+
class IntentsRepository(Repository):
|
5 |
+
|
6 |
+
intents = ['Бюджетные места', 'Вступительные испытания', 'Вуз после колледжа',
|
7 |
+
'Индивидуальные достижения', 'Количество специальностей',
|
8 |
+
'Общежитие', 'Подача документов', 'Приемная компания',
|
9 |
+
'Приоритет от подачи оригинала']
|
10 |
+
|
11 |
+
@staticmethod
|
12 |
+
def get_elem_by_id(id: int):
|
13 |
+
return IntentsRepository.intents[id]
|
repositories/repository.py
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
1 |
+
class Repository:
|
2 |
+
@staticmethod
|
3 |
+
def get_elem_by_id(id: int):
|
4 |
+
pass
|
requirements.txt
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
fastapi
|
2 |
+
uvicorn
|
3 |
+
transformers
|
4 |
+
torch
|
5 |
+
python-dotenv
|
services/__pycache__/answers_service.cpython-39.pyc
ADDED
Binary file (768 Bytes). View file
|
|
services/answers_service.py
ADDED
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from models.prediction import Prediction
|
2 |
+
from core.settings import Config
|
3 |
+
from repositories.answers_repository import AnswersRepository
|
4 |
+
|
5 |
+
|
6 |
+
class AnswersService:
|
7 |
+
|
8 |
+
@staticmethod
|
9 |
+
def get_answer_by_id(prediction: Prediction):
|
10 |
+
if prediction.score > Config.threshold:
|
11 |
+
|
12 |
+
return AnswersRepository.get_elem_by_id(prediction.label)
|
13 |
+
|
14 |
+
return AnswersRepository.default_answer
|
services/intents_service.py
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from models.prediction import Prediction
|
2 |
+
from repositories.intents_repository import IntentsRepository
|
3 |
+
|
4 |
+
|
5 |
+
class IntentsService:
|
6 |
+
@staticmethod
|
7 |
+
def get_intent_by_id(prediction: Prediction):
|
8 |
+
return IntentsRepository.get_elem_by_id[prediction.label]
|