Source code for langchain_core.prompt_values
"""**Prompt values** for language model prompts.
Prompt values are used to represent different pieces of prompts.
They can be used to represent text, images, or chat message pieces.
"""
from __future__ import annotations
from abc import ABC, abstractmethod
from typing import List, Literal, Sequence, cast
from typing_extensions import TypedDict
from langchain_core.load.serializable import Serializable
from langchain_core.messages import (
    AnyMessage,
    BaseMessage,
    HumanMessage,
    get_buffer_string,
)
[docs]class PromptValue(Serializable, ABC):
    """Base abstract class for inputs to any language model.
    PromptValues can be converted to both LLM (pure text-generation) inputs and
    ChatModel inputs.
    """
    @classmethod
    def is_lc_serializable(cls) -> bool:
        """Return whether this class is serializable. Defaults to True."""
        return True
    @classmethod
    def get_lc_namespace(cls) -> List[str]:
        """Get the namespace of the langchain object.
        This is used to determine the namespace of the object when serializing.
        Defaults to ["langchain", "schema", "prompt"].
        """
        return ["langchain", "schema", "prompt"]
[docs]    @abstractmethod
    def to_string(self) -> str:
        """Return prompt value as string.""" 
[docs]    @abstractmethod
    def to_messages(self) -> List[BaseMessage]:
        """Return prompt as a list of Messages."""  
[docs]class StringPromptValue(PromptValue):
    """String prompt value."""
    text: str
    """Prompt text."""
    type: Literal["StringPromptValue"] = "StringPromptValue"
    @classmethod
    def get_lc_namespace(cls) -> List[str]:
        """Get the namespace of the langchain object.
        This is used to determine the namespace of the object when serializing.
        Defaults to ["langchain", "prompts", "base"].
        """
        return ["langchain", "prompts", "base"]
[docs]    def to_string(self) -> str:
        """Return prompt as string."""
        return self.text 
[docs]    def to_messages(self) -> List[BaseMessage]:
        """Return prompt as messages."""
        return [HumanMessage(content=self.text)]  
[docs]class ChatPromptValue(PromptValue):
    """Chat prompt value.
    A type of a prompt value that is built from messages.
    """
    messages: Sequence[BaseMessage]
    """List of messages."""
[docs]    def to_string(self) -> str:
        """Return prompt as string."""
        return get_buffer_string(self.messages) 
[docs]    def to_messages(self) -> List[BaseMessage]:
        """Return prompt as a list of messages."""
        return list(self.messages) 
    @classmethod
    def get_lc_namespace(cls) -> List[str]:
        """Get the namespace of the langchain object.
        This is used to determine the namespace of the object when serializing.
        Defaults to ["langchain", "prompts", "chat"].
        """
        return ["langchain", "prompts", "chat"] 
[docs]class ImageURL(TypedDict, total=False):
    """Image URL."""
    detail: Literal["auto", "low", "high"]
    """Specifies the detail level of the image. Defaults to "auto".
    Can be "auto", "low", or "high"."""
    url: str
    """Either a URL of the image or the base64 encoded image data.""" 
[docs]class ImagePromptValue(PromptValue):
    """Image prompt value."""
    image_url: ImageURL
    """Image URL."""
    type: Literal["ImagePromptValue"] = "ImagePromptValue"
[docs]    def to_string(self) -> str:
        """Return prompt (image URL) as string."""
        return self.image_url["url"] 
[docs]    def to_messages(self) -> List[BaseMessage]:
        """Return prompt (image URL) as messages."""
        return [HumanMessage(content=[cast(dict, self.image_url)])]  
[docs]class ChatPromptValueConcrete(ChatPromptValue):
    """Chat prompt value which explicitly lists out the message types it accepts.
    For use in external schemas."""
    messages: Sequence[AnyMessage]
    """Sequence of messages."""
    type: Literal["ChatPromptValueConcrete"] = "ChatPromptValueConcrete"
    @classmethod
    def get_lc_namespace(cls) -> List[str]:
        """Get the namespace of the langchain object.
        This is used to determine the namespace of the object when serializing.
        Defaults to ["langchain", "prompts", "chat"].
        """
        return ["langchain", "prompts", "chat"]