Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -276,6 +276,7 @@ final class AgentSelectedFilesModelCoordinator: ObservableObject {
private var cachedModels: [AgentSelectedFilesModelIdentity: AgentContextExportModel] = [:]
private var cachedModelOrder: [AgentSelectedFilesModelIdentity] = []
private var completedCountSnapshots: [AgentSelectedFilesModelIdentity: AgentContextFileCodemapCountSummary] = [:]
private var completedEntryMetricsSnapshots: [AgentSelectedFilesModelIdentity: PromptContextEntryMetricsSnapshot] = [:]

private struct VisibleFileMetricsScope: Equatable {
let filePathDisplay: FilePathDisplay
Expand Down Expand Up @@ -337,8 +338,14 @@ final class AgentSelectedFilesModelCoordinator: ObservableObject {
func refreshAfterTokenMetricsCompletion(
_ request: AgentSelectedFilesModelRequest
) -> AgentSelectedFilesRefreshOutcome? {
guard request.entryMetricsSnapshot != nil else { return nil }
guard let entryMetricsSnapshot = request.entryMetricsSnapshot else { return nil }
guard displayedModelMatches(request.identity) || loadingIdentity == request.identity else { return nil }
if completedDisplayedModelMatches(request.identity),
completedEntryMetricsSnapshots[request.identity] == entryMetricsSnapshot
{
debugStats.skippedLoaded += 1
return .skippedLoaded
}
return refresh(
request,
force: true,
Expand Down Expand Up @@ -542,6 +549,7 @@ final class AgentSelectedFilesModelCoordinator: ObservableObject {
canMutateDisplayedModel: true
)
completedCountSnapshots[request.identity] = resolvedRowSplit.fileCodemapCountSummary
completedEntryMetricsSnapshots[request.identity] = request.entryMetricsSnapshot
cacheModel(resolvedModel, for: request.identity)
loadedIdentity = request.identity
displayedIdentity = request.identity
Expand Down Expand Up @@ -731,6 +739,7 @@ final class AgentSelectedFilesModelCoordinator: ObservableObject {
let evicted = cachedModelOrder.removeFirst()
cachedModels[evicted] = nil
completedCountSnapshots[evicted] = nil
completedEntryMetricsSnapshots[evicted] = nil
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -337,7 +337,7 @@ private struct AgentContextInspectorPresenter<PrimaryContent: View>: View {
let drawerStore: AgentContextDrawerUIStore
@ObservedObject var presentationStore: AgentContextDrawerPresentationStore
let promptManager: PromptViewModel
@ObservedObject var runtimeVM: AgentRuntimeSidebarViewModel
let runtimeVM: AgentRuntimeSidebarViewModel
let contextBuilderAgentVM: ContextBuilderAgentViewModel
let oracleViewModel: OracleViewModel
let selectionCoordinator: WorkspaceSelectionCoordinator
Expand All @@ -363,7 +363,7 @@ private struct AgentContextInspectorPresenter<PrimaryContent: View>: View {
self.drawerStore = drawerStore
_presentationStore = ObservedObject(wrappedValue: drawerStore.presentation)
self.promptManager = promptManager
_runtimeVM = ObservedObject(wrappedValue: runtimeVM)
self.runtimeVM = runtimeVM
self.contextBuilderAgentVM = contextBuilderAgentVM
self.oracleViewModel = oracleViewModel
self.selectionCoordinator = selectionCoordinator
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,10 @@ struct AgentContextDrawerTokenEstimatePill: View {
}

var body: some View {
let snapshot = tokenCounter.latestPublishedTokenSnapshot(for: tokenBlankingSelection)
let snapshot = tokenCounter.latestPublishedTokenSnapshot(
for: tokenBlankingSelection,
scheduleRefreshIfNeeded: false
)
let contextWindowTokenBudget = contextWindowTokens
let isWaiting = isWaitingForExpectedSelection(snapshot)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,9 @@ final class AgentSelectedFilesModelCoordinatorTests: XCTestCase {
XCTAssertEqual(coordinator.model?.totalSelectedDisplayTokens, 91)
XCTAssertEqual(coordinator.debugStats.resolverStarts, 2)
XCTAssertEqual(coordinator.debugStats.resolverCompletions, 2)
XCTAssertEqual(coordinator.refreshAfterTokenMetricsCompletion(enrichedRequest), .skippedLoaded)
let startCountAfterCompletion = await resolver.startCount()
XCTAssertEqual(startCountAfterCompletion, 2)
}

@MainActor
Expand Down Expand Up @@ -1433,6 +1436,10 @@ private actor GatedTokenMetricsModelResolver {
guard !continuations.isEmpty else { return }
continuations.removeFirst().resume()
}

func startCount() -> Int {
starts
}
}

private actor ProgressiveCodemapModelResolver {
Expand Down
Loading