File size: 2,814 Bytes
f171e60
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
from pydantic import BaseModel, Field
from typing import Optional, List, Dict, Any
from enum import Enum

class LLMProvider(str, Enum):
    OPENAI = "openai"
    GROQ = "groq"

class MessageRole(str, Enum):
    SYSTEM = "system"
    USER = "user"
    ASSISTANT = "assistant"

class Message(BaseModel):
    role: MessageRole
    content: str

    class Config:
        json_schema_extra = {
            "example": {
                "role": "user",
                "content": "Hello, how are you?"
            }
        }

class ChatRequest(BaseModel):
    messages: List[Message] = Field(
        ...,
        description = "List các message trong conversation",
        min_length = 1
    )

    provider: LLMProvider = Field(
        default=LLMProvider.OPENAI,
        description="LLM provider để sử dụng"
    )

    model: Optional[str] = Field(
        default=None,
        description="Model cụ thể"
    )

    temperature: float = Field(
        default=0.7,
        ge=0.0,
        le=2.0,
        description="Creativity level of the response (0-2)"
    )

    max_tokens: Optional[int] = Field(
        default=1000,
        ge=1,
        le=4000,
        description="Max token in the response (1-4000)"
    )

    stream: bool = Field(
        default=False,
        description="Enable streaming response"
    )

    class Config:
        json_schoma_extra = {
            "example": {
                "messages": [
                    {"rold": "user", "content": "Hello, how are you?"}
                ],
                "provider": "openai",
                "model": "gpt-4o-mini",
                "temperature": 0.5,
                "max_tokens": 1000,
                # "stream": True
            }
        }

class CompletionRequest(BaseModel):
    prompt: str = Field(
        ...,
        description="Prompt text to generate completion",
        min_length=1
    )

    provider: LLMProvider = Field(
        default=LLMProvider.OPENAI,
        description="LLM provider để sử dụng"
    )

    model: Optional[str] = Field(
        default=None,
        description="Model cụ thể"
    )

    temperature: float = Field(
        default=0.7,
        ge=0.0,
        le=2.0
    )

    max_tokens: Optional[int] = Field(
        default=500,
        ge=1,
        le=4000
    )

    system_prompt: Optional[str] = Field(
        default=None,
        description="System prompt để định hướng behavior"
    )
    
    class Config:
        json_schema_extra = {
            "example": {
                "prompt": "Viết một đoạn giới thiệu về AI",
                "provider": "openai",
                "temperature": 0.5,
                "max_tokens": 1000,
                "system_prompt": "Bạn là một chuyên gia về AI"
            }
        }