AX Agent 진행 시간·글로우 경로 정리 및 최근 로컬 변경 일괄 반영
- AX Agent 스트리밍 경과 시간을 공용 helper로 통일해 비정상적인 수천만 시간 표시를 방지함 - 채팅 입력창 글로우를 런처와 같은 표시/숨김 중심의 얇은 외곽 글로우로 정리하고 런처 글로우 설정은 일반 설정에 유지함 - README와 DEVELOPMENT 문서를 2026-04-08 12:02 (KST) 기준으로 갱신하고 Release 빌드 경고 0 / 오류 0을 확인함
This commit is contained in:
@@ -453,7 +453,9 @@ public partial class LlmService : IDisposable
|
||||
{
|
||||
temperature = ResolveTemperature(),
|
||||
max_new_tokens = ResolveOpenAiCompatibleMaxTokens()
|
||||
}
|
||||
},
|
||||
// Qwen3.5 thinking 모드 비활성화: 활성화되면 content=null, reasoning_content에만 출력됨
|
||||
chat_template_kwargs = new { enable_thinking = false },
|
||||
};
|
||||
}
|
||||
|
||||
@@ -462,9 +464,22 @@ public partial class LlmService : IDisposable
|
||||
if (root.TryGetProperty("choices", out var choices) && choices.ValueKind == JsonValueKind.Array && choices.GetArrayLength() > 0)
|
||||
{
|
||||
var message = choices[0].TryGetProperty("message", out var choiceMessage) ? choiceMessage : default;
|
||||
if (message.ValueKind == JsonValueKind.Object &&
|
||||
message.TryGetProperty("content", out var content))
|
||||
return content.GetString() ?? "";
|
||||
if (message.ValueKind == JsonValueKind.Object)
|
||||
{
|
||||
if (message.TryGetProperty("content", out var content))
|
||||
{
|
||||
var text = content.GetString();
|
||||
if (!string.IsNullOrEmpty(text))
|
||||
return text;
|
||||
}
|
||||
// Qwen3.5 thinking 모드 폴백
|
||||
if (message.TryGetProperty("reasoning_content", out var reasoning))
|
||||
{
|
||||
var text = reasoning.GetString();
|
||||
if (!string.IsNullOrEmpty(text))
|
||||
return text;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (root.TryGetProperty("results", out var results) && results.ValueKind == JsonValueKind.Array && results.GetArrayLength() > 0)
|
||||
@@ -855,10 +870,14 @@ public partial class LlmService : IDisposable
|
||||
if (doc.RootElement.TryGetProperty("choices", out var ch) && ch.GetArrayLength() > 0)
|
||||
{
|
||||
var first = ch[0];
|
||||
if (first.TryGetProperty("delta", out var delta)
|
||||
&& delta.TryGetProperty("content", out var cnt))
|
||||
if (first.TryGetProperty("delta", out var delta))
|
||||
{
|
||||
var txt = cnt.GetString();
|
||||
string? txt = null;
|
||||
if (delta.TryGetProperty("content", out var cnt))
|
||||
txt = cnt.GetString();
|
||||
// Qwen3.5 thinking 모드 폴백: content가 비어있으면 reasoning_content 사용
|
||||
if (string.IsNullOrEmpty(txt) && delta.TryGetProperty("reasoning_content", out var rc))
|
||||
txt = rc.GetString();
|
||||
if (!string.IsNullOrEmpty(txt)) { sb.Append(txt); collectingChunks = true; }
|
||||
}
|
||||
else if (first.TryGetProperty("message", out _))
|
||||
@@ -965,6 +984,8 @@ public partial class LlmService : IDisposable
|
||||
var delta = ibmChoices[0].GetProperty("delta");
|
||||
if (delta.TryGetProperty("content", out var c))
|
||||
text = c.GetString();
|
||||
if (string.IsNullOrEmpty(text) && delta.TryGetProperty("reasoning_content", out var rc))
|
||||
text = rc.GetString();
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -975,6 +996,8 @@ public partial class LlmService : IDisposable
|
||||
var delta = choices[0].GetProperty("delta");
|
||||
if (delta.TryGetProperty("content", out var c))
|
||||
text = c.GetString();
|
||||
if (string.IsNullOrEmpty(text) && delta.TryGetProperty("reasoning_content", out var rc2))
|
||||
text = rc2.GetString();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user