사내 모드 외부 LLM 범위를 테스트와 문서로 고정함
Gemini와 Claude만 외부 LLM 차단 대상으로 유지하고 Ollama와 vLLM은 사내/사외 모두 허용된다는 기준을 회귀 테스트로 추가했다. 깨진 인코딩으로 읽히던 LlmOperationModeTests를 정리하고 README 및 DEVELOPMENT 문서에 정책 정의와 검증 결과를 함께 반영했다. 검증: dotnet build 경고 0 오류 0, LlmOperationModeTests 5건 통과.
This commit is contained in:
@@ -22,8 +22,8 @@ public class LlmOperationModeTests
|
||||
[new ChatMessage { Role = "user", Content = "test" }]);
|
||||
|
||||
var ex = await action.Should().ThrowAsync<InvalidOperationException>();
|
||||
ex.Which.Message.Should().Contain("사내 모드");
|
||||
ex.Which.Message.Should().Contain("외부 LLM 호출이 차단");
|
||||
ex.Which.Message.Should().Contain("외부 LLM 호출이 차단됩니다");
|
||||
ex.Which.Message.Should().Contain("Gemini");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@@ -42,7 +42,7 @@ public class LlmOperationModeTests
|
||||
tools);
|
||||
|
||||
var ex = await action.Should().ThrowAsync<InvalidOperationException>();
|
||||
ex.Which.Message.Should().Contain("사내 모드");
|
||||
ex.Which.Message.Should().Contain("외부 LLM 호출이 차단됩니다");
|
||||
ex.Which.Message.Should().Contain("Claude");
|
||||
}
|
||||
|
||||
@@ -61,8 +61,49 @@ public class LlmOperationModeTests
|
||||
[new ChatMessage { Role = "user", Content = "test" }]);
|
||||
|
||||
var ex = await action.Should().ThrowAsync<InvalidOperationException>();
|
||||
ex.Which.Message.Should().NotContain("사내 모드에서는 외부 LLM 호출이 차단");
|
||||
ex.Which.Message.Should().Contain("API 키");
|
||||
ex.Which.Message.Should().NotContain("외부 LLM 호출이 차단됩니다");
|
||||
ex.Which.Message.Should().Contain("API");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task SendAsync_InternalMode_AllowsOllamaToProceedPastExternalLlmGuard()
|
||||
{
|
||||
var settings = new SettingsService();
|
||||
settings.Settings.OperationMode = OperationModePolicy.InternalMode;
|
||||
settings.Settings.Llm.Service = "ollama";
|
||||
settings.Settings.Llm.Model = "qwen2.5-coder";
|
||||
settings.Settings.Llm.OllamaModel = "qwen2.5-coder";
|
||||
settings.Settings.Llm.OllamaEndpoint = "http://127.0.0.1:1";
|
||||
|
||||
using var llm = new LlmService(settings);
|
||||
|
||||
var action = async () => await llm.SendAsync(
|
||||
[new ChatMessage { Role = "user", Content = "test" }]);
|
||||
|
||||
var ex = await action.Should().ThrowAsync<Exception>();
|
||||
ex.Which.Message.Should().NotContain("외부 LLM 호출이 차단됩니다");
|
||||
ex.Which.Message.Should().NotContain("Gemini");
|
||||
ex.Which.Message.Should().NotContain("Claude");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task SendAsync_InternalMode_AllowsVllmToProceedPastExternalLlmGuard()
|
||||
{
|
||||
var settings = new SettingsService();
|
||||
settings.Settings.OperationMode = OperationModePolicy.InternalMode;
|
||||
settings.Settings.Llm.Service = "vllm";
|
||||
settings.Settings.Llm.Model = "qwen2.5-coder";
|
||||
settings.Settings.Llm.VllmModel = "qwen2.5-coder";
|
||||
settings.Settings.Llm.VllmEndpoint = "http://127.0.0.1:1";
|
||||
|
||||
using var llm = new LlmService(settings);
|
||||
|
||||
var action = async () => await llm.SendAsync(
|
||||
[new ChatMessage { Role = "user", Content = "test" }]);
|
||||
|
||||
var ex = await action.Should().ThrowAsync<Exception>();
|
||||
ex.Which.Message.Should().NotContain("외부 LLM 호출이 차단됩니다");
|
||||
ex.Which.Message.Should().NotContain("Gemini");
|
||||
ex.Which.Message.Should().NotContain("Claude");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user