Langchain-Chatchat

Форк
0
95 строк · 3.4 Кб
1
import sys
2
import os
3
from fastchat.conversation import Conversation
4
from server.model_workers.base import *
5
from server.utils import get_httpx_client
6
from fastchat import conversation as conv
7
import json
8
from typing import List, Dict
9
from configs import logger, log_verbose
10

11

12
class AzureWorker(ApiModelWorker):
13
    def __init__(
14
            self,
15
            *,
16
            controller_addr: str = None,
17
            worker_addr: str = None,
18
            model_names: List[str] = ["azure-api"],
19
            version: str = "gpt-35-turbo",
20
            **kwargs,
21
    ):
22
        kwargs.update(model_names=model_names, controller_addr=controller_addr, worker_addr=worker_addr)
23
        super().__init__(**kwargs)
24
        self.version = version
25

26
    def do_chat(self, params: ApiChatParams) -> Dict:
27
        params.load_config(self.model_names[0])
28

29
        data = dict(
30
            messages=params.messages,
31
            temperature=params.temperature,
32
            max_tokens=params.max_tokens if params.max_tokens else None,
33
            stream=True,
34
        )
35
        url = ("https://{}.openai.azure.com/openai/deployments/{}/chat/completions?api-version={}"
36
               .format(params.resource_name, params.deployment_name, params.api_version))
37
        headers = {
38
            'Content-Type': 'application/json',
39
            'Accept': 'application/json',
40
            'api-key': params.api_key,
41
        }
42

43
        text = ""
44
        if log_verbose:
45
            logger.info(f'{self.__class__.__name__}:url: {url}')
46
            logger.info(f'{self.__class__.__name__}:headers: {headers}')
47
            logger.info(f'{self.__class__.__name__}:data: {data}')
48

49
        with get_httpx_client() as client:
50
            with client.stream("POST", url, headers=headers, json=data) as response:
51
                print(data)
52
                for line in response.iter_lines():
53
                    if not line.strip() or "[DONE]" in line:
54
                        continue
55
                    if line.startswith("data: "):
56
                        line = line[6:]
57
                    resp = json.loads(line)
58
                    if choices := resp["choices"]:
59
                        if chunk := choices[0].get("delta", {}).get("content"):
60
                            text += chunk
61
                            yield {
62
                                    "error_code": 0,
63
                                    "text": text
64
                                }
65
                        print(text)
66
                    else:
67
                        self.logger.error(f"请求 Azure API 时发生错误:{resp}")
68

69
    def get_embeddings(self, params):
70
        print("embedding")
71
        print(params)
72

73
    def make_conv_template(self, conv_template: str = None, model_path: str = None) -> Conversation:
74
        return conv.Conversation(
75
            name=self.model_names[0],
76
            system_message="You are a helpful, respectful and honest assistant.",
77
            messages=[],
78
            roles=["user", "assistant"],
79
            sep="\n### ",
80
            stop_str="###",
81
        )
82

83

84
if __name__ == "__main__":
85
    import uvicorn
86
    from server.utils import MakeFastAPIOffline
87
    from fastchat.serve.base_model_worker import app
88

89
    worker = AzureWorker(
90
        controller_addr="http://127.0.0.1:20001",
91
        worker_addr="http://127.0.0.1:21008",
92
    )
93
    sys.modules["fastchat.serve.model_worker"].worker = worker
94
    MakeFastAPIOffline(app)
95
    uvicorn.run(app, port=21008)

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.