71 lines
2.0 KiB
Plaintext

# OpenAI-compatible Music Generation API
# POST /v1/music/generations
# Required params: model, catelogid, prompt, lyrics
# Optional params: output_format, audio_setting
#
# Example request:
# {
# "model": "music-2.6",
# "catelogid": "music_gen",
# "prompt": "Pop music, happy, suitable for a sunny day",
# "lyrics": "[Intro]\n\n[Verse]\nWalking down the street\nFeeling the beat\n\n[Chorus]\nDancing in the sun\nHaving so much fun"
# }
#
# Response (sync for MiniMax):
# {
# "id": "luid_xxx",
# "object": "music.generation",
# "model": "music-2.6",
# "status": "SUCCEEDED",
# "audio": "https://...",
# "created": 1234567890
# }
userid = await get_user()
userorgid = await get_userorgid()
if userid is None:
debug('need login')
return openai_403()
# Validate required parameters
if not params_kw.model:
d = return_error('Missing required parameter: model')
return json_response(d, status=400)
if not params_kw.catelogid:
d = return_error('Missing required parameter: catelogid')
return json_response(d, status=400)
if not params_kw.prompt:
d = return_error('Missing required parameter: prompt')
return json_response(d, status=400)
if not params_kw.lyrics:
d = return_error('Missing required parameter: lyrics')
return json_response(d, status=400)
lctype = params_kw.catelogid
env = request._run_ns
llmid = await env.get_llmid_cached(env, params_kw.model, lctype)
if not llmid:
debug(f'{params_kw.model=} not found for catalog {lctype}')
return openai_400()
params_kw.llmid = llmid
params_kw.llmcatelogid = lctype
debug(f'{params_kw.llmid=}')
# Check balance
f = await checkCustomerBalance(params_kw.llmid, userid, userorgid)
if not f:
debug(f'{userid=} balance not enough')
return openai_429()
# Generate task ID and attach to params
if not params_kw.transno:
params_kw.transno = getID()
# Call inference (music generation via MiniMax is synchronous)
return await inference(request, env=env)