diff --git a/README.md b/README.md index 817e66663..8ad16175b 100644 --- a/README.md +++ b/README.md @@ -40,12 +40,14 @@ ## 快速开始 / Quick Start -1. 克隆仓库 + 1. 克隆仓库 + ```bash git clone https://github.com/NeuCharFramework/NcfPackageSources.git ``` 2. 打开解决方案 + ```bash cd NcfPackageSources start NcfPackageSources.sln # Windows @@ -53,11 +55,19 @@ open NcfPackageSources.sln # macOS ``` 3. 还原包 + ```bash dotnet restore ``` -4. 编译运行 +4. 还原工作负载(可选) + +```bash +dotnet workload restore +``` + +5. 编译运行 + ```bash dotnet build dotnet run diff --git a/src/Extensions/Senparc.Xncf.AIKernel/Areas/Admin/Pages/Dashboard/Index.cshtml b/src/Extensions/Senparc.Xncf.AIKernel/Areas/Admin/Pages/Dashboard/Index.cshtml new file mode 100644 index 000000000..16f829f19 --- /dev/null +++ b/src/Extensions/Senparc.Xncf.AIKernel/Areas/Admin/Pages/Dashboard/Index.cshtml @@ -0,0 +1,393 @@ +@page +@model Senparc.Xncf.AIKernel.Areas.AIKernel.Pages.Index +@{ + ViewData["Title"] = "AIKernel 仪表盘"; + Layout = "_Layout_Vue"; +} + +@section style { + +} + +@section breadcrumbs { + 扩展模块 + AI 核心模块 + 仪表盘 +} + + + + +
+ + + AIKernel 仪表盘 + + + + + + + + + +
+ {{xncfStat.installedXncfCount || 0}} +
+ +
+

可调用模型数量

+
+
+
+ + +
+ {{xncfStat.updateVersionXncfCount || 0}} +
+ +
+

向量数据库数量

+
+
+
+ + +
+ {{xncfStat.newXncfCount || 0}} +
+ +
+

智能体数量

+
+
+
+ + +
+ {{xncfStat.missingXncfCount || 0}} +
+ +
+

用户反馈数

+
+
+
+
+
+ + + + +
+
+
+
+ +
+ + + + + +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+
+
+
+
+
+ +@section scripts { + + +} \ No newline at end of file diff --git a/src/Extensions/Senparc.Xncf.AIKernel/Register.Area.cs b/src/Extensions/Senparc.Xncf.AIKernel/Register.Area.cs index 2dd055222..eb8d954a7 100644 --- a/src/Extensions/Senparc.Xncf.AIKernel/Register.Area.cs +++ b/src/Extensions/Senparc.Xncf.AIKernel/Register.Area.cs @@ -25,7 +25,8 @@ public partial class Register : IAreaRegister, //注册 XNCF 页面接口(按 public List AreaPageMenuItems => new List() { new AreaPageMenuItem(GetAreaHomeUrl(),"首页","fa fa-laptop"), -new AreaPageMenuItem(GetAreaUrl($"/Admin/AIVector/Index"),"向量数据库","fa fa-bookmark-o") +new AreaPageMenuItem(GetAreaUrl($"/Admin/AIVector/Index"),"向量数据库","fa fa-bookmark-o"), +new AreaPageMenuItem(GetAreaUrl($"/Admin/Dashboard/Index"),"仪表盘","fa fa-dashboard") //new AreaPageMenuItem(GetAreaUrl($"/Admin/AIKernel/DatabaseSample"),"数据库操作示例","fa fa-bookmark-o") }; diff --git a/src/Extensions/Senparc.Xncf.AIKernel/wwwroot/js/Admin/Dashboard/Index.js b/src/Extensions/Senparc.Xncf.AIKernel/wwwroot/js/Admin/Dashboard/Index.js new file mode 100644 index 000000000..14c7b1f3b --- /dev/null +++ b/src/Extensions/Senparc.Xncf.AIKernel/wwwroot/js/Admin/Dashboard/Index.js @@ -0,0 +1,379 @@ +var app = new Vue({ + el: '#app', + data() { + return { + isExpandAll: true, + loading: false, + refreshTable: true, + xncfStat: {}, + xncfOpeningList: {}, + chartData: [], + todayLogData: [], + // 添加动画控制变量 + shakeAllModules: false, + glowUpgradeableModules: false + }; + }, + mounted() { + this.getXncfStat(); + this.getXncfOpening(); + this.fetchChartData(); + // 添加鼠标事件监听 + this.initializeHoverEffects(); + }, + methods: { + async fetchChartData() { + try { + let response = await service.get('/api/Senparc.Areas.Admin/StatAppService/Areas.Admin_StatAppService.GetLogs'); + if (response.data && response.data.data && response.data.data.logs) { + this.chartData = response.data.data.logs; + this.initChart(); + } else { + console.error('Invalid API response:', response); + } + } catch (error) { + console.error('Error fetching chart data:', error); + } + }, + initChart() { + + //----------------------------------下为chart1-------------------------------------- + let chart1 = document.getElementById('firstChart'); + let chartOption1 = { + title: { + text: '全部会话数', + subtext: '近 7 天' + }, + xAxis: { + type: 'category', + data: this.chartData.map(item => item.date) + }, + yAxis: { + type: 'value', + axisLabel: { + formatter: '{value} 次' + } + }, + tooltip: { + trigger: 'axis', + axisPointer: { + type: 'shadow' + } + }, + + series: [ + { + name: '全部会话数', + type: 'line', + stack: '总量', + areaStyle: { color: '#91c7ae' }, // 添加区域填充颜色 + data: this.chartData.map(item => item.normalLogCount), + color: '#91c7ae' + }, + ] + }; + let chartInstance1 = echarts.init(chart1); + chartInstance1.setOption(chartOption1); + + + + + //----------------------------------下为chart2-------------------------------------- + let chart2 = document.getElementById('secondChart'); + let chartOption2 = { + title: { + text: '活跃用户数', + subtext: '近 7 天' + }, + xAxis: { + type: 'category', + data: this.chartData.map(item => item.date) + }, + yAxis: { + type: 'value', + axisLabel: { + formatter: '{value} 人' + } + }, + tooltip: { + trigger: 'axis', + axisPointer: { + type: 'shadow' + } + }, + + series: [ + { + name: '活跃用户数', + type: 'line', + stack: '总量', + areaStyle: { color: '#91c7ae' }, // 添加区域填充颜色 + data: this.chartData.map(item => item.normalLogCount), + color: '#91c7ae' + }, + ] + }; + let chartInstance2 = echarts.init(chart2); + chartInstance2.setOption(chartOption2); + + + + + //----------------------------------下为chart3-------------------------------------- + let chart3 = document.getElementById('Chart3'); + let chartOption3 = { + title: { + text: '平均会话互动数', + subtext: '近 7 天' + }, + xAxis: { + type: 'category', + data: this.chartData.map(item => item.date) + }, + yAxis: { + type: 'value', + axisLabel: { + formatter: '{value} 次' + } + }, + tooltip: { + trigger: 'axis', + axisPointer: { + type: 'shadow' + } + }, + + series: [ + { + name: '平均会话互动数', + type: 'line', + stack: '总量', + areaStyle: { color: '#91c7ae' }, // 添加区域填充颜色 + data: this.chartData.map(item => item.normalLogCount), + color: '#91c7ae' + }, + ] + }; + let chartInstance3 = echarts.init(chart3); + chartInstance3.setOption(chartOption3); + + + + //----------------------------------下为chart4-------------------------------------- + let chart4 = document.getElementById('Chart4'); + let chartOption4 = { + title: { + text: 'Token 输出速度(Token/秒)', + subtext: '近 7 天' + }, + xAxis: { + type: 'category', + data: this.chartData.map(item => item.date) + }, + yAxis: { + type: 'value', + axisLabel: { + formatter: '{value} ' + } + }, + tooltip: { + trigger: 'axis', + axisPointer: { + type: 'shadow' + } + }, + + series: [ + { + name: 'Token 输出速度', + type: 'line', + stack: '总量', + areaStyle: { color: '#91c7ae' }, // 添加区域填充颜色 + data: this.chartData.map(item => item.normalLogCount), + color: '#91c7ae' + }, + ] + }; + let chartInstance4 = echarts.init(chart4); + chartInstance4.setOption(chartOption4); + + + //----------------------------------下为chart5-------------------------------------- + let chart5 = document.getElementById('Chart5'); + let chartOption5 = { + title: { + text: '用户满意度', + subtext: '近 7 天' + }, + xAxis: { + type: 'category', + data: this.chartData.map(item => item.date) + }, + yAxis: { + type: 'value', + axisLabel: { + formatter: '{value} 次' + } + }, + tooltip: { + trigger: 'axis', + axisPointer: { + type: 'shadow' + } + }, + + series: [ + { + name: '用户满意度', + type: 'line', + stack: '总量', + areaStyle: { color: '#91c7ae' }, // 添加区域填充颜色 + data: this.chartData.map(item => item.normalLogCount), + color: '#91c7ae' + }, + ] + }; + let chartInstance5 = echarts.init(chart5); + chartInstance5.setOption(chartOption5); + + + + //----------------------------------下为chart6-------------------------------------- + let chart6 = document.getElementById('Chart6'); + let chartOption6 = { + title: { + text: '全部消息数', + subtext: '近 7 天' + }, + xAxis: { + type: 'category', + data: this.chartData.map(item => item.date) + }, + yAxis: { + type: 'value', + axisLabel: { + formatter: '{value} 次' + } + }, + tooltip: { + trigger: 'axis', + axisPointer: { + type: 'shadow' + } + }, + + series: [ + { + name: '全部消息数', + type: 'line', + stack: '总量', + areaStyle: { color: '#91c7ae' }, // 添加区域填充颜色 + data: this.chartData.map(item => item.normalLogCount), + color: '#91c7ae' + }, + ] + }; + let chartInstance6 = echarts.init(chart6); + chartInstance6.setOption(chartOption6); + + + + + + + + + }, + //XNCF 统计状态 + async getXncfStat() { + let xncfStatData = await service.get('/Admin/Index?handler=XncfStat'); + this.xncfStat = xncfStatData.data.data; + }, + //开放模块数据 + async getXncfOpening() { + let xncfOpeningList = await service.get('/Admin/Index?handler=XncfOpening'); + this.xncfOpeningList = xncfOpeningList.data.data; + }, + //点击打开模块 + navigateTo(uid) { + window.location.href = '/Admin/XncfModule/Start/?uid=' + uid; + }, + getOpenDetail(rowIndex, menus) { + console.log(`rowIndex --- ${JSON.stringify(rowIndex)}`) + console.log(`menus --- ${JSON.stringify(menus)}`) + var menuInfo = menus[rowIndex] + window.location.href = menuInfo.url + }, + // 添加新方法处理悬停效果 + initializeHoverEffects() { + // 获取统计项元素 - 修正选择器 + const installedModulesStat = document.querySelector('.xncf-stat-item'); + const updateModulesStat = document.querySelectorAll('.xncf-stat-item')[1]; + + // 已安装模块统计项的鼠标事件 + if (installedModulesStat) { + installedModulesStat.addEventListener('mouseenter', () => { + this.triggerShakeAnimation(); + }); + } + + // 待更新模块统计项的鼠标事件 + if (updateModulesStat) { + updateModulesStat.addEventListener('mouseenter', () => { + this.triggerGlowAnimation(); + }); + } + }, + + // 触发抖动动画 + triggerShakeAnimation() { + const moduleCards = document.querySelectorAll('#xncf-modules-area .box-card'); + moduleCards.forEach(card => { + // 添加随机延迟 + const delay = Math.random() * 200; // 0-200ms的随机延迟 + setTimeout(() => { + card.classList.add('shake-animation'); + // 动画结束后移除类 + setTimeout(() => { + card.classList.remove('shake-animation'); + }, 800); // 与动画持续时间匹配 + }, delay); + }); + }, + + // 触发发光/淡化动画 + triggerGlowAnimation() { + const allCards = document.querySelectorAll('#xncf-modules-area .box-card'); + const upgradeableVersions = document.querySelectorAll('#xncf-modules-area .version-upgradeable'); + + // 为所有可更新的模块添加发光效果 + upgradeableVersions.forEach(version => { + const card = version.closest('.box-card'); + if (card) { + // 添加随机延迟 + const delay = Math.random() * 200; + setTimeout(() => { + card.classList.add('glow-animation'); + setTimeout(() => { + card.classList.remove('glow-animation'); + }, 1200); // 与动画持续时间匹配 + }, delay); + } + }); + + // 为不可更新的模块添加淡化效果 + allCards.forEach(card => { + if (!card.querySelector('.version-upgradeable')) { + // 添加随机延迟 + const delay = Math.random() * 200; + setTimeout(() => { + card.classList.add('fade-animation'); + setTimeout(() => { + card.classList.remove('fade-animation'); + }, 1200); // 与动画持续时间匹配 + }, delay); + } + }); + } + } +}); diff --git a/src/Extensions/Senparc.Xncf.PromptRange/Areas/Admin/Pages/PromptRange/Prompt.cshtml b/src/Extensions/Senparc.Xncf.PromptRange/Areas/Admin/Pages/PromptRange/Prompt.cshtml index f0956632d..fd7659df8 100644 --- a/src/Extensions/Senparc.Xncf.PromptRange/Areas/Admin/Pages/PromptRange/Prompt.cshtml +++ b/src/Extensions/Senparc.Xncf.PromptRange/Areas/Admin/Pages/PromptRange/Prompt.cshtml @@ -160,9 +160,9 @@ @* 设置ai评分标准 :disabled="!promptid" aiScoreFormOpenDialog aiScoreFormVisible = true*@
- 设置 AI 评分标准 + 设置 AI 评分标准 +
-
diff --git a/src/Extensions/Senparc.Xncf.PromptRange/Domain/Migrations/Migrations.SqlServer/20250816100529_Add_IsAIGrade.Designer.cs b/src/Extensions/Senparc.Xncf.PromptRange/Domain/Migrations/Migrations.SqlServer/20250816100529_Add_IsAIGrade.Designer.cs new file mode 100644 index 000000000..53cf78403 --- /dev/null +++ b/src/Extensions/Senparc.Xncf.PromptRange/Domain/Migrations/Migrations.SqlServer/20250816100529_Add_IsAIGrade.Designer.cs @@ -0,0 +1,341 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Senparc.Xncf.PromptRange.Models; + +#nullable disable + +namespace Senparc.Xncf.PromptRange.Domain.Migrations.SqlServer +{ + [DbContext(typeof(PromptRangeSenparcEntities_SqlServer))] + [Migration("20250816100529_Add_IsAIGrade")] + partial class Add_IsAIGrade + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.10") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Senparc.Xncf.PromptRange.Domain.Models.DatabaseModel.LlModel", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("AddTime") + .HasColumnType("datetime2"); + + b.Property("AdminRemark") + .HasMaxLength(300) + .HasColumnType("nvarchar(300)"); + + b.Property("Alias") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("ApiKey") + .HasMaxLength(200) + .HasColumnType("nvarchar(200)"); + + b.Property("ApiVersion") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("DeploymentName") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("Endpoint") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("nvarchar(250)"); + + b.Property("Flag") + .HasColumnType("bit"); + + b.Property("IsShared") + .HasColumnType("bit"); + + b.Property("LastUpdateTime") + .HasColumnType("datetime2"); + + b.Property("MaxToken") + .HasColumnType("int"); + + b.Property("ModelType") + .HasMaxLength(20) + .HasColumnType("int"); + + b.Property("Note") + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("OrganizationId") + .HasMaxLength(200) + .HasColumnType("nvarchar(200)"); + + b.Property("Remark") + .HasMaxLength(300) + .HasColumnType("nvarchar(300)"); + + b.Property("Show") + .HasColumnType("bit"); + + b.Property("TenantId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("Senparc_PromptRange_LlModel"); + }); + + modelBuilder.Entity("Senparc.Xncf.PromptRange.Domain.Models.DatabaseModel.PromptItem", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("AddTime") + .HasColumnType("datetime2"); + + b.Property("AdminRemark") + .HasMaxLength(300) + .HasColumnType("nvarchar(300)"); + + b.Property("Aiming") + .HasMaxLength(5) + .HasColumnType("int"); + + b.Property("Content") + .HasColumnType("nvarchar(max)"); + + b.Property("EvalAvgScore") + .HasMaxLength(3) + .HasColumnType("decimal(18,2)"); + + b.Property("EvalMaxScore") + .HasMaxLength(3) + .HasColumnType("decimal(18,2)"); + + b.Property("ExpectedResultsJson") + .HasColumnType("nvarchar(max)"); + + b.Property("Flag") + .HasColumnType("bit"); + + b.Property("FrequencyPenalty") + .HasColumnType("real"); + + b.Property("FullVersion") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("IsAIGrade") + .HasColumnType("bit"); + + b.Property("IsDraft") + .HasColumnType("bit"); + + b.Property("IsShare") + .HasColumnType("bit"); + + b.Property("LastRunTime") + .HasColumnType("datetime2"); + + b.Property("LastUpdateTime") + .HasColumnType("datetime2"); + + b.Property("MaxToken") + .HasColumnType("int"); + + b.Property("ModelId") + .HasColumnType("int"); + + b.Property("NickName") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("Note") + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); + + b.Property("ParentTac") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Prefix") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("PresencePenalty") + .HasColumnType("real"); + + b.Property("RangeId") + .HasColumnType("int"); + + b.Property("RangeName") + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); + + b.Property("Remark") + .HasMaxLength(300) + .HasColumnType("nvarchar(300)"); + + b.Property("StopSequences") + .HasColumnType("nvarchar(max)"); + + b.Property("Suffix") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("Tactic") + .HasColumnType("nvarchar(max)"); + + b.Property("Temperature") + .HasColumnType("real"); + + b.Property("TenantId") + .HasColumnType("int"); + + b.Property("TopP") + .HasColumnType("real"); + + b.Property("VariableDictJson") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Senparc_PromptRange_PromptItem"); + }); + + modelBuilder.Entity("Senparc.Xncf.PromptRange.Domain.Models.DatabaseModel.PromptRange", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("AddTime") + .HasColumnType("datetime2"); + + b.Property("AdminRemark") + .HasMaxLength(300) + .HasColumnType("nvarchar(300)"); + + b.Property("Alias") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("Flag") + .HasColumnType("bit"); + + b.Property("LastUpdateTime") + .HasColumnType("datetime2"); + + b.Property("RangeName") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); + + b.Property("Remark") + .HasMaxLength(300) + .HasColumnType("nvarchar(300)"); + + b.Property("TenantId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("Senparc_PromptRange_PromptRange"); + }); + + modelBuilder.Entity("Senparc.Xncf.PromptRange.Domain.Models.DatabaseModel.PromptResult", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("AddTime") + .HasColumnType("datetime2"); + + b.Property("AdminRemark") + .HasMaxLength(300) + .HasColumnType("nvarchar(300)"); + + b.Property("CostTime") + .HasColumnType("float"); + + b.Property("FinalScore") + .HasColumnType("decimal(18,2)"); + + b.Property("Flag") + .HasColumnType("bit"); + + b.Property("HumanScore") + .HasColumnType("decimal(18,2)"); + + b.Property("LastUpdateTime") + .HasColumnType("datetime2"); + + b.Property("LlmModelId") + .HasColumnType("int"); + + b.Property("PromptCostToken") + .HasColumnType("int"); + + b.Property("PromptItemId") + .HasColumnType("int"); + + b.Property("PromptItemVersion") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("Remark") + .HasMaxLength(300) + .HasColumnType("nvarchar(300)"); + + b.Property("ResultCostToken") + .HasColumnType("int"); + + b.Property("ResultString") + .HasColumnType("nvarchar(max)"); + + b.Property("RobotScore") + .HasColumnType("decimal(18,2)"); + + b.Property("TenantId") + .HasColumnType("int"); + + b.Property("TestType") + .HasColumnType("int"); + + b.Property("TotalCostToken") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("Senparc_PromptRange_PromptResult"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/Extensions/Senparc.Xncf.PromptRange/Domain/Migrations/Migrations.SqlServer/20250816100529_Add_IsAIGrade.cs b/src/Extensions/Senparc.Xncf.PromptRange/Domain/Migrations/Migrations.SqlServer/20250816100529_Add_IsAIGrade.cs new file mode 100644 index 000000000..de9824617 --- /dev/null +++ b/src/Extensions/Senparc.Xncf.PromptRange/Domain/Migrations/Migrations.SqlServer/20250816100529_Add_IsAIGrade.cs @@ -0,0 +1,29 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Senparc.Xncf.PromptRange.Domain.Migrations.SqlServer +{ + /// + public partial class Add_IsAIGrade : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "IsAIGrade", + table: "Senparc_PromptRange_PromptItem", + type: "bit", + nullable: false, + defaultValue: false); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "IsAIGrade", + table: "Senparc_PromptRange_PromptItem"); + } + } +} diff --git a/src/Extensions/Senparc.Xncf.PromptRange/Domain/Migrations/Migrations/SqlServer/PromptRangeSenparcEntities_SqlServerModelSnapshot.cs b/src/Extensions/Senparc.Xncf.PromptRange/Domain/Migrations/Migrations/SqlServer/PromptRangeSenparcEntities_SqlServerModelSnapshot.cs index b0dc26bbc..a3b6597c2 100644 --- a/src/Extensions/Senparc.Xncf.PromptRange/Domain/Migrations/Migrations/SqlServer/PromptRangeSenparcEntities_SqlServerModelSnapshot.cs +++ b/src/Extensions/Senparc.Xncf.PromptRange/Domain/Migrations/Migrations/SqlServer/PromptRangeSenparcEntities_SqlServerModelSnapshot.cs @@ -17,12 +17,12 @@ protected override void BuildModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 modelBuilder - .HasAnnotation("ProductVersion", "8.0.0") + .HasAnnotation("ProductVersion", "8.0.10") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - modelBuilder.Entity("Senparc.Xncf.PromptRange.Models.LlModel", b => + modelBuilder.Entity("Senparc.Xncf.PromptRange.Domain.Models.DatabaseModel.LlModel", b => { b.Property("Id") .ValueGeneratedOnAdd() @@ -99,77 +99,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.ToTable("Senparc_PromptRange_LlModel"); }); - modelBuilder.Entity("Senparc.Xncf.PromptRange.Models.PromptResult", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("AddTime") - .HasColumnType("datetime2"); - - b.Property("AdminRemark") - .HasMaxLength(300) - .HasColumnType("nvarchar(300)"); - - b.Property("CostTime") - .HasColumnType("float"); - - b.Property("FinalScore") - .HasColumnType("decimal(18,2)"); - - b.Property("Flag") - .HasColumnType("bit"); - - b.Property("HumanScore") - .HasColumnType("decimal(18,2)"); - - b.Property("LastUpdateTime") - .HasColumnType("datetime2"); - - b.Property("LlmModelId") - .HasColumnType("int"); - - b.Property("PromptCostToken") - .HasColumnType("int"); - - b.Property("PromptItemId") - .HasColumnType("int"); - - b.Property("PromptItemVersion") - .HasMaxLength(50) - .HasColumnType("nvarchar(50)"); - - b.Property("Remark") - .HasMaxLength(300) - .HasColumnType("nvarchar(300)"); - - b.Property("ResultCostToken") - .HasColumnType("int"); - - b.Property("ResultString") - .HasColumnType("nvarchar(max)"); - - b.Property("RobotScore") - .HasColumnType("decimal(18,2)"); - - b.Property("TenantId") - .HasColumnType("int"); - - b.Property("TestType") - .HasColumnType("int"); - - b.Property("TotalCostToken") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.ToTable("Senparc_PromptRange_PromptResult"); - }); - - modelBuilder.Entity("Senparc.Xncf.PromptRange.PromptItem", b => + modelBuilder.Entity("Senparc.Xncf.PromptRange.Domain.Models.DatabaseModel.PromptItem", b => { b.Property("Id") .ValueGeneratedOnAdd() @@ -213,6 +143,9 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasMaxLength(50) .HasColumnType("nvarchar(50)"); + b.Property("IsAIGrade") + .HasColumnType("bit"); + b.Property("IsDraft") .HasColumnType("bit"); @@ -288,7 +221,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.ToTable("Senparc_PromptRange_PromptItem"); }); - modelBuilder.Entity("Senparc.Xncf.PromptRange.PromptRange", b => + modelBuilder.Entity("Senparc.Xncf.PromptRange.Domain.Models.DatabaseModel.PromptRange", b => { b.Property("Id") .ValueGeneratedOnAdd() @@ -329,6 +262,76 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.ToTable("Senparc_PromptRange_PromptRange"); }); + + modelBuilder.Entity("Senparc.Xncf.PromptRange.Domain.Models.DatabaseModel.PromptResult", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("AddTime") + .HasColumnType("datetime2"); + + b.Property("AdminRemark") + .HasMaxLength(300) + .HasColumnType("nvarchar(300)"); + + b.Property("CostTime") + .HasColumnType("float"); + + b.Property("FinalScore") + .HasColumnType("decimal(18,2)"); + + b.Property("Flag") + .HasColumnType("bit"); + + b.Property("HumanScore") + .HasColumnType("decimal(18,2)"); + + b.Property("LastUpdateTime") + .HasColumnType("datetime2"); + + b.Property("LlmModelId") + .HasColumnType("int"); + + b.Property("PromptCostToken") + .HasColumnType("int"); + + b.Property("PromptItemId") + .HasColumnType("int"); + + b.Property("PromptItemVersion") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("Remark") + .HasMaxLength(300) + .HasColumnType("nvarchar(300)"); + + b.Property("ResultCostToken") + .HasColumnType("int"); + + b.Property("ResultString") + .HasColumnType("nvarchar(max)"); + + b.Property("RobotScore") + .HasColumnType("decimal(18,2)"); + + b.Property("TenantId") + .HasColumnType("int"); + + b.Property("TestType") + .HasColumnType("int"); + + b.Property("TotalCostToken") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("Senparc_PromptRange_PromptResult"); + }); #pragma warning restore 612, 618 } } diff --git a/src/Extensions/Senparc.Xncf.PromptRange/Domain/Migrations/Sqlite/20250816100504_Add_IsAIGrade.Designer.cs b/src/Extensions/Senparc.Xncf.PromptRange/Domain/Migrations/Sqlite/20250816100504_Add_IsAIGrade.Designer.cs new file mode 100644 index 000000000..91665e5a1 --- /dev/null +++ b/src/Extensions/Senparc.Xncf.PromptRange/Domain/Migrations/Sqlite/20250816100504_Add_IsAIGrade.Designer.cs @@ -0,0 +1,328 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Senparc.Xncf.PromptRange.Models; + +#nullable disable + +namespace Senparc.Xncf.PromptRange.Domain.Migrations.Sqlite +{ + [DbContext(typeof(PromptRangeSenparcEntities_Sqlite))] + [Migration("20250816100504_Add_IsAIGrade")] + partial class Add_IsAIGrade + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "8.0.10"); + + modelBuilder.Entity("Senparc.Xncf.PromptRange.Domain.Models.DatabaseModel.LlModel", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("AddTime") + .HasColumnType("TEXT"); + + b.Property("AdminRemark") + .HasMaxLength(300) + .HasColumnType("TEXT"); + + b.Property("Alias") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("ApiKey") + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("ApiVersion") + .HasMaxLength(100) + .HasColumnType("TEXT"); + + b.Property("DeploymentName") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("TEXT"); + + b.Property("Endpoint") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("TEXT"); + + b.Property("Flag") + .HasColumnType("INTEGER"); + + b.Property("IsShared") + .HasColumnType("INTEGER"); + + b.Property("LastUpdateTime") + .HasColumnType("TEXT"); + + b.Property("MaxToken") + .HasColumnType("INTEGER"); + + b.Property("ModelType") + .HasMaxLength(20) + .HasColumnType("INTEGER"); + + b.Property("Note") + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("OrganizationId") + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("Remark") + .HasMaxLength(300) + .HasColumnType("TEXT"); + + b.Property("Show") + .HasColumnType("INTEGER"); + + b.Property("TenantId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.ToTable("Senparc_PromptRange_LlModel"); + }); + + modelBuilder.Entity("Senparc.Xncf.PromptRange.Domain.Models.DatabaseModel.PromptItem", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("AddTime") + .HasColumnType("TEXT"); + + b.Property("AdminRemark") + .HasMaxLength(300) + .HasColumnType("TEXT"); + + b.Property("Aiming") + .HasMaxLength(5) + .HasColumnType("INTEGER"); + + b.Property("Content") + .HasColumnType("TEXT"); + + b.Property("EvalAvgScore") + .HasMaxLength(3) + .HasColumnType("REAL"); + + b.Property("EvalMaxScore") + .HasMaxLength(3) + .HasColumnType("REAL"); + + b.Property("ExpectedResultsJson") + .HasColumnType("TEXT"); + + b.Property("Flag") + .HasColumnType("INTEGER"); + + b.Property("FrequencyPenalty") + .HasColumnType("REAL"); + + b.Property("FullVersion") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("IsAIGrade") + .HasColumnType("INTEGER"); + + b.Property("IsDraft") + .HasColumnType("INTEGER"); + + b.Property("IsShare") + .HasColumnType("INTEGER"); + + b.Property("LastRunTime") + .HasColumnType("TEXT"); + + b.Property("LastUpdateTime") + .HasColumnType("TEXT"); + + b.Property("MaxToken") + .HasColumnType("INTEGER"); + + b.Property("ModelId") + .HasColumnType("INTEGER"); + + b.Property("NickName") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("Note") + .HasMaxLength(20) + .HasColumnType("TEXT"); + + b.Property("ParentTac") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Prefix") + .HasMaxLength(10) + .HasColumnType("TEXT"); + + b.Property("PresencePenalty") + .HasColumnType("REAL"); + + b.Property("RangeId") + .HasColumnType("INTEGER"); + + b.Property("RangeName") + .HasMaxLength(20) + .HasColumnType("TEXT"); + + b.Property("Remark") + .HasMaxLength(300) + .HasColumnType("TEXT"); + + b.Property("StopSequences") + .HasColumnType("TEXT"); + + b.Property("Suffix") + .HasMaxLength(10) + .HasColumnType("TEXT"); + + b.Property("Tactic") + .HasColumnType("TEXT"); + + b.Property("Temperature") + .HasColumnType("REAL"); + + b.Property("TenantId") + .HasColumnType("INTEGER"); + + b.Property("TopP") + .HasColumnType("REAL"); + + b.Property("VariableDictJson") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("Senparc_PromptRange_PromptItem"); + }); + + modelBuilder.Entity("Senparc.Xncf.PromptRange.Domain.Models.DatabaseModel.PromptRange", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("AddTime") + .HasColumnType("TEXT"); + + b.Property("AdminRemark") + .HasMaxLength(300) + .HasColumnType("TEXT"); + + b.Property("Alias") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("Flag") + .HasColumnType("INTEGER"); + + b.Property("LastUpdateTime") + .HasColumnType("TEXT"); + + b.Property("RangeName") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("TEXT"); + + b.Property("Remark") + .HasMaxLength(300) + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.ToTable("Senparc_PromptRange_PromptRange"); + }); + + modelBuilder.Entity("Senparc.Xncf.PromptRange.Domain.Models.DatabaseModel.PromptResult", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("AddTime") + .HasColumnType("TEXT"); + + b.Property("AdminRemark") + .HasMaxLength(300) + .HasColumnType("TEXT"); + + b.Property("CostTime") + .HasColumnType("REAL"); + + b.Property("FinalScore") + .HasColumnType("TEXT"); + + b.Property("Flag") + .HasColumnType("INTEGER"); + + b.Property("HumanScore") + .HasColumnType("TEXT"); + + b.Property("LastUpdateTime") + .HasColumnType("TEXT"); + + b.Property("LlmModelId") + .HasColumnType("INTEGER"); + + b.Property("PromptCostToken") + .HasColumnType("INTEGER"); + + b.Property("PromptItemId") + .HasColumnType("INTEGER"); + + b.Property("PromptItemVersion") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("Remark") + .HasMaxLength(300) + .HasColumnType("TEXT"); + + b.Property("ResultCostToken") + .HasColumnType("INTEGER"); + + b.Property("ResultString") + .HasColumnType("TEXT"); + + b.Property("RobotScore") + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("INTEGER"); + + b.Property("TestType") + .HasColumnType("INTEGER"); + + b.Property("TotalCostToken") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.ToTable("Senparc_PromptRange_PromptResult"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/Extensions/Senparc.Xncf.PromptRange/Domain/Migrations/Sqlite/20250816100504_Add_IsAIGrade.cs b/src/Extensions/Senparc.Xncf.PromptRange/Domain/Migrations/Sqlite/20250816100504_Add_IsAIGrade.cs new file mode 100644 index 000000000..c4fdf4a44 --- /dev/null +++ b/src/Extensions/Senparc.Xncf.PromptRange/Domain/Migrations/Sqlite/20250816100504_Add_IsAIGrade.cs @@ -0,0 +1,29 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Senparc.Xncf.PromptRange.Domain.Migrations.Sqlite +{ + /// + public partial class Add_IsAIGrade : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "IsAIGrade", + table: "Senparc_PromptRange_PromptItem", + type: "INTEGER", + nullable: false, + defaultValue: false); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "IsAIGrade", + table: "Senparc_PromptRange_PromptItem"); + } + } +} diff --git a/src/Extensions/Senparc.Xncf.PromptRange/Domain/Migrations/Sqlite/PromptRangeSenparcEntities_SqliteModelSnapshot.cs b/src/Extensions/Senparc.Xncf.PromptRange/Domain/Migrations/Sqlite/PromptRangeSenparcEntities_SqliteModelSnapshot.cs index 5b35c7afa..52a1f3324 100644 --- a/src/Extensions/Senparc.Xncf.PromptRange/Domain/Migrations/Sqlite/PromptRangeSenparcEntities_SqliteModelSnapshot.cs +++ b/src/Extensions/Senparc.Xncf.PromptRange/Domain/Migrations/Sqlite/PromptRangeSenparcEntities_SqliteModelSnapshot.cs @@ -15,7 +15,7 @@ partial class PromptRangeSenparcEntities_SqliteModelSnapshot : ModelSnapshot protected override void BuildModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "8.0.0"); + modelBuilder.HasAnnotation("ProductVersion", "8.0.10"); modelBuilder.Entity("Senparc.Xncf.PromptRange.Domain.Models.DatabaseModel.LlModel", b => { @@ -134,6 +134,9 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasMaxLength(50) .HasColumnType("TEXT"); + b.Property("IsAIGrade") + .HasColumnType("INTEGER"); + b.Property("IsDraft") .HasColumnType("INTEGER"); diff --git a/src/Extensions/Senparc.Xncf.PromptRange/Domain/Models/DatabaseModel/Dto/PromptItemDto.cs b/src/Extensions/Senparc.Xncf.PromptRange/Domain/Models/DatabaseModel/Dto/PromptItemDto.cs index feee4e4d4..3668387f6 100644 --- a/src/Extensions/Senparc.Xncf.PromptRange/Domain/Models/DatabaseModel/Dto/PromptItemDto.cs +++ b/src/Extensions/Senparc.Xncf.PromptRange/Domain/Models/DatabaseModel/Dto/PromptItemDto.cs @@ -81,6 +81,11 @@ public class PromptItemDto : DtoBase /// public string ExpectedResultsJson { get; set; } + /// + /// 是否启用“ai评分标准” + /// + public bool isAIGrade { get; set; } = false; + #endregion diff --git a/src/Extensions/Senparc.Xncf.PromptRange/Domain/Models/DatabaseModel/PromptItem.cs b/src/Extensions/Senparc.Xncf.PromptRange/Domain/Models/DatabaseModel/PromptItem.cs index 288886d8e..0d973a216 100644 --- a/src/Extensions/Senparc.Xncf.PromptRange/Domain/Models/DatabaseModel/PromptItem.cs +++ b/src/Extensions/Senparc.Xncf.PromptRange/Domain/Models/DatabaseModel/PromptItem.cs @@ -98,6 +98,9 @@ public class PromptItem : EntityBase /// public string ExpectedResultsJson { get; private set; } + public bool IsAIGrade { get; private set; } = false; + + #endregion #region Full Version @@ -318,7 +321,7 @@ public PromptItem(PromptRangeDto promptRange, string nickName, string tactic) public PromptItem(PromptItemDto dto) : this(dto.RangeId, dto.Content, dto.ModelId, dto.TopP, dto.Temperature, dto.MaxToken, dto.FrequencyPenalty, dto.PresencePenalty, dto.StopSequences, dto.RangeName, dto.Tactic, dto.Aiming, dto.ParentTac, dto.Note, - dto.IsDraft, dto.ExpectedResultsJson, + dto.IsDraft, dto.ExpectedResultsJson, dto.isAIGrade, dto.Prefix, dto.Suffix, dto.VariableDictJson) { Id = dto.Id; @@ -332,7 +335,7 @@ public PromptItem(PromptItemDto dto) : this(dto.RangeId, dto.Content, dto.ModelI public PromptItem(int rangeId, string content, int modelId, float topP, float temperature, int maxToken, float frequencyPenalty, float presencePenalty, string stopSequences, string rangeName, string tactic, int aiming, string parentTac, - string note, bool isDraft, string expectedResultsJson, + string note, bool isDraft, string expectedResultsJson, bool isAIGrade, string prefix, string suffix, string variableDictJson) { RangeId = rangeId; @@ -351,6 +354,7 @@ public PromptItem(int rangeId, string content, Note = note; IsDraft = isDraft; ExpectedResultsJson = expectedResultsJson; + IsAIGrade = isAIGrade; Prefix = prefix; Suffix = suffix; VariableDictJson = variableDictJson; @@ -361,7 +365,7 @@ public PromptItem(int rangeId, string content, public PromptItem(int rangeId, string rangeName, string tactic, int aiming, string parentTac, PromptItem_AddRequest request) : this(rangeId, request.Content, request.ModelId, request.TopP, request.Temperature, request.MaxToken, request.FrequencyPenalty, request.PresencePenalty, request.StopSequences, rangeName, tactic, aiming, parentTac, request.Note, request.IsDraft, - request.ExpectedResultsJson, + request.ExpectedResultsJson, request.isAIGrade, request.Prefix, request.Suffix, request.VariableDictJson) { } @@ -484,6 +488,7 @@ public PromptItem UpdateDraft(PromptItemDto dto) Note = dto.Note; ExpectedResultsJson = dto.ExpectedResultsJson; + IsAIGrade = dto.isAIGrade; Prefix = dto.Prefix; Suffix = dto.Suffix; diff --git a/src/Extensions/Senparc.Xncf.PromptRange/Domain/Services/PromptResultService.cs b/src/Extensions/Senparc.Xncf.PromptRange/Domain/Services/PromptResultService.cs index 82e99abea..024961c05 100644 --- a/src/Extensions/Senparc.Xncf.PromptRange/Domain/Services/PromptResultService.cs +++ b/src/Extensions/Senparc.Xncf.PromptRange/Domain/Services/PromptResultService.cs @@ -146,7 +146,7 @@ public async Task SenparcGenerateResultAsync(PromptItemDto prom await base.SaveObjectAsync(promptResult); // 有期望结果, 进行自动打分 - if (!string.IsNullOrWhiteSpace(promptItem.ExpectedResultsJson)) + if (promptItem.isAIGrade && !string.IsNullOrWhiteSpace(promptItem.ExpectedResultsJson)) { await this.RobotScoringAsync(promptResult.Id, false, promptItem.ExpectedResultsJson); } diff --git a/src/Extensions/Senparc.Xncf.PromptRange/OHS/Local/PL/Request/PromptItem_AddRequest.cs b/src/Extensions/Senparc.Xncf.PromptRange/OHS/Local/PL/Request/PromptItem_AddRequest.cs index 980ec6140..70aa644bc 100644 --- a/src/Extensions/Senparc.Xncf.PromptRange/OHS/Local/PL/Request/PromptItem_AddRequest.cs +++ b/src/Extensions/Senparc.Xncf.PromptRange/OHS/Local/PL/Request/PromptItem_AddRequest.cs @@ -64,6 +64,10 @@ public class PromptItem_AddRequest public string Note { get; set; } public string ExpectedResultsJson { get; set; } + /// + /// 是否启用“ai评分标准” + /// + public bool isAIGrade { get; set; } = false; public string Prefix { get; set; } public string Suffix { get; set; } diff --git a/src/Extensions/Senparc.Xncf.PromptRange/Register.cs b/src/Extensions/Senparc.Xncf.PromptRange/Register.cs index eb5d2d60b..9f6240056 100644 --- a/src/Extensions/Senparc.Xncf.PromptRange/Register.cs +++ b/src/Extensions/Senparc.Xncf.PromptRange/Register.cs @@ -32,7 +32,7 @@ public partial class Register : XncfRegisterBase, IXncfRegister public override string Uid => "C6175B8E-9F79-4053-9523-F8E4AC0C3E18"; //必须确保全局唯一,生成后必须固定,已自动生成,也可自行修改 - public override string Version => "0.13.17"; //必须填写版本号 + public override string Version => "0.13.18"; //必须填写版本号 public override string MenuName => "提示词靶场"; @@ -130,3 +130,4 @@ public override IServiceCollection AddXncfModule(IServiceCollection services, IC + diff --git a/src/Extensions/Senparc.Xncf.PromptRange/Senparc.Xncf.PromptRange.csproj b/src/Extensions/Senparc.Xncf.PromptRange/Senparc.Xncf.PromptRange.csproj index 250082203..91f6ddb2e 100644 --- a/src/Extensions/Senparc.Xncf.PromptRange/Senparc.Xncf.PromptRange.csproj +++ b/src/Extensions/Senparc.Xncf.PromptRange/Senparc.Xncf.PromptRange.csproj @@ -1,7 +1,7 @@ net8.0 - 0.13.19-preview + 0.14.0-preview.1 10.0 @@ -65,8 +65,8 @@ [2025-05-18] v0.13.15-preview1 Update Installation [2025-06-20] v0.13.16-preview1 Add MCP functions in XncfRegisterBase class [2025-08-19] v0.13.17-preview.1 remove debug code in prompt.js - [2025-11-01] update basic libraries, including Senparc.AI + [2025-11-06] v0.14.0-preview.1 add AI score standard setting https://github.com/NeuCharFramework/NcfPackageSources Debug;Release;Debug-Dapr;Test;TemplateRelease;NcfDebugForPromptRange diff --git a/src/Extensions/Senparc.Xncf.PromptRange/wwwroot/js/PromptRange/prompt.js b/src/Extensions/Senparc.Xncf.PromptRange/wwwroot/js/PromptRange/prompt.js index b28c6576c..8b588bfb0 100644 --- a/src/Extensions/Senparc.Xncf.PromptRange/wwwroot/js/PromptRange/prompt.js +++ b/src/Extensions/Senparc.Xncf.PromptRange/wwwroot/js/PromptRange/prompt.js @@ -2,6 +2,7 @@ var app = new Vue({ el: "#app", data() { return { + isAIGrade: true, devHost: 'http://pr-felixj.frp.senparc.com', pageChange: false, // 页面是否有变化 isAvg: true, // 是否平均分 默认false 不平均 @@ -628,14 +629,15 @@ var app = new Vue({ prefix: this.promptParamForm.prefix } // ai评分标准 + _postData.isAIGrade = this.isAIGrade if (this.aiScoreForm.resultList.length > 0) { let _list = this.aiScoreForm.resultList.map(item => item.value) _list = _list.filter(item => item) if (_list.length > 0) { _postData.expectedResultsJson = JSON.stringify(_list) } - } + if (this.promptParamForm.variableList.length > 0) { _postData.variableDictJson = this.convertData(this.promptParamForm.variableList) } @@ -810,6 +812,7 @@ var app = new Vue({ } // ai评分标准 + _postData.isAIGrade = this.isAIGrade if (this.aiScoreForm.resultList.length > 0) { let _list = this.aiScoreForm.resultList.map(item => item.value) _list = _list.filter(item => item) @@ -817,6 +820,7 @@ var app = new Vue({ _postData.expectedResultsJson = JSON.stringify(_list) } } + // 请求参数 if (this.promptParamForm.variableList.length > 0) { _postData.variableDictJson = this.convertData(this.promptParamForm.variableList)