Refactor ClineApiReq

This commit is contained in:
Saoud Rizwan
2024-10-06 04:35:13 -04:00
parent 0932361c7d
commit 7612e50a5f
3 changed files with 13 additions and 13 deletions

View File

@@ -22,8 +22,8 @@ import { findLastIndex } from "../shared/array"
import { combineApiRequests } from "../shared/combineApiRequests" import { combineApiRequests } from "../shared/combineApiRequests"
import { combineCommandSequences } from "../shared/combineCommandSequences" import { combineCommandSequences } from "../shared/combineCommandSequences"
import { import {
ClaudeApiReqCancelReason, ClineApiReqCancelReason,
ClaudeApiReqInfo, ClineApiReqInfo,
ClineAsk, ClineAsk,
ClineMessage, ClineMessage,
ClineSay, ClineSay,
@@ -416,7 +416,7 @@ export class Cline {
) )
if (lastApiReqStartedIndex !== -1) { if (lastApiReqStartedIndex !== -1) {
const lastApiReqStarted = modifiedClaudeMessages[lastApiReqStartedIndex] const lastApiReqStarted = modifiedClaudeMessages[lastApiReqStartedIndex]
const { cost, cancelReason }: ClaudeApiReqInfo = JSON.parse(lastApiReqStarted.text || "{}") const { cost, cancelReason }: ClineApiReqInfo = JSON.parse(lastApiReqStarted.text || "{}")
if (cost === undefined && cancelReason === undefined) { if (cost === undefined && cancelReason === undefined) {
modifiedClaudeMessages.splice(lastApiReqStartedIndex, 1) modifiedClaudeMessages.splice(lastApiReqStartedIndex, 1)
} }
@@ -710,7 +710,7 @@ export class Cline {
if (previousApiReqIndex >= 0) { if (previousApiReqIndex >= 0) {
const previousRequest = this.claudeMessages[previousApiReqIndex] const previousRequest = this.claudeMessages[previousApiReqIndex]
if (previousRequest && previousRequest.text) { if (previousRequest && previousRequest.text) {
const { tokensIn, tokensOut, cacheWrites, cacheReads }: ClaudeApiReqInfo = JSON.parse( const { tokensIn, tokensOut, cacheWrites, cacheReads }: ClineApiReqInfo = JSON.parse(
previousRequest.text previousRequest.text
) )
const totalTokens = (tokensIn || 0) + (tokensOut || 0) + (cacheWrites || 0) + (cacheReads || 0) const totalTokens = (tokensIn || 0) + (tokensOut || 0) + (cacheWrites || 0) + (cacheReads || 0)
@@ -1608,7 +1608,7 @@ export class Cline {
const lastApiReqIndex = findLastIndex(this.claudeMessages, (m) => m.say === "api_req_started") const lastApiReqIndex = findLastIndex(this.claudeMessages, (m) => m.say === "api_req_started")
this.claudeMessages[lastApiReqIndex].text = JSON.stringify({ this.claudeMessages[lastApiReqIndex].text = JSON.stringify({
request: userContent.map((block) => formatContentBlockToMarkdown(block)).join("\n\n"), request: userContent.map((block) => formatContentBlockToMarkdown(block)).join("\n\n"),
} satisfies ClaudeApiReqInfo) } satisfies ClineApiReqInfo)
await this.saveClaudeMessages() await this.saveClaudeMessages()
await this.providerRef.deref()?.postStateToWebview() await this.providerRef.deref()?.postStateToWebview()
@@ -1622,7 +1622,7 @@ export class Cline {
// update api_req_started. we can't use api_req_finished anymore since it's a unique case where it could come after a streaming message (ie in the middle of being updated or executed) // update api_req_started. we can't use api_req_finished anymore since it's a unique case where it could come after a streaming message (ie in the middle of being updated or executed)
// fortunately api_req_finished was always parsed out for the gui anyways, so it remains solely for legacy purposes to keep track of prices in tasks from history // fortunately api_req_finished was always parsed out for the gui anyways, so it remains solely for legacy purposes to keep track of prices in tasks from history
// (it's worth removing a few months from now) // (it's worth removing a few months from now)
const updateApiReqMsg = (cancelReason?: ClaudeApiReqCancelReason, streamingFailedMessage?: string) => { const updateApiReqMsg = (cancelReason?: ClineApiReqCancelReason, streamingFailedMessage?: string) => {
this.claudeMessages[lastApiReqIndex].text = JSON.stringify({ this.claudeMessages[lastApiReqIndex].text = JSON.stringify({
...JSON.parse(this.claudeMessages[lastApiReqIndex].text || "{}"), ...JSON.parse(this.claudeMessages[lastApiReqIndex].text || "{}"),
tokensIn: inputTokens, tokensIn: inputTokens,
@@ -1640,10 +1640,10 @@ export class Cline {
), ),
cancelReason, cancelReason,
streamingFailedMessage, streamingFailedMessage,
} satisfies ClaudeApiReqInfo) } satisfies ClineApiReqInfo)
} }
const abortStream = async (cancelReason: ClaudeApiReqCancelReason, streamingFailedMessage?: string) => { const abortStream = async (cancelReason: ClineApiReqCancelReason, streamingFailedMessage?: string) => {
if (this.diffViewProvider.isEditing) { if (this.diffViewProvider.isEditing) {
await this.diffViewProvider.revertChanges() // closes diff view await this.diffViewProvider.revertChanges() // closes diff view
} }

View File

@@ -90,15 +90,15 @@ export interface ClineSayTool {
filePattern?: string filePattern?: string
} }
export interface ClaudeApiReqInfo { export interface ClineApiReqInfo {
request?: string request?: string
tokensIn?: number tokensIn?: number
tokensOut?: number tokensOut?: number
cacheWrites?: number cacheWrites?: number
cacheReads?: number cacheReads?: number
cost?: number cost?: number
cancelReason?: ClaudeApiReqCancelReason cancelReason?: ClineApiReqCancelReason
streamingFailedMessage?: string streamingFailedMessage?: string
} }
export type ClaudeApiReqCancelReason = "streaming_failed" | "user_cancelled" export type ClineApiReqCancelReason = "streaming_failed" | "user_cancelled"

View File

@@ -1,7 +1,7 @@
import { VSCodeBadge, VSCodeProgressRing } from "@vscode/webview-ui-toolkit/react" import { VSCodeBadge, VSCodeProgressRing } from "@vscode/webview-ui-toolkit/react"
import deepEqual from "fast-deep-equal" import deepEqual from "fast-deep-equal"
import React, { memo, useEffect, useMemo, useRef } from "react" import React, { memo, useEffect, useMemo, useRef } from "react"
import { ClaudeApiReqInfo, ClineMessage, ClineSayTool } from "../../../../src/shared/ExtensionMessage" import { ClineApiReqInfo, ClineMessage, ClineSayTool } from "../../../../src/shared/ExtensionMessage"
import { COMMAND_OUTPUT_STRING } from "../../../../src/shared/combineCommandSequences" import { COMMAND_OUTPUT_STRING } from "../../../../src/shared/combineCommandSequences"
import { vscode } from "../../utils/vscode" import { vscode } from "../../utils/vscode"
import CodeAccordian, { removeLeadingNonAlphanumeric } from "../common/CodeAccordian" import CodeAccordian, { removeLeadingNonAlphanumeric } from "../common/CodeAccordian"
@@ -63,7 +63,7 @@ export default ChatRow
const ChatRowContent = ({ message, isExpanded, onToggleExpand, lastModifiedMessage, isLast }: ChatRowContentProps) => { const ChatRowContent = ({ message, isExpanded, onToggleExpand, lastModifiedMessage, isLast }: ChatRowContentProps) => {
const [cost, apiReqCancelReason, apiReqStreamingFailedMessage] = useMemo(() => { const [cost, apiReqCancelReason, apiReqStreamingFailedMessage] = useMemo(() => {
if (message.text != null && message.say === "api_req_started") { if (message.text != null && message.say === "api_req_started") {
const info: ClaudeApiReqInfo = JSON.parse(message.text) const info: ClineApiReqInfo = JSON.parse(message.text)
return [info.cost, info.cancelReason, info.streamingFailedMessage] return [info.cost, info.cancelReason, info.streamingFailedMessage]
} }
return [undefined, undefined, undefined] return [undefined, undefined, undefined]