o
    پi                     @   s   d dl mZ d dlmZmZ d dlmZmZmZ d dl	m
Z
mZ ee fdede
defdd	Zeee fdede
fd
dZeee fdede
fddZeee fdede
fddZdS )    )singledispatch)SequenceGeneratorAdapterVisionSequenceGeneratorAdapter)LlamaCppOpenAITransformersVision)Samplermultinomialcfg_strsamplerreturnc                 C   &   ddl m} ||| jd}t| ||S )aR  Generate text in the language of a Context-Free Grammar

    Arguments
    ---------
    model:
        An `outlines.model` instance.
    sampler:
        The sampling algorithm to use to generate token ids from the logits
        distribution.

    Returns
    -------
    A `SequenceGeneratorAdapter` instance that generates text.

    r   CFGLogitsProcessor	tokenizer)outlines.processorsr   r   r   modelr
   r   r   logits_processor r   I/home/ubuntu/.local/lib/python3.10/site-packages/outlines/generate/cfg.pycfg   s   r   c                 C   r   )Nr   r   r   )r   r   r   r   r   r   r   r   
cfg_vision$   s   r   c                 C      t d)Nz3Not yet available due to bug in llama_cpp tokenizerNotImplementedErrorr   r
   r   r   r   r   cfg_llamacpp,   s   r   c                 C   r   )NzfCannot use grammar-structured generation with an OpenAI modeldue to the limitations of the OpenAI API.r   r   r   r   r   
cfg_openai1   s   r   N)	functoolsr   outlines.generate.apir   r   outlines.modelsr   r   r   outlines.samplersr   r	   strr   registerr   r   r   r   r   r   r   <module>   s&    