Ë
    tPêjg  ã                  ót   — U d Z ddlmZ ddlZddlmZ ddlmZ ddlZ	ddl
mZ dZd	ed
<   dd„Z G d„ d«      Zy)zFocus export data transformer.é    )ÚannotationsN)Ú	timedelta)ÚFinalé   )ÚFOCUS_NORMALIZED_SCHEMA)
Úteam_idÚ
team_aliasÚorganization_idÚorganization_aliasÚuser_idÚ
user_emailÚapi_key_aliasÚmodelÚmodel_groupÚcustom_llm_providerr   Ú	_TAG_KEYSc                ó�   — dd„}t        j                  | «      j                  |t         j                  ¬«      j	                  d«      S )aR  Build a Polars expression that produces a JSON Tags string per row.

    Uses ``pl.struct`` + ``map_elements`` to avoid materialising the entire
    DataFrame to a list of Python dicts.  The JSON serialisation callback
    still runs in Python (GIL-bound), but struct-packing and loop dispatch
    are handled by Polars' Rust engine.
    c                óž   — | j                  «       D ��ci c]  \  }}|€Œ	|t        |«      “Œ }}}|rt        j                  |«      S dS c c}}w )Nú{})ÚitemsÚstrÚjsonÚdumps)ÚrowÚkÚvÚtagss       úk/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/integrations/focus/transformer.pyÚ_struct_to_jsonz)_build_tags_expr.<locals>._struct_to_json$   sG   € Ø-0¯Y©Y«[×J¡T Q¨¸A¹M�qœ#˜a›&‘yÐJˆÑJÙ#'Œt�z‰z˜$ÓÐ1¨TÐ1ùó Ks
   ”
A	ŸA	)Úreturn_dtypeÚTags)r   ÚdictÚreturnr   )ÚplÚstructÚmap_elementsÚStringÚalias)Úavailable_keysr   s     r   Ú_build_tags_exprr*      s;   € ó2ô �9‰9�^Ó$×1Ñ1°/ÔPR×PYÑPYÐ1ÓZ×`Ñ`ÐagÓhÐhó    c                  ó   — e Zd ZdZeZdd„Zy)ÚFocusTransformerz8Transforms LiteLLM DB rows into Focus-compatible schema.c                ó  ‡— |j                  «       r t        j                  | j                  ¬«      S t        D �cg c]  }||j
                  v sŒ|‘Œ }}|r|j                  t        |«      «      }n3|j                  t        j                  d«      j                  d«      «      }|j                  t        j                  d«      j                  t        j                  «      j                  j                  t        j                  d¬«      dd¬	«      j                  d
«      «      }|j                  t        j                  d
«      j                  d«      t        j                  d
«      t!        d¬«      z   j                  d«      «      }d„ }t        j"                  dd«      Šˆfd„}t        j                  dt        j                  ¬«      }t        j                  dt        j"                  dd«      ¬«      } |j$                  g  |t        j                  d«      j'                  d«      «      j                  d«      ‘t        j                  d«      j                  t        j(                  «      j                  d«      ‘t        j                  d«      j                  t        j(                  «      j                  d«      ‘t        j                  d«      j                  d«      ‘t        j                  d«      j                  d«      ‘ |t        j                  d«      «      j                  d «      ‘ |t        j                  d«      «      j                  d!«      ‘t        j                  d"«      j                  d#«      ‘|j                  d$«      ‘t        j                  d%«      j                  t        j(                  «      j                  d&«      ‘t        j                  d'«      j                  d(«      ‘ |t        j                  d«      «      j                  d«      ‘ |t        j                  d«      «      j                  d«      ‘ |t        j                  d)«      j                  t        j*                  «      j                  t        j,                  «      j'                  d«      «      j                  d*«      ‘t        j                  d+«      j                  d,«      ‘ |t        j                  d«      j'                  d«      «      j                  d-«      ‘|j                  d.«      ‘ |t        j                  d«      j'                  d«      «      j                  d/«      ‘t        j                  d0«      j                  t        j(                  «      j                  d1«      ‘|j                  d2«      ‘ |t        j                  d«      j'                  d«      «      j                  d3«      ‘|j                  d4«      ‘|j                  d5«      ‘t        j                  d«      j                  d6«      ‘|j                  d7«      ‘ |t        j                  d)«      j                  t        j*                  «      j                  t        j,                  «      j'                  d«      «      j                  d8«      ‘|j                  d9«      ‘ |t        j                  d«      j'                  d«      «      j                  d:«      ‘|j                  d;«      ‘t        j                  d+«      j                  d<«      ‘t        j                  d0«      j                  t        j(                  «      j                  d=«      ‘t        j                  d0«      j                  t        j(                  «      j                  d>«      ‘|j                  d?«      ‘|j                  d@«      ‘t        j                  d%«      j                  t        j(                  «      j                  dA«      ‘t        j                  d%«      j                  t        j(                  «      j                  dB«      ‘t        j                  d%«      j                  t        j(                  «      j                  dC«      ‘t        j                  dD«      j                  dE«      ‘t        j                  dF«      j                  dG«      ‘t        j                  dH«      j                  t        j(                  «      j                  dI«      ‘t        j                  dJ«      j                  t        j(                  «      j                  dK«      ‘t        j                  dL«      j                  t        j(                  «      j                  dM«      ‘|j                  dN«      ‘t        j                  d«      j                  t        j(                  «      j                  d«      ‘­Ž S c c}w )Oz=Return a normalized frame expected by downstream serializers.)Úschemar   r!   ÚdateÚus)Ú	time_unitz%Y-%m-%dF)ÚformatÚstrictÚ
usage_dateÚChargePeriodStartr   )ÚdaysÚChargePeriodEndc                ó8   — | j                   j                  d«      S )Nz%Y-%m-%dT%H:%M:%SZ)ÚdtÚstrftime)Úcols    r   Úfmtz'FocusTransformer.transform.<locals>.fmtH   s   € Ø—6‘6—?‘?Ð#7Ó8Ð8r+   é   é   c                ó&   •— | j                  ‰«      S )N)Úcast)r<   ÚDECs    €r   Údecz'FocusTransformer.transform.<locals>.decM   s   ø€ Ø—8‘8˜C“=Ð r+   N)ÚdtypeÚspendg        Ú
BilledCostÚapi_keyÚBillingAccountIdr   ÚBillingAccountNamezAPI KeyÚBillingAccountTypeÚUSDÚBillingCurrencyÚBillingPeriodEndÚBillingPeriodStartÚUsageÚChargeCategoryÚChargeClassr   ÚChargeDescriptionzUsage-BasedÚChargeFrequencyÚapi_requestsÚConsumedQuantityÚRequestsÚConsumedUnitÚContractedCostÚContractedUnitPriceÚEffectiveCostr   ÚInvoiceIssuerNameÚ	InvoiceIdÚListCostÚListUnitPriceÚAvailabilityZoneÚPricingCurrencyÚPricingCategoryÚPricingQuantityÚ"PricingCurrencyContractedUnitPriceÚPricingCurrencyEffectiveCostÚPricingCurrencyListUnitPriceÚPricingUnitÚProviderNameÚPublisherNameÚRegionIdÚ
RegionNameÚ
ResourceIdÚResourceNameÚResourceTypezAI and Machine LearningÚServiceCategoryzGenerative AIÚServiceSubcategoryr   ÚServiceNamer   ÚSubAccountIdr	   ÚSubAccountNameÚSubAccountType)Úis_emptyr$   Ú	DataFramer/   r   ÚcolumnsÚwith_columnsr*   Úlitr(   r<   rA   ÚUtf8r   ÚstrptimeÚDatetimer   ÚDecimalÚselectÚ	fill_nullr'   ÚInt64ÚFloat64)	ÚselfÚframer   r)   r=   rC   Únone_strÚnone_decrB   s	           @r   Ú	transformzFocusTransformer.transform0   sß  ø€ à�>‰>ÔÜ—<‘< t§{¡{Ô3Ð3ô -6Ö L q¸¸e¿m¹mÒ9K¢Ð LˆÐ LÙØ×&Ñ&Ô'7¸Ó'GÓH‰Eà×&Ñ&¤r§v¡v¨d£|×'9Ñ'9¸&Ó'AÓBˆEð ×"Ñ"Ü�F‰F�6‹Nß‰T”"—'‘'‹]ß‰S—‘œ"Ÿ+™+°Ô5¸jÐQV�ÓWß‰U�<Ó ó	
ˆð ×"Ñ"Ü�F‰F�<Ó ×&Ñ&Ð':Ó;Ü�V‰V�LÓ!¤I°1Ô$5Ñ5×<Ñ<Ð=NÓOó
ˆò
	9ô —Z‘Z  AÓ&ˆô	!ô Ÿ&™& ¬R¯W©WÔ5ˆÜŸ&™& ¬R¯Z©Z¸¸AÓ->Ô?ˆàˆu�|‰|ð -
Ù”—‘�w“×)Ñ)¨#Ó.Ó/×5Ñ5°lÓCð-
ä�F‰F�9Ó×"Ñ"¤2§9¡9Ó-×3Ñ3Ð4FÓGð-
ô �F‰F�?Ó#×(Ñ(¬¯©Ó3×9Ñ9Ð:NÓOð-
ô �F‰F�9Ó×#Ñ#Ð$8Ó9ð	-
ô
 �F‰F�5‹M×ÑÐ 1Ó2ð-
ñ ”—‘Ð(Ó)Ó*×0Ñ0Ð1CÓDð-
ñ ”—‘Ð*Ó+Ó,×2Ñ2Ð3GÓHð-
ô �F‰F�7‹O×!Ñ!Ð"2Ó3ð-
ð �N‰N˜=Ó)ð-
ô �F‰F�7‹O× Ñ ¤§¡Ó+×1Ñ1Ð2EÓFð-
ô �F‰F�=Ó!×'Ñ'Ð(9Ó:ð-
ñ ”—‘Ð(Ó)Ó*×0Ñ0Ð1BÓCð-
ñ ”—‘Ð*Ó+Ó,×2Ñ2Ð3FÓGð-
ñ ”—‘�~Ó&×+Ñ+¬B¯H©HÓ5×:Ñ:¼2¿:¹:ÓF×PÑPÐQTÓUÓV×\Ñ\Ð]oÓpð-
ô �F‰F�:Ó×$Ñ$ ^Ó4ð-
ñ  ”—‘�w“×)Ñ)¨#Ó.Ó/×5Ñ5Ð6FÓGð!-
ð" �N‰NÐ0Ó1ð#-
ñ$ ”—‘�w“×)Ñ)¨#Ó.Ó/×5Ñ5°oÓFð%-
ô& �F‰FÐ(Ó)×.Ñ.¬r¯y©yÓ9×?Ñ?Ð@SÓTð'-
ð( �N‰N˜;Ó'ð)-
ñ* ”—‘�w“×)Ñ)¨#Ó.Ó/×5Ñ5°jÓAð+-
ð, �N‰N˜?Ó+ð--
ð. �N‰NÐ-Ó.ð/-
ô0 �F‰F�5‹M×ÑÐ 1Ó2ð1-
ð2 �N‰NÐ,Ó-ð3-
ñ4 ”—‘�~Ó&×+Ñ+¬B¯H©HÓ5×:Ñ:¼2¿:¹:ÓF×PÑPÐQTÓUÓV×\Ñ\Ð]nÓoð5-
ð6 �N‰NÐ?Ó@ð7-
ñ8 ”—‘�w“×)Ñ)¨#Ó.Ó/×5Ñ5Ð6TÓUð9-
ð: �N‰NÐ9Ó:ð;-
ô< �F‰F�:Ó×$Ñ$ ]Ó3ð=-
ô> �F‰FÐ(Ó)×.Ñ.¬r¯y©yÓ9×?Ñ?ÀÓOð?-
ô@ �F‰FÐ(Ó)×.Ñ.¬r¯y©yÓ9×?Ñ?ÀÓPðA-
ðB �N‰N˜:Ó&ðC-
ðD �N‰N˜<Ó(ðE-
ôF �F‰F�7‹O× Ñ ¤§¡Ó+×1Ñ1°,Ó?ðG-
ôH �F‰F�7‹O× Ñ ¤§¡Ó+×1Ñ1°.ÓAðI-
ôJ �F‰F�7‹O× Ñ ¤§¡Ó+×1Ñ1°.ÓAðK-
ôL �F‰FÐ,Ó-×3Ñ3Ð4EÓFðM-
ôN �F‰F�?Ó#×)Ñ)Ð*>Ó?ðO-
ôP �F‰F�=Ó!×&Ñ&¤r§y¡yÓ1×7Ñ7¸ÓFðQ-
ôR �F‰F�9Ó×"Ñ"¤2§9¡9Ó-×3Ñ3°NÓCðS-
ôT �F‰F�<Ó ×%Ñ%¤b§i¡iÓ0×6Ñ6Ð7GÓHðU-
ðV �N‰NÐ+Ó,ðW-
ôX �F‰F�6‹N×Ñ¤§	¡	Ó*×0Ñ0°Ó8òY-
ð -	
ùò; !Ms   ºg<Ág<N)r‚   úpl.DataFramer#   r†   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r/   r…   © r+   r   r-   r-   +   s   „ ÙBà$€FôP
r+   r-   )r)   z	list[str]r#   zpl.Expr)rŠ   Ú
__future__r   r   Údatetimer   Útypingr   Úpolarsr$   r/   r   r   Ú__annotations__r*   r-   r‹   r+   r   ú<module>r‘      s:   ðÚ $å "ã Ý Ý ã å +ð€	ˆ5ó ói÷ U
ò U
r+   