File size: 2,295 Bytes
623a39b
 
 
 
014ba5e
623a39b
 
766dff5
cce3c9c
 
623a39b
6f8a3e7
cce3c9c
623a39b
 
 
 
 
 
 
 
 
766dff5
623a39b
 
 
0cea943
cce3c9c
 
623a39b
 
6f8a3e7
0cea943
623a39b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e357d2f
623a39b
766dff5
 
623a39b
 
 
 
2375d69
623a39b
 
 
2103f08
 
 
f306ea3
deb74eb
e357d2f
57a81f5
8810f3c
57a81f5
623a39b
014ba5e
 
 
 
 
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
70
71
72
73
74
75
76
77
78
79
import requests
import json
import os
from datetime import datetime, timedelta
import boto3


def gen_auth_token(auth_file):
    # url = "https://ngw.devices.sberbank.ru:9443/api/v2/oauth"
    url = "https://api.mlrnd.ru/api/v2/oauth"

    # payload='scope=GIGACHAT_API_CORP'
    payload='scope=API_v1'
    headers = {
    'Content-Type': 'application/x-www-form-urlencoded',
    'Accept': 'application/json',
    'RqUID': '1b519047-0ee9-4b63-8599-e5ffc9c77e72',
    'Authorization': os.getenv('GIGACHAT_API_TOKEN')
    }

    response = requests.request("POST", url, headers=headers, data=payload, verify=False)

    with open(auth_file, 'w') as f:
        json.dump(json.loads(response.text), f, ensure_ascii=False)


def get_text(content, auth_token=None):
    # url = "https://gigachat.devices.sberbank.ru/api/v1/chat/completions"
    url = "https://api.mlrnd.ru/api/v1/chat/completions"

    payload = json.dumps({
    "model": "Test_model",
    "messages": content,
    "temperature": 1,
    "top_p": 0.1,
    "n": 1,
    "stream": False,
    "max_tokens": 512,
    "repetition_penalty": 1
    })
    headers = {
    'Content-Type': 'application/json',
    'Accept': 'application/json',
    'Authorization': f'Bearer {auth_token}'
    }

    response = requests.request("POST", url, headers=headers, data=payload, verify=False)

    return json.loads(response.text)


def generate(content=None, auth_file=None):
    if auth_file is None or not os.path.isfile(auth_file):
        gen_auth_token(auth_file)

    with open(auth_file) as f:
        auth_token = json.load(f)
    
    if datetime.fromtimestamp(auth_token['expires_at']/1000) <= datetime.now() - timedelta(seconds=60):
        gen_auth_token(auth_file)
        with open(auth_file) as f:
            auth_token = json.load(f)

    content_giga = []
    for step in content:
        content_giga.append({'role': 'user', 'content': step[0]})
        if len(step) >= 2:
            content_giga.append({'role': 'assistant', 'content': step[1]})

    print(content_giga)
    resp = get_text(content_giga, auth_token['access_token'])
    print(resp)
    
    return resp["choices"][0]["message"]["content"]

def send_to_s3(data, name, session):
    session.put_object(Bucket=os.getenv('S3_BUCKET'), Key=name, Body=json.dumps(data))