Ë
    o›Xjƒ  ã                  óà   — d dl mZ d dlZd dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ  G d„ d«      Z y)é    )ÚannotationsN)Údatetime)ÚPath)ÚSettings)ÚImageGenerator)ÚAssetProducer)ÚVisualRenderer)ÚTelegramNotifier)Ú
create_llm)ÚCreativeDirector)Úgenerate_ideas)ÚKnowledgeService)ÚNewsService)ÚDriveUploader)Úsetup_logging)Úslugifyc                  ó$   — e Zd Zdd„Zdd„Zdd„Zy)ÚContentPipelinec                óš  — || _         t        |j                  «      | _        t	        |j
                  |j                  |j                  |j                  |j                  ¬«      | _
        | j                  j                  d|j
                  «       t        «       | _        t        |j                  |j                   «      | _        t%        t'        t(        «      j+                  «       j,                  d   dz  dz  «      | _        t1        |j2                  |j4                  |j6                  |j8                  t'        t(        «      j+                  «       j,                  d   dz  dz  ¬«      | _        d }|j<                  rI|j                  r"t?        |j                  |j@                  ¬	«      }n| j                  jC                  d
«       d }|jD                  rL|jF                  jI                  d«      r1|j                  r%ddl%m&}  ||j                  |jN                  d¬«      }tQ        | j:                  |||jD                  |jF                  tS        dtU        d|jV                  «      «      |j<                  |jX                  ¬«      | _-        | j                  j                  d|j@                  |jF                  |jN                  |jX                  «       y )N)ÚproviderÚanthropic_keyÚclaude_modelÚ
openai_keyÚopenai_modelzLLM provider: %sé   Ústoragezcreative_history.jsonÚdataÚfonts)Ú
brand_nameÚprimaryÚaccentÚbgÚ	fonts_dir)ÚmodeluP   ENABLE_AI_IMAGES=true but OPENAI_API_KEY missing â€” using template/news visualsÚsorar   )ÚSoraVideoGeneratorÚ12)r$   Údefault_secondsé   é   )Úimage_generatorÚsora_generatorÚenable_videoÚvideo_engineÚvideo_max_secondsÚenable_ai_imagesÚenable_audioz>Assets: image_model=%s video_engine=%s video_model=%s audio=%s).Úsr   Ústorage_logsÚlogr   Úllm_providerÚanthropic_api_keyr   Úopenai_api_keyr   ÚllmÚinfor   Únewsr   Údata_profilesÚdata_erpÚ	knowledger   r   Ú__file__ÚresolveÚparentsÚcreativer	   r   Úbrand_primaryÚbrand_accentÚbrand_bgÚrendererr0   r   Úopenai_image_modelÚwarningr-   r.   Ú
startswithÚsrc.generators.sora_videor&   Úopenai_video_modelr   ÚminÚmaxr/   r1   Úproducer)ÚselfÚsettingsÚimg_genÚsora_genr&   s        ú0/var/www/html/content_generation/src/pipeline.pyÚ__init__zContentPipeline.__init__   s:  € ØˆŒÜ  ×!6Ñ!6Ó7ˆŒÜØ×*Ñ*Ø"×4Ñ4Ø!×.Ñ.Ø×.Ñ.Ø!×.Ñ.ô
ˆŒð 	�‰�‰Ð(¨(×*?Ñ*?Ô@Ü“MˆŒ	Ü)¨(×*@Ñ*@À(×BSÑBSÓTˆŒÜ(Ü”‹N×"Ñ"Ó$×,Ñ,¨QÑ/°)Ñ;Ð>UÑUó
ˆŒô 'Ø×*Ñ*Ø×*Ñ*Ø×(Ñ(Ø× Ñ Üœ8“n×,Ñ,Ó.×6Ñ6°qÑ9¸FÑBÀWÑLô
ˆŒð ˆØ×$Ò$Ø×&Ò&Ü(¨×)@Ñ)@È×HcÑHcÔd‘à—‘× Ñ Ð!sÔtØˆØ× Ò  X×%:Ñ%:×%EÑ%EÀfÔ%MÐRZ×RiÒRiÝDá)Ø×'Ñ'Ø×1Ñ1Ø $ôˆHô
 &Ø�M‰MØ#Ø#Ø!×.Ñ.Ø!×.Ñ.Ü! "¤c¨!¨X×-GÑ-GÓ&HÓIØ%×6Ñ6Ø!×.Ñ.ô	
ˆŒð 	�‰�‰ØLØ×'Ñ'Ø×!Ñ!Ø×'Ñ'Ø×!Ñ!õ	
ó    c                ó0  — t        j                  «       j                  d«      }| j                  j                  d|› �z  }|j                  dd¬«       | j                  j                  d|| j                  j                  «       | j                  j                  d¬«      }| j                  j                  dt        |«      |r|d	   j                  d d
 nd«       | j                  j                  «       }| j                  j!                  | j                  j"                  «      }| j                  j                  ddj%                  d„ |D «       «      «       t'        | j(                  | j                  j*                  || j                  j-                  |«      | j                  j"                  | j                  j.                  || j                  j1                  «       ¬«      }| j                  j                  dt        |«      «       | j                  j3                  |«       g }|D ]•  }||j4                  › dt7        |j8                  xs |j:                  «      › �z  }	| j                  j                  d|j4                  |j<                  «       | j>                  jA                  ||	«      }
|jC                  |
«       Œ— |t        j                  «       jE                  d¬«      | j                  j*                  |t        |«      dœ}|dz  jG                  tI        jJ                  |dd¬«      d¬«       d }| j                  j                  �s4| j                  jL                  �r| j                  j                  d«       tO        | j                  jL                  | j                  jP                  | j                  jR                  | j                  jT                  r| j                  jV                  nd | j                  jT                  ¬«      }|d d › d|dd  › d|d d! › �}d|d"d  › �}|jY                  |||¬#«      }|d$   |d%   |d&   |d'   |d(   d)œ|d*<   |dz  jG                  tI        jJ                  |dd¬«      d¬«       n1| j                  j                  s| j                  j[                  d+«       | j                  j                  s‡| j                  j\                  rq| j                  j                  d,«       t_        | j                  j\                  | j                  j`                  «      }|jc                  | je                  ||«      «       n1| j                  j                  s| j                  j[                  d-«       | j                  j                  d.|«       |S )/Nz%Y%m%d_%H%M%SÚbatch_T)r@   Úexist_okzStarting batch %s (dry_run=%s)é   )Ú	max_itemsz%Fetched %d AI/IT news items (top: %s)r   éP   ÚnonezCreative briefs: %sz, c              3  óR   K  — | ]  }|j                   › d |j                  › �–— Œ! y­w)Ú/N)ÚlayoutÚpalette_name)Ú.0Úbs     rR   Ú	<genexpr>z&ContentPipeline.run.<locals>.<genexpr>`   s%   è ø€ ÐE¹f¸˜Ÿ™˜
 ! A§N¡NÐ#3Ô4¹fùs   ‚%')r   ÚprofilesÚ
news_blockÚ
batch_sizer-   Úcreative_briefsÚrecent_styleszGenerated %d ideasÚ_zProducing %s (%s)Úseconds)Útimespec)Úbatch_idÚ
created_atÚbrandÚideasÚ
news_countzmanifest.jsonFé   )Úensure_asciiÚindentzutf-8)Úencodingu   Uploading to Google Driveâ€¦)Úoauth_client_secretsÚoauth_token_fileÚservice_account_fileÚuse_shared_driver*   Ú-é   é   é	   )Údate_folderÚbatch_folderÚ	folder_idÚ
folder_urlr|   Údate_folder_urlr}   )r~   r   r|   r€   r}   Údrivez6Skipping Drive upload (GOOGLE_DRIVE_FOLDER_ID not set)u    Sending Telegram notificationâ€¦z'Skipping Telegram (credentials missing)zBatch complete: %s)3r   ÚnowÚstrftimer2   Ú
output_dirÚmkdirr4   r9   Údry_runr:   ÚfetchÚlenÚtitler=   Úprofiles_textrA   Úassign_batchre   Újoinr   r8   r   Úas_prompt_blockr-   Úrecent_summaryÚrecordÚidr   ÚtopicÚhookÚformatrM   ÚproduceÚappendÚ	isoformatÚ
write_textÚjsonÚdumpsÚgoogle_drive_folder_idr   Úgoogle_oauth_client_secretsÚgoogle_oauth_token_fileÚgoogle_use_shared_driveÚgoogle_service_account_fileÚupload_treerG   Útelegram_bot_tokenr
   Útelegram_chat_idÚsendÚ_telegram_message)rN   ÚtsÚ	batch_dirÚ
news_itemsrc   Úbriefsrn   ÚresultsÚideaÚfolderÚmetaÚmanifestÚ
drive_infoÚuploaderr|   r}   Únotifiers                    rR   ÚrunzContentPipeline.runO   si  € Ü�\‰\‹^×$Ñ$ _Ó5ˆØ—F‘F×%Ñ%¨&°°¨Ñ5ˆ	Ø�‰ ¨tˆÔ4Ø�‰�‰Ð6¸¸D¿F¹F¿N¹NÔKà—Y‘Y—_‘_¨r�_Ó2ˆ
Ø�‰�‰Ø3Ü�
‹OÙ(2ˆJ�q‰M×Ñ  Ñ$¸ô	
ð
 —>‘>×/Ñ/Ó1ˆà—‘×+Ñ+¨D¯F©F×,=Ñ,=Ó>ˆØ�‰�‰Ø!Ø�I‰IÑE¹fÓEÓEô	
ô
 Ø�H‰HØ—v‘v×(Ñ(ØØ—y‘y×0Ñ0°Ó<Ø—v‘v×(Ñ(ØŸ™×,Ñ,Ø"ØŸ-™-×6Ñ6Ó8ô	
ˆð 	�‰�‰Ð*¬C°«JÔ7Ø�‰×Ñ˜VÔ$àˆÛˆDØ D§G¡G 9¨A¬g°d·j±jÒ6MÀDÇIÁIÓ.NÐ-OÐ!PÑPˆFØ�H‰H�M‰MÐ-¨t¯w©w¸¿¹ÔDØ—=‘=×(Ñ(¨¨vÓ6ˆDØ�N‰N˜4Õ ð	 ð Ü"Ÿ,™,›.×2Ñ2¸IÐ2ÓFØ—V‘V×&Ñ&ØÜ˜j›/ñ
ˆð 
�_Ñ	$×0Ñ0Ü�J‰J�x¨e¸AÔ>Èð 	1ô 	
ð ˆ
Ø�v‰v�~‹~ $§&¡&×"?Ó"?Ø�H‰H�M‰MÐ8Ô9Ü$Ø—‘×-Ñ-Ø%)§V¡V×%GÑ%GØ!%§¡×!?Ñ!?à—6‘6×1Ò1ð &*§V¡V×%GÒ%GàØ!%§¡×!?Ñ!?ôˆHð    ˜V˜H A b¨¨1 g Y¨a°°1°Q°¨yÐ9ˆKØ# B q r F 8Ð,ˆLØ!×-Ñ-ØØ'Ø)ð .ó ˆJð (¨Ñ4Ø(¨Ñ6Ø)¨-Ñ8Ø#-Ð.?Ñ#@Ø *¨>Ñ :ñ!ˆH�WÑð ˜Ñ(×4Ñ4Ü—
‘
˜8°%ÀÔBÈWð 5õ ð —‘—’Ø�H‰H×ÑÐUÔVà�v‰v�~Š~ $§&¡&×";Ò";Ø�H‰H�M‰MÐ<Ô=Ü'¨¯©×(AÑ(AÀ4Ç6Á6×CZÑCZÓ[ˆHØ�M‰M˜$×0Ñ0°¸:ÓFÕGØ—‘—’Ø�H‰H×ÑÐFÔGà�‰�‰Ð*¨IÔ6ØˆrT   c           	     ó:  — d| j                   j                  › �d|d   › �dt        |j                  dg «      «      › �dg}|j                  dg «      D ]u  }|j                  d«      xs |j                  d«      }|j	                  d	|j                  d
«      › d|› �«       |j                  d«      xs i }|sŒe|j	                  d«       Œw |r3|dd|j                  d«      › d|j                  d«      › �d|d   › �gz  }n|dd|d   › �gz  }dj                  |«      S )Nu   âœ… Content batch ready â€” zBatch: rk   zItems: rn   Ú r’   r‘   u   â€¢ [r“   z] Ú	platformsu1     ðŸ“± LinkedIn Â· IG Â· X Â· Threads Â· Facebooku   ðŸ“� r|   r]   r}   zDrive: r   zLocal: storage/runs/batch_Ú
)r2   r   rˆ   Úgetr•   rŒ   )rN   r¬   r­   Úlinesr©   r’   Úplatss          rR   r£   z!ContentPipeline._telegram_message­   s>  € à*¨4¯6©6×+<Ñ+<Ð*=Ð>Ø�h˜zÑ*Ð+Ð,Ø”c˜(Ÿ,™, w°Ó3Ó4Ð5Ð6Øð	
ˆð —L‘L ¨"Ö-ˆDØ—8‘8˜FÓ#Ò8 t§x¡x°Ó'8ˆDØ�L‰L˜5 §¡¨(Ó!3Ð 4°B°t°fÐ=Ô>Ø—H‘H˜[Ó)Ò/¨RˆEÚØ—‘ÐPÕRð .ñ ØØØ˜
Ÿ™ }Ó5Ð6°a¸
¿¹À~Ó8VÐ7WÐXØ˜* \Ñ2Ð3Ð4ðñ ‰Eð �bÐ6°xÀ
Ñ7KÐ6LÐMÐNÑNˆEØ�y‰y˜ÓÐrT   N)rO   r   )ÚreturnÚdict)r¬   r¹   r­   zdict | Noner¸   Ústr)Ú__name__Ú
__module__Ú__qualname__rS   r°   r£   © rT   rR   r   r      s   „ ó6
óp\ô| rT   r   )!Ú
__future__r   r˜   r   Úpathlibr   Ú
src.configr   Úsrc.generators.ai_imager   Úsrc.generators.assetsr   Úsrc.generators.visualsr	   Úsrc.notify.telegramr
   Úsrc.services.llmr   Úsrc.services.creativer   Úsrc.services.ideationr   Úsrc.services.knowledger   Úsrc.services.newsr   Úsrc.storage.driver   Úsrc.util.logging_setupr   Úsrc.util.textr   r   r¾   rT   rR   Ú<module>rÎ      sD   ðÝ "ã Ý Ý å Ý 2Ý /Ý 1Ý 0Ý 'Ý 2Ý 0Ý 3Ý )Ý +Ý 0Ý !÷l ò l rT   