def validate_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`.
"""
@property
def _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 get_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:
"""
def get_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
"""
def get_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,
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
"""
class ImagePromptMessageContent(PromptMessageContent):
"""
Model class for image prompt message content.
"""
class DETAIL(Enum):
LOW = 'low'
HIGH = 'high'
type: PromptMessageContentType = PromptMessageContentType.IMAGE
detail: DETAIL = DETAIL.LOW # 解像度
画像とテキストを同時に送信する場合、画像はこのエンティティを content リストの一部として構成する必要があります。
data には、画像の url または base64 エンコードされた文字列を指定できます。
PromptMessage
すべての Role メッセージの基底クラスで、パラメータ定義のみに使用され、インスタンス化はできません。
class PromptMessage(ABC, BaseModel):
"""
Model class for prompt message.
"""
role: PromptMessageRole # メッセージの役割
content: Optional[str | list[PromptMessageContent]] = None # 文字列またはコンテンツリストのいずれかを指定できます。コンテンツリストはマルチモーダルに対応するためのもので、詳細は PromptMessageContent の説明を参照してください。
name: Optional[str] = None # 名前(オプション)
UserPromptMessage
ユーザーメッセージを表す UserMessage のメッセージボディです。
class UserPromptMessage(PromptMessage):
"""
Model class for user prompt message.
"""
role: PromptMessageRole = PromptMessageRole.USER
AssistantPromptMessage
モデルからの応答メッセージを表し、通常は few-shots やチャット履歴の入力に使用されます。
class AssistantPromptMessage(PromptMessage):
"""
Model class for assistant prompt message.
"""
class ToolCall(BaseModel):
"""
Model class for assistant prompt message tool call.
"""
class ToolCallFunction(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 が渡され、モデルがツールを呼び出す必要があると判断した場合のみ返されます)。
class SystemPromptMessage(PromptMessage):
"""
Model class for system prompt message.
"""
role: PromptMessageRole = PromptMessageRole.SYSTEM
ToolPromptMessage
ツールメッセージを表し、ツールの実行結果をモデルに渡して、次の計画を立てるために使用されます。
class ToolPromptMessage(PromptMessage):
"""
Model class for tool prompt message.
"""
role: PromptMessageRole = PromptMessageRole.TOOL
tool_call_id: str # ツール呼び出しID。OpenAI のツール呼び出しをサポートしない場合は、ツール名を渡すこともできます。
基底クラスの content にはツールの実行結果を渡します。
PromptMessageTool
class PromptMessageTool(BaseModel):
"""
Model class for prompt message tool.
"""
name: str # ツール名
description: str # ツールの説明
parameters: dict # ツールパラメータ(辞書形式)
LLMResult
class LLMResult(BaseModel):
"""
Model class for llm result.
"""
model: str # 使用モデル
prompt_messages: list[PromptMessage] # プロンプトメッセージリスト
message: AssistantPromptMessage # 返信メッセージ
usage: LLMUsage # トークン及び費用情報
system_fingerprint: Optional[str] = None # リクエスト指紋(OpenAIの定義に準拠)
LLMResultChunkDelta
ストリーミング結果の各イテレーションにおける差分エンティティ
class LLMResultChunkDelta(BaseModel):
"""
Model class for llm result chunk delta.
"""
index: int # 順番
message: AssistantPromptMessage # 返信メッセージ
usage: Optional[LLMUsage] = None # トークン及び費用情報(最後のチャンクのみ)
finish_reason: Optional[str] = None # 終了理由(最後のチャンクのみ)
LLMResultChunk
ストリーミング結果の各イテレーションエンティティ
class LLMResultChunk(BaseModel):
"""
Model class for llm result chunk.
"""
model: str # 使用モデル
prompt_messages: list[PromptMessage] # プロンプトメッセージリスト
system_fingerprint: Optional[str] = None # リクエスト指紋(OpenAIの定義に準拠)
delta: LLMResultChunkDelta # 各イテレーションで変化する内容
LLMUsage
class LLMUsage(ModelUsage):
"""
Model class for llm usage.
"""
prompt_tokens: int # プロンプト使用トークン数
prompt_unit_price: Decimal # プロンプト単価
prompt_price_unit: Decimal # プロンプト価格単位(単価が適用されるトークン数)
prompt_price: Decimal # プロンプト料金
completion_tokens: int # 回答使用トークン数
completion_unit_price: Decimal # 回答単価
completion_price_unit: Decimal # 回答価格単位(単価が適用されるトークン数)
completion_price: Decimal # 回答料金
total_tokens: int # 総使用トークン数
total_price: Decimal # 総料金
currency: str # 通貨単位
latency: float # リクエスト処理時間(秒)
TextEmbeddingResult
class TextEmbeddingResult(BaseModel):
"""
Model class for text embedding result.
"""
model: str # 使用モデル
embeddings: list[list[float]] # 埋め込みベクトルリスト(テキストに対応)
usage: EmbeddingUsage # 使用情報
EmbeddingUsage
class EmbeddingUsage(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
class RerankResult(BaseModel):
"""
Model class for rerank result.
"""
model: str # 使用モデル
docs: list[RerankDocument] # リランク後のドキュメントリスト
RerankDocument
class RerankDocument(BaseModel):
"""
Model class for rerank document.
"""
index: int # 元の順番
text: str # ドキュメントテキスト
score: float # スコア