对话日志 详情
| 82 | |
| 83 | |
| 84 | class ChatRecord(AppModelMixin): |
| 85 | """ |
| 86 | 对话日志 详情 |
| 87 | """ |
| 88 | id = models.UUIDField(primary_key=True, max_length=128, default=uuid.uuid7, editable=False, verbose_name="主键id") |
| 89 | chat = models.ForeignKey(Chat, on_delete=models.CASCADE) |
| 90 | vote_status = models.CharField(verbose_name='投票', max_length=10, choices=VoteChoices.choices, |
| 91 | default=VoteChoices.UN_VOTE) |
| 92 | vote_reason = models.CharField(verbose_name='投票原因', max_length=50, choices=VoteReasonChoices.choices, null=True, |
| 93 | blank=True) |
| 94 | vote_other_content = models.CharField(verbose_name='其他原因', max_length=1024, default='') |
| 95 | problem_text = models.CharField(max_length=10240, verbose_name="问题") |
| 96 | answer_text = models.CharField(max_length=40960, verbose_name="答案") |
| 97 | answer_text_list = ArrayField(verbose_name="改进标注列表", |
| 98 | base_field=models.JSONField() |
| 99 | , default=list) |
| 100 | message_tokens = models.IntegerField(verbose_name="请求token数量", default=0) |
| 101 | answer_tokens = models.IntegerField(verbose_name="响应token数量", default=0) |
| 102 | const = models.IntegerField(verbose_name="总费用", default=0) |
| 103 | details = models.JSONField(verbose_name="对话详情", default=dict, encoder=SystemEncoder) |
| 104 | improve_paragraph_id_list = ArrayField(verbose_name="改进标注列表", |
| 105 | base_field=models.UUIDField(max_length=128, blank=True) |
| 106 | , default=list) |
| 107 | run_time = models.FloatField(verbose_name="运行时长", default=0) |
| 108 | index = models.IntegerField(verbose_name="对话下标") |
| 109 | source = models.JSONField(verbose_name="来源", default=dict) |
| 110 | ip_address = models.CharField(max_length=128, verbose_name="ip地址", default='') |
| 111 | |
| 112 | def get_human_message(self): |
| 113 | if 'problem_padding' in self.details: |
| 114 | return HumanMessage(content=self.details.get('problem_padding').get('padding_problem_text')) |
| 115 | return HumanMessage(content=self.problem_text) |
| 116 | |
| 117 | def get_ai_message(self): |
| 118 | answer_text = self.answer_text |
| 119 | if answer_text is None or len(str(answer_text).strip()) == 0: |
| 120 | answer_text = _( |
| 121 | 'Sorry, no relevant content was found. Please re-describe your problem or provide more information. ') |
| 122 | return AIMessage(content=answer_text) |
| 123 | |
| 124 | def get_node_details_runtime_node_id(self, runtime_node_id): |
| 125 | return self.details.get(runtime_node_id, None) |
| 126 | |
| 127 | class Meta: |
| 128 | db_table = "application_chat_record" |
| 129 | |
| 130 | |
| 131 | class ApplicationChatUserStats(AppModelMixin): |
no outgoing calls
no test coverage detected