Ë
    tPêj?8  ã                   ó  — d dl Z d dlZd dlmZmZ d dlmZ d dl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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 G d„ de«      Z G d„ de«      Z G d„ de«      Z dejB                  deee"e#f      fd„Z$de
deee"e#f      de"dz  fd„Z% ejL                  «        ejN                  d d!¬"«       ejP                  d#d$e)d%d&¬'«       ejP                  d(e*d)¬*«       ejP                  d+d,e"d-¬*«      ejV                  	 	 d<dejB                  d e"dz  d.e)d/e*dz  d0e"dz  f
d1„«       «       «       «       «       «       Zde
fd2„Z,de
d3e-e.e"e"f      fd4„Z/de
d3e-e.e"e"f      d5e"fd6„Z0de
d5e"d0e"dz  de-e.e"e"f      fd7„Z1de
d8e"d3e-e.e"e"f      d0e"dz  dejB                  de2e3e-e.e"e"f      e"dz  f   fd9„Z4de
d:ed e"d3e-e.e"e"f      d.e)d/e*dz  de"dz  fd;„Z5y)=é    N)ÚMappingÚSequence)ÚFinal)ÚConsole)ÚPanel)ÚPrompt)ÚTable)ÚNotRequiredÚReadOnlyÚ	TypedDicté   )ÚClient)Ú
ChatClienté   )Úcli_context_valuesc                   ó.   — e Zd ZU eeeeef         ed<   y)Ú_MessagesViewÚmessagesN)Ú__name__Ú
__module__Ú__qualname__r   ÚlistÚdictÚstrÚ__annotations__© ó    úk/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/proxy/client/cli/commands/chat.pyr   r      s   … Ø�t˜D  c ™NÑ+Ñ,Ô,r   r   c                   ó$   — e Zd ZU eee      ed<   y)Ú_StreamDeltaÚcontentN)r   r   r   r   r
   r   r   r   r   r   r    r       s   … Ø�k #Ñ&Ñ'Ô'r   r    c                   ó$   — e Zd ZU eee      ed<   y)Ú_StreamChoiceÚdeltaN)r   r   r   r   r
   r    r   r   r   r   r#   r#      s   … Ø�K Ñ-Ñ.Ô.r   r#   c                   ó$   — e Zd ZU eee      ed<   y)Ú_StreamChunkViewÚchoicesN)r   r   r   r   r   r#   r   r   r   r   r&   r&      s   … Ø�h˜}Ñ-Ñ.Ô.r   r&   c                   ó.   — e Zd ZU eeeeef         ed<   y)Ú_StreamErrorBodyÚerrorN)	r   r   r   r   r
   r   r   Úobjectr   r   r   r   r)   r)   #   s   … Ø�K ¨¨V¨Ñ 4Ñ5Ñ6Ô6r   r)   c                   ó   — e Zd ZU ee   ed<   y)Ú_ErrorBodyViewÚbodyN)r   r   r   r   r)   r   r   r   r   r-   r-   '   s   … Ø
Ð#Ñ
$Ô$r   r-   ÚctxÚreturnc                 óH  — 	 t        | «      }t        |d   |d   ¬«      }|j                  j                  «       }t	        |t        «      r!|D �cg c]  }t	        |t
        «      sŒ|‘Œ c}S g S c c}w # t        $ r&}t        j                  d|› �d¬«       g cY d}~S d}~ww xY w)z2Get list of available models from the proxy serverÚbase_urlÚapi_key)r2   r3   z&Warning: Could not fetch models list: T)ÚerrN)	r   r   Úmodelsr   Ú
isinstancer   Ú	ExceptionÚclickÚecho)r/   ÚcontextÚclientÚmodels_listÚmodelÚes         r   Ú_get_available_modelsr?   +   s“   € ðÜ+¨CÓ0ˆÜ¨°
Ñ(;ÀWÈYÑEWÔXˆØ#Ÿ]™]×/Ñ/Ó1ˆä�k¤4Ô(à'2ÖN˜e´jÀÌÕ6M’EÒNÐNØˆ	ùò Oøäò Ü�
‰
Ð;¸A¸3Ð?ÀTÕJØ�	ûðús<   ‚AA2 ÁA-Á$A-Á(A2 Á+A2 Á-A2 Á2	B!Á;BÂB!ÂB!ÚconsoleÚavailable_modelsc                 óâ  — |s:| j                  d«       t        j                  d«      }|j                  «       r|S dS t	        d¬«      }|j                  ddd¬	«       |j                  d
d¬«       |j                  dd¬«       d}|d| }t        |«      D ]V  \  }}|j                  t        |dz   «      t        |j                  dd«      «      t        |j                  dd«      «      «       ŒX t        |«      |kD  r!| j                  dt        |«      |z
  › d�«       | j                  |«       	 	 t        j                  dd¬«      j                  «       }	 t        |«      dz
  }	d|	cxk  rt        |«      k  rn nt        ||	   d   «      S | j                  dt        |«      › d�«       Œ}# t        $ r |r|cY S | j                  d«       Y ŒŸw xY w# t        $ r | j                  d«       Y yw xY w)zInteractive model selectionzD[yellow]No models available or could not fetch models list.[/yellow]zPlease enter a model nameNzAvailable Models©ÚtitleÚIndexÚcyanT)ÚstyleÚno_wrapzModel IDÚgreen)rG   zOwned ByÚyellowéÈ   r   ÚidÚ Úowned_byz
[dim]... and z more models[/dim]zL
Select a model by entering the index number (or type a model name directly)Ú1)Údefaultr   z8[red]Invalid index. Please enter a number between 1 and ú[/red]z3[red]Please enter a valid model name or index[/red]z,
[yellow]Model selection cancelled.[/yellow])Úprintr   ÚaskÚstripr	   Ú
add_columnÚ	enumerateÚadd_rowr   ÚgetÚlenÚintÚ
ValueErrorÚKeyboardInterrupt)
r@   rA   Ú
model_nameÚtableÚMAX_MODELS_TO_DISPLAYÚmodels_to_displayÚir=   ÚchoiceÚindexs
             r   Ú_select_modelrd   ;   sø  € áØ�‰Ð\Ô]Ü"ŸJ™JÐ'BÓCˆ
Ø'×-Ñ-Ô/ˆzÐ9°TÐ9ô Ð1Ô2€EØ	×Ñ�W F°DÐÔ9Ø	×Ñ�Z wÐÔ/Ø	×Ñ�Z xÐÔ0Ø#&Ðà/Ð0FÐ1FÐGÐÜÐ/Ó0ò \‰ˆˆ5Ø�‰”c˜!˜a™%“j¤# e§i¡i°°bÓ&9Ó":¼CÀÇ	Á	È*ÐVXÓ@YÓ<ZÕ[ð\ô ÐÓÐ4Ò4Ø�‰˜¬Ð,<Ó(=Ð@UÑ(UÐ'VÐVhÐiÔjà‡M�M�%Ôà
ð	Ü—Z‘ZØ_Øô÷ ‰e‹gð ðÜ˜F› a™�Ø˜Ô5¤Ð$4Ó 5Õ5ÜÐ/°Ñ6°tÑ<Ó=Ð=à—M‘MØRÔSVÐWgÓShÐRiÐioÐpôð øÜò áØ!’Mà—M‘MÐ"WÔXÙðûô !ò 	Ø�M‰MÐIÔJÙð	úsB   Ä0%G Å5F+ ÆF+ Æ+GÆ8G Æ:GÇG ÇGÇG ÇG.Ç-G.r=   F)Úrequiredz--temperaturez-tgffffffæ?z3Sampling temperature between 0 and 2 (default: 0.7))ÚtyperP   Úhelpz--max-tokensz$Maximum number of tokens to generate)rf   rg   z--systemz-sz3System message to set the behavior of the assistantÚtemperatureÚ
max_tokensÚsystemc                 óH  — t        «       }|s+t        | «      }t        ||«      }|s|j                  d«       yt	        | «      }t        |d   |d   «      }g }	|r|	j                  d|dœ«       |j                  t        j                  d|› d|› d	|xs d
› d�d¬«      «       	 	 	 |j                  d«      j                  «       }
t        ||
|	|| «      \  }}	}|ry|r|}|
j                  «       j                  d«      s|
sŒ]|	j                  d|
dœ«       |j                  d«       t!        ||||	||¬«      }|r|	j                  d|dœ«       n|j                  d«       Œ»# t        t        f$ r |j                  d«       Y yw xY w# t        $ r |j                  d«       Y yw xY w)aO  Interactive chat with streaming responses

    Examples:

        # Chat with a specific model
        lite chat gpt-4

        # Chat without specifying model (will show model selection)
        lite chat

        # Chat with custom settings
        lite chat gpt-4 --temperature 0.9 --system "You are a helpful coding assistant"
    z&[red]No model selected. Exiting.[/red]Nr2   r3   rj   ©Úroler!   z>[bold blue]LiteLLM Interactive Chat[/bold blue]
Model: [green]z[/green]
Temperature: [yellow]z[/yellow]
Max Tokens: [yellow]Ú	unlimitedzz[/yellow]

Type your messages and press Enter. Type '/quit' or '/exit' to end the session.
Type '/help' for more commands.zChat SessionrC   z
[bold cyan]You:[/bold cyan] z%
[yellow]Chat session ended.[/yellow])	ú/quitú/exitú/qú/helpú/clearú/historyú/saveú/loadú/modelÚuserz$
[bold green]Assistant:[/bold green])r@   r;   r=   r   rh   ri   Ú	assistantz4[red]Error: No content received from the model[/red]z+
[yellow]Chat session interrupted.[/yellow])r   r?   rd   rR   r   r   Úappendr   ÚfitÚinputrT   ÚEOFErrorr\   Ú_handle_special_commandsÚlowerÚ
startswithÚ_stream_response)r/   r=   rh   ri   rj   r@   rA   r:   r;   r   Ú
user_inputÚshould_exitÚ	new_modelÚassistant_contents                 r   Úchatr†   p   sò  € ôR “Y€Gñ Ü"7¸Ó"<ÐÜ˜gÐ'7Ó8ˆÙØ�M‰MÐBÔCØä'¨Ó,€GÜ˜w zÑ2°G¸IÑ4FÓG€Fð &(€Hñ Ø�‰ °fÑ=Ô>ð ‡M�MÜ�	‰	ðØ"˜Gð $$Ø$/ =ð 1#Ø#-Ò#<°Ð"=ð >.ð/ð !ô	
ô
ð;FØðØ$Ÿ]™]Ð+KÓL×RÑRÓT�
ô 0HÈÐQ[Ð]eÐgmÐorÓ/sÑ,ˆK˜ 9áØÙØ!�ð × Ñ Ó"×-Ñ-ð
ôñ "àð �O‰O V¸
ÑCÔDð �M‰MÐAÔBô !1ØØØØ!Ø'Ø%ô!Ðñ !Ø—‘¨ÐARÑ SÕTà—‘ÐTÔUðo øô Ô/Ð0ò Ø—‘ÐFÔGÙðûôj ò FØ�‰ÐDÖEðFús=   Â"F Â$E ÃF ÃBF Å FÅ>F Æ FÆF ÆF!Æ F!c                 ó@   — d}| j                  t        |d¬«      «       y)z'Show help for interactive chat commandsaz  
[bold]Interactive Chat Commands:[/bold]

[cyan]/help[/cyan]     - Show this help message
[cyan]/quit[/cyan]     - Exit the chat session (also /exit, /q)
[cyan]/clear[/cyan]    - Clear conversation history
[cyan]/history[/cyan]  - Show conversation history
[cyan]/model[/cyan]    - Switch to a different model
[cyan]/save <name>[/cyan] - Save conversation to file
[cyan]/load <name>[/cyan] - Load conversation from file

[bold]Tips:[/bold]
- Your conversation history is maintained during the session
- Use Ctrl+C to interrupt at any time
- Responses are streamed in real-time
- You can switch models mid-conversation with /model
    ÚHelprC   N)rR   r   )r@   Ú	help_texts     r   Ú
_show_helprŠ   ø   s   € ð€Ið" ‡M�M”%˜	¨Ô0Õ1r   r   c           	      óŠ  — |s| j                  d«       y| j                  t        j                  dd¬«      «       t        |d«      D ]z  \  }}|d   }|d   }|d	k(  r| j                  d
|› d|› d�«       Œ.|dk(  r| j                  |› d|› �«       ŒJ|dk(  sŒP| j                  |› d|dd › t	        |«      dkD  rdnd› �«       Œ| y)zShow conversation historyz)[yellow]No conversation history.[/yellow]Nz![bold]Conversation History[/bold]ÚHistoryrC   r   rm   r!   rj   z[dim]z'. [bold magenta]System:[/bold magenta] z[/dim]rx   z. [bold cyan]You:[/bold cyan] ry   z&. [bold green]Assistant:[/bold green] éd   z...rM   )rR   r   r{   rV   rY   )r@   r   ra   Úmessagerm   r!   s         r   Ú_show_historyr�     sÞ   € áØ�‰ÐAÔBØà‡M�M”%—)‘)Ð?ÀyÔQÔRä ¨!Ó,ò ‰
ˆˆ7Ø�v‰ˆØ˜)Ñ$ˆà�8ÒØ�M‰M˜E ! Ð$KÈGÈ9ÐTZÐ[Õ\Ø�VŠ^Ø�M‰M˜Q˜CÐ=¸g¸YÐGÕHØ�[Ó Ø�M‰MØ�#Ð;¸GÀDÀS¸M¸?ÔTWÐX_ÓT`ÐcfÒTfÉ5ÐlnÐJoÐpõñr   Úcommandc                 óŽ  — |j                  «       }t        |«      dk  r| j                  d«       y|d   }|j                  d«      s|dz  }	 t	        |d«      5 }t        j                  ||d¬«       ddd«       | j                  d|› d	�«       y# 1 sw Y   ŒxY w# t        $ r}| j                  d
|› d�«       Y d}~yd}~ww xY w)zSave conversation to a fileé   z"[red]Usage: /save <filename>[/red]Nr   ú.jsonÚw)Úindentz[green]Conversation saved to ú[/green]z [red]Error saving conversation: rQ   )ÚsplitrY   rR   ÚendswithÚopenÚjsonÚdumpr7   )r@   r   r�   ÚpartsÚfilenameÚfr>   s          r   Ú_save_conversationrŸ   $  sÂ   € à—=‘=“?€EÜ
ˆ5ƒz�A‚~Ø�‰Ð:Ô;Øà�Q‰x€HØ×Ñ˜WÔ%Ø�GÑˆðDÜ�(˜CÓ ð 	- AÜ�I‰I�h ¨!Õ,÷	-à�‰Ð5°h°Z¸xÐHÕI÷	-ð 	-ûô ò DØ�‰Ð8¸¸¸6ÐB×CÑCûðDús0   ÁB ÁBÁ2B ÂBÂB Â	CÂ%B?Â?Cc                 óè  — |j                  «       }t        |«      dk  r| j                  d«       g S |d   }|j                  d«      s|dz  }	 t	        |d«      5 }dt        j                  |«      i}ddd«       | j                  d|› d	�«       d   S # 1 sw Y   Œ#xY w# t        $ r | j                  d
|› d�«       Y n*t        $ r}| j                  d|› d�«       Y d}~nd}~ww xY w|rd|dœgS g S )zLoad conversation from a filer’   z"[red]Usage: /load <filename>[/red]r   r“   Úrr   Nz [green]Conversation loaded from r–   z[red]File not found: rQ   z![red]Error loading conversation: rj   rl   )	r—   rY   rR   r˜   r™   rš   ÚloadÚFileNotFoundErrorr7   )r@   r�   rj   rœ   r�   rž   Úloadedr>   s           r   Ú_load_conversationr¥   7  s  € à—=‘=“?€EÜ
ˆ5ƒz�A‚~Ø�‰Ð:Ô;Øˆ	à�Q‰x€HØ×Ñ˜WÔ%Ø�GÑˆðEÜ�(˜CÓ ð 	F AØ,6¼¿	¹	À!»Ð+EˆF÷	Fà�‰Ð8¸¸
À(ÐKÔLØ�jÑ!Ð!÷	Fð 	Fûô ò @Ø�‰Ð-¨h¨Z°vÐ>Ö?Üò EØ�‰Ð9¸!¸¸FÐC×DÑDûðEúñ Ø!¨fÑ5Ð6Ð6Ø€Is6   ÁB  ÁBÁ2!B  ÂBÂB  Â C'Ã C'ÃC"Ã"C'r‚   c                 ó¸  — |j                  «       dv r| j                  d«       d|dfS |j                  «       dk(  rt        | «       d|dfS |j                  «       dk(  r |rd|d	œgng }| j                  d
«       d|dfS |j                  «       dk(  rt        | |«       d|dfS |j                  «       j	                  d«      rt        | ||«       d|dfS |j                  «       j	                  d«      rt        | ||«      }d|dfS |j                  «       dk(  r8t        |«      }t        | |«      }|r| j                  d|› d�«       d||fS d|dfS |sd|dfS d|dfS )zTHandle special chat commands. Returns (should_exit, updated_messages, updated_model))ro   rp   rq   z$[yellow]Chat session ended.[/yellow]TNrr   Frs   rj   rl   z,[green]Conversation history cleared.[/green]rt   ru   rv   rw   z[green]Switched to model: r–   )	r   rR   rŠ   r�   r€   rŸ   r¥   r?   rd   )	r@   r‚   r   rj   r/   Úcleared_messagesÚnew_messagesrA   r„   s	            r   r~   r~   R  s›  € ð ×ÑÓÐ5Ñ5Ø�‰Ð<Ô=Ø�X˜tÐ#Ð#Ø	×	Ñ	Ó	˜wÒ	&Ü�7ÔØ�h Ð$Ð$Ø	×	Ñ	Ó	˜xÒ	'ÙciÀ(ÐW]Ñ9^Ñ8_ÐoqÐØ�‰ÐDÔEØÐ&¨Ð,Ð,Ø	×	Ñ	Ó	˜zÒ	)Ü�g˜xÔ(Ø�h Ð$Ð$Ø	×	Ñ	Ó	×	&Ñ	& wÔ	/Ü˜7 H¨jÔ9Ø�h Ð$Ð$Ø	×	Ñ	Ó	×	&Ñ	& wÔ	/Ü)¨'°:¸vÓFˆØ�l DÐ(Ð(Ø	×	Ñ	Ó	˜xÒ	'Ü"7¸Ó"<ÐÜ(¨Ð2BÓCˆ	ÙØ�M‰MÐ6°y°kÀÐJÔKØ˜( IÐ-Ð-Ø�h Ð$Ð$ÙØ�h Ð$Ð$ð �(˜DÐ Ð r   r;   c                 óœ  — 	 d}|j                  ||||¬«      D ]‹  }d|j                  dd«      i}t        |d   «      dkD  sŒ)|d   d   j                  di «      }	|	j                  dd«      }
|
sŒV||
z  }| j                  |
d¬«       t        j
                  j                  «        Œ� | j                  «        |r|S d	S # t        j                  j                  $ rË}| j                  d
|j                  j                  › d�«       	 d|j                  j                  «       i}| j                  d|d   j                  di «      j                  dd«      › d�«       nB# t        j                  $ r, | j                  d|j                  j                  › d�«       Y nw xY wY d	}~y	d	}~wt        $ r}| j                  d|› d�«       Y d	}~y	d	}~ww xY w)z9Stream the model response and return the complete contentrM   )r=   r   rh   ri   r'   r   r   r$   r!   )ÚendNz
[red]Error: HTTP rQ   r.   z[red]r*   rŽ   zUnknown errorz
[red]Error: )Úcompletions_streamrX   rY   rR   ÚsysÚstdoutÚflushÚrequestsÚ
exceptionsÚ	HTTPErrorÚresponseÚstatus_coderš   ÚJSONDecodeErrorÚtextr7   )r@   r;   r=   r   rh   ri   r…   ÚchunkÚstreamedr$   r!   r>   Ú
error_bodys                r   r�   r�   {  s¹  € ðØÐØ×.Ñ.ØØØ#Ø!ð	 /ó 
ò 	'ˆEð +4°U·Y±Y¸yÈ"Ó5MÐ)NˆHÜ�8˜IÑ&Ó'¨!Ó+Ø  Ñ+¨AÑ.×2Ñ2°7¸BÓ?�ØŸ)™) I¨rÓ2�ÚØ%¨Ñ0Ð%Ø—M‘M '¨r�MÔ2Ü—J‘J×$Ñ$Õ&ð	'ð 	�‰ŒÙ$5Ð Ð?¸4Ð?øä×Ñ×(Ñ(ò Ø�‰Ð+¨A¯J©J×,BÑ,BÐ+CÀ6ÐJÔKð	;Ø17¸¿¹¿¹Ó9JÐ0KˆJØ�M‰M˜E *¨VÑ"4×"8Ñ"8¸À"Ó"E×"IÑ"IÈ)ÐUdÓ"eÐ!fÐflÐmÕnøÜ×#Ñ#ò 	;Ø�M‰M˜E !§*¡*§/¡/Ð!2°&Ð9Ö:ð	;úäûÜò Ø�‰˜ q c¨Ð0Ô1Üûðús[   ‚?B= Á,B= Á/AB= Â;B= Â=GÃ)F ÄAEÅF Å<FÆF ÆFÆF Æ GÆ,GÇG)NN)6rš   r¬   Úcollections.abcr   r   Útypingr   r8   r¯   Úrich.consoler   Ú
rich.panelr   Úrich.promptr   Ú
rich.tabler	   Útyping_extensionsr
   r   r   rM   r   r†   r   Ú_cli_contextr   r   r    r#   r&   r)   r-   ÚContextr   r+   r?   rd   r�   ÚargumentÚoptionÚfloatrZ   Úpass_contextrŠ   r   r   r�   rŸ   r¥   ÚtupleÚboolr~   r�   r   r   r   ú<module>rÈ      s!  ðÛ Û 
ß -Ý ã Û Ý  Ý Ý Ý ß >Ñ >å Ý Ý ,ô-�Iô -ô(�9ô (ô/�Iô /ô/�yô /ô7�yô 7ô%�Yô %ð˜uŸ}™}ð °¸'À#ÀvÀ+Ñ:NÑ1Oó ð 2˜7ð 2°h¸wÀsÈFÀ{Ñ?SÑ6Tð 2ÐY\Ð_cÑYcó 2ðj €‡�ƒØ€‡�� %Ô(Ø€‡�ØØØ	ØØ	>ôð €‡�ØØ	Ø	/ôð
 €‡�ØØØ	Ø	>ô	ð ×Ñð
 "ØñpFØ	�‰ðpFà�‰:ðpFð ðpFð �d‘
ð	pFð
 �$‰JòpFó óóóó )ó ð*pFðf2˜ó 2ð,˜7ð ¨d°4¸¸S¸±>Ñ.Bó ð,D ð D°4¸¸SÀ#¸X¹Ñ3Gð DÐRUó Dð& ð °#ð ¸sÀT¹zð ÈdÐSWÐX[Ð]`ÐX`ÑSaÑNbó ð6&!Øð&!àð&!ð �4˜˜S˜‘>Ñ"ð&!ð �$‰Jð	&!ð
 
�‰ð&!ð ˆ4��d˜3 ˜8‘nÑ% s¨T¡zÐ1Ñ2ó&!ðR'Øð'àð'ð ð'ð �4˜˜S˜‘>Ñ"ð	'ð
 ð'ð �d‘
ð'ð 	ˆ4�Zô'r   