feat(umind): mide el consumo de IA, OCR y transcripción por tenant
Es la base del cobro por uso: hasta ahora no había ninguna medición de consumo en todo el repo. - UmindUso registra cada evento facturable con el costo YA calculado al precio vigente del plan. Congelarlo evita que subir un precio revalúe consumo pasado, que haría indefendible una factura ante un reclamo. - callAI devuelve los tokens que reportó el proveedor (campo usage, igual en todos los OpenAI-compatibles; input+output en Anthropic). Se mide cada ronda de tool-calling, no solo la última: todas gastan tokens. - ExtraerTextoOCR y TranscribirAudioSelfHosted reciben agenteID; 0 = no medir, que es lo que pasan los botones "Probar" del panel de staff. - Aviso al superar el tope del plan, una vez por mes y sin cortar el servicio. El flag de "ya avisé" es en memoria a propósito. - GET /app/umind/uso con filtros de fecha: resumen por tipo + detalle. - Test del cálculo de costo por tipo, incluida fracción de 1k tokens y tenant sin plan. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
96cd24f17d
commit
08265510ea
@@ -16,7 +16,10 @@ var ocrHTTPClient = &http.Client{Timeout: 30 * time.Second}
|
||||
|
||||
// ExtraerTextoOCR manda una imagen al servicio propio de OCR y devuelve el
|
||||
// texto extraído. mimeType ej: "image/png", "image/jpeg".
|
||||
func ExtraerTextoOCR(imagenBytes []byte, mimeType string) (string, error) {
|
||||
//
|
||||
// agenteID identifica a quién cobrarle la imagen procesada; 0 = no medir, que
|
||||
// es lo que pasa el botón "Probar" del panel de staff (no es de ningún cliente).
|
||||
func ExtraerTextoOCR(agenteID uint, imagenBytes []byte, mimeType string) (string, error) {
|
||||
cfg, err := models.GetOcrConfig()
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("el servicio de OCR no está configurado (Integraciones → OCR)")
|
||||
@@ -63,5 +66,6 @@ func ExtraerTextoOCR(imagenBytes []byte, mimeType string) (string, error) {
|
||||
}
|
||||
return "", fmt.Errorf("%s", msg)
|
||||
}
|
||||
RegistrarUso(agenteID, models.UsoTipoOCR, 1, "imagen")
|
||||
return out.Text, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user