l-ai-core-proto/ai.pb.go
Kaien 72125c137a feat(proto): AIRequest.images for vision multimodal input.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-09 18:18:30 +03:00

2510 lines
87 KiB
Go
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.

// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.36.12
// protoc v7.36.0
// source: ai.proto
package proto
import (
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
sync "sync"
unsafe "unsafe"
)
const (
// Verify that this generated code is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
// Verify that runtime/protoimpl is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// ResponseKind — тип синхронного ответа GenerateAnswer (кроме deferred jobs).
type ResponseKind int32
const (
ResponseKind_RESPONSE_KIND_UNSPECIFIED ResponseKind = 0 // трактуется как TEXT (обратная совместимость)
ResponseKind_RESPONSE_KIND_TEXT ResponseKind = 1 // content — текстовый ответ
ResponseKind_RESPONSE_KIND_IMAGE ResponseKind = 2 // image_base64 — сгенерированное изображение
)
// Enum value maps for ResponseKind.
var (
ResponseKind_name = map[int32]string{
0: "RESPONSE_KIND_UNSPECIFIED",
1: "RESPONSE_KIND_TEXT",
2: "RESPONSE_KIND_IMAGE",
}
ResponseKind_value = map[string]int32{
"RESPONSE_KIND_UNSPECIFIED": 0,
"RESPONSE_KIND_TEXT": 1,
"RESPONSE_KIND_IMAGE": 2,
}
)
func (x ResponseKind) Enum() *ResponseKind {
p := new(ResponseKind)
*p = x
return p
}
func (x ResponseKind) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (ResponseKind) Descriptor() protoreflect.EnumDescriptor {
return file_ai_proto_enumTypes[0].Descriptor()
}
func (ResponseKind) Type() protoreflect.EnumType {
return &file_ai_proto_enumTypes[0]
}
func (x ResponseKind) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use ResponseKind.Descriptor instead.
func (ResponseKind) EnumDescriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{0}
}
// AnswerStatus описывает, готов ли ответ синхронно или отложен в job.
type AnswerStatus int32
const (
AnswerStatus_ANSWER_STATUS_UNSPECIFIED AnswerStatus = 0 // трактуется как COMPLETE (обратная совместимость)
AnswerStatus_ANSWER_STATUS_COMPLETE AnswerStatus = 1 // content — финальный ответ
AnswerStatus_ANSWER_STATUS_PENDING AnswerStatus = 2 // запущена долгая job; поллить GetAnswerJob(job_id)
)
// Enum value maps for AnswerStatus.
var (
AnswerStatus_name = map[int32]string{
0: "ANSWER_STATUS_UNSPECIFIED",
1: "ANSWER_STATUS_COMPLETE",
2: "ANSWER_STATUS_PENDING",
}
AnswerStatus_value = map[string]int32{
"ANSWER_STATUS_UNSPECIFIED": 0,
"ANSWER_STATUS_COMPLETE": 1,
"ANSWER_STATUS_PENDING": 2,
}
)
func (x AnswerStatus) Enum() *AnswerStatus {
p := new(AnswerStatus)
*p = x
return p
}
func (x AnswerStatus) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (AnswerStatus) Descriptor() protoreflect.EnumDescriptor {
return file_ai_proto_enumTypes[1].Descriptor()
}
func (AnswerStatus) Type() protoreflect.EnumType {
return &file_ai_proto_enumTypes[1]
}
func (x AnswerStatus) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use AnswerStatus.Descriptor instead.
func (AnswerStatus) EnumDescriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{1}
}
// AnswerJobState — состояние отложенной генерации ответа.
// Значения 0-4 исторические (GenerateAnswer deferred). Значения 5-7 добавлены для
// durable RunAgent jobs; старые клиенты их не создают и потому не увидят. RUNNING
// для старого клиента семантически эквивалентен PENDING (job ещё не терминальна).
type AnswerJobState int32
const (
AnswerJobState_ANSWER_JOB_STATE_UNSPECIFIED AnswerJobState = 0
AnswerJobState_ANSWER_JOB_STATE_PENDING AnswerJobState = 1 // ещё не взята в работу / выполняется (evolver работает, модель дописывает)
AnswerJobState_ANSWER_JOB_STATE_DONE AnswerJobState = 2 // готово, content заполнен
AnswerJobState_ANSWER_JOB_STATE_FAILED AnswerJobState = 3 // ошибка, error заполнен
AnswerJobState_ANSWER_JOB_STATE_NOT_FOUND AnswerJobState = 4 // неизвестный/протухший job_id (напр. после рестарта core)
AnswerJobState_ANSWER_JOB_STATE_RUNNING AnswerJobState = 5 // взята воркером (lease активен), tool loop исполняется
AnswerJobState_ANSWER_JOB_STATE_CANCELLED AnswerJobState = 6 // отменена через CancelAnswerJob
AnswerJobState_ANSWER_JOB_STATE_EXPIRED AnswerJobState = 7 // истёк expiration до достижения терминального состояния
)
// Enum value maps for AnswerJobState.
var (
AnswerJobState_name = map[int32]string{
0: "ANSWER_JOB_STATE_UNSPECIFIED",
1: "ANSWER_JOB_STATE_PENDING",
2: "ANSWER_JOB_STATE_DONE",
3: "ANSWER_JOB_STATE_FAILED",
4: "ANSWER_JOB_STATE_NOT_FOUND",
5: "ANSWER_JOB_STATE_RUNNING",
6: "ANSWER_JOB_STATE_CANCELLED",
7: "ANSWER_JOB_STATE_EXPIRED",
}
AnswerJobState_value = map[string]int32{
"ANSWER_JOB_STATE_UNSPECIFIED": 0,
"ANSWER_JOB_STATE_PENDING": 1,
"ANSWER_JOB_STATE_DONE": 2,
"ANSWER_JOB_STATE_FAILED": 3,
"ANSWER_JOB_STATE_NOT_FOUND": 4,
"ANSWER_JOB_STATE_RUNNING": 5,
"ANSWER_JOB_STATE_CANCELLED": 6,
"ANSWER_JOB_STATE_EXPIRED": 7,
}
)
func (x AnswerJobState) Enum() *AnswerJobState {
p := new(AnswerJobState)
*p = x
return p
}
func (x AnswerJobState) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (AnswerJobState) Descriptor() protoreflect.EnumDescriptor {
return file_ai_proto_enumTypes[2].Descriptor()
}
func (AnswerJobState) Type() protoreflect.EnumType {
return &file_ai_proto_enumTypes[2]
}
func (x AnswerJobState) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use AnswerJobState.Descriptor instead.
func (AnswerJobState) EnumDescriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{2}
}
// AgentOutputFormat — требуемый формат финального ответа.
type AgentOutputFormat int32
const (
AgentOutputFormat_AGENT_OUTPUT_FORMAT_UNSPECIFIED AgentOutputFormat = 0 // трактуется как TEXT
AgentOutputFormat_AGENT_OUTPUT_FORMAT_TEXT AgentOutputFormat = 1 // произвольный текст
AgentOutputFormat_AGENT_OUTPUT_FORMAT_JSON AgentOutputFormat = 2 // должен быть валидный JSON (без schema-проверки)
AgentOutputFormat_AGENT_OUTPUT_FORMAT_JSON_SCHEMA AgentOutputFormat = 3 // валидный JSON, проходящий json_schema
)
// Enum value maps for AgentOutputFormat.
var (
AgentOutputFormat_name = map[int32]string{
0: "AGENT_OUTPUT_FORMAT_UNSPECIFIED",
1: "AGENT_OUTPUT_FORMAT_TEXT",
2: "AGENT_OUTPUT_FORMAT_JSON",
3: "AGENT_OUTPUT_FORMAT_JSON_SCHEMA",
}
AgentOutputFormat_value = map[string]int32{
"AGENT_OUTPUT_FORMAT_UNSPECIFIED": 0,
"AGENT_OUTPUT_FORMAT_TEXT": 1,
"AGENT_OUTPUT_FORMAT_JSON": 2,
"AGENT_OUTPUT_FORMAT_JSON_SCHEMA": 3,
}
)
func (x AgentOutputFormat) Enum() *AgentOutputFormat {
p := new(AgentOutputFormat)
*p = x
return p
}
func (x AgentOutputFormat) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (AgentOutputFormat) Descriptor() protoreflect.EnumDescriptor {
return file_ai_proto_enumTypes[3].Descriptor()
}
func (AgentOutputFormat) Type() protoreflect.EnumType {
return &file_ai_proto_enumTypes[3]
}
func (x AgentOutputFormat) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use AgentOutputFormat.Descriptor instead.
func (AgentOutputFormat) EnumDescriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{3}
}
// AIRequest содержит запрос к AI модели
type AIRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
Text string `protobuf:"bytes,1,opt,name=text,proto3" json:"text,omitempty"` // Текст запроса
BotUsername string `protobuf:"bytes,2,opt,name=bot_username,json=botUsername,proto3" json:"bot_username,omitempty"` // Username бота для упоминаний
ModelName string `protobuf:"bytes,3,opt,name=model_name,json=modelName,proto3" json:"model_name,omitempty"` // Название модели (по умолчанию "deepseek-v4-flash")
EnableReasoning bool `protobuf:"varint,4,opt,name=enable_reasoning,json=enableReasoning,proto3" json:"enable_reasoning,omitempty"` // Включить режим рассуждений (по умолчанию false)
GlobalUserId int64 `protobuf:"varint,5,opt,name=global_user_id,json=globalUserId,proto3" json:"global_user_id,omitempty"` // Global user ID для получения доп. данных (профиль, воспоминания)
Options *AnswerGenerationOptions `protobuf:"bytes,6,opt,name=options,proto3" json:"options,omitempty"` // Дополнительные опции генерации ответа
TelegramUserId int64 `protobuf:"varint,7,opt,name=telegram_user_id,json=telegramUserId,proto3" json:"telegram_user_id,omitempty"` // Telegram user ID для применения пользовательских настроек (стиль ответа)
SteamUserId int64 `protobuf:"varint,8,opt,name=steam_user_id,json=steamUserId,proto3" json:"steam_user_id,omitempty"` // SteamID64 отправителя для живых Steam-диалогов (l-ai-steam) - тот же "сигнал живого чата", что telegram_user_id, для второй платформы
SupportsDeferred bool `protobuf:"varint,9,opt,name=supports_deferred,json=supportsDeferred,proto3" json:"supports_deferred,omitempty"` // Клиент умеет обрабатывать status=PENDING + GetAnswerJob (async тяжёлые тулзы). Старые клиенты не ставят — тяжёлые тулзы исполняются синхронно, как раньше.
// Структурированные воспоминания, которые клиент уже вложил в text (для debug-trace).
// Core сохраняет их as-is на ai_response_traces — не перезапрашивает memories-сервис.
UsedMemories []*UsedMemory `protobuf:"bytes,10,rep,name=used_memories,json=usedMemories,proto3" json:"used_memories,omitempty"`
// Raw user message for intent classification (no history/memories/tools).
// Live chat clients (Telegram/Steam) send this; when empty, image intent
// 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"`
// 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
sizeCache protoimpl.SizeCache
}
func (x *AIRequest) Reset() {
*x = AIRequest{}
mi := &file_ai_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *AIRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*AIRequest) ProtoMessage() {}
func (x *AIRequest) ProtoReflect() protoreflect.Message {
mi := &file_ai_proto_msgTypes[0]
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 AIRequest.ProtoReflect.Descriptor instead.
func (*AIRequest) Descriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{0}
}
func (x *AIRequest) GetText() string {
if x != nil {
return x.Text
}
return ""
}
func (x *AIRequest) GetBotUsername() string {
if x != nil {
return x.BotUsername
}
return ""
}
func (x *AIRequest) GetModelName() string {
if x != nil {
return x.ModelName
}
return ""
}
func (x *AIRequest) GetEnableReasoning() bool {
if x != nil {
return x.EnableReasoning
}
return false
}
func (x *AIRequest) GetGlobalUserId() int64 {
if x != nil {
return x.GlobalUserId
}
return 0
}
func (x *AIRequest) GetOptions() *AnswerGenerationOptions {
if x != nil {
return x.Options
}
return nil
}
func (x *AIRequest) GetTelegramUserId() int64 {
if x != nil {
return x.TelegramUserId
}
return 0
}
func (x *AIRequest) GetSteamUserId() int64 {
if x != nil {
return x.SteamUserId
}
return 0
}
func (x *AIRequest) GetSupportsDeferred() bool {
if x != nil {
return x.SupportsDeferred
}
return false
}
func (x *AIRequest) GetUsedMemories() []*UsedMemory {
if x != nil {
return x.UsedMemories
}
return nil
}
func (x *AIRequest) GetUserMessage() string {
if x != nil {
return x.UserMessage
}
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 — снимок одного воспоминания, участвовавшего в генерации ответа.
type UsedMemory struct {
state protoimpl.MessageState `protogen:"open.v1"`
Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` // ID в l-ai-memories (для будущего delete с debug-страницы)
UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`
Username string `protobuf:"bytes,3,opt,name=username,proto3" json:"username,omitempty"`
Key string `protobuf:"bytes,4,opt,name=key,proto3" json:"key,omitempty"`
Value string `protobuf:"bytes,5,opt,name=value,proto3" json:"value,omitempty"`
Category string `protobuf:"bytes,6,opt,name=category,proto3" json:"category,omitempty"`
Priority string `protobuf:"bytes,7,opt,name=priority,proto3" json:"priority,omitempty"`
SourceLabel string `protobuf:"bytes,8,opt,name=source_label,json=sourceLabel,proto3" json:"source_label,omitempty"` // контекст от клиента, напр. "автор сообщения (@nick)"
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *UsedMemory) Reset() {
*x = UsedMemory{}
mi := &file_ai_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *UsedMemory) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*UsedMemory) ProtoMessage() {}
func (x *UsedMemory) ProtoReflect() protoreflect.Message {
mi := &file_ai_proto_msgTypes[2]
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 UsedMemory.ProtoReflect.Descriptor instead.
func (*UsedMemory) Descriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{2}
}
func (x *UsedMemory) GetId() int64 {
if x != nil {
return x.Id
}
return 0
}
func (x *UsedMemory) GetUserId() int64 {
if x != nil {
return x.UserId
}
return 0
}
func (x *UsedMemory) GetUsername() string {
if x != nil {
return x.Username
}
return ""
}
func (x *UsedMemory) GetKey() string {
if x != nil {
return x.Key
}
return ""
}
func (x *UsedMemory) GetValue() string {
if x != nil {
return x.Value
}
return ""
}
func (x *UsedMemory) GetCategory() string {
if x != nil {
return x.Category
}
return ""
}
func (x *UsedMemory) GetPriority() string {
if x != nil {
return x.Priority
}
return ""
}
func (x *UsedMemory) GetSourceLabel() string {
if x != nil {
return x.SourceLabel
}
return ""
}
// AnswerGenerationOptions содержит дополнительные опции для генерации ответа
type AnswerGenerationOptions struct {
state protoimpl.MessageState `protogen:"open.v1"`
IncludeUserMemories bool `protobuf:"varint,1,opt,name=include_user_memories,json=includeUserMemories,proto3" json:"include_user_memories,omitempty"` // Включить воспоминания о пользователе в промпт
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *AnswerGenerationOptions) Reset() {
*x = AnswerGenerationOptions{}
mi := &file_ai_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *AnswerGenerationOptions) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*AnswerGenerationOptions) ProtoMessage() {}
func (x *AnswerGenerationOptions) ProtoReflect() protoreflect.Message {
mi := &file_ai_proto_msgTypes[3]
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 AnswerGenerationOptions.ProtoReflect.Descriptor instead.
func (*AnswerGenerationOptions) Descriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{3}
}
func (x *AnswerGenerationOptions) GetIncludeUserMemories() bool {
if x != nil {
return x.IncludeUserMemories
}
return false
}
// AIResponse содержит ответ от AI модели
type AIResponse struct {
state protoimpl.MessageState `protogen:"open.v1"`
Content string `protobuf:"bytes,1,opt,name=content,proto3" json:"content,omitempty"` // Текст ответа (при status=PENDING — interim-сообщение)
Error string `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"` // Текст ошибки, если произошла
DurationMs float64 `protobuf:"fixed64,3,opt,name=duration_ms,json=durationMs,proto3" json:"duration_ms,omitempty"` // Время выполнения в миллисекундах
ReasoningContent string `protobuf:"bytes,4,opt,name=reasoning_content,json=reasoningContent,proto3" json:"reasoning_content,omitempty"` // Текст рассуждений (если включён режим reasoning)
Status AnswerStatus `protobuf:"varint,5,opt,name=status,proto3,enum=ai.AnswerStatus" json:"status,omitempty"` // COMPLETE (или UNSPECIFIED для старых клиентов) — content финальный;
// PENDING — запущена долгая job, content это interim, финал тянуть через GetAnswerJob(job_id)
JobId string `protobuf:"bytes,6,opt,name=job_id,json=jobId,proto3" json:"job_id,omitempty"` // Идентификатор отложенной job (только при status=PENDING)
ResponseId string `protobuf:"bytes,7,opt,name=response_id,json=responseId,proto3" json:"response_id,omitempty"` // UUID (hex) debug-trace; доступен уже при PENDING
Kind ResponseKind `protobuf:"varint,8,opt,name=kind,proto3,enum=ai.ResponseKind" json:"kind,omitempty"` // TEXT (default) или IMAGE
ImageBase64 string `protobuf:"bytes,9,opt,name=image_base64,json=imageBase64,proto3" json:"image_base64,omitempty"` // base64-encoded image bytes when kind=IMAGE
ImageMimeType string `protobuf:"bytes,10,opt,name=image_mime_type,json=imageMimeType,proto3" json:"image_mime_type,omitempty"` // e.g. image/png when kind=IMAGE
ImagePrompt string `protobuf:"bytes,11,opt,name=image_prompt,json=imagePrompt,proto3" json:"image_prompt,omitempty"` // final Muse Image prompt when kind=IMAGE (for client-side history)
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *AIResponse) Reset() {
*x = AIResponse{}
mi := &file_ai_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *AIResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*AIResponse) ProtoMessage() {}
func (x *AIResponse) ProtoReflect() protoreflect.Message {
mi := &file_ai_proto_msgTypes[4]
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 AIResponse.ProtoReflect.Descriptor instead.
func (*AIResponse) Descriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{4}
}
func (x *AIResponse) GetContent() string {
if x != nil {
return x.Content
}
return ""
}
func (x *AIResponse) GetError() string {
if x != nil {
return x.Error
}
return ""
}
func (x *AIResponse) GetDurationMs() float64 {
if x != nil {
return x.DurationMs
}
return 0
}
func (x *AIResponse) GetReasoningContent() string {
if x != nil {
return x.ReasoningContent
}
return ""
}
func (x *AIResponse) GetStatus() AnswerStatus {
if x != nil {
return x.Status
}
return AnswerStatus_ANSWER_STATUS_UNSPECIFIED
}
func (x *AIResponse) GetJobId() string {
if x != nil {
return x.JobId
}
return ""
}
func (x *AIResponse) GetResponseId() string {
if x != nil {
return x.ResponseId
}
return ""
}
func (x *AIResponse) GetKind() ResponseKind {
if x != nil {
return x.Kind
}
return ResponseKind_RESPONSE_KIND_UNSPECIFIED
}
func (x *AIResponse) GetImageBase64() string {
if x != nil {
return x.ImageBase64
}
return ""
}
func (x *AIResponse) GetImageMimeType() string {
if x != nil {
return x.ImageMimeType
}
return ""
}
func (x *AIResponse) GetImagePrompt() string {
if x != nil {
return x.ImagePrompt
}
return ""
}
// GetAnswerJobRequest запрашивает статус отложенной генерации ответа.
type GetAnswerJobRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
JobId string `protobuf:"bytes,1,opt,name=job_id,json=jobId,proto3" json:"job_id,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *GetAnswerJobRequest) Reset() {
*x = GetAnswerJobRequest{}
mi := &file_ai_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *GetAnswerJobRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*GetAnswerJobRequest) ProtoMessage() {}
func (x *GetAnswerJobRequest) ProtoReflect() protoreflect.Message {
mi := &file_ai_proto_msgTypes[5]
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 GetAnswerJobRequest.ProtoReflect.Descriptor instead.
func (*GetAnswerJobRequest) Descriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{5}
}
func (x *GetAnswerJobRequest) GetJobId() string {
if x != nil {
return x.JobId
}
return ""
}
// AnswerJobResponse — результат опроса отложенной генерации.
type AnswerJobResponse struct {
state protoimpl.MessageState `protogen:"open.v1"`
State AnswerJobState `protobuf:"varint,1,opt,name=state,proto3,enum=ai.AnswerJobState" json:"state,omitempty"`
Content string `protobuf:"bytes,2,opt,name=content,proto3" json:"content,omitempty"` // финальный ответ, когда DONE
Error string `protobuf:"bytes,3,opt,name=error,proto3" json:"error,omitempty"` // причина, когда FAILED
DurationMs float64 `protobuf:"fixed64,4,opt,name=duration_ms,json=durationMs,proto3" json:"duration_ms,omitempty"` // суммарное время генерации, когда DONE
// Authoritative usage завершённой deferred RunAgent job — тот же счётчик, что
// возвращает synchronous RunAgent (реальные iterations/tool calls core, не
// self-reported из ответа модели). Для legacy GenerateAnswer jobs не заполняется.
AgentUsage *AgentUsage `protobuf:"bytes,5,opt,name=agent_usage,json=agentUsage,proto3" json:"agent_usage,omitempty"`
ResponseId string `protobuf:"bytes,6,opt,name=response_id,json=responseId,proto3" json:"response_id,omitempty"` // тот же debug-trace id, что в AIResponse при PENDING
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *AnswerJobResponse) Reset() {
*x = AnswerJobResponse{}
mi := &file_ai_proto_msgTypes[6]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *AnswerJobResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*AnswerJobResponse) ProtoMessage() {}
func (x *AnswerJobResponse) ProtoReflect() protoreflect.Message {
mi := &file_ai_proto_msgTypes[6]
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 AnswerJobResponse.ProtoReflect.Descriptor instead.
func (*AnswerJobResponse) Descriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{6}
}
func (x *AnswerJobResponse) GetState() AnswerJobState {
if x != nil {
return x.State
}
return AnswerJobState_ANSWER_JOB_STATE_UNSPECIFIED
}
func (x *AnswerJobResponse) GetContent() string {
if x != nil {
return x.Content
}
return ""
}
func (x *AnswerJobResponse) GetError() string {
if x != nil {
return x.Error
}
return ""
}
func (x *AnswerJobResponse) GetDurationMs() float64 {
if x != nil {
return x.DurationMs
}
return 0
}
func (x *AnswerJobResponse) GetAgentUsage() *AgentUsage {
if x != nil {
return x.AgentUsage
}
return nil
}
func (x *AnswerJobResponse) GetResponseId() string {
if x != nil {
return x.ResponseId
}
return ""
}
// ToolCallTrace — один вызов тула во время GenerateAnswer (args + результат для модели).
type ToolCallTrace struct {
state protoimpl.MessageState `protogen:"open.v1"`
CallId string `protobuf:"bytes,1,opt,name=call_id,json=callId,proto3" json:"call_id,omitempty"`
Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
ArgumentsJson string `protobuf:"bytes,3,opt,name=arguments_json,json=argumentsJson,proto3" json:"arguments_json,omitempty"`
Result string `protobuf:"bytes,4,opt,name=result,proto3" json:"result,omitempty"`
Error string `protobuf:"bytes,5,opt,name=error,proto3" json:"error,omitempty"`
Deferred bool `protobuf:"varint,6,opt,name=deferred,proto3" json:"deferred,omitempty"` // тяжёлый тул через l-evolver
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *ToolCallTrace) Reset() {
*x = ToolCallTrace{}
mi := &file_ai_proto_msgTypes[7]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *ToolCallTrace) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ToolCallTrace) ProtoMessage() {}
func (x *ToolCallTrace) ProtoReflect() protoreflect.Message {
mi := &file_ai_proto_msgTypes[7]
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 ToolCallTrace.ProtoReflect.Descriptor instead.
func (*ToolCallTrace) Descriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{7}
}
func (x *ToolCallTrace) GetCallId() string {
if x != nil {
return x.CallId
}
return ""
}
func (x *ToolCallTrace) GetName() string {
if x != nil {
return x.Name
}
return ""
}
func (x *ToolCallTrace) GetArgumentsJson() string {
if x != nil {
return x.ArgumentsJson
}
return ""
}
func (x *ToolCallTrace) GetResult() string {
if x != nil {
return x.Result
}
return ""
}
func (x *ToolCallTrace) GetError() string {
if x != nil {
return x.Error
}
return ""
}
func (x *ToolCallTrace) GetDeferred() bool {
if x != nil {
return x.Deferred
}
return false
}
// GetAIResponseTraceRequest — запрос debug-снимка генерации по UUID.
type GetAIResponseTraceRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // response_id (hex UUID без дефисов)
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *GetAIResponseTraceRequest) Reset() {
*x = GetAIResponseTraceRequest{}
mi := &file_ai_proto_msgTypes[8]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *GetAIResponseTraceRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*GetAIResponseTraceRequest) ProtoMessage() {}
func (x *GetAIResponseTraceRequest) ProtoReflect() protoreflect.Message {
mi := &file_ai_proto_msgTypes[8]
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 GetAIResponseTraceRequest.ProtoReflect.Descriptor instead.
func (*GetAIResponseTraceRequest) Descriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{8}
}
func (x *GetAIResponseTraceRequest) GetId() string {
if x != nil {
return x.Id
}
return ""
}
// GetAIResponseTraceResponse — снимок того, что ушло в модель / вернулось.
type GetAIResponseTraceResponse struct {
state protoimpl.MessageState `protogen:"open.v1"`
Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
BotUsername string `protobuf:"bytes,2,opt,name=bot_username,json=botUsername,proto3" json:"bot_username,omitempty"`
ModelName string `protobuf:"bytes,3,opt,name=model_name,json=modelName,proto3" json:"model_name,omitempty"`
TelegramUserId int64 `protobuf:"varint,4,opt,name=telegram_user_id,json=telegramUserId,proto3" json:"telegram_user_id,omitempty"`
GlobalUserId int64 `protobuf:"varint,5,opt,name=global_user_id,json=globalUserId,proto3" json:"global_user_id,omitempty"`
SystemPrompt string `protobuf:"bytes,6,opt,name=system_prompt,json=systemPrompt,proto3" json:"system_prompt,omitempty"`
UserPrompt string `protobuf:"bytes,7,opt,name=user_prompt,json=userPrompt,proto3" json:"user_prompt,omitempty"`
Memories []*UsedMemory `protobuf:"bytes,8,rep,name=memories,proto3" json:"memories,omitempty"`
ToolCalls []*ToolCallTrace `protobuf:"bytes,9,rep,name=tool_calls,json=toolCalls,proto3" json:"tool_calls,omitempty"`
Response string `protobuf:"bytes,10,opt,name=response,proto3" json:"response,omitempty"`
ReasoningContent string `protobuf:"bytes,11,opt,name=reasoning_content,json=reasoningContent,proto3" json:"reasoning_content,omitempty"`
Error string `protobuf:"bytes,12,opt,name=error,proto3" json:"error,omitempty"`
DurationMs float64 `protobuf:"fixed64,13,opt,name=duration_ms,json=durationMs,proto3" json:"duration_ms,omitempty"`
CreatedAtUnix int64 `protobuf:"varint,14,opt,name=created_at_unix,json=createdAtUnix,proto3" json:"created_at_unix,omitempty"`
Found bool `protobuf:"varint,15,opt,name=found,proto3" json:"found,omitempty"` // false — нет такого id / истёк TTL
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *GetAIResponseTraceResponse) Reset() {
*x = GetAIResponseTraceResponse{}
mi := &file_ai_proto_msgTypes[9]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *GetAIResponseTraceResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*GetAIResponseTraceResponse) ProtoMessage() {}
func (x *GetAIResponseTraceResponse) ProtoReflect() protoreflect.Message {
mi := &file_ai_proto_msgTypes[9]
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 GetAIResponseTraceResponse.ProtoReflect.Descriptor instead.
func (*GetAIResponseTraceResponse) Descriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{9}
}
func (x *GetAIResponseTraceResponse) GetId() string {
if x != nil {
return x.Id
}
return ""
}
func (x *GetAIResponseTraceResponse) GetBotUsername() string {
if x != nil {
return x.BotUsername
}
return ""
}
func (x *GetAIResponseTraceResponse) GetModelName() string {
if x != nil {
return x.ModelName
}
return ""
}
func (x *GetAIResponseTraceResponse) GetTelegramUserId() int64 {
if x != nil {
return x.TelegramUserId
}
return 0
}
func (x *GetAIResponseTraceResponse) GetGlobalUserId() int64 {
if x != nil {
return x.GlobalUserId
}
return 0
}
func (x *GetAIResponseTraceResponse) GetSystemPrompt() string {
if x != nil {
return x.SystemPrompt
}
return ""
}
func (x *GetAIResponseTraceResponse) GetUserPrompt() string {
if x != nil {
return x.UserPrompt
}
return ""
}
func (x *GetAIResponseTraceResponse) GetMemories() []*UsedMemory {
if x != nil {
return x.Memories
}
return nil
}
func (x *GetAIResponseTraceResponse) GetToolCalls() []*ToolCallTrace {
if x != nil {
return x.ToolCalls
}
return nil
}
func (x *GetAIResponseTraceResponse) GetResponse() string {
if x != nil {
return x.Response
}
return ""
}
func (x *GetAIResponseTraceResponse) GetReasoningContent() string {
if x != nil {
return x.ReasoningContent
}
return ""
}
func (x *GetAIResponseTraceResponse) GetError() string {
if x != nil {
return x.Error
}
return ""
}
func (x *GetAIResponseTraceResponse) GetDurationMs() float64 {
if x != nil {
return x.DurationMs
}
return 0
}
func (x *GetAIResponseTraceResponse) GetCreatedAtUnix() int64 {
if x != nil {
return x.CreatedAtUnix
}
return 0
}
func (x *GetAIResponseTraceResponse) GetFound() bool {
if x != nil {
return x.Found
}
return false
}
// CreateSessionRequest для создания новой AI сессии
type CreateSessionRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` // Идентификатор пользователя
BotUsername string `protobuf:"bytes,2,opt,name=bot_username,json=botUsername,proto3" json:"bot_username,omitempty"` // Username бота для упоминаний
ModelName string `protobuf:"bytes,3,opt,name=model_name,json=modelName,proto3" json:"model_name,omitempty"` // Название модели (по умолчанию "deepseek-v4-flash")
TtlSeconds int64 `protobuf:"varint,4,opt,name=ttl_seconds,json=ttlSeconds,proto3" json:"ttl_seconds,omitempty"` // Время жизни сессии в секундах (по умолчанию 3600 = 1 час)
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *CreateSessionRequest) Reset() {
*x = CreateSessionRequest{}
mi := &file_ai_proto_msgTypes[10]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *CreateSessionRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*CreateSessionRequest) ProtoMessage() {}
func (x *CreateSessionRequest) ProtoReflect() protoreflect.Message {
mi := &file_ai_proto_msgTypes[10]
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 CreateSessionRequest.ProtoReflect.Descriptor instead.
func (*CreateSessionRequest) Descriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{10}
}
func (x *CreateSessionRequest) GetUserId() string {
if x != nil {
return x.UserId
}
return ""
}
func (x *CreateSessionRequest) GetBotUsername() string {
if x != nil {
return x.BotUsername
}
return ""
}
func (x *CreateSessionRequest) GetModelName() string {
if x != nil {
return x.ModelName
}
return ""
}
func (x *CreateSessionRequest) GetTtlSeconds() int64 {
if x != nil {
return x.TtlSeconds
}
return 0
}
// CreateSessionResponse содержит ID созданной сессии
type CreateSessionResponse struct {
state protoimpl.MessageState `protogen:"open.v1"`
SessionId string `protobuf:"bytes,1,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` // ID сессии
Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` // Статус сессии
Error string `protobuf:"bytes,3,opt,name=error,proto3" json:"error,omitempty"` // Текст ошибки, если произошла
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *CreateSessionResponse) Reset() {
*x = CreateSessionResponse{}
mi := &file_ai_proto_msgTypes[11]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *CreateSessionResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*CreateSessionResponse) ProtoMessage() {}
func (x *CreateSessionResponse) ProtoReflect() protoreflect.Message {
mi := &file_ai_proto_msgTypes[11]
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 CreateSessionResponse.ProtoReflect.Descriptor instead.
func (*CreateSessionResponse) Descriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{11}
}
func (x *CreateSessionResponse) GetSessionId() string {
if x != nil {
return x.SessionId
}
return ""
}
func (x *CreateSessionResponse) GetStatus() string {
if x != nil {
return x.Status
}
return ""
}
func (x *CreateSessionResponse) GetError() string {
if x != nil {
return x.Error
}
return ""
}
// AskInSessionRequest для запроса в рамках сессии
type AskInSessionRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
SessionId string `protobuf:"bytes,1,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` // ID сессии
Text string `protobuf:"bytes,2,opt,name=text,proto3" json:"text,omitempty"` // Текст запроса
EnableReasoning bool `protobuf:"varint,3,opt,name=enable_reasoning,json=enableReasoning,proto3" json:"enable_reasoning,omitempty"` // Включить режим рассуждений (по умолчанию false)
GlobalUserId int64 `protobuf:"varint,4,opt,name=global_user_id,json=globalUserId,proto3" json:"global_user_id,omitempty"` // Global user ID для получения воспоминаний
Options *AnswerGenerationOptions `protobuf:"bytes,5,opt,name=options,proto3" json:"options,omitempty"` // Дополнительные опции генерации
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *AskInSessionRequest) Reset() {
*x = AskInSessionRequest{}
mi := &file_ai_proto_msgTypes[12]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *AskInSessionRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*AskInSessionRequest) ProtoMessage() {}
func (x *AskInSessionRequest) ProtoReflect() protoreflect.Message {
mi := &file_ai_proto_msgTypes[12]
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 AskInSessionRequest.ProtoReflect.Descriptor instead.
func (*AskInSessionRequest) Descriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{12}
}
func (x *AskInSessionRequest) GetSessionId() string {
if x != nil {
return x.SessionId
}
return ""
}
func (x *AskInSessionRequest) GetText() string {
if x != nil {
return x.Text
}
return ""
}
func (x *AskInSessionRequest) GetEnableReasoning() bool {
if x != nil {
return x.EnableReasoning
}
return false
}
func (x *AskInSessionRequest) GetGlobalUserId() int64 {
if x != nil {
return x.GlobalUserId
}
return 0
}
func (x *AskInSessionRequest) GetOptions() *AnswerGenerationOptions {
if x != nil {
return x.Options
}
return nil
}
// SessionStatusResponse содержит статус сессии и ответ AI
type SessionStatusResponse struct {
state protoimpl.MessageState `protogen:"open.v1"`
SessionId string `protobuf:"bytes,1,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` // ID сессии
Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` // Статус сессии (active, expired, closed)
Content string `protobuf:"bytes,3,opt,name=content,proto3" json:"content,omitempty"` // Текст ответа от AI
Error string `protobuf:"bytes,4,opt,name=error,proto3" json:"error,omitempty"` // Текст ошибки, если произошла
DurationMs float64 `protobuf:"fixed64,5,opt,name=duration_ms,json=durationMs,proto3" json:"duration_ms,omitempty"` // Время выполнения в миллисекундах
ReasoningContent string `protobuf:"bytes,6,opt,name=reasoning_content,json=reasoningContent,proto3" json:"reasoning_content,omitempty"` // Текст рассуждений (если включён режим reasoning)
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *SessionStatusResponse) Reset() {
*x = SessionStatusResponse{}
mi := &file_ai_proto_msgTypes[13]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *SessionStatusResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*SessionStatusResponse) ProtoMessage() {}
func (x *SessionStatusResponse) ProtoReflect() protoreflect.Message {
mi := &file_ai_proto_msgTypes[13]
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 SessionStatusResponse.ProtoReflect.Descriptor instead.
func (*SessionStatusResponse) Descriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{13}
}
func (x *SessionStatusResponse) GetSessionId() string {
if x != nil {
return x.SessionId
}
return ""
}
func (x *SessionStatusResponse) GetStatus() string {
if x != nil {
return x.Status
}
return ""
}
func (x *SessionStatusResponse) GetContent() string {
if x != nil {
return x.Content
}
return ""
}
func (x *SessionStatusResponse) GetError() string {
if x != nil {
return x.Error
}
return ""
}
func (x *SessionStatusResponse) GetDurationMs() float64 {
if x != nil {
return x.DurationMs
}
return 0
}
func (x *SessionStatusResponse) GetReasoningContent() string {
if x != nil {
return x.ReasoningContent
}
return ""
}
// StatelessMessage одно сообщение для stateless запроса (role + content)
type StatelessMessage struct {
state protoimpl.MessageState `protogen:"open.v1"`
Role string `protobuf:"bytes,1,opt,name=role,proto3" json:"role,omitempty"` // "system", "user", "assistant"
Content string `protobuf:"bytes,2,opt,name=content,proto3" json:"content,omitempty"` // Текст сообщения
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *StatelessMessage) Reset() {
*x = StatelessMessage{}
mi := &file_ai_proto_msgTypes[14]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *StatelessMessage) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*StatelessMessage) ProtoMessage() {}
func (x *StatelessMessage) ProtoReflect() protoreflect.Message {
mi := &file_ai_proto_msgTypes[14]
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 StatelessMessage.ProtoReflect.Descriptor instead.
func (*StatelessMessage) Descriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{14}
}
func (x *StatelessMessage) GetRole() string {
if x != nil {
return x.Role
}
return ""
}
func (x *StatelessMessage) GetContent() string {
if x != nil {
return x.Content
}
return ""
}
// StatelessRequest для stateless генерации с полным контролем над messages
type StatelessRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
Messages []*StatelessMessage `protobuf:"bytes,1,rep,name=messages,proto3" json:"messages,omitempty"` // Массив сообщений (system + history + user)
ModelName string `protobuf:"bytes,2,opt,name=model_name,json=modelName,proto3" json:"model_name,omitempty"` // Название модели (по умолчанию "deepseek-v4-flash")
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *StatelessRequest) Reset() {
*x = StatelessRequest{}
mi := &file_ai_proto_msgTypes[15]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *StatelessRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*StatelessRequest) ProtoMessage() {}
func (x *StatelessRequest) ProtoReflect() protoreflect.Message {
mi := &file_ai_proto_msgTypes[15]
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 StatelessRequest.ProtoReflect.Descriptor instead.
func (*StatelessRequest) Descriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{15}
}
func (x *StatelessRequest) GetMessages() []*StatelessMessage {
if x != nil {
return x.Messages
}
return nil
}
func (x *StatelessRequest) GetModelName() string {
if x != nil {
return x.ModelName
}
return ""
}
// HealthCheckRequest для проверки здоровья сервиса
type HealthCheckRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *HealthCheckRequest) Reset() {
*x = HealthCheckRequest{}
mi := &file_ai_proto_msgTypes[16]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *HealthCheckRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*HealthCheckRequest) ProtoMessage() {}
func (x *HealthCheckRequest) ProtoReflect() protoreflect.Message {
mi := &file_ai_proto_msgTypes[16]
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 HealthCheckRequest.ProtoReflect.Descriptor instead.
func (*HealthCheckRequest) Descriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{16}
}
// HealthCheckResponse для ответа на проверку здоровья
type HealthCheckResponse struct {
state protoimpl.MessageState `protogen:"open.v1"`
Serving bool `protobuf:"varint,1,opt,name=serving,proto3" json:"serving,omitempty"`
Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *HealthCheckResponse) Reset() {
*x = HealthCheckResponse{}
mi := &file_ai_proto_msgTypes[17]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *HealthCheckResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*HealthCheckResponse) ProtoMessage() {}
func (x *HealthCheckResponse) ProtoReflect() protoreflect.Message {
mi := &file_ai_proto_msgTypes[17]
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 HealthCheckResponse.ProtoReflect.Descriptor instead.
func (*HealthCheckResponse) Descriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{17}
}
func (x *HealthCheckResponse) GetServing() bool {
if x != nil {
return x.Serving
}
return false
}
func (x *HealthCheckResponse) GetVersion() string {
if x != nil {
return x.Version
}
return ""
}
// AgentToolLoopOptions задаёт лимиты tool loop. Значения клиента могут только
// сузить серверные потолки (max_tool_iterations/max_total_tool_calls ≤ server max).
type AgentToolLoopOptions struct {
state protoimpl.MessageState `protogen:"open.v1"`
ToolsEnabled bool `protobuf:"varint,1,opt,name=tools_enabled,json=toolsEnabled,proto3" json:"tools_enabled,omitempty"` // false — модель отвечает без tools
MaxToolIterations uint32 `protobuf:"varint,2,opt,name=max_tool_iterations,json=maxToolIterations,proto3" json:"max_tool_iterations,omitempty"` // потолок round-trip'ов модель↔tools (0 = серверный default)
MaxTotalToolCalls uint32 `protobuf:"varint,3,opt,name=max_total_tool_calls,json=maxTotalToolCalls,proto3" json:"max_total_tool_calls,omitempty"` // потолок РЕАЛЬНЫХ tool call'ов, не итераций (0 = серверный default)
ToolTimeoutSeconds uint32 `protobuf:"varint,4,opt,name=tool_timeout_seconds,json=toolTimeoutSeconds,proto3" json:"tool_timeout_seconds,omitempty"` // таймаут одного tool call (0 = серверный default)
TotalTimeoutSeconds uint32 `protobuf:"varint,5,opt,name=total_timeout_seconds,json=totalTimeoutSeconds,proto3" json:"total_timeout_seconds,omitempty"` // wall-clock таймаут всего вызова (0 = серверный default), независим от budget
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *AgentToolLoopOptions) Reset() {
*x = AgentToolLoopOptions{}
mi := &file_ai_proto_msgTypes[18]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *AgentToolLoopOptions) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*AgentToolLoopOptions) ProtoMessage() {}
func (x *AgentToolLoopOptions) ProtoReflect() protoreflect.Message {
mi := &file_ai_proto_msgTypes[18]
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 AgentToolLoopOptions.ProtoReflect.Descriptor instead.
func (*AgentToolLoopOptions) Descriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{18}
}
func (x *AgentToolLoopOptions) GetToolsEnabled() bool {
if x != nil {
return x.ToolsEnabled
}
return false
}
func (x *AgentToolLoopOptions) GetMaxToolIterations() uint32 {
if x != nil {
return x.MaxToolIterations
}
return 0
}
func (x *AgentToolLoopOptions) GetMaxTotalToolCalls() uint32 {
if x != nil {
return x.MaxTotalToolCalls
}
return 0
}
func (x *AgentToolLoopOptions) GetToolTimeoutSeconds() uint32 {
if x != nil {
return x.ToolTimeoutSeconds
}
return 0
}
func (x *AgentToolLoopOptions) GetTotalTimeoutSeconds() uint32 {
if x != nil {
return x.TotalTimeoutSeconds
}
return 0
}
// AgentResponseContract описывает требования к структурированному ответу.
type AgentResponseContract struct {
state protoimpl.MessageState `protogen:"open.v1"`
Format AgentOutputFormat `protobuf:"varint,1,opt,name=format,proto3,enum=ai.AgentOutputFormat" json:"format,omitempty"`
JsonSchema string `protobuf:"bytes,2,opt,name=json_schema,json=jsonSchema,proto3" json:"json_schema,omitempty"` // JSON Schema (draft-07), обязателен при format=JSON_SCHEMA
RepairInvalidOutput bool `protobuf:"varint,3,opt,name=repair_invalid_output,json=repairInvalidOutput,proto3" json:"repair_invalid_output,omitempty"` // при провале валидации — один repair-запрос модели (без новых tools)
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *AgentResponseContract) Reset() {
*x = AgentResponseContract{}
mi := &file_ai_proto_msgTypes[19]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *AgentResponseContract) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*AgentResponseContract) ProtoMessage() {}
func (x *AgentResponseContract) ProtoReflect() protoreflect.Message {
mi := &file_ai_proto_msgTypes[19]
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 AgentResponseContract.ProtoReflect.Descriptor instead.
func (*AgentResponseContract) Descriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{19}
}
func (x *AgentResponseContract) GetFormat() AgentOutputFormat {
if x != nil {
return x.Format
}
return AgentOutputFormat_AGENT_OUTPUT_FORMAT_UNSPECIFIED
}
func (x *AgentResponseContract) GetJsonSchema() string {
if x != nil {
return x.JsonSchema
}
return ""
}
func (x *AgentResponseContract) GetRepairInvalidOutput() bool {
if x != nil {
return x.RepairInvalidOutput
}
return false
}
// AgentRequest — запрос агентного вызова.
type AgentRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
Messages []*StatelessMessage `protobuf:"bytes,1,rep,name=messages,proto3" json:"messages,omitempty"` // полный контекст, включая system
ModelName string `protobuf:"bytes,2,opt,name=model_name,json=modelName,proto3" json:"model_name,omitempty"` // модель (по умолчанию deepseek-v4-flash)
EnableReasoning bool `protobuf:"varint,3,opt,name=enable_reasoning,json=enableReasoning,proto3" json:"enable_reasoning,omitempty"` // reasoning не попадает в обычный content
AgentId string `protobuf:"bytes,4,opt,name=agent_id,json=agentId,proto3" json:"agent_id,omitempty"` // идентификатор логического агента (для логов/метрик, НЕ авторизация)
ToolProfile string `protobuf:"bytes,5,opt,name=tool_profile,json=toolProfile,proto3" json:"tool_profile,omitempty"` // серверный профиль tools (НЕ авторизация; проверяется против credential)
RequestedTools []string `protobuf:"bytes,6,rep,name=requested_tools,json=requestedTools,proto3" json:"requested_tools,omitempty"` // сужение профиля: effective = profile.allowed ∩ requested; пусто = все allowed
ToolLoop *AgentToolLoopOptions `protobuf:"bytes,7,opt,name=tool_loop,json=toolLoop,proto3" json:"tool_loop,omitempty"`
ResponseContract *AgentResponseContract `protobuf:"bytes,8,opt,name=response_contract,json=responseContract,proto3" json:"response_contract,omitempty"`
RequestId string `protobuf:"bytes,9,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` // сквозной идентификатор для трассировки
IdempotencyKey string `protobuf:"bytes,10,opt,name=idempotency_key,json=idempotencyKey,proto3" json:"idempotency_key,omitempty"` // повторный RunAgent с тем же ключом не создаёт дубликат job
SupportsDeferred bool `protobuf:"varint,11,opt,name=supports_deferred,json=supportsDeferred,proto3" json:"supports_deferred,omitempty"` // клиент умеет status=PENDING + GetAnswerJob для тяжёлых операций
Metadata map[string]string `protobuf:"bytes,12,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // произвольные метки (не логируются как секреты)
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *AgentRequest) Reset() {
*x = AgentRequest{}
mi := &file_ai_proto_msgTypes[20]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *AgentRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*AgentRequest) ProtoMessage() {}
func (x *AgentRequest) ProtoReflect() protoreflect.Message {
mi := &file_ai_proto_msgTypes[20]
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 AgentRequest.ProtoReflect.Descriptor instead.
func (*AgentRequest) Descriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{20}
}
func (x *AgentRequest) GetMessages() []*StatelessMessage {
if x != nil {
return x.Messages
}
return nil
}
func (x *AgentRequest) GetModelName() string {
if x != nil {
return x.ModelName
}
return ""
}
func (x *AgentRequest) GetEnableReasoning() bool {
if x != nil {
return x.EnableReasoning
}
return false
}
func (x *AgentRequest) GetAgentId() string {
if x != nil {
return x.AgentId
}
return ""
}
func (x *AgentRequest) GetToolProfile() string {
if x != nil {
return x.ToolProfile
}
return ""
}
func (x *AgentRequest) GetRequestedTools() []string {
if x != nil {
return x.RequestedTools
}
return nil
}
func (x *AgentRequest) GetToolLoop() *AgentToolLoopOptions {
if x != nil {
return x.ToolLoop
}
return nil
}
func (x *AgentRequest) GetResponseContract() *AgentResponseContract {
if x != nil {
return x.ResponseContract
}
return nil
}
func (x *AgentRequest) GetRequestId() string {
if x != nil {
return x.RequestId
}
return ""
}
func (x *AgentRequest) GetIdempotencyKey() string {
if x != nil {
return x.IdempotencyKey
}
return ""
}
func (x *AgentRequest) GetSupportsDeferred() bool {
if x != nil {
return x.SupportsDeferred
}
return false
}
func (x *AgentRequest) GetMetadata() map[string]string {
if x != nil {
return x.Metadata
}
return nil
}
// AgentUsage — счётчики использования за вызов.
type AgentUsage struct {
state protoimpl.MessageState `protogen:"open.v1"`
ToolIterations uint32 `protobuf:"varint,1,opt,name=tool_iterations,json=toolIterations,proto3" json:"tool_iterations,omitempty"` // сколько round-trip'ов модель↔tools произошло
TotalToolCalls uint32 `protobuf:"varint,2,opt,name=total_tool_calls,json=totalToolCalls,proto3" json:"total_tool_calls,omitempty"` // сколько РЕАЛЬНЫХ tool call'ов исполнено (3 calls в одной итерации = 3)
ToolsUsed []string `protobuf:"bytes,3,rep,name=tools_used,json=toolsUsed,proto3" json:"tools_used,omitempty"`
InputTokens uint64 `protobuf:"varint,4,opt,name=input_tokens,json=inputTokens,proto3" json:"input_tokens,omitempty"`
OutputTokens uint64 `protobuf:"varint,5,opt,name=output_tokens,json=outputTokens,proto3" json:"output_tokens,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *AgentUsage) Reset() {
*x = AgentUsage{}
mi := &file_ai_proto_msgTypes[21]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *AgentUsage) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*AgentUsage) ProtoMessage() {}
func (x *AgentUsage) ProtoReflect() protoreflect.Message {
mi := &file_ai_proto_msgTypes[21]
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 AgentUsage.ProtoReflect.Descriptor instead.
func (*AgentUsage) Descriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{21}
}
func (x *AgentUsage) GetToolIterations() uint32 {
if x != nil {
return x.ToolIterations
}
return 0
}
func (x *AgentUsage) GetTotalToolCalls() uint32 {
if x != nil {
return x.TotalToolCalls
}
return 0
}
func (x *AgentUsage) GetToolsUsed() []string {
if x != nil {
return x.ToolsUsed
}
return nil
}
func (x *AgentUsage) GetInputTokens() uint64 {
if x != nil {
return x.InputTokens
}
return 0
}
func (x *AgentUsage) GetOutputTokens() uint64 {
if x != nil {
return x.OutputTokens
}
return 0
}
// AgentResponse — результат агентного вызова.
type AgentResponse struct {
state protoimpl.MessageState `protogen:"open.v1"`
Status AnswerStatus `protobuf:"varint,1,opt,name=status,proto3,enum=ai.AnswerStatus" json:"status,omitempty"` // COMPLETE — content финальный; PENDING — тянуть через GetAnswerJob(job_id)
Content string `protobuf:"bytes,2,opt,name=content,proto3" json:"content,omitempty"`
Error string `protobuf:"bytes,3,opt,name=error,proto3" json:"error,omitempty"`
DurationMs float64 `protobuf:"fixed64,4,opt,name=duration_ms,json=durationMs,proto3" json:"duration_ms,omitempty"`
JobId string `protobuf:"bytes,5,opt,name=job_id,json=jobId,proto3" json:"job_id,omitempty"` // при status=PENDING
Usage *AgentUsage `protobuf:"bytes,6,opt,name=usage,proto3" json:"usage,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *AgentResponse) Reset() {
*x = AgentResponse{}
mi := &file_ai_proto_msgTypes[22]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *AgentResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*AgentResponse) ProtoMessage() {}
func (x *AgentResponse) ProtoReflect() protoreflect.Message {
mi := &file_ai_proto_msgTypes[22]
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 AgentResponse.ProtoReflect.Descriptor instead.
func (*AgentResponse) Descriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{22}
}
func (x *AgentResponse) GetStatus() AnswerStatus {
if x != nil {
return x.Status
}
return AnswerStatus_ANSWER_STATUS_UNSPECIFIED
}
func (x *AgentResponse) GetContent() string {
if x != nil {
return x.Content
}
return ""
}
func (x *AgentResponse) GetError() string {
if x != nil {
return x.Error
}
return ""
}
func (x *AgentResponse) GetDurationMs() float64 {
if x != nil {
return x.DurationMs
}
return 0
}
func (x *AgentResponse) GetJobId() string {
if x != nil {
return x.JobId
}
return ""
}
func (x *AgentResponse) GetUsage() *AgentUsage {
if x != nil {
return x.Usage
}
return nil
}
// CancelAnswerJobRequest — запрос отмены отложенной job (идемпотентный).
type CancelAnswerJobRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
JobId string `protobuf:"bytes,1,opt,name=job_id,json=jobId,proto3" json:"job_id,omitempty"`
Reason string `protobuf:"bytes,2,opt,name=reason,proto3" json:"reason,omitempty"` // причина отмены (сохраняется), опционально
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *CancelAnswerJobRequest) Reset() {
*x = CancelAnswerJobRequest{}
mi := &file_ai_proto_msgTypes[23]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *CancelAnswerJobRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*CancelAnswerJobRequest) ProtoMessage() {}
func (x *CancelAnswerJobRequest) ProtoReflect() protoreflect.Message {
mi := &file_ai_proto_msgTypes[23]
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 CancelAnswerJobRequest.ProtoReflect.Descriptor instead.
func (*CancelAnswerJobRequest) Descriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{23}
}
func (x *CancelAnswerJobRequest) GetJobId() string {
if x != nil {
return x.JobId
}
return ""
}
func (x *CancelAnswerJobRequest) GetReason() string {
if x != nil {
return x.Reason
}
return ""
}
// CancelAnswerJobResponse — результат отмены.
type CancelAnswerJobResponse struct {
state protoimpl.MessageState `protogen:"open.v1"`
State AnswerJobState `protobuf:"varint,1,opt,name=state,proto3,enum=ai.AnswerJobState" json:"state,omitempty"` // состояние job после запроса (CANCELLED, либо терминальное, если уже завершилась)
Cancelled bool `protobuf:"varint,2,opt,name=cancelled,proto3" json:"cancelled,omitempty"` // true — отмена применена этим вызовом; false — job уже была терминальна/отменена
Error string `protobuf:"bytes,3,opt,name=error,proto3" json:"error,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *CancelAnswerJobResponse) Reset() {
*x = CancelAnswerJobResponse{}
mi := &file_ai_proto_msgTypes[24]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *CancelAnswerJobResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*CancelAnswerJobResponse) ProtoMessage() {}
func (x *CancelAnswerJobResponse) ProtoReflect() protoreflect.Message {
mi := &file_ai_proto_msgTypes[24]
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 CancelAnswerJobResponse.ProtoReflect.Descriptor instead.
func (*CancelAnswerJobResponse) Descriptor() ([]byte, []int) {
return file_ai_proto_rawDescGZIP(), []int{24}
}
func (x *CancelAnswerJobResponse) GetState() AnswerJobState {
if x != nil {
return x.State
}
return AnswerJobState_ANSWER_JOB_STATE_UNSPECIFIED
}
func (x *CancelAnswerJobResponse) GetCancelled() bool {
if x != nil {
return x.Cancelled
}
return false
}
func (x *CancelAnswerJobResponse) GetError() string {
if x != nil {
return x.Error
}
return ""
}
var File_ai_proto protoreflect.FileDescriptor
const file_ai_proto_rawDesc = "" +
"\n" +
"\bai.proto\x12\x02ai\"\xe4\x03\n" +
"\tAIRequest\x12\x12\n" +
"\x04text\x18\x01 \x01(\tR\x04text\x12!\n" +
"\fbot_username\x18\x02 \x01(\tR\vbotUsername\x12\x1d\n" +
"\n" +
"model_name\x18\x03 \x01(\tR\tmodelName\x12)\n" +
"\x10enable_reasoning\x18\x04 \x01(\bR\x0fenableReasoning\x12$\n" +
"\x0eglobal_user_id\x18\x05 \x01(\x03R\fglobalUserId\x125\n" +
"\aoptions\x18\x06 \x01(\v2\x1b.ai.AnswerGenerationOptionsR\aoptions\x12(\n" +
"\x10telegram_user_id\x18\a \x01(\x03R\x0etelegramUserId\x12\"\n" +
"\rsteam_user_id\x18\b \x01(\x03R\vsteamUserId\x12+\n" +
"\x11supports_deferred\x18\t \x01(\bR\x10supportsDeferred\x123\n" +
"\rused_memories\x18\n" +
" \x03(\v2\x0e.ai.UsedMemoryR\fusedMemories\x12!\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" +
"UsedMemory\x12\x0e\n" +
"\x02id\x18\x01 \x01(\x03R\x02id\x12\x17\n" +
"\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x1a\n" +
"\busername\x18\x03 \x01(\tR\busername\x12\x10\n" +
"\x03key\x18\x04 \x01(\tR\x03key\x12\x14\n" +
"\x05value\x18\x05 \x01(\tR\x05value\x12\x1a\n" +
"\bcategory\x18\x06 \x01(\tR\bcategory\x12\x1a\n" +
"\bpriority\x18\a \x01(\tR\bpriority\x12!\n" +
"\fsource_label\x18\b \x01(\tR\vsourceLabel\"M\n" +
"\x17AnswerGenerationOptions\x122\n" +
"\x15include_user_memories\x18\x01 \x01(\bR\x13includeUserMemories\"\x80\x03\n" +
"\n" +
"AIResponse\x12\x18\n" +
"\acontent\x18\x01 \x01(\tR\acontent\x12\x14\n" +
"\x05error\x18\x02 \x01(\tR\x05error\x12\x1f\n" +
"\vduration_ms\x18\x03 \x01(\x01R\n" +
"durationMs\x12+\n" +
"\x11reasoning_content\x18\x04 \x01(\tR\x10reasoningContent\x12(\n" +
"\x06status\x18\x05 \x01(\x0e2\x10.ai.AnswerStatusR\x06status\x12\x15\n" +
"\x06job_id\x18\x06 \x01(\tR\x05jobId\x12\x1f\n" +
"\vresponse_id\x18\a \x01(\tR\n" +
"responseId\x12$\n" +
"\x04kind\x18\b \x01(\x0e2\x10.ai.ResponseKindR\x04kind\x12!\n" +
"\fimage_base64\x18\t \x01(\tR\vimageBase64\x12&\n" +
"\x0fimage_mime_type\x18\n" +
" \x01(\tR\rimageMimeType\x12!\n" +
"\fimage_prompt\x18\v \x01(\tR\vimagePrompt\",\n" +
"\x13GetAnswerJobRequest\x12\x15\n" +
"\x06job_id\x18\x01 \x01(\tR\x05jobId\"\xe0\x01\n" +
"\x11AnswerJobResponse\x12(\n" +
"\x05state\x18\x01 \x01(\x0e2\x12.ai.AnswerJobStateR\x05state\x12\x18\n" +
"\acontent\x18\x02 \x01(\tR\acontent\x12\x14\n" +
"\x05error\x18\x03 \x01(\tR\x05error\x12\x1f\n" +
"\vduration_ms\x18\x04 \x01(\x01R\n" +
"durationMs\x12/\n" +
"\vagent_usage\x18\x05 \x01(\v2\x0e.ai.AgentUsageR\n" +
"agentUsage\x12\x1f\n" +
"\vresponse_id\x18\x06 \x01(\tR\n" +
"responseId\"\xad\x01\n" +
"\rToolCallTrace\x12\x17\n" +
"\acall_id\x18\x01 \x01(\tR\x06callId\x12\x12\n" +
"\x04name\x18\x02 \x01(\tR\x04name\x12%\n" +
"\x0earguments_json\x18\x03 \x01(\tR\rargumentsJson\x12\x16\n" +
"\x06result\x18\x04 \x01(\tR\x06result\x12\x14\n" +
"\x05error\x18\x05 \x01(\tR\x05error\x12\x1a\n" +
"\bdeferred\x18\x06 \x01(\bR\bdeferred\"+\n" +
"\x19GetAIResponseTraceRequest\x12\x0e\n" +
"\x02id\x18\x01 \x01(\tR\x02id\"\xa0\x04\n" +
"\x1aGetAIResponseTraceResponse\x12\x0e\n" +
"\x02id\x18\x01 \x01(\tR\x02id\x12!\n" +
"\fbot_username\x18\x02 \x01(\tR\vbotUsername\x12\x1d\n" +
"\n" +
"model_name\x18\x03 \x01(\tR\tmodelName\x12(\n" +
"\x10telegram_user_id\x18\x04 \x01(\x03R\x0etelegramUserId\x12$\n" +
"\x0eglobal_user_id\x18\x05 \x01(\x03R\fglobalUserId\x12#\n" +
"\rsystem_prompt\x18\x06 \x01(\tR\fsystemPrompt\x12\x1f\n" +
"\vuser_prompt\x18\a \x01(\tR\n" +
"userPrompt\x12*\n" +
"\bmemories\x18\b \x03(\v2\x0e.ai.UsedMemoryR\bmemories\x120\n" +
"\n" +
"tool_calls\x18\t \x03(\v2\x11.ai.ToolCallTraceR\ttoolCalls\x12\x1a\n" +
"\bresponse\x18\n" +
" \x01(\tR\bresponse\x12+\n" +
"\x11reasoning_content\x18\v \x01(\tR\x10reasoningContent\x12\x14\n" +
"\x05error\x18\f \x01(\tR\x05error\x12\x1f\n" +
"\vduration_ms\x18\r \x01(\x01R\n" +
"durationMs\x12&\n" +
"\x0fcreated_at_unix\x18\x0e \x01(\x03R\rcreatedAtUnix\x12\x14\n" +
"\x05found\x18\x0f \x01(\bR\x05found\"\x92\x01\n" +
"\x14CreateSessionRequest\x12\x17\n" +
"\auser_id\x18\x01 \x01(\tR\x06userId\x12!\n" +
"\fbot_username\x18\x02 \x01(\tR\vbotUsername\x12\x1d\n" +
"\n" +
"model_name\x18\x03 \x01(\tR\tmodelName\x12\x1f\n" +
"\vttl_seconds\x18\x04 \x01(\x03R\n" +
"ttlSeconds\"d\n" +
"\x15CreateSessionResponse\x12\x1d\n" +
"\n" +
"session_id\x18\x01 \x01(\tR\tsessionId\x12\x16\n" +
"\x06status\x18\x02 \x01(\tR\x06status\x12\x14\n" +
"\x05error\x18\x03 \x01(\tR\x05error\"\xd0\x01\n" +
"\x13AskInSessionRequest\x12\x1d\n" +
"\n" +
"session_id\x18\x01 \x01(\tR\tsessionId\x12\x12\n" +
"\x04text\x18\x02 \x01(\tR\x04text\x12)\n" +
"\x10enable_reasoning\x18\x03 \x01(\bR\x0fenableReasoning\x12$\n" +
"\x0eglobal_user_id\x18\x04 \x01(\x03R\fglobalUserId\x125\n" +
"\aoptions\x18\x05 \x01(\v2\x1b.ai.AnswerGenerationOptionsR\aoptions\"\xcc\x01\n" +
"\x15SessionStatusResponse\x12\x1d\n" +
"\n" +
"session_id\x18\x01 \x01(\tR\tsessionId\x12\x16\n" +
"\x06status\x18\x02 \x01(\tR\x06status\x12\x18\n" +
"\acontent\x18\x03 \x01(\tR\acontent\x12\x14\n" +
"\x05error\x18\x04 \x01(\tR\x05error\x12\x1f\n" +
"\vduration_ms\x18\x05 \x01(\x01R\n" +
"durationMs\x12+\n" +
"\x11reasoning_content\x18\x06 \x01(\tR\x10reasoningContent\"@\n" +
"\x10StatelessMessage\x12\x12\n" +
"\x04role\x18\x01 \x01(\tR\x04role\x12\x18\n" +
"\acontent\x18\x02 \x01(\tR\acontent\"c\n" +
"\x10StatelessRequest\x120\n" +
"\bmessages\x18\x01 \x03(\v2\x14.ai.StatelessMessageR\bmessages\x12\x1d\n" +
"\n" +
"model_name\x18\x02 \x01(\tR\tmodelName\"\x14\n" +
"\x12HealthCheckRequest\"I\n" +
"\x13HealthCheckResponse\x12\x18\n" +
"\aserving\x18\x01 \x01(\bR\aserving\x12\x18\n" +
"\aversion\x18\x02 \x01(\tR\aversion\"\x82\x02\n" +
"\x14AgentToolLoopOptions\x12#\n" +
"\rtools_enabled\x18\x01 \x01(\bR\ftoolsEnabled\x12.\n" +
"\x13max_tool_iterations\x18\x02 \x01(\rR\x11maxToolIterations\x12/\n" +
"\x14max_total_tool_calls\x18\x03 \x01(\rR\x11maxTotalToolCalls\x120\n" +
"\x14tool_timeout_seconds\x18\x04 \x01(\rR\x12toolTimeoutSeconds\x122\n" +
"\x15total_timeout_seconds\x18\x05 \x01(\rR\x13totalTimeoutSeconds\"\x9b\x01\n" +
"\x15AgentResponseContract\x12-\n" +
"\x06format\x18\x01 \x01(\x0e2\x15.ai.AgentOutputFormatR\x06format\x12\x1f\n" +
"\vjson_schema\x18\x02 \x01(\tR\n" +
"jsonSchema\x122\n" +
"\x15repair_invalid_output\x18\x03 \x01(\bR\x13repairInvalidOutput\"\xde\x04\n" +
"\fAgentRequest\x120\n" +
"\bmessages\x18\x01 \x03(\v2\x14.ai.StatelessMessageR\bmessages\x12\x1d\n" +
"\n" +
"model_name\x18\x02 \x01(\tR\tmodelName\x12)\n" +
"\x10enable_reasoning\x18\x03 \x01(\bR\x0fenableReasoning\x12\x19\n" +
"\bagent_id\x18\x04 \x01(\tR\aagentId\x12!\n" +
"\ftool_profile\x18\x05 \x01(\tR\vtoolProfile\x12'\n" +
"\x0frequested_tools\x18\x06 \x03(\tR\x0erequestedTools\x125\n" +
"\ttool_loop\x18\a \x01(\v2\x18.ai.AgentToolLoopOptionsR\btoolLoop\x12F\n" +
"\x11response_contract\x18\b \x01(\v2\x19.ai.AgentResponseContractR\x10responseContract\x12\x1d\n" +
"\n" +
"request_id\x18\t \x01(\tR\trequestId\x12'\n" +
"\x0fidempotency_key\x18\n" +
" \x01(\tR\x0eidempotencyKey\x12+\n" +
"\x11supports_deferred\x18\v \x01(\bR\x10supportsDeferred\x12:\n" +
"\bmetadata\x18\f \x03(\v2\x1e.ai.AgentRequest.MetadataEntryR\bmetadata\x1a;\n" +
"\rMetadataEntry\x12\x10\n" +
"\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" +
"\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xc6\x01\n" +
"\n" +
"AgentUsage\x12'\n" +
"\x0ftool_iterations\x18\x01 \x01(\rR\x0etoolIterations\x12(\n" +
"\x10total_tool_calls\x18\x02 \x01(\rR\x0etotalToolCalls\x12\x1d\n" +
"\n" +
"tools_used\x18\x03 \x03(\tR\ttoolsUsed\x12!\n" +
"\finput_tokens\x18\x04 \x01(\x04R\vinputTokens\x12#\n" +
"\routput_tokens\x18\x05 \x01(\x04R\foutputTokens\"\xc7\x01\n" +
"\rAgentResponse\x12(\n" +
"\x06status\x18\x01 \x01(\x0e2\x10.ai.AnswerStatusR\x06status\x12\x18\n" +
"\acontent\x18\x02 \x01(\tR\acontent\x12\x14\n" +
"\x05error\x18\x03 \x01(\tR\x05error\x12\x1f\n" +
"\vduration_ms\x18\x04 \x01(\x01R\n" +
"durationMs\x12\x15\n" +
"\x06job_id\x18\x05 \x01(\tR\x05jobId\x12$\n" +
"\x05usage\x18\x06 \x01(\v2\x0e.ai.AgentUsageR\x05usage\"G\n" +
"\x16CancelAnswerJobRequest\x12\x15\n" +
"\x06job_id\x18\x01 \x01(\tR\x05jobId\x12\x16\n" +
"\x06reason\x18\x02 \x01(\tR\x06reason\"w\n" +
"\x17CancelAnswerJobResponse\x12(\n" +
"\x05state\x18\x01 \x01(\x0e2\x12.ai.AnswerJobStateR\x05state\x12\x1c\n" +
"\tcancelled\x18\x02 \x01(\bR\tcancelled\x12\x14\n" +
"\x05error\x18\x03 \x01(\tR\x05error*^\n" +
"\fResponseKind\x12\x1d\n" +
"\x19RESPONSE_KIND_UNSPECIFIED\x10\x00\x12\x16\n" +
"\x12RESPONSE_KIND_TEXT\x10\x01\x12\x17\n" +
"\x13RESPONSE_KIND_IMAGE\x10\x02*d\n" +
"\fAnswerStatus\x12\x1d\n" +
"\x19ANSWER_STATUS_UNSPECIFIED\x10\x00\x12\x1a\n" +
"\x16ANSWER_STATUS_COMPLETE\x10\x01\x12\x19\n" +
"\x15ANSWER_STATUS_PENDING\x10\x02*\x84\x02\n" +
"\x0eAnswerJobState\x12 \n" +
"\x1cANSWER_JOB_STATE_UNSPECIFIED\x10\x00\x12\x1c\n" +
"\x18ANSWER_JOB_STATE_PENDING\x10\x01\x12\x19\n" +
"\x15ANSWER_JOB_STATE_DONE\x10\x02\x12\x1b\n" +
"\x17ANSWER_JOB_STATE_FAILED\x10\x03\x12\x1e\n" +
"\x1aANSWER_JOB_STATE_NOT_FOUND\x10\x04\x12\x1c\n" +
"\x18ANSWER_JOB_STATE_RUNNING\x10\x05\x12\x1e\n" +
"\x1aANSWER_JOB_STATE_CANCELLED\x10\x06\x12\x1c\n" +
"\x18ANSWER_JOB_STATE_EXPIRED\x10\a*\x99\x01\n" +
"\x11AgentOutputFormat\x12#\n" +
"\x1fAGENT_OUTPUT_FORMAT_UNSPECIFIED\x10\x00\x12\x1c\n" +
"\x18AGENT_OUTPUT_FORMAT_TEXT\x10\x01\x12\x1c\n" +
"\x18AGENT_OUTPUT_FORMAT_JSON\x10\x02\x12#\n" +
"\x1fAGENT_OUTPUT_FORMAT_JSON_SCHEMA\x10\x032\xd3\x04\n" +
"\tAIService\x12/\n" +
"\bRunAgent\x12\x10.ai.AgentRequest\x1a\x11.ai.AgentResponse\x12J\n" +
"\x0fCancelAnswerJob\x12\x1a.ai.CancelAnswerJobRequest\x1a\x1b.ai.CancelAnswerJobResponse\x12/\n" +
"\x0eGenerateAnswer\x12\r.ai.AIRequest\x1a\x0e.ai.AIResponse\x129\n" +
"\x11GenerateStateless\x12\x14.ai.StatelessRequest\x1a\x0e.ai.AIResponse\x12>\n" +
"\vHealthCheck\x12\x16.ai.HealthCheckRequest\x1a\x17.ai.HealthCheckResponse\x12D\n" +
"\rCreateSession\x12\x18.ai.CreateSessionRequest\x1a\x19.ai.CreateSessionResponse\x12B\n" +
"\fAskInSession\x12\x17.ai.AskInSessionRequest\x1a\x19.ai.SessionStatusResponse\x12>\n" +
"\fGetAnswerJob\x12\x17.ai.GetAnswerJobRequest\x1a\x15.ai.AnswerJobResponse\x12S\n" +
"\x12GetAIResponseTrace\x12\x1d.ai.GetAIResponseTraceRequest\x1a\x1e.ai.GetAIResponseTraceResponseB,Z*git.be.kaien.ru/l-ai/l-ai-core-proto/protob\x06proto3"
var (
file_ai_proto_rawDescOnce sync.Once
file_ai_proto_rawDescData []byte
)
func file_ai_proto_rawDescGZIP() []byte {
file_ai_proto_rawDescOnce.Do(func() {
file_ai_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_ai_proto_rawDesc), len(file_ai_proto_rawDesc)))
})
return file_ai_proto_rawDescData
}
var file_ai_proto_enumTypes = make([]protoimpl.EnumInfo, 4)
var file_ai_proto_msgTypes = make([]protoimpl.MessageInfo, 26)
var file_ai_proto_goTypes = []any{
(ResponseKind)(0), // 0: ai.ResponseKind
(AnswerStatus)(0), // 1: ai.AnswerStatus
(AnswerJobState)(0), // 2: ai.AnswerJobState
(AgentOutputFormat)(0), // 3: ai.AgentOutputFormat
(*AIRequest)(nil), // 4: ai.AIRequest
(*InputImage)(nil), // 5: ai.InputImage
(*UsedMemory)(nil), // 6: ai.UsedMemory
(*AnswerGenerationOptions)(nil), // 7: ai.AnswerGenerationOptions
(*AIResponse)(nil), // 8: ai.AIResponse
(*GetAnswerJobRequest)(nil), // 9: ai.GetAnswerJobRequest
(*AnswerJobResponse)(nil), // 10: ai.AnswerJobResponse
(*ToolCallTrace)(nil), // 11: ai.ToolCallTrace
(*GetAIResponseTraceRequest)(nil), // 12: ai.GetAIResponseTraceRequest
(*GetAIResponseTraceResponse)(nil), // 13: ai.GetAIResponseTraceResponse
(*CreateSessionRequest)(nil), // 14: ai.CreateSessionRequest
(*CreateSessionResponse)(nil), // 15: ai.CreateSessionResponse
(*AskInSessionRequest)(nil), // 16: ai.AskInSessionRequest
(*SessionStatusResponse)(nil), // 17: ai.SessionStatusResponse
(*StatelessMessage)(nil), // 18: ai.StatelessMessage
(*StatelessRequest)(nil), // 19: ai.StatelessRequest
(*HealthCheckRequest)(nil), // 20: ai.HealthCheckRequest
(*HealthCheckResponse)(nil), // 21: ai.HealthCheckResponse
(*AgentToolLoopOptions)(nil), // 22: ai.AgentToolLoopOptions
(*AgentResponseContract)(nil), // 23: ai.AgentResponseContract
(*AgentRequest)(nil), // 24: ai.AgentRequest
(*AgentUsage)(nil), // 25: ai.AgentUsage
(*AgentResponse)(nil), // 26: ai.AgentResponse
(*CancelAnswerJobRequest)(nil), // 27: ai.CancelAnswerJobRequest
(*CancelAnswerJobResponse)(nil), // 28: ai.CancelAnswerJobResponse
nil, // 29: ai.AgentRequest.MetadataEntry
}
var file_ai_proto_depIdxs = []int32{
7, // 0: ai.AIRequest.options:type_name -> ai.AnswerGenerationOptions
6, // 1: ai.AIRequest.used_memories:type_name -> ai.UsedMemory
5, // 2: ai.AIRequest.images:type_name -> ai.InputImage
1, // 3: ai.AIResponse.status:type_name -> ai.AnswerStatus
0, // 4: ai.AIResponse.kind:type_name -> ai.ResponseKind
2, // 5: ai.AnswerJobResponse.state:type_name -> ai.AnswerJobState
25, // 6: ai.AnswerJobResponse.agent_usage:type_name -> ai.AgentUsage
6, // 7: ai.GetAIResponseTraceResponse.memories:type_name -> ai.UsedMemory
11, // 8: ai.GetAIResponseTraceResponse.tool_calls:type_name -> ai.ToolCallTrace
7, // 9: ai.AskInSessionRequest.options:type_name -> ai.AnswerGenerationOptions
18, // 10: ai.StatelessRequest.messages:type_name -> ai.StatelessMessage
3, // 11: ai.AgentResponseContract.format:type_name -> ai.AgentOutputFormat
18, // 12: ai.AgentRequest.messages:type_name -> ai.StatelessMessage
22, // 13: ai.AgentRequest.tool_loop:type_name -> ai.AgentToolLoopOptions
23, // 14: ai.AgentRequest.response_contract:type_name -> ai.AgentResponseContract
29, // 15: ai.AgentRequest.metadata:type_name -> ai.AgentRequest.MetadataEntry
1, // 16: ai.AgentResponse.status:type_name -> ai.AnswerStatus
25, // 17: ai.AgentResponse.usage:type_name -> ai.AgentUsage
2, // 18: ai.CancelAnswerJobResponse.state:type_name -> ai.AnswerJobState
24, // 19: ai.AIService.RunAgent:input_type -> ai.AgentRequest
27, // 20: ai.AIService.CancelAnswerJob:input_type -> ai.CancelAnswerJobRequest
4, // 21: ai.AIService.GenerateAnswer:input_type -> ai.AIRequest
19, // 22: ai.AIService.GenerateStateless:input_type -> ai.StatelessRequest
20, // 23: ai.AIService.HealthCheck:input_type -> ai.HealthCheckRequest
14, // 24: ai.AIService.CreateSession:input_type -> ai.CreateSessionRequest
16, // 25: ai.AIService.AskInSession:input_type -> ai.AskInSessionRequest
9, // 26: ai.AIService.GetAnswerJob:input_type -> ai.GetAnswerJobRequest
12, // 27: ai.AIService.GetAIResponseTrace:input_type -> ai.GetAIResponseTraceRequest
26, // 28: ai.AIService.RunAgent:output_type -> ai.AgentResponse
28, // 29: ai.AIService.CancelAnswerJob:output_type -> ai.CancelAnswerJobResponse
8, // 30: ai.AIService.GenerateAnswer:output_type -> ai.AIResponse
8, // 31: ai.AIService.GenerateStateless:output_type -> ai.AIResponse
21, // 32: ai.AIService.HealthCheck:output_type -> ai.HealthCheckResponse
15, // 33: ai.AIService.CreateSession:output_type -> ai.CreateSessionResponse
17, // 34: ai.AIService.AskInSession:output_type -> ai.SessionStatusResponse
10, // 35: ai.AIService.GetAnswerJob:output_type -> ai.AnswerJobResponse
13, // 36: ai.AIService.GetAIResponseTrace:output_type -> ai.GetAIResponseTraceResponse
28, // [28:37] is the sub-list for method output_type
19, // [19:28] is the sub-list for method input_type
19, // [19:19] is the sub-list for extension 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 file_ai_proto_init() {
if File_ai_proto != nil {
return
}
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: unsafe.Slice(unsafe.StringData(file_ai_proto_rawDesc), len(file_ai_proto_rawDesc)),
NumEnums: 4,
NumMessages: 26,
NumExtensions: 0,
NumServices: 1,
},
GoTypes: file_ai_proto_goTypes,
DependencyIndexes: file_ai_proto_depIdxs,
EnumInfos: file_ai_proto_enumTypes,
MessageInfos: file_ai_proto_msgTypes,
}.Build()
File_ai_proto = out.File
file_ai_proto_goTypes = nil
file_ai_proto_depIdxs = nil
}