fino 1.6.1 → 1.7.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/README.md +41 -2
- data/lib/fino/library.rb +21 -0
- data/lib/fino/version.rb +1 -1
- data/lib/fino.rb +2 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2e033b28ee38e474bbeec0146b678dbcb3f076a510546e7317fe41be05476cf5
|
|
4
|
+
data.tar.gz: 772f29714cd61978a22b3cf1a4fee9f2570396a57703d5b3f228d005f09536f8
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 53eed6d59234333c47cdb1fe147011198827a10488c40772bd5abc14fffa57f36dafc7b34dd478ca9f218b938411cd37a842d374dbf2abe47e645b60a4c3a52b
|
|
7
|
+
data.tar.gz: 59bfaa481e797ee8974af6e8402e449266f9fb01c0acb3f81d1faf5d19635d1df00963e54075c8de513ff3662fdc9047786e13b467213cf9d14e79921fea376c
|
data/README.md
CHANGED
|
@@ -46,8 +46,8 @@ Fino.configure do
|
|
|
46
46
|
end
|
|
47
47
|
|
|
48
48
|
section :my_micro_service, label: "My Micro Service" do
|
|
49
|
-
setting :http_read_timeout, :integer, default: 200
|
|
50
|
-
setting :http_open_timeout, :integer, default: 100
|
|
49
|
+
setting :http_read_timeout, :integer, unit: :ms, default: 200
|
|
50
|
+
setting :http_open_timeout, :integer, unit: :ms, default: 100
|
|
51
51
|
end
|
|
52
52
|
end
|
|
53
53
|
end
|
|
@@ -65,6 +65,17 @@ Fino.set(model: "gpt-5", at: :openai)
|
|
|
65
65
|
Fino.value(:model, at: :openai) #=> "gpt-5"
|
|
66
66
|
```
|
|
67
67
|
|
|
68
|
+
### Feature toggles
|
|
69
|
+
|
|
70
|
+
```ruby
|
|
71
|
+
Fino.enabled?(:maintenance_mode) #=> false
|
|
72
|
+
Fino.disabled?(:maintenance_mode) #=> true
|
|
73
|
+
|
|
74
|
+
Fino.enabled?(:maintenance_mode, for: "qa") #=> false
|
|
75
|
+
Fino.add_override(:maintenance_mode, "qa" => true)
|
|
76
|
+
Fino.enabled?(:maintenance_mode, for: "qa") #=> true
|
|
77
|
+
```
|
|
78
|
+
|
|
68
79
|
### Overrides
|
|
69
80
|
|
|
70
81
|
```ruby
|
|
@@ -76,6 +87,9 @@ Fino.value(:model, at: :openai) #=> "gpt-5"
|
|
|
76
87
|
Fino.value(:model, at: :openai, for: "qa") #=> "our_local_model_not_to_pay_to_sam_altman"
|
|
77
88
|
|
|
78
89
|
Fino.setting(:model, at: :openai).overrides #=> { "qa" => "our_local_model_not_to_pay_to_sam_altman" }
|
|
90
|
+
|
|
91
|
+
Fino.add_override(:model, at: :openai, "admin" => "gpt-2000")
|
|
92
|
+
Fino.setting(:model, at: :openai).overrides #=> { "qa" => "our_local_model_not_to_pay_to_sam_altman", "admin" => "gpt-2000" }
|
|
79
93
|
```
|
|
80
94
|
|
|
81
95
|
### A/B testing
|
|
@@ -95,6 +109,31 @@ Fino.value(:model, at: :openai, for: "user_1") #=> "gpt-6"
|
|
|
95
109
|
Fino.value(:model, at: :openai, for: "user_2") #=> "gpt-5"
|
|
96
110
|
```
|
|
97
111
|
|
|
112
|
+
### Unit conversion
|
|
113
|
+
|
|
114
|
+
Fino is able to convert numeric settings into various units
|
|
115
|
+
|
|
116
|
+
```ruby
|
|
117
|
+
Fino.configure do
|
|
118
|
+
# ...
|
|
119
|
+
|
|
120
|
+
settings do
|
|
121
|
+
section :my_micro_service, label: "My Micro Service" do
|
|
122
|
+
setting :http_read_timeout,
|
|
123
|
+
:integer,
|
|
124
|
+
unit: :ms, # When you define setting, specify unit (e.g ms/sec) to later be able to convert it
|
|
125
|
+
default: 200
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
Fino.value(:http_read_timeout, at: :my_micro_service) #=> 200
|
|
131
|
+
|
|
132
|
+
# Convert from ms to sec on the fly
|
|
133
|
+
Fino.value(:http_read_timeout, at: :my_micro_service, unit: :sec) #=> 0.2
|
|
134
|
+
Fino.setting(:http_read_timeout, at: :my_micro_service).value(unit: :sec) #=> 0.2
|
|
135
|
+
```
|
|
136
|
+
|
|
98
137
|
## Rails integration
|
|
99
138
|
|
|
100
139
|
Fino easily integrates with Rails. Just add the gem to your Gemfile:
|
data/lib/fino/library.rb
CHANGED
|
@@ -48,6 +48,25 @@ class Fino::Library
|
|
|
48
48
|
pipeline.read_multi(setting_definitions)
|
|
49
49
|
end
|
|
50
50
|
|
|
51
|
+
def add_override(setting_name, at: nil, **overrides)
|
|
52
|
+
setting_definition = build_setting_definition(setting_name, at: at)
|
|
53
|
+
current_setting = pipeline.read(setting_definition)
|
|
54
|
+
|
|
55
|
+
deserialized_overrides = overrides.transform_values { |v| setting_definition.type_class.deserialize(v) }
|
|
56
|
+
merged_overrides = current_setting.overrides.merge(deserialized_overrides)
|
|
57
|
+
|
|
58
|
+
variants = current_setting.experiment&.variants || []
|
|
59
|
+
|
|
60
|
+
pipeline.write(
|
|
61
|
+
setting_definition,
|
|
62
|
+
current_setting.global_value,
|
|
63
|
+
merged_overrides,
|
|
64
|
+
variants
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
true
|
|
68
|
+
end
|
|
69
|
+
|
|
51
70
|
def set(**data)
|
|
52
71
|
at = data.delete(:at)
|
|
53
72
|
raw_overrides = data.delete(:overrides) || {}
|
|
@@ -74,6 +93,8 @@ class Fino::Library
|
|
|
74
93
|
overrides,
|
|
75
94
|
experiment.variants
|
|
76
95
|
)
|
|
96
|
+
|
|
97
|
+
true
|
|
77
98
|
end
|
|
78
99
|
|
|
79
100
|
def slice(*settings)
|
data/lib/fino/version.rb
CHANGED
data/lib/fino.rb
CHANGED