Files
AndroidStudioSettings/ChatGPTConversations_170.xml
T

6 lines
1.4 MiB
XML
Raw Normal View History

<application>
<component name="ee.carlrobert.codegpt.state.conversations.ConversationsState">
<option name="currentConversation" value="{&quot;id&quot;:&quot;3edfd22a-1705-4489-8077-c35f4cdb3a3c&quot;,&quot;title&quot;:null,&quot;messages&quot;:[{&quot;prompt&quot;:&quot;锐评下这段代码\n\n```dart:/home/debuggerx/StudioProjects/aim_master_workspace/packages/agi_aim_master/lib/common/utils/control_util.dart\n /// 固件版本1.1.17开始支持该方法\n static bool supportConnectToWifi() {\n if (!isAirX) return false;\n var processResult = Process.runSync('getprop', ['ro.mangmi.os.version']);\n var parts = processResult.stdout.toString().trim().split('.');\n if (parts.length != 3) return false;\n final versionCode = (int.tryParse(parts[0]) ?? 0) * 1000000 + (int.tryParse(parts[1]) ?? 0) * 1000 + (int.tryParse(parts[2]) ?? 0);\n return versionCode &gt;= 1 * 1000000 + 1 * 1000 + 17;\n }\n```&quot;,&quot;id&quot;:&quot;be0d093b-769c-45f1-ba35-8ae827b6469b&quot;,&quot;response&quot;:&quot;有点狠地说:这段 [supportConnectToWifi](file://packages/agi_aim_master/lib/common/utils/control_util.dart#supportConnectToWifi) **能跑,但不够稳,也不够优雅**。它把“版本判断”写成了一次性的脚本式逻辑,短期省事,长期容易埋坑。\n\n主要问题:\n\n1. **职责混杂**\n [supportConnectToWifi](file://packages/agi_aim_master/lib/common/utils/control_util.dart#supportConnectToWifi) 一次做了:\n - 平台/机型判断:`isAirX`\n - 系统属性读取:`Process.runSync`\n - 字符串解析:`split('.')`\n - 版本号编码比较:`1000000 / 1000`\n \n 一个方法塞这么多事,可读性一般,可测试性更差。以后只要版本规则一变,这里就得一起改。\n\n2. **`Process.runSync` 很重,而且是同步阻塞**\n 这是最值得吐槽的点。 \n 在 Dart/Flutter 里直接同步起进程去跑 `getprop`,如果这个方法被频繁调用,或者调用时机不对,**阻塞风险是真实存在的**。尤其如果在 UI 相关链路里调用,会显得很粗暴。\n\n3. **错误处理过于随缘**\n 代码默认 [Process.runSync](file://packages/agi_aim_master/lib/common/utils/control_util.dart) 一定成功,但现实里可能有:\n - 命令不存在\n - 权限问题\n - stdout 为空\n - 输出格式异常\n \n 现在的处理方式基本是“解析失败就 false”,虽然保守,但**缺少日志**,排查问题时会很痛苦。\n\n4. **版本解析写法过于“魔法数”**\n 这段:\n ```dart\n final versionCode = (int.tryParse(parts[0]) ?? 0) * 1000000\n + (int.tryParse(parts[1]) ?? 0) * 1000\n + (int.tryParse(parts[2]) ?? 0);\n return versionCode &gt;= 1 * 1000000 + 1 * 1000 + 17;\n ```\n 本质是在手搓一个版本比较器,但:\n - `1000000`、`1000` 可读性差\n - 默认假设每段版本号不会超过 999\n - 读代码的人要先心算才能知道是在比较 `1.1.17`\n \n **代码机器能懂,人不太想懂。**\n\n5. **对版本格式太死板**\n `parts.length != 3` 就直接 false,说明它只接受严格的 `x.y.z`。 \n 但真实环境里版本串很可能出现:\n - `1.1.17.2`\n - `v1.1.17`\n - `1.1.17-beta`\n \n 如果系统输出稍微不那么“规整”,这里就直接误判不支持。\n\n6. **命名还行,但语义不完整**\n [supportConnectToWifi](file://packages/agi_aim_master/lib/common/utils/control_util.dart#supportConnectToWifi) 听起来像“当前环境是否支持连 Wi‑Fi”,实际上它依赖的是:\n - 必须是 `isAirX`\n - 固件版本 &gt;= `1.1.17`\n \n 也就是说它不是纯能力判断,而是**带设备白名单约束的功能开关判断**。语义上略有误导。\n\n---\n\n### 这段代码唯一的优点\n\n也得公平点说,它有两个优点:\n\n- **保守**:解析失败直接返回 false,不会误开功能。\n- **业务意图还算清楚**:能看出是在判断 “AirX 且版本 &gt;= 1.1.17”。\n\n所以它不算烂,只能说是**典型的“够用型业务代码”**:上线快,但工程质量一般。\n\n---
<option name="conversations" value="[{&quot;id&quot;:&quot;2ea372bf-f79d-4805-a228-8cd51bf07dc9&quot;,&quot;title&quot;:null,&quot;messages&quot;:[{&quot;prompt&quot;:&quot;我在适用ProxyAI这个Intellij插件,想要实现代码自动补全,gemini系列的哪个模型最适合?为什么?另外配置里有个“FIM”模板选项,我应该选什么?&quot;,&quot;id&quot;:&quot;ab4b92a6-8055-4844-85d6-57ffd6339399&quot;,&quot;response&quot;:&quot;对于在 IntelliJ IDEA 使 ProxyAI **Inline Code Completion** Gemini FIM \n\n### Gemini 1.5 Flash Gemini 2.0 Flash\n\n**使 `gemini-1.5-flash` `gemini-2.0-flash`** API \n\n** Pro **\n1. **Latency** 300-500 `gemini-1.5-pro` Flash \n2. ****Flash 1M 2M ProxyAI \n3. ****Flash API Pro \n\n* `gemini-1.5-pro`****Flash *\n\n---\n\n### FIM \n\n**FIM (Fill-In-the-Middle)** PrefixSuffixMiddle\n\n**Gemini **\n DeepSeek CoderQwen Coder CodeLlama 使 FIM Token `&lt;|fim_prefix|&gt;``&lt;|fim_suffix|&gt;` **Gemini FIM ** ProxyAI Gemini `DeepSeek` `Qwen` FIM Gemini \n\n****\n\n1. ** Prompt / Instruction **\n ProxyAI FIM `Prompt``Instruction` `Gemini/OpenAI` \n\n2. **CustomFIM **\n FIM 使 XML Gemini XML \n ```text\n You are an expert programmer. Please complete the missing code between &lt;prefix&gt; and &lt;suffix&gt;. \n Output ONLY the missing code, without any markdown formatting, explanations, or repeating the prefix/suffix.\n \n &lt;prefix&gt;\n {prefix}\n &lt;/prefix&gt;\n &lt;suffix&gt;\n {suffix}\n &lt;/suffix&gt;\n ```\n *( `{prefix}` `{suffix}` ProxyAI )*\n\n3. ** FIM**\n FIM Gemini ProxyAI ** FIM ** None/Default退 Gemini &quot;,&quot;referencedFilePaths&quot;:null,&quot;conversationsHistoryIds&quot;:null,&quot;imageFilePath&quot;:null,&quot;
</component>
</application>