feat(proto): AIRequest.images for vision multimodal input.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Kaien 2026-09-09 18:18:30 +03:00
parent ea73b19a88
commit 72125c137a
2 changed files with 230 additions and 139 deletions

356
ai.pb.go
View File

@ -261,6 +261,10 @@ type AIRequest struct {
// Live chat clients (Telegram/Steam) send this; when empty, image intent // Live chat clients (Telegram/Steam) send this; when empty, image intent
// detection is skipped and the request is treated as normal chat. // detection is skipped and the request is treated as normal chat.
UserMessage string `protobuf:"bytes,11,opt,name=user_message,json=userMessage,proto3" json:"user_message,omitempty"` UserMessage string `protobuf:"bytes,11,opt,name=user_message,json=userMessage,proto3" json:"user_message,omitempty"`
// Optional image attachments for vision models (photo/sticker/GIF frame).
// When non-empty, GenerateAnswer routes to LLM_VISION_MODEL and builds a
// multimodal user message; image-generation intent is skipped.
Images []*InputImage `protobuf:"bytes,12,rep,name=images,proto3" json:"images,omitempty"`
unknownFields protoimpl.UnknownFields unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
} }
@ -372,6 +376,74 @@ func (x *AIRequest) GetUserMessage() string {
return "" return ""
} }
func (x *AIRequest) GetImages() []*InputImage {
if x != nil {
return x.Images
}
return nil
}
// InputImage — one vision attachment (raw bytes, not base64).
type InputImage struct {
state protoimpl.MessageState `protogen:"open.v1"`
Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` // raw image bytes (jpeg/png/webp/gif)
MimeType string `protobuf:"bytes,2,opt,name=mime_type,json=mimeType,proto3" json:"mime_type,omitempty"` // e.g. image/jpeg
Source string `protobuf:"bytes,3,opt,name=source,proto3" json:"source,omitempty"` // optional client hint: photo, sticker, animation, reply_photo, …
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *InputImage) Reset() {
*x = InputImage{}
mi := &file_ai_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *InputImage) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*InputImage) ProtoMessage() {}
func (x *InputImage) ProtoReflect() protoreflect.Message {
mi := &file_ai_proto_msgTypes[1]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use InputImage.ProtoReflect.Descriptor instead.
func (*InputImage) Descriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{1}
}
func (x *InputImage) GetData() []byte {
if x != nil {
return x.Data
}
return nil
}
func (x *InputImage) GetMimeType() string {
if x != nil {
return x.MimeType
}
return ""
}
func (x *InputImage) GetSource() string {
if x != nil {
return x.Source
}
return ""
}
// UsedMemory — снимок одного воспоминания, участвовавшего в генерации ответа. // UsedMemory — снимок одного воспоминания, участвовавшего в генерации ответа.
type UsedMemory struct { type UsedMemory struct {
state protoimpl.MessageState `protogen:"open.v1"` state protoimpl.MessageState `protogen:"open.v1"`
@ -389,7 +461,7 @@ type UsedMemory struct {
func (x *UsedMemory) Reset() { func (x *UsedMemory) Reset() {
*x = UsedMemory{} *x = UsedMemory{}
mi := &file_ai_proto_msgTypes[1] mi := &file_ai_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -401,7 +473,7 @@ func (x *UsedMemory) String() string {
func (*UsedMemory) ProtoMessage() {} func (*UsedMemory) ProtoMessage() {}
func (x *UsedMemory) ProtoReflect() protoreflect.Message { func (x *UsedMemory) ProtoReflect() protoreflect.Message {
mi := &file_ai_proto_msgTypes[1] mi := &file_ai_proto_msgTypes[2]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -414,7 +486,7 @@ func (x *UsedMemory) ProtoReflect() protoreflect.Message {
// Deprecated: Use UsedMemory.ProtoReflect.Descriptor instead. // Deprecated: Use UsedMemory.ProtoReflect.Descriptor instead.
func (*UsedMemory) Descriptor() ([]byte, []int) { func (*UsedMemory) Descriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{1} return file_ai_proto_rawDescGZIP(), []int{2}
} }
func (x *UsedMemory) GetId() int64 { func (x *UsedMemory) GetId() int64 {
@ -483,7 +555,7 @@ type AnswerGenerationOptions struct {
func (x *AnswerGenerationOptions) Reset() { func (x *AnswerGenerationOptions) Reset() {
*x = AnswerGenerationOptions{} *x = AnswerGenerationOptions{}
mi := &file_ai_proto_msgTypes[2] mi := &file_ai_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -495,7 +567,7 @@ func (x *AnswerGenerationOptions) String() string {
func (*AnswerGenerationOptions) ProtoMessage() {} func (*AnswerGenerationOptions) ProtoMessage() {}
func (x *AnswerGenerationOptions) ProtoReflect() protoreflect.Message { func (x *AnswerGenerationOptions) ProtoReflect() protoreflect.Message {
mi := &file_ai_proto_msgTypes[2] mi := &file_ai_proto_msgTypes[3]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -508,7 +580,7 @@ func (x *AnswerGenerationOptions) ProtoReflect() protoreflect.Message {
// Deprecated: Use AnswerGenerationOptions.ProtoReflect.Descriptor instead. // Deprecated: Use AnswerGenerationOptions.ProtoReflect.Descriptor instead.
func (*AnswerGenerationOptions) Descriptor() ([]byte, []int) { func (*AnswerGenerationOptions) Descriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{2} return file_ai_proto_rawDescGZIP(), []int{3}
} }
func (x *AnswerGenerationOptions) GetIncludeUserMemories() bool { func (x *AnswerGenerationOptions) GetIncludeUserMemories() bool {
@ -539,7 +611,7 @@ type AIResponse struct {
func (x *AIResponse) Reset() { func (x *AIResponse) Reset() {
*x = AIResponse{} *x = AIResponse{}
mi := &file_ai_proto_msgTypes[3] mi := &file_ai_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -551,7 +623,7 @@ func (x *AIResponse) String() string {
func (*AIResponse) ProtoMessage() {} func (*AIResponse) ProtoMessage() {}
func (x *AIResponse) ProtoReflect() protoreflect.Message { func (x *AIResponse) ProtoReflect() protoreflect.Message {
mi := &file_ai_proto_msgTypes[3] mi := &file_ai_proto_msgTypes[4]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -564,7 +636,7 @@ func (x *AIResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use AIResponse.ProtoReflect.Descriptor instead. // Deprecated: Use AIResponse.ProtoReflect.Descriptor instead.
func (*AIResponse) Descriptor() ([]byte, []int) { func (*AIResponse) Descriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{3} return file_ai_proto_rawDescGZIP(), []int{4}
} }
func (x *AIResponse) GetContent() string { func (x *AIResponse) GetContent() string {
@ -654,7 +726,7 @@ type GetAnswerJobRequest struct {
func (x *GetAnswerJobRequest) Reset() { func (x *GetAnswerJobRequest) Reset() {
*x = GetAnswerJobRequest{} *x = GetAnswerJobRequest{}
mi := &file_ai_proto_msgTypes[4] mi := &file_ai_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -666,7 +738,7 @@ func (x *GetAnswerJobRequest) String() string {
func (*GetAnswerJobRequest) ProtoMessage() {} func (*GetAnswerJobRequest) ProtoMessage() {}
func (x *GetAnswerJobRequest) ProtoReflect() protoreflect.Message { func (x *GetAnswerJobRequest) ProtoReflect() protoreflect.Message {
mi := &file_ai_proto_msgTypes[4] mi := &file_ai_proto_msgTypes[5]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -679,7 +751,7 @@ func (x *GetAnswerJobRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetAnswerJobRequest.ProtoReflect.Descriptor instead. // Deprecated: Use GetAnswerJobRequest.ProtoReflect.Descriptor instead.
func (*GetAnswerJobRequest) Descriptor() ([]byte, []int) { func (*GetAnswerJobRequest) Descriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{4} return file_ai_proto_rawDescGZIP(), []int{5}
} }
func (x *GetAnswerJobRequest) GetJobId() string { func (x *GetAnswerJobRequest) GetJobId() string {
@ -707,7 +779,7 @@ type AnswerJobResponse struct {
func (x *AnswerJobResponse) Reset() { func (x *AnswerJobResponse) Reset() {
*x = AnswerJobResponse{} *x = AnswerJobResponse{}
mi := &file_ai_proto_msgTypes[5] mi := &file_ai_proto_msgTypes[6]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -719,7 +791,7 @@ func (x *AnswerJobResponse) String() string {
func (*AnswerJobResponse) ProtoMessage() {} func (*AnswerJobResponse) ProtoMessage() {}
func (x *AnswerJobResponse) ProtoReflect() protoreflect.Message { func (x *AnswerJobResponse) ProtoReflect() protoreflect.Message {
mi := &file_ai_proto_msgTypes[5] mi := &file_ai_proto_msgTypes[6]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -732,7 +804,7 @@ func (x *AnswerJobResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use AnswerJobResponse.ProtoReflect.Descriptor instead. // Deprecated: Use AnswerJobResponse.ProtoReflect.Descriptor instead.
func (*AnswerJobResponse) Descriptor() ([]byte, []int) { func (*AnswerJobResponse) Descriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{5} return file_ai_proto_rawDescGZIP(), []int{6}
} }
func (x *AnswerJobResponse) GetState() AnswerJobState { func (x *AnswerJobResponse) GetState() AnswerJobState {
@ -792,7 +864,7 @@ type ToolCallTrace struct {
func (x *ToolCallTrace) Reset() { func (x *ToolCallTrace) Reset() {
*x = ToolCallTrace{} *x = ToolCallTrace{}
mi := &file_ai_proto_msgTypes[6] mi := &file_ai_proto_msgTypes[7]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -804,7 +876,7 @@ func (x *ToolCallTrace) String() string {
func (*ToolCallTrace) ProtoMessage() {} func (*ToolCallTrace) ProtoMessage() {}
func (x *ToolCallTrace) ProtoReflect() protoreflect.Message { func (x *ToolCallTrace) ProtoReflect() protoreflect.Message {
mi := &file_ai_proto_msgTypes[6] mi := &file_ai_proto_msgTypes[7]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -817,7 +889,7 @@ func (x *ToolCallTrace) ProtoReflect() protoreflect.Message {
// Deprecated: Use ToolCallTrace.ProtoReflect.Descriptor instead. // Deprecated: Use ToolCallTrace.ProtoReflect.Descriptor instead.
func (*ToolCallTrace) Descriptor() ([]byte, []int) { func (*ToolCallTrace) Descriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{6} return file_ai_proto_rawDescGZIP(), []int{7}
} }
func (x *ToolCallTrace) GetCallId() string { func (x *ToolCallTrace) GetCallId() string {
@ -872,7 +944,7 @@ type GetAIResponseTraceRequest struct {
func (x *GetAIResponseTraceRequest) Reset() { func (x *GetAIResponseTraceRequest) Reset() {
*x = GetAIResponseTraceRequest{} *x = GetAIResponseTraceRequest{}
mi := &file_ai_proto_msgTypes[7] mi := &file_ai_proto_msgTypes[8]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -884,7 +956,7 @@ func (x *GetAIResponseTraceRequest) String() string {
func (*GetAIResponseTraceRequest) ProtoMessage() {} func (*GetAIResponseTraceRequest) ProtoMessage() {}
func (x *GetAIResponseTraceRequest) ProtoReflect() protoreflect.Message { func (x *GetAIResponseTraceRequest) ProtoReflect() protoreflect.Message {
mi := &file_ai_proto_msgTypes[7] mi := &file_ai_proto_msgTypes[8]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -897,7 +969,7 @@ func (x *GetAIResponseTraceRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetAIResponseTraceRequest.ProtoReflect.Descriptor instead. // Deprecated: Use GetAIResponseTraceRequest.ProtoReflect.Descriptor instead.
func (*GetAIResponseTraceRequest) Descriptor() ([]byte, []int) { func (*GetAIResponseTraceRequest) Descriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{7} return file_ai_proto_rawDescGZIP(), []int{8}
} }
func (x *GetAIResponseTraceRequest) GetId() string { func (x *GetAIResponseTraceRequest) GetId() string {
@ -931,7 +1003,7 @@ type GetAIResponseTraceResponse struct {
func (x *GetAIResponseTraceResponse) Reset() { func (x *GetAIResponseTraceResponse) Reset() {
*x = GetAIResponseTraceResponse{} *x = GetAIResponseTraceResponse{}
mi := &file_ai_proto_msgTypes[8] mi := &file_ai_proto_msgTypes[9]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -943,7 +1015,7 @@ func (x *GetAIResponseTraceResponse) String() string {
func (*GetAIResponseTraceResponse) ProtoMessage() {} func (*GetAIResponseTraceResponse) ProtoMessage() {}
func (x *GetAIResponseTraceResponse) ProtoReflect() protoreflect.Message { func (x *GetAIResponseTraceResponse) ProtoReflect() protoreflect.Message {
mi := &file_ai_proto_msgTypes[8] mi := &file_ai_proto_msgTypes[9]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -956,7 +1028,7 @@ func (x *GetAIResponseTraceResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetAIResponseTraceResponse.ProtoReflect.Descriptor instead. // Deprecated: Use GetAIResponseTraceResponse.ProtoReflect.Descriptor instead.
func (*GetAIResponseTraceResponse) Descriptor() ([]byte, []int) { func (*GetAIResponseTraceResponse) Descriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{8} return file_ai_proto_rawDescGZIP(), []int{9}
} }
func (x *GetAIResponseTraceResponse) GetId() string { func (x *GetAIResponseTraceResponse) GetId() string {
@ -1077,7 +1149,7 @@ type CreateSessionRequest struct {
func (x *CreateSessionRequest) Reset() { func (x *CreateSessionRequest) Reset() {
*x = CreateSessionRequest{} *x = CreateSessionRequest{}
mi := &file_ai_proto_msgTypes[9] mi := &file_ai_proto_msgTypes[10]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -1089,7 +1161,7 @@ func (x *CreateSessionRequest) String() string {
func (*CreateSessionRequest) ProtoMessage() {} func (*CreateSessionRequest) ProtoMessage() {}
func (x *CreateSessionRequest) ProtoReflect() protoreflect.Message { func (x *CreateSessionRequest) ProtoReflect() protoreflect.Message {
mi := &file_ai_proto_msgTypes[9] mi := &file_ai_proto_msgTypes[10]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -1102,7 +1174,7 @@ func (x *CreateSessionRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use CreateSessionRequest.ProtoReflect.Descriptor instead. // Deprecated: Use CreateSessionRequest.ProtoReflect.Descriptor instead.
func (*CreateSessionRequest) Descriptor() ([]byte, []int) { func (*CreateSessionRequest) Descriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{9} return file_ai_proto_rawDescGZIP(), []int{10}
} }
func (x *CreateSessionRequest) GetUserId() string { func (x *CreateSessionRequest) GetUserId() string {
@ -1145,7 +1217,7 @@ type CreateSessionResponse struct {
func (x *CreateSessionResponse) Reset() { func (x *CreateSessionResponse) Reset() {
*x = CreateSessionResponse{} *x = CreateSessionResponse{}
mi := &file_ai_proto_msgTypes[10] mi := &file_ai_proto_msgTypes[11]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -1157,7 +1229,7 @@ func (x *CreateSessionResponse) String() string {
func (*CreateSessionResponse) ProtoMessage() {} func (*CreateSessionResponse) ProtoMessage() {}
func (x *CreateSessionResponse) ProtoReflect() protoreflect.Message { func (x *CreateSessionResponse) ProtoReflect() protoreflect.Message {
mi := &file_ai_proto_msgTypes[10] mi := &file_ai_proto_msgTypes[11]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -1170,7 +1242,7 @@ func (x *CreateSessionResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use CreateSessionResponse.ProtoReflect.Descriptor instead. // Deprecated: Use CreateSessionResponse.ProtoReflect.Descriptor instead.
func (*CreateSessionResponse) Descriptor() ([]byte, []int) { func (*CreateSessionResponse) Descriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{10} return file_ai_proto_rawDescGZIP(), []int{11}
} }
func (x *CreateSessionResponse) GetSessionId() string { func (x *CreateSessionResponse) GetSessionId() string {
@ -1208,7 +1280,7 @@ type AskInSessionRequest struct {
func (x *AskInSessionRequest) Reset() { func (x *AskInSessionRequest) Reset() {
*x = AskInSessionRequest{} *x = AskInSessionRequest{}
mi := &file_ai_proto_msgTypes[11] mi := &file_ai_proto_msgTypes[12]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -1220,7 +1292,7 @@ func (x *AskInSessionRequest) String() string {
func (*AskInSessionRequest) ProtoMessage() {} func (*AskInSessionRequest) ProtoMessage() {}
func (x *AskInSessionRequest) ProtoReflect() protoreflect.Message { func (x *AskInSessionRequest) ProtoReflect() protoreflect.Message {
mi := &file_ai_proto_msgTypes[11] mi := &file_ai_proto_msgTypes[12]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -1233,7 +1305,7 @@ func (x *AskInSessionRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use AskInSessionRequest.ProtoReflect.Descriptor instead. // Deprecated: Use AskInSessionRequest.ProtoReflect.Descriptor instead.
func (*AskInSessionRequest) Descriptor() ([]byte, []int) { func (*AskInSessionRequest) Descriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{11} return file_ai_proto_rawDescGZIP(), []int{12}
} }
func (x *AskInSessionRequest) GetSessionId() string { func (x *AskInSessionRequest) GetSessionId() string {
@ -1286,7 +1358,7 @@ type SessionStatusResponse struct {
func (x *SessionStatusResponse) Reset() { func (x *SessionStatusResponse) Reset() {
*x = SessionStatusResponse{} *x = SessionStatusResponse{}
mi := &file_ai_proto_msgTypes[12] mi := &file_ai_proto_msgTypes[13]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -1298,7 +1370,7 @@ func (x *SessionStatusResponse) String() string {
func (*SessionStatusResponse) ProtoMessage() {} func (*SessionStatusResponse) ProtoMessage() {}
func (x *SessionStatusResponse) ProtoReflect() protoreflect.Message { func (x *SessionStatusResponse) ProtoReflect() protoreflect.Message {
mi := &file_ai_proto_msgTypes[12] mi := &file_ai_proto_msgTypes[13]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -1311,7 +1383,7 @@ func (x *SessionStatusResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use SessionStatusResponse.ProtoReflect.Descriptor instead. // Deprecated: Use SessionStatusResponse.ProtoReflect.Descriptor instead.
func (*SessionStatusResponse) Descriptor() ([]byte, []int) { func (*SessionStatusResponse) Descriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{12} return file_ai_proto_rawDescGZIP(), []int{13}
} }
func (x *SessionStatusResponse) GetSessionId() string { func (x *SessionStatusResponse) GetSessionId() string {
@ -1367,7 +1439,7 @@ type StatelessMessage struct {
func (x *StatelessMessage) Reset() { func (x *StatelessMessage) Reset() {
*x = StatelessMessage{} *x = StatelessMessage{}
mi := &file_ai_proto_msgTypes[13] mi := &file_ai_proto_msgTypes[14]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -1379,7 +1451,7 @@ func (x *StatelessMessage) String() string {
func (*StatelessMessage) ProtoMessage() {} func (*StatelessMessage) ProtoMessage() {}
func (x *StatelessMessage) ProtoReflect() protoreflect.Message { func (x *StatelessMessage) ProtoReflect() protoreflect.Message {
mi := &file_ai_proto_msgTypes[13] mi := &file_ai_proto_msgTypes[14]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -1392,7 +1464,7 @@ func (x *StatelessMessage) ProtoReflect() protoreflect.Message {
// Deprecated: Use StatelessMessage.ProtoReflect.Descriptor instead. // Deprecated: Use StatelessMessage.ProtoReflect.Descriptor instead.
func (*StatelessMessage) Descriptor() ([]byte, []int) { func (*StatelessMessage) Descriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{13} return file_ai_proto_rawDescGZIP(), []int{14}
} }
func (x *StatelessMessage) GetRole() string { func (x *StatelessMessage) GetRole() string {
@ -1420,7 +1492,7 @@ type StatelessRequest struct {
func (x *StatelessRequest) Reset() { func (x *StatelessRequest) Reset() {
*x = StatelessRequest{} *x = StatelessRequest{}
mi := &file_ai_proto_msgTypes[14] mi := &file_ai_proto_msgTypes[15]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -1432,7 +1504,7 @@ func (x *StatelessRequest) String() string {
func (*StatelessRequest) ProtoMessage() {} func (*StatelessRequest) ProtoMessage() {}
func (x *StatelessRequest) ProtoReflect() protoreflect.Message { func (x *StatelessRequest) ProtoReflect() protoreflect.Message {
mi := &file_ai_proto_msgTypes[14] mi := &file_ai_proto_msgTypes[15]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -1445,7 +1517,7 @@ func (x *StatelessRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use StatelessRequest.ProtoReflect.Descriptor instead. // Deprecated: Use StatelessRequest.ProtoReflect.Descriptor instead.
func (*StatelessRequest) Descriptor() ([]byte, []int) { func (*StatelessRequest) Descriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{14} return file_ai_proto_rawDescGZIP(), []int{15}
} }
func (x *StatelessRequest) GetMessages() []*StatelessMessage { func (x *StatelessRequest) GetMessages() []*StatelessMessage {
@ -1471,7 +1543,7 @@ type HealthCheckRequest struct {
func (x *HealthCheckRequest) Reset() { func (x *HealthCheckRequest) Reset() {
*x = HealthCheckRequest{} *x = HealthCheckRequest{}
mi := &file_ai_proto_msgTypes[15] mi := &file_ai_proto_msgTypes[16]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -1483,7 +1555,7 @@ func (x *HealthCheckRequest) String() string {
func (*HealthCheckRequest) ProtoMessage() {} func (*HealthCheckRequest) ProtoMessage() {}
func (x *HealthCheckRequest) ProtoReflect() protoreflect.Message { func (x *HealthCheckRequest) ProtoReflect() protoreflect.Message {
mi := &file_ai_proto_msgTypes[15] mi := &file_ai_proto_msgTypes[16]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -1496,7 +1568,7 @@ func (x *HealthCheckRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use HealthCheckRequest.ProtoReflect.Descriptor instead. // Deprecated: Use HealthCheckRequest.ProtoReflect.Descriptor instead.
func (*HealthCheckRequest) Descriptor() ([]byte, []int) { func (*HealthCheckRequest) Descriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{15} return file_ai_proto_rawDescGZIP(), []int{16}
} }
// HealthCheckResponse для ответа на проверку здоровья // HealthCheckResponse для ответа на проверку здоровья
@ -1510,7 +1582,7 @@ type HealthCheckResponse struct {
func (x *HealthCheckResponse) Reset() { func (x *HealthCheckResponse) Reset() {
*x = HealthCheckResponse{} *x = HealthCheckResponse{}
mi := &file_ai_proto_msgTypes[16] mi := &file_ai_proto_msgTypes[17]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -1522,7 +1594,7 @@ func (x *HealthCheckResponse) String() string {
func (*HealthCheckResponse) ProtoMessage() {} func (*HealthCheckResponse) ProtoMessage() {}
func (x *HealthCheckResponse) ProtoReflect() protoreflect.Message { func (x *HealthCheckResponse) ProtoReflect() protoreflect.Message {
mi := &file_ai_proto_msgTypes[16] mi := &file_ai_proto_msgTypes[17]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -1535,7 +1607,7 @@ func (x *HealthCheckResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use HealthCheckResponse.ProtoReflect.Descriptor instead. // Deprecated: Use HealthCheckResponse.ProtoReflect.Descriptor instead.
func (*HealthCheckResponse) Descriptor() ([]byte, []int) { func (*HealthCheckResponse) Descriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{16} return file_ai_proto_rawDescGZIP(), []int{17}
} }
func (x *HealthCheckResponse) GetServing() bool { func (x *HealthCheckResponse) GetServing() bool {
@ -1567,7 +1639,7 @@ type AgentToolLoopOptions struct {
func (x *AgentToolLoopOptions) Reset() { func (x *AgentToolLoopOptions) Reset() {
*x = AgentToolLoopOptions{} *x = AgentToolLoopOptions{}
mi := &file_ai_proto_msgTypes[17] mi := &file_ai_proto_msgTypes[18]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -1579,7 +1651,7 @@ func (x *AgentToolLoopOptions) String() string {
func (*AgentToolLoopOptions) ProtoMessage() {} func (*AgentToolLoopOptions) ProtoMessage() {}
func (x *AgentToolLoopOptions) ProtoReflect() protoreflect.Message { func (x *AgentToolLoopOptions) ProtoReflect() protoreflect.Message {
mi := &file_ai_proto_msgTypes[17] mi := &file_ai_proto_msgTypes[18]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -1592,7 +1664,7 @@ func (x *AgentToolLoopOptions) ProtoReflect() protoreflect.Message {
// Deprecated: Use AgentToolLoopOptions.ProtoReflect.Descriptor instead. // Deprecated: Use AgentToolLoopOptions.ProtoReflect.Descriptor instead.
func (*AgentToolLoopOptions) Descriptor() ([]byte, []int) { func (*AgentToolLoopOptions) Descriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{17} return file_ai_proto_rawDescGZIP(), []int{18}
} }
func (x *AgentToolLoopOptions) GetToolsEnabled() bool { func (x *AgentToolLoopOptions) GetToolsEnabled() bool {
@ -1642,7 +1714,7 @@ type AgentResponseContract struct {
func (x *AgentResponseContract) Reset() { func (x *AgentResponseContract) Reset() {
*x = AgentResponseContract{} *x = AgentResponseContract{}
mi := &file_ai_proto_msgTypes[18] mi := &file_ai_proto_msgTypes[19]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -1654,7 +1726,7 @@ func (x *AgentResponseContract) String() string {
func (*AgentResponseContract) ProtoMessage() {} func (*AgentResponseContract) ProtoMessage() {}
func (x *AgentResponseContract) ProtoReflect() protoreflect.Message { func (x *AgentResponseContract) ProtoReflect() protoreflect.Message {
mi := &file_ai_proto_msgTypes[18] mi := &file_ai_proto_msgTypes[19]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -1667,7 +1739,7 @@ func (x *AgentResponseContract) ProtoReflect() protoreflect.Message {
// Deprecated: Use AgentResponseContract.ProtoReflect.Descriptor instead. // Deprecated: Use AgentResponseContract.ProtoReflect.Descriptor instead.
func (*AgentResponseContract) Descriptor() ([]byte, []int) { func (*AgentResponseContract) Descriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{18} return file_ai_proto_rawDescGZIP(), []int{19}
} }
func (x *AgentResponseContract) GetFormat() AgentOutputFormat { func (x *AgentResponseContract) GetFormat() AgentOutputFormat {
@ -1712,7 +1784,7 @@ type AgentRequest struct {
func (x *AgentRequest) Reset() { func (x *AgentRequest) Reset() {
*x = AgentRequest{} *x = AgentRequest{}
mi := &file_ai_proto_msgTypes[19] mi := &file_ai_proto_msgTypes[20]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -1724,7 +1796,7 @@ func (x *AgentRequest) String() string {
func (*AgentRequest) ProtoMessage() {} func (*AgentRequest) ProtoMessage() {}
func (x *AgentRequest) ProtoReflect() protoreflect.Message { func (x *AgentRequest) ProtoReflect() protoreflect.Message {
mi := &file_ai_proto_msgTypes[19] mi := &file_ai_proto_msgTypes[20]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -1737,7 +1809,7 @@ func (x *AgentRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use AgentRequest.ProtoReflect.Descriptor instead. // Deprecated: Use AgentRequest.ProtoReflect.Descriptor instead.
func (*AgentRequest) Descriptor() ([]byte, []int) { func (*AgentRequest) Descriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{19} return file_ai_proto_rawDescGZIP(), []int{20}
} }
func (x *AgentRequest) GetMessages() []*StatelessMessage { func (x *AgentRequest) GetMessages() []*StatelessMessage {
@ -1838,7 +1910,7 @@ type AgentUsage struct {
func (x *AgentUsage) Reset() { func (x *AgentUsage) Reset() {
*x = AgentUsage{} *x = AgentUsage{}
mi := &file_ai_proto_msgTypes[20] mi := &file_ai_proto_msgTypes[21]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -1850,7 +1922,7 @@ func (x *AgentUsage) String() string {
func (*AgentUsage) ProtoMessage() {} func (*AgentUsage) ProtoMessage() {}
func (x *AgentUsage) ProtoReflect() protoreflect.Message { func (x *AgentUsage) ProtoReflect() protoreflect.Message {
mi := &file_ai_proto_msgTypes[20] mi := &file_ai_proto_msgTypes[21]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -1863,7 +1935,7 @@ func (x *AgentUsage) ProtoReflect() protoreflect.Message {
// Deprecated: Use AgentUsage.ProtoReflect.Descriptor instead. // Deprecated: Use AgentUsage.ProtoReflect.Descriptor instead.
func (*AgentUsage) Descriptor() ([]byte, []int) { func (*AgentUsage) Descriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{20} return file_ai_proto_rawDescGZIP(), []int{21}
} }
func (x *AgentUsage) GetToolIterations() uint32 { func (x *AgentUsage) GetToolIterations() uint32 {
@ -1916,7 +1988,7 @@ type AgentResponse struct {
func (x *AgentResponse) Reset() { func (x *AgentResponse) Reset() {
*x = AgentResponse{} *x = AgentResponse{}
mi := &file_ai_proto_msgTypes[21] mi := &file_ai_proto_msgTypes[22]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -1928,7 +2000,7 @@ func (x *AgentResponse) String() string {
func (*AgentResponse) ProtoMessage() {} func (*AgentResponse) ProtoMessage() {}
func (x *AgentResponse) ProtoReflect() protoreflect.Message { func (x *AgentResponse) ProtoReflect() protoreflect.Message {
mi := &file_ai_proto_msgTypes[21] mi := &file_ai_proto_msgTypes[22]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -1941,7 +2013,7 @@ func (x *AgentResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use AgentResponse.ProtoReflect.Descriptor instead. // Deprecated: Use AgentResponse.ProtoReflect.Descriptor instead.
func (*AgentResponse) Descriptor() ([]byte, []int) { func (*AgentResponse) Descriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{21} return file_ai_proto_rawDescGZIP(), []int{22}
} }
func (x *AgentResponse) GetStatus() AnswerStatus { func (x *AgentResponse) GetStatus() AnswerStatus {
@ -1997,7 +2069,7 @@ type CancelAnswerJobRequest struct {
func (x *CancelAnswerJobRequest) Reset() { func (x *CancelAnswerJobRequest) Reset() {
*x = CancelAnswerJobRequest{} *x = CancelAnswerJobRequest{}
mi := &file_ai_proto_msgTypes[22] mi := &file_ai_proto_msgTypes[23]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -2009,7 +2081,7 @@ func (x *CancelAnswerJobRequest) String() string {
func (*CancelAnswerJobRequest) ProtoMessage() {} func (*CancelAnswerJobRequest) ProtoMessage() {}
func (x *CancelAnswerJobRequest) ProtoReflect() protoreflect.Message { func (x *CancelAnswerJobRequest) ProtoReflect() protoreflect.Message {
mi := &file_ai_proto_msgTypes[22] mi := &file_ai_proto_msgTypes[23]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -2022,7 +2094,7 @@ func (x *CancelAnswerJobRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use CancelAnswerJobRequest.ProtoReflect.Descriptor instead. // Deprecated: Use CancelAnswerJobRequest.ProtoReflect.Descriptor instead.
func (*CancelAnswerJobRequest) Descriptor() ([]byte, []int) { func (*CancelAnswerJobRequest) Descriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{22} return file_ai_proto_rawDescGZIP(), []int{23}
} }
func (x *CancelAnswerJobRequest) GetJobId() string { func (x *CancelAnswerJobRequest) GetJobId() string {
@ -2051,7 +2123,7 @@ type CancelAnswerJobResponse struct {
func (x *CancelAnswerJobResponse) Reset() { func (x *CancelAnswerJobResponse) Reset() {
*x = CancelAnswerJobResponse{} *x = CancelAnswerJobResponse{}
mi := &file_ai_proto_msgTypes[23] mi := &file_ai_proto_msgTypes[24]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -2063,7 +2135,7 @@ func (x *CancelAnswerJobResponse) String() string {
func (*CancelAnswerJobResponse) ProtoMessage() {} func (*CancelAnswerJobResponse) ProtoMessage() {}
func (x *CancelAnswerJobResponse) ProtoReflect() protoreflect.Message { func (x *CancelAnswerJobResponse) ProtoReflect() protoreflect.Message {
mi := &file_ai_proto_msgTypes[23] mi := &file_ai_proto_msgTypes[24]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -2076,7 +2148,7 @@ func (x *CancelAnswerJobResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use CancelAnswerJobResponse.ProtoReflect.Descriptor instead. // Deprecated: Use CancelAnswerJobResponse.ProtoReflect.Descriptor instead.
func (*CancelAnswerJobResponse) Descriptor() ([]byte, []int) { func (*CancelAnswerJobResponse) Descriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{23} return file_ai_proto_rawDescGZIP(), []int{24}
} }
func (x *CancelAnswerJobResponse) GetState() AnswerJobState { func (x *CancelAnswerJobResponse) GetState() AnswerJobState {
@ -2104,7 +2176,7 @@ var File_ai_proto protoreflect.FileDescriptor
const file_ai_proto_rawDesc = "" + const file_ai_proto_rawDesc = "" +
"\n" + "\n" +
"\bai.proto\x12\x02ai\"\xbc\x03\n" + "\bai.proto\x12\x02ai\"\xe4\x03\n" +
"\tAIRequest\x12\x12\n" + "\tAIRequest\x12\x12\n" +
"\x04text\x18\x01 \x01(\tR\x04text\x12!\n" + "\x04text\x18\x01 \x01(\tR\x04text\x12!\n" +
"\fbot_username\x18\x02 \x01(\tR\vbotUsername\x12\x1d\n" + "\fbot_username\x18\x02 \x01(\tR\vbotUsername\x12\x1d\n" +
@ -2118,7 +2190,13 @@ const file_ai_proto_rawDesc = "" +
"\x11supports_deferred\x18\t \x01(\bR\x10supportsDeferred\x123\n" + "\x11supports_deferred\x18\t \x01(\bR\x10supportsDeferred\x123\n" +
"\rused_memories\x18\n" + "\rused_memories\x18\n" +
" \x03(\v2\x0e.ai.UsedMemoryR\fusedMemories\x12!\n" + " \x03(\v2\x0e.ai.UsedMemoryR\fusedMemories\x12!\n" +
"\fuser_message\x18\v \x01(\tR\vuserMessage\"\xd4\x01\n" + "\fuser_message\x18\v \x01(\tR\vuserMessage\x12&\n" +
"\x06images\x18\f \x03(\v2\x0e.ai.InputImageR\x06images\"U\n" +
"\n" +
"InputImage\x12\x12\n" +
"\x04data\x18\x01 \x01(\fR\x04data\x12\x1b\n" +
"\tmime_type\x18\x02 \x01(\tR\bmimeType\x12\x16\n" +
"\x06source\x18\x03 \x01(\tR\x06source\"\xd4\x01\n" +
"\n" + "\n" +
"UsedMemory\x12\x0e\n" + "UsedMemory\x12\x0e\n" +
"\x02id\x18\x01 \x01(\x03R\x02id\x12\x17\n" + "\x02id\x18\x01 \x01(\x03R\x02id\x12\x17\n" +
@ -2327,80 +2405,82 @@ func file_ai_proto_rawDescGZIP() []byte {
} }
var file_ai_proto_enumTypes = make([]protoimpl.EnumInfo, 4) var file_ai_proto_enumTypes = make([]protoimpl.EnumInfo, 4)
var file_ai_proto_msgTypes = make([]protoimpl.MessageInfo, 25) var file_ai_proto_msgTypes = make([]protoimpl.MessageInfo, 26)
var file_ai_proto_goTypes = []any{ var file_ai_proto_goTypes = []any{
(ResponseKind)(0), // 0: ai.ResponseKind (ResponseKind)(0), // 0: ai.ResponseKind
(AnswerStatus)(0), // 1: ai.AnswerStatus (AnswerStatus)(0), // 1: ai.AnswerStatus
(AnswerJobState)(0), // 2: ai.AnswerJobState (AnswerJobState)(0), // 2: ai.AnswerJobState
(AgentOutputFormat)(0), // 3: ai.AgentOutputFormat (AgentOutputFormat)(0), // 3: ai.AgentOutputFormat
(*AIRequest)(nil), // 4: ai.AIRequest (*AIRequest)(nil), // 4: ai.AIRequest
(*UsedMemory)(nil), // 5: ai.UsedMemory (*InputImage)(nil), // 5: ai.InputImage
(*AnswerGenerationOptions)(nil), // 6: ai.AnswerGenerationOptions (*UsedMemory)(nil), // 6: ai.UsedMemory
(*AIResponse)(nil), // 7: ai.AIResponse (*AnswerGenerationOptions)(nil), // 7: ai.AnswerGenerationOptions
(*GetAnswerJobRequest)(nil), // 8: ai.GetAnswerJobRequest (*AIResponse)(nil), // 8: ai.AIResponse
(*AnswerJobResponse)(nil), // 9: ai.AnswerJobResponse (*GetAnswerJobRequest)(nil), // 9: ai.GetAnswerJobRequest
(*ToolCallTrace)(nil), // 10: ai.ToolCallTrace (*AnswerJobResponse)(nil), // 10: ai.AnswerJobResponse
(*GetAIResponseTraceRequest)(nil), // 11: ai.GetAIResponseTraceRequest (*ToolCallTrace)(nil), // 11: ai.ToolCallTrace
(*GetAIResponseTraceResponse)(nil), // 12: ai.GetAIResponseTraceResponse (*GetAIResponseTraceRequest)(nil), // 12: ai.GetAIResponseTraceRequest
(*CreateSessionRequest)(nil), // 13: ai.CreateSessionRequest (*GetAIResponseTraceResponse)(nil), // 13: ai.GetAIResponseTraceResponse
(*CreateSessionResponse)(nil), // 14: ai.CreateSessionResponse (*CreateSessionRequest)(nil), // 14: ai.CreateSessionRequest
(*AskInSessionRequest)(nil), // 15: ai.AskInSessionRequest (*CreateSessionResponse)(nil), // 15: ai.CreateSessionResponse
(*SessionStatusResponse)(nil), // 16: ai.SessionStatusResponse (*AskInSessionRequest)(nil), // 16: ai.AskInSessionRequest
(*StatelessMessage)(nil), // 17: ai.StatelessMessage (*SessionStatusResponse)(nil), // 17: ai.SessionStatusResponse
(*StatelessRequest)(nil), // 18: ai.StatelessRequest (*StatelessMessage)(nil), // 18: ai.StatelessMessage
(*HealthCheckRequest)(nil), // 19: ai.HealthCheckRequest (*StatelessRequest)(nil), // 19: ai.StatelessRequest
(*HealthCheckResponse)(nil), // 20: ai.HealthCheckResponse (*HealthCheckRequest)(nil), // 20: ai.HealthCheckRequest
(*AgentToolLoopOptions)(nil), // 21: ai.AgentToolLoopOptions (*HealthCheckResponse)(nil), // 21: ai.HealthCheckResponse
(*AgentResponseContract)(nil), // 22: ai.AgentResponseContract (*AgentToolLoopOptions)(nil), // 22: ai.AgentToolLoopOptions
(*AgentRequest)(nil), // 23: ai.AgentRequest (*AgentResponseContract)(nil), // 23: ai.AgentResponseContract
(*AgentUsage)(nil), // 24: ai.AgentUsage (*AgentRequest)(nil), // 24: ai.AgentRequest
(*AgentResponse)(nil), // 25: ai.AgentResponse (*AgentUsage)(nil), // 25: ai.AgentUsage
(*CancelAnswerJobRequest)(nil), // 26: ai.CancelAnswerJobRequest (*AgentResponse)(nil), // 26: ai.AgentResponse
(*CancelAnswerJobResponse)(nil), // 27: ai.CancelAnswerJobResponse (*CancelAnswerJobRequest)(nil), // 27: ai.CancelAnswerJobRequest
nil, // 28: ai.AgentRequest.MetadataEntry (*CancelAnswerJobResponse)(nil), // 28: ai.CancelAnswerJobResponse
nil, // 29: ai.AgentRequest.MetadataEntry
} }
var file_ai_proto_depIdxs = []int32{ var file_ai_proto_depIdxs = []int32{
6, // 0: ai.AIRequest.options:type_name -> ai.AnswerGenerationOptions 7, // 0: ai.AIRequest.options:type_name -> ai.AnswerGenerationOptions
5, // 1: ai.AIRequest.used_memories:type_name -> ai.UsedMemory 6, // 1: ai.AIRequest.used_memories:type_name -> ai.UsedMemory
1, // 2: ai.AIResponse.status:type_name -> ai.AnswerStatus 5, // 2: ai.AIRequest.images:type_name -> ai.InputImage
0, // 3: ai.AIResponse.kind:type_name -> ai.ResponseKind 1, // 3: ai.AIResponse.status:type_name -> ai.AnswerStatus
2, // 4: ai.AnswerJobResponse.state:type_name -> ai.AnswerJobState 0, // 4: ai.AIResponse.kind:type_name -> ai.ResponseKind
24, // 5: ai.AnswerJobResponse.agent_usage:type_name -> ai.AgentUsage 2, // 5: ai.AnswerJobResponse.state:type_name -> ai.AnswerJobState
5, // 6: ai.GetAIResponseTraceResponse.memories:type_name -> ai.UsedMemory 25, // 6: ai.AnswerJobResponse.agent_usage:type_name -> ai.AgentUsage
10, // 7: ai.GetAIResponseTraceResponse.tool_calls:type_name -> ai.ToolCallTrace 6, // 7: ai.GetAIResponseTraceResponse.memories:type_name -> ai.UsedMemory
6, // 8: ai.AskInSessionRequest.options:type_name -> ai.AnswerGenerationOptions 11, // 8: ai.GetAIResponseTraceResponse.tool_calls:type_name -> ai.ToolCallTrace
17, // 9: ai.StatelessRequest.messages:type_name -> ai.StatelessMessage 7, // 9: ai.AskInSessionRequest.options:type_name -> ai.AnswerGenerationOptions
3, // 10: ai.AgentResponseContract.format:type_name -> ai.AgentOutputFormat 18, // 10: ai.StatelessRequest.messages:type_name -> ai.StatelessMessage
17, // 11: ai.AgentRequest.messages:type_name -> ai.StatelessMessage 3, // 11: ai.AgentResponseContract.format:type_name -> ai.AgentOutputFormat
21, // 12: ai.AgentRequest.tool_loop:type_name -> ai.AgentToolLoopOptions 18, // 12: ai.AgentRequest.messages:type_name -> ai.StatelessMessage
22, // 13: ai.AgentRequest.response_contract:type_name -> ai.AgentResponseContract 22, // 13: ai.AgentRequest.tool_loop:type_name -> ai.AgentToolLoopOptions
28, // 14: ai.AgentRequest.metadata:type_name -> ai.AgentRequest.MetadataEntry 23, // 14: ai.AgentRequest.response_contract:type_name -> ai.AgentResponseContract
1, // 15: ai.AgentResponse.status:type_name -> ai.AnswerStatus 29, // 15: ai.AgentRequest.metadata:type_name -> ai.AgentRequest.MetadataEntry
24, // 16: ai.AgentResponse.usage:type_name -> ai.AgentUsage 1, // 16: ai.AgentResponse.status:type_name -> ai.AnswerStatus
2, // 17: ai.CancelAnswerJobResponse.state:type_name -> ai.AnswerJobState 25, // 17: ai.AgentResponse.usage:type_name -> ai.AgentUsage
23, // 18: ai.AIService.RunAgent:input_type -> ai.AgentRequest 2, // 18: ai.CancelAnswerJobResponse.state:type_name -> ai.AnswerJobState
26, // 19: ai.AIService.CancelAnswerJob:input_type -> ai.CancelAnswerJobRequest 24, // 19: ai.AIService.RunAgent:input_type -> ai.AgentRequest
4, // 20: ai.AIService.GenerateAnswer:input_type -> ai.AIRequest 27, // 20: ai.AIService.CancelAnswerJob:input_type -> ai.CancelAnswerJobRequest
18, // 21: ai.AIService.GenerateStateless:input_type -> ai.StatelessRequest 4, // 21: ai.AIService.GenerateAnswer:input_type -> ai.AIRequest
19, // 22: ai.AIService.HealthCheck:input_type -> ai.HealthCheckRequest 19, // 22: ai.AIService.GenerateStateless:input_type -> ai.StatelessRequest
13, // 23: ai.AIService.CreateSession:input_type -> ai.CreateSessionRequest 20, // 23: ai.AIService.HealthCheck:input_type -> ai.HealthCheckRequest
15, // 24: ai.AIService.AskInSession:input_type -> ai.AskInSessionRequest 14, // 24: ai.AIService.CreateSession:input_type -> ai.CreateSessionRequest
8, // 25: ai.AIService.GetAnswerJob:input_type -> ai.GetAnswerJobRequest 16, // 25: ai.AIService.AskInSession:input_type -> ai.AskInSessionRequest
11, // 26: ai.AIService.GetAIResponseTrace:input_type -> ai.GetAIResponseTraceRequest 9, // 26: ai.AIService.GetAnswerJob:input_type -> ai.GetAnswerJobRequest
25, // 27: ai.AIService.RunAgent:output_type -> ai.AgentResponse 12, // 27: ai.AIService.GetAIResponseTrace:input_type -> ai.GetAIResponseTraceRequest
27, // 28: ai.AIService.CancelAnswerJob:output_type -> ai.CancelAnswerJobResponse 26, // 28: ai.AIService.RunAgent:output_type -> ai.AgentResponse
7, // 29: ai.AIService.GenerateAnswer:output_type -> ai.AIResponse 28, // 29: ai.AIService.CancelAnswerJob:output_type -> ai.CancelAnswerJobResponse
7, // 30: ai.AIService.GenerateStateless:output_type -> ai.AIResponse 8, // 30: ai.AIService.GenerateAnswer:output_type -> ai.AIResponse
20, // 31: ai.AIService.HealthCheck:output_type -> ai.HealthCheckResponse 8, // 31: ai.AIService.GenerateStateless:output_type -> ai.AIResponse
14, // 32: ai.AIService.CreateSession:output_type -> ai.CreateSessionResponse 21, // 32: ai.AIService.HealthCheck:output_type -> ai.HealthCheckResponse
16, // 33: ai.AIService.AskInSession:output_type -> ai.SessionStatusResponse 15, // 33: ai.AIService.CreateSession:output_type -> ai.CreateSessionResponse
9, // 34: ai.AIService.GetAnswerJob:output_type -> ai.AnswerJobResponse 17, // 34: ai.AIService.AskInSession:output_type -> ai.SessionStatusResponse
12, // 35: ai.AIService.GetAIResponseTrace:output_type -> ai.GetAIResponseTraceResponse 10, // 35: ai.AIService.GetAnswerJob:output_type -> ai.AnswerJobResponse
27, // [27:36] is the sub-list for method output_type 13, // 36: ai.AIService.GetAIResponseTrace:output_type -> ai.GetAIResponseTraceResponse
18, // [18:27] is the sub-list for method input_type 28, // [28:37] is the sub-list for method output_type
18, // [18:18] is the sub-list for extension type_name 19, // [19:28] is the sub-list for method input_type
18, // [18:18] is the sub-list for extension extendee 19, // [19:19] is the sub-list for extension type_name
0, // [0:18] is the sub-list for field type_name 19, // [19:19] is the sub-list for extension extendee
0, // [0:19] is the sub-list for field type_name
} }
func init() { file_ai_proto_init() } func init() { file_ai_proto_init() }
@ -2414,7 +2494,7 @@ func file_ai_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(), GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: unsafe.Slice(unsafe.StringData(file_ai_proto_rawDesc), len(file_ai_proto_rawDesc)), RawDescriptor: unsafe.Slice(unsafe.StringData(file_ai_proto_rawDesc), len(file_ai_proto_rawDesc)),
NumEnums: 4, NumEnums: 4,
NumMessages: 25, NumMessages: 26,
NumExtensions: 0, NumExtensions: 0,
NumServices: 1, NumServices: 1,
}, },

View File

@ -22,6 +22,17 @@ message AIRequest {
// Live chat clients (Telegram/Steam) send this; when empty, image intent // Live chat clients (Telegram/Steam) send this; when empty, image intent
// detection is skipped and the request is treated as normal chat. // detection is skipped and the request is treated as normal chat.
string user_message = 11; string user_message = 11;
// Optional image attachments for vision models (photo/sticker/GIF frame).
// When non-empty, GenerateAnswer routes to LLM_VISION_MODEL and builds a
// multimodal user message; image-generation intent is skipped.
repeated InputImage images = 12;
}
// InputImage — one vision attachment (raw bytes, not base64).
message InputImage {
bytes data = 1; // raw image bytes (jpeg/png/webp/gif)
string mime_type = 2; // e.g. image/jpeg
string source = 3; // optional client hint: photo, sticker, animation, reply_photo, …
} }
// UsedMemory — снимок одного воспоминания, участвовавшего в генерации ответа. // UsedMemory — снимок одного воспоминания, участвовавшего в генерации ответа.