@@ -91,82 +91,113 @@ class PersonaUpsertRequest(BaseModel):
91
91
92
92
class PersonaSnapshot (BaseModel ):
93
93
id : int
94
- owner : MinimalUserSnapshot | None
95
94
name : str
96
- is_visible : bool
97
- is_public : bool
98
- display_priority : int | None
99
95
description : str
100
- num_chunks : float | None
101
- llm_relevance_filter : bool
102
- llm_filter_extraction : bool
103
- llm_model_provider_override : str | None
104
- llm_model_version_override : str | None
105
- starter_messages : list [StarterMessage ] | None
106
- builtin_persona : bool
107
- prompts : list [PromptSnapshot ]
108
- tools : list [ToolSnapshot ]
109
- document_sets : list [DocumentSet ]
110
- users : list [MinimalUserSnapshot ]
111
- groups : list [int ]
112
- icon_color : str | None
113
- icon_shape : int | None
96
+ is_public : bool
97
+ is_visible : bool
98
+ icon_shape : int | None = None
99
+ icon_color : str | None = None
114
100
uploaded_image_id : str | None = None
115
- is_default_persona : bool
101
+ user_file_ids : list [int ] = Field (default_factory = list )
102
+ user_folder_ids : list [int ] = Field (default_factory = list )
103
+ display_priority : int | None = None
104
+ is_default_persona : bool = False
105
+ builtin_persona : bool = False
106
+ starter_messages : list [StarterMessage ] | None = None
107
+ tools : list [ToolSnapshot ] = Field (default_factory = list )
108
+ labels : list ["PersonaLabelSnapshot" ] = Field (default_factory = list )
109
+ owner : MinimalUserSnapshot | None = None
110
+ users : list [MinimalUserSnapshot ] = Field (default_factory = list )
111
+ groups : list [int ] = Field (default_factory = list )
112
+ document_sets : list [DocumentSet ] = Field (default_factory = list )
113
+ llm_model_provider_override : str | None = None
114
+ llm_model_version_override : str | None = None
115
+ num_chunks : float | None = None
116
+
117
+ @classmethod
118
+ def from_model (cls , persona : Persona ) -> "PersonaSnapshot" :
119
+ return PersonaSnapshot (
120
+ id = persona .id ,
121
+ name = persona .name ,
122
+ description = persona .description ,
123
+ is_public = persona .is_public ,
124
+ is_visible = persona .is_visible ,
125
+ icon_shape = persona .icon_shape ,
126
+ icon_color = persona .icon_color ,
127
+ uploaded_image_id = persona .uploaded_image_id ,
128
+ user_file_ids = [file .id for file in persona .user_files ],
129
+ user_folder_ids = [folder .id for folder in persona .user_folders ],
130
+ display_priority = persona .display_priority ,
131
+ is_default_persona = persona .is_default_persona ,
132
+ builtin_persona = persona .builtin_persona ,
133
+ starter_messages = persona .starter_messages ,
134
+ tools = [ToolSnapshot .from_model (tool ) for tool in persona .tools ],
135
+ labels = [PersonaLabelSnapshot .from_model (label ) for label in persona .labels ],
136
+ owner = (
137
+ MinimalUserSnapshot (id = persona .user .id , email = persona .user .email )
138
+ if persona .user
139
+ else None
140
+ ),
141
+ users = [
142
+ MinimalUserSnapshot (id = user .id , email = user .email )
143
+ for user in persona .users
144
+ ],
145
+ groups = [user_group .id for user_group in persona .groups ],
146
+ document_sets = [
147
+ DocumentSet .from_model (document_set_model )
148
+ for document_set_model in persona .document_sets
149
+ ],
150
+ llm_model_provider_override = persona .llm_model_provider_override ,
151
+ llm_model_version_override = persona .llm_model_version_override ,
152
+ num_chunks = persona .num_chunks ,
153
+ )
154
+
155
+
156
+ # Model with full context on perona's internal settings
157
+ # This is used for flows which need to know all settings
158
+ class FullPersonaSnapshot (PersonaSnapshot ):
116
159
search_start_date : datetime | None = None
117
- labels : list ["PersonaLabelSnapshot" ] = []
118
- user_file_ids : list [ int ] | None = None
119
- user_folder_ids : list [ int ] | None = None
160
+ prompts : list [PromptSnapshot ] = Field ( default_factory = list )
161
+ llm_relevance_filter : bool = False
162
+ llm_filter_extraction : bool = False
120
163
121
164
@classmethod
122
165
def from_model (
123
166
cls , persona : Persona , allow_deleted : bool = False
124
- ) -> "PersonaSnapshot " :
167
+ ) -> "FullPersonaSnapshot " :
125
168
if persona .deleted :
126
169
error_msg = f"Persona with ID { persona .id } has been deleted"
127
170
if not allow_deleted :
128
171
raise ValueError (error_msg )
129
172
else :
130
173
logger .warning (error_msg )
131
174
132
- return PersonaSnapshot (
175
+ return FullPersonaSnapshot (
133
176
id = persona .id ,
134
177
name = persona .name ,
178
+ description = persona .description ,
179
+ is_public = persona .is_public ,
180
+ is_visible = persona .is_visible ,
181
+ icon_shape = persona .icon_shape ,
182
+ icon_color = persona .icon_color ,
183
+ uploaded_image_id = persona .uploaded_image_id ,
184
+ user_file_ids = [file .id for file in persona .user_files ],
185
+ user_folder_ids = [folder .id for folder in persona .user_folders ],
186
+ display_priority = persona .display_priority ,
187
+ is_default_persona = persona .is_default_persona ,
188
+ builtin_persona = persona .builtin_persona ,
189
+ starter_messages = persona .starter_messages ,
190
+ tools = [ToolSnapshot .from_model (tool ) for tool in persona .tools ],
191
+ labels = [PersonaLabelSnapshot .from_model (label ) for label in persona .labels ],
135
192
owner = (
136
193
MinimalUserSnapshot (id = persona .user .id , email = persona .user .email )
137
194
if persona .user
138
195
else None
139
196
),
140
- is_visible = persona .is_visible ,
141
- is_public = persona .is_public ,
142
- display_priority = persona .display_priority ,
143
- description = persona .description ,
144
- num_chunks = persona .num_chunks ,
197
+ search_start_date = persona .search_start_date ,
198
+ prompts = [PromptSnapshot .from_model (prompt ) for prompt in persona .prompts ],
145
199
llm_relevance_filter = persona .llm_relevance_filter ,
146
200
llm_filter_extraction = persona .llm_filter_extraction ,
147
- llm_model_provider_override = persona .llm_model_provider_override ,
148
- llm_model_version_override = persona .llm_model_version_override ,
149
- starter_messages = persona .starter_messages ,
150
- builtin_persona = persona .builtin_persona ,
151
- is_default_persona = persona .is_default_persona ,
152
- prompts = [PromptSnapshot .from_model (prompt ) for prompt in persona .prompts ],
153
- tools = [ToolSnapshot .from_model (tool ) for tool in persona .tools ],
154
- document_sets = [
155
- DocumentSet .from_model (document_set_model )
156
- for document_set_model in persona .document_sets
157
- ],
158
- users = [
159
- MinimalUserSnapshot (id = user .id , email = user .email )
160
- for user in persona .users
161
- ],
162
- groups = [user_group .id for user_group in persona .groups ],
163
- icon_color = persona .icon_color ,
164
- icon_shape = persona .icon_shape ,
165
- uploaded_image_id = persona .uploaded_image_id ,
166
- search_start_date = persona .search_start_date ,
167
- labels = [PersonaLabelSnapshot .from_model (label ) for label in persona .labels ],
168
- user_file_ids = [file .id for file in persona .user_files ],
169
- user_folder_ids = [folder .id for folder in persona .user_folders ],
170
201
)
171
202
172
203
0 commit comments