mirror of
https://github.com/home-assistant/core.git
synced 2025-07-19 11:17:21 +00:00
Add PDF support for openai_conversation.generate_content
service (#141588)
Add PDF support for openai_conversation.generate_content service
This commit is contained in:
parent
31479056ed
commit
195919b5fb
@ -11,6 +11,7 @@ from openai.types.images_response import ImagesResponse
|
|||||||
from openai.types.responses import (
|
from openai.types.responses import (
|
||||||
EasyInputMessageParam,
|
EasyInputMessageParam,
|
||||||
Response,
|
Response,
|
||||||
|
ResponseInputFileParam,
|
||||||
ResponseInputImageParam,
|
ResponseInputImageParam,
|
||||||
ResponseInputMessageContentListParam,
|
ResponseInputMessageContentListParam,
|
||||||
ResponseInputParam,
|
ResponseInputParam,
|
||||||
@ -132,19 +133,28 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
|
|||||||
if not Path(filename).exists():
|
if not Path(filename).exists():
|
||||||
raise HomeAssistantError(f"`{filename}` does not exist")
|
raise HomeAssistantError(f"`{filename}` does not exist")
|
||||||
mime_type, base64_file = encode_file(filename)
|
mime_type, base64_file = encode_file(filename)
|
||||||
if "image/" not in mime_type:
|
if "image/" in mime_type:
|
||||||
|
content.append(
|
||||||
|
ResponseInputImageParam(
|
||||||
|
type="input_image",
|
||||||
|
file_id=filename,
|
||||||
|
image_url=f"data:{mime_type};base64,{base64_file}",
|
||||||
|
detail="auto",
|
||||||
|
)
|
||||||
|
)
|
||||||
|
elif "application/pdf" in mime_type:
|
||||||
|
content.append(
|
||||||
|
ResponseInputFileParam(
|
||||||
|
type="input_file",
|
||||||
|
filename=filename,
|
||||||
|
file_data=f"data:{mime_type};base64,{base64_file}",
|
||||||
|
)
|
||||||
|
)
|
||||||
|
else:
|
||||||
raise HomeAssistantError(
|
raise HomeAssistantError(
|
||||||
"Only images are supported by the OpenAI API,"
|
"Only images and PDF are supported by the OpenAI API,"
|
||||||
f"`{filename}` is not an image file"
|
f"`{filename}` is not an image file or PDF"
|
||||||
)
|
)
|
||||||
content.append(
|
|
||||||
ResponseInputImageParam(
|
|
||||||
type="input_image",
|
|
||||||
file_id=filename,
|
|
||||||
image_url=f"data:{mime_type};base64,{base64_file}",
|
|
||||||
detail="auto",
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
if CONF_FILENAMES in call.data:
|
if CONF_FILENAMES in call.data:
|
||||||
await hass.async_add_executor_job(append_files_to_content)
|
await hass.async_add_executor_job(append_files_to_content)
|
||||||
|
@ -89,7 +89,7 @@
|
|||||||
},
|
},
|
||||||
"generate_content": {
|
"generate_content": {
|
||||||
"name": "Generate content",
|
"name": "Generate content",
|
||||||
"description": "Sends a conversational query to ChatGPT including any attached image files",
|
"description": "Sends a conversational query to ChatGPT including any attached image or PDF files",
|
||||||
"fields": {
|
"fields": {
|
||||||
"config_entry": {
|
"config_entry": {
|
||||||
"name": "Config entry",
|
"name": "Config entry",
|
||||||
|
@ -262,6 +262,27 @@ async def test_init_error(
|
|||||||
},
|
},
|
||||||
0,
|
0,
|
||||||
),
|
),
|
||||||
|
(
|
||||||
|
{"prompt": "Picture of a dog", "filenames": ["/a/b/c.pdf"]},
|
||||||
|
{
|
||||||
|
"input": [
|
||||||
|
{
|
||||||
|
"content": [
|
||||||
|
{
|
||||||
|
"type": "input_text",
|
||||||
|
"text": "Picture of a dog",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "input_file",
|
||||||
|
"file_data": "data:application/pdf;base64,BASE64IMAGE1",
|
||||||
|
"filename": "/a/b/c.pdf",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
1,
|
||||||
|
),
|
||||||
(
|
(
|
||||||
{"prompt": "Picture of a dog", "filenames": ["/a/b/c.jpg"]},
|
{"prompt": "Picture of a dog", "filenames": ["/a/b/c.jpg"]},
|
||||||
{
|
{
|
||||||
@ -415,8 +436,8 @@ async def test_generate_content_service(
|
|||||||
[True, False],
|
[True, False],
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
{"prompt": "Not a picture of a dog", "filenames": ["/a/b/c.pdf"]},
|
{"prompt": "Not a picture of a dog", "filenames": ["/a/b/c.mov"]},
|
||||||
"Only images are supported by the OpenAI API,`/a/b/c.pdf` is not an image file",
|
"Only images and PDF are supported by the OpenAI API,`/a/b/c.mov` is not an image file or PDF",
|
||||||
1,
|
1,
|
||||||
[True],
|
[True],
|
||||||
[True],
|
[True],
|
||||||
|
Loading…
x
Reference in New Issue
Block a user