From 27148b8638d1968e932950def2f398b78d3166b2 Mon Sep 17 00:00:00 2001 From: maksim Date: Tue, 11 Jun 2024 23:38:00 +0400 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=B3=D0=B8=D0=B3=D0=B0=D1=87=D0=B0=D0=B4=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gigachat.py | 63 ++++++++++++++++++++++++++++++++++++++++++++ main.py | 7 ++++- requirements.txt | Bin 724 -> 746 bytes router_questions.py | 8 ++++++ 4 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 gigachat.py diff --git a/gigachat.py b/gigachat.py new file mode 100644 index 0000000..9e1b2f6 --- /dev/null +++ b/gigachat.py @@ -0,0 +1,63 @@ +import requests +import json +import base64 +import uuid + +from password import config + +client_id = config.client_id +secret = config.secret +auth = config.auth +credentials = f"{client_id}:{secret}" +encoded_credentials = base64.b64encode(credentials.encode('utf-8')).decode('utf-8') + +if encoded_credentials != auth: + raise Exception("Credentials do not match") + +def get_token(auth_token, scope='GIGACHAT_API_PERS'): + rq_uid = str(uuid.uuid4()) + url = "https://ngw.devices.sberbank.ru:9443/api/v2/oauth" + headers = { + 'Content-Type': 'application/x-www-form-urlencoded', + 'Accept': 'application/json', + 'RqUID': rq_uid, + 'Authorization': f'Basic {auth_token}' + } + payload = {'scope': scope} + try: + response = requests.post(url, headers=headers, data=payload, verify=False) + response.raise_for_status() + return response.json()['access_token'] + except requests.RequestException as e: + print(f"Ошибка: {str(e)}") + return None + +giga_token = get_token(auth) + +def get_chat_completion(auth_token, user_message): + url = "https://gigachat.devices.sberbank.ru/api/v1/chat/completions" + payload = json.dumps({ + "model": "GigaChat", + "messages": [ + {"role": "user", "content": user_message} + ], + "temperature": 1, + "top_p": 0.1, + "n": 1, + "stream": False, + "max_tokens": 512, + "repetition_penalty": 1, + "update_interval": 0 + }) + headers = { + 'Content-Type': 'application/json', + 'Accept': 'application/json', + 'Authorization': f'Bearer {auth_token}' + } + try: + response = requests.post(url, headers=headers, data=payload, verify=False) + response.raise_for_status() + return response.json()['choices'][0]['message']['content'] + except requests.RequestException as e: + print(f"Произошла ошибка: {str(e)}") + return "Ошибка в запросе к нейронной сети" diff --git a/main.py b/main.py index f9bff10..ef14e78 100644 --- a/main.py +++ b/main.py @@ -2,7 +2,8 @@ from fastapi import FastAPI import logging from contextlib import asynccontextmanager - +from gigachat import get_token +from password.config import auth from router_questions import router as questions_router from router_class import router as class_router from router_flight import router as flight_router @@ -16,6 +17,10 @@ logger = logging.getLogger(__name__) @asynccontextmanager async def lifespan(app: FastAPI): logger.info("База данных готова к работе") + + global giga_token + giga_token = get_token(auth) + yield logger.info("Выключение") diff --git a/requirements.txt b/requirements.txt index 74bc0cf05b68792be7f9e48f70933b31db6cd71e..b15852ae30e9b3955831806f2353fd8650900b50 100644 GIT binary patch delta 30 icmcb@`igbK6(%uW1}=tlhD;z%WJqSn0Fs#uc? list[SQuestion]: questions = await QuestionRepository.find_by_email(email_user) return questions + +@router.post("/chat") +async def add_question(question: str): + # Получение ответа от нейронной сети + neural_response = get_chat_completion(giga_token, question) + + return {"answer": neural_response}