Добавил гигачада
This commit is contained in:
parent
578f6811f4
commit
27148b8638
63
gigachat.py
Normal file
63
gigachat.py
Normal file
@ -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 "Ошибка в запросе к нейронной сети"
|
7
main.py
7
main.py
@ -2,7 +2,8 @@ from fastapi import FastAPI
|
|||||||
import logging
|
import logging
|
||||||
from contextlib import asynccontextmanager
|
from contextlib import asynccontextmanager
|
||||||
|
|
||||||
|
from gigachat import get_token
|
||||||
|
from password.config import auth
|
||||||
from router_questions import router as questions_router
|
from router_questions import router as questions_router
|
||||||
from router_class import router as class_router
|
from router_class import router as class_router
|
||||||
from router_flight import router as flight_router
|
from router_flight import router as flight_router
|
||||||
@ -16,6 +17,10 @@ logger = logging.getLogger(__name__)
|
|||||||
@asynccontextmanager
|
@asynccontextmanager
|
||||||
async def lifespan(app: FastAPI):
|
async def lifespan(app: FastAPI):
|
||||||
logger.info("База данных готова к работе")
|
logger.info("База данных готова к работе")
|
||||||
|
|
||||||
|
global giga_token
|
||||||
|
giga_token = get_token(auth)
|
||||||
|
|
||||||
yield
|
yield
|
||||||
logger.info("Выключение")
|
logger.info("Выключение")
|
||||||
|
|
||||||
|
BIN
requirements.txt
BIN
requirements.txt
Binary file not shown.
@ -3,6 +3,7 @@ from fastapi import APIRouter, Depends
|
|||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
from enums import TypeMood, TypeModel
|
from enums import TypeMood, TypeModel
|
||||||
|
from gigachat import get_chat_completion, giga_token
|
||||||
from repository import QuestionRepository
|
from repository import QuestionRepository
|
||||||
from schemas import SQuestionAdd, SQuestion, SQuestionId
|
from schemas import SQuestionAdd, SQuestion, SQuestionId
|
||||||
|
|
||||||
@ -31,3 +32,10 @@ async def get_questions_by_email(email_user: str) -> list[SQuestion]:
|
|||||||
questions = await QuestionRepository.find_by_email(email_user)
|
questions = await QuestionRepository.find_by_email(email_user)
|
||||||
return questions
|
return questions
|
||||||
|
|
||||||
|
|
||||||
|
@router.post("/chat")
|
||||||
|
async def add_question(question: str):
|
||||||
|
# Получение ответа от нейронной сети
|
||||||
|
neural_response = get_chat_completion(giga_token, question)
|
||||||
|
|
||||||
|
return {"answer": neural_response}
|
||||||
|
Loading…
Reference in New Issue
Block a user