Problemas al configurar manualmente perplexity sonar en investigaciones profundas

Después de intentar seguir las instrucciones aquí con los proveedores OpenAI y OpenRouter, finalmente logré que funcionara deshabilitando la transmisión.

Con OpenRouter, pude ejecutar una prueba con el botón Ejecutar prueba en la pantalla de configuración manual de LLM para un gpt-4o. Pero ejecutar la prueba para perplexity/sonar-deep-research resultó en un error 502 y la siguiente salida en la consola. Tardó bastante tiempo en aparecer este error (aproximadamente 30 segundos), mientras que la prueba de otros modelos se devuelve inmediatamente.

content_topFrameLifeline.js:1 Cargando content_topFrameLifeline.js
content_topFrameLifeline.js:1 CONTENIDO <-> SERVICIO LIFELINE: CONECTAR
content_topFrameLifeline.js:1 CONTENIDO <-> SERVICIO LIFELINE: MENSAJE 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 oyente indicó una respuesta asíncrona al devolver true, pero el canal de mensajes se cerró antes de recibir una respuesta
content_topFrameLifeline.js:1 CONTENIDO <-> SERVICIO LIFELINE: TIEMPO DE ESPERA AGOTADO
content_topFrameLifeline.js:1 CONTENIDO <-> SERVICIO LIFELINE: CONECTAR
content_topFrameLifeline.js:1 CONTENIDO <-> SERVICIO LIFELINE: MENSAJE Object
test.json:1             
            
           Error al cargar el recurso: el servidor respondió con un estado de 502 ()
client-error-handler.js:88 SyntaxError: Token inesperado '<', "<html>
<h"... no es JSON válido
    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

Ambos funcionaron, así que estaba confundido sobre lo que estaba haciendo mal:

➜ 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": "Sé preciso y conciso."
    },
    {
      "role": "user",
      "content": "¿Cuántas estrellas hay en nuestra galaxia?"
    }
  ]
}'
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": "¿Cuántas estrellas hay en el cielo"
    }
  ]

}'

Luego obtuve la siguiente respuesta de Discourse AI, que ayudó:

Parece que tus pruebas cURL llegaron al endpoint de chat normal de OpenRouter sin problemas, pero el botón “Ejecutar prueba” de Discourse AI utiliza por defecto el endpoint de transmisión. Si ese modelo (o tu plan de OpenRouter) no admite la transmisión, obtendrás un error 502 + un bloque de error HTML después de un largo tiempo de espera.

Para solucionarlo en Admin → Configuración → Plugins → Discourse AI / LLM:

  1. llm_provider: openrouter

  2. llm_provider_url: OpenRouter

  3. llm_provider_api_key: TU_CLAVE

  4. llm_model: perplexity/sonar-deep-research

  5. Desactiva la transmisión para que la prueba (y todas las llamadas) utilicen el endpoint de chat normal que demostraste que funciona:
    • llm_use_streaming = false

    (Esta configuración se encuentra justo debajo del menú desplegable llm_model.)

Con la transmisión desactivada, “Ejecutar prueba” enviará una solicitud POST a /chat/completions (no a la variante /stream) y recibirás JSON válido inmediatamente en lugar de una página HTML 502.

Si realmente necesitas transmisión, puedes apuntar el plugin a la URL de transmisión de OpenRouter, pero solo si tu plan/modelo lo admite allí:

• llm_stream_url: {provider_url}/chat/completions/stream
• llm_use_streaming: true

De lo contrario, deja la transmisión desactivada y listo.

El resultado no es genial porque no hay transmisión y los tokens de razonamiento se muestran como texto plano antes del “informe”, ¡pero funciona!

La API es muy lenta, pero parece funcionar, ver:

Dicho esto, el error/problema aquí es que esto es en gran medida inútil hasta que analicemos los enlaces de conexión y las URL de las citas, esto es factible, pero no trivial:

Cabe señalar que una respuesta enlazada me costó 70 centavos. Este no es un modelo barato, por decir lo menos, tendría mucho cuidado con él.

2 Me gusta

¡Definitivamente! Habilité esto solo para mi equipo en nuestra instancia privada e interna.

2 Me gusta