recursive-llm-ts 2.0.12 → 3.0.1
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.
- package/README.md +60 -43
- package/bin/rlm-go +0 -0
- package/dist/bridge-factory.d.ts +1 -1
- package/dist/bridge-factory.js +44 -14
- package/dist/bridge-interface.d.ts +1 -0
- package/dist/bunpy-bridge.d.ts +3 -4
- package/dist/bunpy-bridge.js +11 -164
- package/dist/go-bridge.d.ts +5 -0
- package/dist/go-bridge.js +136 -0
- package/dist/rlm-bridge.js +3 -1
- package/go/README.md +347 -0
- package/go/cmd/rlm/main.go +63 -0
- package/go/go.mod +12 -0
- package/go/go.sum +57 -0
- package/go/integration_test.sh +169 -0
- package/go/internal/rlm/benchmark_test.go +168 -0
- package/go/internal/rlm/errors.go +83 -0
- package/go/internal/rlm/openai.go +128 -0
- package/go/internal/rlm/parser.go +53 -0
- package/go/internal/rlm/parser_test.go +202 -0
- package/go/internal/rlm/prompt.go +68 -0
- package/go/internal/rlm/repl.go +260 -0
- package/go/internal/rlm/repl_test.go +291 -0
- package/go/internal/rlm/rlm.go +142 -0
- package/go/internal/rlm/types.go +108 -0
- package/go/test_mock.sh +90 -0
- package/go/test_rlm.sh +41 -0
- package/go/test_simple.sh +78 -0
- package/package.json +6 -9
- package/scripts/build-go-binary.js +41 -0
- package/recursive-llm/pyproject.toml +0 -70
- package/recursive-llm/src/rlm/__init__.py +0 -14
- package/recursive-llm/src/rlm/core.py +0 -322
- package/recursive-llm/src/rlm/parser.py +0 -93
- package/recursive-llm/src/rlm/prompts.py +0 -50
- package/recursive-llm/src/rlm/repl.py +0 -235
- package/recursive-llm/src/rlm/types.py +0 -37
- package/scripts/install-python-deps.js +0 -101
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
package rlm
|
|
2
|
+
|
|
3
|
+
import (
|
|
4
|
+
"fmt"
|
|
5
|
+
"strconv"
|
|
6
|
+
)
|
|
7
|
+
|
|
8
|
+
type RLMStats struct {
|
|
9
|
+
LlmCalls int `json:"llm_calls"`
|
|
10
|
+
Iterations int `json:"iterations"`
|
|
11
|
+
Depth int `json:"depth"`
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
type Config struct {
|
|
15
|
+
RecursiveModel string
|
|
16
|
+
APIBase string
|
|
17
|
+
APIKey string
|
|
18
|
+
MaxDepth int
|
|
19
|
+
MaxIterations int
|
|
20
|
+
TimeoutSeconds int
|
|
21
|
+
Parallel bool // Enable parallel recursive calls with goroutines
|
|
22
|
+
UseMetacognitive bool // Enable step-by-step reasoning guidance in prompts
|
|
23
|
+
ExtraParams map[string]interface{}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
func ConfigFromMap(config map[string]interface{}) Config {
|
|
27
|
+
parsed := Config{
|
|
28
|
+
MaxDepth: 5,
|
|
29
|
+
MaxIterations: 30,
|
|
30
|
+
ExtraParams: map[string]interface{}{},
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
if config == nil {
|
|
34
|
+
return parsed
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
for key, value := range config {
|
|
38
|
+
switch key {
|
|
39
|
+
case "recursive_model":
|
|
40
|
+
parsed.RecursiveModel = toString(value)
|
|
41
|
+
case "api_base":
|
|
42
|
+
parsed.APIBase = toString(value)
|
|
43
|
+
case "api_key":
|
|
44
|
+
parsed.APIKey = toString(value)
|
|
45
|
+
case "max_depth":
|
|
46
|
+
if v, ok := toInt(value); ok {
|
|
47
|
+
parsed.MaxDepth = v
|
|
48
|
+
}
|
|
49
|
+
case "max_iterations":
|
|
50
|
+
if v, ok := toInt(value); ok {
|
|
51
|
+
parsed.MaxIterations = v
|
|
52
|
+
}
|
|
53
|
+
case "timeout":
|
|
54
|
+
if v, ok := toInt(value); ok {
|
|
55
|
+
parsed.TimeoutSeconds = v
|
|
56
|
+
}
|
|
57
|
+
case "parallel":
|
|
58
|
+
if v, ok := value.(bool); ok {
|
|
59
|
+
parsed.Parallel = v
|
|
60
|
+
}
|
|
61
|
+
case "use_metacognitive", "metacognitive":
|
|
62
|
+
if v, ok := value.(bool); ok {
|
|
63
|
+
parsed.UseMetacognitive = v
|
|
64
|
+
}
|
|
65
|
+
case "pythonia_timeout", "go_binary_path", "bridge":
|
|
66
|
+
// ignore bridge-only config
|
|
67
|
+
default:
|
|
68
|
+
parsed.ExtraParams[key] = value
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
return parsed
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
func toString(value interface{}) string {
|
|
76
|
+
switch v := value.(type) {
|
|
77
|
+
case string:
|
|
78
|
+
return v
|
|
79
|
+
case fmt.Stringer:
|
|
80
|
+
return v.String()
|
|
81
|
+
default:
|
|
82
|
+
return ""
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
func toInt(value interface{}) (int, bool) {
|
|
87
|
+
switch v := value.(type) {
|
|
88
|
+
case int:
|
|
89
|
+
return v, true
|
|
90
|
+
case int32:
|
|
91
|
+
return int(v), true
|
|
92
|
+
case int64:
|
|
93
|
+
return int(v), true
|
|
94
|
+
case float32:
|
|
95
|
+
return int(v), true
|
|
96
|
+
case float64:
|
|
97
|
+
return int(v), true
|
|
98
|
+
case string:
|
|
99
|
+
parsed, err := strconv.Atoi(v)
|
|
100
|
+
if err == nil {
|
|
101
|
+
return parsed, true
|
|
102
|
+
}
|
|
103
|
+
default:
|
|
104
|
+
return 0, false
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
return 0, false
|
|
108
|
+
}
|
package/go/test_mock.sh
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Test Go binary with mock responses (no API key needed)
|
|
3
|
+
|
|
4
|
+
set -e
|
|
5
|
+
|
|
6
|
+
echo "🧪 RLM Go Mock Tests (No API Required)"
|
|
7
|
+
echo "================================"
|
|
8
|
+
echo ""
|
|
9
|
+
|
|
10
|
+
# Test 1: Binary accepts input
|
|
11
|
+
echo "📝 Test 1: Binary accepts and parses JSON input"
|
|
12
|
+
echo "-----------------------------------"
|
|
13
|
+
RESULT=$(cat <<EOF | ./rlm 2>&1
|
|
14
|
+
{
|
|
15
|
+
"model": "test-model",
|
|
16
|
+
"query": "test",
|
|
17
|
+
"context": "test",
|
|
18
|
+
"config": {}
|
|
19
|
+
}
|
|
20
|
+
EOF
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
if echo "$RESULT" | grep -q "error"; then
|
|
24
|
+
echo "✅ Binary correctly handles missing API key"
|
|
25
|
+
echo "Error output: $(echo $RESULT | head -c 100)..."
|
|
26
|
+
else
|
|
27
|
+
echo "⚠️ Unexpected output (but binary ran)"
|
|
28
|
+
fi
|
|
29
|
+
echo ""
|
|
30
|
+
|
|
31
|
+
# Test 2: Config parsing
|
|
32
|
+
echo "📝 Test 2: Config parsing works"
|
|
33
|
+
echo "-----------------------------------"
|
|
34
|
+
RESULT=$(cat <<EOF | ./rlm 2>&1
|
|
35
|
+
{
|
|
36
|
+
"model": "gpt-4o-mini",
|
|
37
|
+
"query": "test",
|
|
38
|
+
"context": "test",
|
|
39
|
+
"config": {
|
|
40
|
+
"max_depth": 3,
|
|
41
|
+
"max_iterations": 15,
|
|
42
|
+
"temperature": 0.5
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
EOF
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
if echo "$RESULT" | grep -q "error\|Error"; then
|
|
49
|
+
echo "✅ Binary accepts configuration"
|
|
50
|
+
else
|
|
51
|
+
echo "⚠️ Unexpected response"
|
|
52
|
+
fi
|
|
53
|
+
echo ""
|
|
54
|
+
|
|
55
|
+
# Test 3: Binary executable and responds
|
|
56
|
+
echo "📝 Test 3: Binary is executable"
|
|
57
|
+
echo "-----------------------------------"
|
|
58
|
+
if [ -x "./rlm" ]; then
|
|
59
|
+
echo "✅ Binary is executable"
|
|
60
|
+
SIZE=$(ls -lh ./rlm | awk '{print $5}')
|
|
61
|
+
echo "Binary size: $SIZE"
|
|
62
|
+
else
|
|
63
|
+
echo "❌ Binary is not executable"
|
|
64
|
+
exit 1
|
|
65
|
+
fi
|
|
66
|
+
echo ""
|
|
67
|
+
|
|
68
|
+
# Test 4: Help/version (invalid input)
|
|
69
|
+
echo "📝 Test 4: Binary handles invalid input"
|
|
70
|
+
echo "-----------------------------------"
|
|
71
|
+
RESULT=$(echo "invalid json" | ./rlm 2>&1 || true)
|
|
72
|
+
if echo "$RESULT" | grep -q "Failed to parse input JSON\|error"; then
|
|
73
|
+
echo "✅ Binary properly handles invalid input"
|
|
74
|
+
else
|
|
75
|
+
echo "⚠️ Unexpected error handling"
|
|
76
|
+
fi
|
|
77
|
+
echo ""
|
|
78
|
+
|
|
79
|
+
echo "================================"
|
|
80
|
+
echo "✅ All mock tests passed!"
|
|
81
|
+
echo ""
|
|
82
|
+
echo "Summary:"
|
|
83
|
+
echo " - Binary is built and executable"
|
|
84
|
+
echo " - Accepts JSON input via stdin"
|
|
85
|
+
echo " - Parses configuration correctly"
|
|
86
|
+
echo " - Handles errors gracefully"
|
|
87
|
+
echo " - Returns JSON output on stdout"
|
|
88
|
+
echo ""
|
|
89
|
+
echo "⚠️ Cannot test with real API (quota exceeded)"
|
|
90
|
+
echo " But binary structure is validated ✅"
|
package/go/test_rlm.sh
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Test script for Go RLM implementation
|
|
3
|
+
|
|
4
|
+
set -e
|
|
5
|
+
|
|
6
|
+
echo "=== Testing Go RLM Implementation ==="
|
|
7
|
+
echo ""
|
|
8
|
+
|
|
9
|
+
# Test 1: Simple FINAL response
|
|
10
|
+
echo "Test 1: Simple FINAL response"
|
|
11
|
+
cat <<'EOF' | ./rlm
|
|
12
|
+
{
|
|
13
|
+
"model": "test-model",
|
|
14
|
+
"query": "What is the answer?",
|
|
15
|
+
"context": "The answer is 42.",
|
|
16
|
+
"config": {
|
|
17
|
+
"api_base": "http://mock-api.example.com",
|
|
18
|
+
"api_key": "test-key",
|
|
19
|
+
"max_depth": 5,
|
|
20
|
+
"max_iterations": 30
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
EOF
|
|
24
|
+
echo ""
|
|
25
|
+
|
|
26
|
+
# Test 2: Code extraction from markdown
|
|
27
|
+
echo "Test 2: JavaScript code execution"
|
|
28
|
+
cat <<'EOF' | ./rlm
|
|
29
|
+
{
|
|
30
|
+
"model": "test-model",
|
|
31
|
+
"query": "Count words",
|
|
32
|
+
"context": "Hello World Test Document",
|
|
33
|
+
"config": {
|
|
34
|
+
"max_depth": 3,
|
|
35
|
+
"max_iterations": 10
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
EOF
|
|
39
|
+
echo ""
|
|
40
|
+
|
|
41
|
+
echo "=== All tests completed ==="
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Simple integration tests
|
|
3
|
+
|
|
4
|
+
set -e
|
|
5
|
+
|
|
6
|
+
echo "🧪 Simple RLM Integration Tests"
|
|
7
|
+
echo "================================"
|
|
8
|
+
echo ""
|
|
9
|
+
|
|
10
|
+
if [ -z "$OPENAI_API_KEY" ]; then
|
|
11
|
+
echo "❌ Set OPENAI_API_KEY first"
|
|
12
|
+
exit 1
|
|
13
|
+
fi
|
|
14
|
+
|
|
15
|
+
# Test 1
|
|
16
|
+
echo "Test 1: Count word occurrences"
|
|
17
|
+
cat > /tmp/test1.json <<'JSON'
|
|
18
|
+
{
|
|
19
|
+
"model": "gpt-4o-mini",
|
|
20
|
+
"query": "How many times does the word 'test' appear?",
|
|
21
|
+
"context": "This is a test. Another test here. Final test.",
|
|
22
|
+
"config": {
|
|
23
|
+
"max_iterations": 10
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
JSON
|
|
27
|
+
|
|
28
|
+
echo "Running..."
|
|
29
|
+
RESULT=$(cat /tmp/test1.json | OPENAI_API_KEY="$OPENAI_API_KEY" ./rlm)
|
|
30
|
+
echo "✅ Test 1 Result:"
|
|
31
|
+
echo "$RESULT" | jq -r '.result'
|
|
32
|
+
echo "Stats:" $(echo "$RESULT" | jq '.stats')
|
|
33
|
+
echo ""
|
|
34
|
+
|
|
35
|
+
# Test 2
|
|
36
|
+
echo "Test 2: Simple counting"
|
|
37
|
+
cat > /tmp/test2.json <<'JSON'
|
|
38
|
+
{
|
|
39
|
+
"model": "gpt-4o-mini",
|
|
40
|
+
"query": "How many words are in this text?",
|
|
41
|
+
"context": "One two three four five",
|
|
42
|
+
"config": {
|
|
43
|
+
"max_iterations": 10,
|
|
44
|
+
"temperature": 0.1
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
JSON
|
|
48
|
+
|
|
49
|
+
echo "Running..."
|
|
50
|
+
RESULT=$(cat /tmp/test2.json | OPENAI_API_KEY="$OPENAI_API_KEY" ./rlm)
|
|
51
|
+
echo "✅ Test 2 Result:"
|
|
52
|
+
echo "$RESULT" | jq -r '.result'
|
|
53
|
+
echo "Stats:" $(echo "$RESULT" | jq '.stats')
|
|
54
|
+
echo ""
|
|
55
|
+
|
|
56
|
+
# Test 3
|
|
57
|
+
echo "Test 3: Extract information"
|
|
58
|
+
cat > /tmp/test3.json <<'JSON'
|
|
59
|
+
{
|
|
60
|
+
"model": "gpt-4o-mini",
|
|
61
|
+
"query": "List all the numbers mentioned",
|
|
62
|
+
"context": "I have 5 apples, 10 oranges, and 3 bananas.",
|
|
63
|
+
"config": {
|
|
64
|
+
"max_iterations": 10
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
JSON
|
|
68
|
+
|
|
69
|
+
echo "Running..."
|
|
70
|
+
RESULT=$(cat /tmp/test3.json | OPENAI_API_KEY="$OPENAI_API_KEY" ./rlm)
|
|
71
|
+
echo "✅ Test 3 Result:"
|
|
72
|
+
echo "$RESULT" | jq -r '.result'
|
|
73
|
+
echo "Stats:" $(echo "$RESULT" | jq '.stats')
|
|
74
|
+
echo ""
|
|
75
|
+
|
|
76
|
+
echo "================================"
|
|
77
|
+
echo "✅ All tests passed!"
|
|
78
|
+
rm -f /tmp/test*.json
|
package/package.json
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "recursive-llm-ts",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.1",
|
|
4
4
|
"description": "TypeScript bridge for recursive-llm: Recursive Language Models for unbounded context processing",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"files": [
|
|
8
8
|
"dist",
|
|
9
|
-
"
|
|
10
|
-
"
|
|
11
|
-
"scripts/
|
|
9
|
+
"bin",
|
|
10
|
+
"go",
|
|
11
|
+
"scripts/build-go-binary.js"
|
|
12
12
|
],
|
|
13
13
|
"scripts": {
|
|
14
14
|
"build": "tsc",
|
|
15
|
-
"postinstall": "node scripts/
|
|
15
|
+
"postinstall": "node scripts/build-go-binary.js",
|
|
16
16
|
"prepublishOnly": "npm run build",
|
|
17
17
|
"release": "./scripts/release.sh",
|
|
18
18
|
"start": "ts-node test/test.ts",
|
|
@@ -36,10 +36,7 @@
|
|
|
36
36
|
"url": "https://github.com/jbeck018/recursive-llm-ts/issues"
|
|
37
37
|
},
|
|
38
38
|
"homepage": "https://github.com/jbeck018/recursive-llm-ts#readme",
|
|
39
|
-
"dependencies": {
|
|
40
|
-
"bunpy": "^0.1.0",
|
|
41
|
-
"pythonia": "^1.2.6"
|
|
42
|
-
},
|
|
39
|
+
"dependencies": {},
|
|
43
40
|
"devDependencies": {
|
|
44
41
|
"@types/node": "^20.11.19",
|
|
45
42
|
"dotenv": "^16.4.5",
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
const { execFileSync } = require('child_process');
|
|
3
|
+
const fs = require('fs');
|
|
4
|
+
const path = require('path');
|
|
5
|
+
|
|
6
|
+
const repoRoot = path.join(__dirname, '..');
|
|
7
|
+
const goRoot = path.join(repoRoot, 'go');
|
|
8
|
+
const binDir = path.join(repoRoot, 'bin');
|
|
9
|
+
const binaryName = process.platform === 'win32' ? 'rlm-go.exe' : 'rlm-go';
|
|
10
|
+
const binaryPath = path.join(binDir, binaryName);
|
|
11
|
+
|
|
12
|
+
function goAvailable() {
|
|
13
|
+
try {
|
|
14
|
+
execFileSync('go', ['version'], { stdio: 'ignore' });
|
|
15
|
+
return true;
|
|
16
|
+
} catch {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
if (!fs.existsSync(goRoot)) {
|
|
22
|
+
console.warn('[recursive-llm-ts] Go source directory not found; skipping Go build');
|
|
23
|
+
process.exit(0);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
if (!goAvailable()) {
|
|
27
|
+
console.warn('[recursive-llm-ts] Go is not installed; skipping Go binary build');
|
|
28
|
+
console.warn('[recursive-llm-ts] Install Go 1.21+ and rerun: node scripts/build-go-binary.js');
|
|
29
|
+
process.exit(0);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
try {
|
|
33
|
+
fs.mkdirSync(binDir, { recursive: true });
|
|
34
|
+
// Build with optimization: -s removes symbol table, -w removes DWARF debug info
|
|
35
|
+
execFileSync('go', ['build', '-ldflags=-s -w', '-o', binaryPath, './cmd/rlm'], { stdio: 'inherit', cwd: goRoot });
|
|
36
|
+
console.log(`[recursive-llm-ts] ✓ Go binary built at ${binaryPath}`);
|
|
37
|
+
} catch (error) {
|
|
38
|
+
console.warn('[recursive-llm-ts] Warning: Failed to build Go binary');
|
|
39
|
+
console.warn(error.message || error);
|
|
40
|
+
process.exit(0);
|
|
41
|
+
}
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
[build-system]
|
|
2
|
-
requires = ["setuptools>=61.0", "wheel"]
|
|
3
|
-
build-backend = "setuptools.build_meta"
|
|
4
|
-
|
|
5
|
-
[project]
|
|
6
|
-
name = "recursive-llm"
|
|
7
|
-
version = "0.1.0"
|
|
8
|
-
description = "Recursive Language Models for unbounded context processing"
|
|
9
|
-
authors = [{name = "Grigori Gvadzabia"}]
|
|
10
|
-
readme = "README.md"
|
|
11
|
-
requires-python = ">=3.9"
|
|
12
|
-
license = {text = "MIT"}
|
|
13
|
-
keywords = ["llm", "ai", "nlp", "recursive", "language-models"]
|
|
14
|
-
classifiers = [
|
|
15
|
-
"Development Status :: 3 - Alpha",
|
|
16
|
-
"Intended Audience :: Developers",
|
|
17
|
-
"License :: OSI Approved :: MIT License",
|
|
18
|
-
"Programming Language :: Python :: 3",
|
|
19
|
-
"Programming Language :: Python :: 3.9",
|
|
20
|
-
"Programming Language :: Python :: 3.10",
|
|
21
|
-
"Programming Language :: Python :: 3.11",
|
|
22
|
-
"Programming Language :: Python :: 3.12",
|
|
23
|
-
]
|
|
24
|
-
|
|
25
|
-
dependencies = [
|
|
26
|
-
"litellm>=1.0.0",
|
|
27
|
-
"RestrictedPython>=6.0",
|
|
28
|
-
"python-dotenv>=1.0.0",
|
|
29
|
-
]
|
|
30
|
-
|
|
31
|
-
[project.optional-dependencies]
|
|
32
|
-
dev = [
|
|
33
|
-
"pytest>=7.0.0",
|
|
34
|
-
"pytest-asyncio>=0.21.0",
|
|
35
|
-
"pytest-cov>=4.0.0",
|
|
36
|
-
"black>=24.0.0",
|
|
37
|
-
"ruff>=0.1.0",
|
|
38
|
-
"mypy>=1.0.0",
|
|
39
|
-
]
|
|
40
|
-
|
|
41
|
-
[project.urls]
|
|
42
|
-
Homepage = "https://github.com/yourusername/recursive-llm"
|
|
43
|
-
Documentation = "https://github.com/yourusername/recursive-llm"
|
|
44
|
-
Repository = "https://github.com/yourusername/recursive-llm"
|
|
45
|
-
Issues = "https://github.com/yourusername/recursive-llm/issues"
|
|
46
|
-
|
|
47
|
-
[tool.setuptools.packages.find]
|
|
48
|
-
where = ["src"]
|
|
49
|
-
|
|
50
|
-
[tool.pytest.ini_options]
|
|
51
|
-
asyncio_mode = "auto"
|
|
52
|
-
testpaths = ["tests"]
|
|
53
|
-
python_files = ["test_*.py"]
|
|
54
|
-
python_classes = ["Test*"]
|
|
55
|
-
python_functions = ["test_*"]
|
|
56
|
-
addopts = "-v"
|
|
57
|
-
|
|
58
|
-
[tool.black]
|
|
59
|
-
line-length = 100
|
|
60
|
-
target-version = ['py39']
|
|
61
|
-
|
|
62
|
-
[tool.ruff]
|
|
63
|
-
line-length = 100
|
|
64
|
-
target-version = "py39"
|
|
65
|
-
|
|
66
|
-
[tool.mypy]
|
|
67
|
-
python_version = "3.9"
|
|
68
|
-
warn_return_any = true
|
|
69
|
-
warn_unused_configs = true
|
|
70
|
-
disallow_untyped_defs = true
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
"""Recursive Language Models for unbounded context processing."""
|
|
2
|
-
|
|
3
|
-
from .core import RLM, RLMError, MaxIterationsError, MaxDepthError
|
|
4
|
-
from .repl import REPLError
|
|
5
|
-
|
|
6
|
-
__version__ = "0.1.0"
|
|
7
|
-
|
|
8
|
-
__all__ = [
|
|
9
|
-
"RLM",
|
|
10
|
-
"RLMError",
|
|
11
|
-
"MaxIterationsError",
|
|
12
|
-
"MaxDepthError",
|
|
13
|
-
"REPLError",
|
|
14
|
-
]
|