confident-ai--deepeval
292 行
7.3 KiB
Python
292 行
7.3 KiB
Python
from pydantic import (
|
|
BaseModel,
|
|
Field,
|
|
AliasChoices,
|
|
ConfigDict,
|
|
model_validator,
|
|
model_serializer,
|
|
)
|
|
from enum import Enum
|
|
import uuid
|
|
from typing import List, Optional, Dict, Any, Union, Type
|
|
from pydantic import TypeAdapter
|
|
|
|
from deepeval.utils import make_model_config
|
|
|
|
###################################
|
|
# Model Settings
|
|
###################################
|
|
|
|
|
|
class ReasoningEffort(Enum):
|
|
MINIMAL = "MINIMAL"
|
|
LOW = "LOW"
|
|
MEDIUM = "MEDIUM"
|
|
HIGH = "HIGH"
|
|
|
|
|
|
class Verbosity(Enum):
|
|
LOW = "LOW"
|
|
MEDIUM = "MEDIUM"
|
|
HIGH = "HIGH"
|
|
|
|
|
|
class ModelProvider(Enum):
|
|
OPEN_AI = "OPEN_AI"
|
|
ANTHROPIC = "ANTHROPIC"
|
|
GEMINI = "GEMINI"
|
|
X_AI = "X_AI"
|
|
DEEPSEEK = "DEEPSEEK"
|
|
BEDROCK = "BEDROCK"
|
|
OPENROUTER = "OPENROUTER"
|
|
|
|
|
|
class ToolMode(Enum):
|
|
ALLOW_ADDITIONAL = "ALLOW_ADDITIONAL"
|
|
NO_ADDITIONAL = "NO_ADDITIONAL"
|
|
STRICT = "STRICT"
|
|
|
|
|
|
class ModelSettings(BaseModel):
|
|
provider: Optional[ModelProvider] = None
|
|
name: Optional[str] = None
|
|
temperature: Optional[float] = None
|
|
max_tokens: Optional[int] = Field(
|
|
default=None,
|
|
serialization_alias="maxTokens",
|
|
validation_alias=AliasChoices("max_tokens", "maxTokens"),
|
|
)
|
|
top_p: Optional[float] = Field(
|
|
default=None,
|
|
serialization_alias="topP",
|
|
validation_alias=AliasChoices("top_p", "topP"),
|
|
)
|
|
frequency_penalty: Optional[float] = Field(
|
|
default=None,
|
|
serialization_alias="frequencyPenalty",
|
|
validation_alias=AliasChoices("frequency_penalty", "frequencyPenalty"),
|
|
)
|
|
presence_penalty: Optional[float] = Field(
|
|
default=None,
|
|
serialization_alias="presencePenalty",
|
|
validation_alias=AliasChoices("presence_penalty", "presencePenalty"),
|
|
)
|
|
stop_sequence: Optional[List[str]] = Field(
|
|
default=None,
|
|
serialization_alias="stopSequence",
|
|
validation_alias=AliasChoices("stop_sequence", "stopSequence"),
|
|
)
|
|
reasoning_effort: Optional[ReasoningEffort] = Field(
|
|
default=None,
|
|
serialization_alias="reasoningEffort",
|
|
validation_alias=AliasChoices("reasoning_effort", "reasoningEffort"),
|
|
)
|
|
verbosity: Optional[Verbosity] = Field(
|
|
default=None,
|
|
serialization_alias="verbosity",
|
|
validation_alias=AliasChoices("verbosity", "verbosity"),
|
|
)
|
|
|
|
|
|
###################################
|
|
# Output Settings
|
|
###################################
|
|
|
|
|
|
class OutputType(Enum):
|
|
TEXT = "TEXT"
|
|
JSON = "JSON"
|
|
SCHEMA = "SCHEMA"
|
|
|
|
|
|
class SchemaDataType(Enum):
|
|
OBJECT = "OBJECT"
|
|
ARRAY = "ARRAY"
|
|
STRING = "STRING"
|
|
FLOAT = "FLOAT"
|
|
INTEGER = "INTEGER"
|
|
BOOLEAN = "BOOLEAN"
|
|
NULL = "NULL"
|
|
|
|
|
|
class OutputSchemaField(BaseModel):
|
|
model_config = make_model_config(use_enum_values=True)
|
|
|
|
id: str
|
|
type: SchemaDataType
|
|
name: str
|
|
description: Optional[str] = None
|
|
required: Optional[bool] = False
|
|
parent_id: Optional[str] = Field(
|
|
default=None,
|
|
serialization_alias="parentId",
|
|
validation_alias=AliasChoices("parent_id", "parentId"),
|
|
)
|
|
|
|
|
|
class OutputSchema(BaseModel):
|
|
id: Optional[str] = None
|
|
fields: Optional[List[OutputSchemaField]] = None
|
|
name: Optional[str] = None
|
|
|
|
|
|
class Tool(BaseModel):
|
|
id: str = Field(default_factory=lambda: str(uuid.uuid4()))
|
|
name: str
|
|
description: str
|
|
mode: ToolMode
|
|
structured_schema: Optional[Union[Type[BaseModel], OutputSchema]] = Field(
|
|
serialization_alias="structuredSchema",
|
|
validation_alias=AliasChoices("structured_schema", "structuredSchema"),
|
|
)
|
|
|
|
@model_validator(mode="after")
|
|
def update_schema(self):
|
|
if not isinstance(self.structured_schema, OutputSchema):
|
|
from deepeval.prompt.utils import construct_output_schema
|
|
|
|
self.structured_schema = construct_output_schema(
|
|
self.structured_schema
|
|
)
|
|
return self
|
|
|
|
@property
|
|
def input_schema(self) -> Dict[str, Any]:
|
|
from deepeval.prompt.utils import output_schema_to_json_schema
|
|
|
|
return output_schema_to_json_schema(self.structured_schema)
|
|
|
|
|
|
###################################
|
|
# Prompt
|
|
###################################
|
|
|
|
|
|
class PromptInterpolationType(Enum):
|
|
MUSTACHE = "MUSTACHE"
|
|
MUSTACHE_WITH_SPACE = "MUSTACHE_WITH_SPACE"
|
|
FSTRING = "FSTRING"
|
|
DOLLAR_BRACKETS = "DOLLAR_BRACKETS"
|
|
JINJA = "JINJA"
|
|
|
|
|
|
class PromptMessage(BaseModel):
|
|
role: str
|
|
content: str
|
|
|
|
|
|
PromptMessageList = TypeAdapter(List[PromptMessage])
|
|
|
|
|
|
class PromptType(Enum):
|
|
TEXT = "TEXT"
|
|
LIST = "LIST"
|
|
|
|
|
|
class PromptVersion(BaseModel):
|
|
id: str
|
|
version: str
|
|
|
|
|
|
class PromptCommit(BaseModel):
|
|
id: str
|
|
hash: str
|
|
message: str
|
|
|
|
|
|
class PromptCommitsHttpResponse(BaseModel):
|
|
commits: List[PromptCommit]
|
|
|
|
|
|
class PromptCreateVersion(BaseModel):
|
|
hash: Optional[str] = None
|
|
|
|
|
|
class PromptVersionsHttpResponse(BaseModel):
|
|
text_versions: Optional[List[PromptVersion]] = Field(
|
|
None,
|
|
serialization_alias="textVersions",
|
|
validation_alias=AliasChoices("text_versions", "textVersions"),
|
|
)
|
|
messages_versions: Optional[List[PromptVersion]] = Field(
|
|
None,
|
|
serialization_alias="messagesVersions",
|
|
validation_alias=AliasChoices("messages_versions", "messagesVersions"),
|
|
)
|
|
|
|
|
|
class PromptHttpResponse(BaseModel):
|
|
id: str
|
|
hash: str
|
|
version: Optional[str] = None
|
|
label: Optional[str] = None
|
|
text: Optional[str] = None
|
|
messages: Optional[List[PromptMessage]] = None
|
|
interpolation_type: PromptInterpolationType = Field(
|
|
serialization_alias="interpolationType"
|
|
)
|
|
type: PromptType
|
|
model_settings: Optional[ModelSettings] = Field(
|
|
default=None,
|
|
serialization_alias="modelSettings",
|
|
validation_alias=AliasChoices("model_settings", "modelSettings"),
|
|
)
|
|
output_type: Optional[OutputType] = Field(
|
|
default=None,
|
|
serialization_alias="outputType",
|
|
validation_alias=AliasChoices("output_type", "outputType"),
|
|
)
|
|
output_schema: Optional[OutputSchema] = Field(
|
|
default=None,
|
|
serialization_alias="outputSchema",
|
|
validation_alias=AliasChoices("output_schema", "outputSchema"),
|
|
)
|
|
tools: Optional[List[Tool]] = None
|
|
branch: Optional[str] = None
|
|
|
|
|
|
class PromptPushRequest(BaseModel):
|
|
model_config = make_model_config(use_enum_values=True)
|
|
|
|
model_config = ConfigDict(use_enum_values=True)
|
|
|
|
alias: str
|
|
text: Optional[str] = None
|
|
messages: Optional[List[PromptMessage]] = None
|
|
tools: Optional[List[Tool]] = None
|
|
interpolation_type: PromptInterpolationType = Field(
|
|
serialization_alias="interpolationType"
|
|
)
|
|
model_settings: Optional[ModelSettings] = Field(
|
|
default=None, serialization_alias="modelSettings"
|
|
)
|
|
output_schema: Optional[OutputSchema] = Field(
|
|
default=None, serialization_alias="outputSchema"
|
|
)
|
|
output_type: Optional[OutputType] = Field(
|
|
default=None, serialization_alias="outputType"
|
|
)
|
|
branch: Optional[str] = None
|
|
|
|
|
|
class PromptApi(BaseModel):
|
|
id: str
|
|
type: PromptType
|
|
|
|
|
|
class PromptBranch(BaseModel):
|
|
id: str
|
|
name: str
|
|
|
|
|
|
class PromptBranchesHttpResponse(BaseModel):
|
|
branches: List[PromptBranch]
|
|
|
|
|
|
class PromptCreateBranchRequest(BaseModel):
|
|
branch: str
|
|
|
|
|
|
class PromptUpdateBranchRequest(BaseModel):
|
|
name: str
|