mirror of
https://github.com/home-assistant/core.git
synced 2025-04-26 18:27:51 +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 (
|
from .const import (
|
||||||
CONF_CHAT_MODEL,
|
CONF_CHAT_MODEL,
|
||||||
|
CONF_DANGEROUS_BLOCK_THRESHOLD,
|
||||||
|
CONF_HARASSMENT_BLOCK_THRESHOLD,
|
||||||
|
CONF_HATE_BLOCK_THRESHOLD,
|
||||||
CONF_MAX_TOKENS,
|
CONF_MAX_TOKENS,
|
||||||
CONF_PROMPT,
|
CONF_PROMPT,
|
||||||
CONF_RECOMMENDED,
|
CONF_RECOMMENDED,
|
||||||
|
CONF_SEXUAL_BLOCK_THRESHOLD,
|
||||||
CONF_TEMPERATURE,
|
CONF_TEMPERATURE,
|
||||||
CONF_TOP_K,
|
CONF_TOP_K,
|
||||||
CONF_TOP_P,
|
CONF_TOP_P,
|
||||||
DEFAULT_PROMPT,
|
DEFAULT_PROMPT,
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
RECOMMENDED_CHAT_MODEL,
|
RECOMMENDED_CHAT_MODEL,
|
||||||
|
RECOMMENDED_HARM_BLOCK_THRESHOLD,
|
||||||
RECOMMENDED_MAX_TOKENS,
|
RECOMMENDED_MAX_TOKENS,
|
||||||
RECOMMENDED_TEMPERATURE,
|
RECOMMENDED_TEMPERATURE,
|
||||||
RECOMMENDED_TOP_K,
|
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(
|
schema.update(
|
||||||
{
|
{
|
||||||
vol.Optional(
|
vol.Optional(
|
||||||
@ -236,6 +265,32 @@ async def google_generative_ai_config_option_schema(
|
|||||||
description={"suggested_value": options.get(CONF_MAX_TOKENS)},
|
description={"suggested_value": options.get(CONF_MAX_TOKENS)},
|
||||||
default=RECOMMENDED_MAX_TOKENS,
|
default=RECOMMENDED_MAX_TOKENS,
|
||||||
): int,
|
): 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
|
return schema
|
||||||
|
@ -18,3 +18,8 @@ CONF_TOP_K = "top_k"
|
|||||||
RECOMMENDED_TOP_K = 64
|
RECOMMENDED_TOP_K = 64
|
||||||
CONF_MAX_TOKENS = "max_tokens"
|
CONF_MAX_TOKENS = "max_tokens"
|
||||||
RECOMMENDED_MAX_TOKENS = 150
|
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 (
|
from .const import (
|
||||||
CONF_CHAT_MODEL,
|
CONF_CHAT_MODEL,
|
||||||
|
CONF_DANGEROUS_BLOCK_THRESHOLD,
|
||||||
|
CONF_HARASSMENT_BLOCK_THRESHOLD,
|
||||||
|
CONF_HATE_BLOCK_THRESHOLD,
|
||||||
CONF_MAX_TOKENS,
|
CONF_MAX_TOKENS,
|
||||||
CONF_PROMPT,
|
CONF_PROMPT,
|
||||||
|
CONF_SEXUAL_BLOCK_THRESHOLD,
|
||||||
CONF_TEMPERATURE,
|
CONF_TEMPERATURE,
|
||||||
CONF_TOP_K,
|
CONF_TOP_K,
|
||||||
CONF_TOP_P,
|
CONF_TOP_P,
|
||||||
@ -31,6 +35,7 @@ from .const import (
|
|||||||
DOMAIN,
|
DOMAIN,
|
||||||
LOGGER,
|
LOGGER,
|
||||||
RECOMMENDED_CHAT_MODEL,
|
RECOMMENDED_CHAT_MODEL,
|
||||||
|
RECOMMENDED_HARM_BLOCK_THRESHOLD,
|
||||||
RECOMMENDED_MAX_TOKENS,
|
RECOMMENDED_MAX_TOKENS,
|
||||||
RECOMMENDED_TEMPERATURE,
|
RECOMMENDED_TEMPERATURE,
|
||||||
RECOMMENDED_TOP_K,
|
RECOMMENDED_TOP_K,
|
||||||
@ -168,6 +173,20 @@ class GoogleGenerativeAIConversationEntity(
|
|||||||
CONF_MAX_TOKENS, RECOMMENDED_MAX_TOKENS
|
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,
|
tools=tools or None,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -25,7 +25,11 @@
|
|||||||
"top_p": "Top P",
|
"top_p": "Top P",
|
||||||
"top_k": "Top K",
|
"top_k": "Top K",
|
||||||
"max_tokens": "Maximum tokens to return in response",
|
"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": {
|
"data_description": {
|
||||||
"prompt": "Instruct how the LLM should respond. This can be a template."
|
"prompt": "Instruct how the LLM should respond. This can be a template."
|
||||||
|
@ -13,6 +13,12 @@
|
|||||||
'top_p': 0.95,
|
'top_p': 0.95,
|
||||||
}),
|
}),
|
||||||
'model_name': 'models/gemini-1.5-flash-latest',
|
'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,
|
'tools': None,
|
||||||
}),
|
}),
|
||||||
),
|
),
|
||||||
@ -57,6 +63,12 @@
|
|||||||
'top_p': 0.95,
|
'top_p': 0.95,
|
||||||
}),
|
}),
|
||||||
'model_name': 'models/gemini-1.5-flash-latest',
|
'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,
|
'tools': None,
|
||||||
}),
|
}),
|
||||||
),
|
),
|
||||||
@ -101,6 +113,12 @@
|
|||||||
'top_p': 0.95,
|
'top_p': 0.95,
|
||||||
}),
|
}),
|
||||||
'model_name': 'models/gemini-1.5-flash-latest',
|
'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,
|
'tools': None,
|
||||||
}),
|
}),
|
||||||
),
|
),
|
||||||
@ -148,6 +166,12 @@
|
|||||||
'top_p': 0.95,
|
'top_p': 0.95,
|
||||||
}),
|
}),
|
||||||
'model_name': 'models/gemini-1.5-flash-latest',
|
'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,
|
'tools': None,
|
||||||
}),
|
}),
|
||||||
),
|
),
|
||||||
|
@ -9,14 +9,19 @@ import pytest
|
|||||||
from homeassistant import config_entries
|
from homeassistant import config_entries
|
||||||
from homeassistant.components.google_generative_ai_conversation.const import (
|
from homeassistant.components.google_generative_ai_conversation.const import (
|
||||||
CONF_CHAT_MODEL,
|
CONF_CHAT_MODEL,
|
||||||
|
CONF_DANGEROUS_BLOCK_THRESHOLD,
|
||||||
|
CONF_HARASSMENT_BLOCK_THRESHOLD,
|
||||||
|
CONF_HATE_BLOCK_THRESHOLD,
|
||||||
CONF_MAX_TOKENS,
|
CONF_MAX_TOKENS,
|
||||||
CONF_PROMPT,
|
CONF_PROMPT,
|
||||||
CONF_RECOMMENDED,
|
CONF_RECOMMENDED,
|
||||||
|
CONF_SEXUAL_BLOCK_THRESHOLD,
|
||||||
CONF_TEMPERATURE,
|
CONF_TEMPERATURE,
|
||||||
CONF_TOP_K,
|
CONF_TOP_K,
|
||||||
CONF_TOP_P,
|
CONF_TOP_P,
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
RECOMMENDED_CHAT_MODEL,
|
RECOMMENDED_CHAT_MODEL,
|
||||||
|
RECOMMENDED_HARM_BLOCK_THRESHOLD,
|
||||||
RECOMMENDED_MAX_TOKENS,
|
RECOMMENDED_MAX_TOKENS,
|
||||||
RECOMMENDED_TOP_K,
|
RECOMMENDED_TOP_K,
|
||||||
RECOMMENDED_TOP_P,
|
RECOMMENDED_TOP_P,
|
||||||
@ -116,6 +121,10 @@ async def test_form(hass: HomeAssistant) -> None:
|
|||||||
CONF_TOP_P: RECOMMENDED_TOP_P,
|
CONF_TOP_P: RECOMMENDED_TOP_P,
|
||||||
CONF_TOP_K: RECOMMENDED_TOP_K,
|
CONF_TOP_K: RECOMMENDED_TOP_K,
|
||||||
CONF_MAX_TOKENS: RECOMMENDED_MAX_TOKENS,
|
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