Extend AnswerJobState with RUNNING/CANCELLED/EXPIRED (values 5-7, backward compatible). Add AgentRequest/AgentResponse/AgentToolLoopOptions/ AgentResponseContract/AgentUsage/AgentOutputFormat and Cancel* messages. Existing RPCs unchanged. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1841 lines
65 KiB
Go
1841 lines
65 KiB
Go
// Code generated by protoc-gen-go. DO NOT EDIT.
|
||
// versions:
|
||
// protoc-gen-go v1.36.11
|
||
// protoc v7.34.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)
|
||
)
|
||
|
||
// 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[0].Descriptor()
|
||
}
|
||
|
||
func (AnswerStatus) Type() protoreflect.EnumType {
|
||
return &file_ai_proto_enumTypes[0]
|
||
}
|
||
|
||
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{0}
|
||
}
|
||
|
||
// 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[1].Descriptor()
|
||
}
|
||
|
||
func (AnswerJobState) Type() protoreflect.EnumType {
|
||
return &file_ai_proto_enumTypes[1]
|
||
}
|
||
|
||
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{1}
|
||
}
|
||
|
||
// 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[2].Descriptor()
|
||
}
|
||
|
||
func (AgentOutputFormat) Type() protoreflect.EnumType {
|
||
return &file_ai_proto_enumTypes[2]
|
||
}
|
||
|
||
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{2}
|
||
}
|
||
|
||
// 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 тяжёлые тулзы). Старые клиенты не ставят — тяжёлые тулзы исполняются синхронно, как раньше.
|
||
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
|
||
}
|
||
|
||
// 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[1]
|
||
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[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 AnswerGenerationOptions.ProtoReflect.Descriptor instead.
|
||
func (*AnswerGenerationOptions) Descriptor() ([]byte, []int) {
|
||
return file_ai_proto_rawDescGZIP(), []int{1}
|
||
}
|
||
|
||
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)
|
||
unknownFields protoimpl.UnknownFields
|
||
sizeCache protoimpl.SizeCache
|
||
}
|
||
|
||
func (x *AIResponse) Reset() {
|
||
*x = AIResponse{}
|
||
mi := &file_ai_proto_msgTypes[2]
|
||
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[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 AIResponse.ProtoReflect.Descriptor instead.
|
||
func (*AIResponse) Descriptor() ([]byte, []int) {
|
||
return file_ai_proto_rawDescGZIP(), []int{2}
|
||
}
|
||
|
||
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 ""
|
||
}
|
||
|
||
// 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[3]
|
||
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[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 GetAnswerJobRequest.ProtoReflect.Descriptor instead.
|
||
func (*GetAnswerJobRequest) Descriptor() ([]byte, []int) {
|
||
return file_ai_proto_rawDescGZIP(), []int{3}
|
||
}
|
||
|
||
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
|
||
unknownFields protoimpl.UnknownFields
|
||
sizeCache protoimpl.SizeCache
|
||
}
|
||
|
||
func (x *AnswerJobResponse) Reset() {
|
||
*x = AnswerJobResponse{}
|
||
mi := &file_ai_proto_msgTypes[4]
|
||
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[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 AnswerJobResponse.ProtoReflect.Descriptor instead.
|
||
func (*AnswerJobResponse) Descriptor() ([]byte, []int) {
|
||
return file_ai_proto_rawDescGZIP(), []int{4}
|
||
}
|
||
|
||
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
|
||
}
|
||
|
||
// 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[5]
|
||
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[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 CreateSessionRequest.ProtoReflect.Descriptor instead.
|
||
func (*CreateSessionRequest) Descriptor() ([]byte, []int) {
|
||
return file_ai_proto_rawDescGZIP(), []int{5}
|
||
}
|
||
|
||
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[6]
|
||
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[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 CreateSessionResponse.ProtoReflect.Descriptor instead.
|
||
func (*CreateSessionResponse) Descriptor() ([]byte, []int) {
|
||
return file_ai_proto_rawDescGZIP(), []int{6}
|
||
}
|
||
|
||
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[7]
|
||
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[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 AskInSessionRequest.ProtoReflect.Descriptor instead.
|
||
func (*AskInSessionRequest) Descriptor() ([]byte, []int) {
|
||
return file_ai_proto_rawDescGZIP(), []int{7}
|
||
}
|
||
|
||
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[8]
|
||
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[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 SessionStatusResponse.ProtoReflect.Descriptor instead.
|
||
func (*SessionStatusResponse) Descriptor() ([]byte, []int) {
|
||
return file_ai_proto_rawDescGZIP(), []int{8}
|
||
}
|
||
|
||
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[9]
|
||
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[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 StatelessMessage.ProtoReflect.Descriptor instead.
|
||
func (*StatelessMessage) Descriptor() ([]byte, []int) {
|
||
return file_ai_proto_rawDescGZIP(), []int{9}
|
||
}
|
||
|
||
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[10]
|
||
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[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 StatelessRequest.ProtoReflect.Descriptor instead.
|
||
func (*StatelessRequest) Descriptor() ([]byte, []int) {
|
||
return file_ai_proto_rawDescGZIP(), []int{10}
|
||
}
|
||
|
||
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[11]
|
||
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[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 HealthCheckRequest.ProtoReflect.Descriptor instead.
|
||
func (*HealthCheckRequest) Descriptor() ([]byte, []int) {
|
||
return file_ai_proto_rawDescGZIP(), []int{11}
|
||
}
|
||
|
||
// 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[12]
|
||
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[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 HealthCheckResponse.ProtoReflect.Descriptor instead.
|
||
func (*HealthCheckResponse) Descriptor() ([]byte, []int) {
|
||
return file_ai_proto_rawDescGZIP(), []int{12}
|
||
}
|
||
|
||
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[13]
|
||
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[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 AgentToolLoopOptions.ProtoReflect.Descriptor instead.
|
||
func (*AgentToolLoopOptions) Descriptor() ([]byte, []int) {
|
||
return file_ai_proto_rawDescGZIP(), []int{13}
|
||
}
|
||
|
||
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[14]
|
||
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[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 AgentResponseContract.ProtoReflect.Descriptor instead.
|
||
func (*AgentResponseContract) Descriptor() ([]byte, []int) {
|
||
return file_ai_proto_rawDescGZIP(), []int{14}
|
||
}
|
||
|
||
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[15]
|
||
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[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 AgentRequest.ProtoReflect.Descriptor instead.
|
||
func (*AgentRequest) Descriptor() ([]byte, []int) {
|
||
return file_ai_proto_rawDescGZIP(), []int{15}
|
||
}
|
||
|
||
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[16]
|
||
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[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 AgentUsage.ProtoReflect.Descriptor instead.
|
||
func (*AgentUsage) Descriptor() ([]byte, []int) {
|
||
return file_ai_proto_rawDescGZIP(), []int{16}
|
||
}
|
||
|
||
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[17]
|
||
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[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 AgentResponse.ProtoReflect.Descriptor instead.
|
||
func (*AgentResponse) Descriptor() ([]byte, []int) {
|
||
return file_ai_proto_rawDescGZIP(), []int{17}
|
||
}
|
||
|
||
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[18]
|
||
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[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 CancelAnswerJobRequest.ProtoReflect.Descriptor instead.
|
||
func (*CancelAnswerJobRequest) Descriptor() ([]byte, []int) {
|
||
return file_ai_proto_rawDescGZIP(), []int{18}
|
||
}
|
||
|
||
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[19]
|
||
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[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 CancelAnswerJobResponse.ProtoReflect.Descriptor instead.
|
||
func (*CancelAnswerJobResponse) Descriptor() ([]byte, []int) {
|
||
return file_ai_proto_rawDescGZIP(), []int{19}
|
||
}
|
||
|
||
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\x02\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\"M\n" +
|
||
"\x17AnswerGenerationOptions\x122\n" +
|
||
"\x15include_user_memories\x18\x01 \x01(\bR\x13includeUserMemories\"\xcb\x01\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\",\n" +
|
||
"\x13GetAnswerJobRequest\x12\x15\n" +
|
||
"\x06job_id\x18\x01 \x01(\tR\x05jobId\"\x8e\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\"\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*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\xfe\x03\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.AnswerJobResponseB,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, 3)
|
||
var file_ai_proto_msgTypes = make([]protoimpl.MessageInfo, 21)
|
||
var file_ai_proto_goTypes = []any{
|
||
(AnswerStatus)(0), // 0: ai.AnswerStatus
|
||
(AnswerJobState)(0), // 1: ai.AnswerJobState
|
||
(AgentOutputFormat)(0), // 2: ai.AgentOutputFormat
|
||
(*AIRequest)(nil), // 3: ai.AIRequest
|
||
(*AnswerGenerationOptions)(nil), // 4: ai.AnswerGenerationOptions
|
||
(*AIResponse)(nil), // 5: ai.AIResponse
|
||
(*GetAnswerJobRequest)(nil), // 6: ai.GetAnswerJobRequest
|
||
(*AnswerJobResponse)(nil), // 7: ai.AnswerJobResponse
|
||
(*CreateSessionRequest)(nil), // 8: ai.CreateSessionRequest
|
||
(*CreateSessionResponse)(nil), // 9: ai.CreateSessionResponse
|
||
(*AskInSessionRequest)(nil), // 10: ai.AskInSessionRequest
|
||
(*SessionStatusResponse)(nil), // 11: ai.SessionStatusResponse
|
||
(*StatelessMessage)(nil), // 12: ai.StatelessMessage
|
||
(*StatelessRequest)(nil), // 13: ai.StatelessRequest
|
||
(*HealthCheckRequest)(nil), // 14: ai.HealthCheckRequest
|
||
(*HealthCheckResponse)(nil), // 15: ai.HealthCheckResponse
|
||
(*AgentToolLoopOptions)(nil), // 16: ai.AgentToolLoopOptions
|
||
(*AgentResponseContract)(nil), // 17: ai.AgentResponseContract
|
||
(*AgentRequest)(nil), // 18: ai.AgentRequest
|
||
(*AgentUsage)(nil), // 19: ai.AgentUsage
|
||
(*AgentResponse)(nil), // 20: ai.AgentResponse
|
||
(*CancelAnswerJobRequest)(nil), // 21: ai.CancelAnswerJobRequest
|
||
(*CancelAnswerJobResponse)(nil), // 22: ai.CancelAnswerJobResponse
|
||
nil, // 23: ai.AgentRequest.MetadataEntry
|
||
}
|
||
var file_ai_proto_depIdxs = []int32{
|
||
4, // 0: ai.AIRequest.options:type_name -> ai.AnswerGenerationOptions
|
||
0, // 1: ai.AIResponse.status:type_name -> ai.AnswerStatus
|
||
1, // 2: ai.AnswerJobResponse.state:type_name -> ai.AnswerJobState
|
||
4, // 3: ai.AskInSessionRequest.options:type_name -> ai.AnswerGenerationOptions
|
||
12, // 4: ai.StatelessRequest.messages:type_name -> ai.StatelessMessage
|
||
2, // 5: ai.AgentResponseContract.format:type_name -> ai.AgentOutputFormat
|
||
12, // 6: ai.AgentRequest.messages:type_name -> ai.StatelessMessage
|
||
16, // 7: ai.AgentRequest.tool_loop:type_name -> ai.AgentToolLoopOptions
|
||
17, // 8: ai.AgentRequest.response_contract:type_name -> ai.AgentResponseContract
|
||
23, // 9: ai.AgentRequest.metadata:type_name -> ai.AgentRequest.MetadataEntry
|
||
0, // 10: ai.AgentResponse.status:type_name -> ai.AnswerStatus
|
||
19, // 11: ai.AgentResponse.usage:type_name -> ai.AgentUsage
|
||
1, // 12: ai.CancelAnswerJobResponse.state:type_name -> ai.AnswerJobState
|
||
18, // 13: ai.AIService.RunAgent:input_type -> ai.AgentRequest
|
||
21, // 14: ai.AIService.CancelAnswerJob:input_type -> ai.CancelAnswerJobRequest
|
||
3, // 15: ai.AIService.GenerateAnswer:input_type -> ai.AIRequest
|
||
13, // 16: ai.AIService.GenerateStateless:input_type -> ai.StatelessRequest
|
||
14, // 17: ai.AIService.HealthCheck:input_type -> ai.HealthCheckRequest
|
||
8, // 18: ai.AIService.CreateSession:input_type -> ai.CreateSessionRequest
|
||
10, // 19: ai.AIService.AskInSession:input_type -> ai.AskInSessionRequest
|
||
6, // 20: ai.AIService.GetAnswerJob:input_type -> ai.GetAnswerJobRequest
|
||
20, // 21: ai.AIService.RunAgent:output_type -> ai.AgentResponse
|
||
22, // 22: ai.AIService.CancelAnswerJob:output_type -> ai.CancelAnswerJobResponse
|
||
5, // 23: ai.AIService.GenerateAnswer:output_type -> ai.AIResponse
|
||
5, // 24: ai.AIService.GenerateStateless:output_type -> ai.AIResponse
|
||
15, // 25: ai.AIService.HealthCheck:output_type -> ai.HealthCheckResponse
|
||
9, // 26: ai.AIService.CreateSession:output_type -> ai.CreateSessionResponse
|
||
11, // 27: ai.AIService.AskInSession:output_type -> ai.SessionStatusResponse
|
||
7, // 28: ai.AIService.GetAnswerJob:output_type -> ai.AnswerJobResponse
|
||
21, // [21:29] is the sub-list for method output_type
|
||
13, // [13:21] is the sub-list for method input_type
|
||
13, // [13:13] is the sub-list for extension type_name
|
||
13, // [13:13] is the sub-list for extension extendee
|
||
0, // [0:13] 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: 3,
|
||
NumMessages: 21,
|
||
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
|
||
}
|