from dataclasses import dataclass from typing import Dict, List, Optional, Annotated from pydantic import BaseModel, BeforeValidator, Field, field_validator # Use Pydantic's Field from semantic_kernel.data import ( DistanceFunction, IndexKind, VectorStoreRecordDataField, VectorStoreRecordKeyField, VectorStoreRecordVectorField, vectorstoremodel ) class LampConnections(BaseModel): min: float max: float @field_validator('min', 'max', mode='before') def convert_values(cls, v): v_str = str(v) # Handle comma decimals v_str = v_str.replace(',', '.') return float(v_str) class VoltageRange(BaseModel): min: float max: float @field_validator('min', 'max', mode='before') def convert_values(cls, v): v_str = str(v) # Handle comma decimals v_str = v_str.replace(',', '.') return float(v_str) @vectorstoremodel class PowerConverterVector(BaseModel): id: Annotated[str, VectorStoreRecordKeyField]=Field(None, alias="id") artnr: Annotated[int, VectorStoreRecordDataField()] = Field(..., alias="artnr") ip: Annotated[int, VectorStoreRecordDataField()] = Field(..., alias="ip") type: Annotated[str, VectorStoreRecordDataField()] = Field(None, alias="type") lamps: Dict[str, LampConnections] = None name: Annotated[str, VectorStoreRecordDataField()] = Field(None, alias="name") efficiency_full_load: Annotated[float, VectorStoreRecordDataField()] = Field(None, alias="efficiency_full_load") pdf_link: Annotated[str, VectorStoreRecordDataField()] = None converter_description: Annotated[str, VectorStoreRecordDataField()] = Field(None, alias="converter_description") nom_input_voltage: Optional[VoltageRange] = Field(None, alias="nom_input_voltage_v") output_voltage: Optional[VoltageRange] = Field(None, alias="output_voltage_v") unit: Annotated[str, VectorStoreRecordDataField()] = Field(None, alias="unit") price: Annotated[float, VectorStoreRecordDataField()] = Field(None, alias="listprice") life_cycle: Annotated[str, VectorStoreRecordDataField()] = Field(None, alias="lifecycle") size: Annotated[str, VectorStoreRecordDataField()] = Field(None, alias="size") ccr_amplitude: Annotated[str, VectorStoreRecordDataField()] = Field(None, alias="ccr_amplitude") dimmability: Annotated[str, VectorStoreRecordDataField()] = Field(None, alias="dimmability") dim_list_type: Annotated[str, VectorStoreRecordDataField()] = Field(None, alias="dimlist_type") gross_weight: Annotated[float, VectorStoreRecordDataField()] = Field(None, alias="gross_weight") strain_relief: Annotated[str, VectorStoreRecordDataField()] = Field(None, alias="strain_relief") embedding: Annotated[List[float], VectorStoreRecordVectorField( dimensions=1536, distance_function=DistanceFunction.COSINE_DISTANCE, index_kind=IndexKind.DISK_ANN )] = Field(default_factory=list)