Skip to content

Commit

Permalink
Add Prompt property to ContentSafetyModel and update Jailbreak Detect…
Browse files Browse the repository at this point in the history
…ion link
  • Loading branch information
heblasco committed Mar 4, 2024
1 parent 713e4a1 commit 5ed047c
Show file tree
Hide file tree
Showing 7 changed files with 128 additions and 72 deletions.
60 changes: 59 additions & 1 deletion src/AIHub/Controllers/ContentSafetyController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,21 +10,25 @@ public class ContentSafetyController : Controller
private string endpoint;
private string subscriptionKey;
private string storageconnstring;
private string jailbreakEndpoint;
private ContentSafetyModel model;
private readonly Uri sasUri;
private HttpClient httpClient;

public ContentSafetyController(IConfiguration config, ILogger<HomeController> logger)
public ContentSafetyController(IConfiguration config, ILogger<HomeController> logger, IHttpClientFactory clientFactory)
{
_logger = logger;
endpoint = config.GetValue<string>("ContentModerator:Endpoint") ?? throw new ArgumentNullException("Endpoint");
subscriptionKey = config.GetValue<string>("ContentModerator:SubscriptionKey") ?? throw new ArgumentNullException("SubscriptionKey");
storageconnstring = config.GetValue<string>("Storage:ConnectionString") ?? throw new ArgumentNullException("ConnectionString");
jailbreakEndpoint = config.GetValue<string>("ContentModerator:JailbreakDetectionEndpoint") ?? throw new ArgumentNullException("JailbreakDetectionEndpoint");
BlobServiceClient blobServiceClient = new BlobServiceClient(storageconnstring);
containerClient = blobServiceClient.GetBlobContainerClient(config.GetValue<string>("Storage:ContainerName"));
sasUri = containerClient.GenerateSasUri(Azure.Storage.Sas.BlobContainerSasPermissions.Read, DateTimeOffset.UtcNow.AddHours(1));
// Obtiene una lista de blobs en el contenedor
blobs = containerClient.GetBlobs();
model = new ContentSafetyModel();
httpClient = clientFactory.CreateClient();

}
public IActionResult TextModerator()
Expand All @@ -37,12 +41,66 @@ public IActionResult ImageModerator()
return View();
}

public IActionResult JailbreakDetection()
{
return View();
}

[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error()
{
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}

//Jailbreak Promp evaluation
[HttpPost]
public async Task<IActionResult> EvaluatePrompt()
{
if (string.IsNullOrEmpty(HttpContext.Request.Form["text"]))
{
ViewBag.Message = "You must enter a prompt to evaluate";
return View("JailbreakDetection", model);
}
model.Prompt = HttpContext.Request.Form["text"];
model.Approve = true;

try
{
var request = new HttpRequestMessage(HttpMethod.Post, endpoint + jailbreakEndpoint);
request.Headers.Add("Ocp-Apim-Subscription-Key", subscriptionKey);

var content = new
{
text = model.Prompt
};
var json = System.Text.Json.JsonSerializer.Serialize(content);
// Crear un HttpContent con el JSON y el tipo de contenido
HttpContent content_body = new StringContent(json, Encoding.UTF8, "application/json");

request.Content = content_body;
var response = await httpClient.SendAsync(request);
//response.EnsureSuccessStatusCode();
String response_final = await response.Content.ReadAsStringAsync();
if (response_final.Contains("true"))
{
ViewBag.Message = "JAILBREAKING ATTEMPT ** DETECTED **";
}
else
{
ViewBag.Message = "JAILBREAKING ATTEMPT ** NOT DETECTED **";

}
}
catch (RequestFailedException ex)
{
_logger.LogError(ex, "An error occurred while evaluating the content." + ex.Message);
ViewBag.Message = "An error occurred while evaluating the content. Please try again later.";
return View("JailbreakDetection", model);
}

return View("JailbreakDetection", model);
}

[HttpPost]
public IActionResult EvaluateImage(string imageUrl)
{
Expand Down
1 change: 1 addition & 0 deletions src/AIHub/Models/ContentSafetyModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,5 +18,6 @@ public ContentSafetyModel()
public string? Image { get; set; }
public string? Message { get; set; }
public bool? Approve { get; set; }
public string? Prompt { get; set; }

}
104 changes: 35 additions & 69 deletions src/AIHub/Views/ContentSafety/JailbreakDetection.cshtml
Original file line number Diff line number Diff line change
Expand Up @@ -20,55 +20,21 @@
</div>
</div>
<!-- end page title -->
<form asp-controller="ContentSafety" asp-action="EvaluateText" method="post">
<form asp-controller="ContentSafety" asp-action="EvaluatePrompt" method="post">
<div class="row">
<div class="col-xxl-9">
<div class="row">

<div class="col-sm-6 col-xl-3 mb-3">
<div class="card mb-0 h-100">
<div class="card-body">
<h4 class="header-title">Severity:</h4>
<div class="mb-3">
<input type="text" id="severitytext" name="severitytext" data-plugin="range-slider" data-min="0" data-max="6" data-from="1" value="@(Model?.Severity ?? 1)" />
</div>
</div>
</div>
</div>

<div class="col-sm-6 col-xl-3 mb-3">
<div class="card mb-0 h-100">
<div class="card-body">
<h4 class="header-title">Violence:</h4>
<div class="mb-3">
<input type="text" id="violencetext" name="violencetext" data-plugin="range-slider" data-min="0" data-max="6" data-from="1" value="@(Model?.Violence ?? 1)" />
</div>
</div>
</div>
</div>

<div class="col-sm-6 col-xl-3 mb-3">
<div class="card mb-0 h-100">
<div class="card-body">
<h4 class="header-title">Self-harm:</h4>
<div class="mb-3">
<input type="text" id="shtext" name="shtext" data-plugin="range-slider" data-min="0" data-max="6" data-from="1" value="@(Model?.SelfHarm ?? 1)" />
</div>
</div>
</div>
</div>

<div class="col-sm-6 col-xl-3 mb-3">
<div class="card mb-0 h-100">
<div class="col-xl-12">
<div class="card">
<div class="card-body">
<h4 class="header-title">Hate:</h4>
<div class="mb-3">
<input type="text" id="hatetext" name="hatetext" data-plugin="range-slider" data-min="0" data-max="6" data-from="1" value="@(Model?.Hate ?? 1)" />
<h4 class="fw-semibold mt-0 mb-3">Jailbreak Info:</h4>
<img id="contentsafeinfo" src="/images/JailBreaking.png"
class="img-fluid rounded-start" alt="picture">
</div>
</div>
</div>
</div>

</div> <!-- end row -->

<div class="row">
Expand All @@ -77,28 +43,24 @@
<div class="card-body">
<div class="tab-pane show active" id="basic-form-preview" role="tabpanel">
<div class="mb-3">
<label for="text" class="form-label">Text:</label>
<textarea class="form-control" id="text" name="text" maxlength="225" rows="3">@Model?.Text</textarea>
<label for="text" class="form-label">Prompt:</label>
<textarea class="form-control" id="text" name="text" maxlength="225"
rows="3">@Model?.Prompt</textarea>
</div>
<button type="submit" class="btn btn-primary" onclick="submitForm()">Evaluate Text</button>
<button type="button" class="btn btn-info btn-right" onclick="loadExample2()">Example 2</button>
<button type="button" class="btn btn-info btn-right" onclick="loadExample1()">Example 1</button>
<button type="submit" class="btn btn-primary" onclick="submitForm()">Evaluate
Prompt</button>
<button type="button" class="btn btn-info btn-right"
onclick="loadExample3()">Example 3</button>
<button type="button" class="btn btn-info btn-right"
onclick="loadExample2()">Example 2</button>
<button type="button" class="btn btn-info btn-right"
onclick="loadExample1()">Example 1</button>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-xxl-3">
<div class="card">
<div class="card-body">
<div class="mb-3">
<h4 class="fw-semibold mt-0 mb-3">Content Safety Info:</h4>
<img id="contentsafeinfo" src="/images/ContentSafety.png" class="img-fluid rounded-start" alt="picture">
</div>
</div>
</div>
</div>
</div>
</form>

Expand All @@ -119,27 +81,31 @@

@if (ViewBag.Message != null)
{
<!-- end row -->
<!--- show results -->
<div class="row" id="showresult">
<div class="col-lg-12">
<div class="card">
<div class="row g-0 align-items-center">
<div class="col-md-12">
<div class="card-body">
<h2 class="header-title mt-0 mb-3">Text Analyze Result <span class="badge bg-success rounded-pill">Analysis Success</span></h2>
<p class="text-muted font-16 mb-3" id="show-message-result">@Html.Raw(ViewBag.Message.Replace("\n", "<br />"))</p>
</div>
<!-- end row -->
<!--- show results -->
<div class="row" id="showresult">
<div class="col-lg-12">
<div class="card">
<div class="row g-0 align-items-center">
<div class="col-md-12">
<div class="card-body">
<h2 class="header-title mt-0 mb-3">Text Analyze Result <span
class="badge bg-success rounded-pill">Analysis Success</span></h2>
<p class="text-muted font-16 mb-3" id="show-message-result">
@Html.Raw(ViewBag.Message.Replace("\n", "<br />"))</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
}

</div>
<!-- container -->

@section Scripts {
@{await Html.RenderPartialAsync("_CSTextModeratorScriptsPartial");}
@{
await Html.RenderPartialAsync("_CSJailbreakDetectionScriptsPartial");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<script src="/vendor/ion-rangeslider/ion.rangeSlider.min.js" asp-append-version="true"></script>
<script src="/js/ui/component.range-slider.js" asp-append-version="true"></script>
<script src="/js/ui/cs-jaibreakdetection.js" asp-append-version="true"></script>
4 changes: 2 additions & 2 deletions src/AIHub/Views/Shared/_Layout.cshtml
Original file line number Diff line number Diff line change
Expand Up @@ -309,9 +309,9 @@
</div>
</li>
<li class="side-nav-item">
<a class="side-nav-link" href="@Url.Action("JailBreakDetection", "JailBreakDetection")">
<a class="side-nav-link" href="@Url.Action("JailBreakDetection", "ContentSafety")">
<i class="uil-shield-slash"></i>
<span> Jail Break Detection </span>
<span> Jailbreak Detection </span>
<span class="badge badge-outline-success rounded-pill float-end">New</span>
</a>
</li>
Expand Down
Binary file added src/AIHub/wwwroot/images/JailBreaking.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
28 changes: 28 additions & 0 deletions src/AIHub/wwwroot/js/ui/cs-jaibreakdetection.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 5ed047c

Please sign in to comment.