Ë
    tPêjÒ  ã                   ód   — d Z ddlZddlmZ ddlmZmZmZ ddlZ G d„ de	e«      Z
 G d„ d«      Zy)	zPCloudZero Resource Names (CZRN) generation and validation for LiteLLM resources.é    N)ÚEnum)ÚAnyÚFinalÚcastc                   ó   — e Zd ZdZy)ÚCZEntityTypeÚteamN)Ú__name__Ú
__module__Ú__qualname__ÚTEAM© ó    úu/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/integrations/cloudzero/cz_resource_names.pyr   r      s   „ Ø�Dr   r   c                   óÐ   — e Zd ZdZ ej
                  d«      Zd„ Zdee	e
f   de	fd„Zde	de	d	e	d
e	de	de	de	fd„Zde	defd„Zde	dee	e	e	e	e	e	f   fd„Zde	de	fd„Zdde	dede	fd„Zy)ÚCZRNGeneratorz@Generate CloudZero Resource Names (CZRNs) for LiteLLM resources.zO^czrn:([a-z0-9-]+):([a-zA-Z0-9-]+):([a-z0-9-]+):([a-z0-9-]+):([a-z0-9-]+):(.+)$c                  ó   — y)zInitialize CZRN generator.Nr   )Úselfs    r   Ú__init__zCZRNGenerator.__init__#   s   � r   ÚrowÚreturnc                 óì   — d}| j                  |j                  dd«      «      }d}|j                  dd«      }| j                  |«      }d}|j                  dd«      }|}	| j                  ||||||	¬«      S )	aQ  Create a CZRN from LiteLLM daily spend data.

        CZRN format: czrn:<service-type>:<provider>:<region>:<owner-account-id>:<resource-type>:<cloud-local-id>

        For LiteLLM resources, we map:
        - service-type: 'litellm' (the service managing the LLM calls)
        - provider: The custom_llm_provider (e.g., 'openai', 'anthropic', 'azure')
        - region: 'cross-region' (LiteLLM operates across regions)
        - owner-account-id: The team_id or user_id (entity_id)
        - resource-type: 'llm-usage' (represents LLM usage/inference)
        - cloud-local-id: model
        ÚlitellmÚcustom_llm_providerÚunknownzcross-regionÚteam_idz	llm-usageÚmodel)Úservice_typeÚproviderÚregionÚowner_account_idÚresource_typeÚcloud_local_id)Ú_normalize_providerÚgetÚ_normalize_componentÚcreate_from_components)
r   r   r   r   r    r   r!   r"   r   r#   s
             r   Úcreate_from_litellm_dataz&CZRNGenerator.create_from_litellm_data&   s”   € ð (ˆØ×2Ñ2°3·7±7Ð;PÐR[Ó3\Ó]ˆØ&ˆð Ÿ™ ¨IÓ6ˆØ"&×";Ñ";¸GÓ"DÐà*ˆð —w‘w˜w¨	Ó2ˆà %ˆà×*Ñ*Ø%ØØØ-Ø'Ø)ð +ó 
ð 	
r   r   r   r    r!   r"   r#   c                 ó  — | j                  |d¬«      }| j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }d|› d|› d|› d|› d|› d|› �}| j                  |«      st        d|› �«      ‚|S )z)Create a CZRN from individual components.T)Úallow_uppercasezczrn:ú:zGenerated CZRN is invalid: )r&   Úis_validÚ
ValueError)r   r   r   r    r!   r"   r#   Úczrns           r   r'   z$CZRNGenerator.create_from_componentsK   s³   € ð ×0Ñ0°ÈtÐ0ÓTˆØ×,Ñ,¨XÓ6ˆØ×*Ñ*¨6Ó2ˆØ×4Ñ4Ð5EÓFÐØ×1Ñ1°-Ó@ˆð ˜l˜^¨1¨X¨J°a¸°x¸qÐAQÐ@RÐRSÐTaÐSbÐbcÐdrÐcsÐtˆà�}‰}˜TÔ"ÜÐ:¸4¸&ÐAÓBÐBàˆr   r.   c                 óJ   — t        | j                  j                  |«      «      S )z3Validate a CZRN string against the standard format.)ÚboolÚ
CZRN_REGEXÚmatch)r   r.   s     r   r,   zCZRNGenerator.is_validd   s   € ä�D—O‘O×)Ñ)¨$Ó/Ó0Ð0r   c           	      óÖ   — | j                   j                  |«      }|st        d|› �«      ‚t        t        t
        t
        t
        t
        t
        t
        f   |j                  «       «      S )z�Extract all components from a CZRN.

        Returns: (service_type, provider, region, owner_account_id, resource_type, cloud_local_id)
        zInvalid CZRN format: )r1   r2   r-   r   ÚtupleÚstrÚgroups)r   r.   r2   s      r   Úextract_componentsz CZRNGenerator.extract_componentsh   sS   € ð
 —‘×,Ñ,¨TÓ2ˆÙÜÐ4°T°FÐ;Ó<Ð<ä”Eœ#œs¤C¬¬c´3Ð6Ñ7¸¿¹»ÓHÐHr   c                 óF  — t         j                  j                  j                  dt         j                  j                  j                  dt         j                  j
                  j                  dt         j                  j                  j                  dt         j                  j                  j                  dt         j                  j                  j                  dt         j                  j                  j                  dt         j                  j                  j                  dt         j                  j                  j                  dt         j                  j                  j                  d	i
}|j                  «       j                  d
d«      }||vr|S |j                  ||«      S )z1Normalize provider names to standard CZRN format.ÚazureÚ	anthropicÚawsÚgcpÚgoogleÚcohereÚhuggingfaceÚ	replicateztogether-aiÚ_ú-)r   ÚLlmProvidersÚAZUREÚvalueÚAZURE_AIÚ	ANTHROPICÚBEDROCKÚ	VERTEX_AIÚGEMINIÚCOHEREÚHUGGINGFACEÚ	REPLICATEÚTOGETHER_AIÚlowerÚreplacer%   )r   r   Úprovider_mapÚ
normalizeds       r   r$   z!CZRNGenerator._normalize_providers   s/  € ô × Ñ ×&Ñ&×,Ñ,¨gÜ× Ñ ×)Ñ)×/Ñ/°Ü× Ñ ×*Ñ*×0Ñ0°+Ü× Ñ ×(Ñ(×.Ñ.°Ü× Ñ ×*Ñ*×0Ñ0°%Ü× Ñ ×'Ñ'×-Ñ-¨xÜ× Ñ ×'Ñ'×-Ñ-¨xÜ× Ñ ×,Ñ,×2Ñ2°MÜ× Ñ ×*Ñ*×0Ñ0°+Ü× Ñ ×,Ñ,×2Ñ2°Mð
ˆð %ŸN™NÓ,×4Ñ4°S¸#Ó>ˆ
ð ˜\Ñ)ØÐØ×Ñ 
¨JÓ7Ð7r   Ú	componentr*   c                 ó¶   — |sy|s|j                  «       }t        j                  dd|«      }t        j                  dd|«      }|j                  d«      }|xs dS )z7Normalize a CZRN component to meet format requirements.r   z[^a-zA-Z0-9-]rB   z-+)rO   ÚreÚsubÚstrip)r   rS   r*   s      r   r&   z"CZRNGenerator._normalize_componentŠ   s]   € áØñ Ø!Ÿ™Ó)ˆIô —F‘FÐ+¨S°)Ó<ˆ	ô —F‘F˜5 # yÓ1ˆ	ð —O‘O CÓ(ˆ	àÒ%˜IÐ%r   N)F)r
   r   r   Ú__doc__rU   Úcompiler1   r   Údictr5   r   r(   r'   r0   r,   r4   r7   r$   r&   r   r   r   r   r      sé   „ ÙJà�—‘ÐnÓo€Jò)ð#
¨D°°c°©Nð #
¸só #
ðJàðð ðð ð	ð
 ðð ðð ðð 
óð21˜Sð 1 Tó 1ð	I sð 	I¨u°S¸#¸sÀCÈÈcÐ5QÑ/Ró 	Ið8¨Cð 8°Có 8ñ.&¨cð &ÀDð &ÐUXô &r   r   )rX   rU   Úenumr   Útypingr   r   r   r   r5   r   r   r   r   r   ú<module>r]      s4   ðñ" Wã 	Ý ß #Ñ #ã ô�3˜ô ÷~&ò ~&r   