@@ -13,14 +13,20 @@ public actor AutoManagedChatGPTMemory: ChatGPTMemory {
1313 }
1414
1515 public var configuration : ChatGPTConfiguration
16+ public var functionProvider : ChatGPTFunctionProvider
1617
1718 static let encoder : TokenEncoder = GPTEncoder ( )
1819
1920 var onHistoryChange : ( ) -> Void = { }
2021
21- public init ( systemPrompt: String , configuration: ChatGPTConfiguration ) {
22+ public init (
23+ systemPrompt: String ,
24+ configuration: ChatGPTConfiguration ,
25+ functionProvider: ChatGPTFunctionProvider
26+ ) {
2227 self . systemPrompt = . init( role: . system, content: systemPrompt)
2328 self . configuration = configuration
29+ self . functionProvider = functionProvider
2430 }
2531
2632 public func mutateHistory( _ update: ( inout [ ChatMessage ] ) -> Void ) {
@@ -48,11 +54,22 @@ public actor AutoManagedChatGPTMemory: ChatGPTMemory {
4854 message. tokensCount = count
4955 return count
5056 }
51-
57+
5258 var all : [ ChatMessage ] = [ ]
5359 let systemMessageTokenCount = countToken ( & systemPrompt)
54- var allTokensCount = systemPrompt. isEmpty ? 0 : systemMessageTokenCount
55-
60+ let functionTokenCount = functionProvider. functions. reduce ( into: 0 ) { partial, function in
61+ var count = encoder. countToken ( text: function. name)
62+ + encoder. countToken ( text: function. description)
63+ if let data = try ? JSONEncoder ( ) . encode ( function. argumentSchema) ,
64+ let string = String ( data: data, encoding: . utf8)
65+ {
66+ count += encoder. countToken ( text: string)
67+ }
68+ partial += count
69+ }
70+ var allTokensCount = functionTokenCount
71+ allTokensCount += systemPrompt. isEmpty ? 0 : systemMessageTokenCount
72+
5673 for (index, message) in history. enumerated ( ) . reversed ( ) {
5774 if maxNumberOfMessages > 0 , all. count >= maxNumberOfMessages { break }
5875 if message. isEmpty { continue }
0 commit comments