prescient 0.2.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/.rubocop.yml +0 -2
- data/.yardopts +3 -6
- data/CHANGELOG.md +41 -4
- data/INTEGRATION_GUIDE.md +27 -29
- data/LICENSE.txt +1 -1
- data/README.md +133 -74
- data/Rakefile +82 -7
- data/Steepfile +17 -0
- data/VECTOR_SEARCH_GUIDE.md +32 -8
- data/docker-compose.yml +3 -5
- data/examples/README.md +45 -0
- data/examples/basic_usage.rb +2 -2
- data/examples/custom_contexts.rb +6 -6
- data/examples/custom_prompts.rb +5 -5
- data/examples/vector_search.rb +2 -2
- data/lib/prescient/base.rb +81 -26
- data/lib/prescient/client.rb +70 -36
- data/lib/prescient/errors.rb +51 -0
- data/lib/prescient/pgvector.rb +194 -0
- data/lib/prescient/provider/anthropic.rb +55 -54
- data/lib/prescient/provider/huggingface.rb +76 -76
- data/lib/prescient/provider/ollama.rb +46 -35
- data/lib/prescient/provider/openai.rb +38 -31
- data/lib/prescient/version.rb +2 -1
- data/lib/prescient.rb +85 -63
- data/scripts/setup-ollama-models.sh +2 -2
- data/sig/prescient.rbs +221 -1
- metadata +21 -217
- data/CHANGELOG.pdf +0 -0
- data/prescient.gemspec +0 -53
data/sig/prescient.rbs
CHANGED
|
@@ -1,4 +1,224 @@
|
|
|
1
|
+
module HTTParty
|
|
2
|
+
end
|
|
3
|
+
|
|
1
4
|
module Prescient
|
|
2
5
|
VERSION: String
|
|
3
|
-
|
|
6
|
+
|
|
7
|
+
class Error < StandardError
|
|
8
|
+
attr_reader provider: String?
|
|
9
|
+
attr_reader operation: String?
|
|
10
|
+
attr_reader status: Integer?
|
|
11
|
+
|
|
12
|
+
def initialize: (?String?, ?provider: String?, ?operation: String?, ?status: Integer?) -> void
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
class ConnectionError < Error
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
class AuthenticationError < Error
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
class RateLimitError < Error
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
class ModelNotAvailableError < Error
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
class InvalidResponseError < Error
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
class InvalidVectorError < Error
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
class ProviderError < Error
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
class Base
|
|
37
|
+
attr_reader options: Hash[Symbol, untyped]
|
|
38
|
+
attr_reader provider_name: String
|
|
39
|
+
|
|
40
|
+
def initialize: (**untyped) -> void
|
|
41
|
+
def generate_embedding: (String, **untyped) -> Array[Float]
|
|
42
|
+
def generate_response: (String, ?Array[untyped], **untyped) -> Hash[Symbol, untyped]
|
|
43
|
+
def health_check: () -> Hash[Symbol, untyped]
|
|
44
|
+
def available?: () -> bool
|
|
45
|
+
|
|
46
|
+
def validate_configuration!: () -> void
|
|
47
|
+
def handle_errors: () { () -> untyped } -> untyped
|
|
48
|
+
def validate_embedding_dimensions: (untyped, Integer) -> Array[untyped]
|
|
49
|
+
def clean_text: (untyped) -> String
|
|
50
|
+
def default_prompt_templates: () -> Hash[Symbol, String]
|
|
51
|
+
def build_prompt: (String, ?Array[untyped]) -> String
|
|
52
|
+
def default_context_configs: () -> Hash[untyped, untyped]
|
|
53
|
+
def extract_embedding_text: (untyped, ?String) -> String
|
|
54
|
+
def extract_text_values: (Hash[untyped, untyped]) -> Array[String]
|
|
55
|
+
def format_context_item: (untyped) -> String
|
|
56
|
+
|
|
57
|
+
private
|
|
58
|
+
|
|
59
|
+
def resolve_context_config: (untyped, String?) -> Hash[untyped, untyped]
|
|
60
|
+
def extract_configured_fields: (Hash[untyped, untyped], Hash[untyped, untyped]) -> Array[untyped]?
|
|
61
|
+
def format_hash_item: (Hash[untyped, untyped]) -> String
|
|
62
|
+
def build_format_data: (Hash[untyped, untyped], Hash[untyped, untyped]) -> Hash[Symbol, untyped]
|
|
63
|
+
def apply_format_template: (String, Hash[Symbol, untyped]) -> String?
|
|
64
|
+
def detect_context_type: (untyped) -> String
|
|
65
|
+
def match_context_by_fields: (Hash[untyped, untyped], Hash[untyped, untyped]) -> String
|
|
66
|
+
def find_best_field_match: (Array[String], Hash[untyped, untyped]) -> String?
|
|
67
|
+
def calculate_field_match_score: (Array[String], Array[String]) -> Numeric
|
|
68
|
+
def fallback_format_hash: (Hash[untyped, untyped], ?Hash[Symbol, untyped]) -> String
|
|
69
|
+
def validate_response!: (untyped, String) -> void
|
|
70
|
+
def provider_error: (String, untyped, operation: String, ?provider: untyped, ?error_class: untyped) -> Error
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
module Provider
|
|
74
|
+
class Ollama < Base
|
|
75
|
+
def self.base_uri: (String) -> untyped
|
|
76
|
+
def self.default_timeout: (Integer) -> untyped
|
|
77
|
+
def self.get: (String, **untyped) -> untyped
|
|
78
|
+
def self.post: (String, **untyped) -> untyped
|
|
79
|
+
|
|
80
|
+
def initialize: (**untyped) -> void
|
|
81
|
+
def generate_embedding: (String, **untyped) -> Array[Float]
|
|
82
|
+
def generate_response: (String, ?Array[untyped], **untyped) -> Hash[Symbol, untyped]
|
|
83
|
+
def health_check: () -> Hash[Symbol, untyped]
|
|
84
|
+
def available_models: () -> Array[Hash[Symbol, untyped]]
|
|
85
|
+
def pull_model: (String) -> Hash[Symbol, untyped]
|
|
86
|
+
|
|
87
|
+
private
|
|
88
|
+
|
|
89
|
+
def validate_configuration!: () -> void
|
|
90
|
+
def prepare_generate_response: (String, ?Array[untyped], **untyped) -> Hash[Symbol, untyped]
|
|
91
|
+
def fetch_and_parse: (String, String, **untyped) -> untyped
|
|
92
|
+
def validate_response!: (untyped, String) -> void
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
class Anthropic < Base
|
|
96
|
+
def self.base_uri: (String) -> untyped
|
|
97
|
+
def self.default_timeout: (Integer) -> untyped
|
|
98
|
+
def self.get: (String, **untyped) -> untyped
|
|
99
|
+
def self.post: (String, **untyped) -> untyped
|
|
100
|
+
|
|
101
|
+
def initialize: (**untyped) -> void
|
|
102
|
+
def generate_embedding: (String, **untyped) -> untyped
|
|
103
|
+
def generate_response: (String, ?Array[untyped], **untyped) -> Hash[Symbol, untyped]
|
|
104
|
+
def health_check: () -> Hash[Symbol, untyped]
|
|
105
|
+
def list_models: () -> Array[Hash[Symbol, untyped]]
|
|
106
|
+
|
|
107
|
+
private
|
|
108
|
+
|
|
109
|
+
def validate_configuration!: () -> void
|
|
110
|
+
def api_headers: () -> Hash[String, String]
|
|
111
|
+
def validate_response!: (untyped, String) -> void
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
class OpenAI < Base
|
|
115
|
+
EMBEDDING_DIMENSIONS: Hash[String, Integer]
|
|
116
|
+
|
|
117
|
+
def self.base_uri: (String) -> untyped
|
|
118
|
+
def self.default_timeout: (Integer) -> untyped
|
|
119
|
+
def self.get: (String, **untyped) -> untyped
|
|
120
|
+
def self.post: (String, **untyped) -> untyped
|
|
121
|
+
|
|
122
|
+
def initialize: (**untyped) -> void
|
|
123
|
+
def generate_embedding: (String, **untyped) -> Array[Float]
|
|
124
|
+
def generate_response: (String, ?Array[untyped], **untyped) -> Hash[Symbol, untyped]
|
|
125
|
+
def health_check: () -> Hash[Symbol, untyped]
|
|
126
|
+
def list_models: () -> Array[Hash[Symbol, untyped]]
|
|
127
|
+
|
|
128
|
+
private
|
|
129
|
+
|
|
130
|
+
def validate_configuration!: () -> void
|
|
131
|
+
def validate_response!: (untyped, String) -> void
|
|
132
|
+
def provider_error: (String, untyped, operation: String, ?provider: untyped, ?error_class: untyped) -> Error
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
class HuggingFace < Base
|
|
136
|
+
FEATURE_EXTRACTION_PATH: String
|
|
137
|
+
CHAT_COMPLETIONS_PATH: String
|
|
138
|
+
MODEL_LIST_PATH: String
|
|
139
|
+
EMBEDDING_DIMENSIONS: Hash[String, Integer]
|
|
140
|
+
|
|
141
|
+
def self.base_uri: (String) -> untyped
|
|
142
|
+
def self.default_timeout: (Integer) -> untyped
|
|
143
|
+
def self.get: (String, **untyped) -> untyped
|
|
144
|
+
def self.post: (String, **untyped) -> untyped
|
|
145
|
+
|
|
146
|
+
def initialize: (**untyped) -> void
|
|
147
|
+
def generate_embedding: (String, **untyped) -> Array[Float]
|
|
148
|
+
def generate_response: (String, ?Array[untyped], **untyped) -> Hash[Symbol, untyped]
|
|
149
|
+
def health_check: () -> Hash[Symbol, untyped]
|
|
150
|
+
def list_models: () -> Array[Hash[Symbol, untyped]]
|
|
151
|
+
|
|
152
|
+
private
|
|
153
|
+
|
|
154
|
+
def validate_configuration!: () -> void
|
|
155
|
+
def validate_response!: (untyped, String) -> void
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
module Pgvector
|
|
160
|
+
class Store
|
|
161
|
+
METRICS: Hash[Symbol, String]
|
|
162
|
+
|
|
163
|
+
attr_reader dimensions: Integer
|
|
164
|
+
attr_reader table: String
|
|
165
|
+
|
|
166
|
+
def initialize: (connection: untyped, dimensions: Integer, ?table: String | Symbol) -> void
|
|
167
|
+
def install!: () -> void
|
|
168
|
+
def create_index!: (?metric: Symbol) -> void
|
|
169
|
+
def upsert: (id: untyped, embedding: Array[Numeric], provider: untyped, model: untyped, ?content: String?, ?metadata: Hash[untyped, untyped]) -> Hash[Symbol, untyped]
|
|
170
|
+
def search: (embedding: Array[Numeric], ?limit: Integer, ?metric: Symbol, ?provider: String | Symbol?, ?model: String?) -> Array[Hash[Symbol, untyped]]
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
class Configuration
|
|
175
|
+
DEFAULT_SENSITIVE_KEYS: Array[Symbol]
|
|
176
|
+
|
|
177
|
+
attr_accessor default_provider: Symbol
|
|
178
|
+
attr_accessor timeout: Integer
|
|
179
|
+
attr_accessor retry_attempts: Integer
|
|
180
|
+
attr_accessor retry_delay: Float
|
|
181
|
+
attr_accessor fallback_providers: Array[Symbol]
|
|
182
|
+
attr_reader sensitive_keys: Array[Symbol]
|
|
183
|
+
attr_reader providers: Hash[Symbol, Hash[Symbol, untyped]]
|
|
184
|
+
|
|
185
|
+
def initialize: () -> void
|
|
186
|
+
def sensitive_keys=: (Array[Symbol | String]) -> Array[Symbol]
|
|
187
|
+
def add_provider: (Symbol | String, Class, **untyped) -> void
|
|
188
|
+
def provider: (Symbol | String) -> untyped
|
|
189
|
+
def available_providers: () -> Array[Symbol]
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
class Client
|
|
193
|
+
attr_reader provider_name: Symbol
|
|
194
|
+
attr_reader provider: untyped
|
|
195
|
+
|
|
196
|
+
def initialize: (?Symbol, ?enable_fallback: bool) -> void
|
|
197
|
+
def generate_embedding: (String, **untyped) -> Array[Float]
|
|
198
|
+
def generate_response: (String, ?Array[untyped], **untyped) -> Hash[Symbol, untyped]
|
|
199
|
+
def health_check: () -> Hash[Symbol, untyped]
|
|
200
|
+
def available?: () -> bool
|
|
201
|
+
def provider_info: () -> Hash[Symbol, untyped]
|
|
202
|
+
|
|
203
|
+
private
|
|
204
|
+
|
|
205
|
+
def sanitize_options: (Hash[untyped, untyped]) -> Hash[untyped, untyped]
|
|
206
|
+
def with_error_handling: () { () -> untyped } -> untyped
|
|
207
|
+
def with_fallback_handling: (Symbol, *untyped, **untyped) -> untyped
|
|
208
|
+
def provider_for: (Symbol, Integer) -> untyped
|
|
209
|
+
def providers_to_try: () -> Array[Symbol]
|
|
210
|
+
def fallback_eligible?: (Error) -> bool
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
def self.configure: () { (Configuration) -> void } -> void
|
|
214
|
+
def self.configuration: () -> Configuration
|
|
215
|
+
def self.reset_configuration!: () -> Configuration
|
|
216
|
+
def self.client: (?Symbol, ?enable_fallback: bool) -> Client
|
|
217
|
+
def self.generate_embedding: (String, ?provider: Symbol, ?enable_fallback: bool, **untyped) -> Array[Float]
|
|
218
|
+
def self.generate_response: (String, ?Array[untyped], ?provider: Symbol, ?enable_fallback: bool, **untyped) -> Hash[Symbol, untyped]
|
|
219
|
+
def self.health_check: (?provider: Symbol) -> Hash[Symbol, untyped]
|
|
220
|
+
|
|
221
|
+
private
|
|
222
|
+
|
|
223
|
+
def self.configure_default_providers: (Configuration, untyped) -> void
|
|
4
224
|
end
|
metadata
CHANGED
|
@@ -1,228 +1,31 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: prescient
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ken C. Demanawa
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: exe
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
13
|
name: httparty
|
|
15
14
|
requirement: !ruby/object:Gem::Requirement
|
|
16
15
|
requirements:
|
|
17
|
-
- - "
|
|
16
|
+
- - ">="
|
|
18
17
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: 0.
|
|
18
|
+
version: 0.24.0
|
|
20
19
|
type: :runtime
|
|
21
20
|
prerelease: false
|
|
22
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
22
|
requirements:
|
|
24
|
-
- - "
|
|
23
|
+
- - ">="
|
|
25
24
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: 0.
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
requirements:
|
|
31
|
-
- - "~>"
|
|
32
|
-
- !ruby/object:Gem::Version
|
|
33
|
-
version: '1.6'
|
|
34
|
-
type: :development
|
|
35
|
-
prerelease: false
|
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
-
requirements:
|
|
38
|
-
- - "~>"
|
|
39
|
-
- !ruby/object:Gem::Version
|
|
40
|
-
version: '1.6'
|
|
41
|
-
- !ruby/object:Gem::Dependency
|
|
42
|
-
name: minitest
|
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
|
44
|
-
requirements:
|
|
45
|
-
- - "~>"
|
|
46
|
-
- !ruby/object:Gem::Version
|
|
47
|
-
version: '5.25'
|
|
48
|
-
type: :development
|
|
49
|
-
prerelease: false
|
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
-
requirements:
|
|
52
|
-
- - "~>"
|
|
53
|
-
- !ruby/object:Gem::Version
|
|
54
|
-
version: '5.25'
|
|
55
|
-
- !ruby/object:Gem::Dependency
|
|
56
|
-
name: mocha
|
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
|
58
|
-
requirements:
|
|
59
|
-
- - "~>"
|
|
60
|
-
- !ruby/object:Gem::Version
|
|
61
|
-
version: '2.7'
|
|
62
|
-
type: :development
|
|
63
|
-
prerelease: false
|
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
-
requirements:
|
|
66
|
-
- - "~>"
|
|
67
|
-
- !ruby/object:Gem::Version
|
|
68
|
-
version: '2.7'
|
|
69
|
-
- !ruby/object:Gem::Dependency
|
|
70
|
-
name: webmock
|
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
|
72
|
-
requirements:
|
|
73
|
-
- - "~>"
|
|
74
|
-
- !ruby/object:Gem::Version
|
|
75
|
-
version: '3.25'
|
|
76
|
-
type: :development
|
|
77
|
-
prerelease: false
|
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
-
requirements:
|
|
80
|
-
- - "~>"
|
|
81
|
-
- !ruby/object:Gem::Version
|
|
82
|
-
version: '3.25'
|
|
83
|
-
- !ruby/object:Gem::Dependency
|
|
84
|
-
name: vcr
|
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
|
86
|
-
requirements:
|
|
87
|
-
- - "~>"
|
|
88
|
-
- !ruby/object:Gem::Version
|
|
89
|
-
version: '6.3'
|
|
90
|
-
type: :development
|
|
91
|
-
prerelease: false
|
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
-
requirements:
|
|
94
|
-
- - "~>"
|
|
95
|
-
- !ruby/object:Gem::Version
|
|
96
|
-
version: '6.3'
|
|
97
|
-
- !ruby/object:Gem::Dependency
|
|
98
|
-
name: rubocop
|
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
|
100
|
-
requirements:
|
|
101
|
-
- - "~>"
|
|
102
|
-
- !ruby/object:Gem::Version
|
|
103
|
-
version: '1.79'
|
|
104
|
-
type: :development
|
|
105
|
-
prerelease: false
|
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
107
|
-
requirements:
|
|
108
|
-
- - "~>"
|
|
109
|
-
- !ruby/object:Gem::Version
|
|
110
|
-
version: '1.79'
|
|
111
|
-
- !ruby/object:Gem::Dependency
|
|
112
|
-
name: rubocop-minitest
|
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
|
114
|
-
requirements:
|
|
115
|
-
- - "~>"
|
|
116
|
-
- !ruby/object:Gem::Version
|
|
117
|
-
version: 0.38.1
|
|
118
|
-
type: :development
|
|
119
|
-
prerelease: false
|
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
121
|
-
requirements:
|
|
122
|
-
- - "~>"
|
|
123
|
-
- !ruby/object:Gem::Version
|
|
124
|
-
version: 0.38.1
|
|
125
|
-
- !ruby/object:Gem::Dependency
|
|
126
|
-
name: rubocop-performance
|
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
|
128
|
-
requirements:
|
|
129
|
-
- - "~>"
|
|
130
|
-
- !ruby/object:Gem::Version
|
|
131
|
-
version: '1.25'
|
|
132
|
-
type: :development
|
|
133
|
-
prerelease: false
|
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
135
|
-
requirements:
|
|
136
|
-
- - "~>"
|
|
137
|
-
- !ruby/object:Gem::Version
|
|
138
|
-
version: '1.25'
|
|
139
|
-
- !ruby/object:Gem::Dependency
|
|
140
|
-
name: rubocop-rake
|
|
141
|
-
requirement: !ruby/object:Gem::Requirement
|
|
142
|
-
requirements:
|
|
143
|
-
- - "~>"
|
|
144
|
-
- !ruby/object:Gem::Version
|
|
145
|
-
version: 0.7.1
|
|
146
|
-
type: :development
|
|
147
|
-
prerelease: false
|
|
148
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
149
|
-
requirements:
|
|
150
|
-
- - "~>"
|
|
151
|
-
- !ruby/object:Gem::Version
|
|
152
|
-
version: 0.7.1
|
|
153
|
-
- !ruby/object:Gem::Dependency
|
|
154
|
-
name: simplecov
|
|
155
|
-
requirement: !ruby/object:Gem::Requirement
|
|
156
|
-
requirements:
|
|
157
|
-
- - "~>"
|
|
158
|
-
- !ruby/object:Gem::Version
|
|
159
|
-
version: 0.22.0
|
|
160
|
-
type: :development
|
|
161
|
-
prerelease: false
|
|
162
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
163
|
-
requirements:
|
|
164
|
-
- - "~>"
|
|
165
|
-
- !ruby/object:Gem::Version
|
|
166
|
-
version: 0.22.0
|
|
167
|
-
- !ruby/object:Gem::Dependency
|
|
168
|
-
name: rake
|
|
169
|
-
requirement: !ruby/object:Gem::Requirement
|
|
170
|
-
requirements:
|
|
171
|
-
- - "~>"
|
|
172
|
-
- !ruby/object:Gem::Version
|
|
173
|
-
version: '13.3'
|
|
174
|
-
type: :development
|
|
175
|
-
prerelease: false
|
|
176
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
177
|
-
requirements:
|
|
178
|
-
- - "~>"
|
|
179
|
-
- !ruby/object:Gem::Version
|
|
180
|
-
version: '13.3'
|
|
181
|
-
- !ruby/object:Gem::Dependency
|
|
182
|
-
name: irb
|
|
183
|
-
requirement: !ruby/object:Gem::Requirement
|
|
184
|
-
requirements:
|
|
185
|
-
- - "~>"
|
|
186
|
-
- !ruby/object:Gem::Version
|
|
187
|
-
version: '1.15'
|
|
188
|
-
type: :development
|
|
189
|
-
prerelease: false
|
|
190
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
191
|
-
requirements:
|
|
192
|
-
- - "~>"
|
|
193
|
-
- !ruby/object:Gem::Version
|
|
194
|
-
version: '1.15'
|
|
195
|
-
- !ruby/object:Gem::Dependency
|
|
196
|
-
name: yard
|
|
197
|
-
requirement: !ruby/object:Gem::Requirement
|
|
198
|
-
requirements:
|
|
199
|
-
- - "~>"
|
|
200
|
-
- !ruby/object:Gem::Version
|
|
201
|
-
version: 0.9.37
|
|
202
|
-
type: :development
|
|
203
|
-
prerelease: false
|
|
204
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
205
|
-
requirements:
|
|
206
|
-
- - "~>"
|
|
207
|
-
- !ruby/object:Gem::Version
|
|
208
|
-
version: 0.9.37
|
|
209
|
-
- !ruby/object:Gem::Dependency
|
|
210
|
-
name: kramdown
|
|
211
|
-
requirement: !ruby/object:Gem::Requirement
|
|
212
|
-
requirements:
|
|
213
|
-
- - "~>"
|
|
214
|
-
- !ruby/object:Gem::Version
|
|
215
|
-
version: '2.5'
|
|
216
|
-
type: :development
|
|
217
|
-
prerelease: false
|
|
218
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
219
|
-
requirements:
|
|
220
|
-
- - "~>"
|
|
221
|
-
- !ruby/object:Gem::Version
|
|
222
|
-
version: '2.5'
|
|
223
|
-
description: Prescient provides a unified interface for AI providers including local
|
|
224
|
-
Ollama, Anthropic Claude, OpenAI GPT, and HuggingFace models. Built for AI applications
|
|
225
|
-
with error handling, health monitoring, and provider switching.
|
|
25
|
+
version: 0.24.0
|
|
26
|
+
description: "Prescient provides a consistent interface for AI providers including
|
|
27
|
+
OpenAI, Anthropic, \nOllama, and Hugging Face, with provider selection, retries,
|
|
28
|
+
health checks, and automatic fallback.\n"
|
|
226
29
|
email:
|
|
227
30
|
- kenneth.c.demanawa@gmail.com
|
|
228
31
|
executables: []
|
|
@@ -233,13 +36,13 @@ files:
|
|
|
233
36
|
- ".rubocop.yml"
|
|
234
37
|
- ".yardopts"
|
|
235
38
|
- CHANGELOG.md
|
|
236
|
-
- CHANGELOG.pdf
|
|
237
39
|
- CODE_OF_CONDUCT.md
|
|
238
40
|
- Dockerfile.example
|
|
239
41
|
- INTEGRATION_GUIDE.md
|
|
240
42
|
- LICENSE.txt
|
|
241
43
|
- README.md
|
|
242
44
|
- Rakefile
|
|
45
|
+
- Steepfile
|
|
243
46
|
- VECTOR_SEARCH_GUIDE.md
|
|
244
47
|
- db/init/01_enable_pgvector.sql
|
|
245
48
|
- db/init/02_create_schema.sql
|
|
@@ -247,6 +50,7 @@ files:
|
|
|
247
50
|
- db/init/04_insert_sample_data.sql
|
|
248
51
|
- db/migrate/001_create_prescient_tables.rb
|
|
249
52
|
- docker-compose.yml
|
|
53
|
+
- examples/README.md
|
|
250
54
|
- examples/basic_usage.rb
|
|
251
55
|
- examples/custom_contexts.rb
|
|
252
56
|
- examples/custom_prompts.rb
|
|
@@ -254,23 +58,24 @@ files:
|
|
|
254
58
|
- lib/prescient.rb
|
|
255
59
|
- lib/prescient/base.rb
|
|
256
60
|
- lib/prescient/client.rb
|
|
61
|
+
- lib/prescient/errors.rb
|
|
62
|
+
- lib/prescient/pgvector.rb
|
|
257
63
|
- lib/prescient/provider/anthropic.rb
|
|
258
64
|
- lib/prescient/provider/huggingface.rb
|
|
259
65
|
- lib/prescient/provider/ollama.rb
|
|
260
66
|
- lib/prescient/provider/openai.rb
|
|
261
67
|
- lib/prescient/version.rb
|
|
262
|
-
- prescient.gemspec
|
|
263
68
|
- scripts/setup-ollama-models.sh
|
|
264
69
|
- sig/prescient.rbs
|
|
265
|
-
homepage: https://github.
|
|
70
|
+
homepage: https://kanutocd.github.io/prescient
|
|
266
71
|
licenses:
|
|
267
72
|
- MIT
|
|
268
73
|
metadata:
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
74
|
+
homepage_uri: https://kanutocd.github.io/prescient
|
|
75
|
+
source_code_uri: https://github.com/kanutocd/prescient
|
|
76
|
+
changelog_uri: https://github.com/kanutocd/prescient/blob/main/CHANGELOG.md
|
|
77
|
+
documentation_uri: https://kanutocd.github.io/prescient
|
|
78
|
+
rubygems_mfa_required: 'true'
|
|
274
79
|
rdoc_options: []
|
|
275
80
|
require_paths:
|
|
276
81
|
- lib
|
|
@@ -285,8 +90,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
285
90
|
- !ruby/object:Gem::Version
|
|
286
91
|
version: '0'
|
|
287
92
|
requirements: []
|
|
288
|
-
rubygems_version:
|
|
289
|
-
signing_key:
|
|
93
|
+
rubygems_version: 4.0.16
|
|
290
94
|
specification_version: 4
|
|
291
|
-
summary:
|
|
95
|
+
summary: A boring AI provider abstraction for Ruby
|
|
292
96
|
test_files: []
|
data/CHANGELOG.pdf
DELETED
|
Binary file
|
data/prescient.gemspec
DELETED
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require_relative "lib/prescient/version"
|
|
4
|
-
|
|
5
|
-
Gem::Specification.new do |spec|
|
|
6
|
-
spec.name = "prescient"
|
|
7
|
-
spec.version = Prescient::VERSION
|
|
8
|
-
spec.authors = ["Ken C. Demanawa"]
|
|
9
|
-
spec.email = ["kenneth.c.demanawa@gmail.com"]
|
|
10
|
-
|
|
11
|
-
spec.summary = "Prescient AI provider abstraction for Ruby applications"
|
|
12
|
-
spec.description = "Prescient provides a unified interface for AI providers including local Ollama, Anthropic Claude, OpenAI GPT, and HuggingFace models. Built for AI applications with error handling, health monitoring, and provider switching."
|
|
13
|
-
spec.homepage = "https://github.com/yourcompany/prescient"
|
|
14
|
-
spec.license = "MIT"
|
|
15
|
-
spec.required_ruby_version = ">= 3.1.0"
|
|
16
|
-
|
|
17
|
-
spec.metadata["allowed_push_host"] = "https://rubygems.org"
|
|
18
|
-
spec.metadata["homepage_uri"] = spec.homepage
|
|
19
|
-
spec.metadata["source_code_uri"] = "https://github.com/yourcompany/prescient"
|
|
20
|
-
spec.metadata["changelog_uri"] = "https://github.com/yourcompany/prescient/blob/main/CHANGELOG.md"
|
|
21
|
-
|
|
22
|
-
# Specify which files should be added to the gem when it is released.
|
|
23
|
-
spec.files = Dir.chdir(__dir__) do
|
|
24
|
-
`git ls-files -z`.split("\x0").reject do |f|
|
|
25
|
-
(File.expand_path(f) == __FILE__) ||
|
|
26
|
-
f.start_with?(*%w[bin/ test/ spec/ features/ .git .github appveyor Gemfile])
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
spec.bindir = "exe"
|
|
30
|
-
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
|
|
31
|
-
spec.require_paths = ["lib"]
|
|
32
|
-
|
|
33
|
-
# Runtime dependencies
|
|
34
|
-
spec.add_dependency "httparty", "~> 0.23.1"
|
|
35
|
-
|
|
36
|
-
# Optional dependencies for vector database integration
|
|
37
|
-
spec.add_development_dependency "pg", "~> 1.6" # PostgreSQL adapter for pgvector integration
|
|
38
|
-
|
|
39
|
-
# Development dependencies
|
|
40
|
-
spec.add_development_dependency "minitest", "~> 5.25"
|
|
41
|
-
spec.add_development_dependency "mocha", "~> 2.7"
|
|
42
|
-
spec.add_development_dependency "webmock", "~> 3.25"
|
|
43
|
-
spec.add_development_dependency "vcr", "~> 6.3"
|
|
44
|
-
spec.add_development_dependency "rubocop", "~> 1.79"
|
|
45
|
-
spec.add_development_dependency "rubocop-minitest", "~> 0.38.1"
|
|
46
|
-
spec.add_development_dependency "rubocop-performance", "~> 1.25"
|
|
47
|
-
spec.add_development_dependency "rubocop-rake", "~> 0.7.1"
|
|
48
|
-
spec.add_development_dependency "simplecov", "~> 0.22.0"
|
|
49
|
-
spec.add_development_dependency "rake", "~> 13.3"
|
|
50
|
-
spec.add_development_dependency "irb", "~> 1.15"
|
|
51
|
-
spec.add_development_dependency "yard", "~> 0.9.37"
|
|
52
|
-
spec.add_development_dependency "kramdown", "~> 2.5"
|
|
53
|
-
end
|