Files
Memoh/agent/src/models.ts
T

85 lines
3.0 KiB
TypeScript

import z from 'zod'
import { allActions } from './types'
export const AgentSkillModel = z.object({
name: z.string().min(1, 'Skill name is required'),
description: z.string().min(1, 'Skill description is required'),
content: z.string().min(1, 'Skill content is required'),
metadata: z.record(z.string(), z.any()).optional(),
})
export const ClientTypeModel = z.enum([
'openai', 'openai-compat', 'anthropic', 'google',
'azure', 'bedrock', 'mistral', 'xai', 'ollama', 'dashscope',
])
export const ModelConfigModel = z.object({
modelId: z.string().min(1, 'Model ID is required'),
clientType: ClientTypeModel,
input: z.array(z.enum(['text', 'image', 'audio', 'video', 'file'])),
apiKey: z.string().min(1, 'API key is required'),
baseUrl: z.string(),
})
export const AllowedActionModel = z.enum(allActions)
export const IdentityContextModel = z.object({
botId: z.string().min(1, 'Bot ID is required'),
containerId: z.string().min(1, 'Container ID is required'),
channelIdentityId: z.string().min(1, 'Channel identity ID is required'),
displayName: z.string().min(1, 'Display name is required'),
currentPlatform: z.string().optional(),
conversationType: z.string().optional(),
sessionToken: z.string().optional(),
})
export const ScheduleModel = z.object({
id: z.string().min(1, 'Schedule ID is required'),
name: z.string().min(1, 'Schedule name is required'),
description: z.string().min(1, 'Schedule description is required'),
pattern: z.string().min(1, 'Schedule pattern is required'),
maxCalls: z.number().nullable().optional(),
command: z.string().min(1, 'Schedule command is required'),
})
export const ImageAttachmentModel = z.object({
type: z.literal('image'),
base64: z.string().optional(),
path: z.string().optional(),
mime: z.string().optional(),
name: z.string().optional(),
metadata: z.record(z.string(), z.any()).optional(),
})
export const FileAttachmentModel = z.object({
type: z.literal('file'),
path: z.string().min(1, 'File path is required'),
metadata: z.record(z.string(), z.any()).optional(),
})
export const AttachmentModel = z.union([ImageAttachmentModel, FileAttachmentModel])
export const HTTPMCPConnectionModel = z.object({
name: z.string().min(1, 'Name is required'),
type: z.literal('http'),
url: z.string().min(1, 'URL is required'),
headers: z.record(z.string(), z.string()).optional(),
})
export const SSEMCPConnectionModel = z.object({
name: z.string().min(1, 'Name is required'),
type: z.literal('sse'),
url: z.string().min(1, 'URL is required'),
headers: z.record(z.string(), z.string()).optional(),
})
export const StdioMCPConnectionModel = z.object({
name: z.string().min(1, 'Name is required'),
type: z.literal('stdio'),
command: z.string().min(1, 'Command is required'),
args: z.array(z.string()),
env: z.record(z.string(), z.string()).optional(),
cwd: z.string().optional(),
})
export const MCPConnectionModel = z.union([HTTPMCPConnectionModel, SSEMCPConnectionModel, StdioMCPConnectionModel])