
    dhM                    d   S SK Jr  S SKrS SKrS SKJr  S SKJrJ	r	J
r
JrJrJrJrJrJrJrJrJrJr  S SKJr  S SKJr  S SKJr  S SKJr  S S	KJrJrJ r   S S
K!J"r"J#r#  S SK$J%r%J&r&J'r'  S SK(J)r)  S SK*J+r+  S SK,J-r-  S SK.J/r/J0r0J1r1  S SK2J3r3  S SK4J5r5  \" S\/S9r6\\
\7\4   \\6   \4   r8 " S S\5      r9g)    )annotationsN)AsyncIterator)AnyCallableDictIteratorListOptionalSequenceTupleType	TypedDictTypeVarUnion
get_origin)CallbackManagerForLLMRun)AsyncCallbackManagerForLLMRun)LanguageModelInput)BaseChatModel)	AIMessageAIMessageChunkBaseMessage)JsonOutputParserPydanticOutputParser)ChatGenerationChatGenerationChunk
ChatResult)Runnable)BaseTool)convert_to_openai_tool)	BaseModelFieldmodel_validator)Literalconvert_message_to_dict_BM)boundc                  X  ^  \ rS rSr% SrSrS\S'   S\S'    SrS	\S
'    SrS\S'    Sr	S\S'    Sr
S\S'    SrS\S'    SrS\S'    SrS\S'    SrS\S'    SrS\S'    \" \S9rS\S'    \" SS 9S3S! j5       rS3S" jr\S4S# j5       r\S5S$ j5       r\S5S% j5       r\S6S& j5       r    S7S' jrS8S( jrSS).       S9U 4S* jjjrS+S,.       S:S- jjr  S;         S<S. jjr  S;         S=S/ jjr   S;         S>U 4S0 jjjr!  S;         S?U 4S1 jjjr"S2r#U =r$$ )@ChatOutlines)   u  Outlines chat model integration.

Setup:
  pip install outlines

Key init args — client params:
  backend: Literal["llamacpp", "transformers", "transformers_vision", "vllm", "mlxlm"] = "transformers"
    Specifies the backend to use for the model.

Key init args — completion params:
  model: str
    Identifier for the model to use with Outlines.
  max_tokens: int = 256
    The maximum number of tokens to generate.
  stop: Optional[List[str]] = None
    A list of strings to stop generation when encountered.
  streaming: bool = True
    Whether to stream the results, token by token.

See full list of supported init args and their descriptions in the params section.

Instantiate:
  from langchain_community.chat_models import ChatOutlines
  chat = ChatOutlines(model="meta-llama/Llama-2-7b-chat-hf")

Invoke:
  chat.invoke([HumanMessage(content="Say foo:")])

Stream:
  for chunk in chat.stream([HumanMessage(content="Count to 10:")]):
      print(chunk.content, end="", flush=True)

Nr   clientstrmodeltransformerszKLiteral['llamacpp', 'transformers', 'transformers_vision', 'vllm', 'mlxlm']backend   int
max_tokensOptional[List[str]]stopTbool	streamingzOptional[str]regexzOptional[Union[type, str]]type_constraintsz$Optional[Union[Any, Dict, Callable]]json_schemagrammarzOptional[Any]custom_generator)default_factoryDict[str, Any]model_kwargsafter)modec                    [        [        U R                  5      [        U R                  5      [        U R                  5      [        U R
                  5      /5      nUS:  a  [        S5      eU R                  5       $ )z@Validate that outlines is installed and create a model instance.   _Either none or exactly one of regex, type_constraints, json_schema, or grammar can be provided.)sumr6   r8   r9   r:   r;   
ValueErrorbuild_client)selfnum_constraintss     `/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/chat_models/outlines.pyvalidate_environment!ChatOutlines.validate_environment   st     TZZ T**+T%%&T\\"	
 Q;    ""    c                <    SS K Jn      SS jnU R                  S:X  ao  U" S/5        SU R                  ;   a'  U R                  R                  SS5      u  p4nU SU 3nO[        S	5      eUR                  " Xe40 U R                  D6U l	        U $ U R                  S
:X  a9  U" / SQ5        UR                  " SSU R                  0U R                  D6U l	        U $ U R                  S:X  aR  [        US5      (       a6  SSK
Jn  UR                  " U R                  4SU0U R                  D6U l	        U $ [        S5      eU R                  S:X  a[  [        R                  " 5       S:X  a  [        S5      eU" S/5        UR                   " U R                  40 U R                  D6U l	        U $ U R                  S:X  a7  U" S/5        UR"                  " U R                  40 U R                  D6U l	        U $ [        SU R                   35      e! [         a    [        S5      ef = f)Nr   zUCould not import the Outlines library. Please install it with `pip install outlines`.c           	     L   U  Vs/ sH]  n[         R                  R                  [        U[        5      (       a  US   OU5        b  MA  [        U[
        5      (       a  UOUS   PM_     nnU(       a/  [        SSR                  U5       SSR                  U5       35      eg s  snf )NrC   r   zMissing packages: z, z.. You can install them with:

    pip install  )	importlibutil	find_spec
isinstancetupler-   ImportErrorjoin)packagespkgmissing_packagess      rJ   check_packages_installed;ChatOutlines.build_client.<locals>.check_packages_installed   s    
 $ #C>>++je6L6LCFRUV 8z#s++Q7#     !(3C)D(E F''*xx0@'A&BD    s   ?B! B!llamacpp)zllama-cpp-python	llama_cppz.gguf/   z.GGUF file_name must be provided for llama.cpp.r/   )r/   torchdatasets
model_nametransformers_vision)!LlavaNextForConditionalGenerationmodel_classz,transformers_vision backend is not supportedvllmDarwinz'vLLM backend is not supported on macOS.mlxlmmlxzUnsupported backend: )rX   z!List[Union[str, Tuple[str, str]]]returnNone )outlines.modelsmodelsrV   r0   r.   splitrF   r]   r?   r,   r/   hasattrre   rd   platformsystemrg   ri   )rH   ro   r[   creator	repo_name	file_namerepo_idre   s           rJ   rG   ChatOutlines.build_client   s!   	,	7		  <<:%$&G%HI$**$04

0@0@a0H-I$IQyk2 !QRR //'R@Q@QRDK6 5 \\^+$%JK -- ::)-):):DK0 + \\22v455J$88JJ A ''"  !!OPP\\V# H, !JKK$fX. ++djjFD4E4EFDK  \\W$$eW- ,,tzzGT5F5FGDK  4T\\NCDDo  	A 	s   H Hc                    g)Nzoutlines-chatrm   rH   s    rJ   	_llm_typeChatOutlines._llm_type  s    rM   c                L    U R                   U R                  S.U R                  E$ )N)r3   stop_at)r3   r5   r?   rz   s    rJ   _default_paramsChatOutlines._default_params  s,     //yy
 
 	
rM   c                    U R                   U R                  U R                  U R                  U R                  U R
                  S.U R                  E$ )N)r.   r0   r8   r9   r:   r;   )r.   r0   r8   r9   r:   r;   r   rz   s    rJ   _identifying_params ChatOutlines._identifying_params"  sL     ZZ||ZZ $ 5 5++||
 ""
 	
rM   c                   SSK Jn  U R                  (       a  U R                  $ U R                  U R                  U R
                  U R                  /n[        S U 5       5      nUS:w  a  US:w  a  [        S5      eU R                  (       a$  UR                  U R                  U R                  S9$ U R                  (       a$  UR                  U R                  U R                  S9$ U R
                  (       a$  UR                  U R                  U R
                  S9$ U R                  (       a$  UR                  U R                  U R                  S	9$ UR                  U R                  5      $ )
Nr   )generatec              3  &   #    U H  oS Lv   M
     g 7fNrm   ).0
constraints     rJ   	<genexpr>*ChatOutlines._generator.<locals>.<genexpr>;  s     S{4{s   rC   rD   )	regex_str)python_type)schema_object)cfg_str)outlinesr   r<   r8   r9   r:   r;   rE   rF   r,   formatjsoncfgtext)rH   r   constraintsrI   s       rJ   
_generatorChatOutlines._generator.  s   %  (((JJ!!LL	
 S{SSaOq$8;  ::>>$++>DD  ??4;;D<Q<Q?RR==D<L<L=MM<<<<T\\<BB}}T[[))rM   c                B    U Vs/ sH  n[        U5      PM     sn$ s  snf r   r%   )rH   messagesmessages      rJ   "_convert_messages_to_openai_format/ChatOutlines._convert_messages_to_openai_formatK  s$     AIIW'0IIIs   c                   U R                   S:X  a  SSKJn  U R                  R	                  S5      u  p4nUR                  U SU 35      n[        UR                  S5      (       a  UR                  R                  nO$[        SU R                   35      eU R                  nSSK
Jn  UR                  U5      R                  U R                  U5      SS	S
9$ )z.Convert a list of messages to a single prompt.r]   r   )	ModelCardr_   
base_modelzBase model name not found for )AutoTokenizerFT)tokenizeadd_generation_prompt)r0   huggingface_hubr   r.   rp   loadrq   datar   rF   r/   r   from_pretrainedapply_chat_templater   )	rH   r   r   repo_creatorgguf_repo_namerv   
model_cardrc   r   s	            rJ   _convert_messages_to_prompt(ChatOutlines._convert_messages_to_promptP  s    <<:%16:jj6F6Fs6K3L)"<..9I(JKJz55'__77
 #A$**!NOOJ.,,Z8LL33H="& M 
 	
rM   )tool_choicec                 >^ U Vs/ sH  n[        U5      PM     nnU Vs/ sH
  ofS   S   PM     nnT(       a  [        T[        5      (       a.  [        U4S jU 5       5      (       d  [	        ST< SU S35      eO[        T[
        5      (       a9  U Vs/ sH  oS   S   T:X  d  M  UPM     n	nU	(       d  [	        ST< SU S35      eOA[        T[        5      (       a,  [        U5      S:  a  [	        S[        U5       S	35      eUS
   mTUS'   U Vs/ sH  n[        U5      PM     nn[        T
U ]$  " SSU0UD6$ s  snf s  snf s  snf s  snf )zBind tool-like objects to this chat model

tool_choice: does not currently support "any", "auto" choices like OpenAI
    tool-calling API. should be a dict of the form to force this tool
    {"type": "function", "function": {"name": <<tool_name>>}}.
functionnamec              3  8   >#    U H  nTS    S   U:H  v   M     g7f)r   r   Nrm   )r   r   r   s     rJ   r   *ChatOutlines.bind_tools.<locals>.<genexpr>w  s#      HRK
+F3t;
s   zTool choice tool_choice=z1 was specified, but the only provided tools were .rC   zQtool_choice=True can only be specified when a single tool is passed in. Received z tools.r   r   toolsrm   )
r    rT   dictanyrF   r-   r6   lensuper
bind_tools)rH   r   r   kwargstoolformatted_toolsft
tool_namesfchosen	__class__s     `       rJ   r   ChatOutlines.bind_toolsf  s    EJJED1$7EJ7FGnV,
G+t,, HR   %3{n 5//9l!=  K--..!J-2G;2VA   $3{n 5//9l!=  
 K..'!+$//25zl'C  .a0 +}DIJED1$7EJw!BB6BB= KG" Ks   D=EE(EEF)include_rawc                   [        U5      [        L a  [        S5      eXl        [	        U[
        5      (       a  [        U[        5      (       a
  [        US9nO
[        5       nU(       a  [        S5      eX-  $ )Nz*TypedDict is not supported yet by Outlines)pydantic_objectz include_raw is not yet supported)
r   r   NotImplementedErrorr:   rT   type
issubclassr!   r   r   )rH   schemar   r   parsers        rJ   with_structured_output#ChatOutlines.with_structured_output  sj     f*%&RSS!fd##
69(E(E$V<  &'F%&HII}rM   c                   0 U R                   EUEnU(       a  X%S'   U R                  U5      nSnU R                  (       a  U R                  " SUUUS.UD6 Ho  n[	        UR
                  R                  [        5      (       a  XxR
                  R                  -  nMF  [        S[        UR
                  R                  5       35      e   OU R                  " U40 UD6n[        US9n	[        U	S9n
[        U
/S9$ )	Nr~    )r   r5   run_managerz1Invalid content type, only str is supported, got contentr   generationsrm   )r   r   r7   _streamrT   r   r   r-   rF   r   r   r   r   r   )rH   r   r5   r   r   paramspromptresponsechunkr   
generations              rJ   	_generateChatOutlines._generate  s     4D((3F3 $911(;>> !' 	 emm33S99 5 55H$#EMM$9$9:;=  v88HH-#G4
zl33rM   c              +    #    0 U R                   EUEnU(       a  X%S'   U R                  U5      nU R                  R                  " U40 UD6 H1  nU(       a  UR	                  U5        [        US9n[        US9n	U	v   M3     g 7f)Nr~   r   r   )r   r   r   streamon_llm_new_tokenr   r   )
rH   r   r5   r   r   r   r   tokenmessage_chunkr   s
             rJ   r   ChatOutlines._stream  s      4D((3F3 $911(;__++F=f=E,,U3*59M'>EK >s   B Bc                <  >#    [        U R                  S5      (       am  0 U R                  EUEnU(       a  X%S'   U R                  U5      nU R                  R                  " U40 UD6I S h  vN n[        US9n[        US9n	[        U	/S9$ U R                  (       aB  SnU R                  " XU40 UD6  S h  vN n
XzR                  R                  =(       d    S-  nM,  [        TU ]4  " XU40 UD6I S h  vN $  N NC
 [        US9n[        US9n	[        U	/S9$  N%7f)N	agenerater~   r   r   r   r   )rq   r   r   r   r   r   r   r   r7   _astreamr   r   r   
_agenerate)rH   r   r5   r   r   r   r   r   r   r   r   r   s              rJ   r   ChatOutlines._agenerate  s     4??K007,,77F$(y!55h?F!__66vHHHH1G'8J:,77^^H#}}X[SFS 8eMM117R7
 +HKR6RRR I8S1G'8J:,77RsC   A(D+C9,AD3C=7C;8C=;9D4D5D;C==Dc                 >#    [        U R                  S5      (       a  0 U R                  EUEnU(       a  X%S'   U R                  U5      nU R                  R                  " U40 UD6  S h  vN nU(       a  UR                  U5      I S h  vN   [        US9n[        US9n	U	7v   MB  [        T
U ]$  " XU40 UD6  S h  vN n	U	7v   M   N_ NA
 g  N
 g 7f)Nastreamr~   r   r   )
rq   r   r   r   r   r   r   r   r   r   )rH   r   r5   r   r   r   r   r   r   r   r   s             rJ   r   ChatOutlines._astream  s      4??I..7,,77F$(y!55h?F#66vHH e%66u=== .u =+MB$w/VvV e=  IVs`   A%C(C,C-C0CC/C<C CCCCCCCC)r,   r:   )rk   z'ChatOutlines')rk   r-   )rk   r>   )rk   r   )r   list[BaseMessage]rk   z
list[dict])r   r   rk   r-   )r   z?Sequence[Dict[str, Any] | type | Callable[..., Any] | BaseTool]r   z Optional[Union[Dict, bool, str]]r   r   rk   z)Runnable[LanguageModelInput, BaseMessage])r   zOptional[_DictOrPydanticClass]r   r6   r   r   rk   z4Runnable[LanguageModelInput, Union[dict, BaseModel]])NN)
r   List[BaseMessage]r5   r4   r   "Optional[CallbackManagerForLLMRun]r   r   rk   r   )
r   r   r5   r4   r   r   r   r   rk   zIterator[ChatGenerationChunk])
r   r   r5   List[str] | Noner   $AsyncCallbackManagerForLLMRun | Noner   r   rk   r   )
r   r   r5   r   r   r   r   r   rk   z"AsyncIterator[ChatGenerationChunk])%__name__
__module____qualname____firstlineno____doc__r,   __annotations__r0   r3   r5   r7   r8   r9   r:   r;   r<   r"   r   r?   r#   rK   rG   propertyr{   r   r   r   r   r   r   r   r   r   r   r   __static_attributes____classcell__)r   s   @rJ   r*   r*   )   s    D FCJ 	    J3 $D
$@It8E= 4807	 9=K5<$ "G]!0 '+m*R#(#>L.> '"# ##";z   
 
 	
 	
 * *8J)J	J

4 9=	+CN+C 6	+C
 +C 
3+C +Cb "	. 	
  
>6 %):>	!4#!4 "!4 8	!4
 !4 
!4L %):>	# " 8	
  
'. "&<@	S#S S :	S
 S 
S S> "&<@	#  :	
  
, rM   r*   ):
__future__r   importlib.utilrQ   rr   collections.abcr   typingr   r   r   r   r	   r
   r   r   r   r   r   r   r   langchain_core.callbacksr    langchain_core.callbacks.managerr   langchain_core.language_modelsr   *langchain_core.language_models.chat_modelsr   langchain_core.messagesr   r   r   langchain_core.output_parsersr   r   langchain_core.outputsr   r   r   langchain_core.runnablesr   langchain_core.toolsr   %langchain_core.utils.function_callingr    pydanticr!   r"   r#   typing_extensionsr$   #langchain_community.adapters.openair&   r'   r-   _DictOrPydanticClassr*   rm   rM   rJ   <module>r     s    "   )     > J = D J J P R R - ) H 6 6 % Ge9%T#s(^T#Y<= k= krM   