모델 프로파일 기반 Cowork/Code 루프와 진행 UX 고도화 반영

- 등록 모델 실행 프로파일을 검증 게이트, 문서 fallback, post-tool verification까지 확장 적용

- Cowork/Code 진행 카드에 계획/도구/검증/압축/폴백/재시도 단계 메타를 추가해 대기 상태 가시성 강화

- OpenAI/vLLM tool 요청에 병렬 도구 호출 힌트를 추가하고 회귀 프롬프트 문서를 프로파일 기준으로 전면 정리

- 검증: dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify\\ -p:IntermediateOutputPath=obj\\verify\\ (경고 0 / 오류 0)
This commit is contained in:
2026-04-08 13:41:57 +09:00
parent b391dfdfb3
commit a2c952879d
552 changed files with 8094 additions and 13595 deletions

View File

@@ -17,6 +17,7 @@ internal sealed class ModelRegistrationDialog : Window
// IBM/CP4D 인증 필드
private readonly ComboBox _authTypeBox;
private readonly ComboBox _executionProfileBox;
private readonly StackPanel _cp4dPanel;
private readonly TextBox _cp4dUrlBox;
private readonly TextBox _cp4dUsernameBox;
@@ -28,6 +29,7 @@ internal sealed class ModelRegistrationDialog : Window
public string ApiKey => _apiKeyBox.Text.Trim();
public bool AllowInsecureTls => _allowInsecureTlsCheck.IsChecked == true;
public string AuthType => (_authTypeBox.SelectedItem as ComboBoxItem)?.Tag?.ToString() ?? "bearer";
public string ExecutionProfile => (_executionProfileBox.SelectedItem as ComboBoxItem)?.Tag?.ToString() ?? "balanced";
public string Cp4dUrl => _cp4dUrlBox.Text.Trim();
public string Cp4dUsername => _cp4dUsernameBox.Text.Trim();
public string Cp4dPassword => _cp4dPasswordBox.Password.Trim();
@@ -35,7 +37,8 @@ internal sealed class ModelRegistrationDialog : Window
public ModelRegistrationDialog(string service, string existingAlias = "", string existingModel = "",
string existingEndpoint = "", string existingApiKey = "", bool existingAllowInsecureTls = false,
string existingAuthType = "bearer", string existingCp4dUrl = "",
string existingCp4dUsername = "", string existingCp4dPassword = "")
string existingCp4dUsername = "", string existingCp4dPassword = "",
string existingExecutionProfile = "balanced")
{
bool isEdit = !string.IsNullOrEmpty(existingAlias);
Title = isEdit ? "모델 편집" : "모델 추가";
@@ -185,6 +188,50 @@ internal sealed class ModelRegistrationDialog : Window
var modelBorder = new Border { CornerRadius = new CornerRadius(8), ClipToBounds = true, Child = _modelBox };
stack.Children.Add(modelBorder);
stack.Children.Add(new TextBlock
{
Text = "실행 프로파일",
FontSize = 12,
FontWeight = FontWeights.SemiBold,
Foreground = primaryText,
Margin = new Thickness(0, 12, 0, 6),
});
stack.Children.Add(new TextBlock
{
Text = "모델 성향에 따라 도구 호출 강도, 읽기 속도, 문서 생성 흐름을 조절합니다.",
FontSize = 11,
Foreground = secondaryText,
Margin = new Thickness(0, 0, 0, 8),
});
_executionProfileBox = new ComboBox
{
FontSize = 13,
Padding = new Thickness(8, 6, 8, 6),
Foreground = primaryText,
Background = itemBg,
BorderBrush = borderBrush,
BorderThickness = new Thickness(1),
};
var balancedProfile = new ComboBoxItem { Content = "균형", Tag = "balanced" };
var strictProfile = new ComboBoxItem { Content = "도구 호출 우선", Tag = "tool_call_strict" };
var reasoningProfile = new ComboBoxItem { Content = "추론 우선", Tag = "reasoning_first" };
var readonlyProfile = new ComboBoxItem { Content = "읽기 속도 우선", Tag = "fast_readonly" };
var documentProfile = new ComboBoxItem { Content = "문서 생성 우선", Tag = "document_heavy" };
_executionProfileBox.Items.Add(balancedProfile);
_executionProfileBox.Items.Add(strictProfile);
_executionProfileBox.Items.Add(reasoningProfile);
_executionProfileBox.Items.Add(readonlyProfile);
_executionProfileBox.Items.Add(documentProfile);
_executionProfileBox.SelectedItem = (existingExecutionProfile ?? "balanced").Trim().ToLowerInvariant() switch
{
"tool_call_strict" => strictProfile,
"reasoning_first" => reasoningProfile,
"fast_readonly" => readonlyProfile,
"document_heavy" => documentProfile,
_ => balancedProfile,
};
stack.Children.Add(new Border { CornerRadius = new CornerRadius(8), ClipToBounds = true, Child = _executionProfileBox });
// 구분선
stack.Children.Add(new Rectangle
{