mirror of
https://github.com/sudoxreboot/groqd
synced 2026-04-14 11:36:49 +00:00
Add auto-fetch URLs option
This commit is contained in:
parent
923131b681
commit
e665cd2589
4 changed files with 45 additions and 0 deletions
|
|
@ -35,6 +35,7 @@ from .const import (
|
||||||
CONF_SEARXNG_URL,
|
CONF_SEARXNG_URL,
|
||||||
CONF_SEARXNG_SAFESEARCH,
|
CONF_SEARXNG_SAFESEARCH,
|
||||||
CONF_SEARXNG_LANGUAGE,
|
CONF_SEARXNG_LANGUAGE,
|
||||||
|
CONF_AUTO_FETCH_URLS,
|
||||||
CONF_SEED,
|
CONF_SEED,
|
||||||
CONF_STOP,
|
CONF_STOP,
|
||||||
CONF_TEMPERATURE,
|
CONF_TEMPERATURE,
|
||||||
|
|
@ -55,6 +56,7 @@ from .const import (
|
||||||
DEFAULT_SEARXNG_URL,
|
DEFAULT_SEARXNG_URL,
|
||||||
DEFAULT_SEARXNG_SAFESEARCH,
|
DEFAULT_SEARXNG_SAFESEARCH,
|
||||||
DEFAULT_SEARXNG_LANGUAGE,
|
DEFAULT_SEARXNG_LANGUAGE,
|
||||||
|
DEFAULT_AUTO_FETCH_URLS,
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
)
|
)
|
||||||
from .const import DEFAULT_MAX_TOKENS, CONF_MAX_TOKENS
|
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)},
|
description={"suggested_value": options.get(CONF_SEARXNG_SAFESEARCH, DEFAULT_SEARXNG_SAFESEARCH)},
|
||||||
default=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)),
|
): 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(
|
vol.Optional(
|
||||||
CONF_LLM_HASS_API,
|
CONF_LLM_HASS_API,
|
||||||
description={"suggested_value": options.get(CONF_LLM_HASS_API)},
|
description={"suggested_value": options.get(CONF_LLM_HASS_API)},
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,7 @@ CONF_SEARXNG_ENABLED = "searxng_enabled"
|
||||||
CONF_SEARXNG_URL = "searxng_url"
|
CONF_SEARXNG_URL = "searxng_url"
|
||||||
CONF_SEARXNG_SAFESEARCH = "searxng_safesearch"
|
CONF_SEARXNG_SAFESEARCH = "searxng_safesearch"
|
||||||
CONF_SEARXNG_LANGUAGE = "searxng_language"
|
CONF_SEARXNG_LANGUAGE = "searxng_language"
|
||||||
|
CONF_AUTO_FETCH_URLS = "auto_fetch_urls"
|
||||||
|
|
||||||
DEFAULT_CHAT_MODEL = "meta-llama/llama-4-maverick-17b-128e-instruct"
|
DEFAULT_CHAT_MODEL = "meta-llama/llama-4-maverick-17b-128e-instruct"
|
||||||
DEFAULT_CONTEXT_MESSAGES = 20
|
DEFAULT_CONTEXT_MESSAGES = 20
|
||||||
|
|
@ -43,3 +44,4 @@ DEFAULT_SEARXNG_ENABLED = True
|
||||||
DEFAULT_SEARXNG_URL = "http://127.0.0.1:8800"
|
DEFAULT_SEARXNG_URL = "http://127.0.0.1:8800"
|
||||||
DEFAULT_SEARXNG_SAFESEARCH = 1
|
DEFAULT_SEARXNG_SAFESEARCH = 1
|
||||||
DEFAULT_SEARXNG_LANGUAGE = "en"
|
DEFAULT_SEARXNG_LANGUAGE = "en"
|
||||||
|
DEFAULT_AUTO_FETCH_URLS = True
|
||||||
|
|
|
||||||
|
|
@ -52,6 +52,7 @@ from .const import (
|
||||||
CONF_SEARXNG_LANGUAGE,
|
CONF_SEARXNG_LANGUAGE,
|
||||||
CONF_SEARXNG_SAFESEARCH,
|
CONF_SEARXNG_SAFESEARCH,
|
||||||
CONF_SEARXNG_URL,
|
CONF_SEARXNG_URL,
|
||||||
|
CONF_AUTO_FETCH_URLS,
|
||||||
CONF_SEED,
|
CONF_SEED,
|
||||||
CONF_STOP,
|
CONF_STOP,
|
||||||
CONF_TEMPERATURE,
|
CONF_TEMPERATURE,
|
||||||
|
|
@ -68,6 +69,7 @@ from .const import (
|
||||||
DEFAULT_SEARXNG_LANGUAGE,
|
DEFAULT_SEARXNG_LANGUAGE,
|
||||||
DEFAULT_SEARXNG_SAFESEARCH,
|
DEFAULT_SEARXNG_SAFESEARCH,
|
||||||
DEFAULT_SEARXNG_URL,
|
DEFAULT_SEARXNG_URL,
|
||||||
|
DEFAULT_AUTO_FETCH_URLS,
|
||||||
DEFAULT_TEMPERATURE,
|
DEFAULT_TEMPERATURE,
|
||||||
DEFAULT_TOOL_CHOICE,
|
DEFAULT_TOOL_CHOICE,
|
||||||
DEFAULT_TOP_P,
|
DEFAULT_TOP_P,
|
||||||
|
|
@ -180,6 +182,18 @@ async def _run_fetch(hass: HomeAssistant, url: str, max_chars: int) -> dict[str,
|
||||||
cleaned = cleaned[:max_chars]
|
cleaned = cleaned[:max_chars]
|
||||||
return {"url": url, "content_type": content_type, "text": cleaned}
|
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(
|
async def _run_searxng(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
options: dict[str, Any],
|
options: dict[str, Any],
|
||||||
|
|
@ -380,6 +394,23 @@ class GroqdConversationEntity(
|
||||||
response=intent_response, conversation_id=conversation_id
|
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:
|
if llm_api:
|
||||||
prompt_parts.append(llm_api.api_prompt)
|
prompt_parts.append(llm_api.api_prompt)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,11 @@
|
||||||
"parallel_tool_calls": "Parallel tool calls",
|
"parallel_tool_calls": "Parallel tool calls",
|
||||||
"response_format": "Response format",
|
"response_format": "Response format",
|
||||||
"memory_scope": "Memory scope",
|
"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"
|
"llm_hass_api": "Home Assistant LLM API"
|
||||||
},
|
},
|
||||||
"data_description": {
|
"data_description": {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue