
    5i                        d Z ddlmZ ddlmZmZ ddlmZ ddlm	Z	 ddl
mZ  G d de      Z G d	 d
e      Z G d de      Zy)z
Abstract base classes (ports) for provider interfaces.

These ABCs define the contracts that all provider implementations must follow.
Each provider type (image, video, TTS) has a single async interface.
    )annotations)ABCabstractmethod)Callable)Path)Anyc                  6    e Zd ZU dZded<   edd       ZddZy)	ImageProvideru!   Port: text prompt → image file.strnamec                   K   yw)z@Generate an image from prompt, save to output_path, return path.N )selfpromptoutput_pathkwargss       8/root/.openclaw/workspace/visionaryfx/providers/ports.pygeneratezImageProvider.generate         	   c                   K   ywzDCleanup resources. Override for providers with browsers/connections.Nr   r   s    r   closezImageProvider.close   	     r   N)r   r   r   r   r   r   returnr   r   None__name__
__module____qualname____doc____annotations__r   r   r   r       r   r
   r
      s!    +
I r%   r
   c                  L    e Zd ZU dZded<   e	 d	 	 	 	 	 	 	 	 	 dd       Zd	dZy)
VideoProvideru$   Port: image + prompt → video file.r   r   Nc                   K   yw)zCGenerate video from image+prompt, save to output_path, return path.Nr   )r   
image_pathvideo_promptr   on_progresss        r   r   zVideoProvider.generate$   s      	r   c                   K   ywr   r   r   s    r   r   zVideoProvider.close/   r   r   )N)
r)   r   r*   r   r   r   r+   zCallable[[int], None] | Noner   r   r   r   r   r%   r   r'   r'      sV    .
I 59  	
 2 
 r%   r'   c                  R    e Zd ZU dZded<   edd       Zeed	d              Zd
dZ	y)TTSProvideru   Port: text → audio file.r   r   c                   K   yw)z8Generate speech audio, save to output_path, return path.Nr   )r   textr   s      r   r   zTTSProvider.generate9   r   r   c                     y)z!Return audio duration in seconds.Nr   )
audio_paths    r   get_audio_durationzTTSProvider.get_audio_duration>   s     	r%   c                   K   ywr   r   r   s    r   r   zTTSProvider.closeD   r   r   N)r0   r   r   r   r   r   )r2   r   r   floatr   )
r    r!   r"   r#   r$   r   r   staticmethodr3   r   r   r%   r   r.   r.   4   s=    $
I    r%   r.   N)r#   
__future__r   abcr   r   collections.abcr   pathlibr   typingr   r
   r'   r.   r   r%   r   <module>r<      s?    # # $  C C *# r%   