Como usar endpoints de IA internos?

Estou me perguntando qual é a abordagem correta para usar endpoints de API de IA interna (como o LiteLLM) em instâncias do Discourse hospedadas localmente.

Tentei habilitar o bridge do Docker, os IPs dos contêineres e endpoints SSL devidamente encerrados (direcionados ao mesmo IP público onde o Discourse está hospedado), mas nada funcionou. Permiti hosts internos, mas recebo um erro 500 ao testar na interface do LLM-AI dentro do Discourse.

Provavelmente está relacionado à minha própria configuração, e sei que provavelmente cometi alguns erros. Então, espero resolver isso com a ajuda da comunidade :slight_smile:

Nosso principal caso de uso é tentar os endpoints do Vertex AI (OpenAI) que não funcionaram imediatamente no Discourse porque não são suportados. Mas também queremos a camada que o LiteLLM adiciona ao nosso fluxo de trabalho.

Logs:

FinalDestination::SSRFDetector::DisallowedIpError (FinalDestination: todos os IPs resolvidos foram bloqueados)

Se você estiver executando no mesmo servidor, será necessário permitir o acesso por meio da variável de ambiente DISCOURSE_ALLOWED_INTERNAL_HOSTS.

Fiz isso na interface do usuário, assim como vi em um post similar anterior. Também tentei com a variável no meu arquivo app.yml, mas ainda estou recebendo o erro.

O que pode estar errado se minhas credenciais estão corretas e consigo usar o endpoint da API no host? Posso depurar mais?

Como exatamente você adicionou isso ao app.yml? Ele espera um IP ou um nome de host.

Bom, testei o endpoint com SSL dentro do Discourse (container do app) e funciona, mas não funciona no teste da interface do usuário do Discourse AI.

Estou usando o provedor ‘OpenAI’ com ‘https://llm.mydomain.tld/v1/chat/completions’ como URL. As credenciais estão corretas:

/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' 

É estranho, e tenho tentado resolver isso há semanas.