Files
keyboard/keyBoard/Class/AiTalk/VM/AiVM.h
2026-02-02 17:07:46 +08:00

195 lines
8.2 KiB
Objective-C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// AiVM.h
// keyBoard
//
// Created by Mac on 2026/1/22.
//
#import <Foundation/Foundation.h>
#import "KBPersonaPageModel.h"
#import "KBChatHistoryPageModel.h"
#import "KBCommentModel.h"
#import "KBLikedCompanionModel.h"
#import "KBChattedCompanionModel.h"
#import "KBChatSessionResetModel.h"
#import "KBAICompanionDetailModel.h"
NS_ASSUME_NONNULL_BEGIN
@interface KBAiSyncData : NSObject
@property(nonatomic, copy, nullable) NSString *aiResponse;
@property(nonatomic, copy, nullable) NSString *audioBase64;
@property(nonatomic, strong, nullable) NSData *audioData;
@end
@interface KBAiSyncResponse : NSObject
@property(nonatomic, assign) NSInteger code;
@property(nonatomic, strong, nullable) KBAiSyncData *data;
@end
typedef void (^AiVMSyncCompletion)(KBAiSyncResponse *_Nullable response,
NSError *_Nullable error);
@interface KBAiMessageData : NSObject
@property(nonatomic, copy, nullable) NSString *content;
@property(nonatomic, copy, nullable) NSString *text;
@property(nonatomic, copy, nullable) NSString *message;
@property(nonatomic, copy, nullable) NSString *aiResponse;
@property(nonatomic, copy, nullable) NSString *audioId;
@property(nonatomic, assign) NSInteger llmDuration;
@end
@interface KBAiMessageResponse : NSObject
@property(nonatomic, assign) NSInteger code;
@property(nonatomic, strong, nullable) KBAiMessageData *data;
@property(nonatomic, copy, nullable) NSString *message;
@end
typedef void (^AiVMMessageCompletion)(KBAiMessageResponse *_Nullable response,
NSError *_Nullable error);
typedef void (^AiVMAudioURLCompletion)(NSString *_Nullable audioURL,
NSError *_Nullable error);
typedef void (^AiVMUploadAudioCompletion)(NSString *_Nullable fileURL,
NSError *_Nullable error);
@interface KBAiSpeechTranscribeData : NSObject
@property(nonatomic, copy, nullable) NSString *transcript;
@property(nonatomic, assign) double confidence;
@property(nonatomic, assign) double duration;
@property(nonatomic, copy, nullable) NSString *detectedLanguage;
@end
@interface KBAiSpeechTranscribeResponse : NSObject
@property(nonatomic, assign) NSInteger code;
@property(nonatomic, strong, nullable) KBAiSpeechTranscribeData *data;
@property(nonatomic, copy, nullable) NSString *message;
@end
typedef void (^AiVMSpeechTranscribeCompletion)(KBAiSpeechTranscribeResponse *_Nullable response,
NSError *_Nullable error);
@interface AiVM : NSObject
- (void)syncChatWithTranscript:(NSString *)transcript
completion:(AiVMSyncCompletion)completion;
/// ai文本润色同时获取音频id
- (void)requestChatMessageWithContent:(NSString *)content
companionId:(NSInteger)companionId
completion:(AiVMMessageCompletion)completion;
/// 根据 audioId 获取音频 URL
- (void)requestAudioWithAudioId:(NSString *)audioId
completion:(AiVMAudioURLCompletion)completion;
/// 上传语音文件m4a
- (void)uploadAudioFileAtURL:(NSURL *)fileURL
completion:(AiVMUploadAudioCompletion)completion;
/// 语音转文字multipart/form-data
- (void)transcribeAudioFileAtURL:(NSURL *)fileURL
completion:(AiVMSpeechTranscribeCompletion)completion;
#pragma mark - 人设相关接口
/// 分页查询人设列表
/// @param pageNum 页码(从 1 开始)
/// @param pageSize 每页大小
/// @param completion 完成回调
- (void)fetchPersonasWithPageNum:(NSInteger)pageNum
pageSize:(NSInteger)pageSize
completion:(void(^)(KBPersonaPageModel * _Nullable pageModel, NSError * _Nullable error))completion;
/// 分页查询聊天记录
/// @param companionId AI 陪聊角色 ID
/// @param pageNum 页码(从 1 开始)
/// @param pageSize 每页大小
/// @param completion 完成回调
- (void)fetchChatHistoryWithCompanionId:(NSInteger)companionId
pageNum:(NSInteger)pageNum
pageSize:(NSInteger)pageSize
completion:(void(^)(KBChatHistoryPageModel * _Nullable pageModel, NSError * _Nullable error))completion;
#pragma mark - 评论相关接口
/// 发表评论
/// @param companionId AI 陪聊角色 ID
/// @param content 评论内容
/// @param parentId 父评论 ID一级评论传 NULL
/// @param rootId 根评论 ID用于标识一级评论
/// @param completion 完成回调newItem 可能为空,取决于后端是否返回 data
- (void)addCommentWithCompanionId:(NSInteger)companionId
content:(NSString *)content
parentId:(nullable NSNumber *)parentId
rootId:(nullable NSNumber *)rootId
completion:(void(^)(KBCommentItem * _Nullable newItem, NSInteger code, NSError * _Nullable error))completion;
/// 分页查询评论列表
/// @param companionId AI 陪聊角色 ID
/// @param pageNum 页码(从 1 开始,默认 1
/// @param pageSize 每页大小(默认 20
/// @param completion 完成回调(返回评论分页模型)
- (void)fetchCommentsWithCompanionId:(NSInteger)companionId
pageNum:(NSInteger)pageNum
pageSize:(NSInteger)pageSize
completion:(void(^)(KBCommentPageModel * _Nullable pageModel, NSError * _Nullable error))completion;
/// 点赞/取消点赞评论
/// @param commentId 评论 ID
/// @param completion 完成回调(返回点赞响应模型)
- (void)likeCommentWithCommentId:(NSInteger)commentId
completion:(void(^)(KBCommentLikeResponse * _Nullable response, NSError * _Nullable error))completion;
/// 点赞/取消点赞 AI 角色
/// @param companionId AI 角色 ID
/// @param completion 完成回调(返回点赞响应模型)
- (void)likeCompanionWithCompanionId:(NSInteger)companionId
completion:(void(^)(KBCommentLikeResponse * _Nullable response, NSError * _Nullable error))completion;
#pragma mark - 点赞列表接口
/// 获取当前用户点赞过的 AI 角色列表Thumbs Up
/// @param completion 完成回调(返回点赞角色数组)
- (void)fetchLikedCompanionsWithCompletion:(void(^)(NSArray<KBLikedCompanionModel *> * _Nullable list, NSError * _Nullable error))completion;
/// 获取当前用户聊过天的 AI 角色列表Chatting
/// @param completion 完成回调(返回聊天角色数组)
- (void)fetchChattedCompanionsWithCompletion:(void(^)(NSArray<KBChattedCompanionModel *> * _Nullable list, NSError * _Nullable error))completion;
#pragma mark - 会话管理接口
/// 重置会话(将当前会话设为不活跃并创建新会话)
/// @param companionId AI 角色 ID
/// @param completion 完成回调(返回新会话信息)
- (void)resetChatSessionWithCompanionId:(NSInteger)companionId
completion:(void(^)(KBChatSessionResetResponse * _Nullable response, NSError * _Nullable error))completion;
#pragma mark - AI 角色详情接口
/// 根据 ID 获取 AI 角色详情
/// @param companionId AI 角色 ID
/// @param completion 完成回调(返回角色详情)
- (void)fetchCompanionDetailWithCompanionId:(NSInteger)companionId
completion:(void(^)(KBAICompanionDetailModel * _Nullable detail, NSError * _Nullable error))completion;
#pragma mark - 举报接口
/// 举报 AI 角色
/// @param companionId AI 角色 ID
/// @param reportTypes 举报类型数组(按界面从上到下 1-12
/// @param reportDesc 详细描述
/// @param chatContext 聊天上下文快照 JSON 字符串
/// @param evidenceImageUrl 图片证据 URL
/// @param completion 完成回调
- (void)reportCompanionWithCompanionId:(NSInteger)companionId
reportTypes:(NSArray<NSNumber *> *)reportTypes
reportDesc:(nullable NSString *)reportDesc
chatContext:(nullable NSString *)chatContext
evidenceImageUrl:(nullable NSString *)evidenceImageUrl
completion:(void(^)(BOOL success, NSError * _Nullable error))completion;
@end
NS_ASSUME_NONNULL_END