aura-lang 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.md +154 -0
- data/LICENSE +21 -0
- data/README.md +120 -0
- data/Rakefile +59 -0
- data/aura-lang.gemspec +29 -0
- data/bin/aura +151 -0
- data/examples/assistant.aura +12 -0
- data/examples/chatbot.aura +7 -0
- data/examples/hello.aura +10 -0
- data/examples/mnist_classifier.aura +36 -0
- data/examples/sentiment.aura +13 -0
- data/examples/transfer_api.aura +25 -0
- data/lib/aura/analyzer.rb +125 -0
- data/lib/aura/codegen.rb +636 -0
- data/lib/aura/diagnostics.rb +86 -0
- data/lib/aura/docker.rb +81 -0
- data/lib/aura/emitter.rb +61 -0
- data/lib/aura/parser.rb +208 -0
- data/lib/aura/transformer.rb +152 -0
- data/lib/aura/vercel.rb +88 -0
- data/lib/aura/version.rb +8 -0
- data/lib/aura.rb +125 -0
- metadata +158 -0
data/lib/aura/version.rb
ADDED
data/lib/aura.rb
ADDED
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Aura -- the declarative AI web framework. This file is the loader and public
|
|
4
|
+
# API surface; the compiler pipeline lives in the focused modules under
|
|
5
|
+
# lib/aura/ (parser -> transformer -> analyzer -> codegen).
|
|
6
|
+
|
|
7
|
+
require "json"
|
|
8
|
+
require "fileutils"
|
|
9
|
+
|
|
10
|
+
# Torch is only needed to *run* generated models. Transpilation, `check`, and
|
|
11
|
+
# `build` all work without it, so a missing install is not fatal here.
|
|
12
|
+
begin
|
|
13
|
+
require "torch"
|
|
14
|
+
rescue LoadError
|
|
15
|
+
nil
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
require_relative "aura/version"
|
|
19
|
+
require_relative "aura/diagnostics"
|
|
20
|
+
require_relative "aura/emitter"
|
|
21
|
+
require_relative "aura/parser"
|
|
22
|
+
require_relative "aura/transformer"
|
|
23
|
+
require_relative "aura/analyzer"
|
|
24
|
+
require_relative "aura/codegen"
|
|
25
|
+
require_relative "aura/docker"
|
|
26
|
+
require_relative "aura/vercel"
|
|
27
|
+
|
|
28
|
+
module Aura
|
|
29
|
+
# A small, fully-parseable starter app used by `aura init` and the
|
|
30
|
+
# "file not found" recovery path in `aura run`. Kept here so the CLI and the
|
|
31
|
+
# test-suite share a single source of truth.
|
|
32
|
+
STARTER_TEMPLATE = <<~AURA
|
|
33
|
+
environment production do
|
|
34
|
+
device :cpu
|
|
35
|
+
log_level :info
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
model greeter neural_network do
|
|
39
|
+
input text
|
|
40
|
+
output greeting "Hello from Aura!"
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
route "/hello" get do
|
|
44
|
+
output prediction from greeter.predict(input) format :json
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
run web on port: 3000
|
|
48
|
+
AURA
|
|
49
|
+
|
|
50
|
+
module_function
|
|
51
|
+
|
|
52
|
+
# Strip `#` comments before parsing -- both full-line and trailing/inline
|
|
53
|
+
# (e.g. `scheduler :step_lr # note`). A `#` inside a double-quoted string is
|
|
54
|
+
# left intact. Comment text is removed but newlines are preserved, so line
|
|
55
|
+
# numbers stay accurate for diagnostics. Also normalizes the source to UTF-8
|
|
56
|
+
# (examples may contain emoji, etc.).
|
|
57
|
+
def preprocess(source)
|
|
58
|
+
source.to_s.dup.force_encoding("UTF-8")
|
|
59
|
+
.each_line.map { |line| strip_comment(line) }.join
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# Remove a trailing `# ...` comment from a single line, ignoring any `#` that
|
|
63
|
+
# sits inside a double-quoted string. Backslash escapes are honored so a `\"`
|
|
64
|
+
# inside a string does not prematurely end it. A trailing newline (if present)
|
|
65
|
+
# is preserved so downstream line numbers do not shift.
|
|
66
|
+
def strip_comment(line)
|
|
67
|
+
in_string = false
|
|
68
|
+
escaped = false
|
|
69
|
+
line.each_char.with_index do |ch, i|
|
|
70
|
+
if escaped
|
|
71
|
+
escaped = false
|
|
72
|
+
elsif ch == "\\"
|
|
73
|
+
escaped = true
|
|
74
|
+
elsif ch == '"'
|
|
75
|
+
in_string = !in_string
|
|
76
|
+
elsif ch == "#" && !in_string
|
|
77
|
+
tail = line.end_with?("\n") ? "\n" : ""
|
|
78
|
+
return line[0...i].rstrip + tail
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
line
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
# Parse source into the raw Parslet tree, converting a Parslet failure into a
|
|
85
|
+
# friendly Aura::ParseError with line/column. Returns the raw tree so callers
|
|
86
|
+
# may run the Transformer themselves.
|
|
87
|
+
def parse(source)
|
|
88
|
+
clean = preprocess(source)
|
|
89
|
+
Parser.new.parse(clean)
|
|
90
|
+
rescue Parslet::ParseFailed => e
|
|
91
|
+
raise Diagnostics.from_parslet(e, clean)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
# Full front-end: parse -> transform -> semantic analysis. Returns the flat
|
|
95
|
+
# list of semantic node hashes.
|
|
96
|
+
def to_nodes(source)
|
|
97
|
+
tree = parse(source)
|
|
98
|
+
nodes = Transformer.new.apply(tree)
|
|
99
|
+
nodes = nodes.is_a?(Array) ? nodes : [nodes]
|
|
100
|
+
nodes = nodes.flatten.compact.select { |n| n.is_a?(Hash) }
|
|
101
|
+
Analyzer.analyze(nodes)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
# Transpile Aura source to a Ruby program (String).
|
|
105
|
+
def transpile(source)
|
|
106
|
+
CodeGen.generate(to_nodes(source))
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
# Transpile and execute a .aura file. Generated code uses classic Sinatra,
|
|
110
|
+
# which boots the server at exit.
|
|
111
|
+
def run_file(filename)
|
|
112
|
+
eval(transpile(File.read(filename)), TOPLEVEL_BINDING, filename) # rubocop:disable Security/Eval
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# Generate Docker deployment assets for a .aura file (backs `aura deploy`).
|
|
116
|
+
def build_docker(filename)
|
|
117
|
+
Docker.build(filename)
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
# Generate Vercel deployment assets for an LLM-only .aura file
|
|
121
|
+
# (backs `aura deploy <file> --target vercel`).
|
|
122
|
+
def build_vercel(filename)
|
|
123
|
+
Vercel.build(filename)
|
|
124
|
+
end
|
|
125
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: aura-lang
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 1.3.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- John V. Teixido
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2026-06-16 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: parslet
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - "~>"
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '2.0'
|
|
20
|
+
type: :runtime
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - "~>"
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '2.0'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: sinatra
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - "~>"
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '4.2'
|
|
34
|
+
type: :runtime
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - "~>"
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '4.2'
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: puma
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - ">="
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '7.2'
|
|
48
|
+
- - "<"
|
|
49
|
+
- !ruby/object:Gem::Version
|
|
50
|
+
version: '9.0'
|
|
51
|
+
type: :runtime
|
|
52
|
+
prerelease: false
|
|
53
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
54
|
+
requirements:
|
|
55
|
+
- - ">="
|
|
56
|
+
- !ruby/object:Gem::Version
|
|
57
|
+
version: '7.2'
|
|
58
|
+
- - "<"
|
|
59
|
+
- !ruby/object:Gem::Version
|
|
60
|
+
version: '9.0'
|
|
61
|
+
- !ruby/object:Gem::Dependency
|
|
62
|
+
name: json
|
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
|
64
|
+
requirements:
|
|
65
|
+
- - "~>"
|
|
66
|
+
- !ruby/object:Gem::Version
|
|
67
|
+
version: '2.7'
|
|
68
|
+
type: :runtime
|
|
69
|
+
prerelease: false
|
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
71
|
+
requirements:
|
|
72
|
+
- - "~>"
|
|
73
|
+
- !ruby/object:Gem::Version
|
|
74
|
+
version: '2.7'
|
|
75
|
+
- !ruby/object:Gem::Dependency
|
|
76
|
+
name: red-datasets
|
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
|
78
|
+
requirements:
|
|
79
|
+
- - "~>"
|
|
80
|
+
- !ruby/object:Gem::Version
|
|
81
|
+
version: '0.1'
|
|
82
|
+
type: :runtime
|
|
83
|
+
prerelease: false
|
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
85
|
+
requirements:
|
|
86
|
+
- - "~>"
|
|
87
|
+
- !ruby/object:Gem::Version
|
|
88
|
+
version: '0.1'
|
|
89
|
+
- !ruby/object:Gem::Dependency
|
|
90
|
+
name: dotenv
|
|
91
|
+
requirement: !ruby/object:Gem::Requirement
|
|
92
|
+
requirements:
|
|
93
|
+
- - "~>"
|
|
94
|
+
- !ruby/object:Gem::Version
|
|
95
|
+
version: '3.1'
|
|
96
|
+
type: :runtime
|
|
97
|
+
prerelease: false
|
|
98
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
99
|
+
requirements:
|
|
100
|
+
- - "~>"
|
|
101
|
+
- !ruby/object:Gem::Version
|
|
102
|
+
version: '3.1'
|
|
103
|
+
description: A professional-grade framework for building AI pipelines and AI-integrated
|
|
104
|
+
web apps with Ruby and Torch. A RootSpace.app product founded and developed by John
|
|
105
|
+
V. Teixido.
|
|
106
|
+
email: john@rootspace.app
|
|
107
|
+
executables:
|
|
108
|
+
- aura
|
|
109
|
+
extensions: []
|
|
110
|
+
extra_rdoc_files: []
|
|
111
|
+
files:
|
|
112
|
+
- CHANGELOG.md
|
|
113
|
+
- LICENSE
|
|
114
|
+
- README.md
|
|
115
|
+
- Rakefile
|
|
116
|
+
- aura-lang.gemspec
|
|
117
|
+
- bin/aura
|
|
118
|
+
- examples/assistant.aura
|
|
119
|
+
- examples/chatbot.aura
|
|
120
|
+
- examples/hello.aura
|
|
121
|
+
- examples/mnist_classifier.aura
|
|
122
|
+
- examples/sentiment.aura
|
|
123
|
+
- examples/transfer_api.aura
|
|
124
|
+
- lib/aura.rb
|
|
125
|
+
- lib/aura/analyzer.rb
|
|
126
|
+
- lib/aura/codegen.rb
|
|
127
|
+
- lib/aura/diagnostics.rb
|
|
128
|
+
- lib/aura/docker.rb
|
|
129
|
+
- lib/aura/emitter.rb
|
|
130
|
+
- lib/aura/parser.rb
|
|
131
|
+
- lib/aura/transformer.rb
|
|
132
|
+
- lib/aura/vercel.rb
|
|
133
|
+
- lib/aura/version.rb
|
|
134
|
+
homepage: https://rootspace.app
|
|
135
|
+
licenses:
|
|
136
|
+
- MIT
|
|
137
|
+
metadata: {}
|
|
138
|
+
post_install_message:
|
|
139
|
+
rdoc_options: []
|
|
140
|
+
require_paths:
|
|
141
|
+
- lib
|
|
142
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
143
|
+
requirements:
|
|
144
|
+
- - ">="
|
|
145
|
+
- !ruby/object:Gem::Version
|
|
146
|
+
version: '3.2'
|
|
147
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
148
|
+
requirements:
|
|
149
|
+
- - ">="
|
|
150
|
+
- !ruby/object:Gem::Version
|
|
151
|
+
version: '0'
|
|
152
|
+
requirements: []
|
|
153
|
+
rubygems_version: 3.5.22
|
|
154
|
+
signing_key:
|
|
155
|
+
specification_version: 4
|
|
156
|
+
summary: 'Aura: The Declarative AI Web Framework. A RootSpace.app product founded
|
|
157
|
+
and developed by John V. Teixido.'
|
|
158
|
+
test_files: []
|