feat(ai): integrar Ollama en AiConfig para ia_controller, query_runner y landing

- Agrega provider 'ollama' al panel de AiConfig con badge azul y hint de URL
- ia_controller: reemplaza webhook n8n hardcodeado por llamada directa a Ollama vía AiConfig (módulo 'ia')
- query_runner: agrega soporte explícito de ollama (model fallback gemma3:1b, Basic Auth para URL pública)
- HTML: agrega módulo 'IA / vCard' en el selector de módulos

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Lizandro Guarnizo
2026-07-06 09:33:22 -05:00
co-authored by Claude Sonnet 4.6
parent fa269cabf1
commit 6062f31c70
3 changed files with 90 additions and 60 deletions
+11 -2
View File
@@ -552,6 +552,7 @@ SQL optimizado:`, sql)
case "anthropic":
baseURL = "https://api.anthropic.com/v1"
default:
log.Printf("[AI_SQL] Provider '%s' requiere BaseURL configurada", config.Provider)
return nil
}
}
@@ -565,6 +566,8 @@ SQL optimizado:`, sql)
modelName = "qwen2.5-72b-instruct"
case "anthropic":
modelName = "claude-3-haiku-20240307"
case "ollama":
modelName = "gemma3:1b"
default:
modelName = "gpt-4o-mini"
}
@@ -595,10 +598,16 @@ SQL optimizado:`, sql)
req, _ := http.NewRequest("POST", url, bytes.NewReader(jsonBody))
req.Header.Set("Content-Type", "application/json")
if config.Provider == "anthropic" {
switch config.Provider {
case "anthropic":
req.Header.Set(authHeader, config.ApiKey)
req.Header.Set("anthropic-version", "2023-06-01")
} else {
case "ollama":
// Sin auth para red interna; para URL pública el api_key es "usuario:token"
if config.ApiKey != "" && config.ApiKey != "ollama" {
req.SetBasicAuth("ollama", config.ApiKey)
}
default:
req.Header.Set(authHeader, "Bearer "+config.ApiKey)
}