File size: 1,593 Bytes
fa3eb69
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
from pydantic import BaseModel, RootModel, field_validator
from langchain_core.documents.base import Document
from typing import List, Dict
from uuid import UUID


class DocList(RootModel[List[Document]]):
    model_config = {'validate_assignment': True}


class QuestionObject(RootModel[Dict[str, str]]):
    model_config = {'validate_assignment': True}

    @field_validator('root')
    def validate_key_is_uuid(cls, value):
        for key in value.keys():
            try:
                u = UUID(key)
                if u.version != 4:
                    raise ValueError(f"{key} is not UUID v4")
            except ValueError as e:
                raise ValueError(f"{key} is not UUID v4")
        return value


class ContextObject(RootModel[Dict[str, List[str]]]):
    model_config = {'validate_assignment': True}

    @field_validator('root')
    def validate_key_is_uuid(cls, value):
        for key in value.keys():
            try:
                u = UUID(key)
                if u.version != 4:
                    raise ValueError(f"{key} is not UUID v4")
            except ValueError as e:
                raise ValueError(f"{key} is not UUID v4")
        return value

    @field_validator('root')
    def validate_values_are_uuid(cls, value):
        for key, val in value.items():
            for v in val:
                try:
                    u = UUID(v)
                    if u.version != 4:
                        raise ValueError(f"{key} is not UUID v4")
                except:
                    raise ValueError(f"{key} is not UUID v4")
        return value