Skip to content

Commit fa7dc18

Browse files
committed
Merge branch 'release/0.27.0'
2 parents cd41739 + 21985b9 commit fa7dc18

File tree

52 files changed

+1098
-431
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+1098
-431
lines changed

Core/Package.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,9 @@ let package = Package(
200200
.product(name: "OpenAIService", package: "Tool"),
201201
.product(name: "AppMonitoring", package: "Tool"),
202202
.product(name: "ComposableArchitecture", package: "swift-composable-architecture"),
203-
]
203+
].pro([
204+
"ProService",
205+
])
204206
),
205207
.testTarget(name: "PromptToCodeServiceTests", dependencies: ["PromptToCodeService"]),
206208

Core/Sources/ChatContextCollectors/SystemInfoChatContextCollector/SystemInfoChatContextCollector.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public final class SystemInfoChatContextCollector: ChatContextCollector {
1313

1414
public func generateContext(
1515
history: [ChatMessage],
16-
scopes: Set<String>,
16+
scopes: Set<ChatContext.Scope>,
1717
content: String,
1818
configuration: ChatGPTConfiguration
1919
) -> ChatContext {

Core/Sources/ChatContextCollectors/WebChatContextCollector/WebChatContextCollector.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@ public final class WebChatContextCollector: ChatContextCollector {
99

1010
public func generateContext(
1111
history: [ChatMessage],
12-
scopes: Set<String>,
12+
scopes: Set<ChatContext.Scope>,
1313
content: String,
1414
configuration: ChatGPTConfiguration
1515
) -> ChatContext {
16-
guard scopes.contains("web") || scopes.contains("w") else { return .empty }
16+
guard scopes.contains(.web) else { return .empty }
1717
let links = Self.detectLinks(from: history) + Self.detectLinks(from: content)
1818
let functions: [(any ChatGPTFunction)?] = [
1919
SearchFunction(maxTokens: configuration.maxTokens),

Core/Sources/ChatGPTChatTab/Chat.swift

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,13 @@ struct Chat: ReducerProtocol {
5151
case observeIsReceivingMessageChange
5252
case observeSystemPromptChange
5353
case observeExtraSystemPromptChange
54+
case observeDefaultScopesChange
5455

5556
case historyChanged
5657
case isReceivingMessageChanged
5758
case systemPromptChanged
5859
case extraSystemPromptChanged
60+
case defaultScopesChanged
5961

6062
case chatMenu(ChatMenu.Action)
6163
}
@@ -68,6 +70,7 @@ struct Chat: ReducerProtocol {
6870
case observeIsReceivingMessageChange(UUID)
6971
case observeSystemPromptChange(UUID)
7072
case observeExtraSystemPromptChange(UUID)
73+
case observeDefaultScopesChange(UUID)
7174
}
7275

7376
var body: some ReducerProtocol<State, Action> {
@@ -131,6 +134,7 @@ struct Chat: ReducerProtocol {
131134
await send(.observeIsReceivingMessageChange)
132135
await send(.observeSystemPromptChange)
133136
await send(.observeExtraSystemPromptChange)
137+
await send(.observeDefaultScopesChange)
134138
}
135139

136140
case .observeHistoryChange:
@@ -198,6 +202,22 @@ struct Chat: ReducerProtocol {
198202
}
199203
}.cancellable(id: CancelID.observeExtraSystemPromptChange(id), cancelInFlight: true)
200204

205+
case .observeDefaultScopesChange:
206+
return .run { send in
207+
let stream = AsyncStream<Void> { continuation in
208+
let cancellable = service.$defaultScopes
209+
.sink { _ in
210+
continuation.yield()
211+
}
212+
continuation.onTermination = { _ in
213+
cancellable.cancel()
214+
}
215+
}
216+
for await _ in stream {
217+
await send(.defaultScopesChanged)
218+
}
219+
}.cancellable(id: CancelID.observeDefaultScopesChange(id), cancelInFlight: true)
220+
201221
case .historyChanged:
202222
state.history = service.chatHistory.map { message in
203223
.init(
@@ -250,6 +270,10 @@ struct Chat: ReducerProtocol {
250270
state.chatMenu.extraSystemPrompt = service.extraSystemPrompt
251271
return .none
252272

273+
case .defaultScopesChanged:
274+
state.chatMenu.defaultScopes = service.defaultScopes
275+
return .none
276+
253277
case .binding:
254278
return .none
255279

@@ -266,6 +290,7 @@ struct ChatMenu: ReducerProtocol {
266290
var extraSystemPrompt: String = ""
267291
var temperatureOverride: Double? = nil
268292
var chatModelIdOverride: String? = nil
293+
var defaultScopes: Set<ChatService.Scope> = []
269294
}
270295

271296
enum Action: Equatable {
@@ -274,6 +299,8 @@ struct ChatMenu: ReducerProtocol {
274299
case temperatureOverrideSelected(Double?)
275300
case chatModelIdOverrideSelected(String?)
276301
case customCommandButtonTapped(CustomCommand)
302+
case resetDefaultScopesButtonTapped
303+
case toggleScope(ChatService.Scope)
277304
}
278305

279306
let service: ChatService
@@ -304,6 +331,15 @@ struct ChatMenu: ReducerProtocol {
304331
return .run { _ in
305332
try await service.handleCustomCommand(command)
306333
}
334+
335+
case .resetDefaultScopesButtonTapped:
336+
return .run { _ in
337+
service.resetDefaultScopes()
338+
}
339+
case let .toggleScope(scope):
340+
return .run { _ in
341+
service.defaultScopes.formSymmetricDifference([scope])
342+
}
307343
}
308344
}
309345
}

Core/Sources/ChatGPTChatTab/ChatContextMenu.swift

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import AppKit
2+
import ChatService
23
import ComposableArchitecture
34
import SharedUIComponents
45
import SwiftUI
@@ -30,6 +31,7 @@ struct ChatContextMenu: View {
3031

3132
chatModel
3233
temperature
34+
defaultScopes
3335

3436
Divider()
3537

@@ -153,6 +155,34 @@ struct ChatContextMenu: View {
153155
}
154156
}
155157

158+
@ViewBuilder
159+
var defaultScopes: some View {
160+
Menu("Default Scopes") {
161+
WithViewStore(store, observe: \.defaultScopes) { viewStore in
162+
Button(action: {
163+
store.send(.resetDefaultScopesButtonTapped)
164+
}) {
165+
Text("Reset Default Scopes")
166+
}
167+
168+
Divider()
169+
170+
ForEach(ChatService.Scope.allCases, id: \.rawValue) { value in
171+
Button(action: {
172+
viewStore.send(.toggleScope(value))
173+
}) {
174+
HStack {
175+
Text("@" + value.rawValue)
176+
if viewStore.state.contains(value) {
177+
Image(systemName: "checkmark")
178+
}
179+
}
180+
}
181+
}
182+
}
183+
}
184+
}
185+
156186
var customCommandMenu: some View {
157187
Menu("Custom Commands") {
158188
ForEach(

Core/Sources/ChatGPTChatTab/ChatGPTChatTab.swift

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
import ChatContextCollector
12
import ChatService
23
import ChatTab
4+
import CodableWrappers
35
import Combine
46
import ComposableArchitecture
57
import Foundation
@@ -21,6 +23,7 @@ public class ChatGPTChatTab: ChatTab {
2123
var configuration: OverridingChatGPTConfiguration.Overriding
2224
var systemPrompt: String
2325
var extraSystemPrompt: String
26+
var defaultScopes: Set<ChatContext.Scope>?
2427
}
2528

2629
struct Builder: ChatTabBuilder {
@@ -65,7 +68,8 @@ public class ChatGPTChatTab: ChatTab {
6568
history: await service.memory.history,
6669
configuration: service.configuration.overriding,
6770
systemPrompt: service.systemPrompt,
68-
extraSystemPrompt: service.extraSystemPrompt
71+
extraSystemPrompt: service.extraSystemPrompt,
72+
defaultScopes: service.defaultScopes
6973
)
7074
return (try? JSONEncoder().encode(state)) ?? Data()
7175
}
@@ -79,6 +83,9 @@ public class ChatGPTChatTab: ChatTab {
7983
tab.service.configuration.overriding = state.configuration
8084
tab.service.mutateSystemPrompt(state.systemPrompt)
8185
tab.service.mutateExtraSystemPrompt(state.extraSystemPrompt)
86+
if let scopes = state.defaultScopes {
87+
tab.service.defaultScopes = scopes
88+
}
8289
await tab.service.memory.mutateHistory { history in
8390
history = state.history
8491
}

0 commit comments

Comments
 (0)