11from enum import Enum
22from typing import Any , Optional
33
4- from openai .types .chat import ChatCompletionMessageParam
5- from pydantic import BaseModel
4+ from openai .types .responses import ResponseInputItemParam
5+ from pydantic import BaseModel , Field
66
77
88class AIChatRoles (str , Enum ):
@@ -36,19 +36,39 @@ class ChatRequestContext(BaseModel):
3636
3737
3838class ChatRequest (BaseModel ):
39- messages : list [ChatCompletionMessageParam ]
39+ messages : list [ResponseInputItemParam ]
4040 context : ChatRequestContext
4141 sessionState : Optional [Any ] = None
4242
4343
44+ class ItemPublic (BaseModel ):
45+ id : int
46+ type : str
47+ brand : str
48+ name : str
49+ description : str
50+ price : float
51+
52+ def to_str_for_rag (self ):
53+ return f"Name:{ self .name } Description:{ self .description } Price:{ self .price } Brand:{ self .brand } Type:{ self .type } "
54+
55+
56+ class ItemWithDistance (ItemPublic ):
57+ distance : float
58+
59+ def __init__ (self , ** data ):
60+ super ().__init__ (** data )
61+ self .distance = round (self .distance , 2 )
62+
63+
4464class ThoughtStep (BaseModel ):
4565 title : str
4666 description : Any
4767 props : dict = {}
4868
4969
5070class RAGContext (BaseModel ):
51- data_points : dict [int , dict [ str , Any ] ]
71+ data_points : dict [int , ItemPublic ]
5272 thoughts : list [ThoughtStep ]
5373 followup_questions : Optional [list [str ]] = None
5474
@@ -69,27 +89,39 @@ class RetrievalResponseDelta(BaseModel):
6989 sessionState : Optional [Any ] = None
7090
7191
72- class ItemPublic (BaseModel ):
73- id : int
74- type : str
75- brand : str
76- name : str
77- description : str
78- price : float
79-
80-
81- class ItemWithDistance (ItemPublic ):
82- distance : float
83-
84- def __init__ (self , ** data ):
85- super ().__init__ (** data )
86- self .distance = round (self .distance , 2 )
87-
88-
8992class ChatParams (ChatRequestOverrides ):
9093 prompt_template : str
9194 response_token_limit : int = 1024
9295 enable_text_search : bool
9396 enable_vector_search : bool
9497 original_user_query : str
95- past_messages : list [ChatCompletionMessageParam ]
98+ past_messages : list [ResponseInputItemParam ]
99+
100+
101+ class Filter (BaseModel ):
102+ column : str
103+ comparison_operator : str
104+ value : Any
105+
106+
107+ class PriceFilter (Filter ):
108+ column : str = Field (default = "price" , description = "The column to filter on (always 'price' for this filter)" )
109+ comparison_operator : str = Field (description = "The operator for price comparison ('>', '<', '>=', '<=', '=')" )
110+ value : float = Field (description = "The price value to compare against (e.g., 30.00)" )
111+
112+
113+ class BrandFilter (Filter ):
114+ column : str = Field (default = "brand" , description = "The column to filter on (always 'brand' for this filter)" )
115+ comparison_operator : str = Field (description = "The operator for brand comparison ('=' or '!=')" )
116+ value : str = Field (description = "The brand name to compare against (e.g., 'AirStrider')" )
117+
118+
119+ class SearchResults (BaseModel ):
120+ query : str
121+ """The original search query"""
122+
123+ items : list [ItemPublic ]
124+ """List of items that match the search query and filters"""
125+
126+ filters : list [Filter ]
127+ """List of filters applied to the search results"""
0 commit comments