defvalidate_provider_credentials(self,credentials:dict) ->None:""" Validate provider credentials You can choose any validate_credentials method of model type or implement validate method by yourself, such as: get model list api if validate failed, raise exception :param credentials: provider credentials, credentials form defined in `provider_credential_schema`. """
defvalidate_credentials(self,model:str,credentials:dict) ->None:""" Validate model credentials :param model: model name :param credentials: model credentials :return: """
@propertydef_invoke_error_mapping(self) -> dict[type[InvokeError], list[type[Exception]]]:""" Map model invoke error to unified error The key is the error type thrown to the caller The value is the error type thrown by the model, which needs to be converted into a unified error type for the caller. :return: Invoke error mapping """
def_invoke(self,model:str,credentials:dict,prompt_messages: list[PromptMessage],model_parameters:dict,tools: Optional[list[PromptMessageTool]]=None,stop: Optional[list[str]]=None,stream:bool=True,user: Optional[str]=None) \-> Union[LLMResult, Generator]:""" Invoke large language model :param model: model name :param credentials: model credentials :param prompt_messages: prompt messages :param model_parameters: model parameters :param tools: tools for tool calling :param stop: stop words :param stream: is stream response :param user: unique user id :return: full response or stream response chunk generator result """
defget_num_tokens(self,model:str,credentials:dict,prompt_messages: list[PromptMessage],tools: Optional[list[PromptMessageTool]]=None) ->int:""" Get number of tokens for given prompt messages :param model: model name :param credentials: model credentials :param prompt_messages: prompt messages :param tools: tools for tool calling :return: """
defget_customizable_model_schema(self,model:str,credentials:dict) -> Optional[AIModelEntity]:""" Get customizable model schema :param model: model name :param credentials: model credentials :return: model schema """
def_invoke(self,model:str,credentials:dict,texts: list[str],user: Optional[str]=None) \-> TextEmbeddingResult:""" Invoke large language model :param model: model name :param credentials: model credentials :param texts: texts to embed :param user: unique user id :return: embeddings result """
defget_num_tokens(self,model:str,credentials:dict,texts: list[str]) ->int:""" Get number of tokens for given prompt messages :param model: model name :param credentials: model credentials :param texts: texts to embed :return: """
def_invoke(self,model:str,credentials:dict,query:str,docs: list[str],score_threshold: Optional[float]=None,top_n: Optional[int]=None,user: Optional[str]=None) \-> RerankResult:""" Invoke rerank model :param model: model name :param credentials: model credentials :param query: search query :param docs: docs for reranking :param score_threshold: score threshold :param top_n: top n :param user: unique user id :return: rerank result """
def_invoke(self,model:str,credentials:dict,file: IO[bytes],user: Optional[str]=None) \->str:""" Invoke large language model :param model: model name :param credentials: model credentials :param file: audio file :param user: unique user id :return: text for given audio file """
def_invoke(self,model:str,credentials:dict,content_text:str,streaming:bool,user: Optional[str]=None):""" Invoke large language model :param model: model name :param credentials: model credentials :param content_text: text content to be translated :param streaming: output is streaming :param user: unique user id :return: translated audio file """
def_invoke(self,model:str,credentials:dict,text:str,user: Optional[str]=None) \->bool:""" Invoke large language model :param model: model name :param credentials: model credentials :param text: text to moderate :param user: unique user id :return: false if text is safe, true otherwise """
classImagePromptMessageContent(PromptMessageContent):""" Model class for image prompt message content. """classDETAIL(Enum): LOW ='low' HIGH ='high'type: PromptMessageContentType = PromptMessageContentType.IMAGE detail: DETAIL = DETAIL.LOW # 解像度
画像とテキストを同時に送信する場合、画像はこのエンティティを content リストの一部として構成する必要があります。
data には、画像の url または base64 エンコードされた文字列を指定できます。
PromptMessage
すべての Role メッセージの基底クラスで、パラメータ定義のみに使用され、インスタンス化はできません。
classPromptMessage(ABC,BaseModel):""" Model class for prompt message. """ role: PromptMessageRole # メッセージの役割 content: Optional[str| list[PromptMessageContent]]=None# 文字列またはコンテンツリストのいずれかを指定できます。コンテンツリストはマルチモーダルに対応するためのもので、詳細は PromptMessageContent の説明を参照してください。 name: Optional[str]=None# 名前(オプション)
UserPromptMessage
ユーザーメッセージを表す UserMessage のメッセージボディです。
classUserPromptMessage(PromptMessage):""" Model class for user prompt message. """ role: PromptMessageRole = PromptMessageRole.USER
AssistantPromptMessage
モデルからの応答メッセージを表し、通常は few-shots やチャット履歴の入力に使用されます。
classAssistantPromptMessage(PromptMessage):""" Model class for assistant prompt message. """classToolCall(BaseModel):""" Model class for assistant prompt message tool call. """classToolCallFunction(BaseModel):""" Model class for assistant prompt message tool call function. """ name:str# ツールの名前 arguments:str# ツールの引数id:str# ツールID。OpenAI のツール呼び出しでのみ有効で、ツール呼び出しの一意なIDです。同じツールを複数回呼び出すことができます。type:str# デフォルトは function function: ToolCallFunction # ツール呼び出し情報 role: PromptMessageRole = PromptMessageRole.ASSISTANT tool_calls: list[ToolCall]= [] # モデルが応答したツール呼び出しの結果です(tools が渡され、モデルがツールを呼び出す必要があると判断した場合のみ返されます)。
classSystemPromptMessage(PromptMessage):""" Model class for system prompt message. """ role: PromptMessageRole = PromptMessageRole.SYSTEM
ToolPromptMessage
ツールメッセージを表し、ツールの実行結果をモデルに渡して、次の計画を立てるために使用されます。
classToolPromptMessage(PromptMessage):""" Model class for tool prompt message. """ role: PromptMessageRole = PromptMessageRole.TOOL tool_call_id:str# ツール呼び出しID。OpenAI のツール呼び出しをサポートしない場合は、ツール名を渡すこともできます。
基底クラスの content にはツールの実行結果を渡します。
PromptMessageTool
classPromptMessageTool(BaseModel):""" Model class for prompt message tool. """ name:str# ツール名 description:str# ツールの説明 parameters:dict# ツールパラメータ(辞書形式)
LLMResult
classLLMResult(BaseModel):""" Model class for llm result. """ model:str# 使用モデル prompt_messages: list[PromptMessage]# プロンプトメッセージリスト message: AssistantPromptMessage # 返信メッセージ usage: LLMUsage # トークン及び費用情報 system_fingerprint: Optional[str]=None# リクエスト指紋(OpenAIの定義に準拠)
LLMResultChunkDelta
ストリーミング結果の各イテレーションにおける差分エンティティ
classLLMResultChunkDelta(BaseModel):""" Model class for llm result chunk delta. """ index:int# 順番 message: AssistantPromptMessage # 返信メッセージ usage: Optional[LLMUsage]=None# トークン及び費用情報(最後のチャンクのみ) finish_reason: Optional[str]=None# 終了理由(最後のチャンクのみ)
LLMResultChunk
ストリーミング結果の各イテレーションエンティティ
classLLMResultChunk(BaseModel):""" Model class for llm result chunk. """ model:str# 使用モデル prompt_messages: list[PromptMessage]# プロンプトメッセージリスト system_fingerprint: Optional[str]=None# リクエスト指紋(OpenAIの定義に準拠) delta: LLMResultChunkDelta # 各イテレーションで変化する内容
classTextEmbeddingResult(BaseModel):""" Model class for text embedding result. """ model:str# 使用モデル embeddings: list[list[float]]# 埋め込みベクトルリスト(テキストに対応) usage: EmbeddingUsage # 使用情報
EmbeddingUsage
classEmbeddingUsage(ModelUsage):""" Model class for embedding usage. """ tokens:int# 使用トークン数 total_tokens:int# 総使用トークン数 unit_price: Decimal # 単価 price_unit: Decimal # 価格単位(単価が適用されるトークン数) total_price: Decimal # 総料金 currency:str# 通貨単位 latency:float# リクエスト処理時間(秒)
RerankResult
classRerankResult(BaseModel):""" Model class for rerank result. """ model:str# 使用モデル docs: list[RerankDocument]# リランク後のドキュメントリスト
RerankDocument
classRerankDocument(BaseModel):""" Model class for rerank document. """ index:int# 元の順番 text:str# ドキュメントテキスト score:float# スコア