693cd952cd
仓库首次入库(此前仅存在于本地工作区与测试服构建产物中,未上传)。 改动(src/knowledge_adapter/asset_content_processor.py): - 新增 _TRUNCATED_TRAILING_MARKDOWN_RESOURCE_IMAGE 规则,清除 chunk 末尾被截断的  - 回归测试 tests/test_asset_content_processor.py:: test_truncated_trailing_markdown_resource_image_is_removed 验证证据: - 测试服 120.76.217.51,镜像 knowledge-adapter-service:reviewed-test-aeab4b5fca2d (release aeab4b5fca2d8661):KB d015d05c-25c8-4d63-b2ab-e8590d3c2dfb 5 个查询全部 http=200、records=5、残留 resource:// = 0;KB b9dacd62 无退化;容器日志无 error/exception - 本地:pytest 141 项全通过、ruff 全通过 - 该文件与 258c31e0fe07fd08 源码的差异经逐文件 md5 比对,为唯一变更文件
57 lines
1.5 KiB
Python
57 lines
1.5 KiB
Python
from typing import Any
|
|
from uuid import UUID
|
|
|
|
from pydantic import BaseModel, ConfigDict, Field, field_validator, model_validator
|
|
|
|
|
|
class RetrievalSetting(BaseModel):
|
|
model_config = ConfigDict(extra="forbid")
|
|
|
|
top_k: int = Field(ge=1)
|
|
score_threshold: float = Field(ge=0, le=1)
|
|
|
|
|
|
class MetadataCondition(BaseModel):
|
|
model_config = ConfigDict(extra="forbid")
|
|
|
|
logical_operator: str | None = None
|
|
conditions: list[dict[str, Any]] = Field(default_factory=list)
|
|
|
|
@model_validator(mode="after")
|
|
def reject_nonempty_conditions(self) -> "MetadataCondition":
|
|
if self.conditions:
|
|
raise ValueError("metadata conditions are not supported")
|
|
return self
|
|
|
|
|
|
class RetrievalRequest(BaseModel):
|
|
model_config = ConfigDict(extra="forbid")
|
|
|
|
knowledge_id: UUID
|
|
query: str
|
|
retrieval_setting: RetrievalSetting
|
|
metadata_condition: MetadataCondition | None = None
|
|
|
|
@field_validator("query")
|
|
@classmethod
|
|
def strip_nonempty_query(cls, value: str) -> str:
|
|
normalized = value.strip()
|
|
if not normalized:
|
|
raise ValueError("query must not be empty")
|
|
return normalized
|
|
|
|
|
|
class WeKnoraChunk(BaseModel):
|
|
model_config = ConfigDict(extra="ignore", allow_inf_nan=False)
|
|
|
|
id: UUID
|
|
content: str
|
|
score: float
|
|
knowledge_base_id: UUID
|
|
knowledge_id: UUID
|
|
knowledge_title: str = ""
|
|
knowledge_filename: str = ""
|
|
chunk_index: int
|
|
chunk_type: str
|
|
image_info: str = ""
|