1
- from typing import TYPE_CHECKING , List , Callable , Optional
1
+ from typing import TYPE_CHECKING , List , Callable , Optional , SupportsIndex
2
2
import os
3
3
4
4
from Pieces ._pieces_lib .pieces_os_client .models .anchors import Anchors
8
8
from Pieces ._pieces_lib .pieces_os_client .models .seeds import Seeds
9
9
from Pieces ._pieces_lib .pieces_os_client .models .flattened_conversation_messages import FlattenedConversationMessages
10
10
from Pieces ._pieces_lib .pieces_os_client .models .temporal_range_grounding import TemporalRangeGrounding
11
- from Pieces ._pieces_lib .pieces_os_client .wrapper .basic_identifier .anchor import BasicAnchor
12
11
12
+ from .basic_identifier import BasicAsset , BasicMessage , BasicAnchor
13
13
from .long_term_memory import LongTermMemory
14
14
15
15
if TYPE_CHECKING :
16
- from .basic_identifier import BasicAsset ,BasicMessage
17
16
from . import PiecesClient
18
17
from .copilot import Copilot
18
+ from .basic_identifier import BasicChat
19
19
20
20
class ValidatedContextList (List ):
21
21
"""
@@ -61,15 +61,23 @@ def __add__(self, other):
61
61
new_list .append (value )
62
62
return new_list
63
63
64
- def pop (self , index : int = - 1 ):
64
+ def pop (self , index : SupportsIndex = - 1 ):
65
65
value = super ().pop (index )
66
66
self .on_remove (index )
67
67
return value
68
68
69
+ def clear (self , ** kwargs ):
70
+ if kwargs .get ("_notifiy" , True ):
71
+ for item in range (len (self )):
72
+ self .on_remove (item )
73
+
74
+ super ().clear ()
75
+
76
+
69
77
class Context :
70
78
def __init__ (self ,
71
79
pieces_client : "PiecesClient" ,
72
- copilot : "Copilot" = None ,
80
+ copilot : "Copilot" ,
73
81
paths : List [str ] = None ,
74
82
raw_assets : List [str ] = None ,
75
83
assets : List ["BasicAsset" ] = None ,
@@ -88,12 +96,12 @@ def __init__(self,
88
96
self ._messages : FlattenedConversationMessages = FlattenedConversationMessages (iterable = [])
89
97
self ._paths : Anchors = Anchors (iterable = [])
90
98
91
- def clear (self ):
99
+ def clear (self , ** kwargs ):
92
100
"""Clears the Copilot context"""
93
- self .raw_assets = []
94
- self .paths = []
95
- self .assets = []
96
- self .messages = []
101
+ self .raw_assets . clear ( _notifiy = kwargs . get ( "_notifiy" , True ))
102
+ self .paths . clear ( _notifiy = kwargs . get ( "_notifiy" , True ))
103
+ self .assets . clear ( _notifiy = kwargs . get ( "_notifiy" , True ))
104
+ self .messages . clear ( _notifiy = kwargs . get ( "_notifiy" , True ))
97
105
self ._paths = Anchors (iterable = [])
98
106
self ._assets = Assets (iterable = [])
99
107
self ._raw_assets = Seeds (iterable = [])
@@ -128,6 +136,8 @@ def _add_message(self, message):
128
136
if not isinstance (message , BasicMessage ):
129
137
raise ValueError ("Message should be BasicMessage type" )
130
138
self ._messages .iterable .append (message .message )
139
+ if not self .copilot .chat :
140
+ self .copilot .create_chat ()
131
141
self .copilot .chat .associate_message (message )
132
142
133
143
def _remove_message (self , index : int ):
@@ -138,6 +148,8 @@ def _add_asset(self, asset):
138
148
if not isinstance (asset , BasicAsset ):
139
149
raise ValueError ("Snippet content should be BasicAsset type" )
140
150
self ._assets .iterable .append (asset .asset )
151
+ if not self .copilot .chat :
152
+ self .copilot .create_chat ()
141
153
self .copilot .chat .associate_asset (asset )
142
154
143
155
def _remove_asset (self , index : int ):
@@ -148,7 +160,9 @@ def _add_path(self,path):
148
160
if not os .path .exists (path ):
149
161
raise ValueError ("Invalid path in the context" )
150
162
anchor = BasicAnchor .from_raw_content (path )
151
- self ._paths .iterable .append (anchor )
163
+ self ._paths .iterable .append (anchor .anchor )
164
+ if not self .copilot .chat :
165
+ self .copilot .create_chat ()
152
166
self .copilot .chat .associate_anchor (anchor )
153
167
154
168
def _remove_path (self , index : int ):
@@ -163,3 +177,19 @@ def _add_raw_asset(self, asset: str):
163
177
def _remove_raw_asset (self , index : int ):
164
178
self ._raw_assets .iterable .pop (index )
165
179
180
+ def _init (self , chat : "BasicChat" ):
181
+ self .clear (_notifiy = False )
182
+ self .assets .extend (
183
+ chat ._from_indices (
184
+ getattr (chat .conversation .assets ,"indices" ,{}),
185
+ lambda id : BasicAsset (id )
186
+ )
187
+ )
188
+ ls = chat ._from_indices (
189
+ getattr (chat .conversation .anchors ,"indices" ,{}),
190
+ lambda id : BasicAnchor (id ).fullpath
191
+ )
192
+ ls = [item for sublist in ls for item in sublist ]
193
+
194
+ self .paths .extend (ls )
195
+
0 commit comments