Skip to content

Index

MultiModalLLM #

Bases: ChainableMixin, BaseComponent

多模式LLM界面。

Source code in llama_index/core/multi_modal_llms/base.py
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
class MultiModalLLM(ChainableMixin, BaseComponent):
    """多模式LLM界面。"""

    callback_manager: CallbackManager = Field(
        default_factory=CallbackManager, exclude=True
    )

    class Config:
        arbitrary_types_allowed = True

    @validator("callback_manager", pre=True)
    def _validate_callback_manager(cls, v: CallbackManager) -> CallbackManager:
        if v is None:
            return CallbackManager([])
        return v

    @property
    @abstractmethod
    def metadata(self) -> MultiModalLLMMetadata:
        """多模态LLM元数据。"""

    @abstractmethod
    def complete(
        self, prompt: str, image_documents: Sequence[ImageDocument], **kwargs: Any
    ) -> CompletionResponse:
        """多模式LLM的完成端点。"""

    @abstractmethod
    def stream_complete(
        self, prompt: str, image_documents: Sequence[ImageDocument], **kwargs: Any
    ) -> CompletionResponseGen:
        """多模式LLM的流式完成端点。"""

    @abstractmethod
    def chat(
        self,
        messages: Sequence[ChatMessage],
        **kwargs: Any,
    ) -> ChatResponse:
        """多模式LLM的聊天端点。"""

    @abstractmethod
    def stream_chat(
        self,
        messages: Sequence[ChatMessage],
        **kwargs: Any,
    ) -> ChatResponseGen:
        """多模式LLM的流式聊天端点。"""

    # ===== Async Endpoints =====

    @abstractmethod
    async def acomplete(
        self, prompt: str, image_documents: Sequence[ImageDocument], **kwargs: Any
    ) -> CompletionResponse:
        """多模式LLM的异步完成端点。"""

    @abstractmethod
    async def astream_complete(
        self, prompt: str, image_documents: Sequence[ImageDocument], **kwargs: Any
    ) -> CompletionResponseAsyncGen:
        """多模式LLM的异步流完成端点。"""

    @abstractmethod
    async def achat(
        self,
        messages: Sequence[ChatMessage],
        **kwargs: Any,
    ) -> ChatResponse:
        """多模式LLM的异步聊天端点。"""

    @abstractmethod
    async def astream_chat(
        self,
        messages: Sequence[ChatMessage],
        **kwargs: Any,
    ) -> ChatResponseAsyncGen:
        """多模式LLM的异步流式聊天端点。"""

    def _as_query_component(self, **kwargs: Any) -> QueryComponent:
        """返回查询组件。"""
        if self.metadata.is_chat_model:
            # TODO: we don't have a separate chat component
            return MultiModalCompleteComponent(multi_modal_llm=self, **kwargs)
        else:
            return MultiModalCompleteComponent(multi_modal_llm=self, **kwargs)

metadata abstractmethod property #

metadata: MultiModalLLMMetadata

多模态LLM元数据。

complete abstractmethod #

complete(
    prompt: str,
    image_documents: Sequence[ImageDocument],
    **kwargs: Any
) -> CompletionResponse

多模式LLM的完成端点。

Source code in llama_index/core/multi_modal_llms/base.py
95
96
97
98
99
@abstractmethod
def complete(
    self, prompt: str, image_documents: Sequence[ImageDocument], **kwargs: Any
) -> CompletionResponse:
    """多模式LLM的完成端点。"""

stream_complete abstractmethod #

stream_complete(
    prompt: str,
    image_documents: Sequence[ImageDocument],
    **kwargs: Any
) -> CompletionResponseGen

多模式LLM的流式完成端点。

Source code in llama_index/core/multi_modal_llms/base.py
101
102
103
104
105
@abstractmethod
def stream_complete(
    self, prompt: str, image_documents: Sequence[ImageDocument], **kwargs: Any
) -> CompletionResponseGen:
    """多模式LLM的流式完成端点。"""

chat abstractmethod #

chat(
    messages: Sequence[ChatMessage], **kwargs: Any
) -> ChatResponse

多模式LLM的聊天端点。

Source code in llama_index/core/multi_modal_llms/base.py
107
108
109
110
111
112
113
@abstractmethod
def chat(
    self,
    messages: Sequence[ChatMessage],
    **kwargs: Any,
) -> ChatResponse:
    """多模式LLM的聊天端点。"""

stream_chat abstractmethod #

stream_chat(
    messages: Sequence[ChatMessage], **kwargs: Any
) -> ChatResponseGen

多模式LLM的流式聊天端点。

Source code in llama_index/core/multi_modal_llms/base.py
115
116
117
118
119
120
121
@abstractmethod
def stream_chat(
    self,
    messages: Sequence[ChatMessage],
    **kwargs: Any,
) -> ChatResponseGen:
    """多模式LLM的流式聊天端点。"""

acomplete abstractmethod async #

acomplete(
    prompt: str,
    image_documents: Sequence[ImageDocument],
    **kwargs: Any
) -> CompletionResponse

多模式LLM的异步完成端点。

Source code in llama_index/core/multi_modal_llms/base.py
125
126
127
128
129
@abstractmethod
async def acomplete(
    self, prompt: str, image_documents: Sequence[ImageDocument], **kwargs: Any
) -> CompletionResponse:
    """多模式LLM的异步完成端点。"""

astream_complete abstractmethod async #

astream_complete(
    prompt: str,
    image_documents: Sequence[ImageDocument],
    **kwargs: Any
) -> CompletionResponseAsyncGen

多模式LLM的异步流完成端点。

Source code in llama_index/core/multi_modal_llms/base.py
131
132
133
134
135
@abstractmethod
async def astream_complete(
    self, prompt: str, image_documents: Sequence[ImageDocument], **kwargs: Any
) -> CompletionResponseAsyncGen:
    """多模式LLM的异步流完成端点。"""

achat abstractmethod async #

achat(
    messages: Sequence[ChatMessage], **kwargs: Any
) -> ChatResponse

多模式LLM的异步聊天端点。

Source code in llama_index/core/multi_modal_llms/base.py
137
138
139
140
141
142
143
@abstractmethod
async def achat(
    self,
    messages: Sequence[ChatMessage],
    **kwargs: Any,
) -> ChatResponse:
    """多模式LLM的异步聊天端点。"""

astream_chat abstractmethod async #

astream_chat(
    messages: Sequence[ChatMessage], **kwargs: Any
) -> ChatResponseAsyncGen

多模式LLM的异步流式聊天端点。

Source code in llama_index/core/multi_modal_llms/base.py
145
146
147
148
149
150
151
@abstractmethod
async def astream_chat(
    self,
    messages: Sequence[ChatMessage],
    **kwargs: Any,
) -> ChatResponseAsyncGen:
    """多模式LLM的异步流式聊天端点。"""

BaseMultiModalComponent #

Bases: QueryComponent

基础LLM组件。

Source code in llama_index/core/multi_modal_llms/base.py
162
163
164
165
166
167
168
169
170
171
172
class BaseMultiModalComponent(QueryComponent):
    """基础LLM组件。"""

    multi_modal_llm: MultiModalLLM = Field(..., description="LLM")
    streaming: bool = Field(default=False, description="Streaming mode")

    class Config:
        arbitrary_types_allowed = True

    def set_callback_manager(self, callback_manager: Any) -> None:
        """设置回调管理器。"""

set_callback_manager #

set_callback_manager(callback_manager: Any) -> None

设置回调管理器。

Source code in llama_index/core/multi_modal_llms/base.py
171
172
def set_callback_manager(self, callback_manager: Any) -> None:
    """设置回调管理器。"""

MultiModalCompleteComponent #

Bases: BaseMultiModalComponent

多模态完成组件。

Source code in llama_index/core/multi_modal_llms/base.py
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
class MultiModalCompleteComponent(BaseMultiModalComponent):
    """多模态完成组件。"""

    def _validate_component_inputs(self, input: Dict[str, Any]) -> Dict[str, Any]:
        """在运行组件期间验证组件输入。"""
        if "prompt" not in input:
            raise ValueError("Prompt must be in input dict.")

        # do special check to see if prompt is a list of chat messages
        if isinstance(input["prompt"], get_args(List[ChatMessage])):
            raise NotImplementedError(
                "Chat messages not yet supported as input to multi-modal model."
            )
        else:
            input["prompt"] = validate_and_convert_stringable(input["prompt"])

        # make sure image documents are valid
        if "image_documents" in input:
            if not isinstance(input["image_documents"], list):
                raise ValueError("image_documents must be a list.")
            for doc in input["image_documents"]:
                if not isinstance(doc, ImageDocument):
                    raise ValueError(
                        "image_documents must be a list of ImageDocument objects."
                    )

        return input

    def _run_component(self, **kwargs: Any) -> Any:
        """运行组件。"""
        # TODO: support only complete for now
        prompt = kwargs["prompt"]
        image_documents = kwargs.get("image_documents", [])
        if self.streaming:
            response = self.multi_modal_llm.stream_complete(prompt, image_documents)
        else:
            response = self.multi_modal_llm.complete(prompt, image_documents)
        return {"output": response}

    async def _arun_component(self, **kwargs: Any) -> Any:
        """运行组件。"""
        # TODO: support only complete for now
        # non-trivial to figure how to support chat/complete/etc.
        prompt = kwargs["prompt"]
        image_documents = kwargs.get("image_documents", [])
        if self.streaming:
            response = await self.multi_modal_llm.astream_complete(
                prompt, image_documents
            )
        else:
            response = await self.multi_modal_llm.acomplete(prompt, image_documents)
        return {"output": response}

    @property
    def input_keys(self) -> InputKeys:
        """输入键。"""
        # TODO: support only complete for now
        return InputKeys.from_keys({"prompt", "image_documents"})

    @property
    def output_keys(self) -> OutputKeys:
        """输出键。"""
        return OutputKeys.from_keys({"output"})

input_keys property #

input_keys: InputKeys

输入键。

output_keys property #

output_keys: OutputKeys

输出键。