You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Implement centralized LLM configuration via ~/.workflows/llm-config.yml with provider reuse and hierarchical parameter resolution.
- Add LLMConfigLoader for profile management with built-in defaults
- Update LLMCallInput to support profile field with backward compatibility
- Integrate LLMConfigLoader into ExecutionContext and AppContext
- Update schema.json to reflect new profile-based configuration
- Document profile-based configuration in README.md
- Add layer1 and agent tags to git-analyze-changes workflow
Profiles enable "right-sized" LLM selection similar to AWS instance types, supporting both cloud and local providers with inline parameter overrides.
Copy file name to clipboardExpand all lines: schema.json
+59-13Lines changed: 59 additions & 13 deletions
Original file line number
Diff line number
Diff line change
@@ -615,23 +615,47 @@
615
615
"additionalProperties": false,
616
616
"description": "Inputs for LLMCall block",
617
617
"properties": {
618
+
"profile": {
619
+
"anyOf": [
620
+
{
621
+
"type": "string"
622
+
},
623
+
{
624
+
"type": "null"
625
+
}
626
+
],
627
+
"default": null,
628
+
"description": "Profile name from ~/.workflows/llm-config.yml (e.g., 'cloud', 'local', 'default'). If specified, provider/model are loaded from config. Mutually exclusive with direct provider/model specification.",
629
+
"title": "Profile"
630
+
},
618
631
"provider": {
619
632
"anyOf": [
620
633
{
621
634
"$ref": "#/$defs/LLMProvider"
622
635
},
623
636
{
624
637
"type": "string"
638
+
},
639
+
{
640
+
"type": "null"
625
641
}
626
642
],
627
-
"default": "openai",
628
-
"description": "LLM provider (enum or interpolation string)",
643
+
"default": null,
644
+
"description": "LLM provider (enum or interpolation string). Required if profile not specified. Ignored if profile specified.",
629
645
"title": "Provider"
630
646
},
631
647
"model": {
632
-
"description": "Model name (e.g., gpt-4o, claude-3-5-sonnet-20241022, gemini-2.0-flash-exp)",
633
-
"title": "Model",
634
-
"type": "string"
648
+
"anyOf": [
649
+
{
650
+
"type": "string"
651
+
},
652
+
{
653
+
"type": "null"
654
+
}
655
+
],
656
+
"default": null,
657
+
"description": "Model name (e.g., gpt-4o, claude-3-5-sonnet-20241022, gemini-2.0-flash-exp). Required if profile not specified. Can override profile model if both specified.",
658
+
"title": "Model"
635
659
},
636
660
"prompt": {
637
661
"description": "User prompt to send to the LLM",
@@ -773,7 +797,6 @@
773
797
}
774
798
},
775
799
"required": [
776
-
"model",
777
800
"prompt"
778
801
],
779
802
"title": "LLMCallInput",
@@ -1357,25 +1380,49 @@
1357
1380
},
1358
1381
"LLMCallInput": {
1359
1382
"additionalProperties": false,
1360
-
"description": "Input model for LLMCall executor.\n\nAll inputs are pre-resolved by VariableResolver:\n- {{secrets.OPENAI_API_KEY}} \u2192 actual key value\n- {{inputs.prompt}} \u2192 actual prompt text\n- {{blocks.previous.outputs.data}} \u2192 actual data",
1383
+
"description": "Input model for LLMCall executor.\n\nAll inputs are pre-resolved by VariableResolver:\n- {{secrets.OPENAI_API_KEY}} \u2192 actual key value\n- {{inputs.prompt}} \u2192 actual prompt text\n- {{blocks.previous.outputs.data}} \u2192 actual data\n\nConfiguration Modes:\n1. Profile-based (NEW): Specify profile name, optionally override parameters\n2. Direct specification (backward compatible): Specify provider + model directly\n\nExamples:\n # Profile-based (recommended)\n profile: quick\n prompt: \"...\"\n\n # Profile with overrides\n profile: standard\n temperature: 1.0\n max_tokens: 8000\n prompt: \"...\"\n\n # Direct specification (backward compatible)\n provider: openai\n model: gpt-4o\n api_key: \"{{secrets.OPENAI_API_KEY}}\"\n prompt: \"...\"",
1361
1384
"properties": {
1385
+
"profile": {
1386
+
"anyOf": [
1387
+
{
1388
+
"type": "string"
1389
+
},
1390
+
{
1391
+
"type": "null"
1392
+
}
1393
+
],
1394
+
"default": null,
1395
+
"description": "Profile name from ~/.workflows/llm-config.yml (e.g., 'cloud', 'local', 'default'). If specified, provider/model are loaded from config. Mutually exclusive with direct provider/model specification.",
1396
+
"title": "Profile"
1397
+
},
1362
1398
"provider": {
1363
1399
"anyOf": [
1364
1400
{
1365
1401
"$ref": "#/$defs/LLMProvider"
1366
1402
},
1367
1403
{
1368
1404
"type": "string"
1405
+
},
1406
+
{
1407
+
"type": "null"
1369
1408
}
1370
1409
],
1371
-
"default": "openai",
1372
-
"description": "LLM provider (enum or interpolation string)",
1410
+
"default": null,
1411
+
"description": "LLM provider (enum or interpolation string). Required if profile not specified. Ignored if profile specified.",
1373
1412
"title": "Provider"
1374
1413
},
1375
1414
"model": {
1376
-
"description": "Model name (e.g., gpt-4o, claude-3-5-sonnet-20241022, gemini-2.0-flash-exp)",
1377
-
"title": "Model",
1378
-
"type": "string"
1415
+
"anyOf": [
1416
+
{
1417
+
"type": "string"
1418
+
},
1419
+
{
1420
+
"type": "null"
1421
+
}
1422
+
],
1423
+
"default": null,
1424
+
"description": "Model name (e.g., gpt-4o, claude-3-5-sonnet-20241022, gemini-2.0-flash-exp). Required if profile not specified. Can override profile model if both specified.",
0 commit comments