pop2api / app /routes.py
8e
修改uri
dad78f4
import logging
from datetime import datetime, timedelta
from flask import request, Response, current_app as app
from app.config import IGNORED_MODEL_NAMES, IMAGE_MODEL_NAMES, AUTH_TOKEN, HISTORY_MSG_LIMIT
from app.config import configure_logging
from app.utils import send_chat_message, fetch_channel_id, map_model_name, process_content, get_user_contents, \
generate_hash, get_next_auth_token, handle_error, get_request_parameters
configure_logging()
storage_map = {}
@app.route("/hf/v1/chat/completions", methods=["GET", "POST", "OPTIONS"])
def onRequest():
try:
return fetch(request)
except Exception as e:
logging.error("An error occurred with chat : %s", e)
return handle_error(e)
@app.route('/hf/v1/models')
def list_models():
return {
"object": "list",
"data": [{
"id": m,
"object": "model",
"created": int(datetime.now().timestamp()),
"owned_by": "popai"
} for m in IGNORED_MODEL_NAMES]
}
@app.route('/hf/v1/images/generations', methods= ["post"])
def image():
try:
request.get_json()["model"] = IMAGE_MODEL_NAMES[0]
return fetch(request)
except Exception as e:
logging.error("An error occurred with image : %s", e)
return handle_error(e)
def get_channel_id(hash_value, token, model_name, content, template_id):
if hash_value in storage_map:
channel_id, expiry_time = storage_map[hash_value]
if expiry_time > datetime.now() and channel_id:
logging.info("Returning channel id from cache")
return channel_id
channel_id = fetch_channel_id(token, model_name, content, template_id)
expiry_time = datetime.now() + timedelta(days=1)
storage_map[hash_value] = (channel_id, expiry_time)
return channel_id
def fetch(req):
if req.method == "OPTIONS":
return handle_options_request()
token = req.headers.get("Authorization").replace("Bearer ", "")
messages, model_name, prompt, user_stream = get_request_parameters(req.get_json())
model_to_use = map_model_name(model_name)
template_id = 2000000 if model_name in IMAGE_MODEL_NAMES else ''
if not messages and prompt:
final_user_content = prompt
first_user_message = final_user_content
image_url = None
elif messages:
last_message = messages[-1]
first_user_message, end_user_message, concatenated_messages = get_user_contents(messages, HISTORY_MSG_LIMIT)
final_user_content, image_url = process_content(last_message.get('content'))
final_user_content = concatenated_messages + '\n' + final_user_content if concatenated_messages else final_user_content
# channel_id = get_channel_id(hash_value, token, model_to_use, final_user_content, template_id)
hash_value = generate_hash(first_user_message, model_to_use, token)
channel_id = get_channel_id(hash_value, token, model_to_use, final_user_content, template_id)
if final_user_content is None:
return Response("No user message found", status=400)
return send_chat_message(req, token, channel_id, final_user_content, model_to_use, user_stream, image_url, model_name)
def handle_options_request():
return Response(status=204, headers={'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Headers': '*'})