| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- from fastapi import APIRouter
- # 数据格式
- from utils.data import RequestOptions, SendMessageOptions, ErrorCodeMessage, RequestProps
- import json
- # 异步请求
- from starlette.responses import StreamingResponse, JSONResponse
- # openai
- from openai import OpenAI
- chatglm = OpenAI(
- api_key="xxx",
- base_url="http://10.58.0.2:6678/v1",
- )
- # 日志
- import logging
- main_router = APIRouter()
- @main_router.post("/chat-process")
- async def chat_process(request: RequestProps):
- first_chunk = True
-
- logging.info(f"API收到请求: {request}")
-
- async def event_stream(request : RequestProps):
- nonlocal first_chunk
- try:
- newline = '\n'
- process=lambda chat: (yield f"{'' if first_chunk else newline}{chat.json()}")
- await chat_reply_process(
- RequestOptions(
- message=request.prompt,
- lastContext=request.options,
- process='process',
- systemMessage=request.systemMessage,
- temperature=request.temperature,
- top_p=request.top_p,
- )
- )
- except Exception as error:
- logging.warning(f"流出错: {error}")
- yield str(error)
- finally:
- logging.info("流结束")
- yield "\n"
-
- res = StreamingResponse(event_stream(request), media_type="application/octet-stream")
- return res
- async def chat_reply_process(options: RequestOptions):
- logging.info("开始处理聊天回复")
-
- try:
- options_dict = options.model_dump()
- message = options_dict.get('message')
- lastContext = options_dict.get('lastContext')
- process = options_dict.get('process')
- systemMessage = options_dict.get('systemMessage')
- temperature = options_dict.get('temperature')
- top_p = options_dict.get('top_p')
- send_options = SendMessageOptions()
- send_options_dict = send_options.model_dump()
-
- logging.info(f"聊天回复参数: {message}, {lastContext}, {process}, {systemMessage}, {temperature}, {top_p}")
- if systemMessage:
- send_options_dict['systemMessage'] = systemMessage
- send_options_dict['completionParams'] = {'model': 'chatglm', 'temperature': temperature, 'top_p': top_p}
- if lastContext:
- send_options_dict['parentMessageId'] = lastContext.get('parentMessageId')
-
-
- response = chatglm.chat.completions.create(
- model="chatglm",
- messages=[
- {"role": "system", "content": systemMessage},
- {"role": "user", "content": message}
- ]
- )
-
- logging.info(f"聊天回复结果: {response}")
- return {"status": "Success", "data": response, "message": ''}
-
- except Exception as e:
- code = e.status_code
- if ErrorCodeMessage(code):
- return {"type": "Fail", "message": ErrorCodeMessage(code)}
- return {"type": "Fail", "message": str(e)}
-
- @main_router.post("/chat")
- async def chat():
- pass
- @main_router.post("/config")
- async def config():
- pass
- @main_router.post("/session")
- async def session():
- return JSONResponse(status_code=200, content={'status': 'Success', 'message': '', 'data': {'auth': True, 'model': 'ChatGPTAPI'}})
- @main_router.post("/verify")
- async def verify():
- return JSONResponse(status_code=200, content={'status': 'Success', 'message': 'Verify successfully', 'data': ''})
- pass
|