Add OpenAI Conversation system prompt user_name and llm_context variables (#118512)

* OpenAI Conversation: Add variables to the system prompt

* User name and llm_context

* test for user name

* test for user id

---------

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
This commit is contained in:
Denis Shulyaka 2024-06-01 03:28:23 +08:00 committed by GitHub
parent 80e9ff672a
commit 46da43d09d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 75 additions and 10 deletions

View file

@ -113,20 +113,22 @@ class OpenAIConversationEntity(
intent_response = intent.IntentResponse(language=user_input.language)
llm_api: llm.APIInstance | None = None
tools: list[ChatCompletionToolParam] | None = None
user_name: str | None = None
llm_context = llm.LLMContext(
platform=DOMAIN,
context=user_input.context,
user_prompt=user_input.text,
language=user_input.language,
assistant=conversation.DOMAIN,
device_id=user_input.device_id,
)
if options.get(CONF_LLM_HASS_API):
try:
llm_api = await llm.async_get_api(
self.hass,
options[CONF_LLM_HASS_API],
llm.LLMContext(
platform=DOMAIN,
context=user_input.context,
user_prompt=user_input.text,
language=user_input.language,
assistant=conversation.DOMAIN,
device_id=user_input.device_id,
),
llm_context,
)
except HomeAssistantError as err:
LOGGER.error("Error getting LLM API: %s", err)
@ -144,6 +146,18 @@ class OpenAIConversationEntity(
messages = self.history[conversation_id]
else:
conversation_id = ulid.ulid_now()
if (
user_input.context
and user_input.context.user_id
and (
user := await self.hass.auth.async_get_user(
user_input.context.user_id
)
)
):
user_name = user.name
try:
if llm_api:
api_prompt = llm_api.api_prompt
@ -158,6 +172,8 @@ class OpenAIConversationEntity(
).async_render(
{
"ha_name": self.hass.config.location_name,
"user_name": user_name,
"llm_context": llm_context,
},
parse_result=False,
),