179 lines
7.4 KiB
Objective-C
179 lines
7.4 KiB
Objective-C
//
|
||
// 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;
|
||
|
||
@end
|
||
|
||
NS_ASSUME_NONNULL_END
|