llm_specs 0.2.0 → 0.2.2
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 +29 -5
- data/lib/llm_specs/cache.rb +15 -7
- data/lib/llm_specs/catalog.rb +5 -7
- data/lib/llm_specs/version.rb +1 -1
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 48e800a2dbfee7149fd20468bcbb8f68b0f5f4d30a1fdf86d03cc067d6b36f53
|
4
|
+
data.tar.gz: 75ff11e8f37673d7ac209ba081f32c7b8a12bc461844e84b20a4b553ff9ab5d0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ca5b4d11c6d3f7b2c4aff772b4cf0170e2c7063091154c5f48ef1010b6e29e803154b37d09ae21cee49c2da6a89afd8b5a2bce527e75b8a02ad35fb55ed3ed75
|
7
|
+
data.tar.gz: 72d975c0c18fc754ed7458b4784c1787beca7363948052567fc3310dda4ad314775025126d65bb84e256a9c04c207e10b2793adb9af4511773606e66b0c159fd
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# LLMSpecs
|
2
2
|
|
3
|
-
LLMSpecs is a lightweight Ruby interface for fetching
|
3
|
+
LLMSpecs is a lightweight Ruby interface for fetching
|
4
4
|
large language model (LLM) specifications from the [Parsera API](https://llmspecs.parsera.org).
|
5
5
|
It provides a simple, efficient way to access model metadata with built-in caching and query support.
|
6
6
|
|
@@ -63,7 +63,7 @@ Each model is represented by an instance of `LLMSpecs::Model`, a value object th
|
|
63
63
|
- `citations?`
|
64
64
|
- `batch?`
|
65
65
|
|
66
|
-
- Pricing breakdowns via `input_pricing` and `output_pricing`
|
66
|
+
- Pricing breakdowns via `pricing`, `input_pricing` and `output_pricing`
|
67
67
|
|
68
68
|
You can easily check capabilities:
|
69
69
|
```ruby
|
@@ -91,11 +91,35 @@ model.embeddings_output?
|
|
91
91
|
|
92
92
|
Pricing methods:
|
93
93
|
```ruby
|
94
|
-
model.input_pricing
|
95
|
-
|
94
|
+
model.input_pricing # => returns a hash:
|
95
|
+
# {
|
96
|
+
# text_tokens: {
|
97
|
+
# standard: {
|
98
|
+
# input_per_million: 15.0,
|
99
|
+
# cached_input_per_million: 18.75,
|
100
|
+
# output_per_million: 75.0
|
101
|
+
# },
|
102
|
+
# batch: {
|
103
|
+
# input_per_million: nil,
|
104
|
+
# output_per_million: nil
|
105
|
+
# }
|
106
|
+
# },
|
107
|
+
# embeddings: {
|
108
|
+
# standard: {
|
109
|
+
# input_per_million: nil
|
110
|
+
# },
|
111
|
+
# batch: {
|
112
|
+
# input_per_million: nil
|
113
|
+
# }
|
114
|
+
# }
|
115
|
+
# }
|
116
|
+
|
117
|
+
model.pricing.dig(:text_tokens, :standard, :input_per_million)
|
118
|
+
model.input_pricing # 15.0 => $ per 1M input tokens (default to pricing[:text_tokens][:standard][:input_per_million])
|
119
|
+
model.output_pricing # 75.0 => $ per 1M output tokens
|
96
120
|
|
97
121
|
model.input_pricing(:text_tokens, :batch)
|
98
|
-
model.
|
122
|
+
model.input_pricing(:embeddings)
|
99
123
|
```
|
100
124
|
|
101
125
|
## Cache configuration
|
data/lib/llm_specs/cache.rb
CHANGED
@@ -5,22 +5,30 @@ module LLMSpecs
|
|
5
5
|
@file = file
|
6
6
|
@ttl = ttl
|
7
7
|
end
|
8
|
-
|
8
|
+
|
9
9
|
def fetch
|
10
10
|
return read if valid?
|
11
11
|
yield.tap { write it }
|
12
12
|
end
|
13
13
|
|
14
|
-
def valid?
|
15
|
-
File.exist?(@file) && (Time.now - File.mtime(@file) < @ttl)
|
16
|
-
end
|
17
|
-
|
18
14
|
def read
|
19
|
-
|
15
|
+
File.read(@file)
|
20
16
|
end
|
21
17
|
|
22
18
|
def write(data)
|
23
|
-
File.write(@file,
|
19
|
+
File.write(@file, data)
|
20
|
+
end
|
21
|
+
|
22
|
+
def valid?
|
23
|
+
exist? && fresh?
|
24
|
+
end
|
25
|
+
|
26
|
+
def exist?
|
27
|
+
File.exist?(@file)
|
28
|
+
end
|
29
|
+
|
30
|
+
def fresh?
|
31
|
+
Time.now - File.mtime(@file) < @ttl
|
24
32
|
end
|
25
33
|
end
|
26
34
|
end
|
data/lib/llm_specs/catalog.rb
CHANGED
@@ -13,13 +13,11 @@ module LLMSpecs
|
|
13
13
|
private
|
14
14
|
|
15
15
|
def fetch
|
16
|
-
@cache.fetch
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
def parse(response)
|
22
|
-
JSON.parse(response.body, symbolize_names: true)
|
16
|
+
@cache.fetch {
|
17
|
+
Net::HTTP.get_response(@uri).tap(&:value).body # .value raises Net::HTTPError if not 2xx
|
18
|
+
}.then {
|
19
|
+
JSON.parse it, symbolize_names: true
|
20
|
+
}
|
23
21
|
end
|
24
22
|
end
|
25
23
|
end
|
data/lib/llm_specs/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: llm_specs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Max Power
|
@@ -23,9 +23,9 @@ dependencies:
|
|
23
23
|
- - "~>"
|
24
24
|
- !ruby/object:Gem::Version
|
25
25
|
version: '1.0'
|
26
|
-
description: LLMSpecs is a lightweight Ruby interface for fetching
|
27
|
-
|
28
|
-
|
26
|
+
description: LLMSpecs is a lightweight Ruby interface for fetching large language
|
27
|
+
model (LLM) specifications from the Parsera API. It provides a simple, efficient
|
28
|
+
way to access model metadata with built-in caching and query support.
|
29
29
|
email:
|
30
30
|
- kevin.melchert@gmail.com
|
31
31
|
executables: []
|
@@ -56,14 +56,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
56
56
|
requirements:
|
57
57
|
- - ">="
|
58
58
|
- !ruby/object:Gem::Version
|
59
|
-
version: 3.
|
59
|
+
version: 3.4.0
|
60
60
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
61
61
|
requirements:
|
62
62
|
- - ">="
|
63
63
|
- !ruby/object:Gem::Version
|
64
64
|
version: '0'
|
65
65
|
requirements: []
|
66
|
-
rubygems_version: 3.6.
|
66
|
+
rubygems_version: 3.6.9
|
67
67
|
specification_version: 4
|
68
68
|
summary: Ruby interface for fetching LLM specifications from the Parsera API
|
69
69
|
test_files: []
|