mirror of
https://github.com/acon96/home-llm.git
synced 2026-01-10 14:18:00 -05:00
hook up prompt caching to config flow
This commit is contained in:
@@ -41,13 +41,17 @@ from .const import (
|
||||
CONF_ALLOWED_SERVICE_CALL_ARGUMENTS,
|
||||
CONF_PROMPT_TEMPLATE,
|
||||
CONF_USE_GBNF_GRAMMAR,
|
||||
CONF_GBNF_GRAMMAR_FILE,
|
||||
CONF_USE_IN_CONTEXT_LEARNING_EXAMPLES,
|
||||
CONF_IN_CONTEXT_EXAMPLES_FILE,
|
||||
CONF_TEXT_GEN_WEBUI_PRESET,
|
||||
CONF_OPENAI_API_KEY,
|
||||
CONF_TEXT_GEN_WEBUI_ADMIN_KEY,
|
||||
CONF_REFRESH_SYSTEM_PROMPT,
|
||||
CONF_REMEMBER_CONVERSATION,
|
||||
CONF_REMEMBER_NUM_INTERACTIONS,
|
||||
CONF_PROMPT_CACHING_ENABLED,
|
||||
CONF_PROMPT_CACHING_INTERVAL,
|
||||
CONF_SERVICE_CALL_REGEX,
|
||||
CONF_REMOTE_USE_CHAT_ENDPOINT,
|
||||
CONF_TEXT_GEN_WEBUI_CHAT_MODE,
|
||||
@@ -63,9 +67,14 @@ from .const import (
|
||||
DEFAULT_ALLOWED_SERVICE_CALL_ARGUMENTS,
|
||||
DEFAULT_PROMPT_TEMPLATE,
|
||||
DEFAULT_USE_GBNF_GRAMMAR,
|
||||
DEFAULT_GBNF_GRAMMAR_FILE,
|
||||
DEFAULT_USE_IN_CONTEXT_LEARNING_EXAMPLES,
|
||||
DEFAULT_IN_CONTEXT_EXAMPLES_FILE,
|
||||
DEFAULT_REFRESH_SYSTEM_PROMPT,
|
||||
DEFAULT_REMEMBER_CONVERSATION,
|
||||
DEFAULT_REMEMBER_NUM_INTERACTIONS,
|
||||
DEFAULT_PROMPT_CACHING_ENABLED,
|
||||
DEFAULT_PROMPT_CACHING_INTERVAL,
|
||||
DEFAULT_SERVICE_CALL_REGEX,
|
||||
DEFAULT_REMOTE_USE_CHAT_ENDPOINT,
|
||||
DEFAULT_TEXT_GEN_WEBUI_CHAT_MODE,
|
||||
@@ -81,8 +90,6 @@ from .const import (
|
||||
TEXT_GEN_WEBUI_CHAT_MODE_INSTRUCT,
|
||||
TEXT_GEN_WEBUI_CHAT_MODE_CHAT_INSTRUCT,
|
||||
DOMAIN,
|
||||
GBNF_GRAMMAR_FILE,
|
||||
IN_CONTEXT_EXAMPLES_FILE,
|
||||
PROMPT_TEMPLATE_DESCRIPTIONS,
|
||||
)
|
||||
|
||||
@@ -90,19 +97,24 @@ _LOGGER = logging.getLogger(__name__)
|
||||
|
||||
CONFIG_SCHEMA = cv.config_entry_only_config_schema(DOMAIN)
|
||||
|
||||
async def update_listener(hass, entry):
|
||||
async def update_listener(hass: HomeAssistant, entry: ConfigEntry):
|
||||
"""Handle options update."""
|
||||
hass.data[DOMAIN][entry.entry_id] = entry
|
||||
|
||||
# call update handler
|
||||
agent = await ha_conversation._get_agent_manager(hass).async_get_agent(entry.entry_id)
|
||||
agent: LLaMAAgent = await ha_conversation._get_agent_manager(hass).async_get_agent(entry.entry_id)
|
||||
agent._update_options()
|
||||
|
||||
backend_type = entry.data.get(CONF_BACKEND_TYPE, DEFAULT_BACKEND_TYPE)
|
||||
if backend_type in [ BACKEND_TYPE_LLAMA_HF, BACKEND_TYPE_LLAMA_EXISTING ]:
|
||||
if entry.options.get(CONF_PROMPT_CACHING_ENABLED, DEFAULT_PROMPT_CACHING_ENABLED):
|
||||
hass.async_create_task(agent._async_cache_prompt(None, None, None))
|
||||
|
||||
return True
|
||||
|
||||
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
||||
"""Set up Local LLaMA Conversation from a config entry."""
|
||||
|
||||
|
||||
def create_agent(backend_type):
|
||||
agent_cls = None
|
||||
|
||||
@@ -132,8 +144,8 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
||||
hass.data[DOMAIN][entry.entry_id] = entry
|
||||
|
||||
if backend_type in [ BACKEND_TYPE_LLAMA_HF, BACKEND_TYPE_LLAMA_EXISTING ]:
|
||||
# if entry.options.get(CONF_PROMPT_CACHING_ENABLED, DEFAULT_PROMPT_CACHING_ENABLED):
|
||||
hass.async_create_task(agent._async_cache_prompt(None, None, None))
|
||||
if entry.options.get(CONF_PROMPT_CACHING_ENABLED, DEFAULT_PROMPT_CACHING_ENABLED):
|
||||
hass.async_create_task(agent._async_cache_prompt(None, None, None))
|
||||
|
||||
return True
|
||||
|
||||
@@ -190,7 +202,8 @@ class LLaMAAgent(AbstractConversationAgent):
|
||||
|
||||
def _load_icl_examples(self):
|
||||
try:
|
||||
icl_filename = os.path.join(os.path.dirname(__file__), IN_CONTEXT_EXAMPLES_FILE)
|
||||
icl_file = self.entry.options.get(CONF_IN_CONTEXT_EXAMPLES_FILE, DEFAULT_IN_CONTEXT_EXAMPLES_FILE)
|
||||
icl_filename = os.path.join(os.path.dirname(__file__), icl_file)
|
||||
|
||||
with open(icl_filename) as f:
|
||||
self.in_context_examples = list(csv.DictReader(f))
|
||||
@@ -210,7 +223,7 @@ class LLaMAAgent(AbstractConversationAgent):
|
||||
self.in_context_examples = None
|
||||
|
||||
@property
|
||||
def entry(self):
|
||||
def entry(self) -> ConfigEntry:
|
||||
return self.hass.data[DOMAIN][self.entry_id]
|
||||
|
||||
@property
|
||||
@@ -239,7 +252,7 @@ class LLaMAAgent(AbstractConversationAgent):
|
||||
template_desc = PROMPT_TEMPLATE_DESCRIPTIONS[prompt_template]
|
||||
refresh_system_prompt = self.entry.options.get(CONF_REFRESH_SYSTEM_PROMPT, DEFAULT_REFRESH_SYSTEM_PROMPT)
|
||||
remember_conversation = self.entry.options.get(CONF_REMEMBER_CONVERSATION, DEFAULT_REMEMBER_CONVERSATION)
|
||||
remember_num_interactions = self.entry.options.get(CONF_REMEMBER_NUM_INTERACTIONS, False)
|
||||
remember_num_interactions = self.entry.options.get(CONF_REMEMBER_NUM_INTERACTIONS, DEFAULT_REMEMBER_NUM_INTERACTIONS)
|
||||
service_call_regex = self.entry.options.get(CONF_SERVICE_CALL_REGEX, DEFAULT_SERVICE_CALL_REGEX)
|
||||
allowed_service_call_arguments = self.entry.options \
|
||||
.get(CONF_ALLOWED_SERVICE_CALL_ARGUMENTS, DEFAULT_ALLOWED_SERVICE_CALL_ARGUMENTS)
|
||||
@@ -439,9 +452,6 @@ class LLaMAAgent(AbstractConversationAgent):
|
||||
"""Generate a prompt for the user."""
|
||||
entities_to_expose, domains = self._async_get_exposed_entities()
|
||||
|
||||
if True: # TODO: change this to check if prompt caching is enabled
|
||||
self.last_updated_entities
|
||||
|
||||
extra_attributes_to_expose = self.entry.options \
|
||||
.get(CONF_EXTRA_ATTRIBUTES_TO_EXPOSE, DEFAULT_EXTRA_ATTRIBUTES_TO_EXPOSE)
|
||||
allowed_service_call_arguments = self.entry.options \
|
||||
@@ -541,9 +551,8 @@ class LocalLLaMAAgent(LLaMAAgent):
|
||||
llama_cpp_module: Any
|
||||
remove_prompt_caching_listener: Callable
|
||||
model_lock: threading.Lock
|
||||
fastest_cache_prime_interval: int
|
||||
last_cache_prime: float
|
||||
last_updated_entities: list[str]
|
||||
# last_updated_entities: list[str]
|
||||
|
||||
def _load_model(self, entry: ConfigEntry) -> None:
|
||||
self.model_path = entry.data.get(CONF_DOWNLOADED_MODEL_FILE)
|
||||
@@ -580,7 +589,7 @@ class LocalLLaMAAgent(LLaMAAgent):
|
||||
|
||||
self.grammar = None
|
||||
if entry.options.get(CONF_USE_GBNF_GRAMMAR, DEFAULT_USE_GBNF_GRAMMAR):
|
||||
self._load_grammar()
|
||||
self._load_grammar(entry.options.get(CONF_GBNF_GRAMMAR_FILE, DEFAULT_GBNF_GRAMMAR_FILE))
|
||||
|
||||
# TODO: check about disk caching
|
||||
# self.llm.set_cache(self.llama_cpp_module.LlamaDiskCache(
|
||||
@@ -590,19 +599,16 @@ class LocalLLaMAAgent(LLaMAAgent):
|
||||
|
||||
self.remove_prompt_caching_listener = None
|
||||
self.last_cache_prime = None
|
||||
self.fastest_cache_prime_interval = 30
|
||||
# self.fastest_cache_prime_interval = entry.options.get(CONF_PROMPT_CACHING_INTERVAL, DEFAULT_PROMPT_CACHING_INTERVAL)
|
||||
self.model_lock = threading.Lock()
|
||||
|
||||
# if entry.options.get(CONF_PROMPT_CACHING_ENABLED, DEFAULT_PROMPT_CACHING_ENABLED):
|
||||
self._set_prompt_caching(enabled=True)
|
||||
if entry.options.get(CONF_PROMPT_CACHING_ENABLED, DEFAULT_PROMPT_CACHING_ENABLED):
|
||||
self._set_prompt_caching(enabled=True)
|
||||
|
||||
def _load_grammar(self):
|
||||
def _load_grammar(self, filename: str):
|
||||
LlamaGrammar = getattr(self.llama_cpp_module, "LlamaGrammar")
|
||||
_LOGGER.debug("Loading grammar...")
|
||||
try:
|
||||
# TODO: make grammar configurable
|
||||
with open(os.path.join(os.path.dirname(__file__), GBNF_GRAMMAR_FILE)) as f:
|
||||
with open(os.path.join(os.path.dirname(__file__), filename)) as f:
|
||||
grammar_str = "".join(f.readlines())
|
||||
self.grammar = LlamaGrammar.from_string(grammar_str)
|
||||
_LOGGER.debug("Loaded grammar")
|
||||
@@ -611,18 +617,20 @@ class LocalLLaMAAgent(LLaMAAgent):
|
||||
self.grammar = None
|
||||
|
||||
def _update_options(self):
|
||||
LLaMAAgent._update_options()
|
||||
LLaMAAgent._update_options(self)
|
||||
if self.entry.options.get(CONF_USE_GBNF_GRAMMAR, DEFAULT_USE_GBNF_GRAMMAR):
|
||||
self._load_grammar()
|
||||
self._load_grammar(self.entry.options.get(CONF_GBNF_GRAMMAR_FILE, DEFAULT_GBNF_GRAMMAR_FILE))
|
||||
else:
|
||||
self.grammar = None
|
||||
|
||||
self._set_prompt_caching(enabled=self.entry.options.get(CONF_PROMPT_CACHING_ENABLED, DEFAULT_PROMPT_CACHING_ENABLED))
|
||||
|
||||
@callback
|
||||
async def _async_cache_prompt(self, entity, old_state, new_state):
|
||||
raw_prompt = self.entry.options.get(CONF_PROMPT, DEFAULT_PROMPT)
|
||||
|
||||
if self.last_updated_entities:
|
||||
self.last_updated_entities
|
||||
# if self.last_updated_entities:
|
||||
# self.last_updated_entities
|
||||
|
||||
# TODO: track which entities are updated most often and sort them to the bottom of the system prompt
|
||||
prompt = self._format_prompt([
|
||||
@@ -651,7 +659,8 @@ class LocalLLaMAAgent(LLaMAAgent):
|
||||
def _prime_llamacpp_kv_cache(self, prompt: str) -> None:
|
||||
current_time = time.time()
|
||||
|
||||
if self.last_cache_prime and current_time - self.last_cache_prime < self.fastest_cache_prime_interval:
|
||||
fastest_prime_interval = self.entry.options.get(CONF_PROMPT_CACHING_INTERVAL, DEFAULT_PROMPT_CACHING_INTERVAL)
|
||||
if self.last_cache_prime and current_time - self.last_cache_prime < fastest_prime_interval:
|
||||
return
|
||||
|
||||
with self.model_lock:
|
||||
|
||||
@@ -47,13 +47,17 @@ from .const import (
|
||||
CONF_DOWNLOADED_MODEL_QUANTIZATION_OPTIONS,
|
||||
CONF_PROMPT_TEMPLATE,
|
||||
CONF_USE_GBNF_GRAMMAR,
|
||||
CONF_GBNF_GRAMMAR_FILE,
|
||||
CONF_EXTRA_ATTRIBUTES_TO_EXPOSE,
|
||||
CONF_ALLOWED_SERVICE_CALL_ARGUMENTS,
|
||||
CONF_TEXT_GEN_WEBUI_PRESET,
|
||||
CONF_REFRESH_SYSTEM_PROMPT,
|
||||
CONF_REMEMBER_CONVERSATION,
|
||||
CONF_REMEMBER_NUM_INTERACTIONS,
|
||||
CONF_PROMPT_CACHING_ENABLED,
|
||||
CONF_PROMPT_CACHING_INTERVAL,
|
||||
CONF_USE_IN_CONTEXT_LEARNING_EXAMPLES,
|
||||
CONF_IN_CONTEXT_EXAMPLES_FILE,
|
||||
CONF_OPENAI_API_KEY,
|
||||
CONF_TEXT_GEN_WEBUI_ADMIN_KEY,
|
||||
CONF_SERVICE_CALL_REGEX,
|
||||
@@ -73,11 +77,16 @@ from .const import (
|
||||
DEFAULT_DOWNLOADED_MODEL_QUANTIZATION,
|
||||
DEFAULT_PROMPT_TEMPLATE,
|
||||
DEFAULT_USE_GBNF_GRAMMAR,
|
||||
DEFAULT_GBNF_GRAMMAR_FILE,
|
||||
DEFAULT_EXTRA_ATTRIBUTES_TO_EXPOSE,
|
||||
DEFAULT_ALLOWED_SERVICE_CALL_ARGUMENTS,
|
||||
DEFAULT_REFRESH_SYSTEM_PROMPT,
|
||||
DEFAULT_REMEMBER_CONVERSATION,
|
||||
DEFAULT_REMEMBER_NUM_INTERACTIONS,
|
||||
DEFAULT_PROMPT_CACHING_ENABLED,
|
||||
DEFAULT_PROMPT_CACHING_INTERVAL,
|
||||
DEFAULT_USE_IN_CONTEXT_LEARNING_EXAMPLES,
|
||||
DEFAULT_IN_CONTEXT_EXAMPLES_FILE,
|
||||
DEFAULT_SERVICE_CALL_REGEX,
|
||||
DEFAULT_REMOTE_USE_CHAT_ENDPOINT,
|
||||
DEFAULT_TEXT_GEN_WEBUI_CHAT_MODE,
|
||||
@@ -570,9 +579,28 @@ class OptionsFlow(config_entries.OptionsFlow):
|
||||
self, user_input: dict[str, Any] | None = None
|
||||
) -> FlowResult:
|
||||
"""Manage the options."""
|
||||
errors = {}
|
||||
description_placeholders = {}
|
||||
|
||||
if user_input is not None:
|
||||
# TODO: validate that files exist (GBNF + ICL examples)
|
||||
return self.async_create_entry(title="LLaMA Conversation", data=user_input)
|
||||
if not user_input.get(CONF_REFRESH_SYSTEM_PROMPT) and user_input.get(CONF_PROMPT_CACHING_ENABLED):
|
||||
errors["base"] = "sys_refresh_caching_enabled"
|
||||
|
||||
if user_input.get(CONF_USE_GBNF_GRAMMAR):
|
||||
filename = user_input.get(CONF_GBNF_GRAMMAR_FILE, DEFAULT_GBNF_GRAMMAR_FILE)
|
||||
if not os.path.isfile(os.path.join(os.path.dirname(__file__), filename)):
|
||||
errors["base"] = "missing_gbnf_file"
|
||||
description_placeholders["filename"] = filename
|
||||
|
||||
if user_input.get(CONF_USE_IN_CONTEXT_LEARNING_EXAMPLES):
|
||||
filename = user_input.get(CONF_IN_CONTEXT_EXAMPLES_FILE, DEFAULT_IN_CONTEXT_EXAMPLES_FILE)
|
||||
if not os.path.isfile(os.path.join(os.path.dirname(__file__), filename)):
|
||||
errors["base"] = "missing_icl_file"
|
||||
description_placeholders["filename"] = filename
|
||||
|
||||
if len(errors) == 0:
|
||||
return self.async_create_entry(title="LLaMA Conversation", data=user_input)
|
||||
|
||||
schema = local_llama_config_option_schema(
|
||||
self.config_entry.options,
|
||||
self.config_entry.data[CONF_BACKEND_TYPE],
|
||||
@@ -580,6 +608,8 @@ class OptionsFlow(config_entries.OptionsFlow):
|
||||
return self.async_show_form(
|
||||
step_id="init",
|
||||
data_schema=vol.Schema(schema),
|
||||
errors=errors,
|
||||
description_placeholders=description_placeholders,
|
||||
)
|
||||
|
||||
|
||||
@@ -616,6 +646,16 @@ def local_llama_config_option_schema(options: MappingProxyType[str, Any], backen
|
||||
multiple=False,
|
||||
mode=SelectSelectorMode.DROPDOWN,
|
||||
)),
|
||||
vol.Required(
|
||||
CONF_USE_IN_CONTEXT_LEARNING_EXAMPLES,
|
||||
description={"suggested_value": options.get(CONF_USE_IN_CONTEXT_LEARNING_EXAMPLES)},
|
||||
default=DEFAULT_USE_IN_CONTEXT_LEARNING_EXAMPLES,
|
||||
): bool,
|
||||
vol.Required(
|
||||
CONF_IN_CONTEXT_EXAMPLES_FILE,
|
||||
description={"suggested_value": options.get(CONF_IN_CONTEXT_EXAMPLES_FILE)},
|
||||
default=DEFAULT_IN_CONTEXT_EXAMPLES_FILE,
|
||||
): str,
|
||||
vol.Required(
|
||||
CONF_MAX_TOKENS,
|
||||
description={"suggested_value": options.get(CONF_MAX_TOKENS)},
|
||||
@@ -649,12 +689,8 @@ def local_llama_config_option_schema(options: MappingProxyType[str, Any], backen
|
||||
vol.Optional(
|
||||
CONF_REMEMBER_NUM_INTERACTIONS,
|
||||
description={"suggested_value": options.get(CONF_REMEMBER_NUM_INTERACTIONS)},
|
||||
default=DEFAULT_REMEMBER_NUM_INTERACTIONS,
|
||||
): int,
|
||||
vol.Required(
|
||||
CONF_USE_IN_CONTEXT_LEARNING_EXAMPLES,
|
||||
description={"suggested_value": options.get(CONF_USE_IN_CONTEXT_LEARNING_EXAMPLES)},
|
||||
default=DEFAULT_USE_IN_CONTEXT_LEARNING_EXAMPLES,
|
||||
): bool,
|
||||
}
|
||||
|
||||
if is_local_backend(backend_type):
|
||||
@@ -674,11 +710,26 @@ def local_llama_config_option_schema(options: MappingProxyType[str, Any], backen
|
||||
description={"suggested_value": options.get(CONF_TEMPERATURE)},
|
||||
default=DEFAULT_TEMPERATURE,
|
||||
): NumberSelector(NumberSelectorConfig(min=0, max=1, step=0.05)),
|
||||
vol.Required(
|
||||
CONF_PROMPT_CACHING_ENABLED,
|
||||
description={"suggested_value": options.get(CONF_PROMPT_CACHING_ENABLED)},
|
||||
default=DEFAULT_PROMPT_CACHING_ENABLED,
|
||||
): bool,
|
||||
vol.Required(
|
||||
CONF_PROMPT_CACHING_INTERVAL,
|
||||
description={"suggested_value": options.get(CONF_PROMPT_CACHING_INTERVAL)},
|
||||
default=DEFAULT_PROMPT_CACHING_INTERVAL,
|
||||
): NumberSelector(NumberSelectorConfig(min=1, max=60, step=1)),
|
||||
vol.Required(
|
||||
CONF_USE_GBNF_GRAMMAR,
|
||||
description={"suggested_value": options.get(CONF_USE_GBNF_GRAMMAR)},
|
||||
default=DEFAULT_USE_GBNF_GRAMMAR,
|
||||
): bool
|
||||
): bool,
|
||||
vol.Required(
|
||||
CONF_GBNF_GRAMMAR_FILE,
|
||||
description={"suggested_value": options.get(CONF_GBNF_GRAMMAR_FILE)},
|
||||
default=DEFAULT_GBNF_GRAMMAR_FILE,
|
||||
): str
|
||||
})
|
||||
elif backend_type == BACKEND_TYPE_TEXT_GEN_WEBUI:
|
||||
result = insert_after_key(result, CONF_MAX_TOKENS, {
|
||||
@@ -761,7 +812,12 @@ def local_llama_config_option_schema(options: MappingProxyType[str, Any], backen
|
||||
CONF_USE_GBNF_GRAMMAR,
|
||||
description={"suggested_value": options.get(CONF_USE_GBNF_GRAMMAR)},
|
||||
default=DEFAULT_USE_GBNF_GRAMMAR,
|
||||
): bool
|
||||
): bool,
|
||||
vol.Required(
|
||||
CONF_GBNF_GRAMMAR_FILE,
|
||||
description={"suggested_value": options.get(CONF_GBNF_GRAMMAR_FILE)},
|
||||
default=DEFAULT_GBNF_GRAMMAR_FILE,
|
||||
): str
|
||||
})
|
||||
elif backend_type == BACKEND_TYPE_OLLAMA:
|
||||
result = insert_after_key(result, CONF_MAX_TOKENS, {
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
"""Constants for the LLaMa Conversation integration."""
|
||||
import types
|
||||
# import voluptuous as vol
|
||||
# import homeassistant.helpers.config_validation as cv
|
||||
# from homeassistant.const import CONF_HOST, CONF_PORT, CONF_SSL
|
||||
|
||||
DOMAIN = "llama_conversation"
|
||||
CONF_PROMPT = "prompt"
|
||||
@@ -57,8 +54,6 @@ CONF_EXTRA_ATTRIBUTES_TO_EXPOSE = "extra_attributes_to_expose"
|
||||
DEFAULT_EXTRA_ATTRIBUTES_TO_EXPOSE = ["rgb_color", "brightness", "temperature", "humidity", "fan_mode", "media_title", "volume_level", "item"]
|
||||
CONF_ALLOWED_SERVICE_CALL_ARGUMENTS = "allowed_service_call_arguments"
|
||||
DEFAULT_ALLOWED_SERVICE_CALL_ARGUMENTS = ["rgb_color", "brightness", "temperature", "humidity", "fan_mode", "hvac_mode", "preset_mode", "item", "duration"]
|
||||
GBNF_GRAMMAR_FILE = "output.gbnf"
|
||||
IN_CONTEXT_EXAMPLES_FILE = "in_context_examples.csv"
|
||||
CONF_PROMPT_TEMPLATE = "prompt_template"
|
||||
PROMPT_TEMPLATE_CHATML = "chatml"
|
||||
PROMPT_TEMPLATE_ALPACA = "alpaca"
|
||||
@@ -107,16 +102,25 @@ PROMPT_TEMPLATE_DESCRIPTIONS = {
|
||||
}
|
||||
CONF_USE_GBNF_GRAMMAR = "gbnf_grammar"
|
||||
DEFAULT_USE_GBNF_GRAMMAR = False
|
||||
CONF_GBNF_GRAMMAR_FILE = "gbnf_grammar_file"
|
||||
DEFAULT_GBNF_GRAMMAR_FILE = "output.gbnf"
|
||||
CONF_USE_IN_CONTEXT_LEARNING_EXAMPLES = "in_context_examples"
|
||||
DEFAULT_USE_IN_CONTEXT_LEARNING_EXAMPLES = True
|
||||
CONF_IN_CONTEXT_EXAMPLES_FILE = "in_context_examples_file"
|
||||
DEFAULT_IN_CONTEXT_EXAMPLES_FILE = "in_context_examples.csv"
|
||||
CONF_TEXT_GEN_WEBUI_PRESET = "text_generation_webui_preset"
|
||||
CONF_OPENAI_API_KEY = "openai_api_key"
|
||||
CONF_TEXT_GEN_WEBUI_ADMIN_KEY = "text_generation_webui_admin_key"
|
||||
CONF_REFRESH_SYSTEM_PROMPT = "refresh_prompt_per_tern"
|
||||
CONF_REMEMBER_CONVERSATION = "remember_conversation"
|
||||
CONF_REMEMBER_NUM_INTERACTIONS = "remember_num_interactions"
|
||||
DEFAULT_REFRESH_SYSTEM_PROMPT = True
|
||||
CONF_REMEMBER_CONVERSATION = "remember_conversation"
|
||||
DEFAULT_REMEMBER_CONVERSATION = True
|
||||
CONF_REMEMBER_NUM_INTERACTIONS = "remember_num_interactions"
|
||||
DEFAULT_REMEMBER_NUM_INTERACTIONS = 5
|
||||
CONF_PROMPT_CACHING_ENABLED = "prompt_caching"
|
||||
DEFAULT_PROMPT_CACHING_ENABLED = False
|
||||
CONF_PROMPT_CACHING_INTERVAL = "prompt_caching_interval"
|
||||
DEFAULT_PROMPT_CACHING_INTERVAL = 30
|
||||
CONF_SERVICE_CALL_REGEX = "service_call_regex"
|
||||
DEFAULT_SERVICE_CALL_REGEX = r"({[\S \t]*?})"
|
||||
FINE_TUNED_SERVICE_CALL_REGEX = r"```homeassistant\n([\S \t\n]*?)```"
|
||||
@@ -194,42 +198,3 @@ OPTIONS_OVERRIDES = {
|
||||
CONF_PROMPT_TEMPLATE: PROMPT_TEMPLATE_ZEPHYR,
|
||||
}
|
||||
}
|
||||
|
||||
# TODO: need to rewrite the internal config_entry key names so they actually make sense before we expose this
|
||||
# method of configuring the component. doing so will require writing a config version upgrade migration
|
||||
# MODEL_CONFIG_SCHEMA = vol.Schema(
|
||||
# {
|
||||
# vol.Required(CONF_BACKEND_TYPE): vol.All(
|
||||
# vol.In([
|
||||
# BACKEND_TYPE_LLAMA_EXISTING,
|
||||
# BACKEND_TYPE_TEXT_GEN_WEBUI,
|
||||
# BACKEND_TYPE_LLAMA_CPP_PYTHON_SERVER,
|
||||
# BACKEND_TYPE_OLLAMA,
|
||||
# BACKEND_TYPE_GENERIC_OPENAI,
|
||||
# ])
|
||||
# ),
|
||||
# vol.Optional(CONF_HOST): cv.string,
|
||||
# vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port,
|
||||
# vol.Optional(CONF_SSL, default=DEFAULT_SSL): cv.boolean,
|
||||
# vol.Optional("options"): vol.Schema(
|
||||
# {
|
||||
# vol.Optional(CONF_PROMPT): cv.string,
|
||||
# vol.Optional(CONF_PROMPT_TEMPLATE): vol.All(
|
||||
# vol.In([
|
||||
# PROMPT_TEMPLATE_ALPACA,
|
||||
# PROMPT_TEMPLATE_CHATML,
|
||||
# PROMPT_TEMPLATE_LLAMA2,
|
||||
# PROMPT_TEMPLATE_MISTRAL,
|
||||
# PROMPT_TEMPLATE_VICUNA,
|
||||
# PROMPT_TEMPLATE_ZEPHYR,
|
||||
# ])
|
||||
# ),
|
||||
# }
|
||||
# )
|
||||
# }
|
||||
# )
|
||||
|
||||
# CONFIG_SCHEMA = vol.Schema(
|
||||
# { DOMAIN: vol.All(cv.ensure_list, [MODEL_CONFIG_SCHEMA]) },
|
||||
# extra=vol.ALLOW_EXTRA,
|
||||
# )
|
||||
@@ -60,6 +60,7 @@
|
||||
"extra_attributes_to_expose": "Additional attribute to expose in the context",
|
||||
"allowed_service_call_arguments": "Arguments allowed to be pass to service calls",
|
||||
"gbnf_grammar": "Enable GBNF Grammar",
|
||||
"gbnf_grammar_file": "GBNF Grammar Filename",
|
||||
"openai_api_key": "API Key",
|
||||
"text_generation_webui_admin_key": "Admin Key",
|
||||
"service_call_regex": "Service Call Regex",
|
||||
@@ -67,9 +68,12 @@
|
||||
"remember_conversation": "Remember conversation",
|
||||
"remember_num_interactions": "Number of past interactions to remember",
|
||||
"in_context_examples": "Enable in context learning (ICL) examples",
|
||||
"in_context_examples_file": "In context learning examples CSV filename",
|
||||
"text_generation_webui_preset": "Generation Preset/Character Name",
|
||||
"remote_use_chat_endpoint": "Use chat completions endpoint",
|
||||
"text_generation_webui_chat_mode": "Chat Mode"
|
||||
"text_generation_webui_chat_mode": "Chat Mode",
|
||||
"prompt_caching": "Enable Prompt Caching",
|
||||
"prompt_caching_interval": "Prompt Caching fastest refresh interval (sec)"
|
||||
},
|
||||
"data_description": {
|
||||
"prompt": "See [here](https://github.com/acon96/home-llm/blob/develop/docs/Model%20Prompting.md) for more information on model prompting.",
|
||||
@@ -98,6 +102,7 @@
|
||||
"extra_attributes_to_expose": "Additional attribute to expose in the context",
|
||||
"allowed_service_call_arguments": "Arguments allowed to be pass to service calls",
|
||||
"gbnf_grammar": "Enable GBNF Grammar",
|
||||
"gbnf_grammar_file": "GBNF Grammar Filename",
|
||||
"openai_api_key": "API Key",
|
||||
"text_generation_webui_admin_key": "Admin Key",
|
||||
"service_call_regex": "Service Call Regex",
|
||||
@@ -105,11 +110,19 @@
|
||||
"remember_conversation": "Remember conversation",
|
||||
"remember_num_interactions": "Number of past interactions to remember",
|
||||
"in_context_examples": "Enable in context learning (ICL) examples",
|
||||
"in_context_examples_file": "In context learning examples CSV filename",
|
||||
"text_generation_webui_preset": "Generation Preset/Character Name",
|
||||
"remote_use_chat_endpoint": "Use chat completions endpoint",
|
||||
"text_generation_webui_chat_mode": "Chat Mode"
|
||||
"text_generation_webui_chat_mode": "Chat Mode",
|
||||
"prompt_caching": "Enable Prompt Caching",
|
||||
"prompt_caching_interval": "Prompt Caching fastest refresh interval (sec)"
|
||||
}
|
||||
}
|
||||
},
|
||||
"error": {
|
||||
"sys_refresh_caching_enabled": "System prompt refresh must be enabled for prompt caching to work!",
|
||||
"missing_gbnf_file": "The GBNF file was not found: '{filename}'",
|
||||
"missing_icl_file": "The in context learning example CSV file was not found: '{filename}'"
|
||||
}
|
||||
},
|
||||
"selector": {
|
||||
|
||||
Reference in New Issue
Block a user