zhangxiao
2024-08-05 f6ba464aa7856b8201e313fe79e651aab34e6509
src/views/dmx/knowledgeLib/test.vue
@@ -1,188 +1,215 @@
<template>
    <div class="main-container">
      <div class="main-container-lf">
        <div class="main-container-lf-top">检索测试</div>
        <div class="main-container-lf-down">
          <div style="color: #999;">最后一步! 成功后,剩下的就交给Infiniflow AI吧。</div>
          <a-divider style="margin-top: 10px" />
          <a-form ref="formRef"  :model="form" :style="{width:'100%'}" layout="vertical"  @submit="handleSubmit">
            <a-form-item field="similarity_threshold" label="相似度阈值">
              <a-slider v-model="form.similarity_threshold"  />
            </a-form-item>
            <a-form-item field="slider" label="关键字相似度权重" :rules="[{type:'number', min:5,message:'slider is min than 5'}]">
              <a-slider v-model="form.vector_similarity_weight"  />
            </a-form-item>
            <a-form-item field="section" label="Rerank模型" :rules="[{match:/section one/,message:'请选择'}]">
              <a-space direction="vertical" size="large">
                <a-select :size="'large'" v-model="form.rerank_id" :style="{width:'100%'}" placeholder="请选择 ..." allow-clear>
                  <a-optgroup  :label="index" v-for="(item,index) in modelList" :key=index>
                    <a-option
                      v-for="(obj) in item"
                      :key="obj.fid"
                      :disabled="!obj.available"
                      :value="obj.llm_name"
                    >
                      {{obj.llm_name}}
                    </a-option>
                  </a-optgroup>
                </a-select>
              </a-space>
            </a-form-item>
            <a-form-item field="slider" label="Top-K" :rules="[{type:'number', min:5,message:'slider is min than 5'}]">
              <a-slider v-model="form.top_k" :min="1" :max="2048" />
            </a-form-item>
            <a-form-item >
              <div class="main-container-form-item-extra">
                <div class="main-container-form-item-extra-top">测试文本</div>
                <div class="main-container-form-item-extra-down">
                  <a-textarea v-model="form.question" style="height: 10rem;border: 1px solid  var(--color-fill-3);border-radius: 4px" placeholder="" allow-clear/>
                </div>
                <div class="main-container-form-item-extra-btn">
                  <a-button type="primary" html-type="submit">测试</a-button>
                </div>
  <div class="main-container">
    <div class="main-container-lf">
      <div class="main-container-lf-top">检索测试</div>
      <div class="main-container-lf-down">
        <div style="color: #999"
          >最后一步! 成功后,剩下的就交给Infiniflow AI吧。</div
        >
        <a-divider style="margin-top: 10px" />
        <a-form
          ref="formRef"
          :model="form"
          :style="{ width: '100%' }"
          layout="vertical"
          @submit="handleSubmit"
        >
          <a-form-item field="similarity_threshold" label="相似度阈值">
            <a-slider v-model="form.similarity_threshold" />
          </a-form-item>
          <a-form-item
            field="slider"
            label="关键字相似度权重"
            :rules="[
              { type: 'number', min: 5, message: 'slider is min than 5' },
            ]"
          >
            <a-slider v-model="form.vector_similarity_weight" />
          </a-form-item>
          <a-form-item
            field="section"
            label="Rerank模型"
            :rules="[{ match: /section one/, message: '请选择' }]"
          >
            <a-space direction="vertical" size="large">
              <a-select
                :size="'large'"
                v-model="form.rerank_id"
                :style="{ width: '100%' }"
                placeholder="请选择 ..."
                allow-clear
              >
                <a-optgroup
                  :label="index"
                  v-for="(item, index) in modelList"
                  :key="index"
                >
                  <a-option
                    v-for="obj in item"
                    :key="obj.fid"
                    :disabled="!obj.available"
                    :value="obj.llm_name"
                  >
                    {{ obj.llm_name }}
                  </a-option>
                </a-optgroup>
              </a-select>
            </a-space>
          </a-form-item>
          <a-form-item
            field="slider"
            label="Top-K"
            :rules="[
              { type: 'number', min: 5, message: 'slider is min than 5' },
            ]"
          >
            <a-slider v-model="form.top_k" :min="1" :max="2048" />
          </a-form-item>
          <a-form-item>
            <div class="main-container-form-item-extra">
              <div class="main-container-form-item-extra-top">测试文本</div>
              <div class="main-container-form-item-extra-down">
                <a-textarea
                  v-model="form.question"
                  style="
                    height: 10rem;
                    border: 1px solid var(--color-fill-3);
                    border-radius: 4px;
                  "
                  placeholder=""
                  allow-clear
                />
              </div>
            </a-form-item>
          </a-form>
        </div>
      </div>
      <div class="main-container-rt">
        <a-collapse style="width: 96%;margin-top: 1rem;margin-left: 2%">
          <a-collapse-item header="0/0 选定的文件" key="3">
            <template #extra>
              <a-tag size="small">命中数</a-tag>
              <a-tag size="small">看法</a-tag>
            </template>
            <div>
              <a-empty />
              <div class="main-container-form-item-extra-btn">
                <a-button type="primary" html-type="submit">测试</a-button>
              </div>
            </div>
          </a-collapse-item>
        </a-collapse>
          </a-form-item>
        </a-form>
      </div>
    </div>
    <div class="main-container-rt">
      <a-collapse style="width: 96%; margin-top: 1rem; margin-left: 2%">
        <a-collapse-item header="0/0 选定的文件" key="3">
          <template #extra>
            <a-tag size="small">命中数</a-tag>
            <a-tag size="small">看法</a-tag>
          </template>
          <div>
            <a-empty />
          </div>
        </a-collapse-item>
      </a-collapse>
    </div>
  </div>
</template>
<script lang="ts" setup>
import { onMounted, onBeforeMount, reactive, ref, watch } from "vue";
import { Message } from '@arco-design/web-vue';
import { kbretrievalTest, queryModelList } from "@/api/kbList";
// import { usePinia } from "../../../store";
// const store = usePinia();
// const props = defineProps(['kbId'])
  import { onMounted, onBeforeMount, reactive, ref, watch } from 'vue';
  import { Message } from '@arco-design/web-vue';
  import { kbretrievalTest, queryModelList } from '@/api/kbList';
  // const props = defineProps(['kbId'])
// watch(() => props.kbId, (newValue, oldValue) => {
//   console.log('kbId 变化了', newValue, oldValue);
// },{
//   deep:true,
// });
  // watch(() => props.kbId, (newValue, oldValue) => {
  //   console.log('kbId 变化了', newValue, oldValue);
  // },{
  //   deep:true,
  // });
let visible = ref(false);
let loading = ref(false);
const formRef = ref(null);
const kbid = ref('');
const modelList = ref({});
let form = reactive({
  page: 1,
  question: '',
  rerank_id: '',
  similarity_threshold: 20,
  size: 10,
  top_k: 1024,
  vector_similarity_weight: 30,
});
const formatter = (value) => {
  // return String(Math.round(value / 100))
};
const handleSubmit = async ({values, errors}) => {
  // console.log(props.kbobj, 'props.kbobj');
  if (!form.question){
    return
  }
  let formObj = {
    ...form,
    kb_id:kbid.value,
  }
  formObj.similarity_threshold = formObj.similarity_threshold/100;
  formObj.vector_similarity_weight = formObj.vector_similarity_weight/100;
   const data = await kbretrievalTest(formObj);
}
const handleClick = () => {
  visible.value = true;
};
const handleCancel = () => {
  visible.value = false;
}
const handleOpened =(el) => {
  Object.assign(form,{
  let visible = ref(false);
  let loading = ref(false);
  const formRef = ref(null);
  const kbid = ref('');
  const modelList = ref({});
  let form = reactive({
    page: 1,
    question: '',
    rerank_id: '',
    similarity_threshold: 20,
    size: 10,
    top_k: 1024,
    vector_similarity_weight: 30,
  });
  formRef.value.resetFields();
}
const changekbid = (value) => {
  kbid.value = value;
}
  const formatter = (value) => {
    // return String(Math.round(value / 100))
  };
const queryModel = async (params) => {
  try {
    const data = await queryModelList(params);
    console.log(data.data, '大模型列表');
    modelList.value = {
      BAAI: [data.data.BAAI[1]],
      Jina: data.data.Jina,
      youdao: data.data.youdao
  const handleSubmit = async ({ values, errors }) => {
    // console.log(props.kbobj, 'props.kbobj');
    if (!form.question) {
      return;
    }
    let formObj = {
      ...form,
      kb_id: kbid.value,
    };
  } catch (err) {
    // you can report use errorHandler or other
  } finally {
    formObj.similarity_threshold = formObj.similarity_threshold / 100;
    formObj.vector_similarity_weight = formObj.vector_similarity_weight / 100;
    const data = await kbretrievalTest(formObj);
  };
  }
};
  const handleClick = () => {
    visible.value = true;
  };
  const handleCancel = () => {
    visible.value = false;
  };
  const handleOpened = (el) => {
    Object.assign(form, {});
    formRef.value.resetFields();
  };
defineExpose({
  changekbid
})
  const changekbid = (value) => {
    kbid.value = value;
  };
onBeforeMount(()=>{
  queryModel({})
})
onMounted(()=>{
  const queryModel = async (params) => {
    try {
      const data = await queryModelList(params);
      console.log(data.data, '大模型列表');
      modelList.value = {
        BAAI: [data.data.BAAI[1]],
        Jina: data.data.Jina,
        youdao: data.data.youdao,
      };
    } catch (err) {
      // you can report use errorHandler or other
    } finally {
    }
  };
  defineExpose({
    changekbid,
  });
})
  onBeforeMount(() => {
    queryModel({});
  });
  onMounted(() => {});
</script>
<script lang="ts">
export default {
  name: 'config',
  methods: {
  }
};
  export default {
    name: 'config',
    methods: {},
  };
</script>
<style scoped lang="less">
  .main-container{
  .main-container {
    display: flex;
    justify-content: space-between;
    height: 100%;
    //background: #626aea;
    &-lf{
    &-lf {
      width: 30%;
      height: 100%;
      //border: 1px solid #cccccc;
      background: #ffffff;
      border-radius: 10px;
      overflow: hidden;
      &-top{
      &-top {
        width: 100%;
        height: 60px;
        line-height: 60px;
@@ -190,38 +217,38 @@
        color: #ffffff;
        text-align: center;
      }
      &-down{
      &-down {
        padding: 20px;
        width: 100%;
      }
    }
    &-form-item-extra{
    &-form-item-extra {
      width: 100%;
      height: 20rem;
      border: 1px solid var(--color-fill-3);
      border-radius: 6px;
      overflow: hidden;
      &-top{
      &-top {
        width: 100%;
        height: 40px;
        line-height: 40px;
        border-bottom: 1px solid  var(--color-fill-3);
        border-bottom: 1px solid var(--color-fill-3);
        //background: rgb(var(--primary-6));
        color: #999999;
        text-align: center;
      }
      &-down{
      &-down {
        width: 92%;
        margin-left: 4%;
        margin-top: 30px;
      }
      &-btn{
      &-btn {
        width: 96%;
        text-align: right;
        margin-top: 1rem;
      }
    }
    &-rt{
    &-rt {
      width: 69%;
      height: 100%;
      //background: #626aea;
@@ -230,4 +257,4 @@
      border-radius: 10px;
    }
  }
</style>
</style>