aidial_assistant/utils/open_ai.py (56 lines of code) (raw):
from typing import TypedDict
from openai.types.chat import (
ChatCompletionAssistantMessageParam,
ChatCompletionMessageToolCallParam,
ChatCompletionSystemMessageParam,
ChatCompletionToolMessageParam,
ChatCompletionToolParam,
ChatCompletionUserMessageParam,
)
from openai.types.shared_params import FunctionDefinition
class Usage(TypedDict):
prompt_tokens: int
completion_tokens: int
class Property(TypedDict, total=False):
type: str
description: str
def construct_tool(
name: str,
description: str,
properties: dict[str, Property],
required: list[str],
) -> ChatCompletionToolParam:
return ChatCompletionToolParam(
type="function",
function=FunctionDefinition(
name=name,
description=description,
parameters={
"type": "object",
"properties": properties,
"required": required,
},
),
)
def system_message(content: str) -> ChatCompletionSystemMessageParam:
return ChatCompletionSystemMessageParam(role="system", content=content)
def user_message(content: str) -> ChatCompletionUserMessageParam:
return ChatCompletionUserMessageParam(role="user", content=content)
def assistant_message(content: str) -> ChatCompletionAssistantMessageParam:
return ChatCompletionAssistantMessageParam(
role="assistant", content=content
)
def tool_calls_message(
tool_calls: list[ChatCompletionMessageToolCallParam],
) -> ChatCompletionAssistantMessageParam:
return ChatCompletionAssistantMessageParam(
role="assistant", tool_calls=tool_calls
)
def tool_message(
content: str, tool_call_id: str
) -> ChatCompletionToolMessageParam:
return ChatCompletionToolMessageParam(
role="tool",
content=content,
tool_call_id=tool_call_id,
)