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 una publicación anterior similar. También lo intenté con la variable en mi archivo app.yml, pero sigo obteniendo el error.

¿Qué podría 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 endpoint 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 he estado intentando solucionarlo durante semanas.


Ya intenté lo siguiente:

EDIT 1: DISCOURSE_ALLOWED_INTERNAL_HOSTS: 172.16.X.X (IP del contenedor LiteLLM, 127.0.0.1 y el host del dominio LLM con terminación SSL, entiendo que no se requiere que esté aquí)

EDIT 2: Y veo el mismo error 500 al intentar acceder para configurar mi servidor MCP (configuración de la pestaña discourse-ai de MCP).

Prueba con DISCOURSE_ALLOWED_INTERNAL_HOSTS: llm.mydomain.tld en su lugar.

Ya lo hice, como escribí antes, nada funciona y te pregunto amablemente cómo depurar más porque es algo extraño.

Este endpoint funciona dentro de la aplicación del contenedor de Discourse, pero no desde la interfaz de usuario de Discourse.