Comment utiliser les points de terminaison IA internes ?

Je me demande quelle est la bonne approche pour utiliser des points de terminaison d’API IA internes (comme LiteLLM) sur des instances Discourse auto-hébergées.

J’ai essayé d’activer le pont Docker, les adresses IP des conteneurs et des points de terminaison terminés par SSL (vers la même adresse IP publique où Discourse est hébergé), mais rien ne fonctionne. J’ai autorisé les hôtes internes, mais j’obtiens une erreur 500 lors du test sur l’interface utilisateur LLM-AI de Discourse.

C’est probablement lié à ma propre configuration, et je sais que j’ai probablement fait quelques erreurs. J’espère donc résoudre ce problème avec l’aide de la communauté :slight_smile:

Notre cas d’utilisation principal est d’essayer les points de terminaison Vertex AI (OpenAI) qui ne fonctionnaient pas nativement sur Discourse car ils ne sont pas pris en charge. Mais nous voulons aussi la couche que LiteLLM ajoute à notre flux de travail.

Logs :

FinalDestination::SSRFDetector::DisallowedIpError (FinalDestination: toutes les IP résolues étaient interdites)

Si vous l’exécutez sur le même serveur, vous devrez l’autoriser via la variable d’environnement DISCOURSE_ALLOWED_INTERNAL_HOSTS.

Je l’ai fait dans l’interface utilisateur comme indiqué dans un post similaire précédent. J’ai également essayé avec la variable dans mon fichier app.yml, mais j’obtiens toujours l’erreur.

Que peut-il bien se passer si mes identifiants sont corrects et que je peux utiliser le point de terminaison de l’API sur l’hôte ? Puis-je effectuer un débogage plus approfondi ?

Comment avez-vous exactement ajouté cela au fichier app.yml ? Il attend soit une adresse IP, soit un nom d’hôte.

Eh bien, j’ai testé l’endpoint avec SSL dans Discourse (conteneur de l’application) et cela fonctionne, mais pas depuis le test de l’interface utilisateur de Discourse AI.

J’utilise le fournisseur ‘OpenAI’ avec l’URL ‘https://llm.mydomain.tld/v1/chat/completions’. Les identifiants sont corrects :

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

C’est étrange, et j’essaie de résoudre le problème depuis des semaines.