AgentEntities.xml 4.12 KB
<?xml version="1.0" encoding="UTF-8"?>
<entities xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:noNamespaceSchemaLocation="http://moqui.org/xsd/entity-definition-3.xsd">

    <!-- ========================================================= -->
    <!-- System Message Extensions for Agent Tasks -->
    <!-- ========================================================= -->

    <extend-entity entity-name="SystemMessage" package="moqui.service.message">
        <field name="requestedByPartyId" type="id">
            <description>The human user (Party) who requested this agent task.</description>
        </field>
        <field name="effectiveUserId" type="id">
            <description>The UserAccount ID to impersonate during execution (RBAC context).</description>
        </field>
        <field name="productStoreId" type="id">
            <description>The context ProductStore for this task (determines AI config).</description>
        </field>
        <field name="aiConfigId" type="id">
            <description>Specific AI configuration used for this task.</description>
        </field>

        <relationship type="one" title="RequestedBy" related="mantle.party.Party">
            <key-map field-name="requestedByPartyId" related="partyId"/>
        </relationship>
        <!-- Note: effectiveUserId links to UserAccount, but we don't force FK to allow system users -->
        <relationship type="one" related="mantle.product.store.ProductStore">
            <key-map field-name="productStoreId"/>
        </relationship>
        <relationship type="one" related="moqui.mcp.agent.ProductStoreAiConfig">
            <key-map field-name="productStoreId"/>
            <key-map field-name="aiConfigId"/>
        </relationship>
    </extend-entity>

    <!-- ========================================================= -->
    <!-- AI Gateway Configuration (Per Store) -->
    <!-- ========================================================= -->

    <entity entity-name="ProductStoreAiConfig" package="moqui.mcp.agent">
        <description>Configures AI Service Providers (OpenAI, VLLM, etc.) per Product Store.</description>
        
        <field name="productStoreId" type="id" is-pk="true"/>
        <field name="aiConfigId" type="id" is-pk="true"/>
        
        <field name="serviceTypeEnumId" type="id"/>
        <field name="description" type="text-medium"/>
        
        <!-- Connection Details -->
        <field name="endpointUrl" type="text-medium"/>
        <field name="apiKey" type="text-medium" encrypt="true"/>
        <field name="organizationId" type="text-short"/>
        
        <!-- Model Parameters -->
        <field name="modelName" type="text-short"/>
        <field name="temperature" type="number-decimal"/>
        <field name="maxTokens" type="number-integer"/>
        
        <!-- System Prompt Template -->
        <field name="systemMessageId" type="id">
             <description>Template for the system prompt (instruction set)</description>
        </field>

        <relationship type="one" related="mantle.product.store.ProductStore">
            <key-map field-name="productStoreId"/>
        </relationship>
        <relationship type="one" title="AiServiceType" related="moqui.basic.Enumeration">
            <key-map field-name="serviceTypeEnumId" related="enumId"/>
        </relationship>
        <relationship type="one" title="PromptTemplate" related="moqui.service.message.SystemMessage">
            <key-map field-name="systemMessageId"/>
        </relationship>
        
        <seed-data>
            <!-- AI Service Types -->
            <moqui.basic.EnumerationType description="AI Service Type" enumTypeId="AiServiceType"/>
            <moqui.basic.Enumeration enumId="AistOpenAi" description="OpenAI" enumTypeId="AiServiceType"/>
            <moqui.basic.Enumeration enumId="AistVllm" description="VLLM (OpenAI Compatible)" enumTypeId="AiServiceType"/>
            <moqui.basic.Enumeration enumId="AistAnthropic" description="Anthropic" enumTypeId="AiServiceType"/>
            <moqui.basic.Enumeration enumId="AistOllama" description="Ollama" enumTypeId="AiServiceType"/>
        </seed-data>
    </entity>

</entities>