mirror of
https://github.com/router-for-me/CLIProxyAPIPlus.git
synced 2026-03-20 07:51:52 +00:00
English: - Fix <thinking> tag parsing: only parse at response start, avoid misinterpreting discussion text - Add token counting support using tiktoken for local estimation - Support top_p parameter in inference config - Handle max_tokens=-1 as maximum (32000 tokens) - Add tool_choice and response_format parameter handling via system prompt hints - Support multiple thinking mode detection formats (Claude API, OpenAI reasoning_effort, AMP/Cursor) - Shorten MCP tool names exceeding 64 characters - Fix duplicate [DONE] marker in OpenAI SSE streaming - Enhance token usage statistics with multiple event format support - Add code fence markers to constants 中文: - 修复 <thinking> 标签解析:仅在响应开头解析,避免误解析讨论文本中的标签 - 使用 tiktoken 实现本地 token 计数功能 - 支持 top_p 推理配置参数 - 处理 max_tokens=-1 转换为最大值(32000 tokens) - 通过系统提示词注入实现 tool_choice 和 response_format 参数支持 - 支持多种思考模式检测格式(Claude API、OpenAI reasoning_effort、AMP/Cursor) - 截断超过64字符的 MCP 工具名称 - 修复 OpenAI SSE 流中重复的 [DONE] 标记 - 增强 token 使用量统计,支持多种事件格式 - 添加代码围栏标记常量
75 lines
2.8 KiB
Go
75 lines
2.8 KiB
Go
// Package common provides shared constants and utilities for Kiro translator.
|
|
package common
|
|
|
|
const (
|
|
// KiroMaxToolDescLen is the maximum description length for Kiro API tools.
|
|
// Kiro API limit is 10240 bytes, leave room for "..."
|
|
KiroMaxToolDescLen = 10237
|
|
|
|
// ThinkingStartTag is the start tag for thinking blocks in responses.
|
|
ThinkingStartTag = "<thinking>"
|
|
|
|
// ThinkingEndTag is the end tag for thinking blocks in responses.
|
|
ThinkingEndTag = "</thinking>"
|
|
|
|
// CodeFenceMarker is the markdown code fence marker.
|
|
CodeFenceMarker = "```"
|
|
|
|
// AltCodeFenceMarker is the alternative markdown code fence marker.
|
|
AltCodeFenceMarker = "~~~"
|
|
|
|
// InlineCodeMarker is the markdown inline code marker (backtick).
|
|
InlineCodeMarker = "`"
|
|
|
|
// KiroAgenticSystemPrompt is injected only for -agentic models to prevent timeouts on large writes.
|
|
// AWS Kiro API has a 2-3 minute timeout for large file write operations.
|
|
KiroAgenticSystemPrompt = `
|
|
# CRITICAL: CHUNKED WRITE PROTOCOL (MANDATORY)
|
|
|
|
You MUST follow these rules for ALL file operations. Violation causes server timeouts and task failure.
|
|
|
|
## ABSOLUTE LIMITS
|
|
- **MAXIMUM 350 LINES** per single write/edit operation - NO EXCEPTIONS
|
|
- **RECOMMENDED 300 LINES** or less for optimal performance
|
|
- **NEVER** write entire files in one operation if >300 lines
|
|
|
|
## MANDATORY CHUNKED WRITE STRATEGY
|
|
|
|
### For NEW FILES (>300 lines total):
|
|
1. FIRST: Write initial chunk (first 250-300 lines) using write_to_file/fsWrite
|
|
2. THEN: Append remaining content in 250-300 line chunks using file append operations
|
|
3. REPEAT: Continue appending until complete
|
|
|
|
### For EDITING EXISTING FILES:
|
|
1. Use surgical edits (apply_diff/targeted edits) - change ONLY what's needed
|
|
2. NEVER rewrite entire files - use incremental modifications
|
|
3. Split large refactors into multiple small, focused edits
|
|
|
|
### For LARGE CODE GENERATION:
|
|
1. Generate in logical sections (imports, types, functions separately)
|
|
2. Write each section as a separate operation
|
|
3. Use append operations for subsequent sections
|
|
|
|
## EXAMPLES OF CORRECT BEHAVIOR
|
|
|
|
✅ CORRECT: Writing a 600-line file
|
|
- Operation 1: Write lines 1-300 (initial file creation)
|
|
- Operation 2: Append lines 301-600
|
|
|
|
✅ CORRECT: Editing multiple functions
|
|
- Operation 1: Edit function A
|
|
- Operation 2: Edit function B
|
|
- Operation 3: Edit function C
|
|
|
|
❌ WRONG: Writing 500 lines in single operation → TIMEOUT
|
|
❌ WRONG: Rewriting entire file to change 5 lines → TIMEOUT
|
|
❌ WRONG: Generating massive code blocks without chunking → TIMEOUT
|
|
|
|
## WHY THIS MATTERS
|
|
- Server has 2-3 minute timeout for operations
|
|
- Large writes exceed timeout and FAIL completely
|
|
- Chunked writes are FASTER and more RELIABLE
|
|
- Failed writes waste time and require retry
|
|
|
|
REMEMBER: When in doubt, write LESS per operation. Multiple small operations > one large operation.`
|
|
) |