Add auto-fetch URLs option

This commit is contained in:
Your Name 2025-12-20 15:06:41 -06:00
parent 923131b681
commit e665cd2589
4 changed files with 45 additions and 0 deletions

View file

@ -35,6 +35,7 @@ from .const import (
CONF_SEARXNG_URL,
CONF_SEARXNG_SAFESEARCH,
CONF_SEARXNG_LANGUAGE,
CONF_AUTO_FETCH_URLS,
CONF_SEED,
CONF_STOP,
CONF_TEMPERATURE,
@ -55,6 +56,7 @@ from .const import (
DEFAULT_SEARXNG_URL,
DEFAULT_SEARXNG_SAFESEARCH,
DEFAULT_SEARXNG_LANGUAGE,
DEFAULT_AUTO_FETCH_URLS,
DOMAIN,
)
from .const import DEFAULT_MAX_TOKENS, CONF_MAX_TOKENS
@ -293,6 +295,11 @@ class GroqdOptionsFlow(OptionsFlow):
description={"suggested_value": options.get(CONF_SEARXNG_SAFESEARCH, DEFAULT_SEARXNG_SAFESEARCH)},
default=options.get(CONF_SEARXNG_SAFESEARCH, DEFAULT_SEARXNG_SAFESEARCH),
): NumberSelector(NumberSelectorConfig(min=0, max=2, step=1)),
vol.Optional(
CONF_AUTO_FETCH_URLS,
description={"suggested_value": options.get(CONF_AUTO_FETCH_URLS, DEFAULT_AUTO_FETCH_URLS)},
default=options.get(CONF_AUTO_FETCH_URLS, DEFAULT_AUTO_FETCH_URLS),
): bool,
vol.Optional(
CONF_LLM_HASS_API,
description={"suggested_value": options.get(CONF_LLM_HASS_API)},

View file

@ -27,6 +27,7 @@ CONF_SEARXNG_ENABLED = "searxng_enabled"
CONF_SEARXNG_URL = "searxng_url"
CONF_SEARXNG_SAFESEARCH = "searxng_safesearch"
CONF_SEARXNG_LANGUAGE = "searxng_language"
CONF_AUTO_FETCH_URLS = "auto_fetch_urls"
DEFAULT_CHAT_MODEL = "meta-llama/llama-4-maverick-17b-128e-instruct"
DEFAULT_CONTEXT_MESSAGES = 20
@ -43,3 +44,4 @@ DEFAULT_SEARXNG_ENABLED = True
DEFAULT_SEARXNG_URL = "http://127.0.0.1:8800"
DEFAULT_SEARXNG_SAFESEARCH = 1
DEFAULT_SEARXNG_LANGUAGE = "en"
DEFAULT_AUTO_FETCH_URLS = True

View file

@ -52,6 +52,7 @@ from .const import (
CONF_SEARXNG_LANGUAGE,
CONF_SEARXNG_SAFESEARCH,
CONF_SEARXNG_URL,
CONF_AUTO_FETCH_URLS,
CONF_SEED,
CONF_STOP,
CONF_TEMPERATURE,
@ -68,6 +69,7 @@ from .const import (
DEFAULT_SEARXNG_LANGUAGE,
DEFAULT_SEARXNG_SAFESEARCH,
DEFAULT_SEARXNG_URL,
DEFAULT_AUTO_FETCH_URLS,
DEFAULT_TEMPERATURE,
DEFAULT_TOOL_CHOICE,
DEFAULT_TOP_P,
@ -180,6 +182,18 @@ async def _run_fetch(hass: HomeAssistant, url: str, max_chars: int) -> dict[str,
cleaned = cleaned[:max_chars]
return {"url": url, "content_type": content_type, "text": cleaned}
def _extract_urls(text: str, limit: int = 3) -> list[str]:
urls = re.findall(r"https?://\\S+", text or "")
cleaned = []
for url in urls:
url = url.rstrip(").,;!?\"'")
if url not in cleaned:
cleaned.append(url)
if len(cleaned) >= limit:
break
return cleaned
async def _run_searxng(
hass: HomeAssistant,
options: dict[str, Any],
@ -380,6 +394,23 @@ class GroqdConversationEntity(
response=intent_response, conversation_id=conversation_id
)
if options.get(CONF_AUTO_FETCH_URLS, DEFAULT_AUTO_FETCH_URLS):
urls = _extract_urls(user_input.text)
if urls:
fetched_chunks = []
for url in urls:
try:
fetched = await _run_fetch(self.hass, url, 2000)
fetched_chunks.append(
f"URL: {fetched['url']}\\nCONTENT: {fetched['text']}"
)
except Exception as err:
fetched_chunks.append(f"URL: {url}\\nERROR: {err}")
prompt_parts.append(
"Fetched content from links provided by the user:\\n"
+ "\\n\\n".join(fetched_chunks)
)
if llm_api:
prompt_parts.append(llm_api.api_prompt)

View file

@ -41,6 +41,11 @@
"parallel_tool_calls": "Parallel tool calls",
"response_format": "Response format",
"memory_scope": "Memory scope",
"searxng_enabled": "Enable SearxNG web search",
"searxng_url": "SearxNG URL",
"searxng_language": "SearxNG language",
"searxng_safesearch": "SearxNG safe search",
"auto_fetch_urls": "Auto-fetch URLs in user messages",
"llm_hass_api": "Home Assistant LLM API"
},
"data_description": {