diff --git a/.env.example b/.env.example index bda7ddb..b57f1ed 100644 --- a/.env.example +++ b/.env.example @@ -105,7 +105,6 @@ SECRET_MANAGER_SECRET_KEY=REPLACE_ME_OPENSSL_SECRET_MANAGER FUNCTION_CALLING_ENABLED=false # Supported providers: gemini, local FUNCTION_CALLING_PROVIDER=gemini -FUNCTION_CALLING_SYSTEM_INSTRUCTION_FILE=./prompts/function-calling-system-instruction.md FUNCTION_CALLING_GEMINI_API_KEY=local-development-placeholder-key FUNCTION_CALLING_GEMINI_MODEL=gemini-2.5-flash FUNCTION_CALLING_GEMINI_TIMEOUT=30s @@ -127,7 +126,6 @@ FUNCTION_CALLING_LOCAL_MAX_OUTPUT_TOKENS=2048 WORKFLOWS_GENERATION_ENABLED=false # Supported providers: gemini, local WORKFLOWS_GENERATION_PROVIDER=gemini -WORKFLOWS_GENERATION_SYSTEM_INSTRUCTION_FILE=./prompts/workflow-generation-system-instruction.md WORKFLOWS_GENERATION_GEMINI_API_KEY=local-development-placeholder-key WORKFLOWS_GENERATION_GEMINI_MODEL=gemini-2.5-flash WORKFLOWS_GENERATION_GEMINI_TIMEOUT=60s diff --git a/apps/file-gateway-api/go.mod b/apps/file-gateway-api/go.mod index 490966e..1bffce4 100644 --- a/apps/file-gateway-api/go.mod +++ b/apps/file-gateway-api/go.mod @@ -3,25 +3,25 @@ module github.com/blocknextai/file-gateway-api go 1.27.0 require ( - github.com/aws/aws-sdk-go-v2 v1.43.7 - github.com/aws/aws-sdk-go-v2/credentials v1.19.37 - github.com/aws/aws-sdk-go-v2/service/s3 v1.107.3 + github.com/aws/aws-sdk-go-v2 v1.45.1 + github.com/aws/aws-sdk-go-v2/credentials v1.20.1 + github.com/aws/aws-sdk-go-v2/service/s3 v1.109.1 github.com/blocknextai/go-packages v0.0.0 github.com/caarlos0/env/v11 v11.4.1 github.com/gofiber/fiber/v3 v3.5.0 ) require ( - github.com/andybalholm/brotli v1.2.2 // indirect - github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.18 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.38 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.38 // indirect - github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.39 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.17 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.31 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.38 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.39 // indirect - github.com/aws/smithy-go v1.27.10 // indirect + github.com/andybalholm/brotli v1.2.3 // indirect + github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.20 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.5.1 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.8.1 // indirect + github.com/aws/aws-sdk-go-v2/internal/v4a v1.5.1 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.19 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.11.1 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.14.1 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.20.1 // indirect + github.com/aws/smithy-go v1.28.1 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/gabriel-vasile/mimetype v1.4.15 // indirect github.com/gofiber/schema v1.8.4 // indirect diff --git a/apps/file-gateway-api/go.sum b/apps/file-gateway-api/go.sum index 7acadf6..689f3b4 100644 --- a/apps/file-gateway-api/go.sum +++ b/apps/file-gateway-api/go.sum @@ -1,29 +1,29 @@ -github.com/andybalholm/brotli v1.2.2 h1:HzTuoo2ErYQqf5qvcJInB8uvqSVxRttzkFexPWtnceM= -github.com/andybalholm/brotli v1.2.2/go.mod h1:rzTDkvFWvIrjDXZHkuS16NPggd91W3kUSvPlQ1pLaKY= -github.com/aws/aws-sdk-go-v2 v1.43.7 h1:msCzvkeYJA9ehbV8mRRmkZLo/zJg/+yDVLNtflg83hQ= -github.com/aws/aws-sdk-go-v2 v1.43.7/go.mod h1:tXpPM+v0D1lndmga+HqqLDIzUFJlEeR21aspVklHF00= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.18 h1:LAfOuhAH331fmOjTQpAaOlH+Ftn7RzSDJ2VFwjdMMy4= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.18/go.mod h1:4e5xhuXHx1e4U9EthvbPP1r/DIMp5c2823OL8karzcM= -github.com/aws/aws-sdk-go-v2/credentials v1.19.37 h1:FJ8Iz4/xISMB/rwLlgfWujfGDFWr0oneQgtA6KPcYLY= -github.com/aws/aws-sdk-go-v2/credentials v1.19.37/go.mod h1:Q6pWOgVUp49x4g5QVi29wHofUoICnZ+Zq4jHbRN/7ec= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.38 h1:MBMg0zJ6i4TkAJ0dVFLKKn2cOkY6FkicmUDM67BRr6g= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.38/go.mod h1:9MWuJbyiUyj6eA7W1/zm1zuePDPSB3g+xcgRQeMWsXc= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.38 h1:lHm4jPf3k1Lz5ZWc+Vcn3MKVwym+26kWCba9FkJ4f0Y= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.38/go.mod h1:Rn+P2XR+FbyZzjmWKjg/KUZNxmGfr5oZwh5jQiE+CzI= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.39 h1:vo4xvMRs/F6h1E52qsgLqCQgWIQXgIJUauG6rlZEh4U= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.39/go.mod h1:jB03R1ij/A+OE2e1dz6vgj076gd7vlYcfstAzj3HcnU= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.17 h1:OvYZOB3qA6zvfdRFiRFRzVSiElMYrz3GdntkXZxlp1o= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.17/go.mod h1:JgR/2Ew50ACfIWau1oeMRX59tMtC0kM+PYQGEaT04cY= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.31 h1:uZOinZb+h7lZw8IYzP1z1IuEnueB76/EFkcf/fEW4Ag= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.31/go.mod h1:NRtwAM/p5VRt03TlEUs0pH3TeWamWdf4YyJpSrzPYLc= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.38 h1:H/5TI1jqaHsNoDQ60UwvPvJBg4GURkinXI3Qga29t2w= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.38/go.mod h1:PTVFf+XH++7NJOky+RLBYQx0QA5NcaeEYFQ2fsi0nwo= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.39 h1:HLPAVrlLDaN2boN0xJx7MgaQDNEO3Q+c9L6kl/8m47Q= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.39/go.mod h1:Pg/dVfsNkm1hsIDK/gMvCKtmyNfNTV12mrgHqVE/6Oo= -github.com/aws/aws-sdk-go-v2/service/s3 v1.107.3 h1:IKoCZqfWfZzSBi16QFQ+QcbQ3LRQ7QgB1S5tDAyPBQQ= -github.com/aws/aws-sdk-go-v2/service/s3 v1.107.3/go.mod h1:RBpRcXiM4s2pOInVs32GsBonnje+fiAj4mcrStRmlCA= -github.com/aws/smithy-go v1.27.10 h1:bw56MIx8bhTQZSdzucEJSKWLpwX0ju7hU8cVoa75dg8= -github.com/aws/smithy-go v1.27.10/go.mod h1:YE2RhdIuDbA5E5bTdciG9KrW3+TiEONeUWCqxX9i1Fc= +github.com/andybalholm/brotli v1.2.3 h1:8H1qwOkl2LPfjf3YezB90JnCliZb6SInJ/OJkEbA5NQ= +github.com/andybalholm/brotli v1.2.3/go.mod h1:rzTDkvFWvIrjDXZHkuS16NPggd91W3kUSvPlQ1pLaKY= +github.com/aws/aws-sdk-go-v2 v1.45.1 h1:iIoG3NaLhV6UZpPXyPXlDj2I9oS8tV/nMcMnITCC6Ks= +github.com/aws/aws-sdk-go-v2 v1.45.1/go.mod h1:bttEH6JqnUL8LepvDVfdrds/fZ5bCIxzpe3abyUrhDU= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.20 h1:GPRlPwz40I2B2VrBEASOA3Bi77NyeqejNLkifosX0rs= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.20/go.mod h1:g7PNzKcsOKWb4fkSRBA7BZVAS6Y8IcxzN+nRohhQ1Q8= +github.com/aws/aws-sdk-go-v2/credentials v1.20.1 h1:Z8GRNEx0u9sDkZOq4PUnN8mjGwbUQGRzMSXpvt3d8xQ= +github.com/aws/aws-sdk-go-v2/credentials v1.20.1/go.mod h1:uBIK00kFo95dnemqfFMTWx0X8YRqsh6ecIoCjjOkZqM= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.5.1 h1:pc138gM1CW+XPc60rEwUlwwuwWFQK16CI1T7v1F9Oec= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.5.1/go.mod h1:1+koxpPIbfBdfzP6vojm5/zTpTQ/micYwlxIiNB3TxI= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.8.1 h1:K0JsbZQj+1h208Ro1zHeA4l7bMp0NvRffHQ91q8Ol1s= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.8.1/go.mod h1:W3/vL6EtCIatICGy9ab29QhMuae+cOKPWcMxv02CO+Q= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.5.1 h1:yhw5KD1phVyP9vijxOUzDfEtJx+bt+L63k+VfuiYFAA= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.5.1/go.mod h1:ZW2e0d7DYlRxlS9hEiMXE47gTdX5KRN4byUiNbUpG+Q= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.19 h1:bAdDl/HkGCcGPoe25ToSHEw23VIxt6CT5fLcg111BKg= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.19/go.mod h1:KaUzbLxv4CeSxh6ZCl9B4m7CuFenS8kUEaDs+f/DQr4= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.11.1 h1:s67hBfG5t9rn1NCvDuB4E3QIep3UFhHPtaIqFDjV3N8= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.11.1/go.mod h1:FpvjBMXtSNMLPmDJsWwcY5cRnqJlpS2y1R6n4pvzs4k= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.14.1 h1:RmmWQPREQdk9U+PfqeHW3MqZaBaNK7TpV9W3RY+b+7g= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.14.1/go.mod h1:0A3W4F+68ZnNk5XcNL/e9HFMwnP8RlEicFfy6eOEDyw= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.20.1 h1:ZMbtPZZQRca+3+XYQne9PBvRiYpHZlNJJOZfE9WNfT0= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.20.1/go.mod h1:YAGWQdCYlVCoqrzvfv3RLxO6zKwti7gsAULOGWPLYv4= +github.com/aws/aws-sdk-go-v2/service/s3 v1.109.1 h1:kVpzaDBzOdRtOftmiSpTdQbWVqRg0kONLXijktiwXnk= +github.com/aws/aws-sdk-go-v2/service/s3 v1.109.1/go.mod h1:CUr46sCpGAg/rHaclRyhJX0LJAmH73uWSJPPSaMUrSk= +github.com/aws/smithy-go v1.28.1 h1:R/nXH00c8qcfCzQVELtRw+eLQWtzv+VAIEFJ1/xxXlQ= +github.com/aws/smithy-go v1.28.1/go.mod h1:YE2RhdIuDbA5E5bTdciG9KrW3+TiEONeUWCqxX9i1Fc= github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c= github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA= diff --git a/apps/platform-api/go.mod b/apps/platform-api/go.mod index d2ad2ec..d2413ab 100644 --- a/apps/platform-api/go.mod +++ b/apps/platform-api/go.mod @@ -19,7 +19,7 @@ require ( ) require ( - github.com/andybalholm/brotli v1.2.2 // indirect + github.com/andybalholm/brotli v1.2.3 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/dlclark/regexp2 v1.12.0 // indirect github.com/fasthttp/websocket v1.5.12 // indirect diff --git a/apps/platform-api/go.sum b/apps/platform-api/go.sum index 068c882..334880f 100644 --- a/apps/platform-api/go.sum +++ b/apps/platform-api/go.sum @@ -2,8 +2,8 @@ github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25 github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= -github.com/andybalholm/brotli v1.2.2 h1:HzTuoo2ErYQqf5qvcJInB8uvqSVxRttzkFexPWtnceM= -github.com/andybalholm/brotli v1.2.2/go.mod h1:rzTDkvFWvIrjDXZHkuS16NPggd91W3kUSvPlQ1pLaKY= +github.com/andybalholm/brotli v1.2.3 h1:8H1qwOkl2LPfjf3YezB90JnCliZb6SInJ/OJkEbA5NQ= +github.com/andybalholm/brotli v1.2.3/go.mod h1:rzTDkvFWvIrjDXZHkuS16NPggd91W3kUSvPlQ1pLaKY= github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c= github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA= diff --git a/apps/platform-api/internal/config/function_calling.go b/apps/platform-api/internal/config/function_calling.go index 42d7b06..92f0b6f 100644 --- a/apps/platform-api/internal/config/function_calling.go +++ b/apps/platform-api/internal/config/function_calling.go @@ -12,10 +12,9 @@ const ( ) type FunctionCallingOptions struct { - Enabled bool `env:"ENABLED"` - Provider FunctionCallingProvider `env:"PROVIDER"` - SystemInstructionFile string `env:"SYSTEM_INSTRUCTION_FILE"` - SystemInstruction string `env:"-"` + Enabled bool `env:"ENABLED"` + Provider FunctionCallingProvider `env:"PROVIDER"` + SystemInstruction string `env:"-"` Gemini GeminiFunctionCallingOptions `envPrefix:"GEMINI_"` LocalLLM LocalLLMFunctionCallingOptions `envPrefix:"LOCAL_"` diff --git a/apps/platform-api/internal/config/shared.go b/apps/platform-api/internal/config/shared.go index 4d40801..132d460 100644 --- a/apps/platform-api/internal/config/shared.go +++ b/apps/platform-api/internal/config/shared.go @@ -1,8 +1,7 @@ package config import ( - "os" - + "github.com/blocknextai/platform-api/internal/prompts" "github.com/caarlos0/env/v11" ) @@ -33,29 +32,8 @@ func LoadShared() (*SharedConfig, error) { return nil, err } - if cfg.FunctionCalling.SystemInstructionFile != "" { - instruction, err := readFile(cfg.FunctionCalling.SystemInstructionFile) - if err != nil { - return nil, err - } - cfg.FunctionCalling.SystemInstruction = instruction - } - - if cfg.Workflows.Generation.SystemInstructionFile != "" { - instruction, err := readFile(cfg.Workflows.Generation.SystemInstructionFile) - if err != nil { - return nil, err - } - cfg.Workflows.Generation.SystemInstruction = instruction - } + cfg.FunctionCalling.SystemInstruction = prompts.FunctionCallingSystemInstruction + cfg.Workflows.Generation.SystemInstruction = prompts.WorkflowGenerationSystemInstruction return cfg, nil } - -func readFile(path string) (string, error) { - content, err := os.ReadFile(path) - if err != nil { - return "", err - } - return string(content), nil -} diff --git a/apps/platform-api/internal/config/workflows.go b/apps/platform-api/internal/config/workflows.go index 79a65fb..bd39d86 100644 --- a/apps/platform-api/internal/config/workflows.go +++ b/apps/platform-api/internal/config/workflows.go @@ -16,12 +16,11 @@ const ( ) type WorkflowsGenerationOptions struct { - Enabled bool `env:"ENABLED"` - Provider WorkflowsGenerationProvider `env:"PROVIDER"` - SystemInstructionFile string `env:"SYSTEM_INSTRUCTION_FILE"` - SystemInstruction string `env:"-"` - Gemini WorkflowsGenerationGeminiOptions `envPrefix:"GEMINI_"` - LocalLLM WorkflowsGenerationLocalLLMOptions `envPrefix:"LOCAL_"` + Enabled bool `env:"ENABLED"` + Provider WorkflowsGenerationProvider `env:"PROVIDER"` + SystemInstruction string `env:"-"` + Gemini WorkflowsGenerationGeminiOptions `envPrefix:"GEMINI_"` + LocalLLM WorkflowsGenerationLocalLLMOptions `envPrefix:"LOCAL_"` } type WorkflowsGenerationGeminiOptions struct { diff --git a/apps/platform-api/prompts/function-calling-system-instruction.md b/apps/platform-api/internal/prompts/function_calling_system_instruction.md similarity index 100% rename from apps/platform-api/prompts/function-calling-system-instruction.md rename to apps/platform-api/internal/prompts/function_calling_system_instruction.md diff --git a/apps/platform-api/internal/prompts/prompts.go b/apps/platform-api/internal/prompts/prompts.go new file mode 100644 index 0000000..6538666 --- /dev/null +++ b/apps/platform-api/internal/prompts/prompts.go @@ -0,0 +1,9 @@ +package prompts + +import _ "embed" + +//go:embed function_calling_system_instruction.md +var FunctionCallingSystemInstruction string + +//go:embed workflow_generation_system_instruction.md +var WorkflowGenerationSystemInstruction string diff --git a/apps/platform-api/prompts/workflow-generation-system-instruction.md b/apps/platform-api/internal/prompts/workflow_generation_system_instruction.md similarity index 100% rename from apps/platform-api/prompts/workflow-generation-system-instruction.md rename to apps/platform-api/internal/prompts/workflow_generation_system_instruction.md diff --git a/apps/platform-api/internal/taskrunner/README.md b/apps/platform-api/internal/taskrunner/README.md index fa88719..e5c38e6 100644 --- a/apps/platform-api/internal/taskrunner/README.md +++ b/apps/platform-api/internal/taskrunner/README.md @@ -31,7 +31,7 @@ When function calling is enabled (`FUNCTION_CALLING_ENABLED`) and a node carries | # | Layer | Source | Sent as | | - | - | - | - | -| 1 | **System instruction** | `FUNCTION_CALLING_SYSTEM_INSTRUCTION_FILE` (platform-owned, loaded once; Gemini provider serves it from content cache) | LLM `systemInstruction` role | +| 1 | **System instruction** | platform-owned, embedded from `internal/prompts` and loaded once; Gemini provider serves it from content cache | LLM `systemInstruction` role | | 2 | **Node instruction** (`instruction`) | Authored on the node at design time in the flow editor | `NODE INSTRUCTION:` block in the user turn | | 3 | **Runtime instruction** (`runtimeInstruction`) | Supplied per node at run time (trigger `RuntimeConfig.Nodes` overlay) | `RUNTIME INSTRUCTION:` block in the user turn | | 4 | **Runtime prompt** (`runtimePrompt`) | The trigger's free-text prompt (`RuntimeConfig.RuntimePrompt`; also feeds `TriggerContext` for `$trigger.*` references) | `RUNTIME PROMPT (reference only):` block in the user turn | diff --git a/apps/platform-api/internal/workflows/README.md b/apps/platform-api/internal/workflows/README.md index c060556..ea105dd 100644 --- a/apps/platform-api/internal/workflows/README.md +++ b/apps/platform-api/internal/workflows/README.md @@ -39,7 +39,7 @@ This context is the system of record for workflow definitions scoped to an organ Workflows can be authored by chat: the generation feature (env-gated via `WORKFLOWS_GENERATION_ENABLED`, provider `gemini` or `local` selected by `WORKFLOWS_GENERATION_PROVIDER`) turns a conversation into canvas JSON. - **Session replay** — `chat.ChatService.SendMessage` persists the user message, then replays the session's full message history (both roles) to the LLM, so the model iterates on its own prior workflow drafts across turns. -- **Live catalog injection** — the system instruction is a platform-owned markdown file (`WORKFLOWS_GENERATION_SYSTEM_INSTRUCTION_FILE`) with three placeholders — `{AVAILABLE_NODES_JSON}`, `{AVAILABLE_CREDENTIALS_JSON}`, `{AVAILABLE_TRIGGER_VARIABLES_JSON}` — filled at request time by context builders from the live nodeengine registries. The model can only compose nodes that actually exist in this deployment. +- **Live catalog injection** — the system instruction is a platform-owned markdown file (embedded from `internal/prompts`) with three placeholders — `{AVAILABLE_NODES_JSON}`, `{AVAILABLE_CREDENTIALS_JSON}`, `{AVAILABLE_TRIGGER_VARIABLES_JSON}` — filled at request time by context builders from the live nodeengine registries. The model can only compose nodes that actually exist in this deployment. - **Strict output contract** — the prompt pins the exact canvas shape: a single ` ```json:workflow ` block containing `{nodes, edges}` arrays, mandatory `system_starter` node first, edge/`$reference` parity checked per edge, and an explicit ban on emitting a `credentials` field (the runtime resolves credentials at execution). It also enforces a cost rule: prefer static `parameters` (zero-cost substitution) over `instruction` prose, since every instruction triggers a function-calling LLM call on each run. - **SSE streaming** — the presentation handler streams the reply as `text/event-stream` (`event: message` chunks, `event: done` / `event: error` terminators); the completed assistant reply is saved back to the session. - **Scope guard** — the system prompt restricts the assistant to workflow building only and refuses off-topic requests with a fixed sentence. diff --git a/docker/platform-api/api.Dockerfile b/docker/platform-api/api.Dockerfile index 5e7ac54..5fc29d6 100644 --- a/docker/platform-api/api.Dockerfile +++ b/docker/platform-api/api.Dockerfile @@ -35,7 +35,6 @@ ARG PORT=3000 WORKDIR /app COPY --from=build /build/app . -COPY --from=build /build/apps/platform-api/prompts ./prompts EXPOSE ${PORT} diff --git a/docker/platform-api/worker.Dockerfile b/docker/platform-api/worker.Dockerfile index 5ac2b30..2d8df91 100644 --- a/docker/platform-api/worker.Dockerfile +++ b/docker/platform-api/worker.Dockerfile @@ -34,7 +34,6 @@ ARG BINARY_NAME WORKDIR /app COPY --from=build /build/app . -COPY --from=build /build/apps/platform-api/prompts ./prompts USER nonroot diff --git a/go.work.sum b/go.work.sum index edb95ef..fe0633e 100644 --- a/go.work.sum +++ b/go.work.sum @@ -58,18 +58,18 @@ github.com/apache/thrift v0.16.0 h1:qEy6UW60iVOlUy+b9ZR0d5WzUWYGOo4HfopoyBaNmoY= github.com/apache/thrift v0.16.0/go.mod h1:PHK3hniurgQaNMZYaCLEqXKsYK8upmhPbmdP2FXSqgU= github.com/aws/aws-sdk-go v1.49.6 h1:yNldzF5kzLBRvKlKz1S0bkvc2+04R1kt13KfBWQBfFA= github.com/aws/aws-sdk-go v1.49.6/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.38 h1:Nqo2jU1wz5rnBM9XQyXfVD1RP8txkbP3EDx8hR/hbCE= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.38/go.mod h1:PzJFHhjR2vWFKHe8HmY5Lxhvwyxnr5MERtk0nDxWNbk= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.19.1 h1:YIEBqcqRnpi4Pfv0YHImtgi6czGCwKHANC7SwmUAVD0= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.19.1/go.mod h1:imEf0oufgAo8KAkCHhrOdqGEC0YWx1PPBQH82shSxGw= github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.11.33 h1:fAoVmNGhir6BR+RU0/EI+6+D7abM+MCwWf8v4ip5jNI= github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.11.33/go.mod h1:84XgODVR8uRhmOnUkKGUZKqIMxmjmLOR8Uyp7G/TPwc= -github.com/aws/aws-sdk-go-v2/service/signin v1.5.7 h1:YcczQ6zNH/ojIzD/ikDrO+RfW06wmdMp18d4NH5hXY4= -github.com/aws/aws-sdk-go-v2/service/signin v1.5.7/go.mod h1:nl9RVnb9ulgAYzOkjLq1NyFxmWcnH2maCUEuOdESy98= -github.com/aws/aws-sdk-go-v2/service/sso v1.33.7 h1:P+bMNiA93gyuYT3Oh+4dWtvrnGcu2bd9Uy5hRJM8BNo= -github.com/aws/aws-sdk-go-v2/service/sso v1.33.7/go.mod h1:zy+397isDFLvleg9H18Zq2MGzMso7uKyJyzR7DWSgFk= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.38.7 h1:WWkehGZ4nWtOKLMy0yi8+RqzzVqAGe60hGaxwF06JAw= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.38.7/go.mod h1:T8AI4SbQYm9ybcVmki2T3n7Qg1g3kfWoeQlNwNYOyO8= -github.com/aws/aws-sdk-go-v2/service/sts v1.45.7 h1:yU/9y2r7s9kSUPbHXbpQTa4LA8kt+CMgpu1OBrhx8p4= -github.com/aws/aws-sdk-go-v2/service/sts v1.45.7/go.mod h1:0lQTDEBArMevQXpxu443LVGjKxxEeSsSnrw9n8YiTMg= +github.com/aws/aws-sdk-go-v2/service/signin v1.7.1 h1:mdMtSVKdQ3+mzBh+l0ogrFYZVQUCg6pJZOirA2ARsYE= +github.com/aws/aws-sdk-go-v2/service/signin v1.7.1/go.mod h1:9IqUlsJDbUPcg6cgx3WEzXdjrbWzLDQrak0aaSqlTcI= +github.com/aws/aws-sdk-go-v2/service/sso v1.35.1 h1:B6WFn91tobD6gG4724ONHaqrpKsoETGnv98LHe/yIGM= +github.com/aws/aws-sdk-go-v2/service/sso v1.35.1/go.mod h1:tWuiVBUtPBr8/rgRiYS8Uf85sHcAN+G7XS3D3CEoUh8= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.40.1 h1:6yeYCWFvgbI2TI3K6jr9LtBNhXgJ7g4xqD+DEiaDDmM= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.40.1/go.mod h1:naFe83jSMuYkH+QjQPX8n1MLhBkeCFM5Lsnh5m5wz3c= +github.com/aws/aws-sdk-go-v2/service/sts v1.47.1 h1:Sv2xPnRHlThSUtVujYuUBPI/Il8si6UPHXL8DMiB/F0= +github.com/aws/aws-sdk-go-v2/service/sts v1.47.1/go.mod h1:mKo/CzaCz8qytGW70NG4vIIGAx1HXTlb5lHNkC5k3lk= github.com/cenkalti/backoff/v4 v4.1.2 h1:6Yo7N8UP2K6LWZnW94DLVSSrbobcWdVzAYOisuDPIFo= github.com/cenkalti/backoff/v4 v4.1.2/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58 h1:F1EaeKL/ta07PY/k9Os/UFtwERei2/XzGemhpGnBKNg= diff --git a/packages/go-packages/go.mod b/packages/go-packages/go.mod index ce63c3d..b3744f2 100644 --- a/packages/go-packages/go.mod +++ b/packages/go-packages/go.mod @@ -14,7 +14,7 @@ require ( ) require ( - github.com/andybalholm/brotli v1.2.2 // indirect + github.com/andybalholm/brotli v1.2.3 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/gofiber/schema v1.8.4 // indirect @@ -27,7 +27,7 @@ require ( github.com/philhofer/fwd v1.2.0 // indirect github.com/prometheus/client_model v0.6.2 // indirect github.com/prometheus/common v0.70.1 // indirect - github.com/prometheus/procfs v0.21.1 // indirect + github.com/prometheus/procfs v0.22.0 // indirect github.com/tinylib/msgp v1.6.4 // indirect github.com/valyala/bytebufferpool v1.0.0 // indirect github.com/valyala/fasthttp v1.73.0 // indirect diff --git a/packages/go-packages/go.sum b/packages/go-packages/go.sum index 6cad1a6..6bc4d69 100644 --- a/packages/go-packages/go.sum +++ b/packages/go-packages/go.sum @@ -1,5 +1,5 @@ -github.com/andybalholm/brotli v1.2.2 h1:HzTuoo2ErYQqf5qvcJInB8uvqSVxRttzkFexPWtnceM= -github.com/andybalholm/brotli v1.2.2/go.mod h1:rzTDkvFWvIrjDXZHkuS16NPggd91W3kUSvPlQ1pLaKY= +github.com/andybalholm/brotli v1.2.3 h1:8H1qwOkl2LPfjf3YezB90JnCliZb6SInJ/OJkEbA5NQ= +github.com/andybalholm/brotli v1.2.3/go.mod h1:rzTDkvFWvIrjDXZHkuS16NPggd91W3kUSvPlQ1pLaKY= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= @@ -46,8 +46,8 @@ github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNw github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= github.com/prometheus/common v0.70.1 h1:1HvjP4D5oL3t8RsPlwxA9onvvStjtIHYE5XuuwOi/PY= github.com/prometheus/common v0.70.1/go.mod h1:VdFUQDMZK3VLkurFUVhia6uys/0suUp86TJz5qbJRhc= -github.com/prometheus/procfs v0.21.1 h1:GljZCt+zSTS+NZq88cyQ1LjZ+RCHp3uVuabBWA5+OJI= -github.com/prometheus/procfs v0.21.1/go.mod h1:aB55Cww9pdSJVHk0hUf0inxWyyjPogFIjmHKYgMKmtY= +github.com/prometheus/procfs v0.22.0 h1:6q9+/JL9IKAPbCmBrv9n5O5Ty3NKnciV5X7YGw0oics= +github.com/prometheus/procfs v0.22.0/go.mod h1:CvmFr/GVhIjIvWJZW3tgkODBQMRIf0EyWMQLHCHab58= github.com/redis/go-redis/v9 v9.22.0 h1:laDvpYXTJtZLloinw1fA5Kqd6HAEH2XKxOkG/PDq2F0= github.com/redis/go-redis/v9 v9.22.0/go.mod h1:y2g0Wj8rQvuK0ELM+oxSudcLtC09JScs98I/X9gRWY4= github.com/shamaton/msgpack/v3 v3.2.0 h1:1q2Ms+MWmuRju+PuDMSFDB7p7621npeX4zprJN5Zck8=