Class: LanguageOperator::Kubernetes::ResourceBuilder
- Inherits:
-
Object
- Object
- LanguageOperator::Kubernetes::ResourceBuilder
- Defined in:
- lib/language_operator/kubernetes/resource_builder.rb
Overview
Builds Kubernetes resource manifests for language-operator
Class Method Summary collapse
-
.agent_service(agent_name, namespace: nil, port: 8080, labels: {}) ⇒ Hash
Build a Kubernetes Service resource for a reactive agent.
-
.build_persona(name:, spec:, namespace: nil, cluster_ref: nil, labels: {}, k8s_client: nil) ⇒ Object
Build a LanguagePersona resource with full spec control.
-
.language_agent(name, instructions:, cluster: nil, cluster_ref: nil, schedule: nil, persona: nil, tools: [], models: [], mode: nil, workspace: true, labels: {}, k8s_client: nil) ⇒ Object
Build a LanguageAgent resource.
-
.language_cluster(name, namespace: nil, domain: nil, labels: {}, k8s_client: nil) ⇒ Object
Build a LanguageCluster resource.
-
.language_model(name, provider:, model:, endpoint: nil, cluster: nil, cluster_ref: nil, labels: {}, k8s_client: nil) ⇒ Object
Build a LanguageModel resource.
-
.language_persona(name, description:, tone:, system_prompt:, cluster: nil, cluster_ref: nil, labels: {}, k8s_client: nil) ⇒ Object
Build a LanguagePersona resource.
-
.language_tool(name, type:, config: {}, cluster: nil, cluster_ref: nil, labels: {}, k8s_client: nil) ⇒ Object
Build a LanguageTool resource.
Class Method Details
.agent_service(agent_name, namespace: nil, port: 8080, labels: {}) ⇒ Hash
Build a Kubernetes Service resource for a reactive agent
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
# File 'lib/language_operator/kubernetes/resource_builder.rb', line 87 def agent_service(agent_name, namespace: nil, port: 8080, labels: {}) { 'apiVersion' => 'v1', 'kind' => 'Service', 'metadata' => { 'name' => agent_name, 'namespace' => namespace || 'default', 'labels' => default_labels.merge( Constants::KubernetesLabels.agent_labels(agent_name) ).merge(labels) }, 'spec' => { 'type' => 'ClusterIP', 'selector' => Constants::KubernetesLabels.agent_labels(agent_name).slice( Constants::KubernetesLabels::NAME, Constants::KubernetesLabels::COMPONENT ), 'ports' => [ { 'name' => 'http', 'protocol' => 'TCP', 'port' => port, 'targetPort' => port } ] } } end |
.build_persona(name:, spec:, namespace: nil, cluster_ref: nil, labels: {}, k8s_client: nil) ⇒ Object
Build a LanguagePersona resource with full spec control
76 77 78 |
# File 'lib/language_operator/kubernetes/resource_builder.rb', line 76 def build_persona(name:, spec:, namespace: nil, cluster_ref: nil, labels: {}, k8s_client: nil) build_resource('LanguagePersona', name, spec, namespace: namespace, cluster_ref: cluster_ref, labels: labels, k8s_client: k8s_client) end |
.language_agent(name, instructions:, cluster: nil, cluster_ref: nil, schedule: nil, persona: nil, tools: [], models: [], mode: nil, workspace: true, labels: {}, k8s_client: nil) ⇒ Object
Build a LanguageAgent resource
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/language_operator/kubernetes/resource_builder.rb', line 23 def language_agent(name, instructions:, cluster: nil, cluster_ref: nil, schedule: nil, persona: nil, tools: [], models: [], mode: nil, workspace: true, labels: {}, k8s_client: nil) # Determine mode: reactive, scheduled, or autonomous spec_mode = mode || (schedule ? 'scheduled' : 'autonomous') spec = { 'instructions' => instructions, 'executionMode' => spec_mode, 'image' => 'ghcr.io/language-operator/agent:latest' } spec['schedule'] = schedule if schedule spec['persona'] = persona if persona # Convert tool names to toolRef objects spec['toolRefs'] = tools.map { |t| { 'name' => t } } unless tools.empty? # Convert model names to modelRef objects spec['modelRefs'] = models.map { |m| { 'name' => m } } unless models.empty? # Enable workspace by default for state persistence spec['workspace'] = { 'enabled' => workspace } if workspace build_resource('LanguageAgent', name, spec, namespace: cluster, cluster_ref: cluster_ref, labels: labels, k8s_client: k8s_client) end |
.language_cluster(name, namespace: nil, domain: nil, labels: {}, k8s_client: nil) ⇒ Object
Build a LanguageCluster resource
11 12 13 14 15 16 17 18 19 20 |
# File 'lib/language_operator/kubernetes/resource_builder.rb', line 11 def language_cluster(name, namespace: nil, domain: nil, labels: {}, k8s_client: nil) spec = { 'namespace' => namespace || name, 'resourceQuota' => default_resource_quota, 'networkPolicy' => default_network_policy } spec['domain'] = domain if domain && !domain.empty? build_resource('LanguageCluster', name, spec, namespace: namespace, labels: labels, k8s_client: k8s_client) end |
.language_model(name, provider:, model:, endpoint: nil, cluster: nil, cluster_ref: nil, labels: {}, k8s_client: nil) ⇒ Object
Build a LanguageModel resource
55 56 57 58 59 60 61 62 63 |
# File 'lib/language_operator/kubernetes/resource_builder.rb', line 55 def language_model(name, provider:, model:, endpoint: nil, cluster: nil, cluster_ref: nil, labels: {}, k8s_client: nil) spec = { 'provider' => provider, 'modelName' => model } spec['endpoint'] = endpoint if endpoint build_resource('LanguageModel', name, spec, namespace: cluster, cluster_ref: cluster_ref, labels: labels, k8s_client: k8s_client) end |
.language_persona(name, description:, tone:, system_prompt:, cluster: nil, cluster_ref: nil, labels: {}, k8s_client: nil) ⇒ Object
Build a LanguagePersona resource
66 67 68 69 70 71 72 73 |
# File 'lib/language_operator/kubernetes/resource_builder.rb', line 66 def language_persona(name, description:, tone:, system_prompt:, cluster: nil, cluster_ref: nil, labels: {}, k8s_client: nil) build_resource('LanguagePersona', name, { 'displayName' => name.split('-').map(&:capitalize).join(' '), 'description' => description, 'tone' => tone, 'systemPrompt' => system_prompt }, namespace: cluster, cluster_ref: cluster_ref, labels: labels, k8s_client: k8s_client) end |
.language_tool(name, type:, config: {}, cluster: nil, cluster_ref: nil, labels: {}, k8s_client: nil) ⇒ Object
Build a LanguageTool resource
47 48 49 50 51 52 |
# File 'lib/language_operator/kubernetes/resource_builder.rb', line 47 def language_tool(name, type:, config: {}, cluster: nil, cluster_ref: nil, labels: {}, k8s_client: nil) build_resource('LanguageTool', name, { 'type' => type, 'config' => config }, namespace: cluster, cluster_ref: cluster_ref, labels: labels, k8s_client: k8s_client) end |