2026-01-22 13:47:34 +08:00
|
|
|
|
//
|
|
|
|
|
|
// AiVM.h
|
|
|
|
|
|
// keyBoard
|
|
|
|
|
|
//
|
|
|
|
|
|
// Created by Mac on 2026/1/22.
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
|
|
|
|
#import <Foundation/Foundation.h>
|
2026-01-26 16:53:41 +08:00
|
|
|
|
#import "KBPersonaPageModel.h"
|
2026-01-26 18:17:02 +08:00
|
|
|
|
#import "KBChatHistoryPageModel.h"
|
2026-01-27 21:32:52 +08:00
|
|
|
|
#import "KBCommentModel.h"
|
2026-01-28 16:35:47 +08:00
|
|
|
|
#import "KBLikedCompanionModel.h"
|
|
|
|
|
|
#import "KBChattedCompanionModel.h"
|
2026-01-28 18:58:30 +08:00
|
|
|
|
#import "KBChatSessionResetModel.h"
|
2026-01-22 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
NS_ASSUME_NONNULL_BEGIN
|
|
|
|
|
|
|
2026-01-22 22:03:56 +08:00
|
|
|
|
@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;
|
2026-01-23 21:51:37 +08:00
|
|
|
|
@property(nonatomic, copy, nullable) NSString *aiResponse;
|
|
|
|
|
|
@property(nonatomic, copy, nullable) NSString *audioId;
|
|
|
|
|
|
@property(nonatomic, assign) NSInteger llmDuration;
|
2026-01-22 22:03:56 +08:00
|
|
|
|
@end
|
|
|
|
|
|
|
|
|
|
|
|
@interface KBAiMessageResponse : NSObject
|
|
|
|
|
|
@property(nonatomic, assign) NSInteger code;
|
|
|
|
|
|
@property(nonatomic, strong, nullable) KBAiMessageData *data;
|
2026-01-27 16:28:17 +08:00
|
|
|
|
@property(nonatomic, copy, nullable) NSString *message;
|
2026-01-22 22:03:56 +08:00
|
|
|
|
@end
|
|
|
|
|
|
|
|
|
|
|
|
typedef void (^AiVMMessageCompletion)(KBAiMessageResponse *_Nullable response,
|
|
|
|
|
|
NSError *_Nullable error);
|
|
|
|
|
|
|
2026-01-23 21:51:37 +08:00
|
|
|
|
typedef void (^AiVMAudioURLCompletion)(NSString *_Nullable audioURL,
|
|
|
|
|
|
NSError *_Nullable error);
|
2026-01-27 13:57:32 +08:00
|
|
|
|
typedef void (^AiVMUploadAudioCompletion)(NSString *_Nullable fileURL,
|
|
|
|
|
|
NSError *_Nullable error);
|
2026-01-22 22:03:56 +08:00
|
|
|
|
|
2026-01-27 16:28:17 +08:00
|
|
|
|
@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);
|
|
|
|
|
|
|
2026-01-22 13:47:34 +08:00
|
|
|
|
@interface AiVM : NSObject
|
|
|
|
|
|
|
2026-01-22 22:03:56 +08:00
|
|
|
|
- (void)syncChatWithTranscript:(NSString *)transcript
|
|
|
|
|
|
completion:(AiVMSyncCompletion)completion;
|
|
|
|
|
|
|
|
|
|
|
|
- (void)requestChatMessageWithContent:(NSString *)content
|
2026-01-26 18:51:37 +08:00
|
|
|
|
companionId:(NSInteger)companionId
|
2026-01-22 22:03:56 +08:00
|
|
|
|
completion:(AiVMMessageCompletion)completion;
|
|
|
|
|
|
|
2026-01-23 21:51:37 +08:00
|
|
|
|
/// 根据 audioId 获取音频 URL
|
|
|
|
|
|
- (void)requestAudioWithAudioId:(NSString *)audioId
|
|
|
|
|
|
completion:(AiVMAudioURLCompletion)completion;
|
2026-01-22 22:03:56 +08:00
|
|
|
|
|
2026-01-27 13:57:32 +08:00
|
|
|
|
/// 上传语音文件(m4a)
|
|
|
|
|
|
- (void)uploadAudioFileAtURL:(NSURL *)fileURL
|
|
|
|
|
|
completion:(AiVMUploadAudioCompletion)completion;
|
|
|
|
|
|
|
2026-01-27 16:28:17 +08:00
|
|
|
|
/// 语音转文字(multipart/form-data)
|
|
|
|
|
|
- (void)transcribeAudioFileAtURL:(NSURL *)fileURL
|
|
|
|
|
|
completion:(AiVMSpeechTranscribeCompletion)completion;
|
|
|
|
|
|
|
2026-01-26 16:53:41 +08:00
|
|
|
|
#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;
|
|
|
|
|
|
|
2026-01-26 18:17:02 +08:00
|
|
|
|
/// 分页查询聊天记录
|
|
|
|
|
|
/// @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;
|
|
|
|
|
|
|
2026-01-27 21:32:52 +08:00
|
|
|
|
#pragma mark - 评论相关接口
|
|
|
|
|
|
|
|
|
|
|
|
/// 发表评论
|
|
|
|
|
|
/// @param companionId AI 陪聊角色 ID
|
|
|
|
|
|
/// @param content 评论内容
|
|
|
|
|
|
/// @param parentId 父评论 ID(一级评论传 NULL)
|
|
|
|
|
|
/// @param rootId 根评论 ID(用于标识一级评论)
|
|
|
|
|
|
/// @param completion 完成回调(返回 code 200 表示成功)
|
|
|
|
|
|
- (void)addCommentWithCompanionId:(NSInteger)companionId
|
|
|
|
|
|
content:(NSString *)content
|
|
|
|
|
|
parentId:(nullable NSNumber *)parentId
|
|
|
|
|
|
rootId:(NSInteger)rootId
|
|
|
|
|
|
completion:(void(^)(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;
|
|
|
|
|
|
|
2026-01-28 16:35:47 +08:00
|
|
|
|
#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;
|
|
|
|
|
|
|
2026-01-28 18:58:30 +08:00
|
|
|
|
#pragma mark - 会话管理接口
|
|
|
|
|
|
|
|
|
|
|
|
/// 重置会话(将当前会话设为不活跃并创建新会话)
|
|
|
|
|
|
/// @param companionId AI 角色 ID
|
|
|
|
|
|
/// @param completion 完成回调(返回新会话信息)
|
|
|
|
|
|
- (void)resetChatSessionWithCompanionId:(NSInteger)companionId
|
|
|
|
|
|
completion:(void(^)(KBChatSessionResetResponse * _Nullable response, NSError * _Nullable error))completion;
|
|
|
|
|
|
|
2026-01-22 13:47:34 +08:00
|
|
|
|
@end
|
|
|
|
|
|
|
|
|
|
|
|
NS_ASSUME_NONNULL_END
|