Perplexity jako rozszerzenie możliwości Voice Assistant

Witam!

Dzięki wspaniałemu projektowi voice assistant @Krzysztof_M zacząłem zabawę z komendami głosowymi. Mój asystent konwersacji to Gemini 2.0 Flash, nadaje się bardzo dobrze do zarządzania domem, niestety brakuje mu “aktualnej” wiedzy na temat świata. Celem tej konfiguracji jest możliwość przesłania pytania do API Perplexity,
Na co dzień jestem użytkownikiem Perplexity.ai, niestety brakuje jakiejkolwiek integracji z Home Assistant. Postanowiłem go zintegrować za pomocą proxy https://www.litellm.ai oraz GitHub - acon96/home-llm: A Home Assistant integration & Model to control your smart home using a Local LLM
Podobny efekt można osiągnąć używając rest api lub pisząc własną integrację. Zastosowanie proxy litellm pozwala dodać więcej modeli w tym darmowych z https://openrouter.ai. Pozwala też dodanie kilku modeli konwersacji z różnym system promptem, np. w celu ograniczenia niepożądanych treści w odpowiedziach dla dzieci.

Jak to działa:

  • OK Nabu - wybudza asystent
  • Zapytaj Sonar “pytanie”
  • treść pytania zostanie przesłana do API Sonar
  • odpowiedź wróci do asystenta głosowego

Konfiguracja:

  1. litellm (należy podać klucz API zamiast ${PERPLEXITYAI_API_KEY}) - docker-compose.yaml:
services:
  litellm:
    container_name: litellm
    image: ghcr.io/berriai/litellm:main-latest
    ports:
      - "4000:4000"
    volumes:
      - /sciezka_z_config/config.yaml:/app/config.yaml
    command: [ "--config", "/app/config.yaml", "--port", "4000"]
    environment:
      PERPLEXITYAI_API_KEY: ${PERPLEXITYAI_API_KEY}
  1. litellm - config.yaml
litellm_settings:
  drop_params: true 
model_list:
  - model_name: sonar
    litellm_params:
      model: perplexity/sonar
      api_key: "os.environ/PERPLEXITYAI_API_KEY"
  1. Używając HACS instalujemy GitHub - acon96/home-llm: A Home Assistant integration & Model to control your smart home using a Local LLM
  2. Dodajemy nowe urządzenie Local LLM Conversation:
    a) Generic OpenAI Compatible API
    b) Podajemy IP (bez http), port 4000, model sonar, podstawowe hasło to sk-1234
    c) Na kolejnej stronie wybieram “No control”, odznaczam Enable in context learning (ICL) examples, Temperature 0,2, usuwam wszystkie dodatkowe atrybuty
    d) mój kontekst do odpowiedzi na pytania
You answer questions about the world in a concise and truthful manner. Use plaintext and Polish language. Responses should be limited to a few sentences. Remove citation brackets [1][2][3] from answers.  
Current time is {{ (as_timestamp(now()) | timestamp_custom("%H:%M", local=True)) }}, current date is {{ (as_timestamp(now()) | timestamp_custom("%Y-%m-%d", local=True)) }}. If the response includes a date from the current week, provide the day of the week.
  1. Pora stworzyć automatyzację, przekazującą pytania do Sonar:
alias: Zapytaj Sonar
description: ""
triggers:
  - trigger: conversation
    command:
      - Zapytaj Sonar {pytanie}
conditions: []
actions:
  - action: conversation.process
    metadata: {}
    data:
      agent_id: conversation.llm_model_sonar_remote
      text: "{{ trigger.slots.pytanie }}"
    response_variable: odpowiedz
  - set_conversation_response: "{{ odpowiedz.response.speech.plain.speech }}"
mode: single

Efekt:

7 polubień

Cześć,
Jakie IP wpisać przy dodawaniu nowego urządzenia? Jak wpiszę api.perplexity.ai to daje się skonfigurować, ale przy zapytaniu dostaję komunikat:
“The generation request timed out! Please check your connection settings, increase the timeout in settings, or decrease the number of exposed entities.”.
Drugie pytanie: dlaczego hasło to sk-1234? Nie podajemy tu klucza api?
Dzięki

Podajesz IP na którym chodzi LiteLLM, token jest taki prosty bo to domyślny token LiteLLM.

1 polubienie