Cómo usar los endpoints de IA internos

Me pregunto cuál es el enfoque adecuado para utilizar puntos de conexión de API de IA interna (como LiteLLM) en instancias de Discourse autoalojadas.

Intenté habilitar el puente Docker, las IPs de los contenedores y los puntos de conexión con terminación SSL adecuada (hacia la misma IP pública donde se aloja Discourse), pero nada funciona. He permitido hosts internos, pero obtengo un error 500 al probarlo en la interfaz de usuario de LLM-AI dentro de Discourse.

Probablemente esté relacionado con mi propia configuración, y sé que probablemente cometí algunos errores. Así que espero poder resolver esto con la ayuda de la comunidad :slight_smile:

Nuestro caso de uso principal es intentar utilizar los puntos de conexión de Vertex AI (OpenAI) que no funcionaron de forma predeterminada en Discourse porque no están soportados. Pero también queremos la capa que LiteLLM añade a nuestro flujo de trabajo.

Registros:

FinalDestination::SSRFDetector::DisallowedIpError (FinalDestination: todas las IPs resueltas estaban desautorizadas)

Si lo estás ejecutando en el mismo servidor, deberás permitirlo mediante la variable de entorno DISCOURSE_ALLOWED_INTERNAL_HOSTS.

Lo hice en la interfaz de usuario como vi en un post similar anterior. También lo intenté con la variable en mi archivo app.yml, pero sigo obteniendo el error.

¿Qué puede estar mal si mis credenciales son correctas y puedo usar el punto final de la API en el host? ¿Puedo depurar más?

¿Cómo exactamente lo añadiste al app.yml? Espera ya sea una IP o un nombre de host.

Bueno, probé el punto de conexión con SSL dentro de Discourse (contenedor de la aplicación) y funciona, pero no desde la prueba de la interfaz de usuario de Discourse AI.

Estoy usando el proveedor ‘OpenAI’ con ‘https://llm.mydomain.tld/v1/chat/completions’ como URL. Las credenciales son correctas:

/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:182:in 'DiscourseAi::Completions::Endpoints::Base#perform_completion!'
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/open_ai_shared.rb:28:in 'DiscourseAi::Completions::Endpoints::OpenAiShared#perform_completion!'
/var/www/discourse/plugins/discourse-ai/lib/completions/llm.rb:214:in 'DiscourseAi::Completions::Llm#generate'

pitchfork-0.18.2/lib/pitchfork/soft_timeout.rb:46:in 'Pitchfork::SoftTimeout::Request#interrupt'
pitchfork-0.18.2/lib/pitchfork/soft_timeout.rb:94:in 'block (2 levels) in Pitchfork::SoftTimeout#create_timeout_thread'
pitchfork-0.18.2/lib/pitchfork/soft_timeout.rb:93:in 'Array#each'
pitchfork-0.18.2/lib/pitchfork/soft_timeout.rb:93:in 'block in Pitchfork::SoftTimeout#create_timeout_thread' 

Es extraño, y llevo semanas intentando solucionarlo.