gen_ai_hub.proxy.langchain.openai
index
/home/jenkins/agent/workspace/ation_generative-ai-hub-sdk_main/gen_ai_hub/proxy/langchain/openai.py

LangChain wrappers for OpenAI models via Generative AI Hub.

 
Modules
       
re

 
Classes
       
gen_ai_hub.proxy.langchain.base.BaseAuth(pydantic.main.BaseModel)
ProxyOpenAI
ChatOpenAI(ProxyOpenAI, langchain_openai.chat_models.base.ChatOpenAI)
OpenAI(ProxyOpenAI, langchain_openai.llms.base.OpenAI)
OpenAIEmbeddings(ProxyOpenAI, langchain_openai.embeddings.base.OpenAIEmbeddings)

 
class ChatOpenAI(ProxyOpenAI, langchain_openai.chat_models.base.ChatOpenAI)
    ChatOpenAI(*args, name: str | None = None, cache: langchain_core.caches.BaseCache | bool | None = None, verbose: bool = <factory>, callbacks: list[langchain_core.callbacks.base.BaseCallbackHandler] | langchain_core.callbacks.base.BaseCallbackManager | None = None, tags: list[str] | None = None, metadata: dict[str, typing.Any] | None = None, custom_get_token_ids: collections.abc.Callable[[str], list[int]] | None = None, rate_limiter: langchain_core.rate_limiters.BaseRateLimiter | None = None, disable_streaming: Union[bool, Literal['tool_calling']] = False, output_version: str | None = <factory>, profile: langchain_core.language_models.model_profile.ModelProfile | None = None, client: Any = None, async_client: Any = None, root_client: Any = None, root_async_client: Any = None, model_name: Optional[str] = None, temperature: float | None = None, model_kwargs: dict[str, typing.Any] = <factory>, api_key: pydantic.types.SecretStr | None | collections.abc.Callable[[], str] | collections.abc.Callable[[], collections.abc.Awaitable[str]] = <factory>, base_url: str | None = None, organization: str | None = None, openai_proxy: str | None = <factory>, timeout: Union[float, tuple[float, float], Any, NoneType] = None, stream_usage: bool | None = None, max_retries: int | None = None, presence_penalty: float | None = None, frequency_penalty: float | None = None, seed: int | None = None, logprobs: bool | None = None, top_logprobs: int | None = None, logit_bias: dict[int, int] | None = None, streaming: bool = False, n: int | None = None, top_p: float | None = None, max_completion_tokens: int | None = None, reasoning_effort: str | None = None, reasoning: dict[str, typing.Any] | None = None, verbosity: str | None = None, tiktoken_model_name: str | None = None, default_headers: collections.abc.Mapping[str, str] | None = None, default_query: collections.abc.Mapping[str, object] | None = None, http_client: Optional[Any] = None, http_async_client: Optional[Any] = None, stop_sequences: list[str] | str | None = None, extra_body: collections.abc.Mapping[str, typing.Any] | None = None, include_response_headers: bool = False, disabled_params: dict[str, typing.Any] | None = None, context_management: list[dict[str, typing.Any]] | None = None, include: list[str] | None = None, service_tier: str | None = None, store: bool | None = None, truncation: str | None = None, use_previous_response_id: bool = False, use_responses_api: bool | None = None, proxy_client: Optional[Any] = None, deployment_id: Optional[str] = None, config_name: Optional[str] = None, config_id: Optional[str] = None, proxy_model_name: Optional[str] = None, api_version: Optional[str] = None, **kwargs) -> None
 
ChatOpenAI model using a proxy.
 
:param ProxyOpenAI: Base class for OpenAI models using a proxy
:type ProxyOpenAI: class
:param ChatOpenAI_: ChatOpenAI class from langchain_openai
:type ChatOpenAI_: class
 
 
Method resolution order:
ChatOpenAI
ProxyOpenAI
gen_ai_hub.proxy.langchain.base.BaseAuth
langchain_openai.chat_models.base.ChatOpenAI
langchain_openai.chat_models.base.BaseChatOpenAI
langchain_core.language_models.chat_models.BaseChatModel
langchain_core.language_models.base.BaseLanguageModel[AIMessage]
langchain_core.language_models.base.BaseLanguageModel
langchain_core.runnables.base.RunnableSerializable[Union[PromptValue, str, Sequence[Union[BaseMessage, list[str], tuple[str, str], str, dict[str, Any]]]], ~LanguageModelOutputVar]
langchain_core.runnables.base.RunnableSerializable
langchain_core.load.serializable.Serializable
pydantic.main.BaseModel
langchain_core.runnables.base.Runnable
abc.ABC
typing.Generic
builtins.object

Methods defined here:
__init__(self, *args, **kwargs)
Initialize the ChatOpenAI object.

Class methods defined here:
validate_environment(values: Dict) -> Dict from pydantic._internal._model_construction.ModelMetaclass
Validates the environment.
 
:param values: The input values
:type values: Dict
:raises ValueError: n must be at least 1.
:return: The validated values
:rtype: Dict

Static methods defined here:
__new__(cls, **data: Any)
Initialize the OpenAI object.
:param data: Additional data to initialize the object
:type data: Any
:return: The initialized OpenAI object
:rtype: OpenAIBase

Data and other attributes defined here:
__abstractmethods__ = frozenset()
__annotations__ = {'model_name': typing.Optional[str], 'openai_api_version': typing.Optional[str]}
__class_vars__ = set()
__parameters__ = ()
__private_attributes__ = {}
__pydantic_complete__ = True
__pydantic_computed_fields__ = {}
__pydantic_core_schema__ = {'function': {'function': <function BaseChatOpenAI._set_model_profile>, 'type': 'no-info'}, 'metadata': {'pydantic_js_functions': [<bound method BaseModel.__get_pydantic_json_sche... 'gen_ai_hub.proxy.langchain.openai.ChatOpenAI'>>]}, 'ref': 'gen_ai_hub.proxy.langchain.openai.ChatOpenAI:139913210190432', 'schema': {'cls': <class 'gen_ai_hub.proxy.langchain.openai.ChatOpenAI'>, 'config': {'extra_fields_behavior': 'allow', 'title': 'ChatOpenAI', 'validate_by_alias': True, 'validate_by_name': True}, 'custom_init': True, 'root_model': False, 'schema': {'function': {'function': <bound method ChatOpenAI.validate_environment of... 'gen_ai_hub.proxy.langchain.openai.ChatOpenAI'>>, 'type': 'no-info'}, 'schema': {'function': {'function': <bound method BaseChatOpenAI.validate_temperatur... 'gen_ai_hub.proxy.langchain.openai.ChatOpenAI'>>, 'type': 'no-info'}, 'schema': {'function': {'function': <bound method BaseChatOpenAI.build_extra of <class 'gen_ai_hub.proxy.langchain.openai.ChatOpenAI'>>, 'type': 'no-info'}, 'schema': {'computed_fields': [], 'fields': {...}, 'model_name': 'ChatOpenAI', 'type': 'model-fields'}, 'type': 'function-before'}, 'type': 'function-before'}, 'type': 'function-before'}, 'type': 'model'}, 'type': 'function-after'}
__pydantic_custom_init__ = True
__pydantic_decorators__ = DecoratorInfos(validators={}, field_validators={...ecoratorInfo(mode='after'))}, computed_fields={})
__pydantic_fields__ = {'async_client': FieldInfo(annotation=Any, required=False, default=None, exclude=True), 'cache': FieldInfo(annotation=Union[BaseCache, bool, NoneType], required=False, default=None, exclude=True), 'callbacks': FieldInfo(annotation=Union[list[BaseCallbackHand...ype], required=False, default=None, exclude=True), 'client': FieldInfo(annotation=Any, required=False, default=None, exclude=True), 'config_id': FieldInfo(annotation=Union[str, NoneType], required=False, default=None), 'config_name': FieldInfo(annotation=Union[str, NoneType], required=False, default=None), 'context_management': FieldInfo(annotation=Union[list[dict[str, Any]], NoneType], required=False, default=None), 'custom_get_token_ids': FieldInfo(annotation=Union[Callable[list, list[i...ype], required=False, default=None, exclude=True), 'default_headers': FieldInfo(annotation=Union[Mapping[str, str], NoneType], required=False, default=None), 'default_query': FieldInfo(annotation=Union[Mapping[str, object], NoneType], required=False, default=None), ...}
__pydantic_generic_metadata__ = {'args': (), 'origin': None, 'parameters': ()}
__pydantic_parent_namespace__ = None
__pydantic_post_init__ = None
__pydantic_serializer__ = SchemaSerializer(serializer=Model( ModelSeri... name: "ChatOpenAI", }, ), definitions=[])
__pydantic_setattr_handlers__ = {}
__pydantic_validator__ = SchemaValidator(title="ChatOpenAI", validator=Fu...se, }, ), definitions=[], cache_strings=True)
__signature__ = <Signature (*args, name: str | None = None, cach...version: Optional[str] = None, **kwargs) -> None>
model_config = {'arbitrary_types_allowed': True, 'extra': 'allow', 'populate_by_name': True, 'protected_namespaces': (), 'validate_by_alias': True, 'validate_by_name': True}

Class methods inherited from ProxyOpenAI:
validate_clients(values: Dict) -> Dict from pydantic._internal._model_construction.ModelMetaclass
Validate and initialize OpenAI clients.
 
:param values: The input values
:type values: Dict
:return: The validated values
:rtype: Dict

Data descriptors inherited from gen_ai_hub.proxy.langchain.base.BaseAuth:
__weakref__
list of weak references to the object (if defined)

Methods inherited from langchain_openai.chat_models.base.ChatOpenAI:
with_structured_output(self, schema: '_DictOrPydanticClass | None' = None, *, method: "Literal['function_calling', 'json_mode', 'json_schema']" = 'json_schema', include_raw: 'bool' = False, strict: 'bool | None' = None, tools: 'list | None' = None, **kwargs: 'Any') -> 'Runnable[LanguageModelInput, _DictOrPydantic]'
Model wrapper that returns outputs formatted to match the given schema.
 
Args:
    schema: The output schema. Can be passed in as:
 
        - an OpenAI function/tool schema,
        - a JSON Schema,
        - a `TypedDict` class,
        - or a Pydantic class.
 
        If `schema` is a Pydantic class then the model output will be a
        Pydantic instance of that class, and the model-generated fields will be
        validated by the Pydantic class. Otherwise the model output will be a
        dict and will not be validated.
 
        See `langchain_core.utils.function_calling.convert_to_openai_tool` for
        more on how to properly specify types and descriptions of schema fields
        when specifying a Pydantic or `TypedDict` class.
 
    method: The method for steering model generation, one of:
 
        - `'json_schema'`:
            Uses OpenAI's [Structured Output API](https://platform.openai.com/docs/guides/structured-outputs).
            See the docs for [supported models](https://platform.openai.com/docs/guides/structured-outputs#supported-models).
        - `'function_calling'`:
            Uses OpenAI's [tool-calling API](https://platform.openai.com/docs/guides/function-calling)
            (formerly called function calling).
        - `'json_mode'`:
            Uses OpenAI's [JSON mode](https://platform.openai.com/docs/guides/structured-outputs#json-mode).
            Note that if using JSON mode then you must include instructions for
            formatting the output into the desired schema into the model call.
 
        Learn more about the [differences between methods](https://platform.openai.com/docs/guides/structured-outputs#function-calling-vs-response-format).
 
    include_raw:
        If `False` then only the parsed structured output is returned.
 
        If an error occurs during model output parsing it will be raised.
 
        If `True` then both the raw model response (a `BaseMessage`) and the
        parsed model response will be returned.
 
        If an error occurs during output parsing it will be caught and returned
        as well.
 
        The final output is always a `dict` with keys `'raw'`, `'parsed'`, and
        `'parsing_error'`.
    strict:
 
        - `True`:
            Model output is guaranteed to exactly match the schema.
            The input schema will also be validated according to the
            [supported schemas](https://platform.openai.com/docs/guides/structured-outputs#supported-schemas).
        - `False`:
            Input schema will not be validated and model output will not be
            validated.
        - `None`:
            `strict` argument will not be passed to the model.
 
        If schema is specified via `TypedDict` or JSON schema, `strict` is not
        enabled by default. Pass `strict=True` to enable it.
 
        !!! note
            `strict` can only be non-null if `method` is `'json_schema'` or `'function_calling'`.
    tools:
        A list of tool-like objects to bind to the chat model. Requires that:
 
        - `method` is `'json_schema'` (default).
        - `strict=True`
        - `include_raw=True`
 
        If a model elects to call a
        tool, the resulting `AIMessage` in `'raw'` will include tool calls.
 
        ??? example
 
            ```python
            from langchain.chat_models import init_chat_model
            from pydantic import BaseModel
 
 
            class ResponseSchema(BaseModel):
                response: str
 
 
            def get_weather(location: str) -> str:
                \"\"\"Get weather at a location.\"\"\"
                pass
 
            model = init_chat_model("openai:gpt-4o-mini")
 
            structured_model = model.with_structured_output(
                ResponseSchema,
                tools=[get_weather],
                strict=True,
                include_raw=True,
            )
 
            structured_model.invoke("What's the weather in Boston?")
            ```
 
            ```python
            {
                "raw": AIMessage(content="", tool_calls=[...], ...),
                "parsing_error": None,
                "parsed": None,
            }
            ```
 
    kwargs: Additional keyword args are passed through to the model.
 
Returns:
    A `Runnable` that takes same inputs as a
        `langchain_core.language_models.chat.BaseChatModel`. If `include_raw` is
        `False` and `schema` is a Pydantic class, `Runnable` outputs an instance
        of `schema` (i.e., a Pydantic object). Otherwise, if `include_raw` is
        `False` then `Runnable` outputs a `dict`.
 
        If `include_raw` is `True`, then `Runnable` outputs a `dict` with keys:
 
        - `'raw'`: `BaseMessage`
        - `'parsed'`: `None` if there was a parsing error, otherwise the type
            depends on the `schema` as described above.
        - `'parsing_error'`: `BaseException | None`
 
!!! warning "Behavior changed in `langchain-openai` 0.3.0"
 
    `method` default changed from `"function_calling"` to `"json_schema"`.
 
!!! warning "Behavior changed in `langchain-openai` 0.3.12"
 
    Support for `tools` added.
 
!!! warning "Behavior changed in `langchain-openai` 0.3.21"
 
    Pass `kwargs` through to the model.
 
??? note "Example: `schema=Pydantic` class, `method='json_schema'`, `include_raw=False`, `strict=True`"
 
    Note, OpenAI has a number of restrictions on what types of schemas can be
    provided if `strict = True`. When using Pydantic, our model cannot
    specify any Field metadata (like min/max constraints) and fields cannot
    have default values.
 
    See [all constraints](https://platform.openai.com/docs/guides/structured-outputs#supported-schemas).
 
    ```python
    from langchain_openai import ChatOpenAI
    from pydantic import BaseModel, Field
 
 
    class AnswerWithJustification(BaseModel):
        '''An answer to the user question along with justification for the answer.'''
 
        answer: str
        justification: str | None = Field(
            default=..., description="A justification for the answer."
        )
 
 
    model = ChatOpenAI(model="...", temperature=0)
    structured_model = model.with_structured_output(AnswerWithJustification)
 
    structured_model.invoke(
        "What weighs more a pound of bricks or a pound of feathers"
    )
    ```
 
    ```python
    AnswerWithJustification(
        answer="They weigh the same",
        justification="Both a pound of bricks and a pound of feathers weigh one pound. The weight is the same, but the volume or density of the objects may differ.",
    )
    ```
 
??? note "Example: `schema=Pydantic` class, `method='function_calling'`, `include_raw=False`, `strict=False`"
 
    ```python
    from langchain_openai import ChatOpenAI
    from pydantic import BaseModel, Field
 
 
    class AnswerWithJustification(BaseModel):
        '''An answer to the user question along with justification for the answer.'''
 
        answer: str
        justification: str | None = Field(
            default=..., description="A justification for the answer."
        )
 
 
    model = ChatOpenAI(model="...", temperature=0)
    structured_model = model.with_structured_output(
        AnswerWithJustification, method="function_calling"
    )
 
    structured_model.invoke(
        "What weighs more a pound of bricks or a pound of feathers"
    )
    ```
 
    ```python
    AnswerWithJustification(
        answer="They weigh the same",
        justification="Both a pound of bricks and a pound of feathers weigh one pound. The weight is the same, but the volume or density of the objects may differ.",
    )
    ```
 
??? note "Example: `schema=Pydantic` class, `method='json_schema'`, `include_raw=True`"
 
    ```python
    from langchain_openai import ChatOpenAI
    from pydantic import BaseModel
 
 
    class AnswerWithJustification(BaseModel):
        '''An answer to the user question along with justification for the answer.'''
 
        answer: str
        justification: str
 
 
    model = ChatOpenAI(model="...", temperature=0)
    structured_model = model.with_structured_output(
        AnswerWithJustification, include_raw=True
    )
 
    structured_model.invoke(
        "What weighs more a pound of bricks or a pound of feathers"
    )
    ```
 
    ```python
    {
        "raw": AIMessage(
            content="",
            additional_kwargs={
                "tool_calls": [
                    {
                        "id": "call_Ao02pnFYXD6GN1yzc0uXPsvF",
                        "function": {
                            "arguments": '{"answer":"They weigh the same.","justification":"Both a pound of bricks and a pound of feathers weigh one pound. The weight is the same, but the volume or density of the objects may differ."}',
                            "name": "AnswerWithJustification",
                        },
                        "type": "function",
                    }
                ]
            },
        ),
        "parsed": AnswerWithJustification(
            answer="They weigh the same.",
            justification="Both a pound of bricks and a pound of feathers weigh one pound. The weight is the same, but the volume or density of the objects may differ.",
        ),
        "parsing_error": None,
    }
    ```
 
??? note "Example: `schema=TypedDict` class, `method='json_schema'`, `include_raw=False`, `strict=False`"
 
    ```python
    from typing_extensions import Annotated, TypedDict
 
    from langchain_openai import ChatOpenAI
 
 
    class AnswerWithJustification(TypedDict):
        '''An answer to the user question along with justification for the answer.'''
 
        answer: str
        justification: Annotated[
            str | None, None, "A justification for the answer."
        ]
 
 
    model = ChatOpenAI(model="...", temperature=0)
    structured_model = model.with_structured_output(AnswerWithJustification)
 
    structured_model.invoke(
        "What weighs more a pound of bricks or a pound of feathers"
    )
    ```
 
    ```python
    {
        "answer": "They weigh the same",
        "justification": "Both a pound of bricks and a pound of feathers weigh one pound. The weight is the same, but the volume and density of the two substances differ.",
    }
    ```
 
??? note "Example: `schema=OpenAI` function schema, `method='json_schema'`, `include_raw=False`"
 
    ```python
    from langchain_openai import ChatOpenAI
 
    oai_schema = {
        "name": "AnswerWithJustification",
        "description": "An answer to the user question along with justification for the answer.",
        "parameters": {
            "type": "object",
            "properties": {
                "answer": {"type": "string"},
                "justification": {
                    "description": "A justification for the answer.",
                    "type": "string",
                },
            },
            "required": ["answer"],
        },
    }
 
    model = ChatOpenAI(model="...", temperature=0)
    structured_model = model.with_structured_output(oai_schema)
 
    structured_model.invoke(
        "What weighs more a pound of bricks or a pound of feathers"
    )
    ```
 
    ```python
    {
        "answer": "They weigh the same",
        "justification": "Both a pound of bricks and a pound of feathers weigh one pound. The weight is the same, but the volume and density of the two substances differ.",
    }
    ```
 
??? note "Example: `schema=Pydantic` class, `method='json_mode'`, `include_raw=True`"
 
    ```python
    from langchain_openai import ChatOpenAI
    from pydantic import BaseModel
 
 
    class AnswerWithJustification(BaseModel):
        answer: str
        justification: str
 
 
    model = ChatOpenAI(model="...", temperature=0)
    structured_model = model.with_structured_output(
        AnswerWithJustification, method="json_mode", include_raw=True
    )
 
    structured_model.invoke(
        "Answer the following question. "
        "Make sure to return a JSON blob with keys 'answer' and 'justification'.\\n\\n"
        "What's heavier a pound of bricks or a pound of feathers?"
    )
    ```
 
    ```python
    {
        "raw": AIMessage(
            content='{\\n    "answer": "They are both the same weight.",\\n    "justification": "Both a pound of bricks and a pound of feathers weigh one pound. The difference lies in the volume and density of the materials, not the weight." \\n}'
        ),
        "parsed": AnswerWithJustification(
            answer="They are both the same weight.",
            justification="Both a pound of bricks and a pound of feathers weigh one pound. The difference lies in the volume and density of the materials, not the weight.",
        ),
        "parsing_error": None,
    }
    ```
 
??? note "Example: `schema=None`, `method='json_mode'`, `include_raw=True`"
 
    ```python
    structured_model = model.with_structured_output(
        method="json_mode", include_raw=True
    )
 
    structured_model.invoke(
        "Answer the following question. "
        "Make sure to return a JSON blob with keys 'answer' and 'justification'.\\n\\n"
        "What's heavier a pound of bricks or a pound of feathers?"
    )
    ```
 
    ```python
    {
        "raw": AIMessage(
            content='{\\n    "answer": "They are both the same weight.",\\n    "justification": "Both a pound of bricks and a pound of feathers weigh one pound. The difference lies in the volume and density of the materials, not the weight." \\n}'
        ),
        "parsed": {
            "answer": "They are both the same weight.",
            "justification": "Both a pound of bricks and a pound of feathers weigh one pound. The difference lies in the volume and density of the materials, not the weight.",
        },
        "parsing_error": None,
    }
    ```

Class methods inherited from langchain_openai.chat_models.base.ChatOpenAI:
get_lc_namespace() -> 'list[str]' from pydantic._internal._model_construction.ModelMetaclass
Get the namespace of the LangChain object.
 
Returns:
    `["langchain", "chat_models", "openai"]`
is_lc_serializable() -> 'bool' from pydantic._internal._model_construction.ModelMetaclass
Return whether this model can be serialized by LangChain.

Readonly properties inherited from langchain_openai.chat_models.base.ChatOpenAI:
lc_attributes
Get the attributes of the langchain object.
lc_secrets
Mapping of secret environment variables.

Methods inherited from langchain_openai.chat_models.base.BaseChatOpenAI:
bind_tools(self, tools: 'Sequence[dict[str, Any] | type | Callable | BaseTool]', *, tool_choice: 'dict | str | bool | None' = None, strict: 'bool | None' = None, parallel_tool_calls: 'bool | None' = None, response_format: '_DictOrPydanticClass | None' = None, **kwargs: 'Any') -> 'Runnable[LanguageModelInput, AIMessage]'
Bind tool-like objects to this chat model.
 
Assumes model is compatible with OpenAI tool-calling API.
 
Args:
    tools: A list of tool definitions to bind to this chat model.
 
        Supports any tool definition handled by [`convert_to_openai_tool`][langchain_core.utils.function_calling.convert_to_openai_tool].
    tool_choice: Which tool to require the model to call. Options are:
 
        - `str` of the form `'<<tool_name>>'`: calls `<<tool_name>>` tool.
        - `'auto'`: automatically selects a tool (including no tool).
        - `'none'`: does not call a tool.
        - `'any'` or `'required'` or `True`: force at least one tool to be called.
        - `dict` of the form `{"type": "function", "function": {"name": <<tool_name>>}}`: calls `<<tool_name>>` tool.
        - `False` or `None`: no effect, default OpenAI behavior.
    strict: If `True`, model output is guaranteed to exactly match the JSON Schema
        provided in the tool definition. The input schema will also be validated according to the
        [supported schemas](https://platform.openai.com/docs/guides/structured-outputs/supported-schemas?api-mode=responses#supported-schemas).
        If `False`, input schema will not be validated and model output will not
        be validated. If `None`, `strict` argument will not be passed to the model.
    parallel_tool_calls: Set to `False` to disable parallel tool use.
        Defaults to `None` (no specification, which allows parallel tool use).
    response_format: Optional schema to format model response. If provided
        and the model does not call a tool, the model will generate a
        [structured response](https://platform.openai.com/docs/guides/structured-outputs).
    kwargs: Any additional parameters are passed directly to `bind`.
get_num_tokens_from_messages(self, messages: 'Sequence[BaseMessage]', tools: 'Sequence[dict[str, Any] | type | Callable | BaseTool] | None' = None, *, allow_fetching_images: 'bool' = True) -> 'int'
Calculate num tokens for `gpt-3.5-turbo` and `gpt-4` with `tiktoken` package.
 
!!! warning
    You must have the `pillow` installed if you want to count image tokens if
    you are specifying the image as a base64 string, and you must have both
    `pillow` and `httpx` installed if you are specifying the image as a URL. If
    these aren't installed image inputs will be ignored in token counting.
 
[OpenAI reference](https://github.com/openai/openai-cookbook/blob/main/examples/How_to_format_inputs_to_ChatGPT_models.ipynb).
 
Args:
    messages: The message inputs to tokenize.
    tools: If provided, sequence of `dict`, `BaseModel`, function, or `BaseTool`
        to be converted to tool schemas.
    allow_fetching_images: Whether to allow fetching images for token counting.
get_token_ids(self, text: 'str') -> 'list[int]'
Get the tokens present in the text with tiktoken package.

Class methods inherited from langchain_openai.chat_models.base.BaseChatOpenAI:
build_extra(values: 'dict[str, Any]') -> 'Any' from pydantic._internal._model_construction.ModelMetaclass
Build extra kwargs from additional params that were passed in.
validate_temperature(values: 'dict[str, Any]') -> 'Any' from pydantic._internal._model_construction.ModelMetaclass
Validate temperature parameter for different models.
 
- gpt-5 models (excluding gpt-5-chat) only allow `temperature=1` or unset
    (Defaults to 1)

Readonly properties inherited from langchain_openai.chat_models.base.BaseChatOpenAI:
model
Same as model_name.

Methods inherited from langchain_core.language_models.chat_models.BaseChatModel:
async agenerate(self, messages: 'list[list[BaseMessage]]', stop: 'list[str] | None' = None, callbacks: 'Callbacks' = None, *, tags: 'list[str] | None' = None, metadata: 'dict[str, Any] | None' = None, run_name: 'str | None' = None, run_id: 'uuid.UUID | None' = None, **kwargs: 'Any') -> 'LLMResult'
Asynchronously pass a sequence of prompts to a model and return generations.
 
This method should make use of batched calls for models that expose a batched
API.
 
Use this method when you want to:
 
1. Take advantage of batched calls,
2. Need more output from the model than just the top generated value,
3. Are building chains that are agnostic to the underlying language model
    type (e.g., pure text completion models vs chat models).
 
Args:
    messages: List of list of messages.
    stop: Stop words to use when generating.
 
        Model output is cut off at the first occurrence of any of these
        substrings.
    callbacks: `Callbacks` to pass through.
 
        Used for executing additional functionality, such as logging or
        streaming, throughout generation.
    tags: The tags to apply.
    metadata: The metadata to apply.
    run_name: The name of the run.
    run_id: The ID of the run.
    **kwargs: Arbitrary additional keyword arguments.
 
        These are usually passed to the model provider API call.
 
Returns:
    An `LLMResult`, which contains a list of candidate `Generations` for each
        input prompt and additional model provider-specific output.
async agenerate_prompt(self, prompts: 'list[PromptValue]', stop: 'list[str] | None' = None, callbacks: 'Callbacks' = None, **kwargs: 'Any') -> 'LLMResult'
Asynchronously pass a sequence of prompts and return model generations.
 
This method should make use of batched calls for models that expose a batched
API.
 
Use this method when you want to:
 
1. Take advantage of batched calls,
2. Need more output from the model than just the top generated value,
3. Are building chains that are agnostic to the underlying language model
    type (e.g., pure text completion models vs chat models).
 
Args:
    prompts: List of `PromptValue` objects.
 
        A `PromptValue` is an object that can be converted to match the format
        of any language model (string for pure text generation models and
        `BaseMessage` objects for chat models).
    stop: Stop words to use when generating.
 
        Model output is cut off at the first occurrence of any of these
        substrings.
    callbacks: `Callbacks` to pass through.
 
        Used for executing additional functionality, such as logging or
        streaming, throughout generation.
    **kwargs: Arbitrary additional keyword arguments.
 
        These are usually passed to the model provider API call.
 
Returns:
    An `LLMResult`, which contains a list of candidate `Generation` objects for
        each input prompt and additional model provider-specific output.
async ainvoke(self, input: 'LanguageModelInput', config: 'RunnableConfig | None' = None, *, stop: 'list[str] | None' = None, **kwargs: 'Any') -> 'AIMessage'
Transform a single input into an output.
 
Args:
    input: The input to the `Runnable`.
    config: A config to use when invoking the `Runnable`.
 
        The config supports standard keys like `'tags'`, `'metadata'` for
        tracing purposes, `'max_concurrency'` for controlling how much work to
        do in parallel, and other keys.
 
        Please refer to `RunnableConfig` for more details.
 
Returns:
    The output of the `Runnable`.
async astream(self, input: 'LanguageModelInput', config: 'RunnableConfig | None' = None, *, stop: 'list[str] | None' = None, **kwargs: 'Any') -> 'AsyncIterator[AIMessageChunk]'
Default implementation of `astream`, which calls `ainvoke`.
 
Subclasses must override this method if they support streaming output.
 
Args:
    input: The input to the `Runnable`.
    config: The config to use for the `Runnable`.
    **kwargs: Additional keyword arguments to pass to the `Runnable`.
 
Yields:
    The output of the `Runnable`.
dict(self, **kwargs: 'Any') -> 'dict'
Return a dictionary of the LLM.
generate(self, messages: 'list[list[BaseMessage]]', stop: 'list[str] | None' = None, callbacks: 'Callbacks' = None, *, tags: 'list[str] | None' = None, metadata: 'dict[str, Any] | None' = None, run_name: 'str | None' = None, run_id: 'uuid.UUID | None' = None, **kwargs: 'Any') -> 'LLMResult'
Pass a sequence of prompts to the model and return model generations.
 
This method should make use of batched calls for models that expose a batched
API.
 
Use this method when you want to:
 
1. Take advantage of batched calls,
2. Need more output from the model than just the top generated value,
3. Are building chains that are agnostic to the underlying language model
    type (e.g., pure text completion models vs chat models).
 
Args:
    messages: List of list of messages.
    stop: Stop words to use when generating.
 
        Model output is cut off at the first occurrence of any of these
        substrings.
    callbacks: `Callbacks` to pass through.
 
        Used for executing additional functionality, such as logging or
        streaming, throughout generation.
    tags: The tags to apply.
    metadata: The metadata to apply.
    run_name: The name of the run.
    run_id: The ID of the run.
    **kwargs: Arbitrary additional keyword arguments.
 
        These are usually passed to the model provider API call.
 
Returns:
    An `LLMResult`, which contains a list of candidate `Generations` for each
        input prompt and additional model provider-specific output.
generate_prompt(self, prompts: 'list[PromptValue]', stop: 'list[str] | None' = None, callbacks: 'Callbacks' = None, **kwargs: 'Any') -> 'LLMResult'
Pass a sequence of prompts to the model and return model generations.
 
This method should make use of batched calls for models that expose a batched
API.
 
Use this method when you want to:
 
1. Take advantage of batched calls,
2. Need more output from the model than just the top generated value,
3. Are building chains that are agnostic to the underlying language model
    type (e.g., pure text completion models vs chat models).
 
Args:
    prompts: List of `PromptValue` objects.
 
        A `PromptValue` is an object that can be converted to match the format
        of any language model (string for pure text generation models and
        `BaseMessage` objects for chat models).
    stop: Stop words to use when generating.
 
        Model output is cut off at the first occurrence of any of these
        substrings.
    callbacks: `Callbacks` to pass through.
 
        Used for executing additional functionality, such as logging or
        streaming, throughout generation.
    **kwargs: Arbitrary additional keyword arguments.
 
        These are usually passed to the model provider API call.
 
Returns:
    An `LLMResult`, which contains a list of candidate `Generation` objects for
        each input prompt and additional model provider-specific output.
invoke(self, input: 'LanguageModelInput', config: 'RunnableConfig | None' = None, *, stop: 'list[str] | None' = None, **kwargs: 'Any') -> 'AIMessage'
Transform a single input into an output.
 
Args:
    input: The input to the `Runnable`.
    config: A config to use when invoking the `Runnable`.
 
        The config supports standard keys like `'tags'`, `'metadata'` for
        tracing purposes, `'max_concurrency'` for controlling how much work to
        do in parallel, and other keys.
 
        Please refer to `RunnableConfig` for more details.
 
Returns:
    The output of the `Runnable`.
stream(self, input: 'LanguageModelInput', config: 'RunnableConfig | None' = None, *, stop: 'list[str] | None' = None, **kwargs: 'Any') -> 'Iterator[AIMessageChunk]'
Default implementation of `stream`, which calls `invoke`.
 
Subclasses must override this method if they support streaming output.
 
Args:
    input: The input to the `Runnable`.
    config: The config to use for the `Runnable`.
    **kwargs: Additional keyword arguments to pass to the `Runnable`.
 
Yields:
    The output of the `Runnable`.

Readonly properties inherited from langchain_core.language_models.chat_models.BaseChatModel:
OutputType
Get the output type for this `Runnable`.

Methods inherited from langchain_core.language_models.base.BaseLanguageModel:
get_num_tokens(self, text: 'str') -> 'int'
Get the number of tokens present in the text.
 
Useful for checking if an input fits in a model's context window.
 
This should be overridden by model-specific implementations to provide accurate
token counts via model-specific tokenizers.
 
Args:
    text: The string input to tokenize.
 
Returns:
    The integer number of tokens in the text.

Class methods inherited from langchain_core.language_models.base.BaseLanguageModel:
set_verbose(verbose: 'bool | None') -> 'bool' from pydantic._internal._model_construction.ModelMetaclass
If verbose is `None`, set it.
 
This allows users to pass in `None` as verbose to access the global setting.
 
Args:
    verbose: The verbosity setting to use.
 
Returns:
    The verbosity setting to use.

Readonly properties inherited from langchain_core.language_models.base.BaseLanguageModel:
InputType
Get the input type for this `Runnable`.

Methods inherited from langchain_core.runnables.base.RunnableSerializable:
configurable_alternatives(self, which: 'ConfigurableField', *, default_key: 'str' = 'default', prefix_keys: 'bool' = False, **kwargs: 'Runnable[Input, Output] | Callable[[], Runnable[Input, Output]]') -> 'RunnableSerializable[Input, Output]'
Configure alternatives for `Runnable` objects that can be set at runtime.
 
Args:
    which: The `ConfigurableField` instance that will be used to select the
        alternative.
    default_key: The default key to use if no alternative is selected.
    prefix_keys: Whether to prefix the keys with the `ConfigurableField` id.
    **kwargs: A dictionary of keys to `Runnable` instances or callables that
        return `Runnable` instances.
 
Returns:
    A new `Runnable` with the alternatives configured.
 
!!! example
 
    ```python
    from langchain_anthropic import ChatAnthropic
    from langchain_core.runnables.utils import ConfigurableField
    from langchain_openai import ChatOpenAI
 
    model = ChatAnthropic(
        model_name="claude-sonnet-4-5-20250929"
    ).configurable_alternatives(
        ConfigurableField(id="llm"),
        default_key="anthropic",
        openai=ChatOpenAI(),
    )
 
    # uses the default model ChatAnthropic
    print(model.invoke("which organization created you?").content)
 
    # uses ChatOpenAI
    print(
        model.with_config(configurable={"llm": "openai"})
        .invoke("which organization created you?")
        .content
    )
    ```
configurable_fields(self, **kwargs: 'AnyConfigurableField') -> 'RunnableSerializable[Input, Output]'
Configure particular `Runnable` fields at runtime.
 
Args:
    **kwargs: A dictionary of `ConfigurableField` instances to configure.
 
Raises:
    ValueError: If a configuration key is not found in the `Runnable`.
 
Returns:
    A new `Runnable` with the fields configured.
 
!!! example
 
    ```python
    from langchain_core.runnables import ConfigurableField
    from langchain_openai import ChatOpenAI
 
    model = ChatOpenAI(max_tokens=20).configurable_fields(
        max_tokens=ConfigurableField(
            id="output_token_number",
            name="Max tokens in the output",
            description="The maximum number of tokens in the output",
        )
    )
 
    # max_tokens = 20
    print(
        "max_tokens_20: ", model.invoke("tell me something about chess").content
    )
 
    # max_tokens = 200
    print(
        "max_tokens_200: ",
        model.with_config(configurable={"output_token_number": 200})
        .invoke("tell me something about chess")
        .content,
    )
    ```
to_json(self) -> 'SerializedConstructor | SerializedNotImplemented'
Serialize the `Runnable` to JSON.
 
Returns:
    A JSON-serializable representation of the `Runnable`.

Data and other attributes inherited from langchain_core.runnables.base.RunnableSerializable:
__orig_bases__ = (<class 'langchain_core.load.serializable.Serializable'>, langchain_core.runnables.base.Runnable[-Input, +Output])

Methods inherited from langchain_core.load.serializable.Serializable:
__repr_args__(self) -> Any
to_json_not_implemented(self) -> langchain_core.load.serializable.SerializedNotImplemented
Serialize a "not implemented" object.
 
Returns:
    `SerializedNotImplemented`.

Class methods inherited from langchain_core.load.serializable.Serializable:
lc_id() -> list[str] from pydantic._internal._model_construction.ModelMetaclass
Return a unique identifier for this class for serialization purposes.
 
The unique identifier is a list of strings that describes the path
to the object.
 
For example, for the class `langchain.llms.openai.OpenAI`, the id is
`["langchain", "llms", "openai", "OpenAI"]`.

Methods inherited from pydantic.main.BaseModel:
__copy__(self) -> 'Self'
Returns a shallow copy of the model.
__deepcopy__(self, memo: 'dict[int, Any] | None' = None) -> 'Self'
Returns a deep copy of the model.
__delattr__(self, item: 'str') -> 'Any'
Implement delattr(self, name).
__eq__(self, other: 'Any') -> 'bool'
Return self==value.
__getattr__(self, item: 'str') -> 'Any'
__getstate__(self) -> 'dict[Any, Any]'
__iter__(self) -> 'TupleGenerator'
So `dict(model)` works.
__pretty__(self, fmt: 'Callable[[Any], Any]', **kwargs: 'Any') -> 'Generator[Any]'
Used by devtools (https://python-devtools.helpmanual.io/) to pretty print objects.
__replace__(self, **changes: 'Any') -> 'Self'
# Because we make use of `@dataclass_transform()`, `__replace__` is already synthesized by
# type checkers, so we define the implementation in this `if not TYPE_CHECKING:` block:
__repr__(self) -> 'str'
Return repr(self).
__repr_name__(self) -> 'str'
Name of the instance's class, used in __repr__.
__repr_recursion__(self, object: 'Any') -> 'str'
Returns the string representation of a recursive object.
__repr_str__(self, join_str: 'str') -> 'str'
__rich_repr__(self) -> 'RichReprResult'
Used by Rich (https://rich.readthedocs.io/en/stable/pretty.html) to pretty print objects.
__setattr__(self, name: 'str', value: 'Any') -> 'None'
Implement setattr(self, name, value).
__setstate__(self, state: 'dict[Any, Any]') -> 'None'
__str__(self) -> 'str'
Return str(self).
copy(self, *, include: 'AbstractSetIntStr | MappingIntStrAny | None' = None, exclude: 'AbstractSetIntStr | MappingIntStrAny | None' = None, update: 'Dict[str, Any] | None' = None, deep: 'bool' = False) -> 'Self'
Returns a copy of the model.
 
!!! warning "Deprecated"
    This method is now deprecated; use `model_copy` instead.
 
If you need `include` or `exclude`, use:
 
```python {test="skip" lint="skip"}
data = self.model_dump(include=include, exclude=exclude, round_trip=True)
data = {**data, **(update or {})}
copied = self.model_validate(data)
```
 
Args:
    include: Optional set or mapping specifying which fields to include in the copied model.
    exclude: Optional set or mapping specifying which fields to exclude in the copied model.
    update: Optional dictionary of field-value pairs to override field values in the copied model.
    deep: If True, the values of fields that are Pydantic models will be deep-copied.
 
Returns:
    A copy of the model with included, excluded and updated fields as specified.
json(self, *, include: 'IncEx | None' = None, exclude: 'IncEx | None' = None, by_alias: 'bool' = False, exclude_unset: 'bool' = False, exclude_defaults: 'bool' = False, exclude_none: 'bool' = False, encoder: 'Callable[[Any], Any] | None' = PydanticUndefined, models_as_dict: 'bool' = PydanticUndefined, **dumps_kwargs: 'Any') -> 'str'
model_copy(self, *, update: 'Mapping[str, Any] | None' = None, deep: 'bool' = False) -> 'Self'
!!! abstract "Usage Documentation"
    [`model_copy`](../concepts/models.md#model-copy)
 
Returns a copy of the model.
 
!!! note
    The underlying instance's [`__dict__`][object.__dict__] attribute is copied. This
    might have unexpected side effects if you store anything in it, on top of the model
    fields (e.g. the value of [cached properties][functools.cached_property]).
 
Args:
    update: Values to change/add in the new model. Note: the data is not validated
        before creating the new model. You should trust this data.
    deep: Set to `True` to make a deep copy of the model.
 
Returns:
    New model instance.
model_dump(self, *, mode: "Literal['json', 'python'] | str" = 'python', include: 'IncEx | None' = None, exclude: 'IncEx | None' = None, context: 'Any | None' = None, by_alias: 'bool | None' = None, exclude_unset: 'bool' = False, exclude_defaults: 'bool' = False, exclude_none: 'bool' = False, exclude_computed_fields: 'bool' = False, round_trip: 'bool' = False, warnings: "bool | Literal['none', 'warn', 'error']" = True, fallback: 'Callable[[Any], Any] | None' = None, serialize_as_any: 'bool' = False) -> 'dict[str, Any]'
!!! abstract "Usage Documentation"
    [`model_dump`](../concepts/serialization.md#python-mode)
 
Generate a dictionary representation of the model, optionally specifying which fields to include or exclude.
 
Args:
    mode: The mode in which `to_python` should run.
        If mode is 'json', the output will only contain JSON serializable types.
        If mode is 'python', the output may contain non-JSON-serializable Python objects.
    include: A set of fields to include in the output.
    exclude: A set of fields to exclude from the output.
    context: Additional context to pass to the serializer.
    by_alias: Whether to use the field's alias in the dictionary key if defined.
    exclude_unset: Whether to exclude fields that have not been explicitly set.
    exclude_defaults: Whether to exclude fields that are set to their default value.
    exclude_none: Whether to exclude fields that have a value of `None`.
    exclude_computed_fields: Whether to exclude computed fields.
        While this can be useful for round-tripping, it is usually recommended to use the dedicated
        `round_trip` parameter instead.
    round_trip: If True, dumped values should be valid as input for non-idempotent types such as Json[T].
    warnings: How to handle serialization errors. False/"none" ignores them, True/"warn" logs errors,
        "error" raises a [`PydanticSerializationError`][pydantic_core.PydanticSerializationError].
    fallback: A function to call when an unknown value is encountered. If not provided,
        a [`PydanticSerializationError`][pydantic_core.PydanticSerializationError] error is raised.
    serialize_as_any: Whether to serialize fields with duck-typing serialization behavior.
 
Returns:
    A dictionary representation of the model.
model_dump_json(self, *, indent: 'int | None' = None, ensure_ascii: 'bool' = False, include: 'IncEx | None' = None, exclude: 'IncEx | None' = None, context: 'Any | None' = None, by_alias: 'bool | None' = None, exclude_unset: 'bool' = False, exclude_defaults: 'bool' = False, exclude_none: 'bool' = False, exclude_computed_fields: 'bool' = False, round_trip: 'bool' = False, warnings: "bool | Literal['none', 'warn', 'error']" = True, fallback: 'Callable[[Any], Any] | None' = None, serialize_as_any: 'bool' = False) -> 'str'
!!! abstract "Usage Documentation"
    [`model_dump_json`](../concepts/serialization.md#json-mode)
 
Generates a JSON representation of the model using Pydantic's `to_json` method.
 
Args:
    indent: Indentation to use in the JSON output. If None is passed, the output will be compact.
    ensure_ascii: If `True`, the output is guaranteed to have all incoming non-ASCII characters escaped.
        If `False` (the default), these characters will be output as-is.
    include: Field(s) to include in the JSON output.
    exclude: Field(s) to exclude from the JSON output.
    context: Additional context to pass to the serializer.
    by_alias: Whether to serialize using field aliases.
    exclude_unset: Whether to exclude fields that have not been explicitly set.
    exclude_defaults: Whether to exclude fields that are set to their default value.
    exclude_none: Whether to exclude fields that have a value of `None`.
    exclude_computed_fields: Whether to exclude computed fields.
        While this can be useful for round-tripping, it is usually recommended to use the dedicated
        `round_trip` parameter instead.
    round_trip: If True, dumped values should be valid as input for non-idempotent types such as Json[T].
    warnings: How to handle serialization errors. False/"none" ignores them, True/"warn" logs errors,
        "error" raises a [`PydanticSerializationError`][pydantic_core.PydanticSerializationError].
    fallback: A function to call when an unknown value is encountered. If not provided,
        a [`PydanticSerializationError`][pydantic_core.PydanticSerializationError] error is raised.
    serialize_as_any: Whether to serialize fields with duck-typing serialization behavior.
 
Returns:
    A JSON string representation of the model.
model_post_init(self, context: 'Any', /) -> 'None'
Override this method to perform additional initialization after `__init__` and `model_construct`.
This is useful if you want to do some validation that requires the entire model to be initialized.

Class methods inherited from pydantic.main.BaseModel:
__class_getitem__(typevar_values: 'type[Any] | tuple[type[Any], ...]') -> 'type[BaseModel] | _forward_ref.PydanticRecursiveRef' from pydantic._internal._model_construction.ModelMetaclass
__get_pydantic_core_schema__(source: 'type[BaseModel]', handler: 'GetCoreSchemaHandler', /) -> 'CoreSchema' from pydantic._internal._model_construction.ModelMetaclass
__get_pydantic_json_schema__(core_schema: 'CoreSchema', handler: 'GetJsonSchemaHandler', /) -> 'JsonSchemaValue' from pydantic._internal._model_construction.ModelMetaclass
Hook into generating the model's JSON schema.
 
Args:
    core_schema: A `pydantic-core` CoreSchema.
        You can ignore this argument and call the handler with a new CoreSchema,
        wrap this CoreSchema (`{'type': 'nullable', 'schema': current_schema}`),
        or just call the handler with the original schema.
    handler: Call into Pydantic's internal JSON schema generation.
        This will raise a `pydantic.errors.PydanticInvalidForJsonSchema` if JSON schema
        generation fails.
        Since this gets called by `BaseModel.model_json_schema` you can override the
        `schema_generator` argument to that function to change JSON schema generation globally
        for a type.
 
Returns:
    A JSON schema, as a Python object.
__pydantic_init_subclass__(**kwargs: 'Any') -> 'None' from pydantic._internal._model_construction.ModelMetaclass
This is intended to behave just like `__init_subclass__`, but is called by `ModelMetaclass`
only after basic class initialization is complete. In particular, attributes like `model_fields` will
be present when this is called, but forward annotations are not guaranteed to be resolved yet,
meaning that creating an instance of the class may fail.
 
This is necessary because `__init_subclass__` will always be called by `type.__new__`,
and it would require a prohibitively large refactor to the `ModelMetaclass` to ensure that
`type.__new__` was called in such a manner that the class would already be sufficiently initialized.
 
This will receive the same `kwargs` that would be passed to the standard `__init_subclass__`, namely,
any kwargs passed to the class definition that aren't used internally by Pydantic.
 
Args:
    **kwargs: Any keyword arguments passed to the class definition that aren't used internally
        by Pydantic.
 
Note:
    You may want to override [`__pydantic_on_complete__()`][pydantic.main.BaseModel.__pydantic_on_complete__]
    instead, which is called once the class and its fields are fully initialized and ready for validation.
__pydantic_on_complete__() -> 'None' from pydantic._internal._model_construction.ModelMetaclass
This is called once the class and its fields are fully initialized and ready to be used.
 
This typically happens when the class is created (just before
[`__pydantic_init_subclass__()`][pydantic.main.BaseModel.__pydantic_init_subclass__] is called on the superclass),
except when forward annotations are used that could not immediately be resolved.
In that case, it will be called later, when the model is rebuilt automatically or explicitly using
[`model_rebuild()`][pydantic.main.BaseModel.model_rebuild].
construct(_fields_set: 'set[str] | None' = None, **values: 'Any') -> 'Self' from pydantic._internal._model_construction.ModelMetaclass
from_orm(obj: 'Any') -> 'Self' from pydantic._internal._model_construction.ModelMetaclass
model_construct(_fields_set: 'set[str] | None' = None, **values: 'Any') -> 'Self' from pydantic._internal._model_construction.ModelMetaclass
Creates a new instance of the `Model` class with validated data.
 
Creates a new model setting `__dict__` and `__pydantic_fields_set__` from trusted or pre-validated data.
Default values are respected, but no other validation is performed.
 
!!! note
    `model_construct()` generally respects the `model_config.extra` setting on the provided model.
    That is, if `model_config.extra == 'allow'`, then all extra passed values are added to the model instance's `__dict__`
    and `__pydantic_extra__` fields. If `model_config.extra == 'ignore'` (the default), then all extra passed values are ignored.
    Because no validation is performed with a call to `model_construct()`, having `model_config.extra == 'forbid'` does not result in
    an error if extra values are passed, but they will be ignored.
 
Args:
    _fields_set: A set of field names that were originally explicitly set during instantiation. If provided,
        this is directly used for the [`model_fields_set`][pydantic.BaseModel.model_fields_set] attribute.
        Otherwise, the field names from the `values` argument will be used.
    values: Trusted or pre-validated data dictionary.
 
Returns:
    A new instance of the `Model` class with validated data.
model_json_schema(by_alias: 'bool' = True, ref_template: 'str' = '#/$defs/{model}', schema_generator: 'type[GenerateJsonSchema]' = <class 'pydantic.json_schema.GenerateJsonSchema'>, mode: 'JsonSchemaMode' = 'validation', *, union_format: "Literal['any_of', 'primitive_type_array']" = 'any_of') -> 'dict[str, Any]' from pydantic._internal._model_construction.ModelMetaclass
Generates a JSON schema for a model class.
 
Args:
    by_alias: Whether to use attribute aliases or not.
    ref_template: The reference template.
    union_format: The format to use when combining schemas from unions together. Can be one of:
 
        - `'any_of'`: Use the [`anyOf`](https://json-schema.org/understanding-json-schema/reference/combining#anyOf)
        keyword to combine schemas (the default).
        - `'primitive_type_array'`: Use the [`type`](https://json-schema.org/understanding-json-schema/reference/type)
        keyword as an array of strings, containing each type of the combination. If any of the schemas is not a primitive
        type (`string`, `boolean`, `null`, `integer` or `number`) or contains constraints/metadata, falls back to
        `any_of`.
    schema_generator: To override the logic used to generate the JSON schema, as a subclass of
        `GenerateJsonSchema` with your desired modifications
    mode: The mode in which to generate the schema.
 
Returns:
    The JSON schema for the given model class.
model_parametrized_name(params: 'tuple[type[Any], ...]') -> 'str' from pydantic._internal._model_construction.ModelMetaclass
Compute the class name for parametrizations of generic classes.
 
This method can be overridden to achieve a custom naming scheme for generic BaseModels.
 
Args:
    params: Tuple of types of the class. Given a generic class
        `Model` with 2 type variables and a concrete model `Model[str, int]`,
        the value `(str, int)` would be passed to `params`.
 
Returns:
    String representing the new class where `params` are passed to `cls` as type variables.
 
Raises:
    TypeError: Raised when trying to generate concrete names for non-generic models.
model_rebuild(*, force: 'bool' = False, raise_errors: 'bool' = True, _parent_namespace_depth: 'int' = 2, _types_namespace: 'MappingNamespace | None' = None) -> 'bool | None' from pydantic._internal._model_construction.ModelMetaclass
Try to rebuild the pydantic-core schema for the model.
 
This may be necessary when one of the annotations is a ForwardRef which could not be resolved during
the initial attempt to build the schema, and automatic rebuilding fails.
 
Args:
    force: Whether to force the rebuilding of the model schema, defaults to `False`.
    raise_errors: Whether to raise errors, defaults to `True`.
    _parent_namespace_depth: The depth level of the parent namespace, defaults to 2.
    _types_namespace: The types namespace, defaults to `None`.
 
Returns:
    Returns `None` if the schema is already "complete" and rebuilding was not required.
    If rebuilding _was_ required, returns `True` if rebuilding was successful, otherwise `False`.
model_validate(obj: 'Any', *, strict: 'bool | None' = None, extra: 'ExtraValues | None' = None, from_attributes: 'bool | None' = None, context: 'Any | None' = None, by_alias: 'bool | None' = None, by_name: 'bool | None' = None) -> 'Self' from pydantic._internal._model_construction.ModelMetaclass
Validate a pydantic model instance.
 
Args:
    obj: The object to validate.
    strict: Whether to enforce types strictly.
    extra: Whether to ignore, allow, or forbid extra data during model validation.
        See the [`extra` configuration value][pydantic.ConfigDict.extra] for details.
    from_attributes: Whether to extract data from object attributes.
    context: Additional context to pass to the validator.
    by_alias: Whether to use the field's alias when validating against the provided input data.
    by_name: Whether to use the field's name when validating against the provided input data.
 
Raises:
    ValidationError: If the object could not be validated.
 
Returns:
    The validated model instance.
model_validate_json(json_data: 'str | bytes | bytearray', *, strict: 'bool | None' = None, extra: 'ExtraValues | None' = None, context: 'Any | None' = None, by_alias: 'bool | None' = None, by_name: 'bool | None' = None) -> 'Self' from pydantic._internal._model_construction.ModelMetaclass
!!! abstract "Usage Documentation"
    [JSON Parsing](../concepts/json.md#json-parsing)
 
Validate the given JSON data against the Pydantic model.
 
Args:
    json_data: The JSON data to validate.
    strict: Whether to enforce types strictly.
    extra: Whether to ignore, allow, or forbid extra data during model validation.
        See the [`extra` configuration value][pydantic.ConfigDict.extra] for details.
    context: Extra variables to pass to the validator.
    by_alias: Whether to use the field's alias when validating against the provided input data.
    by_name: Whether to use the field's name when validating against the provided input data.
 
Returns:
    The validated Pydantic model.
 
Raises:
    ValidationError: If `json_data` is not a JSON string or the object could not be validated.
model_validate_strings(obj: 'Any', *, strict: 'bool | None' = None, extra: 'ExtraValues | None' = None, context: 'Any | None' = None, by_alias: 'bool | None' = None, by_name: 'bool | None' = None) -> 'Self' from pydantic._internal._model_construction.ModelMetaclass
Validate the given object with string data against the Pydantic model.
 
Args:
    obj: The object containing string data to validate.
    strict: Whether to enforce types strictly.
    extra: Whether to ignore, allow, or forbid extra data during model validation.
        See the [`extra` configuration value][pydantic.ConfigDict.extra] for details.
    context: Extra variables to pass to the validator.
    by_alias: Whether to use the field's alias when validating against the provided input data.
    by_name: Whether to use the field's name when validating against the provided input data.
 
Returns:
    The validated Pydantic model.
parse_file(path: 'str | Path', *, content_type: 'str | None' = None, encoding: 'str' = 'utf8', proto: 'DeprecatedParseProtocol | None' = None, allow_pickle: 'bool' = False) -> 'Self' from pydantic._internal._model_construction.ModelMetaclass
parse_obj(obj: 'Any') -> 'Self' from pydantic._internal._model_construction.ModelMetaclass
parse_raw(b: 'str | bytes', *, content_type: 'str | None' = None, encoding: 'str' = 'utf8', proto: 'DeprecatedParseProtocol | None' = None, allow_pickle: 'bool' = False) -> 'Self' from pydantic._internal._model_construction.ModelMetaclass
schema(by_alias: 'bool' = True, ref_template: 'str' = '#/$defs/{model}') -> 'Dict[str, Any]' from pydantic._internal._model_construction.ModelMetaclass
schema_json(*, by_alias: 'bool' = True, ref_template: 'str' = '#/$defs/{model}', **dumps_kwargs: 'Any') -> 'str' from pydantic._internal._model_construction.ModelMetaclass
update_forward_refs(**localns: 'Any') -> 'None' from pydantic._internal._model_construction.ModelMetaclass
validate(value: 'Any') -> 'Self' from pydantic._internal._model_construction.ModelMetaclass

Readonly properties inherited from pydantic.main.BaseModel:
__fields_set__
model_extra
Get extra fields set during validation.
 
Returns:
    A dictionary of extra fields, or `None` if `config.extra` is not set to `"allow"`.
model_fields_set
Returns the set of fields that have been explicitly set on this model instance.
 
Returns:
    A set of strings representing the fields that have been set,
        i.e. that were not filled from defaults.

Data descriptors inherited from pydantic.main.BaseModel:
__dict__
dictionary for instance variables (if defined)
__pydantic_extra__
__pydantic_fields_set__
__pydantic_private__

Data and other attributes inherited from pydantic.main.BaseModel:
__hash__ = None
__pydantic_root_model__ = False
model_computed_fields = {}
model_fields = {'async_client': FieldInfo(annotation=Any, required=False, default=None, exclude=True), 'cache': FieldInfo(annotation=Union[BaseCache, bool, NoneType], required=False, default=None, exclude=True), 'callbacks': FieldInfo(annotation=Union[list[BaseCallbackHand...ype], required=False, default=None, exclude=True), 'client': FieldInfo(annotation=Any, required=False, default=None, exclude=True), 'config_id': FieldInfo(annotation=Union[str, NoneType], required=False, default=None), 'config_name': FieldInfo(annotation=Union[str, NoneType], required=False, default=None), 'context_management': FieldInfo(annotation=Union[list[dict[str, Any]], NoneType], required=False, default=None), 'custom_get_token_ids': FieldInfo(annotation=Union[Callable[list, list[i...ype], required=False, default=None, exclude=True), 'default_headers': FieldInfo(annotation=Union[Mapping[str, str], NoneType], required=False, default=None), 'default_query': FieldInfo(annotation=Union[Mapping[str, object], NoneType], required=False, default=None), ...}

Methods inherited from langchain_core.runnables.base.Runnable:
__or__(self, other: 'Runnable[Any, Other] | Callable[[Iterator[Any]], Iterator[Other]] | Callable[[AsyncIterator[Any]], AsyncIterator[Other]] | Callable[[Any], Other] | Mapping[str, Runnable[Any, Other] | Callable[[Any], Other] | Any]') -> 'RunnableSerializable[Input, Other]'
Runnable "or" operator.
 
Compose this `Runnable` with another object to create a
`RunnableSequence`.
 
Args:
    other: Another `Runnable` or a `Runnable`-like object.
 
Returns:
    A new `Runnable`.
__ror__(self, other: 'Runnable[Other, Any] | Callable[[Iterator[Other]], Iterator[Any]] | Callable[[AsyncIterator[Other]], AsyncIterator[Any]] | Callable[[Other], Any] | Mapping[str, Runnable[Other, Any] | Callable[[Other], Any] | Any]') -> 'RunnableSerializable[Other, Output]'
Runnable "reverse-or" operator.
 
Compose this `Runnable` with another object to create a
`RunnableSequence`.
 
Args:
    other: Another `Runnable` or a `Runnable`-like object.
 
Returns:
    A new `Runnable`.
async abatch(self, inputs: 'list[Input]', config: 'RunnableConfig | list[RunnableConfig] | None' = None, *, return_exceptions: 'bool' = False, **kwargs: 'Any | None') -> 'list[Output]'
Default implementation runs `ainvoke` in parallel using `asyncio.gather`.
 
The default implementation of `batch` works well for IO bound runnables.
 
Subclasses must override this method if they can batch more efficiently;
e.g., if the underlying `Runnable` uses an API which supports a batch mode.
 
Args:
    inputs: A list of inputs to the `Runnable`.
    config: A config to use when invoking the `Runnable`.
 
        The config supports standard keys like `'tags'`, `'metadata'` for
        tracing purposes, `'max_concurrency'` for controlling how much work to
        do in parallel, and other keys.
 
        Please refer to `RunnableConfig` for more details.
    return_exceptions: Whether to return exceptions instead of raising them.
    **kwargs: Additional keyword arguments to pass to the `Runnable`.
 
Returns:
    A list of outputs from the `Runnable`.
async abatch_as_completed(self, inputs: 'Sequence[Input]', config: 'RunnableConfig | Sequence[RunnableConfig] | None' = None, *, return_exceptions: 'bool' = False, **kwargs: 'Any | None') -> 'AsyncIterator[tuple[int, Output | Exception]]'
Run `ainvoke` in parallel on a list of inputs.
 
Yields results as they complete.
 
Args:
    inputs: A list of inputs to the `Runnable`.
    config: A config to use when invoking the `Runnable`.
 
        The config supports standard keys like `'tags'`, `'metadata'` for
        tracing purposes, `'max_concurrency'` for controlling how much work to
        do in parallel, and other keys.
 
        Please refer to `RunnableConfig` for more details.
    return_exceptions: Whether to return exceptions instead of raising them.
    **kwargs: Additional keyword arguments to pass to the `Runnable`.
 
Yields:
    A tuple of the index of the input and the output from the `Runnable`.
as_tool(self, args_schema: 'type[BaseModel] | None' = None, *, name: 'str | None' = None, description: 'str | None' = None, arg_types: 'dict[str, type] | None' = None) -> 'BaseTool'
.. beta::
   This API is in beta and may change in the future.
 
Create a `BaseTool` from a `Runnable`.
 
`as_tool` will instantiate a `BaseTool` with a name, description, and
`args_schema` from a `Runnable`. Where possible, schemas are inferred
from `runnable.get_input_schema`.
 
Alternatively (e.g., if the `Runnable` takes a dict as input and the specific
`dict` keys are not typed), the schema can be specified directly with
`args_schema`.
 
You can also pass `arg_types` to just specify the required arguments and their
types.
 
Args:
    args_schema: The schema for the tool.
    name: The name of the tool.
    description: The description of the tool.
    arg_types: A dictionary of argument names to types.
 
Returns:
    A `BaseTool` instance.
 
!!! example "`TypedDict` input"
 
    ```python
    from typing_extensions import TypedDict
    from langchain_core.runnables import RunnableLambda
 
 
    class Args(TypedDict):
        a: int
        b: list[int]
 
 
    def f(x: Args) -> str:
        return str(x["a"] * max(x["b"]))
 
 
    runnable = RunnableLambda(f)
    as_tool = runnable.as_tool()
    as_tool.invoke({"a": 3, "b": [1, 2]})
    ```
 
!!! example "`dict` input, specifying schema via `args_schema`"
 
    ```python
    from typing import Any
    from pydantic import BaseModel, Field
    from langchain_core.runnables import RunnableLambda
 
    def f(x: dict[str, Any]) -> str:
        return str(x["a"] * max(x["b"]))
 
    class FSchema(BaseModel):
        """Apply a function to an integer and list of integers."""
 
        a: int = Field(..., description="Integer")
        b: list[int] = Field(..., description="List of ints")
 
    runnable = RunnableLambda(f)
    as_tool = runnable.as_tool(FSchema)
    as_tool.invoke({"a": 3, "b": [1, 2]})
    ```
 
!!! example "`dict` input, specifying schema via `arg_types`"
 
    ```python
    from typing import Any
    from langchain_core.runnables import RunnableLambda
 
 
    def f(x: dict[str, Any]) -> str:
        return str(x["a"] * max(x["b"]))
 
 
    runnable = RunnableLambda(f)
    as_tool = runnable.as_tool(arg_types={"a": int, "b": list[int]})
    as_tool.invoke({"a": 3, "b": [1, 2]})
    ```
 
!!! example "`str` input"
 
    ```python
    from langchain_core.runnables import RunnableLambda
 
 
    def f(x: str) -> str:
        return x + "a"
 
 
    def g(x: str) -> str:
        return x + "z"
 
 
    runnable = RunnableLambda(f) | g
    as_tool = runnable.as_tool()
    as_tool.invoke("b")
    ```
assign(self, **kwargs: 'Runnable[dict[str, Any], Any] | Callable[[dict[str, Any]], Any] | Mapping[str, Runnable[dict[str, Any], Any] | Callable[[dict[str, Any]], Any]]') -> 'RunnableSerializable[Any, Any]'
Assigns new fields to the `dict` output of this `Runnable`.
 
```python
from langchain_core.language_models.fake import FakeStreamingListLLM
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import SystemMessagePromptTemplate
from langchain_core.runnables import Runnable
from operator import itemgetter
 
prompt = (
    SystemMessagePromptTemplate.from_template("You are a nice assistant.")
    + "{question}"
)
model = FakeStreamingListLLM(responses=["foo-lish"])
 
chain: Runnable = prompt | model | {"str": StrOutputParser()}
 
chain_with_assign = chain.assign(hello=itemgetter("str") | model)
 
print(chain_with_assign.input_schema.model_json_schema())
# {'title': 'PromptInput', 'type': 'object', 'properties':
{'question': {'title': 'Question', 'type': 'string'}}}
print(chain_with_assign.output_schema.model_json_schema())
# {'title': 'RunnableSequenceOutput', 'type': 'object', 'properties':
{'str': {'title': 'Str',
'type': 'string'}, 'hello': {'title': 'Hello', 'type': 'string'}}}
```
 
Args:
    **kwargs: A mapping of keys to `Runnable` or `Runnable`-like objects
        that will be invoked with the entire output dict of this `Runnable`.
 
Returns:
    A new `Runnable`.
async astream_events(self, input: 'Any', config: 'RunnableConfig | None' = None, *, version: "Literal['v1', 'v2']" = 'v2', include_names: 'Sequence[str] | None' = None, include_types: 'Sequence[str] | None' = None, include_tags: 'Sequence[str] | None' = None, exclude_names: 'Sequence[str] | None' = None, exclude_types: 'Sequence[str] | None' = None, exclude_tags: 'Sequence[str] | None' = None, **kwargs: 'Any') -> 'AsyncIterator[StreamEvent]'
Generate a stream of events.
 
Use to create an iterator over `StreamEvent` that provide real-time information
about the progress of the `Runnable`, including `StreamEvent` from intermediate
results.
 
A `StreamEvent` is a dictionary with the following schema:
 
- `event`: Event names are of the format:
    `on_[runnable_type]_(start|stream|end)`.
- `name`: The name of the `Runnable` that generated the event.
- `run_id`: Randomly generated ID associated with the given execution of the
    `Runnable` that emitted the event. A child `Runnable` that gets invoked as
    part of the execution of a parent `Runnable` is assigned its own unique ID.
- `parent_ids`: The IDs of the parent runnables that generated the event. The
    root `Runnable` will have an empty list. The order of the parent IDs is from
    the root to the immediate parent. Only available for v2 version of the API.
    The v1 version of the API will return an empty list.
- `tags`: The tags of the `Runnable` that generated the event.
- `metadata`: The metadata of the `Runnable` that generated the event.
- `data`: The data associated with the event. The contents of this field
    depend on the type of event. See the table below for more details.
 
Below is a table that illustrates some events that might be emitted by various
chains. Metadata fields have been omitted from the table for brevity.
Chain definitions have been included after the table.
 
!!! note
    This reference table is for the v2 version of the schema.
 
| event                  | name                 | chunk                               | input                                             | output                                              |
| ---------------------- | -------------------- | ----------------------------------- | ------------------------------------------------- | --------------------------------------------------- |
| `on_chat_model_start`  | `'[model name]'`     |                                     | `{"messages": [[SystemMessage, HumanMessage]]}`   |                                                     |
| `on_chat_model_stream` | `'[model name]'`     | `AIMessageChunk(content="hello")`   |                                                   |                                                     |
| `on_chat_model_end`    | `'[model name]'`     |                                     | `{"messages": [[SystemMessage, HumanMessage]]}`   | `AIMessageChunk(content="hello world")`             |
| `on_llm_start`         | `'[model name]'`     |                                     | `{'input': 'hello'}`                              |                                                     |
| `on_llm_stream`        | `'[model name]'`     | `'Hello' `                          |                                                   |                                                     |
| `on_llm_end`           | `'[model name]'`     |                                     | `'Hello human!'`                                  |                                                     |
| `on_chain_start`       | `'format_docs'`      |                                     |                                                   |                                                     |
| `on_chain_stream`      | `'format_docs'`      | `'hello world!, goodbye world!'`    |                                                   |                                                     |
| `on_chain_end`         | `'format_docs'`      |                                     | `[Document(...)]`                                 | `'hello world!, goodbye world!'`                    |
| `on_tool_start`        | `'some_tool'`        |                                     | `{"x": 1, "y": "2"}`                              |                                                     |
| `on_tool_end`          | `'some_tool'`        |                                     |                                                   | `{"x": 1, "y": "2"}`                                |
| `on_retriever_start`   | `'[retriever name]'` |                                     | `{"query": "hello"}`                              |                                                     |
| `on_retriever_end`     | `'[retriever name]'` |                                     | `{"query": "hello"}`                              | `[Document(...), ..]`                               |
| `on_prompt_start`      | `'[template_name]'`  |                                     | `{"question": "hello"}`                           |                                                     |
| `on_prompt_end`        | `'[template_name]'`  |                                     | `{"question": "hello"}`                           | `ChatPromptValue(messages: [SystemMessage, ...])`   |
 
In addition to the standard events, users can also dispatch custom events (see example below).
 
Custom events will be only be surfaced with in the v2 version of the API!
 
A custom event has following format:
 
| Attribute   | Type   | Description                                                                                               |
| ----------- | ------ | --------------------------------------------------------------------------------------------------------- |
| `name`      | `str`  | A user defined name for the event.                                                                        |
| `data`      | `Any`  | The data associated with the event. This can be anything, though we suggest making it JSON serializable.  |
 
Here are declarations associated with the standard events shown above:
 
`format_docs`:
 
```python
def format_docs(docs: list[Document]) -> str:
    '''Format the docs.'''
    return ", ".join([doc.page_content for doc in docs])
 
 
format_docs = RunnableLambda(format_docs)
```
 
`some_tool`:
 
```python
@tool
def some_tool(x: int, y: str) -> dict:
    '''Some_tool.'''
    return {"x": x, "y": y}
```
 
`prompt`:
 
```python
template = ChatPromptTemplate.from_messages(
    [
        ("system", "You are Cat Agent 007"),
        ("human", "{question}"),
    ]
).with_config({"run_name": "my_template", "tags": ["my_template"]})
```
 
!!! example
 
    ```python
    from langchain_core.runnables import RunnableLambda
 
 
    async def reverse(s: str) -> str:
        return s[::-1]
 
 
    chain = RunnableLambda(func=reverse)
 
    events = [
        event async for event in chain.astream_events("hello", version="v2")
    ]
 
    # Will produce the following events
    # (run_id, and parent_ids has been omitted for brevity):
    [
        {
            "data": {"input": "hello"},
            "event": "on_chain_start",
            "metadata": {},
            "name": "reverse",
            "tags": [],
        },
        {
            "data": {"chunk": "olleh"},
            "event": "on_chain_stream",
            "metadata": {},
            "name": "reverse",
            "tags": [],
        },
        {
            "data": {"output": "olleh"},
            "event": "on_chain_end",
            "metadata": {},
            "name": "reverse",
            "tags": [],
        },
    ]
    ```
 
```python title="Dispatch custom event"
from langchain_core.callbacks.manager import (
    adispatch_custom_event,
)
from langchain_core.runnables import RunnableLambda, RunnableConfig
import asyncio
 
 
async def slow_thing(some_input: str, config: RunnableConfig) -> str:
    """Do something that takes a long time."""
    await asyncio.sleep(1) # Placeholder for some slow operation
    await adispatch_custom_event(
        "progress_event",
        {"message": "Finished step 1 of 3"},
        config=config # Must be included for python < 3.10
    )
    await asyncio.sleep(1) # Placeholder for some slow operation
    await adispatch_custom_event(
        "progress_event",
        {"message": "Finished step 2 of 3"},
        config=config # Must be included for python < 3.10
    )
    await asyncio.sleep(1) # Placeholder for some slow operation
    return "Done"
 
slow_thing = RunnableLambda(slow_thing)
 
async for event in slow_thing.astream_events("some_input", version="v2"):
    print(event)
```
 
Args:
    input: The input to the `Runnable`.
    config: The config to use for the `Runnable`.
    version: The version of the schema to use, either `'v2'` or `'v1'`.
 
        Users should use `'v2'`.
 
        `'v1'` is for backwards compatibility and will be deprecated
        in `0.4.0`.
 
        No default will be assigned until the API is stabilized.
        custom events will only be surfaced in `'v2'`.
    include_names: Only include events from `Runnable` objects with matching names.
    include_types: Only include events from `Runnable` objects with matching types.
    include_tags: Only include events from `Runnable` objects with matching tags.
    exclude_names: Exclude events from `Runnable` objects with matching names.
    exclude_types: Exclude events from `Runnable` objects with matching types.
    exclude_tags: Exclude events from `Runnable` objects with matching tags.
    **kwargs: Additional keyword arguments to pass to the `Runnable`.
 
        These will be passed to `astream_log` as this implementation
        of `astream_events` is built on top of `astream_log`.
 
Yields:
    An async stream of `StreamEvent`.
 
Raises:
    NotImplementedError: If the version is not `'v1'` or `'v2'`.
async astream_log(self, input: 'Any', config: 'RunnableConfig | None' = None, *, diff: 'bool' = True, with_streamed_output_list: 'bool' = True, include_names: 'Sequence[str] | None' = None, include_types: 'Sequence[str] | None' = None, include_tags: 'Sequence[str] | None' = None, exclude_names: 'Sequence[str] | None' = None, exclude_types: 'Sequence[str] | None' = None, exclude_tags: 'Sequence[str] | None' = None, **kwargs: 'Any') -> 'AsyncIterator[RunLogPatch] | AsyncIterator[RunLog]'
Stream all output from a `Runnable`, as reported to the callback system.
 
This includes all inner runs of LLMs, Retrievers, Tools, etc.
 
Output is streamed as Log objects, which include a list of
Jsonpatch ops that describe how the state of the run has changed in each
step, and the final state of the run.
 
The Jsonpatch ops can be applied in order to construct state.
 
Args:
    input: The input to the `Runnable`.
    config: The config to use for the `Runnable`.
    diff: Whether to yield diffs between each step or the current state.
    with_streamed_output_list: Whether to yield the `streamed_output` list.
    include_names: Only include logs with these names.
    include_types: Only include logs with these types.
    include_tags: Only include logs with these tags.
    exclude_names: Exclude logs with these names.
    exclude_types: Exclude logs with these types.
    exclude_tags: Exclude logs with these tags.
    **kwargs: Additional keyword arguments to pass to the `Runnable`.
 
Yields:
    A `RunLogPatch` or `RunLog` object.
async atransform(self, input: 'AsyncIterator[Input]', config: 'RunnableConfig | None' = None, **kwargs: 'Any | None') -> 'AsyncIterator[Output]'
Transform inputs to outputs.
 
Default implementation of atransform, which buffers input and calls `astream`.
 
Subclasses must override this method if they can start producing output while
input is still being generated.
 
Args:
    input: An async iterator of inputs to the `Runnable`.
    config: The config to use for the `Runnable`.
    **kwargs: Additional keyword arguments to pass to the `Runnable`.
 
Yields:
    The output of the `Runnable`.
batch(self, inputs: 'list[Input]', config: 'RunnableConfig | list[RunnableConfig] | None' = None, *, return_exceptions: 'bool' = False, **kwargs: 'Any | None') -> 'list[Output]'
Default implementation runs invoke in parallel using a thread pool executor.
 
The default implementation of batch works well for IO bound runnables.
 
Subclasses must override this method if they can batch more efficiently;
e.g., if the underlying `Runnable` uses an API which supports a batch mode.
 
Args:
    inputs: A list of inputs to the `Runnable`.
    config: A config to use when invoking the `Runnable`. The config supports
        standard keys like `'tags'`, `'metadata'` for
        tracing purposes, `'max_concurrency'` for controlling how much work
        to do in parallel, and other keys.
 
        Please refer to `RunnableConfig` for more details.
    return_exceptions: Whether to return exceptions instead of raising them.
    **kwargs: Additional keyword arguments to pass to the `Runnable`.
 
Returns:
    A list of outputs from the `Runnable`.
batch_as_completed(self, inputs: 'Sequence[Input]', config: 'RunnableConfig | Sequence[RunnableConfig] | None' = None, *, return_exceptions: 'bool' = False, **kwargs: 'Any | None') -> 'Iterator[tuple[int, Output | Exception]]'
Run `invoke` in parallel on a list of inputs.
 
Yields results as they complete.
 
Args:
    inputs: A list of inputs to the `Runnable`.
    config: A config to use when invoking the `Runnable`.
 
        The config supports standard keys like `'tags'`, `'metadata'` for
        tracing purposes, `'max_concurrency'` for controlling how much work to
        do in parallel, and other keys.
 
        Please refer to `RunnableConfig` for more details.
    return_exceptions: Whether to return exceptions instead of raising them.
    **kwargs: Additional keyword arguments to pass to the `Runnable`.
 
Yields:
    Tuples of the index of the input and the output from the `Runnable`.
bind(self, **kwargs: 'Any') -> 'Runnable[Input, Output]'
Bind arguments to a `Runnable`, returning a new `Runnable`.
 
Useful when a `Runnable` in a chain requires an argument that is not
in the output of the previous `Runnable` or included in the user input.
 
Args:
    **kwargs: The arguments to bind to the `Runnable`.
 
Returns:
    A new `Runnable` with the arguments bound.
 
Example:
    ```python
    from langchain_ollama import ChatOllama
    from langchain_core.output_parsers import StrOutputParser
 
    model = ChatOllama(model="llama3.1")
 
    # Without bind
    chain = model | StrOutputParser()
 
    chain.invoke("Repeat quoted words exactly: 'One two three four five.'")
    # Output is 'One two three four five.'
 
    # With bind
    chain = model.bind(stop=["three"]) | StrOutputParser()
 
    chain.invoke("Repeat quoted words exactly: 'One two three four five.'")
    # Output is 'One two'
    ```
config_schema(self, *, include: 'Sequence[str] | None' = None) -> 'type[BaseModel]'
The type of config this `Runnable` accepts specified as a Pydantic model.
 
To mark a field as configurable, see the `configurable_fields`
and `configurable_alternatives` methods.
 
Args:
    include: A list of fields to include in the config schema.
 
Returns:
    A Pydantic model that can be used to validate config.
get_config_jsonschema(self, *, include: 'Sequence[str] | None' = None) -> 'dict[str, Any]'
Get a JSON schema that represents the config of the `Runnable`.
 
Args:
    include: A list of fields to include in the config schema.
 
Returns:
    A JSON schema that represents the config of the `Runnable`.
 
!!! version-added "Added in `langchain-core` 0.3.0"
get_graph(self, config: 'RunnableConfig | None' = None) -> 'Graph'
Return a graph representation of this `Runnable`.
get_input_jsonschema(self, config: 'RunnableConfig | None' = None) -> 'dict[str, Any]'
Get a JSON schema that represents the input to the `Runnable`.
 
Args:
    config: A config to use when generating the schema.
 
Returns:
    A JSON schema that represents the input to the `Runnable`.
 
Example:
    ```python
    from langchain_core.runnables import RunnableLambda
 
 
    def add_one(x: int) -> int:
        return x + 1
 
 
    runnable = RunnableLambda(add_one)
 
    print(runnable.get_input_jsonschema())
    ```
 
!!! version-added "Added in `langchain-core` 0.3.0"
get_input_schema(self, config: 'RunnableConfig | None' = None) -> 'type[BaseModel]'
Get a Pydantic model that can be used to validate input to the `Runnable`.
 
`Runnable` objects that leverage the `configurable_fields` and
`configurable_alternatives` methods will have a dynamic input schema that
depends on which configuration the `Runnable` is invoked with.
 
This method allows to get an input schema for a specific configuration.
 
Args:
    config: A config to use when generating the schema.
 
Returns:
    A Pydantic model that can be used to validate input.
get_name(self, suffix: 'str | None' = None, *, name: 'str | None' = None) -> 'str'
Get the name of the `Runnable`.
 
Args:
    suffix: An optional suffix to append to the name.
    name: An optional name to use instead of the `Runnable`'s name.
 
Returns:
    The name of the `Runnable`.
get_output_jsonschema(self, config: 'RunnableConfig | None' = None) -> 'dict[str, Any]'
Get a JSON schema that represents the output of the `Runnable`.
 
Args:
    config: A config to use when generating the schema.
 
Returns:
    A JSON schema that represents the output of the `Runnable`.
 
Example:
    ```python
    from langchain_core.runnables import RunnableLambda
 
 
    def add_one(x: int) -> int:
        return x + 1
 
 
    runnable = RunnableLambda(add_one)
 
    print(runnable.get_output_jsonschema())
    ```
 
!!! version-added "Added in `langchain-core` 0.3.0"
get_output_schema(self, config: 'RunnableConfig | None' = None) -> 'type[BaseModel]'
Get a Pydantic model that can be used to validate output to the `Runnable`.
 
`Runnable` objects that leverage the `configurable_fields` and
`configurable_alternatives` methods will have a dynamic output schema that
depends on which configuration the `Runnable` is invoked with.
 
This method allows to get an output schema for a specific configuration.
 
Args:
    config: A config to use when generating the schema.
 
Returns:
    A Pydantic model that can be used to validate output.
get_prompts(self, config: 'RunnableConfig | None' = None) -> 'list[BasePromptTemplate]'
Return a list of prompts used by this `Runnable`.
map(self) -> 'Runnable[list[Input], list[Output]]'
Return a new `Runnable` that maps a list of inputs to a list of outputs.
 
Calls `invoke` with each input.
 
Returns:
    A new `Runnable` that maps a list of inputs to a list of outputs.
 
Example:
    ```python
    from langchain_core.runnables import RunnableLambda
 
 
    def _lambda(x: int) -> int:
        return x + 1
 
 
    runnable = RunnableLambda(_lambda)
    print(runnable.map().invoke([1, 2, 3]))  # [2, 3, 4]
    ```
pick(self, keys: 'str | list[str]') -> 'RunnableSerializable[Any, Any]'
Pick keys from the output `dict` of this `Runnable`.
 
!!! example "Pick a single key"
 
    ```python
    import json
 
    from langchain_core.runnables import RunnableLambda, RunnableMap
 
    as_str = RunnableLambda(str)
    as_json = RunnableLambda(json.loads)
    chain = RunnableMap(str=as_str, json=as_json)
 
    chain.invoke("[1, 2, 3]")
    # -> {"str": "[1, 2, 3]", "json": [1, 2, 3]}
 
    json_only_chain = chain.pick("json")
    json_only_chain.invoke("[1, 2, 3]")
    # -> [1, 2, 3]
    ```
 
!!! example "Pick a list of keys"
 
    ```python
    from typing import Any
 
    import json
 
    from langchain_core.runnables import RunnableLambda, RunnableMap
 
    as_str = RunnableLambda(str)
    as_json = RunnableLambda(json.loads)
 
 
    def as_bytes(x: Any) -> bytes:
        return bytes(x, "utf-8")
 
 
    chain = RunnableMap(
        str=as_str, json=as_json, bytes=RunnableLambda(as_bytes)
    )
 
    chain.invoke("[1, 2, 3]")
    # -> {"str": "[1, 2, 3]", "json": [1, 2, 3], "bytes": b"[1, 2, 3]"}
 
    json_and_bytes_chain = chain.pick(["json", "bytes"])
    json_and_bytes_chain.invoke("[1, 2, 3]")
    # -> {"json": [1, 2, 3], "bytes": b"[1, 2, 3]"}
    ```
 
Args:
    keys: A key or list of keys to pick from the output dict.
 
Returns:
    a new `Runnable`.
pipe(self, *others: 'Runnable[Any, Other] | Callable[[Any], Other]', name: 'str | None' = None) -> 'RunnableSerializable[Input, Other]'
Pipe `Runnable` objects.
 
Compose this `Runnable` with `Runnable`-like objects to make a
`RunnableSequence`.
 
Equivalent to `RunnableSequence(self, *others)` or `self | others[0] | ...`
 
Example:
    ```python
    from langchain_core.runnables import RunnableLambda
 
 
    def add_one(x: int) -> int:
        return x + 1
 
 
    def mul_two(x: int) -> int:
        return x * 2
 
 
    runnable_1 = RunnableLambda(add_one)
    runnable_2 = RunnableLambda(mul_two)
    sequence = runnable_1.pipe(runnable_2)
    # Or equivalently:
    # sequence = runnable_1 | runnable_2
    # sequence = RunnableSequence(first=runnable_1, last=runnable_2)
    sequence.invoke(1)
    await sequence.ainvoke(1)
    # -> 4
 
    sequence.batch([1, 2, 3])
    await sequence.abatch([1, 2, 3])
    # -> [4, 6, 8]
    ```
 
Args:
    *others: Other `Runnable` or `Runnable`-like objects to compose
    name: An optional name for the resulting `RunnableSequence`.
 
Returns:
    A new `Runnable`.
transform(self, input: 'Iterator[Input]', config: 'RunnableConfig | None' = None, **kwargs: 'Any | None') -> 'Iterator[Output]'
Transform inputs to outputs.
 
Default implementation of transform, which buffers input and calls `astream`.
 
Subclasses must override this method if they can start producing output while
input is still being generated.
 
Args:
    input: An iterator of inputs to the `Runnable`.
    config: The config to use for the `Runnable`.
    **kwargs: Additional keyword arguments to pass to the `Runnable`.
 
Yields:
    The output of the `Runnable`.
with_alisteners(self, *, on_start: 'AsyncListener | None' = None, on_end: 'AsyncListener | None' = None, on_error: 'AsyncListener | None' = None) -> 'Runnable[Input, Output]'
Bind async lifecycle listeners to a `Runnable`.
 
Returns a new `Runnable`.
 
The Run object contains information about the run, including its `id`,
`type`, `input`, `output`, `error`, `start_time`, `end_time`, and
any tags or metadata added to the run.
 
Args:
    on_start: Called asynchronously before the `Runnable` starts running,
        with the `Run` object.
    on_end: Called asynchronously after the `Runnable` finishes running,
        with the `Run` object.
    on_error: Called asynchronously if the `Runnable` throws an error,
        with the `Run` object.
 
Returns:
    A new `Runnable` with the listeners bound.
 
Example:
    ```python
    from langchain_core.runnables import RunnableLambda, Runnable
    from datetime import datetime, timezone
    import time
    import asyncio
 
 
    def format_t(timestamp: float) -> str:
        return datetime.fromtimestamp(timestamp, tz=timezone.utc).isoformat()
 
 
    async def test_runnable(time_to_sleep: int):
        print(f"Runnable[{time_to_sleep}s]: starts at {format_t(time.time())}")
        await asyncio.sleep(time_to_sleep)
        print(f"Runnable[{time_to_sleep}s]: ends at {format_t(time.time())}")
 
 
    async def fn_start(run_obj: Runnable):
        print(f"on start callback starts at {format_t(time.time())}")
        await asyncio.sleep(3)
        print(f"on start callback ends at {format_t(time.time())}")
 
 
    async def fn_end(run_obj: Runnable):
        print(f"on end callback starts at {format_t(time.time())}")
        await asyncio.sleep(2)
        print(f"on end callback ends at {format_t(time.time())}")
 
 
    runnable = RunnableLambda(test_runnable).with_alisteners(
        on_start=fn_start, on_end=fn_end
    )
 
 
    async def concurrent_runs():
        await asyncio.gather(runnable.ainvoke(2), runnable.ainvoke(3))
 
 
    asyncio.run(concurrent_runs())
    # Result:
    # on start callback starts at 2025-03-01T07:05:22.875378+00:00
    # on start callback starts at 2025-03-01T07:05:22.875495+00:00
    # on start callback ends at 2025-03-01T07:05:25.878862+00:00
    # on start callback ends at 2025-03-01T07:05:25.878947+00:00
    # Runnable[2s]: starts at 2025-03-01T07:05:25.879392+00:00
    # Runnable[3s]: starts at 2025-03-01T07:05:25.879804+00:00
    # Runnable[2s]: ends at 2025-03-01T07:05:27.881998+00:00
    # on end callback starts at 2025-03-01T07:05:27.882360+00:00
    # Runnable[3s]: ends at 2025-03-01T07:05:28.881737+00:00
    # on end callback starts at 2025-03-01T07:05:28.882428+00:00
    # on end callback ends at 2025-03-01T07:05:29.883893+00:00
    # on end callback ends at 2025-03-01T07:05:30.884831+00:00
    ```
with_config(self, config: 'RunnableConfig | None' = None, **kwargs: 'Any') -> 'Runnable[Input, Output]'
Bind config to a `Runnable`, returning a new `Runnable`.
 
Args:
    config: The config to bind to the `Runnable`.
    **kwargs: Additional keyword arguments to pass to the `Runnable`.
 
Returns:
    A new `Runnable` with the config bound.
with_fallbacks(self, fallbacks: 'Sequence[Runnable[Input, Output]]', *, exceptions_to_handle: 'tuple[type[BaseException], ...]' = (<class 'Exception'>,), exception_key: 'str | None' = None) -> 'RunnableWithFallbacksT[Input, Output]'
Add fallbacks to a `Runnable`, returning a new `Runnable`.
 
The new `Runnable` will try the original `Runnable`, and then each fallback
in order, upon failures.
 
Args:
    fallbacks: A sequence of runnables to try if the original `Runnable`
        fails.
    exceptions_to_handle: A tuple of exception types to handle.
    exception_key: If `string` is specified then handled exceptions will be
        passed to fallbacks as part of the input under the specified key.
 
        If `None`, exceptions will not be passed to fallbacks.
 
        If used, the base `Runnable` and its fallbacks must accept a
        dictionary as input.
 
Returns:
    A new `Runnable` that will try the original `Runnable`, and then each
        Fallback in order, upon failures.
 
Example:
    ```python
    from typing import Iterator
 
    from langchain_core.runnables import RunnableGenerator
 
 
    def _generate_immediate_error(input: Iterator) -> Iterator[str]:
        raise ValueError()
        yield ""
 
 
    def _generate(input: Iterator) -> Iterator[str]:
        yield from "foo bar"
 
 
    runnable = RunnableGenerator(_generate_immediate_error).with_fallbacks(
        [RunnableGenerator(_generate)]
    )
    print("".join(runnable.stream({})))  # foo bar
    ```
 
Args:
    fallbacks: A sequence of runnables to try if the original `Runnable`
        fails.
    exceptions_to_handle: A tuple of exception types to handle.
    exception_key: If `string` is specified then handled exceptions will be
        passed to fallbacks as part of the input under the specified key.
 
        If `None`, exceptions will not be passed to fallbacks.
 
        If used, the base `Runnable` and its fallbacks must accept a
        dictionary as input.
 
Returns:
    A new `Runnable` that will try the original `Runnable`, and then each
        Fallback in order, upon failures.
with_listeners(self, *, on_start: 'Callable[[Run], None] | Callable[[Run, RunnableConfig], None] | None' = None, on_end: 'Callable[[Run], None] | Callable[[Run, RunnableConfig], None] | None' = None, on_error: 'Callable[[Run], None] | Callable[[Run, RunnableConfig], None] | None' = None) -> 'Runnable[Input, Output]'
Bind lifecycle listeners to a `Runnable`, returning a new `Runnable`.
 
The Run object contains information about the run, including its `id`,
`type`, `input`, `output`, `error`, `start_time`, `end_time`, and
any tags or metadata added to the run.
 
Args:
    on_start: Called before the `Runnable` starts running, with the `Run`
        object.
    on_end: Called after the `Runnable` finishes running, with the `Run`
        object.
    on_error: Called if the `Runnable` throws an error, with the `Run`
        object.
 
Returns:
    A new `Runnable` with the listeners bound.
 
Example:
    ```python
    from langchain_core.runnables import RunnableLambda
    from langchain_core.tracers.schemas import Run
 
    import time
 
 
    def test_runnable(time_to_sleep: int):
        time.sleep(time_to_sleep)
 
 
    def fn_start(run_obj: Run):
        print("start_time:", run_obj.start_time)
 
 
    def fn_end(run_obj: Run):
        print("end_time:", run_obj.end_time)
 
 
    chain = RunnableLambda(test_runnable).with_listeners(
        on_start=fn_start, on_end=fn_end
    )
    chain.invoke(2)
    ```
with_retry(self, *, retry_if_exception_type: 'tuple[type[BaseException], ...]' = (<class 'Exception'>,), wait_exponential_jitter: 'bool' = True, exponential_jitter_params: 'ExponentialJitterParams | None' = None, stop_after_attempt: 'int' = 3) -> 'Runnable[Input, Output]'
Create a new `Runnable` that retries the original `Runnable` on exceptions.
 
Args:
    retry_if_exception_type: A tuple of exception types to retry on.
    wait_exponential_jitter: Whether to add jitter to the wait
        time between retries.
    stop_after_attempt: The maximum number of attempts to make before
        giving up.
    exponential_jitter_params: Parameters for
        `tenacity.wait_exponential_jitter`. Namely: `initial`, `max`,
        `exp_base`, and `jitter` (all `float` values).
 
Returns:
    A new `Runnable` that retries the original `Runnable` on exceptions.
 
Example:
    ```python
    from langchain_core.runnables import RunnableLambda
 
    count = 0
 
 
    def _lambda(x: int) -> None:
        global count
        count = count + 1
        if x == 1:
            raise ValueError("x is 1")
        else:
            pass
 
 
    runnable = RunnableLambda(_lambda)
    try:
        runnable.with_retry(
            stop_after_attempt=2,
            retry_if_exception_type=(ValueError,),
        ).invoke(1)
    except ValueError:
        pass
 
    assert count == 2
    ```
with_types(self, *, input_type: 'type[Input] | None' = None, output_type: 'type[Output] | None' = None) -> 'Runnable[Input, Output]'
Bind input and output types to a `Runnable`, returning a new `Runnable`.
 
Args:
    input_type: The input type to bind to the `Runnable`.
    output_type: The output type to bind to the `Runnable`.
 
Returns:
    A new `Runnable` with the types bound.

Readonly properties inherited from langchain_core.runnables.base.Runnable:
config_specs
List configurable fields for this `Runnable`.
input_schema
The type of input this `Runnable` accepts specified as a Pydantic model.
output_schema
Output schema.
 
The type of output this `Runnable` produces specified as a Pydantic model.

Class methods inherited from typing.Generic:
__init_subclass__(*args, **kwargs) from pydantic._internal._model_construction.ModelMetaclass
This method is called when a class is subclassed.
 
The default implementation does nothing. It may be
overridden to extend subclasses.

 
class OpenAI(ProxyOpenAI, langchain_openai.llms.base.OpenAI)
    OpenAI(*args, name: str | None = None, cache: langchain_core.caches.BaseCache | bool | None = None, verbose: bool = &lt;factory&gt;, callbacks: list[langchain_core.callbacks.base.BaseCallbackHandler] | langchain_core.callbacks.base.BaseCallbackManager | None = None, tags: list[str] | None = None, metadata: dict[str, typing.Any] | None = None, custom_get_token_ids: collections.abc.Callable[[str], list[int]] | None = None, client: Any = None, async_client: Any = None, model_name: Optional[str] = None, temperature: float = 0.7, max_tokens: int = 256, top_p: float = 1, frequency_penalty: float = 0, presence_penalty: float = 0, n: int = 1, best_of: int = 1, model_kwargs: dict[str, typing.Any] = &lt;factory&gt;, api_key: pydantic.types.SecretStr | None | collections.abc.Callable[[], str] = &lt;factory&gt;, base_url: str | None = &lt;factory&gt;, organization: str | None = &lt;factory&gt;, openai_proxy: str | None = &lt;factory&gt;, batch_size: int = 20, timeout: Union[float, tuple[float, float], Any, NoneType] = None, logit_bias: dict[str, float] | None = None, max_retries: int = 2, seed: int | None = None, logprobs: int | None = None, streaming: bool = False, allowed_special: Union[Literal['all'], set[str]] = set(), disallowed_special: Union[Literal['all'], collections.abc.Collection[str]] = 'all', tiktoken_model_name: str | None = None, default_headers: collections.abc.Mapping[str, str] | None = None, default_query: collections.abc.Mapping[str, object] | None = None, http_client: Optional[Any] = None, http_async_client: Optional[Any] = None, extra_body: collections.abc.Mapping[str, typing.Any] | None = None, proxy_client: Optional[Any] = None, deployment_id: Optional[str] = None, config_name: Optional[str] = None, config_id: Optional[str] = None, proxy_model_name: Optional[str] = None, api_version: Optional[str] = None, **kwargs) -&gt; None
 
OpenAI model using a proxy.
 
 
Method resolution order:
OpenAI
ProxyOpenAI
gen_ai_hub.proxy.langchain.base.BaseAuth
langchain_openai.llms.base.OpenAI
langchain_openai.llms.base.BaseOpenAI
langchain_core.language_models.llms.BaseLLM
langchain_core.language_models.base.BaseLanguageModel[str]
langchain_core.language_models.base.BaseLanguageModel
langchain_core.runnables.base.RunnableSerializable[Union[PromptValue, str, Sequence[Union[BaseMessage, list[str], tuple[str, str], str, dict[str, Any]]]], ~LanguageModelOutputVar]
langchain_core.runnables.base.RunnableSerializable
langchain_core.load.serializable.Serializable
pydantic.main.BaseModel
langchain_core.runnables.base.Runnable
abc.ABC
typing.Generic
builtins.object

Methods defined here:
__init__(self, *args, **kwargs)
Initialize the OpenAI object.

Class methods defined here:
validate_environment(values: Dict) -> Dict from pydantic._internal._model_construction.ModelMetaclass
Validates the environment.
 
:param values: The input values
:type values: Dict
:return: The validated values
:rtype: Dict

Static methods defined here:
__new__(cls, **data: Any)
Initialize the OpenAI object.

Data and other attributes defined here:
__abstractmethods__ = frozenset()
__annotations__ = {'model_name': typing.Optional[str], 'openai_api_version': typing.Optional[str]}
__class_vars__ = set()
__parameters__ = ()
__private_attributes__ = {}
__pydantic_complete__ = True
__pydantic_computed_fields__ = {}
__pydantic_core_schema__ = {'cls': <class 'gen_ai_hub.proxy.langchain.openai.OpenAI'>, 'config': {'extra_fields_behavior': 'allow', 'title': 'OpenAI', 'validate_by_alias': True, 'validate_by_name': True}, 'custom_init': True, 'metadata': {'pydantic_js_functions': [<bound method BaseModel.__get_pydantic_json_sche...lass 'gen_ai_hub.proxy.langchain.openai.OpenAI'>>]}, 'ref': 'gen_ai_hub.proxy.langchain.openai.OpenAI:139913210011584', 'root_model': False, 'schema': {'function': {'function': <bound method OpenAI.validate_environment of <class 'gen_ai_hub.proxy.langchain.openai.OpenAI'>>, 'type': 'no-info'}, 'schema': {'function': {'function': <bound method BaseOpenAI.build_extra of <class 'gen_ai_hub.proxy.langchain.openai.OpenAI'>>, 'type': 'no-info'}, 'schema': {'computed_fields': [], 'fields': {'allowed_special': {'metadata': {}, 'schema': {...}, 'type': 'model-field'}, 'async_client': {'metadata': {}, 'schema': {...}, 'serialization_exclude': True, 'type': 'model-field'}, 'batch_size': {'metadata': {}, 'schema': {...}, 'type': 'model-field'}, 'best_of': {'metadata': {}, 'schema': {...}, 'type': 'model-field'}, 'cache': {'metadata': {}, 'schema': {...}, 'serialization_exclude': True, 'type': 'model-field'}, 'callbacks': {'metadata': {}, 'schema': {...}, 'serialization_exclude': True, 'type': 'model-field'}, 'client': {'metadata': {}, 'schema': {...}, 'serialization_exclude': True, 'type': 'model-field'}, 'config_id': {'metadata': {}, 'schema': {...}, 'type': 'model-field'}, 'config_name': {'metadata': {}, 'schema': {...}, 'type': 'model-field'}, 'custom_get_token_ids': {'metadata': {}, 'schema': {...}, 'serialization_exclude': True, 'type': 'model-field'}, ...}, 'model_name': 'OpenAI', 'type': 'model-fields'}, 'type': 'function-before'}, 'type': 'function-before'}, 'type': 'model'}
__pydantic_custom_init__ = True
__pydantic_decorators__ = DecoratorInfos(validators={}, field_validators={...coratorInfo(mode='before'))}, computed_fields={})
__pydantic_fields__ = {'allowed_special': FieldInfo(annotation=Union[Literal['all'], set[str]], required=False, default=set()), 'async_client': FieldInfo(annotation=Any, required=False, default=None, exclude=True), 'batch_size': FieldInfo(annotation=int, required=False, default=20), 'best_of': FieldInfo(annotation=int, required=False, default=1), 'cache': FieldInfo(annotation=Union[BaseCache, bool, NoneType], required=False, default=None, exclude=True), 'callbacks': FieldInfo(annotation=Union[list[BaseCallbackHand...ype], required=False, default=None, exclude=True), 'client': FieldInfo(annotation=Any, required=False, default=None, exclude=True), 'config_id': FieldInfo(annotation=Union[str, NoneType], required=False, default=None), 'config_name': FieldInfo(annotation=Union[str, NoneType], required=False, default=None), 'custom_get_token_ids': FieldInfo(annotation=Union[Callable[list, list[i...ype], required=False, default=None, exclude=True), ...}
__pydantic_generic_metadata__ = {'args': (), 'origin': None, 'parameters': ()}
__pydantic_parent_namespace__ = None
__pydantic_post_init__ = None
__pydantic_serializer__ = SchemaSerializer(serializer=Model( ModelSeri... name: "OpenAI", }, ), definitions=[])
__pydantic_setattr_handlers__ = {}
__pydantic_validator__ = SchemaValidator(title="OpenAI", validator=Model(...I", }, ), definitions=[], cache_strings=True)
__signature__ = <Signature (*args, name: str | None = None, cach...version: Optional[str] = None, **kwargs) -> None>
model_config = {'arbitrary_types_allowed': True, 'extra': 'allow', 'populate_by_name': True, 'protected_namespaces': (), 'validate_by_alias': True, 'validate_by_name': True}

Class methods inherited from ProxyOpenAI:
validate_clients(values: Dict) -> Dict from pydantic._internal._model_construction.ModelMetaclass
Validate and initialize OpenAI clients.
 
:param values: The input values
:type values: Dict
:return: The validated values
:rtype: Dict

Data descriptors inherited from gen_ai_hub.proxy.langchain.base.BaseAuth:
__weakref__
list of weak references to the object (if defined)

Class methods inherited from langchain_openai.llms.base.OpenAI:
get_lc_namespace() -> 'list[str]' from pydantic._internal._model_construction.ModelMetaclass
Get the namespace of the LangChain object.
 
Returns:
    `["langchain", "llms", "openai"]`
is_lc_serializable() -> 'bool' from pydantic._internal._model_construction.ModelMetaclass
Return whether this model can be serialized by LangChain.

Readonly properties inherited from langchain_openai.llms.base.OpenAI:
lc_attributes
LangChain attributes for this class.
lc_secrets
Mapping of secret keys to environment variables.

Methods inherited from langchain_openai.llms.base.BaseOpenAI:
create_llm_result(self, choices: 'Any', prompts: 'list[str]', params: 'dict[str, Any]', token_usage: 'dict[str, int]', *, system_fingerprint: 'str | None' = None) -> 'LLMResult'
Create the LLMResult from the choices and prompts.
get_sub_prompts(self, params: 'dict[str, Any]', prompts: 'list[str]', stop: 'list[str] | None' = None) -> 'list[list[str]]'
Get the sub prompts for llm call.
get_token_ids(self, text: 'str') -> 'list[int]'
Get the token IDs using the tiktoken package.
max_tokens_for_prompt(self, prompt: 'str') -> 'int'
Calculate the maximum number of tokens possible to generate for a prompt.
 
Args:
    prompt: The prompt to pass into the model.
 
Returns:
    The maximum number of tokens to generate for a prompt.
 
Example:
    ```python
    max_tokens = openai.max_tokens_for_prompt("Tell me a joke.")
    ```

Class methods inherited from langchain_openai.llms.base.BaseOpenAI:
build_extra(values: 'dict[str, Any]') -> 'Any' from pydantic._internal._model_construction.ModelMetaclass
Build extra kwargs from additional params that were passed in.

Static methods inherited from langchain_openai.llms.base.BaseOpenAI:
modelname_to_contextsize(modelname: 'str') -> 'int'
Calculate the maximum number of tokens possible to generate for a model.
 
Args:
    modelname: The modelname we want to know the context size for.
 
Returns:
    The maximum context size
 
Example:
    ```python
    max_tokens = openai.modelname_to_contextsize("gpt-3.5-turbo-instruct")
    ```

Readonly properties inherited from langchain_openai.llms.base.BaseOpenAI:
max_context_size
Get max context size for this model.

Methods inherited from langchain_core.language_models.llms.BaseLLM:
__str__(self) -> 'str'
Return a string representation of the object for printing.
async abatch(self, inputs: 'list[LanguageModelInput]', config: 'RunnableConfig | list[RunnableConfig] | None' = None, *, return_exceptions: 'bool' = False, **kwargs: 'Any') -> 'list[str]'
Default implementation runs `ainvoke` in parallel using `asyncio.gather`.
 
The default implementation of `batch` works well for IO bound runnables.
 
Subclasses must override this method if they can batch more efficiently;
e.g., if the underlying `Runnable` uses an API which supports a batch mode.
 
Args:
    inputs: A list of inputs to the `Runnable`.
    config: A config to use when invoking the `Runnable`.
 
        The config supports standard keys like `'tags'`, `'metadata'` for
        tracing purposes, `'max_concurrency'` for controlling how much work to
        do in parallel, and other keys.
 
        Please refer to `RunnableConfig` for more details.
    return_exceptions: Whether to return exceptions instead of raising them.
    **kwargs: Additional keyword arguments to pass to the `Runnable`.
 
Returns:
    A list of outputs from the `Runnable`.
async agenerate(self, prompts: 'list[str]', stop: 'list[str] | None' = None, callbacks: 'Callbacks | list[Callbacks] | None' = None, *, tags: 'list[str] | list[list[str]] | None' = None, metadata: 'dict[str, Any] | list[dict[str, Any]] | None' = None, run_name: 'str | list[str] | None' = None, run_id: 'uuid.UUID | list[uuid.UUID | None] | None' = None, **kwargs: 'Any') -> 'LLMResult'
Asynchronously pass a sequence of prompts to a model and return generations.
 
This method should make use of batched calls for models that expose a batched
API.
 
Use this method when you want to:
 
1. Take advantage of batched calls,
2. Need more output from the model than just the top generated value,
3. Are building chains that are agnostic to the underlying language model
    type (e.g., pure text completion models vs chat models).
 
Args:
    prompts: List of string prompts.
    stop: Stop words to use when generating.
 
        Model output is cut off at the first occurrence of any of these
        substrings.
    callbacks: `Callbacks` to pass through.
 
        Used for executing additional functionality, such as logging or
        streaming, throughout generation.
    tags: List of tags to associate with each prompt. If provided, the length
        of the list must match the length of the prompts list.
    metadata: List of metadata dictionaries to associate with each prompt. If
        provided, the length of the list must match the length of the prompts
        list.
    run_name: List of run names to associate with each prompt. If provided, the
        length of the list must match the length of the prompts list.
    run_id: List of run IDs to associate with each prompt. If provided, the
        length of the list must match the length of the prompts list.
    **kwargs: Arbitrary additional keyword arguments.
 
        These are usually passed to the model provider API call.
 
Raises:
    ValueError: If the length of `callbacks`, `tags`, `metadata`, or
        `run_name` (if provided) does not match the length of prompts.
 
Returns:
    An `LLMResult`, which contains a list of candidate `Generations` for each
        input prompt and additional model provider-specific output.
async agenerate_prompt(self, prompts: 'list[PromptValue]', stop: 'list[str] | None' = None, callbacks: 'Callbacks | list[Callbacks] | None' = None, **kwargs: 'Any') -> 'LLMResult'
Asynchronously pass a sequence of prompts and return model generations.
 
This method should make use of batched calls for models that expose a batched
API.
 
Use this method when you want to:
 
1. Take advantage of batched calls,
2. Need more output from the model than just the top generated value,
3. Are building chains that are agnostic to the underlying language model
    type (e.g., pure text completion models vs chat models).
 
Args:
    prompts: List of `PromptValue` objects.
 
        A `PromptValue` is an object that can be converted to match the format
        of any language model (string for pure text generation models and
        `BaseMessage` objects for chat models).
    stop: Stop words to use when generating.
 
        Model output is cut off at the first occurrence of any of these
        substrings.
    callbacks: `Callbacks` to pass through.
 
        Used for executing additional functionality, such as logging or
        streaming, throughout generation.
    **kwargs: Arbitrary additional keyword arguments.
 
        These are usually passed to the model provider API call.
 
Returns:
    An `LLMResult`, which contains a list of candidate `Generation` objects for
        each input prompt and additional model provider-specific output.
async ainvoke(self, input: 'LanguageModelInput', config: 'RunnableConfig | None' = None, *, stop: 'list[str] | None' = None, **kwargs: 'Any') -> 'str'
Transform a single input into an output.
 
Args:
    input: The input to the `Runnable`.
    config: A config to use when invoking the `Runnable`.
 
        The config supports standard keys like `'tags'`, `'metadata'` for
        tracing purposes, `'max_concurrency'` for controlling how much work to
        do in parallel, and other keys.
 
        Please refer to `RunnableConfig` for more details.
 
Returns:
    The output of the `Runnable`.
async astream(self, input: 'LanguageModelInput', config: 'RunnableConfig | None' = None, *, stop: 'list[str] | None' = None, **kwargs: 'Any') -> 'AsyncIterator[str]'
Default implementation of `astream`, which calls `ainvoke`.
 
Subclasses must override this method if they support streaming output.
 
Args:
    input: The input to the `Runnable`.
    config: The config to use for the `Runnable`.
    **kwargs: Additional keyword arguments to pass to the `Runnable`.
 
Yields:
    The output of the `Runnable`.
batch(self, inputs: 'list[LanguageModelInput]', config: 'RunnableConfig | list[RunnableConfig] | None' = None, *, return_exceptions: 'bool' = False, **kwargs: 'Any') -> 'list[str]'
Default implementation runs invoke in parallel using a thread pool executor.
 
The default implementation of batch works well for IO bound runnables.
 
Subclasses must override this method if they can batch more efficiently;
e.g., if the underlying `Runnable` uses an API which supports a batch mode.
 
Args:
    inputs: A list of inputs to the `Runnable`.
    config: A config to use when invoking the `Runnable`. The config supports
        standard keys like `'tags'`, `'metadata'` for
        tracing purposes, `'max_concurrency'` for controlling how much work
        to do in parallel, and other keys.
 
        Please refer to `RunnableConfig` for more details.
    return_exceptions: Whether to return exceptions instead of raising them.
    **kwargs: Additional keyword arguments to pass to the `Runnable`.
 
Returns:
    A list of outputs from the `Runnable`.
dict(self, **kwargs: 'Any') -> 'dict'
Return a dictionary of the LLM.
generate(self, prompts: 'list[str]', stop: 'list[str] | None' = None, callbacks: 'Callbacks | list[Callbacks] | None' = None, *, tags: 'list[str] | list[list[str]] | None' = None, metadata: 'dict[str, Any] | list[dict[str, Any]] | None' = None, run_name: 'str | list[str] | None' = None, run_id: 'uuid.UUID | list[uuid.UUID | None] | None' = None, **kwargs: 'Any') -> 'LLMResult'
Pass a sequence of prompts to a model and return generations.
 
This method should make use of batched calls for models that expose a batched
API.
 
Use this method when you want to:
 
1. Take advantage of batched calls,
2. Need more output from the model than just the top generated value,
3. Are building chains that are agnostic to the underlying language model
    type (e.g., pure text completion models vs chat models).
 
Args:
    prompts: List of string prompts.
    stop: Stop words to use when generating.
 
        Model output is cut off at the first occurrence of any of these
        substrings.
    callbacks: `Callbacks` to pass through.
 
        Used for executing additional functionality, such as logging or
        streaming, throughout generation.
    tags: List of tags to associate with each prompt. If provided, the length
        of the list must match the length of the prompts list.
    metadata: List of metadata dictionaries to associate with each prompt. If
        provided, the length of the list must match the length of the prompts
        list.
    run_name: List of run names to associate with each prompt. If provided, the
        length of the list must match the length of the prompts list.
    run_id: List of run IDs to associate with each prompt. If provided, the
        length of the list must match the length of the prompts list.
    **kwargs: Arbitrary additional keyword arguments.
 
        These are usually passed to the model provider API call.
 
Raises:
    ValueError: If prompts is not a list.
    ValueError: If the length of `callbacks`, `tags`, `metadata`, or
        `run_name` (if provided) does not match the length of prompts.
 
Returns:
    An `LLMResult`, which contains a list of candidate `Generations` for each
        input prompt and additional model provider-specific output.
generate_prompt(self, prompts: 'list[PromptValue]', stop: 'list[str] | None' = None, callbacks: 'Callbacks | list[Callbacks] | None' = None, **kwargs: 'Any') -> 'LLMResult'
Pass a sequence of prompts to the model and return model generations.
 
This method should make use of batched calls for models that expose a batched
API.
 
Use this method when you want to:
 
1. Take advantage of batched calls,
2. Need more output from the model than just the top generated value,
3. Are building chains that are agnostic to the underlying language model
    type (e.g., pure text completion models vs chat models).
 
Args:
    prompts: List of `PromptValue` objects.
 
        A `PromptValue` is an object that can be converted to match the format
        of any language model (string for pure text generation models and
        `BaseMessage` objects for chat models).
    stop: Stop words to use when generating.
 
        Model output is cut off at the first occurrence of any of these
        substrings.
    callbacks: `Callbacks` to pass through.
 
        Used for executing additional functionality, such as logging or
        streaming, throughout generation.
    **kwargs: Arbitrary additional keyword arguments.
 
        These are usually passed to the model provider API call.
 
Returns:
    An `LLMResult`, which contains a list of candidate `Generation` objects for
        each input prompt and additional model provider-specific output.
invoke(self, input: 'LanguageModelInput', config: 'RunnableConfig | None' = None, *, stop: 'list[str] | None' = None, **kwargs: 'Any') -> 'str'
Transform a single input into an output.
 
Args:
    input: The input to the `Runnable`.
    config: A config to use when invoking the `Runnable`.
 
        The config supports standard keys like `'tags'`, `'metadata'` for
        tracing purposes, `'max_concurrency'` for controlling how much work to
        do in parallel, and other keys.
 
        Please refer to `RunnableConfig` for more details.
 
Returns:
    The output of the `Runnable`.
save(self, file_path: 'Path | str') -> 'None'
Save the LLM.
 
Args:
    file_path: Path to file to save the LLM to.
 
Raises:
    ValueError: If the file path is not a string or Path object.
 
Example:
    ```python
    llm.save(file_path="path/llm.yaml")
    ```
stream(self, input: 'LanguageModelInput', config: 'RunnableConfig | None' = None, *, stop: 'list[str] | None' = None, **kwargs: 'Any') -> 'Iterator[str]'
Default implementation of `stream`, which calls `invoke`.
 
Subclasses must override this method if they support streaming output.
 
Args:
    input: The input to the `Runnable`.
    config: The config to use for the `Runnable`.
    **kwargs: Additional keyword arguments to pass to the `Runnable`.
 
Yields:
    The output of the `Runnable`.

Readonly properties inherited from langchain_core.language_models.llms.BaseLLM:
OutputType
Get the output type for this `Runnable`.

Methods inherited from langchain_core.language_models.base.BaseLanguageModel:
get_num_tokens(self, text: 'str') -> 'int'
Get the number of tokens present in the text.
 
Useful for checking if an input fits in a model's context window.
 
This should be overridden by model-specific implementations to provide accurate
token counts via model-specific tokenizers.
 
Args:
    text: The string input to tokenize.
 
Returns:
    The integer number of tokens in the text.
get_num_tokens_from_messages(self, messages: 'list[BaseMessage]', tools: 'Sequence | None' = None) -> 'int'
Get the number of tokens in the messages.
 
Useful for checking if an input fits in a model's context window.
 
This should be overridden by model-specific implementations to provide accurate
token counts via model-specific tokenizers.
 
!!! note
 
    * The base implementation of `get_num_tokens_from_messages` ignores tool
        schemas.
    * The base implementation of `get_num_tokens_from_messages` adds additional
        prefixes to messages in represent user roles, which will add to the
        overall token count. Model-specific implementations may choose to
        handle this differently.
 
Args:
    messages: The message inputs to tokenize.
    tools: If provided, sequence of dict, `BaseModel`, function, or
        `BaseTool` objects to be converted to tool schemas.
 
Returns:
    The sum of the number of tokens across the messages.
with_structured_output(self, schema: 'dict | type', **kwargs: 'Any') -> 'Runnable[LanguageModelInput, dict | BaseModel]'
Not implemented on this class.

Class methods inherited from langchain_core.language_models.base.BaseLanguageModel:
set_verbose(verbose: 'bool | None') -> 'bool' from pydantic._internal._model_construction.ModelMetaclass
If verbose is `None`, set it.
 
This allows users to pass in `None` as verbose to access the global setting.
 
Args:
    verbose: The verbosity setting to use.
 
Returns:
    The verbosity setting to use.

Readonly properties inherited from langchain_core.language_models.base.BaseLanguageModel:
InputType
Get the input type for this `Runnable`.

Methods inherited from langchain_core.runnables.base.RunnableSerializable:
configurable_alternatives(self, which: 'ConfigurableField', *, default_key: 'str' = 'default', prefix_keys: 'bool' = False, **kwargs: 'Runnable[Input, Output] | Callable[[], Runnable[Input, Output]]') -> 'RunnableSerializable[Input, Output]'
Configure alternatives for `Runnable` objects that can be set at runtime.
 
Args:
    which: The `ConfigurableField` instance that will be used to select the
        alternative.
    default_key: The default key to use if no alternative is selected.
    prefix_keys: Whether to prefix the keys with the `ConfigurableField` id.
    **kwargs: A dictionary of keys to `Runnable` instances or callables that
        return `Runnable` instances.
 
Returns:
    A new `Runnable` with the alternatives configured.
 
!!! example
 
    ```python
    from langchain_anthropic import ChatAnthropic
    from langchain_core.runnables.utils import ConfigurableField
    from langchain_openai import ChatOpenAI
 
    model = ChatAnthropic(
        model_name="claude-sonnet-4-5-20250929"
    ).configurable_alternatives(
        ConfigurableField(id="llm"),
        default_key="anthropic",
        openai=ChatOpenAI(),
    )
 
    # uses the default model ChatAnthropic
    print(model.invoke("which organization created you?").content)
 
    # uses ChatOpenAI
    print(
        model.with_config(configurable={"llm": "openai"})
        .invoke("which organization created you?")
        .content
    )
    ```
configurable_fields(self, **kwargs: 'AnyConfigurableField') -> 'RunnableSerializable[Input, Output]'
Configure particular `Runnable` fields at runtime.
 
Args:
    **kwargs: A dictionary of `ConfigurableField` instances to configure.
 
Raises:
    ValueError: If a configuration key is not found in the `Runnable`.
 
Returns:
    A new `Runnable` with the fields configured.
 
!!! example
 
    ```python
    from langchain_core.runnables import ConfigurableField
    from langchain_openai import ChatOpenAI
 
    model = ChatOpenAI(max_tokens=20).configurable_fields(
        max_tokens=ConfigurableField(
            id="output_token_number",
            name="Max tokens in the output",
            description="The maximum number of tokens in the output",
        )
    )
 
    # max_tokens = 20
    print(
        "max_tokens_20: ", model.invoke("tell me something about chess").content
    )
 
    # max_tokens = 200
    print(
        "max_tokens_200: ",
        model.with_config(configurable={"output_token_number": 200})
        .invoke("tell me something about chess")
        .content,
    )
    ```
to_json(self) -> 'SerializedConstructor | SerializedNotImplemented'
Serialize the `Runnable` to JSON.
 
Returns:
    A JSON-serializable representation of the `Runnable`.

Data and other attributes inherited from langchain_core.runnables.base.RunnableSerializable:
__orig_bases__ = (<class 'langchain_core.load.serializable.Serializable'>, langchain_core.runnables.base.Runnable[-Input, +Output])

Methods inherited from langchain_core.load.serializable.Serializable:
__repr_args__(self) -> Any
to_json_not_implemented(self) -> langchain_core.load.serializable.SerializedNotImplemented
Serialize a "not implemented" object.
 
Returns:
    `SerializedNotImplemented`.

Class methods inherited from langchain_core.load.serializable.Serializable:
lc_id() -> list[str] from pydantic._internal._model_construction.ModelMetaclass
Return a unique identifier for this class for serialization purposes.
 
The unique identifier is a list of strings that describes the path
to the object.
 
For example, for the class `langchain.llms.openai.OpenAI`, the id is
`["langchain", "llms", "openai", "OpenAI"]`.

Methods inherited from pydantic.main.BaseModel:
__copy__(self) -> 'Self'
Returns a shallow copy of the model.
__deepcopy__(self, memo: 'dict[int, Any] | None' = None) -> 'Self'
Returns a deep copy of the model.
__delattr__(self, item: 'str') -> 'Any'
Implement delattr(self, name).
__eq__(self, other: 'Any') -> 'bool'
Return self==value.
__getattr__(self, item: 'str') -> 'Any'
__getstate__(self) -> 'dict[Any, Any]'
__iter__(self) -> 'TupleGenerator'
So `dict(model)` works.
__pretty__(self, fmt: 'Callable[[Any], Any]', **kwargs: 'Any') -> 'Generator[Any]'
Used by devtools (https://python-devtools.helpmanual.io/) to pretty print objects.
__replace__(self, **changes: 'Any') -> 'Self'
# Because we make use of `@dataclass_transform()`, `__replace__` is already synthesized by
# type checkers, so we define the implementation in this `if not TYPE_CHECKING:` block:
__repr__(self) -> 'str'
Return repr(self).
__repr_name__(self) -> 'str'
Name of the instance's class, used in __repr__.
__repr_recursion__(self, object: 'Any') -> 'str'
Returns the string representation of a recursive object.
__repr_str__(self, join_str: 'str') -> 'str'
__rich_repr__(self) -> 'RichReprResult'
Used by Rich (https://rich.readthedocs.io/en/stable/pretty.html) to pretty print objects.
__setattr__(self, name: 'str', value: 'Any') -> 'None'
Implement setattr(self, name, value).
__setstate__(self, state: 'dict[Any, Any]') -> 'None'
copy(self, *, include: 'AbstractSetIntStr | MappingIntStrAny | None' = None, exclude: 'AbstractSetIntStr | MappingIntStrAny | None' = None, update: 'Dict[str, Any] | None' = None, deep: 'bool' = False) -> 'Self'
Returns a copy of the model.
 
!!! warning "Deprecated"
    This method is now deprecated; use `model_copy` instead.
 
If you need `include` or `exclude`, use:
 
```python {test="skip" lint="skip"}
data = self.model_dump(include=include, exclude=exclude, round_trip=True)
data = {**data, **(update or {})}
copied = self.model_validate(data)
```
 
Args:
    include: Optional set or mapping specifying which fields to include in the copied model.
    exclude: Optional set or mapping specifying which fields to exclude in the copied model.
    update: Optional dictionary of field-value pairs to override field values in the copied model.
    deep: If True, the values of fields that are Pydantic models will be deep-copied.
 
Returns:
    A copy of the model with included, excluded and updated fields as specified.
json(self, *, include: 'IncEx | None' = None, exclude: 'IncEx | None' = None, by_alias: 'bool' = False, exclude_unset: 'bool' = False, exclude_defaults: 'bool' = False, exclude_none: 'bool' = False, encoder: 'Callable[[Any], Any] | None' = PydanticUndefined, models_as_dict: 'bool' = PydanticUndefined, **dumps_kwargs: 'Any') -> 'str'
model_copy(self, *, update: 'Mapping[str, Any] | None' = None, deep: 'bool' = False) -> 'Self'
!!! abstract "Usage Documentation"
    [`model_copy`](../concepts/models.md#model-copy)
 
Returns a copy of the model.
 
!!! note
    The underlying instance's [`__dict__`][object.__dict__] attribute is copied. This
    might have unexpected side effects if you store anything in it, on top of the model
    fields (e.g. the value of [cached properties][functools.cached_property]).
 
Args:
    update: Values to change/add in the new model. Note: the data is not validated
        before creating the new model. You should trust this data.
    deep: Set to `True` to make a deep copy of the model.
 
Returns:
    New model instance.
model_dump(self, *, mode: "Literal['json', 'python'] | str" = 'python', include: 'IncEx | None' = None, exclude: 'IncEx | None' = None, context: 'Any | None' = None, by_alias: 'bool | None' = None, exclude_unset: 'bool' = False, exclude_defaults: 'bool' = False, exclude_none: 'bool' = False, exclude_computed_fields: 'bool' = False, round_trip: 'bool' = False, warnings: "bool | Literal['none', 'warn', 'error']" = True, fallback: 'Callable[[Any], Any] | None' = None, serialize_as_any: 'bool' = False) -> 'dict[str, Any]'
!!! abstract "Usage Documentation"
    [`model_dump`](../concepts/serialization.md#python-mode)
 
Generate a dictionary representation of the model, optionally specifying which fields to include or exclude.
 
Args:
    mode: The mode in which `to_python` should run.
        If mode is 'json', the output will only contain JSON serializable types.
        If mode is 'python', the output may contain non-JSON-serializable Python objects.
    include: A set of fields to include in the output.
    exclude: A set of fields to exclude from the output.
    context: Additional context to pass to the serializer.
    by_alias: Whether to use the field's alias in the dictionary key if defined.
    exclude_unset: Whether to exclude fields that have not been explicitly set.
    exclude_defaults: Whether to exclude fields that are set to their default value.
    exclude_none: Whether to exclude fields that have a value of `None`.
    exclude_computed_fields: Whether to exclude computed fields.
        While this can be useful for round-tripping, it is usually recommended to use the dedicated
        `round_trip` parameter instead.
    round_trip: If True, dumped values should be valid as input for non-idempotent types such as Json[T].
    warnings: How to handle serialization errors. False/"none" ignores them, True/"warn" logs errors,
        "error" raises a [`PydanticSerializationError`][pydantic_core.PydanticSerializationError].
    fallback: A function to call when an unknown value is encountered. If not provided,
        a [`PydanticSerializationError`][pydantic_core.PydanticSerializationError] error is raised.
    serialize_as_any: Whether to serialize fields with duck-typing serialization behavior.
 
Returns:
    A dictionary representation of the model.
model_dump_json(self, *, indent: 'int | None' = None, ensure_ascii: 'bool' = False, include: 'IncEx | None' = None, exclude: 'IncEx | None' = None, context: 'Any | None' = None, by_alias: 'bool | None' = None, exclude_unset: 'bool' = False, exclude_defaults: 'bool' = False, exclude_none: 'bool' = False, exclude_computed_fields: 'bool' = False, round_trip: 'bool' = False, warnings: "bool | Literal['none', 'warn', 'error']" = True, fallback: 'Callable[[Any], Any] | None' = None, serialize_as_any: 'bool' = False) -> 'str'
!!! abstract "Usage Documentation"
    [`model_dump_json`](../concepts/serialization.md#json-mode)
 
Generates a JSON representation of the model using Pydantic's `to_json` method.
 
Args:
    indent: Indentation to use in the JSON output. If None is passed, the output will be compact.
    ensure_ascii: If `True`, the output is guaranteed to have all incoming non-ASCII characters escaped.
        If `False` (the default), these characters will be output as-is.
    include: Field(s) to include in the JSON output.
    exclude: Field(s) to exclude from the JSON output.
    context: Additional context to pass to the serializer.
    by_alias: Whether to serialize using field aliases.
    exclude_unset: Whether to exclude fields that have not been explicitly set.
    exclude_defaults: Whether to exclude fields that are set to their default value.
    exclude_none: Whether to exclude fields that have a value of `None`.
    exclude_computed_fields: Whether to exclude computed fields.
        While this can be useful for round-tripping, it is usually recommended to use the dedicated
        `round_trip` parameter instead.
    round_trip: If True, dumped values should be valid as input for non-idempotent types such as Json[T].
    warnings: How to handle serialization errors. False/"none" ignores them, True/"warn" logs errors,
        "error" raises a [`PydanticSerializationError`][pydantic_core.PydanticSerializationError].
    fallback: A function to call when an unknown value is encountered. If not provided,
        a [`PydanticSerializationError`][pydantic_core.PydanticSerializationError] error is raised.
    serialize_as_any: Whether to serialize fields with duck-typing serialization behavior.
 
Returns:
    A JSON string representation of the model.
model_post_init(self, context: 'Any', /) -> 'None'
Override this method to perform additional initialization after `__init__` and `model_construct`.
This is useful if you want to do some validation that requires the entire model to be initialized.

Class methods inherited from pydantic.main.BaseModel:
__class_getitem__(typevar_values: 'type[Any] | tuple[type[Any], ...]') -> 'type[BaseModel] | _forward_ref.PydanticRecursiveRef' from pydantic._internal._model_construction.ModelMetaclass
__get_pydantic_core_schema__(source: 'type[BaseModel]', handler: 'GetCoreSchemaHandler', /) -> 'CoreSchema' from pydantic._internal._model_construction.ModelMetaclass
__get_pydantic_json_schema__(core_schema: 'CoreSchema', handler: 'GetJsonSchemaHandler', /) -> 'JsonSchemaValue' from pydantic._internal._model_construction.ModelMetaclass
Hook into generating the model's JSON schema.
 
Args:
    core_schema: A `pydantic-core` CoreSchema.
        You can ignore this argument and call the handler with a new CoreSchema,
        wrap this CoreSchema (`{'type': 'nullable', 'schema': current_schema}`),
        or just call the handler with the original schema.
    handler: Call into Pydantic's internal JSON schema generation.
        This will raise a `pydantic.errors.PydanticInvalidForJsonSchema` if JSON schema
        generation fails.
        Since this gets called by `BaseModel.model_json_schema` you can override the
        `schema_generator` argument to that function to change JSON schema generation globally
        for a type.
 
Returns:
    A JSON schema, as a Python object.
__pydantic_init_subclass__(**kwargs: 'Any') -> 'None' from pydantic._internal._model_construction.ModelMetaclass
This is intended to behave just like `__init_subclass__`, but is called by `ModelMetaclass`
only after basic class initialization is complete. In particular, attributes like `model_fields` will
be present when this is called, but forward annotations are not guaranteed to be resolved yet,
meaning that creating an instance of the class may fail.
 
This is necessary because `__init_subclass__` will always be called by `type.__new__`,
and it would require a prohibitively large refactor to the `ModelMetaclass` to ensure that
`type.__new__` was called in such a manner that the class would already be sufficiently initialized.
 
This will receive the same `kwargs` that would be passed to the standard `__init_subclass__`, namely,
any kwargs passed to the class definition that aren't used internally by Pydantic.
 
Args:
    **kwargs: Any keyword arguments passed to the class definition that aren't used internally
        by Pydantic.
 
Note:
    You may want to override [`__pydantic_on_complete__()`][pydantic.main.BaseModel.__pydantic_on_complete__]
    instead, which is called once the class and its fields are fully initialized and ready for validation.
__pydantic_on_complete__() -> 'None' from pydantic._internal._model_construction.ModelMetaclass
This is called once the class and its fields are fully initialized and ready to be used.
 
This typically happens when the class is created (just before
[`__pydantic_init_subclass__()`][pydantic.main.BaseModel.__pydantic_init_subclass__] is called on the superclass),
except when forward annotations are used that could not immediately be resolved.
In that case, it will be called later, when the model is rebuilt automatically or explicitly using
[`model_rebuild()`][pydantic.main.BaseModel.model_rebuild].
construct(_fields_set: 'set[str] | None' = None, **values: 'Any') -> 'Self' from pydantic._internal._model_construction.ModelMetaclass
from_orm(obj: 'Any') -> 'Self' from pydantic._internal._model_construction.ModelMetaclass
model_construct(_fields_set: 'set[str] | None' = None, **values: 'Any') -> 'Self' from pydantic._internal._model_construction.ModelMetaclass
Creates a new instance of the `Model` class with validated data.
 
Creates a new model setting `__dict__` and `__pydantic_fields_set__` from trusted or pre-validated data.
Default values are respected, but no other validation is performed.
 
!!! note
    `model_construct()` generally respects the `model_config.extra` setting on the provided model.
    That is, if `model_config.extra == 'allow'`, then all extra passed values are added to the model instance's `__dict__`
    and `__pydantic_extra__` fields. If `model_config.extra == 'ignore'` (the default), then all extra passed values are ignored.
    Because no validation is performed with a call to `model_construct()`, having `model_config.extra == 'forbid'` does not result in
    an error if extra values are passed, but they will be ignored.
 
Args:
    _fields_set: A set of field names that were originally explicitly set during instantiation. If provided,
        this is directly used for the [`model_fields_set`][pydantic.BaseModel.model_fields_set] attribute.
        Otherwise, the field names from the `values` argument will be used.
    values: Trusted or pre-validated data dictionary.
 
Returns:
    A new instance of the `Model` class with validated data.
model_json_schema(by_alias: 'bool' = True, ref_template: 'str' = '#/$defs/{model}', schema_generator: 'type[GenerateJsonSchema]' = <class 'pydantic.json_schema.GenerateJsonSchema'>, mode: 'JsonSchemaMode' = 'validation', *, union_format: "Literal['any_of', 'primitive_type_array']" = 'any_of') -> 'dict[str, Any]' from pydantic._internal._model_construction.ModelMetaclass
Generates a JSON schema for a model class.
 
Args:
    by_alias: Whether to use attribute aliases or not.
    ref_template: The reference template.
    union_format: The format to use when combining schemas from unions together. Can be one of:
 
        - `'any_of'`: Use the [`anyOf`](https://json-schema.org/understanding-json-schema/reference/combining#anyOf)
        keyword to combine schemas (the default).
        - `'primitive_type_array'`: Use the [`type`](https://json-schema.org/understanding-json-schema/reference/type)
        keyword as an array of strings, containing each type of the combination. If any of the schemas is not a primitive
        type (`string`, `boolean`, `null`, `integer` or `number`) or contains constraints/metadata, falls back to
        `any_of`.
    schema_generator: To override the logic used to generate the JSON schema, as a subclass of
        `GenerateJsonSchema` with your desired modifications
    mode: The mode in which to generate the schema.
 
Returns:
    The JSON schema for the given model class.
model_parametrized_name(params: 'tuple[type[Any], ...]') -> 'str' from pydantic._internal._model_construction.ModelMetaclass
Compute the class name for parametrizations of generic classes.
 
This method can be overridden to achieve a custom naming scheme for generic BaseModels.
 
Args:
    params: Tuple of types of the class. Given a generic class
        `Model` with 2 type variables and a concrete model `Model[str, int]`,
        the value `(str, int)` would be passed to `params`.
 
Returns:
    String representing the new class where `params` are passed to `cls` as type variables.
 
Raises:
    TypeError: Raised when trying to generate concrete names for non-generic models.
model_rebuild(*, force: 'bool' = False, raise_errors: 'bool' = True, _parent_namespace_depth: 'int' = 2, _types_namespace: 'MappingNamespace | None' = None) -> 'bool | None' from pydantic._internal._model_construction.ModelMetaclass
Try to rebuild the pydantic-core schema for the model.
 
This may be necessary when one of the annotations is a ForwardRef which could not be resolved during
the initial attempt to build the schema, and automatic rebuilding fails.
 
Args:
    force: Whether to force the rebuilding of the model schema, defaults to `False`.
    raise_errors: Whether to raise errors, defaults to `True`.
    _parent_namespace_depth: The depth level of the parent namespace, defaults to 2.
    _types_namespace: The types namespace, defaults to `None`.
 
Returns:
    Returns `None` if the schema is already "complete" and rebuilding was not required.
    If rebuilding _was_ required, returns `True` if rebuilding was successful, otherwise `False`.
model_validate(obj: 'Any', *, strict: 'bool | None' = None, extra: 'ExtraValues | None' = None, from_attributes: 'bool | None' = None, context: 'Any | None' = None, by_alias: 'bool | None' = None, by_name: 'bool | None' = None) -> 'Self' from pydantic._internal._model_construction.ModelMetaclass
Validate a pydantic model instance.
 
Args:
    obj: The object to validate.
    strict: Whether to enforce types strictly.
    extra: Whether to ignore, allow, or forbid extra data during model validation.
        See the [`extra` configuration value][pydantic.ConfigDict.extra] for details.
    from_attributes: Whether to extract data from object attributes.
    context: Additional context to pass to the validator.
    by_alias: Whether to use the field's alias when validating against the provided input data.
    by_name: Whether to use the field's name when validating against the provided input data.
 
Raises:
    ValidationError: If the object could not be validated.
 
Returns:
    The validated model instance.
model_validate_json(json_data: 'str | bytes | bytearray', *, strict: 'bool | None' = None, extra: 'ExtraValues | None' = None, context: 'Any | None' = None, by_alias: 'bool | None' = None, by_name: 'bool | None' = None) -> 'Self' from pydantic._internal._model_construction.ModelMetaclass
!!! abstract "Usage Documentation"
    [JSON Parsing](../concepts/json.md#json-parsing)
 
Validate the given JSON data against the Pydantic model.
 
Args:
    json_data: The JSON data to validate.
    strict: Whether to enforce types strictly.
    extra: Whether to ignore, allow, or forbid extra data during model validation.
        See the [`extra` configuration value][pydantic.ConfigDict.extra] for details.
    context: Extra variables to pass to the validator.
    by_alias: Whether to use the field's alias when validating against the provided input data.
    by_name: Whether to use the field's name when validating against the provided input data.
 
Returns:
    The validated Pydantic model.
 
Raises:
    ValidationError: If `json_data` is not a JSON string or the object could not be validated.
model_validate_strings(obj: 'Any', *, strict: 'bool | None' = None, extra: 'ExtraValues | None' = None, context: 'Any | None' = None, by_alias: 'bool | None' = None, by_name: 'bool | None' = None) -> 'Self' from pydantic._internal._model_construction.ModelMetaclass
Validate the given object with string data against the Pydantic model.
 
Args:
    obj: The object containing string data to validate.
    strict: Whether to enforce types strictly.
    extra: Whether to ignore, allow, or forbid extra data during model validation.
        See the [`extra` configuration value][pydantic.ConfigDict.extra] for details.
    context: Extra variables to pass to the validator.
    by_alias: Whether to use the field's alias when validating against the provided input data.
    by_name: Whether to use the field's name when validating against the provided input data.
 
Returns:
    The validated Pydantic model.
parse_file(path: 'str | Path', *, content_type: 'str | None' = None, encoding: 'str' = 'utf8', proto: 'DeprecatedParseProtocol | None' = None, allow_pickle: 'bool' = False) -> 'Self' from pydantic._internal._model_construction.ModelMetaclass
parse_obj(obj: 'Any') -> 'Self' from pydantic._internal._model_construction.ModelMetaclass
parse_raw(b: 'str | bytes', *, content_type: 'str | None' = None, encoding: 'str' = 'utf8', proto: 'DeprecatedParseProtocol | None' = None, allow_pickle: 'bool' = False) -> 'Self' from pydantic._internal._model_construction.ModelMetaclass
schema(by_alias: 'bool' = True, ref_template: 'str' = '#/$defs/{model}') -> 'Dict[str, Any]' from pydantic._internal._model_construction.ModelMetaclass
schema_json(*, by_alias: 'bool' = True, ref_template: 'str' = '#/$defs/{model}', **dumps_kwargs: 'Any') -> 'str' from pydantic._internal._model_construction.ModelMetaclass
update_forward_refs(**localns: 'Any') -> 'None' from pydantic._internal._model_construction.ModelMetaclass
validate(value: 'Any') -> 'Self' from pydantic._internal._model_construction.ModelMetaclass

Readonly properties inherited from pydantic.main.BaseModel:
__fields_set__
model_extra
Get extra fields set during validation.
 
Returns:
    A dictionary of extra fields, or `None` if `config.extra` is not set to `"allow"`.
model_fields_set
Returns the set of fields that have been explicitly set on this model instance.
 
Returns:
    A set of strings representing the fields that have been set,
        i.e. that were not filled from defaults.

Data descriptors inherited from pydantic.main.BaseModel:
__dict__
dictionary for instance variables (if defined)
__pydantic_extra__
__pydantic_fields_set__
__pydantic_private__

Data and other attributes inherited from pydantic.main.BaseModel:
__hash__ = None
__pydantic_root_model__ = False
model_computed_fields = {}
model_fields = {'allowed_special': FieldInfo(annotation=Union[Literal['all'], set[str]], required=False, default=set()), 'async_client': FieldInfo(annotation=Any, required=False, default=None, exclude=True), 'batch_size': FieldInfo(annotation=int, required=False, default=20), 'best_of': FieldInfo(annotation=int, required=False, default=1), 'cache': FieldInfo(annotation=Union[BaseCache, bool, NoneType], required=False, default=None, exclude=True), 'callbacks': FieldInfo(annotation=Union[list[BaseCallbackHand...ype], required=False, default=None, exclude=True), 'client': FieldInfo(annotation=Any, required=False, default=None, exclude=True), 'config_id': FieldInfo(annotation=Union[str, NoneType], required=False, default=None), 'config_name': FieldInfo(annotation=Union[str, NoneType], required=False, default=None), 'custom_get_token_ids': FieldInfo(annotation=Union[Callable[list, list[i...ype], required=False, default=None, exclude=True), ...}

Methods inherited from langchain_core.runnables.base.Runnable:
__or__(self, other: 'Runnable[Any, Other] | Callable[[Iterator[Any]], Iterator[Other]] | Callable[[AsyncIterator[Any]], AsyncIterator[Other]] | Callable[[Any], Other] | Mapping[str, Runnable[Any, Other] | Callable[[Any], Other] | Any]') -> 'RunnableSerializable[Input, Other]'
Runnable "or" operator.
 
Compose this `Runnable` with another object to create a
`RunnableSequence`.
 
Args:
    other: Another `Runnable` or a `Runnable`-like object.
 
Returns:
    A new `Runnable`.
__ror__(self, other: 'Runnable[Other, Any] | Callable[[Iterator[Other]], Iterator[Any]] | Callable[[AsyncIterator[Other]], AsyncIterator[Any]] | Callable[[Other], Any] | Mapping[str, Runnable[Other, Any] | Callable[[Other], Any] | Any]') -> 'RunnableSerializable[Other, Output]'
Runnable "reverse-or" operator.
 
Compose this `Runnable` with another object to create a
`RunnableSequence`.
 
Args:
    other: Another `Runnable` or a `Runnable`-like object.
 
Returns:
    A new `Runnable`.
async abatch_as_completed(self, inputs: 'Sequence[Input]', config: 'RunnableConfig | Sequence[RunnableConfig] | None' = None, *, return_exceptions: 'bool' = False, **kwargs: 'Any | None') -> 'AsyncIterator[tuple[int, Output | Exception]]'
Run `ainvoke` in parallel on a list of inputs.
 
Yields results as they complete.
 
Args:
    inputs: A list of inputs to the `Runnable`.
    config: A config to use when invoking the `Runnable`.
 
        The config supports standard keys like `'tags'`, `'metadata'` for
        tracing purposes, `'max_concurrency'` for controlling how much work to
        do in parallel, and other keys.
 
        Please refer to `RunnableConfig` for more details.
    return_exceptions: Whether to return exceptions instead of raising them.
    **kwargs: Additional keyword arguments to pass to the `Runnable`.
 
Yields:
    A tuple of the index of the input and the output from the `Runnable`.
as_tool(self, args_schema: 'type[BaseModel] | None' = None, *, name: 'str | None' = None, description: 'str | None' = None, arg_types: 'dict[str, type] | None' = None) -> 'BaseTool'
.. beta::
   This API is in beta and may change in the future.
 
Create a `BaseTool` from a `Runnable`.
 
`as_tool` will instantiate a `BaseTool` with a name, description, and
`args_schema` from a `Runnable`. Where possible, schemas are inferred
from `runnable.get_input_schema`.
 
Alternatively (e.g., if the `Runnable` takes a dict as input and the specific
`dict` keys are not typed), the schema can be specified directly with
`args_schema`.
 
You can also pass `arg_types` to just specify the required arguments and their
types.
 
Args:
    args_schema: The schema for the tool.
    name: The name of the tool.
    description: The description of the tool.
    arg_types: A dictionary of argument names to types.
 
Returns:
    A `BaseTool` instance.
 
!!! example "`TypedDict` input"
 
    ```python
    from typing_extensions import TypedDict
    from langchain_core.runnables import RunnableLambda
 
 
    class Args(TypedDict):
        a: int
        b: list[int]
 
 
    def f(x: Args) -> str:
        return str(x["a"] * max(x["b"]))
 
 
    runnable = RunnableLambda(f)
    as_tool = runnable.as_tool()
    as_tool.invoke({"a": 3, "b": [1, 2]})
    ```
 
!!! example "`dict` input, specifying schema via `args_schema`"
 
    ```python
    from typing import Any
    from pydantic import BaseModel, Field
    from langchain_core.runnables import RunnableLambda
 
    def f(x: dict[str, Any]) -> str:
        return str(x["a"] * max(x["b"]))
 
    class FSchema(BaseModel):
        """Apply a function to an integer and list of integers."""
 
        a: int = Field(..., description="Integer")
        b: list[int] = Field(..., description="List of ints")
 
    runnable = RunnableLambda(f)
    as_tool = runnable.as_tool(FSchema)
    as_tool.invoke({"a": 3, "b": [1, 2]})
    ```
 
!!! example "`dict` input, specifying schema via `arg_types`"
 
    ```python
    from typing import Any
    from langchain_core.runnables import RunnableLambda
 
 
    def f(x: dict[str, Any]) -> str:
        return str(x["a"] * max(x["b"]))
 
 
    runnable = RunnableLambda(f)
    as_tool = runnable.as_tool(arg_types={"a": int, "b": list[int]})
    as_tool.invoke({"a": 3, "b": [1, 2]})
    ```
 
!!! example "`str` input"
 
    ```python
    from langchain_core.runnables import RunnableLambda
 
 
    def f(x: str) -> str:
        return x + "a"
 
 
    def g(x: str) -> str:
        return x + "z"
 
 
    runnable = RunnableLambda(f) | g
    as_tool = runnable.as_tool()
    as_tool.invoke("b")
    ```
assign(self, **kwargs: 'Runnable[dict[str, Any], Any] | Callable[[dict[str, Any]], Any] | Mapping[str, Runnable[dict[str, Any], Any] | Callable[[dict[str, Any]], Any]]') -> 'RunnableSerializable[Any, Any]'
Assigns new fields to the `dict` output of this `Runnable`.
 
```python
from langchain_core.language_models.fake import FakeStreamingListLLM
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import SystemMessagePromptTemplate
from langchain_core.runnables import Runnable
from operator import itemgetter
 
prompt = (
    SystemMessagePromptTemplate.from_template("You are a nice assistant.")
    + "{question}"
)
model = FakeStreamingListLLM(responses=["foo-lish"])
 
chain: Runnable = prompt | model | {"str": StrOutputParser()}
 
chain_with_assign = chain.assign(hello=itemgetter("str") | model)
 
print(chain_with_assign.input_schema.model_json_schema())
# {'title': 'PromptInput', 'type': 'object', 'properties':
{'question': {'title': 'Question', 'type': 'string'}}}
print(chain_with_assign.output_schema.model_json_schema())
# {'title': 'RunnableSequenceOutput', 'type': 'object', 'properties':
{'str': {'title': 'Str',
'type': 'string'}, 'hello': {'title': 'Hello', 'type': 'string'}}}
```
 
Args:
    **kwargs: A mapping of keys to `Runnable` or `Runnable`-like objects
        that will be invoked with the entire output dict of this `Runnable`.
 
Returns:
    A new `Runnable`.
async astream_events(self, input: 'Any', config: 'RunnableConfig | None' = None, *, version: "Literal['v1', 'v2']" = 'v2', include_names: 'Sequence[str] | None' = None, include_types: 'Sequence[str] | None' = None, include_tags: 'Sequence[str] | None' = None, exclude_names: 'Sequence[str] | None' = None, exclude_types: 'Sequence[str] | None' = None, exclude_tags: 'Sequence[str] | None' = None, **kwargs: 'Any') -> 'AsyncIterator[StreamEvent]'
Generate a stream of events.
 
Use to create an iterator over `StreamEvent` that provide real-time information
about the progress of the `Runnable`, including `StreamEvent` from intermediate
results.
 
A `StreamEvent` is a dictionary with the following schema:
 
- `event`: Event names are of the format:
    `on_[runnable_type]_(start|stream|end)`.
- `name`: The name of the `Runnable` that generated the event.
- `run_id`: Randomly generated ID associated with the given execution of the
    `Runnable` that emitted the event. A child `Runnable` that gets invoked as
    part of the execution of a parent `Runnable` is assigned its own unique ID.
- `parent_ids`: The IDs of the parent runnables that generated the event. The
    root `Runnable` will have an empty list. The order of the parent IDs is from
    the root to the immediate parent. Only available for v2 version of the API.
    The v1 version of the API will return an empty list.
- `tags`: The tags of the `Runnable` that generated the event.
- `metadata`: The metadata of the `Runnable` that generated the event.
- `data`: The data associated with the event. The contents of this field
    depend on the type of event. See the table below for more details.
 
Below is a table that illustrates some events that might be emitted by various
chains. Metadata fields have been omitted from the table for brevity.
Chain definitions have been included after the table.
 
!!! note
    This reference table is for the v2 version of the schema.
 
| event                  | name                 | chunk                               | input                                             | output                                              |
| ---------------------- | -------------------- | ----------------------------------- | ------------------------------------------------- | --------------------------------------------------- |
| `on_chat_model_start`  | `'[model name]'`     |                                     | `{"messages": [[SystemMessage, HumanMessage]]}`   |                                                     |
| `on_chat_model_stream` | `'[model name]'`     | `AIMessageChunk(content="hello")`   |                                                   |                                                     |
| `on_chat_model_end`    | `'[model name]'`     |                                     | `{"messages": [[SystemMessage, HumanMessage]]}`   | `AIMessageChunk(content="hello world")`             |
| `on_llm_start`         | `'[model name]'`     |                                     | `{'input': 'hello'}`                              |                                                     |
| `on_llm_stream`        | `'[model name]'`     | `'Hello' `                          |                                                   |                                                     |
| `on_llm_end`           | `'[model name]'`     |                                     | `'Hello human!'`                                  |                                                     |
| `on_chain_start`       | `'format_docs'`      |                                     |                                                   |                                                     |
| `on_chain_stream`      | `'format_docs'`      | `'hello world!, goodbye world!'`    |                                                   |                                                     |
| `on_chain_end`         | `'format_docs'`      |                                     | `[Document(...)]`                                 | `'hello world!, goodbye world!'`                    |
| `on_tool_start`        | `'some_tool'`        |                                     | `{"x": 1, "y": "2"}`                              |                                                     |
| `on_tool_end`          | `'some_tool'`        |                                     |                                                   | `{"x": 1, "y": "2"}`                                |
| `on_retriever_start`   | `'[retriever name]'` |                                     | `{"query": "hello"}`                              |                                                     |
| `on_retriever_end`     | `'[retriever name]'` |                                     | `{"query": "hello"}`                              | `[Document(...), ..]`                               |
| `on_prompt_start`      | `'[template_name]'`  |                                     | `{"question": "hello"}`                           |                                                     |
| `on_prompt_end`        | `'[template_name]'`  |                                     | `{"question": "hello"}`                           | `ChatPromptValue(messages: [SystemMessage, ...])`   |
 
In addition to the standard events, users can also dispatch custom events (see example below).
 
Custom events will be only be surfaced with in the v2 version of the API!
 
A custom event has following format:
 
| Attribute   | Type   | Description                                                                                               |
| ----------- | ------ | --------------------------------------------------------------------------------------------------------- |
| `name`      | `str`  | A user defined name for the event.                                                                        |
| `data`      | `Any`  | The data associated with the event. This can be anything, though we suggest making it JSON serializable.  |
 
Here are declarations associated with the standard events shown above:
 
`format_docs`:
 
```python
def format_docs(docs: list[Document]) -> str:
    '''Format the docs.'''
    return ", ".join([doc.page_content for doc in docs])
 
 
format_docs = RunnableLambda(format_docs)
```
 
`some_tool`:
 
```python
@tool
def some_tool(x: int, y: str) -> dict:
    '''Some_tool.'''
    return {"x": x, "y": y}
```
 
`prompt`:
 
```python
template = ChatPromptTemplate.from_messages(
    [
        ("system", "You are Cat Agent 007"),
        ("human", "{question}"),
    ]
).with_config({"run_name": "my_template", "tags": ["my_template"]})
```
 
!!! example
 
    ```python
    from langchain_core.runnables import RunnableLambda
 
 
    async def reverse(s: str) -> str:
        return s[::-1]
 
 
    chain = RunnableLambda(func=reverse)
 
    events = [
        event async for event in chain.astream_events("hello", version="v2")
    ]
 
    # Will produce the following events
    # (run_id, and parent_ids has been omitted for brevity):
    [
        {
            "data": {"input": "hello"},
            "event": "on_chain_start",
            "metadata": {},
            "name": "reverse",
            "tags": [],
        },
        {
            "data": {"chunk": "olleh"},
            "event": "on_chain_stream",
            "metadata": {},
            "name": "reverse",
            "tags": [],
        },
        {
            "data": {"output": "olleh"},
            "event": "on_chain_end",
            "metadata": {},
            "name": "reverse",
            "tags": [],
        },
    ]
    ```
 
```python title="Dispatch custom event"
from langchain_core.callbacks.manager import (
    adispatch_custom_event,
)
from langchain_core.runnables import RunnableLambda, RunnableConfig
import asyncio
 
 
async def slow_thing(some_input: str, config: RunnableConfig) -> str:
    """Do something that takes a long time."""
    await asyncio.sleep(1) # Placeholder for some slow operation
    await adispatch_custom_event(
        "progress_event",
        {"message": "Finished step 1 of 3"},
        config=config # Must be included for python < 3.10
    )
    await asyncio.sleep(1) # Placeholder for some slow operation
    await adispatch_custom_event(
        "progress_event",
        {"message": "Finished step 2 of 3"},
        config=config # Must be included for python < 3.10
    )
    await asyncio.sleep(1) # Placeholder for some slow operation
    return "Done"
 
slow_thing = RunnableLambda(slow_thing)
 
async for event in slow_thing.astream_events("some_input", version="v2"):
    print(event)
```
 
Args:
    input: The input to the `Runnable`.
    config: The config to use for the `Runnable`.
    version: The version of the schema to use, either `'v2'` or `'v1'`.
 
        Users should use `'v2'`.
 
        `'v1'` is for backwards compatibility and will be deprecated
        in `0.4.0`.
 
        No default will be assigned until the API is stabilized.
        custom events will only be surfaced in `'v2'`.
    include_names: Only include events from `Runnable` objects with matching names.
    include_types: Only include events from `Runnable` objects with matching types.
    include_tags: Only include events from `Runnable` objects with matching tags.
    exclude_names: Exclude events from `Runnable` objects with matching names.
    exclude_types: Exclude events from `Runnable` objects with matching types.
    exclude_tags: Exclude events from `Runnable` objects with matching tags.
    **kwargs: Additional keyword arguments to pass to the `Runnable`.
 
        These will be passed to `astream_log` as this implementation
        of `astream_events` is built on top of `astream_log`.
 
Yields:
    An async stream of `StreamEvent`.
 
Raises:
    NotImplementedError: If the version is not `'v1'` or `'v2'`.
async astream_log(self, input: 'Any', config: 'RunnableConfig | None' = None, *, diff: 'bool' = True, with_streamed_output_list: 'bool' = True, include_names: 'Sequence[str] | None' = None, include_types: 'Sequence[str] | None' = None, include_tags: 'Sequence[str] | None' = None, exclude_names: 'Sequence[str] | None' = None, exclude_types: 'Sequence[str] | None' = None, exclude_tags: 'Sequence[str] | None' = None, **kwargs: 'Any') -> 'AsyncIterator[RunLogPatch] | AsyncIterator[RunLog]'
Stream all output from a `Runnable`, as reported to the callback system.
 
This includes all inner runs of LLMs, Retrievers, Tools, etc.
 
Output is streamed as Log objects, which include a list of
Jsonpatch ops that describe how the state of the run has changed in each
step, and the final state of the run.
 
The Jsonpatch ops can be applied in order to construct state.
 
Args:
    input: The input to the `Runnable`.
    config: The config to use for the `Runnable`.
    diff: Whether to yield diffs between each step or the current state.
    with_streamed_output_list: Whether to yield the `streamed_output` list.
    include_names: Only include logs with these names.
    include_types: Only include logs with these types.
    include_tags: Only include logs with these tags.
    exclude_names: Exclude logs with these names.
    exclude_types: Exclude logs with these types.
    exclude_tags: Exclude logs with these tags.
    **kwargs: Additional keyword arguments to pass to the `Runnable`.
 
Yields:
    A `RunLogPatch` or `RunLog` object.
async atransform(self, input: 'AsyncIterator[Input]', config: 'RunnableConfig | None' = None, **kwargs: 'Any | None') -> 'AsyncIterator[Output]'
Transform inputs to outputs.
 
Default implementation of atransform, which buffers input and calls `astream`.
 
Subclasses must override this method if they can start producing output while
input is still being generated.
 
Args:
    input: An async iterator of inputs to the `Runnable`.
    config: The config to use for the `Runnable`.
    **kwargs: Additional keyword arguments to pass to the `Runnable`.
 
Yields:
    The output of the `Runnable`.
batch_as_completed(self, inputs: 'Sequence[Input]', config: 'RunnableConfig | Sequence[RunnableConfig] | None' = None, *, return_exceptions: 'bool' = False, **kwargs: 'Any | None') -> 'Iterator[tuple[int, Output | Exception]]'
Run `invoke` in parallel on a list of inputs.
 
Yields results as they complete.
 
Args:
    inputs: A list of inputs to the `Runnable`.
    config: A config to use when invoking the `Runnable`.
 
        The config supports standard keys like `'tags'`, `'metadata'` for
        tracing purposes, `'max_concurrency'` for controlling how much work to
        do in parallel, and other keys.
 
        Please refer to `RunnableConfig` for more details.
    return_exceptions: Whether to return exceptions instead of raising them.
    **kwargs: Additional keyword arguments to pass to the `Runnable`.
 
Yields:
    Tuples of the index of the input and the output from the `Runnable`.
bind(self, **kwargs: 'Any') -> 'Runnable[Input, Output]'
Bind arguments to a `Runnable`, returning a new `Runnable`.
 
Useful when a `Runnable` in a chain requires an argument that is not
in the output of the previous `Runnable` or included in the user input.
 
Args:
    **kwargs: The arguments to bind to the `Runnable`.
 
Returns:
    A new `Runnable` with the arguments bound.
 
Example:
    ```python
    from langchain_ollama import ChatOllama
    from langchain_core.output_parsers import StrOutputParser
 
    model = ChatOllama(model="llama3.1")
 
    # Without bind
    chain = model | StrOutputParser()
 
    chain.invoke("Repeat quoted words exactly: 'One two three four five.'")
    # Output is 'One two three four five.'
 
    # With bind
    chain = model.bind(stop=["three"]) | StrOutputParser()
 
    chain.invoke("Repeat quoted words exactly: 'One two three four five.'")
    # Output is 'One two'
    ```
config_schema(self, *, include: 'Sequence[str] | None' = None) -> 'type[BaseModel]'
The type of config this `Runnable` accepts specified as a Pydantic model.
 
To mark a field as configurable, see the `configurable_fields`
and `configurable_alternatives` methods.
 
Args:
    include: A list of fields to include in the config schema.
 
Returns:
    A Pydantic model that can be used to validate config.
get_config_jsonschema(self, *, include: 'Sequence[str] | None' = None) -> 'dict[str, Any]'
Get a JSON schema that represents the config of the `Runnable`.
 
Args:
    include: A list of fields to include in the config schema.
 
Returns:
    A JSON schema that represents the config of the `Runnable`.
 
!!! version-added "Added in `langchain-core` 0.3.0"
get_graph(self, config: 'RunnableConfig | None' = None) -> 'Graph'
Return a graph representation of this `Runnable`.
get_input_jsonschema(self, config: 'RunnableConfig | None' = None) -> 'dict[str, Any]'
Get a JSON schema that represents the input to the `Runnable`.
 
Args:
    config: A config to use when generating the schema.
 
Returns:
    A JSON schema that represents the input to the `Runnable`.
 
Example:
    ```python
    from langchain_core.runnables import RunnableLambda
 
 
    def add_one(x: int) -> int:
        return x + 1
 
 
    runnable = RunnableLambda(add_one)
 
    print(runnable.get_input_jsonschema())
    ```
 
!!! version-added "Added in `langchain-core` 0.3.0"
get_input_schema(self, config: 'RunnableConfig | None' = None) -> 'type[BaseModel]'
Get a Pydantic model that can be used to validate input to the `Runnable`.
 
`Runnable` objects that leverage the `configurable_fields` and
`configurable_alternatives` methods will have a dynamic input schema that
depends on which configuration the `Runnable` is invoked with.
 
This method allows to get an input schema for a specific configuration.
 
Args:
    config: A config to use when generating the schema.
 
Returns:
    A Pydantic model that can be used to validate input.
get_name(self, suffix: 'str | None' = None, *, name: 'str | None' = None) -> 'str'
Get the name of the `Runnable`.
 
Args:
    suffix: An optional suffix to append to the name.
    name: An optional name to use instead of the `Runnable`'s name.
 
Returns:
    The name of the `Runnable`.
get_output_jsonschema(self, config: 'RunnableConfig | None' = None) -> 'dict[str, Any]'
Get a JSON schema that represents the output of the `Runnable`.
 
Args:
    config: A config to use when generating the schema.
 
Returns:
    A JSON schema that represents the output of the `Runnable`.
 
Example:
    ```python
    from langchain_core.runnables import RunnableLambda
 
 
    def add_one(x: int) -> int:
        return x + 1
 
 
    runnable = RunnableLambda(add_one)
 
    print(runnable.get_output_jsonschema())
    ```
 
!!! version-added "Added in `langchain-core` 0.3.0"
get_output_schema(self, config: 'RunnableConfig | None' = None) -> 'type[BaseModel]'
Get a Pydantic model that can be used to validate output to the `Runnable`.
 
`Runnable` objects that leverage the `configurable_fields` and
`configurable_alternatives` methods will have a dynamic output schema that
depends on which configuration the `Runnable` is invoked with.
 
This method allows to get an output schema for a specific configuration.
 
Args:
    config: A config to use when generating the schema.
 
Returns:
    A Pydantic model that can be used to validate output.
get_prompts(self, config: 'RunnableConfig | None' = None) -> 'list[BasePromptTemplate]'
Return a list of prompts used by this `Runnable`.
map(self) -> 'Runnable[list[Input], list[Output]]'
Return a new `Runnable` that maps a list of inputs to a list of outputs.
 
Calls `invoke` with each input.
 
Returns:
    A new `Runnable` that maps a list of inputs to a list of outputs.
 
Example:
    ```python
    from langchain_core.runnables import RunnableLambda
 
 
    def _lambda(x: int) -> int:
        return x + 1
 
 
    runnable = RunnableLambda(_lambda)
    print(runnable.map().invoke([1, 2, 3]))  # [2, 3, 4]
    ```
pick(self, keys: 'str | list[str]') -> 'RunnableSerializable[Any, Any]'
Pick keys from the output `dict` of this `Runnable`.
 
!!! example "Pick a single key"
 
    ```python
    import json
 
    from langchain_core.runnables import RunnableLambda, RunnableMap
 
    as_str = RunnableLambda(str)
    as_json = RunnableLambda(json.loads)
    chain = RunnableMap(str=as_str, json=as_json)
 
    chain.invoke("[1, 2, 3]")
    # -> {"str": "[1, 2, 3]", "json": [1, 2, 3]}
 
    json_only_chain = chain.pick("json")
    json_only_chain.invoke("[1, 2, 3]")
    # -> [1, 2, 3]
    ```
 
!!! example "Pick a list of keys"
 
    ```python
    from typing import Any
 
    import json
 
    from langchain_core.runnables import RunnableLambda, RunnableMap
 
    as_str = RunnableLambda(str)
    as_json = RunnableLambda(json.loads)
 
 
    def as_bytes(x: Any) -> bytes:
        return bytes(x, "utf-8")
 
 
    chain = RunnableMap(
        str=as_str, json=as_json, bytes=RunnableLambda(as_bytes)
    )
 
    chain.invoke("[1, 2, 3]")
    # -> {"str": "[1, 2, 3]", "json": [1, 2, 3], "bytes": b"[1, 2, 3]"}
 
    json_and_bytes_chain = chain.pick(["json", "bytes"])
    json_and_bytes_chain.invoke("[1, 2, 3]")
    # -> {"json": [1, 2, 3], "bytes": b"[1, 2, 3]"}
    ```
 
Args:
    keys: A key or list of keys to pick from the output dict.
 
Returns:
    a new `Runnable`.
pipe(self, *others: 'Runnable[Any, Other] | Callable[[Any], Other]', name: 'str | None' = None) -> 'RunnableSerializable[Input, Other]'
Pipe `Runnable` objects.
 
Compose this `Runnable` with `Runnable`-like objects to make a
`RunnableSequence`.
 
Equivalent to `RunnableSequence(self, *others)` or `self | others[0] | ...`
 
Example:
    ```python
    from langchain_core.runnables import RunnableLambda
 
 
    def add_one(x: int) -> int:
        return x + 1
 
 
    def mul_two(x: int) -> int:
        return x * 2
 
 
    runnable_1 = RunnableLambda(add_one)
    runnable_2 = RunnableLambda(mul_two)
    sequence = runnable_1.pipe(runnable_2)
    # Or equivalently:
    # sequence = runnable_1 | runnable_2
    # sequence = RunnableSequence(first=runnable_1, last=runnable_2)
    sequence.invoke(1)
    await sequence.ainvoke(1)
    # -> 4
 
    sequence.batch([1, 2, 3])
    await sequence.abatch([1, 2, 3])
    # -> [4, 6, 8]
    ```
 
Args:
    *others: Other `Runnable` or `Runnable`-like objects to compose
    name: An optional name for the resulting `RunnableSequence`.
 
Returns:
    A new `Runnable`.
transform(self, input: 'Iterator[Input]', config: 'RunnableConfig | None' = None, **kwargs: 'Any | None') -> 'Iterator[Output]'
Transform inputs to outputs.
 
Default implementation of transform, which buffers input and calls `astream`.
 
Subclasses must override this method if they can start producing output while
input is still being generated.
 
Args:
    input: An iterator of inputs to the `Runnable`.
    config: The config to use for the `Runnable`.
    **kwargs: Additional keyword arguments to pass to the `Runnable`.
 
Yields:
    The output of the `Runnable`.
with_alisteners(self, *, on_start: 'AsyncListener | None' = None, on_end: 'AsyncListener | None' = None, on_error: 'AsyncListener | None' = None) -> 'Runnable[Input, Output]'
Bind async lifecycle listeners to a `Runnable`.
 
Returns a new `Runnable`.
 
The Run object contains information about the run, including its `id`,
`type`, `input`, `output`, `error`, `start_time`, `end_time`, and
any tags or metadata added to the run.
 
Args:
    on_start: Called asynchronously before the `Runnable` starts running,
        with the `Run` object.
    on_end: Called asynchronously after the `Runnable` finishes running,
        with the `Run` object.
    on_error: Called asynchronously if the `Runnable` throws an error,
        with the `Run` object.
 
Returns:
    A new `Runnable` with the listeners bound.
 
Example:
    ```python
    from langchain_core.runnables import RunnableLambda, Runnable
    from datetime import datetime, timezone
    import time
    import asyncio
 
 
    def format_t(timestamp: float) -> str:
        return datetime.fromtimestamp(timestamp, tz=timezone.utc).isoformat()
 
 
    async def test_runnable(time_to_sleep: int):
        print(f"Runnable[{time_to_sleep}s]: starts at {format_t(time.time())}")
        await asyncio.sleep(time_to_sleep)
        print(f"Runnable[{time_to_sleep}s]: ends at {format_t(time.time())}")
 
 
    async def fn_start(run_obj: Runnable):
        print(f"on start callback starts at {format_t(time.time())}")
        await asyncio.sleep(3)
        print(f"on start callback ends at {format_t(time.time())}")
 
 
    async def fn_end(run_obj: Runnable):
        print(f"on end callback starts at {format_t(time.time())}")
        await asyncio.sleep(2)
        print(f"on end callback ends at {format_t(time.time())}")
 
 
    runnable = RunnableLambda(test_runnable).with_alisteners(
        on_start=fn_start, on_end=fn_end
    )
 
 
    async def concurrent_runs():
        await asyncio.gather(runnable.ainvoke(2), runnable.ainvoke(3))
 
 
    asyncio.run(concurrent_runs())
    # Result:
    # on start callback starts at 2025-03-01T07:05:22.875378+00:00
    # on start callback starts at 2025-03-01T07:05:22.875495+00:00
    # on start callback ends at 2025-03-01T07:05:25.878862+00:00
    # on start callback ends at 2025-03-01T07:05:25.878947+00:00
    # Runnable[2s]: starts at 2025-03-01T07:05:25.879392+00:00
    # Runnable[3s]: starts at 2025-03-01T07:05:25.879804+00:00
    # Runnable[2s]: ends at 2025-03-01T07:05:27.881998+00:00
    # on end callback starts at 2025-03-01T07:05:27.882360+00:00
    # Runnable[3s]: ends at 2025-03-01T07:05:28.881737+00:00
    # on end callback starts at 2025-03-01T07:05:28.882428+00:00
    # on end callback ends at 2025-03-01T07:05:29.883893+00:00
    # on end callback ends at 2025-03-01T07:05:30.884831+00:00
    ```
with_config(self, config: 'RunnableConfig | None' = None, **kwargs: 'Any') -> 'Runnable[Input, Output]'
Bind config to a `Runnable`, returning a new `Runnable`.
 
Args:
    config: The config to bind to the `Runnable`.
    **kwargs: Additional keyword arguments to pass to the `Runnable`.
 
Returns:
    A new `Runnable` with the config bound.
with_fallbacks(self, fallbacks: 'Sequence[Runnable[Input, Output]]', *, exceptions_to_handle: 'tuple[type[BaseException], ...]' = (<class 'Exception'>,), exception_key: 'str | None' = None) -> 'RunnableWithFallbacksT[Input, Output]'
Add fallbacks to a `Runnable`, returning a new `Runnable`.
 
The new `Runnable` will try the original `Runnable`, and then each fallback
in order, upon failures.
 
Args:
    fallbacks: A sequence of runnables to try if the original `Runnable`
        fails.
    exceptions_to_handle: A tuple of exception types to handle.
    exception_key: If `string` is specified then handled exceptions will be
        passed to fallbacks as part of the input under the specified key.
 
        If `None`, exceptions will not be passed to fallbacks.
 
        If used, the base `Runnable` and its fallbacks must accept a
        dictionary as input.
 
Returns:
    A new `Runnable` that will try the original `Runnable`, and then each
        Fallback in order, upon failures.
 
Example:
    ```python
    from typing import Iterator
 
    from langchain_core.runnables import RunnableGenerator
 
 
    def _generate_immediate_error(input: Iterator) -> Iterator[str]:
        raise ValueError()
        yield ""
 
 
    def _generate(input: Iterator) -> Iterator[str]:
        yield from "foo bar"
 
 
    runnable = RunnableGenerator(_generate_immediate_error).with_fallbacks(
        [RunnableGenerator(_generate)]
    )
    print("".join(runnable.stream({})))  # foo bar
    ```
 
Args:
    fallbacks: A sequence of runnables to try if the original `Runnable`
        fails.
    exceptions_to_handle: A tuple of exception types to handle.
    exception_key: If `string` is specified then handled exceptions will be
        passed to fallbacks as part of the input under the specified key.
 
        If `None`, exceptions will not be passed to fallbacks.
 
        If used, the base `Runnable` and its fallbacks must accept a
        dictionary as input.
 
Returns:
    A new `Runnable` that will try the original `Runnable`, and then each
        Fallback in order, upon failures.
with_listeners(self, *, on_start: 'Callable[[Run], None] | Callable[[Run, RunnableConfig], None] | None' = None, on_end: 'Callable[[Run], None] | Callable[[Run, RunnableConfig], None] | None' = None, on_error: 'Callable[[Run], None] | Callable[[Run, RunnableConfig], None] | None' = None) -> 'Runnable[Input, Output]'
Bind lifecycle listeners to a `Runnable`, returning a new `Runnable`.
 
The Run object contains information about the run, including its `id`,
`type`, `input`, `output`, `error`, `start_time`, `end_time`, and
any tags or metadata added to the run.
 
Args:
    on_start: Called before the `Runnable` starts running, with the `Run`
        object.
    on_end: Called after the `Runnable` finishes running, with the `Run`
        object.
    on_error: Called if the `Runnable` throws an error, with the `Run`
        object.
 
Returns:
    A new `Runnable` with the listeners bound.
 
Example:
    ```python
    from langchain_core.runnables import RunnableLambda
    from langchain_core.tracers.schemas import Run
 
    import time
 
 
    def test_runnable(time_to_sleep: int):
        time.sleep(time_to_sleep)
 
 
    def fn_start(run_obj: Run):
        print("start_time:", run_obj.start_time)
 
 
    def fn_end(run_obj: Run):
        print("end_time:", run_obj.end_time)
 
 
    chain = RunnableLambda(test_runnable).with_listeners(
        on_start=fn_start, on_end=fn_end
    )
    chain.invoke(2)
    ```
with_retry(self, *, retry_if_exception_type: 'tuple[type[BaseException], ...]' = (<class 'Exception'>,), wait_exponential_jitter: 'bool' = True, exponential_jitter_params: 'ExponentialJitterParams | None' = None, stop_after_attempt: 'int' = 3) -> 'Runnable[Input, Output]'
Create a new `Runnable` that retries the original `Runnable` on exceptions.
 
Args:
    retry_if_exception_type: A tuple of exception types to retry on.
    wait_exponential_jitter: Whether to add jitter to the wait
        time between retries.
    stop_after_attempt: The maximum number of attempts to make before
        giving up.
    exponential_jitter_params: Parameters for
        `tenacity.wait_exponential_jitter`. Namely: `initial`, `max`,
        `exp_base`, and `jitter` (all `float` values).
 
Returns:
    A new `Runnable` that retries the original `Runnable` on exceptions.
 
Example:
    ```python
    from langchain_core.runnables import RunnableLambda
 
    count = 0
 
 
    def _lambda(x: int) -> None:
        global count
        count = count + 1
        if x == 1:
            raise ValueError("x is 1")
        else:
            pass
 
 
    runnable = RunnableLambda(_lambda)
    try:
        runnable.with_retry(
            stop_after_attempt=2,
            retry_if_exception_type=(ValueError,),
        ).invoke(1)
    except ValueError:
        pass
 
    assert count == 2
    ```
with_types(self, *, input_type: 'type[Input] | None' = None, output_type: 'type[Output] | None' = None) -> 'Runnable[Input, Output]'
Bind input and output types to a `Runnable`, returning a new `Runnable`.
 
Args:
    input_type: The input type to bind to the `Runnable`.
    output_type: The output type to bind to the `Runnable`.
 
Returns:
    A new `Runnable` with the types bound.

Readonly properties inherited from langchain_core.runnables.base.Runnable:
config_specs
List configurable fields for this `Runnable`.
input_schema
The type of input this `Runnable` accepts specified as a Pydantic model.
output_schema
Output schema.
 
The type of output this `Runnable` produces specified as a Pydantic model.

Class methods inherited from typing.Generic:
__init_subclass__(*args, **kwargs) from pydantic._internal._model_construction.ModelMetaclass
This method is called when a class is subclassed.
 
The default implementation does nothing. It may be
overridden to extend subclasses.

 
class OpenAIEmbeddings(ProxyOpenAI, langchain_openai.embeddings.base.OpenAIEmbeddings)
    OpenAIEmbeddings(*args, client: Any = None, async_client: Any = None, model: Optional[str] = None, dimensions: int | None = None, deployment: str | None = 'text-embedding-ada-002', api_version: Optional[str] = None, base_url: str | None = &lt;factory&gt;, openai_api_type: str | None = &lt;factory&gt;, openai_proxy: str | None = &lt;factory&gt;, embedding_ctx_length: int = 8191, api_key: pydantic.types.SecretStr | None | collections.abc.Callable[[], str] | collections.abc.Callable[[], collections.abc.Awaitable[str]] = &lt;factory&gt;, organization: str | None = &lt;factory&gt;, allowed_special: Union[Literal['all'], set[str], NoneType] = None, disallowed_special: Union[Literal['all'], set[str], collections.abc.Sequence[str], NoneType] = None, chunk_size: int = 16, max_retries: int = 2, timeout: Union[float, tuple[float, float], Any, NoneType] = None, headers: Any = None, tiktoken_enabled: bool = True, tiktoken_model_name: Optional[str] = 'text-embedding-ada-002', show_progress_bar: bool = False, model_kwargs: dict[str, typing.Any] = &lt;factory&gt;, skip_empty: bool = False, default_headers: collections.abc.Mapping[str, str] | None = None, default_query: collections.abc.Mapping[str, object] | None = None, retry_min_seconds: int = 4, retry_max_seconds: int = 20, http_client: Optional[Any] = None, http_async_client: Optional[Any] = None, check_embedding_ctx_length: bool = True, proxy_client: Optional[Any] = None, deployment_id: Optional[str] = None, config_name: Optional[str] = None, config_id: Optional[str] = None, proxy_model_name: Optional[str] = None, input_type: Optional[str] = None, **kwargs) -&gt; None
 
OpenAI Embeddings model using a proxy.
 
 
Method resolution order:
OpenAIEmbeddings
ProxyOpenAI
gen_ai_hub.proxy.langchain.base.BaseAuth
langchain_openai.embeddings.base.OpenAIEmbeddings
pydantic.main.BaseModel
langchain_core.embeddings.embeddings.Embeddings
abc.ABC
builtins.object

Methods defined here:
__init__(self, *args, **kwargs)
Initialize the OpenAIEmbeddings object.

Class methods defined here:
validate_environment(values: Dict) -> Dict from pydantic._internal._model_construction.ModelMetaclass
Validates the environment.
 
:param values: The input values
:type values: Dict
:return: The validated values
:rtype: Dict

Data and other attributes defined here:
__abstractmethods__ = frozenset()
__annotations__ = {'chunk_size': <class 'int'>, 'input_type': typing.Optional[str], 'model': typing.Optional[str], 'openai_api_version': typing.Optional[str], 'tiktoken_model_name': typing.Optional[str]}
__class_vars__ = set()
__private_attributes__ = {}
__pydantic_complete__ = True
__pydantic_computed_fields__ = {}
__pydantic_core_schema__ = {'cls': <class 'gen_ai_hub.proxy.langchain.openai.OpenAIEmbeddings'>, 'config': {'extra_fields_behavior': 'allow', 'title': 'OpenAIEmbeddings', 'validate_by_alias': True, 'validate_by_name': True}, 'custom_init': True, 'metadata': {'pydantic_js_functions': [<bound method BaseModel.__get_pydantic_json_sche...ai_hub.proxy.langchain.openai.OpenAIEmbeddings'>>]}, 'ref': 'gen_ai_hub.proxy.langchain.openai.OpenAIEmbeddings:139913210017648', 'root_model': False, 'schema': {'function': {'function': <bound method OpenAIEmbeddings.validate_environm...ai_hub.proxy.langchain.openai.OpenAIEmbeddings'>>, 'type': 'no-info'}, 'schema': {'function': {'function': <bound method OpenAIEmbeddings.build_extra of <c...ai_hub.proxy.langchain.openai.OpenAIEmbeddings'>>, 'type': 'no-info'}, 'schema': {'computed_fields': [], 'fields': {'allowed_special': {'metadata': {}, 'schema': {...}, 'type': 'model-field'}, 'async_client': {'metadata': {}, 'schema': {...}, 'serialization_exclude': True, 'type': 'model-field'}, 'check_embedding_ctx_length': {'metadata': {}, 'schema': {...}, 'type': 'model-field'}, 'chunk_size': {'metadata': {}, 'schema': {...}, 'type': 'model-field'}, 'client': {'metadata': {}, 'schema': {...}, 'serialization_exclude': True, 'type': 'model-field'}, 'config_id': {'metadata': {}, 'schema': {...}, 'type': 'model-field'}, 'config_name': {'metadata': {}, 'schema': {...}, 'type': 'model-field'}, 'default_headers': {'metadata': {}, 'schema': {...}, 'type': 'model-field'}, 'default_query': {'metadata': {}, 'schema': {...}, 'type': 'model-field'}, 'deployment': {'metadata': {}, 'schema': {...}, 'type': 'model-field'}, ...}, 'model_name': 'OpenAIEmbeddings', 'type': 'model-fields'}, 'type': 'function-before'}, 'type': 'function-before'}, 'type': 'model'}
__pydantic_custom_init__ = True
__pydantic_decorators__ = DecoratorInfos(validators={}, field_validators={...coratorInfo(mode='before'))}, computed_fields={})
__pydantic_fields__ = {'allowed_special': FieldInfo(annotation=Union[Literal['all'], set[str], NoneType], required=False, default=None), 'async_client': FieldInfo(annotation=Any, required=False, default=None, exclude=True), 'check_embedding_ctx_length': FieldInfo(annotation=bool, required=False, default=True), 'chunk_size': FieldInfo(annotation=int, required=False, default=16), 'client': FieldInfo(annotation=Any, required=False, default=None, exclude=True), 'config_id': FieldInfo(annotation=Union[str, NoneType], required=False, default=None), 'config_name': FieldInfo(annotation=Union[str, NoneType], required=False, default=None), 'default_headers': FieldInfo(annotation=Union[Mapping[str, str], NoneType], required=False, default=None), 'default_query': FieldInfo(annotation=Union[Mapping[str, object], NoneType], required=False, default=None), 'deployment': FieldInfo(annotation=Union[str, NoneType], required=False, default='text-embedding-ada-002'), ...}
__pydantic_generic_metadata__ = {'args': (), 'origin': None, 'parameters': ()}
__pydantic_parent_namespace__ = None
__pydantic_post_init__ = None
__pydantic_serializer__ = SchemaSerializer(serializer=Model( ModelSeri...me: "OpenAIEmbeddings", }, ), definitions=[])
__pydantic_setattr_handlers__ = {}
__pydantic_validator__ = SchemaValidator(title="OpenAIEmbeddings", valida...s", }, ), definitions=[], cache_strings=True)
__signature__ = <Signature (*args, client: Any = None, async_cli...ut_type: Optional[str] = None, **kwargs) -> None>
model_config = {'extra': 'allow', 'populate_by_name': True, 'protected_namespaces': (), 'validate_by_alias': True, 'validate_by_name': True}

Class methods inherited from ProxyOpenAI:
validate_clients(values: Dict) -> Dict from pydantic._internal._model_construction.ModelMetaclass
Validate and initialize OpenAI clients.
 
:param values: The input values
:type values: Dict
:return: The validated values
:rtype: Dict

Data descriptors inherited from gen_ai_hub.proxy.langchain.base.BaseAuth:
__weakref__
list of weak references to the object (if defined)

Methods inherited from langchain_openai.embeddings.base.OpenAIEmbeddings:
async aembed_documents(self, texts: 'list[str]', chunk_size: 'int | None' = None, **kwargs: 'Any') -> 'list[list[float]]'
Asynchronously call OpenAI's embedding endpoint to embed search docs.
 
Args:
    texts: The list of texts to embed.
    chunk_size: The chunk size of embeddings.
 
        If `None`, will use the chunk size specified by the class.
    kwargs: Additional keyword arguments to pass to the embedding API.
 
Returns:
    List of embeddings, one for each text.
async aembed_query(self, text: 'str', **kwargs: 'Any') -> 'list[float]'
Call out to OpenAI's embedding endpoint async for embedding query text.
 
Args:
    text: The text to embed.
    kwargs: Additional keyword arguments to pass to the embedding API.
 
Returns:
    Embedding for the text.
embed_documents(self, texts: 'list[str]', chunk_size: 'int | None' = None, **kwargs: 'Any') -> 'list[list[float]]'
Call OpenAI's embedding endpoint to embed search docs.
 
Args:
    texts: The list of texts to embed.
    chunk_size: The chunk size of embeddings.
 
        If `None`, will use the chunk size specified by the class.
    kwargs: Additional keyword arguments to pass to the embedding API.
 
Returns:
    List of embeddings, one for each text.
embed_query(self, text: 'str', **kwargs: 'Any') -> 'list[float]'
Call out to OpenAI's embedding endpoint for embedding query text.
 
Args:
    text: The text to embed.
    kwargs: Additional keyword arguments to pass to the embedding API.
 
Returns:
    Embedding for the text.

Class methods inherited from langchain_openai.embeddings.base.OpenAIEmbeddings:
build_extra(values: 'dict[str, Any]') -> 'Any' from pydantic._internal._model_construction.ModelMetaclass
Build extra kwargs from additional params that were passed in.

Methods inherited from pydantic.main.BaseModel:
__copy__(self) -> 'Self'
Returns a shallow copy of the model.
__deepcopy__(self, memo: 'dict[int, Any] | None' = None) -> 'Self'
Returns a deep copy of the model.
__delattr__(self, item: 'str') -> 'Any'
Implement delattr(self, name).
__eq__(self, other: 'Any') -> 'bool'
Return self==value.
__getattr__(self, item: 'str') -> 'Any'
__getstate__(self) -> 'dict[Any, Any]'
__iter__(self) -> 'TupleGenerator'
So `dict(model)` works.
__pretty__(self, fmt: 'Callable[[Any], Any]', **kwargs: 'Any') -> 'Generator[Any]'
Used by devtools (https://python-devtools.helpmanual.io/) to pretty print objects.
__replace__(self, **changes: 'Any') -> 'Self'
# Because we make use of `@dataclass_transform()`, `__replace__` is already synthesized by
# type checkers, so we define the implementation in this `if not TYPE_CHECKING:` block:
__repr__(self) -> 'str'
Return repr(self).
__repr_args__(self) -> '_repr.ReprArgs'
__repr_name__(self) -> 'str'
Name of the instance's class, used in __repr__.
__repr_recursion__(self, object: 'Any') -> 'str'
Returns the string representation of a recursive object.
__repr_str__(self, join_str: 'str') -> 'str'
__rich_repr__(self) -> 'RichReprResult'
Used by Rich (https://rich.readthedocs.io/en/stable/pretty.html) to pretty print objects.
__setattr__(self, name: 'str', value: 'Any') -> 'None'
Implement setattr(self, name, value).
__setstate__(self, state: 'dict[Any, Any]') -> 'None'
__str__(self) -> 'str'
Return str(self).
copy(self, *, include: 'AbstractSetIntStr | MappingIntStrAny | None' = None, exclude: 'AbstractSetIntStr | MappingIntStrAny | None' = None, update: 'Dict[str, Any] | None' = None, deep: 'bool' = False) -> 'Self'
Returns a copy of the model.
 
!!! warning "Deprecated"
    This method is now deprecated; use `model_copy` instead.
 
If you need `include` or `exclude`, use:
 
```python {test="skip" lint="skip"}
data = self.model_dump(include=include, exclude=exclude, round_trip=True)
data = {**data, **(update or {})}
copied = self.model_validate(data)
```
 
Args:
    include: Optional set or mapping specifying which fields to include in the copied model.
    exclude: Optional set or mapping specifying which fields to exclude in the copied model.
    update: Optional dictionary of field-value pairs to override field values in the copied model.
    deep: If True, the values of fields that are Pydantic models will be deep-copied.
 
Returns:
    A copy of the model with included, excluded and updated fields as specified.
dict(self, *, include: 'IncEx | None' = None, exclude: 'IncEx | None' = None, by_alias: 'bool' = False, exclude_unset: 'bool' = False, exclude_defaults: 'bool' = False, exclude_none: 'bool' = False) -> 'Dict[str, Any]'
json(self, *, include: 'IncEx | None' = None, exclude: 'IncEx | None' = None, by_alias: 'bool' = False, exclude_unset: 'bool' = False, exclude_defaults: 'bool' = False, exclude_none: 'bool' = False, encoder: 'Callable[[Any], Any] | None' = PydanticUndefined, models_as_dict: 'bool' = PydanticUndefined, **dumps_kwargs: 'Any') -> 'str'
model_copy(self, *, update: 'Mapping[str, Any] | None' = None, deep: 'bool' = False) -> 'Self'
!!! abstract "Usage Documentation"
    [`model_copy`](../concepts/models.md#model-copy)
 
Returns a copy of the model.
 
!!! note
    The underlying instance's [`__dict__`][object.__dict__] attribute is copied. This
    might have unexpected side effects if you store anything in it, on top of the model
    fields (e.g. the value of [cached properties][functools.cached_property]).
 
Args:
    update: Values to change/add in the new model. Note: the data is not validated
        before creating the new model. You should trust this data.
    deep: Set to `True` to make a deep copy of the model.
 
Returns:
    New model instance.
model_dump(self, *, mode: "Literal['json', 'python'] | str" = 'python', include: 'IncEx | None' = None, exclude: 'IncEx | None' = None, context: 'Any | None' = None, by_alias: 'bool | None' = None, exclude_unset: 'bool' = False, exclude_defaults: 'bool' = False, exclude_none: 'bool' = False, exclude_computed_fields: 'bool' = False, round_trip: 'bool' = False, warnings: "bool | Literal['none', 'warn', 'error']" = True, fallback: 'Callable[[Any], Any] | None' = None, serialize_as_any: 'bool' = False) -> 'dict[str, Any]'
!!! abstract "Usage Documentation"
    [`model_dump`](../concepts/serialization.md#python-mode)
 
Generate a dictionary representation of the model, optionally specifying which fields to include or exclude.
 
Args:
    mode: The mode in which `to_python` should run.
        If mode is 'json', the output will only contain JSON serializable types.
        If mode is 'python', the output may contain non-JSON-serializable Python objects.
    include: A set of fields to include in the output.
    exclude: A set of fields to exclude from the output.
    context: Additional context to pass to the serializer.
    by_alias: Whether to use the field's alias in the dictionary key if defined.
    exclude_unset: Whether to exclude fields that have not been explicitly set.
    exclude_defaults: Whether to exclude fields that are set to their default value.
    exclude_none: Whether to exclude fields that have a value of `None`.
    exclude_computed_fields: Whether to exclude computed fields.
        While this can be useful for round-tripping, it is usually recommended to use the dedicated
        `round_trip` parameter instead.
    round_trip: If True, dumped values should be valid as input for non-idempotent types such as Json[T].
    warnings: How to handle serialization errors. False/"none" ignores them, True/"warn" logs errors,
        "error" raises a [`PydanticSerializationError`][pydantic_core.PydanticSerializationError].
    fallback: A function to call when an unknown value is encountered. If not provided,
        a [`PydanticSerializationError`][pydantic_core.PydanticSerializationError] error is raised.
    serialize_as_any: Whether to serialize fields with duck-typing serialization behavior.
 
Returns:
    A dictionary representation of the model.
model_dump_json(self, *, indent: 'int | None' = None, ensure_ascii: 'bool' = False, include: 'IncEx | None' = None, exclude: 'IncEx | None' = None, context: 'Any | None' = None, by_alias: 'bool | None' = None, exclude_unset: 'bool' = False, exclude_defaults: 'bool' = False, exclude_none: 'bool' = False, exclude_computed_fields: 'bool' = False, round_trip: 'bool' = False, warnings: "bool | Literal['none', 'warn', 'error']" = True, fallback: 'Callable[[Any], Any] | None' = None, serialize_as_any: 'bool' = False) -> 'str'
!!! abstract "Usage Documentation"
    [`model_dump_json`](../concepts/serialization.md#json-mode)
 
Generates a JSON representation of the model using Pydantic's `to_json` method.
 
Args:
    indent: Indentation to use in the JSON output. If None is passed, the output will be compact.
    ensure_ascii: If `True`, the output is guaranteed to have all incoming non-ASCII characters escaped.
        If `False` (the default), these characters will be output as-is.
    include: Field(s) to include in the JSON output.
    exclude: Field(s) to exclude from the JSON output.
    context: Additional context to pass to the serializer.
    by_alias: Whether to serialize using field aliases.
    exclude_unset: Whether to exclude fields that have not been explicitly set.
    exclude_defaults: Whether to exclude fields that are set to their default value.
    exclude_none: Whether to exclude fields that have a value of `None`.
    exclude_computed_fields: Whether to exclude computed fields.
        While this can be useful for round-tripping, it is usually recommended to use the dedicated
        `round_trip` parameter instead.
    round_trip: If True, dumped values should be valid as input for non-idempotent types such as Json[T].
    warnings: How to handle serialization errors. False/"none" ignores them, True/"warn" logs errors,
        "error" raises a [`PydanticSerializationError`][pydantic_core.PydanticSerializationError].
    fallback: A function to call when an unknown value is encountered. If not provided,
        a [`PydanticSerializationError`][pydantic_core.PydanticSerializationError] error is raised.
    serialize_as_any: Whether to serialize fields with duck-typing serialization behavior.
 
Returns:
    A JSON string representation of the model.
model_post_init(self, context: 'Any', /) -> 'None'
Override this method to perform additional initialization after `__init__` and `model_construct`.
This is useful if you want to do some validation that requires the entire model to be initialized.

Class methods inherited from pydantic.main.BaseModel:
__class_getitem__(typevar_values: 'type[Any] | tuple[type[Any], ...]') -> 'type[BaseModel] | _forward_ref.PydanticRecursiveRef' from pydantic._internal._model_construction.ModelMetaclass
__get_pydantic_core_schema__(source: 'type[BaseModel]', handler: 'GetCoreSchemaHandler', /) -> 'CoreSchema' from pydantic._internal._model_construction.ModelMetaclass
__get_pydantic_json_schema__(core_schema: 'CoreSchema', handler: 'GetJsonSchemaHandler', /) -> 'JsonSchemaValue' from pydantic._internal._model_construction.ModelMetaclass
Hook into generating the model's JSON schema.
 
Args:
    core_schema: A `pydantic-core` CoreSchema.
        You can ignore this argument and call the handler with a new CoreSchema,
        wrap this CoreSchema (`{'type': 'nullable', 'schema': current_schema}`),
        or just call the handler with the original schema.
    handler: Call into Pydantic's internal JSON schema generation.
        This will raise a `pydantic.errors.PydanticInvalidForJsonSchema` if JSON schema
        generation fails.
        Since this gets called by `BaseModel.model_json_schema` you can override the
        `schema_generator` argument to that function to change JSON schema generation globally
        for a type.
 
Returns:
    A JSON schema, as a Python object.
__pydantic_init_subclass__(**kwargs: 'Any') -> 'None' from pydantic._internal._model_construction.ModelMetaclass
This is intended to behave just like `__init_subclass__`, but is called by `ModelMetaclass`
only after basic class initialization is complete. In particular, attributes like `model_fields` will
be present when this is called, but forward annotations are not guaranteed to be resolved yet,
meaning that creating an instance of the class may fail.
 
This is necessary because `__init_subclass__` will always be called by `type.__new__`,
and it would require a prohibitively large refactor to the `ModelMetaclass` to ensure that
`type.__new__` was called in such a manner that the class would already be sufficiently initialized.
 
This will receive the same `kwargs` that would be passed to the standard `__init_subclass__`, namely,
any kwargs passed to the class definition that aren't used internally by Pydantic.
 
Args:
    **kwargs: Any keyword arguments passed to the class definition that aren't used internally
        by Pydantic.
 
Note:
    You may want to override [`__pydantic_on_complete__()`][pydantic.main.BaseModel.__pydantic_on_complete__]
    instead, which is called once the class and its fields are fully initialized and ready for validation.
__pydantic_on_complete__() -> 'None' from pydantic._internal._model_construction.ModelMetaclass
This is called once the class and its fields are fully initialized and ready to be used.
 
This typically happens when the class is created (just before
[`__pydantic_init_subclass__()`][pydantic.main.BaseModel.__pydantic_init_subclass__] is called on the superclass),
except when forward annotations are used that could not immediately be resolved.
In that case, it will be called later, when the model is rebuilt automatically or explicitly using
[`model_rebuild()`][pydantic.main.BaseModel.model_rebuild].
construct(_fields_set: 'set[str] | None' = None, **values: 'Any') -> 'Self' from pydantic._internal._model_construction.ModelMetaclass
from_orm(obj: 'Any') -> 'Self' from pydantic._internal._model_construction.ModelMetaclass
model_construct(_fields_set: 'set[str] | None' = None, **values: 'Any') -> 'Self' from pydantic._internal._model_construction.ModelMetaclass
Creates a new instance of the `Model` class with validated data.
 
Creates a new model setting `__dict__` and `__pydantic_fields_set__` from trusted or pre-validated data.
Default values are respected, but no other validation is performed.
 
!!! note
    `model_construct()` generally respects the `model_config.extra` setting on the provided model.
    That is, if `model_config.extra == 'allow'`, then all extra passed values are added to the model instance's `__dict__`
    and `__pydantic_extra__` fields. If `model_config.extra == 'ignore'` (the default), then all extra passed values are ignored.
    Because no validation is performed with a call to `model_construct()`, having `model_config.extra == 'forbid'` does not result in
    an error if extra values are passed, but they will be ignored.
 
Args:
    _fields_set: A set of field names that were originally explicitly set during instantiation. If provided,
        this is directly used for the [`model_fields_set`][pydantic.BaseModel.model_fields_set] attribute.
        Otherwise, the field names from the `values` argument will be used.
    values: Trusted or pre-validated data dictionary.
 
Returns:
    A new instance of the `Model` class with validated data.
model_json_schema(by_alias: 'bool' = True, ref_template: 'str' = '#/$defs/{model}', schema_generator: 'type[GenerateJsonSchema]' = <class 'pydantic.json_schema.GenerateJsonSchema'>, mode: 'JsonSchemaMode' = 'validation', *, union_format: "Literal['any_of', 'primitive_type_array']" = 'any_of') -> 'dict[str, Any]' from pydantic._internal._model_construction.ModelMetaclass
Generates a JSON schema for a model class.
 
Args:
    by_alias: Whether to use attribute aliases or not.
    ref_template: The reference template.
    union_format: The format to use when combining schemas from unions together. Can be one of:
 
        - `'any_of'`: Use the [`anyOf`](https://json-schema.org/understanding-json-schema/reference/combining#anyOf)
        keyword to combine schemas (the default).
        - `'primitive_type_array'`: Use the [`type`](https://json-schema.org/understanding-json-schema/reference/type)
        keyword as an array of strings, containing each type of the combination. If any of the schemas is not a primitive
        type (`string`, `boolean`, `null`, `integer` or `number`) or contains constraints/metadata, falls back to
        `any_of`.
    schema_generator: To override the logic used to generate the JSON schema, as a subclass of
        `GenerateJsonSchema` with your desired modifications
    mode: The mode in which to generate the schema.
 
Returns:
    The JSON schema for the given model class.
model_parametrized_name(params: 'tuple[type[Any], ...]') -> 'str' from pydantic._internal._model_construction.ModelMetaclass
Compute the class name for parametrizations of generic classes.
 
This method can be overridden to achieve a custom naming scheme for generic BaseModels.
 
Args:
    params: Tuple of types of the class. Given a generic class
        `Model` with 2 type variables and a concrete model `Model[str, int]`,
        the value `(str, int)` would be passed to `params`.
 
Returns:
    String representing the new class where `params` are passed to `cls` as type variables.
 
Raises:
    TypeError: Raised when trying to generate concrete names for non-generic models.
model_rebuild(*, force: 'bool' = False, raise_errors: 'bool' = True, _parent_namespace_depth: 'int' = 2, _types_namespace: 'MappingNamespace | None' = None) -> 'bool | None' from pydantic._internal._model_construction.ModelMetaclass
Try to rebuild the pydantic-core schema for the model.
 
This may be necessary when one of the annotations is a ForwardRef which could not be resolved during
the initial attempt to build the schema, and automatic rebuilding fails.
 
Args:
    force: Whether to force the rebuilding of the model schema, defaults to `False`.
    raise_errors: Whether to raise errors, defaults to `True`.
    _parent_namespace_depth: The depth level of the parent namespace, defaults to 2.
    _types_namespace: The types namespace, defaults to `None`.
 
Returns:
    Returns `None` if the schema is already "complete" and rebuilding was not required.
    If rebuilding _was_ required, returns `True` if rebuilding was successful, otherwise `False`.
model_validate(obj: 'Any', *, strict: 'bool | None' = None, extra: 'ExtraValues | None' = None, from_attributes: 'bool | None' = None, context: 'Any | None' = None, by_alias: 'bool | None' = None, by_name: 'bool | None' = None) -> 'Self' from pydantic._internal._model_construction.ModelMetaclass
Validate a pydantic model instance.
 
Args:
    obj: The object to validate.
    strict: Whether to enforce types strictly.
    extra: Whether to ignore, allow, or forbid extra data during model validation.
        See the [`extra` configuration value][pydantic.ConfigDict.extra] for details.
    from_attributes: Whether to extract data from object attributes.
    context: Additional context to pass to the validator.
    by_alias: Whether to use the field's alias when validating against the provided input data.
    by_name: Whether to use the field's name when validating against the provided input data.
 
Raises:
    ValidationError: If the object could not be validated.
 
Returns:
    The validated model instance.
model_validate_json(json_data: 'str | bytes | bytearray', *, strict: 'bool | None' = None, extra: 'ExtraValues | None' = None, context: 'Any | None' = None, by_alias: 'bool | None' = None, by_name: 'bool | None' = None) -> 'Self' from pydantic._internal._model_construction.ModelMetaclass
!!! abstract "Usage Documentation"
    [JSON Parsing](../concepts/json.md#json-parsing)
 
Validate the given JSON data against the Pydantic model.
 
Args:
    json_data: The JSON data to validate.
    strict: Whether to enforce types strictly.
    extra: Whether to ignore, allow, or forbid extra data during model validation.
        See the [`extra` configuration value][pydantic.ConfigDict.extra] for details.
    context: Extra variables to pass to the validator.
    by_alias: Whether to use the field's alias when validating against the provided input data.
    by_name: Whether to use the field's name when validating against the provided input data.
 
Returns:
    The validated Pydantic model.
 
Raises:
    ValidationError: If `json_data` is not a JSON string or the object could not be validated.
model_validate_strings(obj: 'Any', *, strict: 'bool | None' = None, extra: 'ExtraValues | None' = None, context: 'Any | None' = None, by_alias: 'bool | None' = None, by_name: 'bool | None' = None) -> 'Self' from pydantic._internal._model_construction.ModelMetaclass
Validate the given object with string data against the Pydantic model.
 
Args:
    obj: The object containing string data to validate.
    strict: Whether to enforce types strictly.
    extra: Whether to ignore, allow, or forbid extra data during model validation.
        See the [`extra` configuration value][pydantic.ConfigDict.extra] for details.
    context: Extra variables to pass to the validator.
    by_alias: Whether to use the field's alias when validating against the provided input data.
    by_name: Whether to use the field's name when validating against the provided input data.
 
Returns:
    The validated Pydantic model.
parse_file(path: 'str | Path', *, content_type: 'str | None' = None, encoding: 'str' = 'utf8', proto: 'DeprecatedParseProtocol | None' = None, allow_pickle: 'bool' = False) -> 'Self' from pydantic._internal._model_construction.ModelMetaclass
parse_obj(obj: 'Any') -> 'Self' from pydantic._internal._model_construction.ModelMetaclass
parse_raw(b: 'str | bytes', *, content_type: 'str | None' = None, encoding: 'str' = 'utf8', proto: 'DeprecatedParseProtocol | None' = None, allow_pickle: 'bool' = False) -> 'Self' from pydantic._internal._model_construction.ModelMetaclass
schema(by_alias: 'bool' = True, ref_template: 'str' = '#/$defs/{model}') -> 'Dict[str, Any]' from pydantic._internal._model_construction.ModelMetaclass
schema_json(*, by_alias: 'bool' = True, ref_template: 'str' = '#/$defs/{model}', **dumps_kwargs: 'Any') -> 'str' from pydantic._internal._model_construction.ModelMetaclass
update_forward_refs(**localns: 'Any') -> 'None' from pydantic._internal._model_construction.ModelMetaclass
validate(value: 'Any') -> 'Self' from pydantic._internal._model_construction.ModelMetaclass

Readonly properties inherited from pydantic.main.BaseModel:
__fields_set__
model_extra
Get extra fields set during validation.
 
Returns:
    A dictionary of extra fields, or `None` if `config.extra` is not set to `"allow"`.
model_fields_set
Returns the set of fields that have been explicitly set on this model instance.
 
Returns:
    A set of strings representing the fields that have been set,
        i.e. that were not filled from defaults.

Data descriptors inherited from pydantic.main.BaseModel:
__dict__
dictionary for instance variables (if defined)
__pydantic_extra__
__pydantic_fields_set__
__pydantic_private__

Data and other attributes inherited from pydantic.main.BaseModel:
__hash__ = None
__pydantic_root_model__ = False
model_computed_fields = {}
model_fields = {'allowed_special': FieldInfo(annotation=Union[Literal['all'], set[str], NoneType], required=False, default=None), 'async_client': FieldInfo(annotation=Any, required=False, default=None, exclude=True), 'check_embedding_ctx_length': FieldInfo(annotation=bool, required=False, default=True), 'chunk_size': FieldInfo(annotation=int, required=False, default=16), 'client': FieldInfo(annotation=Any, required=False, default=None, exclude=True), 'config_id': FieldInfo(annotation=Union[str, NoneType], required=False, default=None), 'config_name': FieldInfo(annotation=Union[str, NoneType], required=False, default=None), 'default_headers': FieldInfo(annotation=Union[Mapping[str, str], NoneType], required=False, default=None), 'default_query': FieldInfo(annotation=Union[Mapping[str, object], NoneType], required=False, default=None), 'deployment': FieldInfo(annotation=Union[str, NoneType], required=False, default='text-embedding-ada-002'), ...}

 
class ProxyOpenAI(gen_ai_hub.proxy.langchain.base.BaseAuth)
    ProxyOpenAI(*, proxy_client: Optional[Any] = None, deployment_id: Optional[str] = None, config_name: Optional[str] = None, config_id: Optional[str] = None, proxy_model_name: Optional[str] = None, **extra_data: Any) -&gt; None
 
Base class for OpenAI models using a proxy.
 
:param BaseAuth: Base authentication class
:type BaseAuth: class
:return: The ProxyOpenAI class
:rtype: class
 
 
Method resolution order:
ProxyOpenAI
gen_ai_hub.proxy.langchain.base.BaseAuth
pydantic.main.BaseModel
builtins.object

Class methods defined here:
validate_clients(values: Dict) -> Dict from pydantic._internal._model_construction.ModelMetaclass
Validate and initialize OpenAI clients.
 
:param values: The input values
:type values: Dict
:return: The validated values
:rtype: Dict

Data and other attributes defined here:
__abstractmethods__ = frozenset()
__class_vars__ = set()
__private_attributes__ = {}
__pydantic_complete__ = True
__pydantic_computed_fields__ = {}
__pydantic_core_schema__ = {'cls': <class 'gen_ai_hub.proxy.langchain.openai.ProxyOpenAI'>, 'config': {'extra_fields_behavior': 'allow', 'title': 'ProxyOpenAI'}, 'custom_init': False, 'metadata': {'pydantic_js_functions': [<bound method BaseModel.__get_pydantic_json_sche...'gen_ai_hub.proxy.langchain.openai.ProxyOpenAI'>>]}, 'ref': 'gen_ai_hub.proxy.langchain.openai.ProxyOpenAI:139913210189408', 'root_model': False, 'schema': {'computed_fields': [], 'fields': {'config_id': {'metadata': {}, 'schema': {'default': None, 'schema': {'schema': {...}, 'type': 'nullable'}, 'type': 'default'}, 'type': 'model-field'}, 'config_name': {'metadata': {}, 'schema': {'default': None, 'schema': {'schema': {...}, 'type': 'nullable'}, 'type': 'default'}, 'type': 'model-field'}, 'deployment_id': {'metadata': {}, 'schema': {'default': None, 'schema': {'schema': {...}, 'type': 'nullable'}, 'type': 'default'}, 'type': 'model-field'}, 'proxy_client': {'metadata': {}, 'schema': {'default': None, 'schema': {'schema': {...}, 'type': 'nullable'}, 'type': 'default'}, 'type': 'model-field'}, 'proxy_model_name': {'metadata': {}, 'schema': {'default': None, 'schema': {'schema': {...}, 'type': 'nullable'}, 'type': 'default'}, 'type': 'model-field'}}, 'model_name': 'ProxyOpenAI', 'type': 'model-fields'}, 'type': 'model'}
__pydantic_custom_init__ = False
__pydantic_decorators__ = DecoratorInfos(validators={}, field_validators={...zers={}, model_validators={}, computed_fields={})
__pydantic_fields__ = {'config_id': FieldInfo(annotation=Union[str, NoneType], required=False, default=None), 'config_name': FieldInfo(annotation=Union[str, NoneType], required=False, default=None), 'deployment_id': FieldInfo(annotation=Union[str, NoneType], required=False, default=None), 'proxy_client': FieldInfo(annotation=Union[Any, NoneType], required=False, default=None), 'proxy_model_name': FieldInfo(annotation=Union[str, NoneType], required=False, default=None)}
__pydantic_generic_metadata__ = {'args': (), 'origin': None, 'parameters': ()}
__pydantic_parent_namespace__ = None
__pydantic_post_init__ = None
__pydantic_serializer__ = SchemaSerializer(serializer=Model( ModelSeri... name: "ProxyOpenAI", }, ), definitions=[])
__pydantic_setattr_handlers__ = {}
__pydantic_validator__ = SchemaValidator(title="ProxyOpenAI", validator=M...I", }, ), definitions=[], cache_strings=True)
__signature__ = <Signature (*, proxy_client: Optional[Any] = Non...Optional[str] = None, **extra_data: Any) -> None>
model_config = {'extra': 'allow'}

Data descriptors inherited from gen_ai_hub.proxy.langchain.base.BaseAuth:
__weakref__
list of weak references to the object (if defined)

Data and other attributes inherited from gen_ai_hub.proxy.langchain.base.BaseAuth:
__annotations__ = {'config_id': typing.Optional[str], 'config_name': typing.Optional[str], 'deployment_id': typing.Optional[str], 'proxy_client': typing.Optional[typing.Any], 'proxy_model_name': typing.Optional[str]}

Methods inherited from pydantic.main.BaseModel:
__copy__(self) -> 'Self'
Returns a shallow copy of the model.
__deepcopy__(self, memo: 'dict[int, Any] | None' = None) -> 'Self'
Returns a deep copy of the model.
__delattr__(self, item: 'str') -> 'Any'
Implement delattr(self, name).
__eq__(self, other: 'Any') -> 'bool'
Return self==value.
__getattr__(self, item: 'str') -> 'Any'
__getstate__(self) -> 'dict[Any, Any]'
__init__(self, /, **data: 'Any') -> 'None'
Create a new model by parsing and validating input data from keyword arguments.
 
Raises [`ValidationError`][pydantic_core.ValidationError] if the input data cannot be
validated to form a valid model.
 
`self` is explicitly positional-only to allow `self` as a field name.
__iter__(self) -> 'TupleGenerator'
So `dict(model)` works.
__pretty__(self, fmt: 'Callable[[Any], Any]', **kwargs: 'Any') -> 'Generator[Any]'
Used by devtools (https://python-devtools.helpmanual.io/) to pretty print objects.
__replace__(self, **changes: 'Any') -> 'Self'
# Because we make use of `@dataclass_transform()`, `__replace__` is already synthesized by
# type checkers, so we define the implementation in this `if not TYPE_CHECKING:` block:
__repr__(self) -> 'str'
Return repr(self).
__repr_args__(self) -> '_repr.ReprArgs'
__repr_name__(self) -> 'str'
Name of the instance's class, used in __repr__.
__repr_recursion__(self, object: 'Any') -> 'str'
Returns the string representation of a recursive object.
__repr_str__(self, join_str: 'str') -> 'str'
__rich_repr__(self) -> 'RichReprResult'
Used by Rich (https://rich.readthedocs.io/en/stable/pretty.html) to pretty print objects.
__setattr__(self, name: 'str', value: 'Any') -> 'None'
Implement setattr(self, name, value).
__setstate__(self, state: 'dict[Any, Any]') -> 'None'
__str__(self) -> 'str'
Return str(self).
copy(self, *, include: 'AbstractSetIntStr | MappingIntStrAny | None' = None, exclude: 'AbstractSetIntStr | MappingIntStrAny | None' = None, update: 'Dict[str, Any] | None' = None, deep: 'bool' = False) -> 'Self'
Returns a copy of the model.
 
!!! warning "Deprecated"
    This method is now deprecated; use `model_copy` instead.
 
If you need `include` or `exclude`, use:
 
```python {test="skip" lint="skip"}
data = self.model_dump(include=include, exclude=exclude, round_trip=True)
data = {**data, **(update or {})}
copied = self.model_validate(data)
```
 
Args:
    include: Optional set or mapping specifying which fields to include in the copied model.
    exclude: Optional set or mapping specifying which fields to exclude in the copied model.
    update: Optional dictionary of field-value pairs to override field values in the copied model.
    deep: If True, the values of fields that are Pydantic models will be deep-copied.
 
Returns:
    A copy of the model with included, excluded and updated fields as specified.
dict(self, *, include: 'IncEx | None' = None, exclude: 'IncEx | None' = None, by_alias: 'bool' = False, exclude_unset: 'bool' = False, exclude_defaults: 'bool' = False, exclude_none: 'bool' = False) -> 'Dict[str, Any]'
json(self, *, include: 'IncEx | None' = None, exclude: 'IncEx | None' = None, by_alias: 'bool' = False, exclude_unset: 'bool' = False, exclude_defaults: 'bool' = False, exclude_none: 'bool' = False, encoder: 'Callable[[Any], Any] | None' = PydanticUndefined, models_as_dict: 'bool' = PydanticUndefined, **dumps_kwargs: 'Any') -> 'str'
model_copy(self, *, update: 'Mapping[str, Any] | None' = None, deep: 'bool' = False) -> 'Self'
!!! abstract "Usage Documentation"
    [`model_copy`](../concepts/models.md#model-copy)
 
Returns a copy of the model.
 
!!! note
    The underlying instance's [`__dict__`][object.__dict__] attribute is copied. This
    might have unexpected side effects if you store anything in it, on top of the model
    fields (e.g. the value of [cached properties][functools.cached_property]).
 
Args:
    update: Values to change/add in the new model. Note: the data is not validated
        before creating the new model. You should trust this data.
    deep: Set to `True` to make a deep copy of the model.
 
Returns:
    New model instance.
model_dump(self, *, mode: "Literal['json', 'python'] | str" = 'python', include: 'IncEx | None' = None, exclude: 'IncEx | None' = None, context: 'Any | None' = None, by_alias: 'bool | None' = None, exclude_unset: 'bool' = False, exclude_defaults: 'bool' = False, exclude_none: 'bool' = False, exclude_computed_fields: 'bool' = False, round_trip: 'bool' = False, warnings: "bool | Literal['none', 'warn', 'error']" = True, fallback: 'Callable[[Any], Any] | None' = None, serialize_as_any: 'bool' = False) -> 'dict[str, Any]'
!!! abstract "Usage Documentation"
    [`model_dump`](../concepts/serialization.md#python-mode)
 
Generate a dictionary representation of the model, optionally specifying which fields to include or exclude.
 
Args:
    mode: The mode in which `to_python` should run.
        If mode is 'json', the output will only contain JSON serializable types.
        If mode is 'python', the output may contain non-JSON-serializable Python objects.
    include: A set of fields to include in the output.
    exclude: A set of fields to exclude from the output.
    context: Additional context to pass to the serializer.
    by_alias: Whether to use the field's alias in the dictionary key if defined.
    exclude_unset: Whether to exclude fields that have not been explicitly set.
    exclude_defaults: Whether to exclude fields that are set to their default value.
    exclude_none: Whether to exclude fields that have a value of `None`.
    exclude_computed_fields: Whether to exclude computed fields.
        While this can be useful for round-tripping, it is usually recommended to use the dedicated
        `round_trip` parameter instead.
    round_trip: If True, dumped values should be valid as input for non-idempotent types such as Json[T].
    warnings: How to handle serialization errors. False/"none" ignores them, True/"warn" logs errors,
        "error" raises a [`PydanticSerializationError`][pydantic_core.PydanticSerializationError].
    fallback: A function to call when an unknown value is encountered. If not provided,
        a [`PydanticSerializationError`][pydantic_core.PydanticSerializationError] error is raised.
    serialize_as_any: Whether to serialize fields with duck-typing serialization behavior.
 
Returns:
    A dictionary representation of the model.
model_dump_json(self, *, indent: 'int | None' = None, ensure_ascii: 'bool' = False, include: 'IncEx | None' = None, exclude: 'IncEx | None' = None, context: 'Any | None' = None, by_alias: 'bool | None' = None, exclude_unset: 'bool' = False, exclude_defaults: 'bool' = False, exclude_none: 'bool' = False, exclude_computed_fields: 'bool' = False, round_trip: 'bool' = False, warnings: "bool | Literal['none', 'warn', 'error']" = True, fallback: 'Callable[[Any], Any] | None' = None, serialize_as_any: 'bool' = False) -> 'str'
!!! abstract "Usage Documentation"
    [`model_dump_json`](../concepts/serialization.md#json-mode)
 
Generates a JSON representation of the model using Pydantic's `to_json` method.
 
Args:
    indent: Indentation to use in the JSON output. If None is passed, the output will be compact.
    ensure_ascii: If `True`, the output is guaranteed to have all incoming non-ASCII characters escaped.
        If `False` (the default), these characters will be output as-is.
    include: Field(s) to include in the JSON output.
    exclude: Field(s) to exclude from the JSON output.
    context: Additional context to pass to the serializer.
    by_alias: Whether to serialize using field aliases.
    exclude_unset: Whether to exclude fields that have not been explicitly set.
    exclude_defaults: Whether to exclude fields that are set to their default value.
    exclude_none: Whether to exclude fields that have a value of `None`.
    exclude_computed_fields: Whether to exclude computed fields.
        While this can be useful for round-tripping, it is usually recommended to use the dedicated
        `round_trip` parameter instead.
    round_trip: If True, dumped values should be valid as input for non-idempotent types such as Json[T].
    warnings: How to handle serialization errors. False/"none" ignores them, True/"warn" logs errors,
        "error" raises a [`PydanticSerializationError`][pydantic_core.PydanticSerializationError].
    fallback: A function to call when an unknown value is encountered. If not provided,
        a [`PydanticSerializationError`][pydantic_core.PydanticSerializationError] error is raised.
    serialize_as_any: Whether to serialize fields with duck-typing serialization behavior.
 
Returns:
    A JSON string representation of the model.
model_post_init(self, context: 'Any', /) -> 'None'
Override this method to perform additional initialization after `__init__` and `model_construct`.
This is useful if you want to do some validation that requires the entire model to be initialized.

Class methods inherited from pydantic.main.BaseModel:
__class_getitem__(typevar_values: 'type[Any] | tuple[type[Any], ...]') -> 'type[BaseModel] | _forward_ref.PydanticRecursiveRef' from pydantic._internal._model_construction.ModelMetaclass
__get_pydantic_core_schema__(source: 'type[BaseModel]', handler: 'GetCoreSchemaHandler', /) -> 'CoreSchema' from pydantic._internal._model_construction.ModelMetaclass
__get_pydantic_json_schema__(core_schema: 'CoreSchema', handler: 'GetJsonSchemaHandler', /) -> 'JsonSchemaValue' from pydantic._internal._model_construction.ModelMetaclass
Hook into generating the model's JSON schema.
 
Args:
    core_schema: A `pydantic-core` CoreSchema.
        You can ignore this argument and call the handler with a new CoreSchema,
        wrap this CoreSchema (`{'type': 'nullable', 'schema': current_schema}`),
        or just call the handler with the original schema.
    handler: Call into Pydantic's internal JSON schema generation.
        This will raise a `pydantic.errors.PydanticInvalidForJsonSchema` if JSON schema
        generation fails.
        Since this gets called by `BaseModel.model_json_schema` you can override the
        `schema_generator` argument to that function to change JSON schema generation globally
        for a type.
 
Returns:
    A JSON schema, as a Python object.
__pydantic_init_subclass__(**kwargs: 'Any') -> 'None' from pydantic._internal._model_construction.ModelMetaclass
This is intended to behave just like `__init_subclass__`, but is called by `ModelMetaclass`
only after basic class initialization is complete. In particular, attributes like `model_fields` will
be present when this is called, but forward annotations are not guaranteed to be resolved yet,
meaning that creating an instance of the class may fail.
 
This is necessary because `__init_subclass__` will always be called by `type.__new__`,
and it would require a prohibitively large refactor to the `ModelMetaclass` to ensure that
`type.__new__` was called in such a manner that the class would already be sufficiently initialized.
 
This will receive the same `kwargs` that would be passed to the standard `__init_subclass__`, namely,
any kwargs passed to the class definition that aren't used internally by Pydantic.
 
Args:
    **kwargs: Any keyword arguments passed to the class definition that aren't used internally
        by Pydantic.
 
Note:
    You may want to override [`__pydantic_on_complete__()`][pydantic.main.BaseModel.__pydantic_on_complete__]
    instead, which is called once the class and its fields are fully initialized and ready for validation.
__pydantic_on_complete__() -> 'None' from pydantic._internal._model_construction.ModelMetaclass
This is called once the class and its fields are fully initialized and ready to be used.
 
This typically happens when the class is created (just before
[`__pydantic_init_subclass__()`][pydantic.main.BaseModel.__pydantic_init_subclass__] is called on the superclass),
except when forward annotations are used that could not immediately be resolved.
In that case, it will be called later, when the model is rebuilt automatically or explicitly using
[`model_rebuild()`][pydantic.main.BaseModel.model_rebuild].
construct(_fields_set: 'set[str] | None' = None, **values: 'Any') -> 'Self' from pydantic._internal._model_construction.ModelMetaclass
from_orm(obj: 'Any') -> 'Self' from pydantic._internal._model_construction.ModelMetaclass
model_construct(_fields_set: 'set[str] | None' = None, **values: 'Any') -> 'Self' from pydantic._internal._model_construction.ModelMetaclass
Creates a new instance of the `Model` class with validated data.
 
Creates a new model setting `__dict__` and `__pydantic_fields_set__` from trusted or pre-validated data.
Default values are respected, but no other validation is performed.
 
!!! note
    `model_construct()` generally respects the `model_config.extra` setting on the provided model.
    That is, if `model_config.extra == 'allow'`, then all extra passed values are added to the model instance's `__dict__`
    and `__pydantic_extra__` fields. If `model_config.extra == 'ignore'` (the default), then all extra passed values are ignored.
    Because no validation is performed with a call to `model_construct()`, having `model_config.extra == 'forbid'` does not result in
    an error if extra values are passed, but they will be ignored.
 
Args:
    _fields_set: A set of field names that were originally explicitly set during instantiation. If provided,
        this is directly used for the [`model_fields_set`][pydantic.BaseModel.model_fields_set] attribute.
        Otherwise, the field names from the `values` argument will be used.
    values: Trusted or pre-validated data dictionary.
 
Returns:
    A new instance of the `Model` class with validated data.
model_json_schema(by_alias: 'bool' = True, ref_template: 'str' = '#/$defs/{model}', schema_generator: 'type[GenerateJsonSchema]' = <class 'pydantic.json_schema.GenerateJsonSchema'>, mode: 'JsonSchemaMode' = 'validation', *, union_format: "Literal['any_of', 'primitive_type_array']" = 'any_of') -> 'dict[str, Any]' from pydantic._internal._model_construction.ModelMetaclass
Generates a JSON schema for a model class.
 
Args:
    by_alias: Whether to use attribute aliases or not.
    ref_template: The reference template.
    union_format: The format to use when combining schemas from unions together. Can be one of:
 
        - `'any_of'`: Use the [`anyOf`](https://json-schema.org/understanding-json-schema/reference/combining#anyOf)
        keyword to combine schemas (the default).
        - `'primitive_type_array'`: Use the [`type`](https://json-schema.org/understanding-json-schema/reference/type)
        keyword as an array of strings, containing each type of the combination. If any of the schemas is not a primitive
        type (`string`, `boolean`, `null`, `integer` or `number`) or contains constraints/metadata, falls back to
        `any_of`.
    schema_generator: To override the logic used to generate the JSON schema, as a subclass of
        `GenerateJsonSchema` with your desired modifications
    mode: The mode in which to generate the schema.
 
Returns:
    The JSON schema for the given model class.
model_parametrized_name(params: 'tuple[type[Any], ...]') -> 'str' from pydantic._internal._model_construction.ModelMetaclass
Compute the class name for parametrizations of generic classes.
 
This method can be overridden to achieve a custom naming scheme for generic BaseModels.
 
Args:
    params: Tuple of types of the class. Given a generic class
        `Model` with 2 type variables and a concrete model `Model[str, int]`,
        the value `(str, int)` would be passed to `params`.
 
Returns:
    String representing the new class where `params` are passed to `cls` as type variables.
 
Raises:
    TypeError: Raised when trying to generate concrete names for non-generic models.
model_rebuild(*, force: 'bool' = False, raise_errors: 'bool' = True, _parent_namespace_depth: 'int' = 2, _types_namespace: 'MappingNamespace | None' = None) -> 'bool | None' from pydantic._internal._model_construction.ModelMetaclass
Try to rebuild the pydantic-core schema for the model.
 
This may be necessary when one of the annotations is a ForwardRef which could not be resolved during
the initial attempt to build the schema, and automatic rebuilding fails.
 
Args:
    force: Whether to force the rebuilding of the model schema, defaults to `False`.
    raise_errors: Whether to raise errors, defaults to `True`.
    _parent_namespace_depth: The depth level of the parent namespace, defaults to 2.
    _types_namespace: The types namespace, defaults to `None`.
 
Returns:
    Returns `None` if the schema is already "complete" and rebuilding was not required.
    If rebuilding _was_ required, returns `True` if rebuilding was successful, otherwise `False`.
model_validate(obj: 'Any', *, strict: 'bool | None' = None, extra: 'ExtraValues | None' = None, from_attributes: 'bool | None' = None, context: 'Any | None' = None, by_alias: 'bool | None' = None, by_name: 'bool | None' = None) -> 'Self' from pydantic._internal._model_construction.ModelMetaclass
Validate a pydantic model instance.
 
Args:
    obj: The object to validate.
    strict: Whether to enforce types strictly.
    extra: Whether to ignore, allow, or forbid extra data during model validation.
        See the [`extra` configuration value][pydantic.ConfigDict.extra] for details.
    from_attributes: Whether to extract data from object attributes.
    context: Additional context to pass to the validator.
    by_alias: Whether to use the field's alias when validating against the provided input data.
    by_name: Whether to use the field's name when validating against the provided input data.
 
Raises:
    ValidationError: If the object could not be validated.
 
Returns:
    The validated model instance.
model_validate_json(json_data: 'str | bytes | bytearray', *, strict: 'bool | None' = None, extra: 'ExtraValues | None' = None, context: 'Any | None' = None, by_alias: 'bool | None' = None, by_name: 'bool | None' = None) -> 'Self' from pydantic._internal._model_construction.ModelMetaclass
!!! abstract "Usage Documentation"
    [JSON Parsing](../concepts/json.md#json-parsing)
 
Validate the given JSON data against the Pydantic model.
 
Args:
    json_data: The JSON data to validate.
    strict: Whether to enforce types strictly.
    extra: Whether to ignore, allow, or forbid extra data during model validation.
        See the [`extra` configuration value][pydantic.ConfigDict.extra] for details.
    context: Extra variables to pass to the validator.
    by_alias: Whether to use the field's alias when validating against the provided input data.
    by_name: Whether to use the field's name when validating against the provided input data.
 
Returns:
    The validated Pydantic model.
 
Raises:
    ValidationError: If `json_data` is not a JSON string or the object could not be validated.
model_validate_strings(obj: 'Any', *, strict: 'bool | None' = None, extra: 'ExtraValues | None' = None, context: 'Any | None' = None, by_alias: 'bool | None' = None, by_name: 'bool | None' = None) -> 'Self' from pydantic._internal._model_construction.ModelMetaclass
Validate the given object with string data against the Pydantic model.
 
Args:
    obj: The object containing string data to validate.
    strict: Whether to enforce types strictly.
    extra: Whether to ignore, allow, or forbid extra data during model validation.
        See the [`extra` configuration value][pydantic.ConfigDict.extra] for details.
    context: Extra variables to pass to the validator.
    by_alias: Whether to use the field's alias when validating against the provided input data.
    by_name: Whether to use the field's name when validating against the provided input data.
 
Returns:
    The validated Pydantic model.
parse_file(path: 'str | Path', *, content_type: 'str | None' = None, encoding: 'str' = 'utf8', proto: 'DeprecatedParseProtocol | None' = None, allow_pickle: 'bool' = False) -> 'Self' from pydantic._internal._model_construction.ModelMetaclass
parse_obj(obj: 'Any') -> 'Self' from pydantic._internal._model_construction.ModelMetaclass
parse_raw(b: 'str | bytes', *, content_type: 'str | None' = None, encoding: 'str' = 'utf8', proto: 'DeprecatedParseProtocol | None' = None, allow_pickle: 'bool' = False) -> 'Self' from pydantic._internal._model_construction.ModelMetaclass
schema(by_alias: 'bool' = True, ref_template: 'str' = '#/$defs/{model}') -> 'Dict[str, Any]' from pydantic._internal._model_construction.ModelMetaclass
schema_json(*, by_alias: 'bool' = True, ref_template: 'str' = '#/$defs/{model}', **dumps_kwargs: 'Any') -> 'str' from pydantic._internal._model_construction.ModelMetaclass
update_forward_refs(**localns: 'Any') -> 'None' from pydantic._internal._model_construction.ModelMetaclass
validate(value: 'Any') -> 'Self' from pydantic._internal._model_construction.ModelMetaclass

Readonly properties inherited from pydantic.main.BaseModel:
__fields_set__
model_extra
Get extra fields set during validation.
 
Returns:
    A dictionary of extra fields, or `None` if `config.extra` is not set to `"allow"`.
model_fields_set
Returns the set of fields that have been explicitly set on this model instance.
 
Returns:
    A set of strings representing the fields that have been set,
        i.e. that were not filled from defaults.

Data descriptors inherited from pydantic.main.BaseModel:
__dict__
dictionary for instance variables (if defined)
__pydantic_extra__
__pydantic_fields_set__
__pydantic_private__

Data and other attributes inherited from pydantic.main.BaseModel:
__hash__ = None
__pydantic_root_model__ = False
model_computed_fields = {}
model_fields = {'config_id': FieldInfo(annotation=Union[str, NoneType], required=False, default=None), 'config_name': FieldInfo(annotation=Union[str, NoneType], required=False, default=None), 'deployment_id': FieldInfo(annotation=Union[str, NoneType], required=False, default=None), 'proxy_client': FieldInfo(annotation=Union[Any, NoneType], required=False, default=None), 'proxy_model_name': FieldInfo(annotation=Union[str, NoneType], required=False, default=None)}

 
Functions
       
get_client_params(values)
Get the client parameters.
:param values: The client values
:return: client values + proxy_client
init_chat_model(proxy_client: gen_ai_hub.proxy.core.base.BaseProxyClient, deployment: gen_ai_hub.proxy.core.base.BaseDeployment, temperature: float = 0.0, max_tokens: int = 256, top_k: Optional[int] = None, top_p: float = 1.0)
Initialize the ChatOpenAI model.
 
:param proxy_client: the proxy client
:type proxy_client: BaseProxyClient
:param deployment: the deployment
:type deployment: BaseDeployment
:param temperature: the temperature, defaults to 0.0
:type temperature: float, optional
:param max_tokens: the maximum tokens, defaults to 256
:type max_tokens: int, optional
:param top_k: the top k, defaults to None
:type top_k: Optional[int], optional
:param top_p: the top p, defaults to 1.0
:type top_p: float, optional
:return: the ChatOpenAI model
:rtype: ChatOpenAI
init_embedding_model(proxy_client: gen_ai_hub.proxy.core.base.BaseProxyClient, deployment: gen_ai_hub.proxy.core.base.BaseDeployment)
Initialize the OpenAIEmbeddings model.
 
:param proxy_client: the proxy client
:type proxy_client: BaseProxyClient
:param deployment: the deployment
:type deployment: BaseDeployment
:return: the OpenAIEmbeddings model
:rtype: OpenAIEmbeddings

 
Data
        Any = typing.Any
DEFAULT_API_VERSION = '2025-03-01-preview'
Dict = typing.Dict
Optional = typing.Optional
catalog = <gen_ai_hub.proxy.langchain.init_models.Catalog object>