mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2026-01-08 06:19:05 +08:00
chunk type
This commit is contained in:
parent
4216ffd0da
commit
6f6944d003
12
packages/shared/agents/claudecode/types.ts
Normal file
12
packages/shared/agents/claudecode/types.ts
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
import type { SDKMessage } from '@anthropic-ai/claude-code'
|
||||||
|
import type { ContentBlockParam } from '@anthropic-ai/sdk/resources/messages'
|
||||||
|
|
||||||
|
export type ClaudeCodeRawValue =
|
||||||
|
| {
|
||||||
|
type: string
|
||||||
|
session_id: string
|
||||||
|
slash_commands: string[]
|
||||||
|
tools: string[]
|
||||||
|
raw: Extract<SDKMessage, { type: 'system' }>
|
||||||
|
}
|
||||||
|
| ContentBlockParam
|
||||||
@ -3,6 +3,7 @@
|
|||||||
import type { LanguageModelV2Usage } from '@ai-sdk/provider'
|
import type { LanguageModelV2Usage } from '@ai-sdk/provider'
|
||||||
import { SDKMessage } from '@anthropic-ai/claude-code'
|
import { SDKMessage } from '@anthropic-ai/claude-code'
|
||||||
import { loggerService } from '@logger'
|
import { loggerService } from '@logger'
|
||||||
|
import type { ClaudeCodeRawValue } from '@shared/agents/claudecode/types'
|
||||||
import type { ProviderMetadata, TextStreamPart } from 'ai'
|
import type { ProviderMetadata, TextStreamPart } from 'ai'
|
||||||
import { v4 as uuidv4 } from 'uuid'
|
import { v4 as uuidv4 } from 'uuid'
|
||||||
|
|
||||||
@ -281,15 +282,16 @@ function handleSystemMessage(message: Extract<SDKMessage, { type: 'system' }>):
|
|||||||
chunks.push({
|
chunks.push({
|
||||||
type: 'start'
|
type: 'start'
|
||||||
})
|
})
|
||||||
|
const rawValue: ClaudeCodeRawValue = {
|
||||||
|
type: 'init',
|
||||||
|
session_id: message.session_id,
|
||||||
|
slash_commands: message.slash_commands,
|
||||||
|
tools: message.tools,
|
||||||
|
raw: message
|
||||||
|
}
|
||||||
chunks.push({
|
chunks.push({
|
||||||
type: 'raw',
|
type: 'raw',
|
||||||
rawValue: {
|
rawValue
|
||||||
type: 'init',
|
|
||||||
session_id: message.session_id,
|
|
||||||
slash_commands: message.slash_commands,
|
|
||||||
tools: message.tools,
|
|
||||||
raw: message
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,6 +7,7 @@ import { loggerService } from '@logger'
|
|||||||
import { AISDKWebSearchResult, MCPTool, WebSearchResults, WebSearchSource } from '@renderer/types'
|
import { AISDKWebSearchResult, MCPTool, WebSearchResults, WebSearchSource } from '@renderer/types'
|
||||||
import { Chunk, ChunkType } from '@renderer/types/chunk'
|
import { Chunk, ChunkType } from '@renderer/types/chunk'
|
||||||
import { convertLinks, flushLinkConverterBuffer } from '@renderer/utils/linkConverter'
|
import { convertLinks, flushLinkConverterBuffer } from '@renderer/utils/linkConverter'
|
||||||
|
import type { ClaudeCodeRawValue } from '@shared/agents/claudecode/types'
|
||||||
import type { TextStreamPart, ToolSet } from 'ai'
|
import type { TextStreamPart, ToolSet } from 'ai'
|
||||||
|
|
||||||
import { ToolCallChunkHandler } from './handleToolCallChunk'
|
import { ToolCallChunkHandler } from './handleToolCallChunk'
|
||||||
@ -101,14 +102,19 @@ export class AiSdkToChunkAdapter {
|
|||||||
chunk: TextStreamPart<any>,
|
chunk: TextStreamPart<any>,
|
||||||
final: { text: string; reasoningContent: string; webSearchResults: AISDKWebSearchResult[]; reasoningId: string }
|
final: { text: string; reasoningContent: string; webSearchResults: AISDKWebSearchResult[]; reasoningId: string }
|
||||||
) {
|
) {
|
||||||
// @ts-ignore
|
|
||||||
if (chunk.type === 'raw' && chunk.rawValue.type === 'init' && chunk.rawValue.session_id) {
|
|
||||||
// @ts-ignore
|
|
||||||
this.onSessionUpdate?.(chunk.rawValue.session_id)
|
|
||||||
}
|
|
||||||
|
|
||||||
logger.silly(`AI SDK chunk type: ${chunk.type}`, chunk)
|
logger.silly(`AI SDK chunk type: ${chunk.type}`, chunk)
|
||||||
switch (chunk.type) {
|
switch (chunk.type) {
|
||||||
|
case 'raw': {
|
||||||
|
const agentRawMessage = chunk.rawValue as ClaudeCodeRawValue
|
||||||
|
if (agentRawMessage.type === 'init' && agentRawMessage.session_id) {
|
||||||
|
this.onSessionUpdate?.(agentRawMessage.session_id)
|
||||||
|
}
|
||||||
|
this.onChunk({
|
||||||
|
type: ChunkType.RAW,
|
||||||
|
content: agentRawMessage
|
||||||
|
})
|
||||||
|
break
|
||||||
|
}
|
||||||
// === 文本相关事件 ===
|
// === 文本相关事件 ===
|
||||||
case 'text-start':
|
case 'text-start':
|
||||||
this.onChunk({
|
this.onChunk({
|
||||||
|
|||||||
@ -47,7 +47,8 @@ export enum ChunkType {
|
|||||||
SEARCH_IN_PROGRESS_UNION = 'search_in_progress_union',
|
SEARCH_IN_PROGRESS_UNION = 'search_in_progress_union',
|
||||||
SEARCH_COMPLETE_UNION = 'search_complete_union',
|
SEARCH_COMPLETE_UNION = 'search_complete_union',
|
||||||
VIDEO_SEARCHED = 'video.searched',
|
VIDEO_SEARCHED = 'video.searched',
|
||||||
IMAGE_SEARCHED = 'image.searched'
|
IMAGE_SEARCHED = 'image.searched',
|
||||||
|
RAW = 'raw'
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface LLMResponseCreatedChunk {
|
export interface LLMResponseCreatedChunk {
|
||||||
@ -414,6 +415,17 @@ export interface ImageSearchedChunk {
|
|||||||
metadata: Record<string, any>
|
metadata: Record<string, any>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface RawChunk {
|
||||||
|
/**
|
||||||
|
* The type of the chunk
|
||||||
|
*/
|
||||||
|
type: ChunkType.RAW
|
||||||
|
|
||||||
|
content: unknown
|
||||||
|
|
||||||
|
metadata?: Record<string, any>
|
||||||
|
}
|
||||||
|
|
||||||
export type Chunk =
|
export type Chunk =
|
||||||
| BlockCreatedChunk // 消息块创建,无意义
|
| BlockCreatedChunk // 消息块创建,无意义
|
||||||
| BlockInProgressChunk // 消息块进行中,无意义
|
| BlockInProgressChunk // 消息块进行中,无意义
|
||||||
@ -450,3 +462,4 @@ export type Chunk =
|
|||||||
| SearchCompleteUnionChunk // 搜索(知识库/互联网)完成
|
| SearchCompleteUnionChunk // 搜索(知识库/互联网)完成
|
||||||
| VideoSearchedChunk // 知识库检索视频
|
| VideoSearchedChunk // 知识库检索视频
|
||||||
| ImageSearchedChunk // 知识库检索图片
|
| ImageSearchedChunk // 知识库检索图片
|
||||||
|
| RawChunk
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user