§
    ¾¤Àj*  ã                  ót   — d dl mZ d dlZd dlmZ d dlmZmZmZ  ej	        d¦  «        Z
 G d„ d¦  «        ZdS )é    )ÚannotationsN)ÚAny)ÚAiCapabilityÚAiModelSpecÚAiProviderTypezdscons.ai.registryc                  óô  — e Zd ZU dZ edej        ddej        ej	        ej
        ej        gddd¬¦  «         edej        dd	ej        ej	        ej
        ej        gd
dd¬¦  «         edej        ddej        ej	        ej
        gd
dd¬¦  «         edej        ddej        ej	        gd
dd¬¦  «         edej        ddej        ej	        ej
        gd
dd¬¦  «         edej        ddej        ej	        ej
        gd
dd¬¦  «         edej        ddej        ej	        ej
        gddd¬¦  «         edej        ddej        ej
        gddd¬¦  «         ed ej        d!d"ej        ej
        gddd¬¦  «         ed#ej        d#d$ej        ej
        gd%d&d¬¦  «        d'œ
Zd(ed)<   i d*d“d+d“d,d“d-d“d.d“dd“d/d“d0d“d1d“d2d“dd“dd“d3d“d4d“d5d“dd“d6d“ddd d#d#d7œ¥Zd8ed9<   edBd>„¦   «         ZedCdA„¦   «         ZdS )DÚCanonicalModelRegistryzISingle Source of Truth (SSOT) for all enterprise AI models across DSCons.úgpt-oss-120bu2   GPT OSS 120B (Antigravity SDK â€” Unlimited Quota)i   i    úopenrouter/gemini-3.8-flash)Úcanonical_idÚprovider_typeÚprovider_model_idÚdisplay_nameÚcapabilitiesÚcontext_windowÚmax_output_tokensÚfallback_canonical_idúgemini-3.8-flashu@   Google Gemini 3.8 Flash (Native Antigravity SDK â€” KEY REVOKED)i   úopenrouter/gemini-2.5-flashzgoogle/gemini-2.5-flashuE   Google Gemini 2.5 Flash (OpenRouter HA Cloud â€” Fast Captcha Vision)ú openrouter/gemini-2.5-flash-litezgoogle/gemini-2.5-flash-liteuF   Google Gemini 2.5 Flash Lite (OpenRouter â€” Captcha Consensus Reader)Nzgoogle/gemini-3.8-flashz-Google Gemini 3.8 Flash (OpenRouter HA Cloud)úopenrouter/gemini-3.7-flashzgoogle/gemini-3.7-flashz-Google Gemini 3.7 Flash (OpenRouter HA Cloud)úopenrouter/claude-opus-4.8zanthropic/claude-opus-4.8z)Claude Opus 4.8 (High Reasoning Fallback)i@ i   údeepseek-v4-flashúdeepseek/deepseek-v4-flashz,DeepSeek V4 Flash (Low Cost High Throughput)i   údeepseek-v4-proúdeepseek/deepseek-v4-proz+DeepSeek V4 Pro (Complex Accounting & Math)úlfm-2.5-2.6bz&Local LM Studio (Offline Zero-Latency)i €  i   )
r
   r   r   r   r   r   r   r   r   r   zdict[str, AiModelSpec]Ú_MODELSzgemini-2.0-flashzgemini-2.0-flash-001zopenrouter/gemini-2.0-flashzgoogle/gemini-2.0-flashzgemini-2.5-flashzgemini-3.1-prozgemini-3.1-pro-previewzgemini-3.6-flashz google/gemini-2.0-flash-exp:freezgoogle/gemini-3.1-prozstealth/ox-alphazclaude-opus-4.8zclaude-fable-5)zanthropic/claude-fable-5r   r   zliquid/lfm-2.5-2.6bzlfm2.5-2.6bzdict[str, str]Ú_ALIASESÚ
identifierú
str | NoneÚreturnr   c                óÖ  — |s| j         d         S |                     ¦   «                              ¦   «         }|| j         v r| j         |         S || j        v r6| j        |         }t                               d||¦  «         | j         |         S |                     d¦  «        rH|                     dd¦  «        }|| j         v r| j         |         S d|› �| j         v r| j         d|› �         S d|v rWt                               d|¦  «         t          d|› �t          j        |d|› d	�t          j        t          j        gd¬
¦  «        S t                               d|¦  «         | j         d         S )zTResolve any model string, alias, or legacy ID into a strictly validated AiModelSpec.r   z$Resolved AI model alias '%s' -> '%s'zgoogle/Ú zopenrouter/ú/z>Dynamic Plug-and-Play AI spec created for '%s' via OpenRouter.zPlug-and-Play Model (ú))r   r   r   r   r   r   zRUnregistered AI model '%s'. Defaulting to canonical 'openrouter/gemini-2.5-flash'.)r   ÚstripÚlowerr   ÚloggerÚdebugÚ
startswithÚreplaceÚinfor   r   Ú
OPENROUTERr   ÚTEXT_GENERATIONÚSTRUCTURED_JSONÚwarning)Úclsr    Úclean_idÚtargetÚsubs        ú9C:\Projects\DSCons\app\core\ai\infrastructure\registry.pyÚresolve_specz#CanonicalModelRegistry.resolve_spec»   s›  € ð ð 	>Ø”;Ð<Ô=Ð=à×#Ò#Ñ%Ô%×+Ò+Ñ-Ô-ˆà�s”{Ð"Ð"Ø”;˜xÔ(Ð(ð �s”|Ð#Ð#Ø”\ (Ô+ˆFÝ�LŠLÐ?ÀÈ6ÑRÔRÐRØ”;˜vÔ&Ð&ð ×Ò˜yÑ)Ô)ð 	8Ø×"Ò" 9¨bÑ1Ô1ˆCØ�c”kÐ!Ð!Ø”{ 3Ô'Ð'Ø"˜SÐ"Ð" c¤kÐ1Ð1Ø”{Ð#6°Ð#6Ð#6Ô7Ð7ð �(ˆ?ˆ?Ý�KŠKÐXÐZbÑcÔcÐcÝØ5¨8Ð5Ð5Ý,Ô7Ø"*Ø@°XÐ@Ð@Ð@Ý*Ô:½LÔ<XÐYØ&Cðñ ô ð õ 	�ŠØ`Øñ	
ô 	
ð 	
ð Œ{Ð8Ô9Ð9ó    ÚspecúAiModelSpec | Nonec                óH   — |j         sdS |                      |j         ¦  «        S )z2Get the next resilient fallback spec in the chain.N)r   r7   )r2   r9   s     r6   Úget_fallback_specz(CanonicalModelRegistry.get_fallback_specç   s+   € ð Ô)ð 	Ø�4Ø×Ò Ô :Ñ;Ô;Ð;r8   )r    r!   r"   r   )r9   r   r"   r:   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   ÚANTIGRAVITYr   r/   ÚMULTIMODAL_VISIONr0   ÚCODE_EXECUTIONr.   ÚLMSTUDIOr   Ú__annotations__r   Úclassmethodr7   r<   © r8   r6   r	   r	      sT  € € € € € € ØSÐSð $˜Ø'Ø(Ô4Ø,ØMàÔ,ØÔ.ØÔ,ØÔ+ð	ð "Ø"Ø"?ð
ñ 
ô 
ð  (˜KØ+Ø(Ô4Ø0Ø[àÔ,ØÔ.ØÔ,ØÔ+ð	ð #Ø"Ø"?ð
ñ 
ô 
ð  (3 {Ø6Ø(Ô3Ø7Ø`àÔ,ØÔ.ØÔ,ðð
 #Ø"Ø"?ð(
ñ (
ô (
ð" -8¨KØ;Ø(Ô3Ø<ØaàÔ,ØÔ.ðð #Ø"Ø"&ð-
ñ -
ô -
ð (3 {Ø6Ø(Ô3Ø7ØHàÔ,ØÔ.ØÔ,ðð
 #Ø"Ø"?ð(
ñ (
ô (
ð (3 {Ø6Ø(Ô3Ø7ØHàÔ,ØÔ.ØÔ,ðð
 #Ø"Ø">ð(
ñ (
ô (
ð '2 kØ5Ø(Ô3Ø9ØDàÔ,ØÔ.ØÔ,ðð
 "Ø"Ø"&ð'
ñ '
ô '
ð )˜[Ø,Ø(Ô3Ø:ØGàÔ,ØÔ,ðð !Ø"Ø"?ð
ñ 
ô 
ð '˜;Ø*Ø(Ô3Ø8ØFàÔ,ØÔ,ðð !Ø"Ø"?ð
ñ 
ô 
ð $˜Ø'Ø(Ô1Ø,ØAàÔ,ØÔ,ðð !Ø"Ø"?ð
ñ 
ô 
ðIQ'ð Q'€Gð Qð Qð Qñ Qðh ØÐ9ð àÐ =ð ð 	&Ð'Dð ð 	"Ð#@ð	 ð
 	Ð9ð ð 	"Ð#@ð ð 	Ð,ð ð 	!Ð"4ð ð 	Ð.ð ð 	+Ð,Ið ð 	"Ð#@ð ð 	"Ð#@ð ð 	 Ð!>ð ð 	Ð.ð ð 	Ð7ð ð  	$Ð%Að! ð" 	Ð6ð# ð$ %AØ&9Ø$5Ø-Ø%ð- ð  ð  €Hð ð ð ñ ð2 ð):ð ):ð ):ñ „[ð):ðV ð<ð <ð <ñ „[ð<ð <ð <r8   r	   )Ú
__future__r   ÚloggingÚtypingr   Úapp.core.ai.domain.modelsr   r   r   Ú	getLoggerr)   r	   rG   r8   r6   ú<module>rM      sŸ   ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ð Ð à OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ Oà	ˆÔ	Ð/Ñ	0Ô	0€ða<ð a<ð a<ð a<ð a<ñ a<ô a<ð a<ð a<ð a<r8   