synor/sdk/ruby/README.md
Gulshan Yadav 162227dc71 docs(sdk): add comprehensive documentation for all 12 SDKs
Add README.md documentation for:
- Main SDK overview with quick start guides
- JavaScript/TypeScript SDK
- Python SDK
- Go SDK
- Rust SDK
- Java SDK
- Kotlin SDK
- Swift SDK
- Flutter/Dart SDK
- C SDK
- C++ SDK
- C#/.NET SDK
- Ruby SDK

Each README includes:
- Installation instructions
- Quick start examples
- Tensor operations
- Matrix operations (matmul, conv2d, attention)
- LLM inference (single and streaming)
- Configuration options
- Error handling
- Type definitions
2026-01-11 18:05:03 +05:30

251 lines
4.1 KiB
Markdown

# Synor Compute SDK for Ruby
Access distributed heterogeneous compute at 90% cost reduction.
## Installation
Add to `Gemfile`:
```ruby
gem 'synor_compute'
```
Then run:
```bash
bundle install
```
Or install directly:
```bash
gem install synor_compute
```
## Quick Start
```ruby
require 'synor_compute'
client = SynorCompute::Client.new('your-api-key')
# Matrix multiplication on GPU
a = SynorCompute::Tensor.random([512, 512])
b = SynorCompute::Tensor.random([512, 512])
result = client.matmul(a, b,
precision: :fp16,
processor: :gpu
)
if result.success?
puts "Time: #{result.execution_time_ms}ms"
puts "Cost: $#{result.cost}"
end
```
## Tensor Operations
```ruby
# Create tensors
zeros = SynorCompute::Tensor.zeros([3, 3])
ones = SynorCompute::Tensor.ones([2, 2])
random = SynorCompute::Tensor.random([10, 10])
randn = SynorCompute::Tensor.randn([100])
eye = SynorCompute::Tensor.eye(3)
# From array
data = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0]
tensor = SynorCompute::Tensor.new(data, shape: [2, 3])
# Operations
reshaped = tensor.reshape([3, 2])
transposed = tensor.transpose
# Math
mean = tensor.mean
sum = tensor.sum
std = tensor.std
```
## Matrix Operations
```ruby
# Matrix multiplication
result = client.matmul(a, b,
precision: :fp16,
processor: :gpu,
strategy: :speed
)
# 2D Convolution
conv = client.conv2d(input, kernel,
stride: [1, 1],
padding: [1, 1]
)
# Attention
attention = client.attention(query, key, value,
num_heads: 8,
flash: true
)
```
## LLM Inference
```ruby
# Single response
response = client.inference('llama-3-70b', 'Explain quantum computing',
max_tokens: 512,
temperature: 0.7
)
puts response.result
# Streaming with block
client.inference_stream('llama-3-70b', 'Write a poem') do |chunk|
print chunk
end
# Streaming with Enumerator
client.inference_stream('llama-3-70b', 'Write a poem').each do |chunk|
print chunk
end
```
## Configuration
```ruby
config = SynorCompute::Config.new(
api_key: 'your-api-key',
base_url: 'https://api.synor.io/compute/v1',
default_processor: :gpu,
default_precision: :fp16,
timeout: 30,
debug: true
)
client = SynorCompute::Client.new(config)
# Or with block
SynorCompute.configure do |config|
config.api_key = 'your-api-key'
config.default_processor = :gpu
end
```
## Rails Integration
```ruby
# config/initializers/synor_compute.rb
SynorCompute.configure do |config|
config.api_key = Rails.application.credentials.synor[:api_key]
config.default_processor = :gpu
end
# In your controller/service
class ComputeService
def self.client
@client ||= SynorCompute::Client.new
end
def self.compute(a, b)
client.matmul(a, b)
end
end
```
## Error Handling
```ruby
begin
result = client.matmul(a, b)
rescue SynorCompute::ApiError => e
puts "API Error #{e.status_code}: #{e.message}"
rescue SynorCompute::NetworkError => e
puts "Network error: #{e.message}"
rescue SynorCompute::Error => e
puts "Error: #{e.message}"
end
```
## Types
```ruby
# Processor types (symbols)
:cpu, :gpu, :tpu, :npu, :lpu, :fpga, :auto
# Precision (symbols)
:fp64, :fp32, :fp16, :bf16, :int8, :int4
# Job status (symbols)
:pending, :running, :completed, :failed, :cancelled
# Balancing strategy (symbols)
:speed, :cost, :energy, :latency, :balanced
```
## Job Management
```ruby
# Submit async job
job = client.submit_job(:matmul, a: a, b: b)
# Poll for status
status = client.job_status(job.id)
# Wait for completion
result = client.wait_for_job(job.id, timeout: 60)
# Cancel job
client.cancel_job(job.id)
```
## Ruby-Specific Features
### Method Chaining
```ruby
result = client
.matmul(a, b)
.tap { |r| puts "Computing..." }
.then { |r| r.data if r.success? }
```
### Duck Typing
```ruby
# Any object with #to_tensor method works
class MyData
def to_tensor
SynorCompute::Tensor.new(@data, shape: @shape)
end
end
result = client.matmul(MyData.new, b)
```
### Frozen String Literals
The gem is compatible with frozen string literals:
```ruby
# frozen_string_literal: true
require 'synor_compute'
```
## Requirements
- Ruby 3.0+
- faraday gem for HTTP
## Testing
```bash
bundle exec rake test
# or
bundle exec rspec
```
## License
MIT