From 28f5c87fb2955327c7f64992a199e6fccd0a2779 Mon Sep 17 00:00:00 2001 From: RainbowBird Date: Fri, 27 Mar 2026 23:39:31 +0800 Subject: [PATCH] chore(server): disable audio endpoint --- apps/server/src/routes/openai/v1/index.ts | 241 +++++++++++----------- 1 file changed, 120 insertions(+), 121 deletions(-) diff --git a/apps/server/src/routes/openai/v1/index.ts b/apps/server/src/routes/openai/v1/index.ts index 45318c54f..f7bb8c9ea 100644 --- a/apps/server/src/routes/openai/v1/index.ts +++ b/apps/server/src/routes/openai/v1/index.ts @@ -12,7 +12,6 @@ import type { HonoEnv } from '../../../types/hono' import { useLogger } from '@guiiai/logg' import { context, SpanStatusCode, trace } from '@opentelemetry/api' import { Hono } from 'hono' -import { bodyLimit } from 'hono/body-limit' import { authGuard } from '../../../middlewares/auth' import { configGuard } from '../../../middlewares/config-guard' @@ -315,148 +314,148 @@ export function createV1CompletionsRoutes(fluxService: FluxService, billingServi return c.json(responseBody) } - async function handleTTS(c: Context) { - const user = c.get('user')! - const flux = await fluxService.getFlux(user.id) - if (flux.flux <= 0) { - throw createPaymentRequiredError('Insufficient flux') - } + // async function handleTTS(c: Context) { + // const user = c.get('user')! + // const flux = await fluxService.getFlux(user.id) + // if (flux.flux <= 0) { + // throw createPaymentRequiredError('Insufficient flux') + // } - const body = await c.req.json() - const gatewayBaseUrl = await configKV.getOrThrow('GATEWAY_BASE_URL') - const baseUrl = normalizeBaseUrl(gatewayBaseUrl) - const serverAttributes = getServerConnectionAttributes(baseUrl) - const requestModel = body.model || 'auto' + // const body = await c.req.json() + // const gatewayBaseUrl = await configKV.getOrThrow('GATEWAY_BASE_URL') + // const baseUrl = normalizeBaseUrl(gatewayBaseUrl) + // const serverAttributes = getServerConnectionAttributes(baseUrl) + // const requestModel = body.model || 'auto' - const span = tracer.startSpan('llm.gateway.tts', { - attributes: { - [GEN_AI_ATTR_REQUEST_MODEL]: requestModel, - [AIRI_ATTR_GEN_AI_OPERATION_KIND]: 'text_to_speech', - ...serverAttributes, - }, - }) + // const span = tracer.startSpan('llm.gateway.tts', { + // attributes: { + // [GEN_AI_ATTR_REQUEST_MODEL]: requestModel, + // [AIRI_ATTR_GEN_AI_OPERATION_KIND]: 'text_to_speech', + // ...serverAttributes, + // }, + // }) - const startedAt = Date.now() + // const startedAt = Date.now() - const response = await context.with(trace.setSpan(context.active(), span), () => - fetch(`${baseUrl}audio/speech`, { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify(body), - })) + // const response = await context.with(trace.setSpan(context.active(), span), () => + // fetch(`${baseUrl}audio/speech`, { + // method: 'POST', + // headers: { 'Content-Type': 'application/json' }, + // body: JSON.stringify(body), + // })) - const durationMs = Date.now() - startedAt - span.setAttribute('http.response.status_code', response.status) + // const durationMs = Date.now() - startedAt + // span.setAttribute('http.response.status_code', response.status) - if (!response.ok) { - span.setStatus({ code: SpanStatusCode.ERROR, message: `Gateway ${response.status}` }) - span.end() - recordMetrics({ model: requestModel, status: response.status, type: 'tts', durationMs, fluxConsumed: 0 }) - return new Response(response.body, { - status: response.status, - headers: buildSafeResponseHeaders(response), - }) - } + // if (!response.ok) { + // span.setStatus({ code: SpanStatusCode.ERROR, message: `Gateway ${response.status}` }) + // span.end() + // recordMetrics({ model: requestModel, status: response.status, type: 'tts', durationMs, fluxConsumed: 0 }) + // return new Response(response.body, { + // status: response.status, + // headers: buildSafeResponseHeaders(response), + // }) + // } - const fluxPerRequest = await configKV.getOrThrow('FLUX_PER_REQUEST_TTS') - await billingService.consumeFluxForLLM({ - userId: user.id, - amount: fluxPerRequest, - requestId: nanoid(), - description: `tts:${requestModel}`, - }) + // const fluxPerRequest = await configKV.getOrThrow('FLUX_PER_REQUEST_TTS') + // await billingService.consumeFluxForLLM({ + // userId: user.id, + // amount: fluxPerRequest, + // requestId: nanoid(), + // description: `tts:${requestModel}`, + // }) - span.setAttribute(AIRI_ATTR_BILLING_FLUX_CONSUMED, fluxPerRequest) - span.end() - recordMetrics({ model: requestModel, status: response.status, type: 'tts', durationMs, fluxConsumed: fluxPerRequest }) + // span.setAttribute(AIRI_ATTR_BILLING_FLUX_CONSUMED, fluxPerRequest) + // span.end() + // recordMetrics({ model: requestModel, status: response.status, type: 'tts', durationMs, fluxConsumed: fluxPerRequest }) - publishRequestLog({ - userId: user.id, - model: requestModel, - status: response.status, - durationMs, - fluxConsumed: fluxPerRequest, - }) + // publishRequestLog({ + // userId: user.id, + // model: requestModel, + // status: response.status, + // durationMs, + // fluxConsumed: fluxPerRequest, + // }) - return new Response(response.body, { - status: response.status, - headers: buildSafeResponseHeaders(response), - }) - } + // return new Response(response.body, { + // status: response.status, + // headers: buildSafeResponseHeaders(response), + // }) + // } - async function handleTranscription(c: Context) { - const user = c.get('user')! - const flux = await fluxService.getFlux(user.id) - if (flux.flux <= 0) { - throw createPaymentRequiredError('Insufficient flux') - } + // async function handleTranscription(c: Context) { + // const user = c.get('user')! + // const flux = await fluxService.getFlux(user.id) + // if (flux.flux <= 0) { + // throw createPaymentRequiredError('Insufficient flux') + // } - const gatewayBaseUrl = await configKV.getOrThrow('GATEWAY_BASE_URL') - const baseUrl = normalizeBaseUrl(gatewayBaseUrl) - const serverAttributes = getServerConnectionAttributes(baseUrl) + // const gatewayBaseUrl = await configKV.getOrThrow('GATEWAY_BASE_URL') + // const baseUrl = normalizeBaseUrl(gatewayBaseUrl) + // const serverAttributes = getServerConnectionAttributes(baseUrl) - const span = tracer.startSpan('llm.gateway.asr', { - attributes: { - [GEN_AI_ATTR_REQUEST_MODEL]: 'auto', - [AIRI_ATTR_GEN_AI_OPERATION_KIND]: 'speech_to_text', - ...serverAttributes, - }, - }) + // const span = tracer.startSpan('llm.gateway.asr', { + // attributes: { + // [GEN_AI_ATTR_REQUEST_MODEL]: 'auto', + // [AIRI_ATTR_GEN_AI_OPERATION_KIND]: 'speech_to_text', + // ...serverAttributes, + // }, + // }) - const startedAt = Date.now() + // const startedAt = Date.now() - const rawBody = await c.req.arrayBuffer() - const contentType = c.req.header('content-type') || 'multipart/form-data' + // const rawBody = await c.req.arrayBuffer() + // const contentType = c.req.header('content-type') || 'multipart/form-data' - const response = await context.with(trace.setSpan(context.active(), span), () => - fetch(`${baseUrl}audio/transcriptions`, { - method: 'POST', - headers: { 'Content-Type': contentType }, - body: rawBody, - })) + // const response = await context.with(trace.setSpan(context.active(), span), () => + // fetch(`${baseUrl}audio/transcriptions`, { + // method: 'POST', + // headers: { 'Content-Type': contentType }, + // body: rawBody, + // })) - const durationMs = Date.now() - startedAt - span.setAttribute('http.response.status_code', response.status) + // const durationMs = Date.now() - startedAt + // span.setAttribute('http.response.status_code', response.status) - if (!response.ok) { - span.setStatus({ code: SpanStatusCode.ERROR, message: `Gateway ${response.status}` }) - span.end() - recordMetrics({ model: 'auto', status: response.status, type: 'asr', durationMs, fluxConsumed: 0 }) - return new Response(response.body, { - status: response.status, - headers: buildSafeResponseHeaders(response), - }) - } + // if (!response.ok) { + // span.setStatus({ code: SpanStatusCode.ERROR, message: `Gateway ${response.status}` }) + // span.end() + // recordMetrics({ model: 'auto', status: response.status, type: 'asr', durationMs, fluxConsumed: 0 }) + // return new Response(response.body, { + // status: response.status, + // headers: buildSafeResponseHeaders(response), + // }) + // } - const fluxPerRequest = await configKV.getOrThrow('FLUX_PER_REQUEST_ASR') - await billingService.consumeFluxForLLM({ - userId: user.id, - amount: fluxPerRequest, - requestId: nanoid(), - description: `asr:auto`, - }) + // const fluxPerRequest = await configKV.getOrThrow('FLUX_PER_REQUEST_ASR') + // await billingService.consumeFluxForLLM({ + // userId: user.id, + // amount: fluxPerRequest, + // requestId: nanoid(), + // description: `asr:auto`, + // }) - span.setAttribute(AIRI_ATTR_BILLING_FLUX_CONSUMED, fluxPerRequest) - span.end() - recordMetrics({ model: 'auto', status: response.status, type: 'asr', durationMs, fluxConsumed: fluxPerRequest }) + // span.setAttribute(AIRI_ATTR_BILLING_FLUX_CONSUMED, fluxPerRequest) + // span.end() + // recordMetrics({ model: 'auto', status: response.status, type: 'asr', durationMs, fluxConsumed: fluxPerRequest }) - publishRequestLog({ - userId: user.id, - model: 'auto', - status: response.status, - durationMs, - fluxConsumed: fluxPerRequest, - }) + // publishRequestLog({ + // userId: user.id, + // model: 'auto', + // status: response.status, + // durationMs, + // fluxConsumed: fluxPerRequest, + // }) - return new Response(response.body, { - status: response.status, - headers: buildSafeResponseHeaders(response), - }) - } + // return new Response(response.body, { + // status: response.status, + // headers: buildSafeResponseHeaders(response), + // }) + // } const chatGuard = configGuard(configKV, ['FLUX_PER_REQUEST', 'GATEWAY_BASE_URL', 'DEFAULT_CHAT_MODEL'], 'Service is not available yet') - const ttsGuard = configGuard(configKV, ['FLUX_PER_REQUEST_TTS', 'GATEWAY_BASE_URL'], 'TTS service is not available yet') - const asrGuard = configGuard(configKV, ['FLUX_PER_REQUEST_ASR', 'GATEWAY_BASE_URL'], 'ASR service is not available yet') + // const ttsGuard = configGuard(configKV, ['FLUX_PER_REQUEST_TTS', 'GATEWAY_BASE_URL'], 'TTS service is not available yet') + // const asrGuard = configGuard(configKV, ['FLUX_PER_REQUEST_ASR', 'GATEWAY_BASE_URL'], 'ASR service is not available yet') // 60 requests per minute per user for LLM completions const completionsRateLimit = rateLimiter({ max: 60, windowSec: 60 }) @@ -465,6 +464,6 @@ export function createV1CompletionsRoutes(fluxService: FluxService, billingServi .use('*', authGuard) .post('/chat/completions', completionsRateLimit, chatGuard, handleCompletion) .post('/chat/completion', completionsRateLimit, chatGuard, handleCompletion) - .post('/audio/speech', ttsGuard, handleTTS) - .post('/audio/transcriptions', bodyLimit({ maxSize: 25 * 1024 * 1024 }), asrGuard, handleTranscription) + // .post('/audio/speech', ttsGuard, handleTTS) + // .post('/audio/transcriptions', bodyLimit({ maxSize: 25 * 1024 * 1024 }), asrGuard, handleTranscription) }