mirror of
https://github.com/home-assistant/core.git
synced 2025-04-25 17:57:55 +00:00
Add Google Generative AI safety settings (#117679)
* Add safety settings * snapshot-update * DROPDOWN * fix test * rename const * Update const.py * Update strings.json
This commit is contained in:
parent
5ca27f5d0c
commit
620487fe75
@ -32,15 +32,20 @@ from homeassistant.helpers.selector import (
|
||||
|
||||
from .const import (
|
||||
CONF_CHAT_MODEL,
|
||||
CONF_DANGEROUS_BLOCK_THRESHOLD,
|
||||
CONF_HARASSMENT_BLOCK_THRESHOLD,
|
||||
CONF_HATE_BLOCK_THRESHOLD,
|
||||
CONF_MAX_TOKENS,
|
||||
CONF_PROMPT,
|
||||
CONF_RECOMMENDED,
|
||||
CONF_SEXUAL_BLOCK_THRESHOLD,
|
||||
CONF_TEMPERATURE,
|
||||
CONF_TOP_K,
|
||||
CONF_TOP_P,
|
||||
DEFAULT_PROMPT,
|
||||
DOMAIN,
|
||||
RECOMMENDED_CHAT_MODEL,
|
||||
RECOMMENDED_HARM_BLOCK_THRESHOLD,
|
||||
RECOMMENDED_MAX_TOKENS,
|
||||
RECOMMENDED_TEMPERATURE,
|
||||
RECOMMENDED_TOP_K,
|
||||
@ -207,6 +212,30 @@ async def google_generative_ai_config_option_schema(
|
||||
)
|
||||
]
|
||||
|
||||
harm_block_thresholds: list[SelectOptionDict] = [
|
||||
SelectOptionDict(
|
||||
label="Block none",
|
||||
value="BLOCK_NONE",
|
||||
),
|
||||
SelectOptionDict(
|
||||
label="Block few",
|
||||
value="BLOCK_ONLY_HIGH",
|
||||
),
|
||||
SelectOptionDict(
|
||||
label="Block some",
|
||||
value="BLOCK_MEDIUM_AND_ABOVE",
|
||||
),
|
||||
SelectOptionDict(
|
||||
label="Block most",
|
||||
value="BLOCK_LOW_AND_ABOVE",
|
||||
),
|
||||
]
|
||||
harm_block_thresholds_selector = SelectSelector(
|
||||
SelectSelectorConfig(
|
||||
mode=SelectSelectorMode.DROPDOWN, options=harm_block_thresholds
|
||||
)
|
||||
)
|
||||
|
||||
schema.update(
|
||||
{
|
||||
vol.Optional(
|
||||
@ -236,6 +265,32 @@ async def google_generative_ai_config_option_schema(
|
||||
description={"suggested_value": options.get(CONF_MAX_TOKENS)},
|
||||
default=RECOMMENDED_MAX_TOKENS,
|
||||
): int,
|
||||
vol.Optional(
|
||||
CONF_HARASSMENT_BLOCK_THRESHOLD,
|
||||
description={
|
||||
"suggested_value": options.get(CONF_HARASSMENT_BLOCK_THRESHOLD)
|
||||
},
|
||||
default=RECOMMENDED_HARM_BLOCK_THRESHOLD,
|
||||
): harm_block_thresholds_selector,
|
||||
vol.Optional(
|
||||
CONF_HATE_BLOCK_THRESHOLD,
|
||||
description={"suggested_value": options.get(CONF_HATE_BLOCK_THRESHOLD)},
|
||||
default=RECOMMENDED_HARM_BLOCK_THRESHOLD,
|
||||
): harm_block_thresholds_selector,
|
||||
vol.Optional(
|
||||
CONF_SEXUAL_BLOCK_THRESHOLD,
|
||||
description={
|
||||
"suggested_value": options.get(CONF_SEXUAL_BLOCK_THRESHOLD)
|
||||
},
|
||||
default=RECOMMENDED_HARM_BLOCK_THRESHOLD,
|
||||
): harm_block_thresholds_selector,
|
||||
vol.Optional(
|
||||
CONF_DANGEROUS_BLOCK_THRESHOLD,
|
||||
description={
|
||||
"suggested_value": options.get(CONF_DANGEROUS_BLOCK_THRESHOLD)
|
||||
},
|
||||
default=RECOMMENDED_HARM_BLOCK_THRESHOLD,
|
||||
): harm_block_thresholds_selector,
|
||||
}
|
||||
)
|
||||
return schema
|
||||
|
@ -18,3 +18,8 @@ CONF_TOP_K = "top_k"
|
||||
RECOMMENDED_TOP_K = 64
|
||||
CONF_MAX_TOKENS = "max_tokens"
|
||||
RECOMMENDED_MAX_TOKENS = 150
|
||||
CONF_HARASSMENT_BLOCK_THRESHOLD = "harassment_block_threshold"
|
||||
CONF_HATE_BLOCK_THRESHOLD = "hate_block_threshold"
|
||||
CONF_SEXUAL_BLOCK_THRESHOLD = "sexual_block_threshold"
|
||||
CONF_DANGEROUS_BLOCK_THRESHOLD = "dangerous_block_threshold"
|
||||
RECOMMENDED_HARM_BLOCK_THRESHOLD = "BLOCK_LOW_AND_ABOVE"
|
||||
|
@ -22,8 +22,12 @@ from homeassistant.util import ulid
|
||||
|
||||
from .const import (
|
||||
CONF_CHAT_MODEL,
|
||||
CONF_DANGEROUS_BLOCK_THRESHOLD,
|
||||
CONF_HARASSMENT_BLOCK_THRESHOLD,
|
||||
CONF_HATE_BLOCK_THRESHOLD,
|
||||
CONF_MAX_TOKENS,
|
||||
CONF_PROMPT,
|
||||
CONF_SEXUAL_BLOCK_THRESHOLD,
|
||||
CONF_TEMPERATURE,
|
||||
CONF_TOP_K,
|
||||
CONF_TOP_P,
|
||||
@ -31,6 +35,7 @@ from .const import (
|
||||
DOMAIN,
|
||||
LOGGER,
|
||||
RECOMMENDED_CHAT_MODEL,
|
||||
RECOMMENDED_HARM_BLOCK_THRESHOLD,
|
||||
RECOMMENDED_MAX_TOKENS,
|
||||
RECOMMENDED_TEMPERATURE,
|
||||
RECOMMENDED_TOP_K,
|
||||
@ -168,6 +173,20 @@ class GoogleGenerativeAIConversationEntity(
|
||||
CONF_MAX_TOKENS, RECOMMENDED_MAX_TOKENS
|
||||
),
|
||||
},
|
||||
safety_settings={
|
||||
"HARASSMENT": self.entry.options.get(
|
||||
CONF_HARASSMENT_BLOCK_THRESHOLD, RECOMMENDED_HARM_BLOCK_THRESHOLD
|
||||
),
|
||||
"HATE": self.entry.options.get(
|
||||
CONF_HATE_BLOCK_THRESHOLD, RECOMMENDED_HARM_BLOCK_THRESHOLD
|
||||
),
|
||||
"SEXUAL": self.entry.options.get(
|
||||
CONF_SEXUAL_BLOCK_THRESHOLD, RECOMMENDED_HARM_BLOCK_THRESHOLD
|
||||
),
|
||||
"DANGEROUS": self.entry.options.get(
|
||||
CONF_DANGEROUS_BLOCK_THRESHOLD, RECOMMENDED_HARM_BLOCK_THRESHOLD
|
||||
),
|
||||
},
|
||||
tools=tools or None,
|
||||
)
|
||||
|
||||
|
@ -25,7 +25,11 @@
|
||||
"top_p": "Top P",
|
||||
"top_k": "Top K",
|
||||
"max_tokens": "Maximum tokens to return in response",
|
||||
"llm_hass_api": "[%key:common::config_flow::data::llm_hass_api%]"
|
||||
"llm_hass_api": "[%key:common::config_flow::data::llm_hass_api%]",
|
||||
"harassment_block_threshold": "Negative or harmful comments targeting identity and/or protected attributes",
|
||||
"hate_block_threshold": "Content that is rude, disrespectful, or profane",
|
||||
"sexual_block_threshold": "Contains references to sexual acts or other lewd content",
|
||||
"dangerous_block_threshold": "Promotes, facilitates, or encourages harmful acts"
|
||||
},
|
||||
"data_description": {
|
||||
"prompt": "Instruct how the LLM should respond. This can be a template."
|
||||
|
@ -13,6 +13,12 @@
|
||||
'top_p': 0.95,
|
||||
}),
|
||||
'model_name': 'models/gemini-1.5-flash-latest',
|
||||
'safety_settings': dict({
|
||||
'DANGEROUS': 'BLOCK_LOW_AND_ABOVE',
|
||||
'HARASSMENT': 'BLOCK_LOW_AND_ABOVE',
|
||||
'HATE': 'BLOCK_LOW_AND_ABOVE',
|
||||
'SEXUAL': 'BLOCK_LOW_AND_ABOVE',
|
||||
}),
|
||||
'tools': None,
|
||||
}),
|
||||
),
|
||||
@ -57,6 +63,12 @@
|
||||
'top_p': 0.95,
|
||||
}),
|
||||
'model_name': 'models/gemini-1.5-flash-latest',
|
||||
'safety_settings': dict({
|
||||
'DANGEROUS': 'BLOCK_LOW_AND_ABOVE',
|
||||
'HARASSMENT': 'BLOCK_LOW_AND_ABOVE',
|
||||
'HATE': 'BLOCK_LOW_AND_ABOVE',
|
||||
'SEXUAL': 'BLOCK_LOW_AND_ABOVE',
|
||||
}),
|
||||
'tools': None,
|
||||
}),
|
||||
),
|
||||
@ -101,6 +113,12 @@
|
||||
'top_p': 0.95,
|
||||
}),
|
||||
'model_name': 'models/gemini-1.5-flash-latest',
|
||||
'safety_settings': dict({
|
||||
'DANGEROUS': 'BLOCK_LOW_AND_ABOVE',
|
||||
'HARASSMENT': 'BLOCK_LOW_AND_ABOVE',
|
||||
'HATE': 'BLOCK_LOW_AND_ABOVE',
|
||||
'SEXUAL': 'BLOCK_LOW_AND_ABOVE',
|
||||
}),
|
||||
'tools': None,
|
||||
}),
|
||||
),
|
||||
@ -148,6 +166,12 @@
|
||||
'top_p': 0.95,
|
||||
}),
|
||||
'model_name': 'models/gemini-1.5-flash-latest',
|
||||
'safety_settings': dict({
|
||||
'DANGEROUS': 'BLOCK_LOW_AND_ABOVE',
|
||||
'HARASSMENT': 'BLOCK_LOW_AND_ABOVE',
|
||||
'HATE': 'BLOCK_LOW_AND_ABOVE',
|
||||
'SEXUAL': 'BLOCK_LOW_AND_ABOVE',
|
||||
}),
|
||||
'tools': None,
|
||||
}),
|
||||
),
|
||||
|
@ -9,14 +9,19 @@ import pytest
|
||||
from homeassistant import config_entries
|
||||
from homeassistant.components.google_generative_ai_conversation.const import (
|
||||
CONF_CHAT_MODEL,
|
||||
CONF_DANGEROUS_BLOCK_THRESHOLD,
|
||||
CONF_HARASSMENT_BLOCK_THRESHOLD,
|
||||
CONF_HATE_BLOCK_THRESHOLD,
|
||||
CONF_MAX_TOKENS,
|
||||
CONF_PROMPT,
|
||||
CONF_RECOMMENDED,
|
||||
CONF_SEXUAL_BLOCK_THRESHOLD,
|
||||
CONF_TEMPERATURE,
|
||||
CONF_TOP_K,
|
||||
CONF_TOP_P,
|
||||
DOMAIN,
|
||||
RECOMMENDED_CHAT_MODEL,
|
||||
RECOMMENDED_HARM_BLOCK_THRESHOLD,
|
||||
RECOMMENDED_MAX_TOKENS,
|
||||
RECOMMENDED_TOP_K,
|
||||
RECOMMENDED_TOP_P,
|
||||
@ -116,6 +121,10 @@ async def test_form(hass: HomeAssistant) -> None:
|
||||
CONF_TOP_P: RECOMMENDED_TOP_P,
|
||||
CONF_TOP_K: RECOMMENDED_TOP_K,
|
||||
CONF_MAX_TOKENS: RECOMMENDED_MAX_TOKENS,
|
||||
CONF_HARASSMENT_BLOCK_THRESHOLD: RECOMMENDED_HARM_BLOCK_THRESHOLD,
|
||||
CONF_HATE_BLOCK_THRESHOLD: RECOMMENDED_HARM_BLOCK_THRESHOLD,
|
||||
CONF_SEXUAL_BLOCK_THRESHOLD: RECOMMENDED_HARM_BLOCK_THRESHOLD,
|
||||
CONF_DANGEROUS_BLOCK_THRESHOLD: RECOMMENDED_HARM_BLOCK_THRESHOLD,
|
||||
},
|
||||
),
|
||||
(
|
||||
|
Loading…
x
Reference in New Issue
Block a user