sorbet-baml 0.1.0 → 0.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 +4 -4
- data/CLAUDE.md +94 -0
- data/README.md +315 -122
- data/Rakefile +2 -2
- data/docs-site/.gitignore +48 -0
- data/docs-site/Gemfile +5 -0
- data/docs-site/Gemfile.lock +140 -0
- data/docs-site/Rakefile +3 -0
- data/docs-site/bridgetown.config.yml +15 -0
- data/docs-site/config/initializers.rb +9 -0
- data/docs-site/config/puma.rb +9 -0
- data/docs-site/config.ru +5 -0
- data/docs-site/esbuild.config.js +11 -0
- data/docs-site/frontend/javascript/index.js +22 -0
- data/docs-site/frontend/styles/index.css +61 -0
- data/docs-site/package.json +18 -0
- data/docs-site/postcss.config.js +6 -0
- data/docs-site/server/roda_app.rb +9 -0
- data/docs-site/src/_components/head.liquid +26 -0
- data/docs-site/src/_components/nav.liquid +68 -0
- data/docs-site/src/_layouts/default.liquid +27 -0
- data/docs-site/src/_layouts/doc.liquid +39 -0
- data/docs-site/src/advanced-usage.md +598 -0
- data/docs-site/src/getting-started.md +170 -0
- data/docs-site/src/index.md +183 -0
- data/docs-site/src/troubleshooting.md +317 -0
- data/docs-site/src/type-mapping.md +236 -0
- data/docs-site/tailwind.config.js +85 -0
- data/examples/description_parameters.rb +49 -0
- data/lib/sorbet_baml/comment_extractor.rb +51 -54
- data/lib/sorbet_baml/converter.rb +69 -35
- data/lib/sorbet_baml/dependency_resolver.rb +11 -11
- data/lib/sorbet_baml/description_extension.rb +34 -0
- data/lib/sorbet_baml/description_extractor.rb +34 -0
- data/lib/sorbet_baml/dspy_tool_converter.rb +97 -0
- data/lib/sorbet_baml/dspy_tool_extensions.rb +23 -0
- data/lib/sorbet_baml/enum_extensions.rb +2 -2
- data/lib/sorbet_baml/struct_extensions.rb +2 -2
- data/lib/sorbet_baml/tool_extensions.rb +23 -0
- data/lib/sorbet_baml/type_mapper.rb +35 -37
- data/lib/sorbet_baml/version.rb +1 -1
- data/lib/sorbet_baml.rb +41 -10
- data/sorbet/config +2 -0
- data/sorbet/rbi/gems/anthropic@1.5.0.rbi +21252 -0
- data/sorbet/rbi/gems/async@2.27.3.rbi +9 -0
- data/sorbet/rbi/gems/bigdecimal@3.2.2.rbi +9 -0
- data/sorbet/rbi/gems/concurrent-ruby@1.3.5.rbi +424 -0
- data/sorbet/rbi/gems/connection_pool@2.5.3.rbi +9 -0
- data/sorbet/rbi/gems/console@1.33.0.rbi +9 -0
- data/sorbet/rbi/gems/dry-configurable@1.3.0.rbi +672 -0
- data/sorbet/rbi/gems/dry-core@1.1.0.rbi +1729 -0
- data/sorbet/rbi/gems/dry-logger@1.1.0.rbi +1317 -0
- data/sorbet/rbi/gems/dspy@0.19.1.rbi +6677 -0
- data/sorbet/rbi/gems/ffi@1.17.2.rbi +2174 -0
- data/sorbet/rbi/gems/fiber-annotation@0.2.0.rbi +9 -0
- data/sorbet/rbi/gems/fiber-local@1.1.0.rbi +9 -0
- data/sorbet/rbi/gems/fiber-storage@1.0.1.rbi +9 -0
- data/sorbet/rbi/gems/google-protobuf@4.32.0.rbi +9 -0
- data/sorbet/rbi/gems/googleapis-common-protos-types@1.20.0.rbi +9 -0
- data/sorbet/rbi/gems/informers@1.2.1.rbi +1875 -0
- data/sorbet/rbi/gems/io-event@1.12.1.rbi +9 -0
- data/sorbet/rbi/gems/metrics@0.13.0.rbi +9 -0
- data/sorbet/rbi/gems/onnxruntime@0.10.0.rbi +304 -0
- data/sorbet/rbi/gems/openai@0.16.0.rbi +68055 -0
- data/sorbet/rbi/gems/opentelemetry-api@1.6.0.rbi +9 -0
- data/sorbet/rbi/gems/opentelemetry-common@0.22.0.rbi +9 -0
- data/sorbet/rbi/gems/opentelemetry-exporter-otlp@0.30.0.rbi +9 -0
- data/sorbet/rbi/gems/opentelemetry-registry@0.4.0.rbi +9 -0
- data/sorbet/rbi/gems/opentelemetry-sdk@1.8.1.rbi +9 -0
- data/sorbet/rbi/gems/opentelemetry-semantic_conventions@1.11.0.rbi +9 -0
- data/sorbet/rbi/gems/polars-df@0.20.0.rbi +9 -0
- data/sorbet/rbi/gems/sorbet-result@1.4.0.rbi +242 -0
- data/sorbet/rbi/gems/sorbet-schema@0.9.2.rbi +743 -0
- data/sorbet/rbi/gems/sorbet-struct-comparable@1.3.0.rbi +48 -0
- data/sorbet/rbi/gems/tokenizers@0.5.5.rbi +754 -0
- data/sorbet/rbi/gems/traces@0.17.0.rbi +9 -0
- data/sorbet/rbi/gems/zeitwerk@2.7.3.rbi +1429 -0
- metadata +67 -7
- data/docs/README.md +0 -117
- data/docs/advanced-usage.md +0 -427
- data/docs/getting-started.md +0 -91
- data/docs/troubleshooting.md +0 -291
- data/docs/type-mapping.md +0 -192
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: eb876085f297285bbd07f7fd02c272417eade6ee6a33bd23632652746b1261d3
|
|
4
|
+
data.tar.gz: 8053e7074130ab128679fbc7a6c88d97fd2f3aaafb5c1637ab98271025fcdf69
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: cb1ef5173f16930f836eac60d64ca3c3e7a98de3b1aed127012f46497b72c09fade60b34d55e9aee40e8966db3d38361706c6d9c5bdb31a1f4af7761501263c6
|
|
7
|
+
data.tar.gz: 695791bb1caee6b763437aa5f5d6688640f5792a482372eb08a5e3da74ce7a007aed166f130945b736bc47bc4030d50a24c38910b99543b5d1ea533538a31119
|
data/CLAUDE.md
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# CLAUDE.md
|
|
2
|
+
|
|
3
|
+
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
4
|
+
|
|
5
|
+
## Development Commands
|
|
6
|
+
|
|
7
|
+
**Running Tests:**
|
|
8
|
+
```bash
|
|
9
|
+
bundle exec rspec # Run all tests
|
|
10
|
+
bundle exec rspec spec/path_spec.rb # Run specific test file
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
**Type Checking:**
|
|
14
|
+
```bash
|
|
15
|
+
bundle exec srb tc # Run Sorbet type checker
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
**Development Setup:**
|
|
19
|
+
```bash
|
|
20
|
+
bundle install # Install dependencies
|
|
21
|
+
bundle exec tapioca dsl # Generate RBI files for gems
|
|
22
|
+
bundle exec tapioca gem # Generate RBI files for dependencies
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
**Linting:**
|
|
26
|
+
```bash
|
|
27
|
+
bundle exec rubocop # Run RuboCop linter
|
|
28
|
+
bundle exec rubocop -a # Auto-fix violations where possible
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
**Gem Tasks:**
|
|
32
|
+
```bash
|
|
33
|
+
bundle exec rake build # Build the gem
|
|
34
|
+
bundle exec rake install # Install locally
|
|
35
|
+
bundle exec rake release # Release to RubyGems (maintainers only)
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Code Architecture
|
|
39
|
+
|
|
40
|
+
### Core Components
|
|
41
|
+
|
|
42
|
+
**Main Library Entry Point:**
|
|
43
|
+
- `lib/sorbet_baml.rb` - Main module with public API methods and extension loading
|
|
44
|
+
|
|
45
|
+
**Core Conversion System:**
|
|
46
|
+
- `lib/sorbet_baml/converter.rb` - Main converter orchestrating BAML generation
|
|
47
|
+
- `lib/sorbet_baml/type_mapper.rb` - Maps Sorbet type objects to BAML type strings
|
|
48
|
+
- `lib/sorbet_baml/dependency_resolver.rb` - Handles topological sorting of dependencies
|
|
49
|
+
|
|
50
|
+
**Ruby-Idiomatic API Extensions:**
|
|
51
|
+
- `lib/sorbet_baml/struct_extensions.rb` - Adds `.to_baml` method to T::Struct
|
|
52
|
+
- `lib/sorbet_baml/enum_extensions.rb` - Adds `.to_baml` method to T::Enum
|
|
53
|
+
|
|
54
|
+
**Field Documentation:**
|
|
55
|
+
- `lib/sorbet_baml/comment_extractor.rb` - Extracts comments from source for field descriptions
|
|
56
|
+
|
|
57
|
+
### Key Design Patterns
|
|
58
|
+
|
|
59
|
+
**Extension Pattern:** The gem extends T::Struct and T::Enum classes with `.to_baml` methods for a Ruby-idiomatic API.
|
|
60
|
+
|
|
61
|
+
**Dependency Resolution:** Uses topological sorting to ensure dependencies are output before types that reference them, preventing forward reference issues.
|
|
62
|
+
|
|
63
|
+
**Type Mapping:** Comprehensive mapping from Sorbet type system to BAML types:
|
|
64
|
+
- `T::Struct` → BAML classes
|
|
65
|
+
- `T::Enum` → BAML enums
|
|
66
|
+
- `T.nilable(T)` → optional types (`T?`)
|
|
67
|
+
- `T::Array[T]` → array types (`T[]`)
|
|
68
|
+
- `T::Hash[K,V]` → map types (`map<K,V>`)
|
|
69
|
+
- `T.any(T1, T2)` → union types (`T1 | T2`)
|
|
70
|
+
|
|
71
|
+
**Smart Defaults:** The API includes dependencies and field descriptions by default.
|
|
72
|
+
|
|
73
|
+
### Type System Support
|
|
74
|
+
|
|
75
|
+
The gem provides complete coverage of Sorbet's type system:
|
|
76
|
+
- Basic types (String, Integer, Float, Boolean, Symbol, Date/Time)
|
|
77
|
+
- Complex types (Arrays, Hashes, Unions, Nilable)
|
|
78
|
+
- Structured types (T::Struct, T::Enum with full nesting support)
|
|
79
|
+
- Circular reference handling to prevent infinite loops
|
|
80
|
+
|
|
81
|
+
### Testing Structure
|
|
82
|
+
|
|
83
|
+
- `spec/fixtures/` - Test data including complex type examples
|
|
84
|
+
- `spec/integration/` - End-to-end feature tests
|
|
85
|
+
- `spec/sorbet_baml/` - Unit tests for each component
|
|
86
|
+
- Comprehensive test coverage includes edge cases, circular references, and complex type combinations
|
|
87
|
+
|
|
88
|
+
## Development Guidelines
|
|
89
|
+
|
|
90
|
+
**Type Safety:** All code uses `# typed: strict` and maintains full Sorbet compliance.
|
|
91
|
+
|
|
92
|
+
**Ruby Idioms:** The public API follows Ruby conventions with `.to_baml` instance methods rather than static factory methods.
|
|
93
|
+
|
|
94
|
+
**Field Descriptions:** Comments above field definitions are automatically extracted and included as BAML `@description` annotations for LLM context.
|