Dopo aver provato a seguire le istruzioni qui con entrambi i provider OpenAI e OpenRouter, alla fine sono riuscito a farlo funzionare disabilitando lo streaming.
Con OpenRouter, sono stato in grado di eseguire un test con il pulsante Esegui test nella schermata di configurazione manuale LLM per un gpt-4o. Tuttavia, l’esecuzione del test per perplexity/sonar-deep-research ha comportato un errore 502 e l’output seguente nella console. Ci è voluto molto tempo prima che questo errore apparisse (circa 30 secondi), mentre il test di altri modelli restituiva immediatamente.
content_topFrameLifeline.js:1 Caricamento di content_topFrameLifeline.js
content_topFrameLifeline.js:1 CONTENT <-> SERVICE LIFELINE: CONNECT
content_topFrameLifeline.js:1 CONTENT <-> SERVICE LIFELINE: MESSAGE Object
topic.js:404 ℹ️ Discourse v3.5.0.beta3-dev — https://github.com/discourse/discourse/commits/c3795177f2 — Ember v5.12.0
/admin/plugins/discourse-ai/ai-llms:1 Uncaught (in promise) Error: Un listener ha indicato una risposta asincrona restituendo true, ma il canale del messaggio è stato chiuso prima che una risposta fosse ricevuta
content_topFrameLifeline.js:1 CONTENT <-> SERVICE LIFELINE: TIMEOUT
content_topFrameLifeline.js:1 CONTENT <-> SERVICE LIFELINE: CONNECT
content_topFrameLifeline.js:1 CONTENT <-> SERVICE LIFELINE: MESSAGE Object
test.json:1
Impossibile caricare la risorsa: il server ha risposto con uno stato di 502 ()
client-error-handler.js:88 SyntaxError: Impossibile analizzare il token '<', "<html>
<h"... non è JSON valido
at x.parse [as parseJSON] (<anonymous>)
at l (client-error-handler.js:88:1)
at p (client-error-handler.js:88:1)
at v.test (ai-llm-editor-form.js:210:1)
l @ client-error-handler.js:88
p @ client-error-handler.js:88
test @ ai-llm-editor-form.js:210
Entrambi questi hanno funzionato, quindi ero confuso su cosa stessi sbagliando:
➜ curl --location 'https://api.perplexity.ai/chat/completions' \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--header 'Authorization: Bearer {token}' \
--data '{
"model": "sonar-deep-research",
"messages": [
{
"role": "system",
"content": "Be precise and concise."
},
{
"role": "user",
"content": "How many stars are there in our galaxy?"
}
]
}'
curl https://openrouter.ai/api/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer {token}" \
-d '{
"model": "perplexity/sonar-deep-research",
"messages": [
{
"role": "user",
"content": "How many stars are in the sky"
}
]
}'
Poi ho ricevuto la seguente risposta da Discourse AI, che ha aiutato:
Sembra che i tuoi test cURL abbiano raggiunto correttamente l’endpoint di chat normale di OpenRouter, ma il pulsante “Esegui test” di Discourse AI utilizza in realtà l’endpoint streaming per impostazione predefinita. Se quel modello (o il tuo piano OpenRouter) non supporta lo streaming, otterrai un errore 502 + un blob di errore HTML dopo un lungo timeout.
Per risolvere il problema in Admin → Impostazioni → Plugin → Discourse AI / LLM:
-
llm_provider:openrouter -
llm_provider_url:https://openrouter.ai/api/v1 -
llm_provider_api_key:TUA_CHIAVE -
llm_model:perplexity/sonar-deep-research -
Disattiva lo streaming in modo che il test (e tutte le chiamate) utilizzino l’endpoint di chat normale che hai dimostrato funzionare:
•llm_use_streaming=false(Questa impostazione si trova appena sotto il menu a discesa
llm_model.)Con lo streaming disattivato, “Esegui test” invierà una richiesta POST a
/chat/completions(non alla variante/stream) e riceverai immediatamente un JSON valido invece di una pagina HTML 502.
Se hai davvero bisogno dello streaming, puoi puntare il plugin all’URL di streaming di OpenRouter, ma solo se il tuo piano/modello lo supporta lì:
• llm_stream_url: {provider_url}/chat/completions/stream
• llm_use_streaming: true
Altrimenti, lascia lo streaming disattivato e sei a posto.
Il risultato non è eccezionale perché non c’è lo streaming e i token di ragionamento vengono emessi come testo normale prima del “report”, ma funziona!
