added field check

This commit is contained in:
Yannick Stephan
2025-02-16 19:42:09 +01:00
parent 730e2bc8ce
commit 3119f76e26

View File

@@ -626,55 +626,125 @@ class DocumentManager:
class QueryRequest(BaseModel): class QueryRequest(BaseModel):
query: str query: str = Field(
min_length=1,
"""Specifies the retrieval mode""" description="The query text",
mode: Literal["local", "global", "hybrid", "naive", "mix"] = Field(default="hybrid")
"""If True, only returns the retrieved context without generating a response."""
only_need_context: Optional[bool] = Field(default=None)
"""If True, only returns the generated prompt without producing a response."""
only_need_prompt: Optional[bool] = Field(default=None)
"""Defines the response format. Examples: 'Multiple Paragraphs', 'Single Paragraph', 'Bullet Points'."""
response_type: Optional[str] = Field(min_length=1, default=None)
"""Number of top items to retrieve. Represents entities in 'local' mode and relationships in 'global' mode."""
top_k: Optional[int] = Field(gt=1, default=None)
"""Maximum number of tokens allowed for each retrieved text chunk."""
max_token_for_text_unit: Optional[int] = Field(gt=1, default=None)
"""Maximum number of tokens allocated for relationship descriptions in global retrieval."""
max_token_for_global_context: Optional[int] = Field(gt=1, default=None)
"""Maximum number of tokens allocated for entity descriptions in local retrieval."""
max_token_for_local_context: Optional[int] = Field(gt=1, default=None)
"""List of high-level keywords to prioritize in retrieval."""
hl_keywords: Optional[List[str]] = Field(min_length=1, default=None)
"""List of low-level keywords to refine retrieval focus."""
ll_keywords: Optional[List[str]] = Field(min_length=1, default=None)
"""Stores past conversation history to maintain context.
Format: [{"role": "user/assistant", "content": "message"}].
"""
conversation_history: Optional[List[dict[str, Any]]] = Field(
min_length=1, default=None
) )
"""Number of complete conversation turns (user-assistant pairs) to consider in the response context.""" mode: Literal["local", "global", "hybrid", "naive", "mix"] = Field(
history_turns: Optional[int] = Field(gt=1, default=None) default="hybrid",
description="Query mode",
)
only_need_context: Optional[bool] = Field(
default=None,
description="If True, only returns the retrieved context without generating a response.",
)
only_need_prompt: Optional[bool] = Field(
default=None,
description="If True, only returns the generated prompt without producing a response.",
)
response_type: Optional[str] = Field(
min_length=1,
default=None,
description="Defines the response format. Examples: 'Multiple Paragraphs', 'Single Paragraph', 'Bullet Points'.",
)
top_k: Optional[int] = Field(
gt=1,
default=None,
description="Number of top items to retrieve. Represents entities in 'local' mode and relationships in 'global' mode.",
)
max_token_for_text_unit: Optional[int] = Field(
gt=1,
default=None,
description="Maximum number of tokens allowed for each retrieved text chunk.",
)
max_token_for_global_context: Optional[int] = Field(
gt=1,
default=None,
description="Maximum number of tokens allocated for relationship descriptions in global retrieval.",
)
max_token_for_local_context: Optional[int] = Field(
gt=1,
default=None,
description="Maximum number of tokens allocated for entity descriptions in local retrieval.",
)
hl_keywords: Optional[List[str]] = Field(
min_length=1,
default=None,
description="List of high-level keywords to prioritize in retrieval.",
)
ll_keywords: Optional[List[str]] = Field(
min_length=1,
default=None,
description="List of low-level keywords to refine retrieval focus.",
)
conversation_history: Optional[List[dict[str, Any]]] = Field(
min_length=1,
default=None,
description="Stores past conversation history to maintain context. Format: [{'role': 'user/assistant', 'content': 'message'}].",
)
history_turns: Optional[int] = Field(
gt=1,
default=None,
description="Number of complete conversation turns (user-assistant pairs) to consider in the response context.",
)
@field_validator("query", mode="after")
@classmethod
def query_strip_after(cls, query: str) -> str:
return query.strip()
@field_validator("hl_keywords", mode="after")
@classmethod
def hl_keywords_strip_after(cls, hl_keywords: List[str] | None) -> List[str] | None:
if hl_keywords is None:
return None
return [keyword.strip() for keyword in hl_keywords]
@field_validator("ll_keywords", mode="after")
@classmethod
def ll_keywords_strip_after(cls, ll_keywords: List[str] | None) -> List[str] | None:
if ll_keywords is None:
return None
return [keyword.strip() for keyword in ll_keywords]
@field_validator("conversation_history", mode="after")
@classmethod
def conversation_history_role_check(
cls, conversation_history: List[dict[str, Any]] | None
) -> List[dict[str, Any]] | None:
if conversation_history is None:
return None
for msg in conversation_history:
if "role" not in msg or msg["role"] not in {"user", "assistant"}:
raise ValueError(
"Each message must have a 'role' key with value 'user' or 'assistant'."
)
return conversation_history
class QueryResponse(BaseModel): class QueryResponse(BaseModel):
response: str response: str = Field(
description="The generated response",
)
class InsertTextRequest(BaseModel): class InsertTextRequest(BaseModel):
text: str = Field(min_length=1) text: str = Field(
min_length=1,
description="The text to insert",
)
@field_validator("text", mode="after") @field_validator("text", mode="after")
@classmethod @classmethod
@@ -683,7 +753,10 @@ class InsertTextRequest(BaseModel):
class InsertTextsRequest(BaseModel): class InsertTextsRequest(BaseModel):
texts: list[str] = Field(min_length=1) texts: list[str] = Field(
min_length=1,
description="The texts to insert",
)
@field_validator("texts", mode="after") @field_validator("texts", mode="after")
@classmethod @classmethod