Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions aidialog/_modidx.py
Original file line number Diff line number Diff line change
Expand Up @@ -252,6 +252,8 @@
'aidialog.msg_parts.InputFile': ('msg_parts.html#inputfile', 'aidialog/msg_parts.py'),
'aidialog.msg_parts.InputImage': ('msg_parts.html#inputimage', 'aidialog/msg_parts.py'),
'aidialog.msg_parts.InputVideo': ('msg_parts.html#inputvideo', 'aidialog/msg_parts.py'),
'aidialog.msg_parts.InputVideo.__init__': ( 'msg_parts.html#inputvideo.__init__',
'aidialog/msg_parts.py'),
'aidialog.msg_parts.MdStr': ('msg_parts.html#mdstr', 'aidialog/msg_parts.py'),
'aidialog.msg_parts.Media': ('msg_parts.html#media', 'aidialog/msg_parts.py'),
'aidialog.msg_parts.Media.__init__': ('msg_parts.html#media.__init__', 'aidialog/msg_parts.py'),
Expand Down
16 changes: 14 additions & 2 deletions aidialog/msg_parts.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

# %% auto #0
__all__ = ['PartType', 'tool_info', 'usage_info', 'think_start', 'think_end', 're_think', 'fence_call_re', 'Part', 'Text',
'Thinking', 'Refusal', 'Media', 'InputImage', 'InputAudio', 'InputVideo', 'InputFile', 'mk_part', 'Msg',
'Thinking', 'Refusal', 'Media', 'InputImage', 'InputAudio', 'InputFile', 'InputVideo', 'mk_part', 'Msg',
'msg2dict', 'dict2msg', 'ToolUse', 'ToolResult', 'display_list', 'Completion', 'mk_tool_res_msg', 'sys_text',
'part_txt', 'data_url', 'url_mime', 'MediaUrl', 'mk_content', 'parse_tools', 'strip_tools', 'conv_tools',
'extract_fence_call', 'mk_result_fence', 'split_fence_msgs', 'tool_text', 'fmt2hist', 'ToolResponse',
Expand Down Expand Up @@ -74,9 +74,21 @@ def __init__(self, text=None, mime=None, **kw):
# chkstyle: skip
class InputImage(Media, tag=PartType.input_image): "An image input."
class InputAudio(Media, tag=PartType.input_audio): "An audio input."
class InputVideo(Media, tag=PartType.input_video): "A video input."
class InputFile (Media, tag=PartType.input_file ): "A file input."

class InputVideo(Media, tag=PartType.input_video):
"A video input; `start`/`end` clip it to a range and `fps` sets the sampled frame rate, for providers that support them"
def __init__(self,
text=None, # URL or data URL
mime=None, # Media type
start=None, # Clip start, in seconds
end=None, # Clip end, in seconds
fps=None, # Frames per second sampled from the video
**kw
):
super().__init__(text, mime, **kw)
store_attr('start,end,fps')

# %% ../nbs/00_msg_parts.ipynb #3c5ecde9
def mk_part(type, **kw):
"The `Part` subclass registered for wire tag `type`, built from `kw`"
Expand Down
28 changes: 26 additions & 2 deletions nbs/00_msg_parts.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -235,8 +235,20 @@
"# chkstyle: skip\n",
"class InputImage(Media, tag=PartType.input_image): \"An image input.\"\n",
"class InputAudio(Media, tag=PartType.input_audio): \"An audio input.\"\n",
"class InputVideo(Media, tag=PartType.input_video): \"A video input.\"\n",
"class InputFile (Media, tag=PartType.input_file ): \"A file input.\""
"class InputFile (Media, tag=PartType.input_file ): \"A file input.\"\n",
"\n",
"class InputVideo(Media, tag=PartType.input_video):\n",
" \"A video input; `start`/`end` clip it to a range and `fps` sets the sampled frame rate, for providers that support them\"\n",
" def __init__(self,\n",
" text=None, # URL or data URL\n",
" mime=None, # Media type\n",
" start=None, # Clip start, in seconds\n",
" end=None, # Clip end, in seconds\n",
" fps=None, # Frames per second sampled from the video\n",
" **kw\n",
" ):\n",
" super().__init__(text, mime, **kw)\n",
" store_attr('start,end,fps')"
]
},
{
Expand All @@ -260,6 +272,18 @@
" return Part.reg[type](**kw)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "5b9c136b",
"metadata": {},
"outputs": [],
"source": [
"v = InputVideo('https://www.youtube.com/watch?v=x', start=600, end=1200)\n",
"test_eq(mk_part(**{k:v for k,v in v.__dict__.items() if k[0] != '_'}, type=v.type), v)\n",
"v"
]
},
{
"cell_type": "code",
"execution_count": null,
Expand Down