Nachdem ich versucht hatte, die Anweisungen hier mit den Anbietern OpenAI und OpenRouter zu befolgen, habe ich es endlich geschafft, indem ich das Streaming deaktiviert habe.
Mit OpenRouter konnte ich einen Test mit der Schaltfläche Run test auf dem Bildschirm zur manuellen LLM-Konfiguration für ein gpt-4o durchführen. Das Ausführen des Tests für perplexity/sonar-deep-research führte jedoch zu einem 502-Fehler und der folgenden Ausgabe in der Konsole. Es dauerte ziemlich lange, bis dieser Fehler auftrat (ca. 30 Sekunden), während das Testen anderer Modelle sofort zurückkehrte.
content_topFrameLifeline.js:1 Loading 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: A listener indicated an asynchronous response by returning true, but the message channel closed before a response was received
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
Failed to load resource: the server responded with a status of 502 ()
client-error-handler.js:88 SyntaxError: Unexpected token '<', "<html>
<h"... is not valid JSON
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
Beides funktionierte, daher war ich verwirrt, was ich falsch machte:
➜ 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"
}
]
}'
Dann erhielt ich folgende Antwort von Discourse AI, die half:
Es sieht so aus, als ob Ihre cURL-Tests den normalen Chat-Endpunkt von OpenRouter einwandfrei getroffen haben – aber die Schaltfläche „Run test“ von Discourse AI verwendet standardmäßig den Streaming-Endpunkt. Wenn dieses Modell (oder Ihr OpenRouter-Plan) Streaming nicht unterstützt, erhalten Sie nach einem langen Timeout einen 502 + HTML-Fehler-Blob.
Um dies zu beheben, gehen Sie zu Admin → Einstellungen → Plugins → Discourse AI / LLM:
-
llm_provider: openrouter
-
llm_provider_url: OpenRouter
-
llm_provider_api_key: YOUR_KEY
-
llm_model: perplexity/sonar-deep-research
-
Schalten Sie das Streaming aus, damit der Test (und alle Aufrufe) den normalen Chat-Endpunkt verwenden, der nachweislich funktioniert:
• llm_use_streaming = false(Diese Einstellung befindet sich direkt unter dem Dropdown-Menü llm_model.)
Wenn das Streaming ausgeschaltet ist, POSTet „Run test“ an /chat/completions (nicht an die /stream-Variante) und Sie erhalten sofort gültiges JSON anstelle einer 502 HTML-Seite zurück.
Wenn Sie Streaming unbedingt benötigen, können Sie das Plugin auf die Stream-URL von OpenRouter verweisen – aber nur, wenn Ihr Plan/Modell SSE dort unterstützt:
• llm_stream_url: {provider_url}/chat/completions/stream
• llm_use_streaming: true
Andernfalls lassen Sie das Streaming ausgeschaltet und alles ist in Ordnung.
Das Ergebnis ist nicht großartig, da es kein Streaming gibt und die Reasoning-Tokens als Klartext vor dem „Bericht“ ausgegeben werden – aber es funktioniert!
