File size: 1,752 Bytes
b56b764
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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

import os
import re
import json
import requests

class Skill:
    def __init__(self:object) -> None:
        pass

    def set_tokenizer(self:object, tokenizer:object):
        self.tokenizer = tokenizer

    def predict(self, question:str, seed=1234, out_seq_length=256, min_gen_length=1, sampling_strategy="BaseStrategy", num_beams=2, length_penalty=1, no_repeat_ngram_size=3, temperature=0.1, topk=1, topp=0.1):
        url = 'https://pretrain.aminer.cn/api/v2/completions'
        prompt = question
        payload = json.dumps({
            "apikey": os.environ.get("WINNIE_APIKEY"),
            "apisecret": os.environ.get("WINNIE_APISECRET"),
            "model": "glm",
            "language": "zh-CN",
            "prompt": prompt,
            "temperature": temperature,
            "top_k": topk,
            "top_p": topp,
            "max_tokens": out_seq_length,
            "stop": ["\n"],
            "presence_penalty": 2,
            "frequency_penalty": 2
        })

        headers = {
            'Content-Type': 'application/json'
        }
        response = requests.request("POST", url, headers=headers, data=payload).json()
        if "output" in response["result"]:
            answer = response["result"]["output"]["raw"].split("<|startofpiece|>")[-1]
        return answer

    def process(self:object, input_txt:str, history_list:list, role_card:dict):
        output_text:str = None
        if input_txt.find("[MASK]") != -1:
            history_list.append( self.tokenizer.encode(input_txt, add_special_tokens=False) )
            output_text = self.predict(input_txt)
            history_list.append( self.tokenizer.encode(output_text, add_special_tokens=False) )
        return  output_text, history_list, role_card