prescient 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/.rubocop.yml +6 -4
- data/.yardopts +11 -0
- data/CHANGELOG.md +101 -0
- data/INTEGRATION_GUIDE.md +361 -0
- data/LICENSE.txt +1 -1
- data/README.md +217 -100
- data/Rakefile +84 -8
- data/Steepfile +17 -0
- data/VECTOR_SEARCH_GUIDE.md +74 -47
- 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 +187 -28
- data/lib/prescient/client.rb +169 -31
- 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 +77 -79
- 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 +160 -36
- data/scripts/setup-ollama-models.sh +2 -2
- data/sig/prescient.rbs +221 -1
- metadata +23 -184
- data/prescient.gemspec +0 -51
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,7 +1,7 @@
|
|
|
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
|
|
@@ -11,189 +11,21 @@ date: 1980-01-02 00:00:00.000000000 Z
|
|
|
11
11
|
dependencies:
|
|
12
12
|
- !ruby/object:Gem::Dependency
|
|
13
13
|
name: httparty
|
|
14
|
-
requirement: !ruby/object:Gem::Requirement
|
|
15
|
-
requirements:
|
|
16
|
-
- - "~>"
|
|
17
|
-
- !ruby/object:Gem::Version
|
|
18
|
-
version: 0.22.0
|
|
19
|
-
type: :runtime
|
|
20
|
-
prerelease: false
|
|
21
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
-
requirements:
|
|
23
|
-
- - "~>"
|
|
24
|
-
- !ruby/object:Gem::Version
|
|
25
|
-
version: 0.22.0
|
|
26
|
-
- !ruby/object:Gem::Dependency
|
|
27
|
-
name: pg
|
|
28
|
-
requirement: !ruby/object:Gem::Requirement
|
|
29
|
-
requirements:
|
|
30
|
-
- - "~>"
|
|
31
|
-
- !ruby/object:Gem::Version
|
|
32
|
-
version: '1.5'
|
|
33
|
-
type: :development
|
|
34
|
-
prerelease: false
|
|
35
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
36
|
-
requirements:
|
|
37
|
-
- - "~>"
|
|
38
|
-
- !ruby/object:Gem::Version
|
|
39
|
-
version: '1.5'
|
|
40
|
-
- !ruby/object:Gem::Dependency
|
|
41
|
-
name: minitest
|
|
42
|
-
requirement: !ruby/object:Gem::Requirement
|
|
43
|
-
requirements:
|
|
44
|
-
- - "~>"
|
|
45
|
-
- !ruby/object:Gem::Version
|
|
46
|
-
version: '5.20'
|
|
47
|
-
type: :development
|
|
48
|
-
prerelease: false
|
|
49
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
50
|
-
requirements:
|
|
51
|
-
- - "~>"
|
|
52
|
-
- !ruby/object:Gem::Version
|
|
53
|
-
version: '5.20'
|
|
54
|
-
- !ruby/object:Gem::Dependency
|
|
55
|
-
name: mocha
|
|
56
|
-
requirement: !ruby/object:Gem::Requirement
|
|
57
|
-
requirements:
|
|
58
|
-
- - "~>"
|
|
59
|
-
- !ruby/object:Gem::Version
|
|
60
|
-
version: '2.1'
|
|
61
|
-
type: :development
|
|
62
|
-
prerelease: false
|
|
63
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
64
|
-
requirements:
|
|
65
|
-
- - "~>"
|
|
66
|
-
- !ruby/object:Gem::Version
|
|
67
|
-
version: '2.1'
|
|
68
|
-
- !ruby/object:Gem::Dependency
|
|
69
|
-
name: webmock
|
|
70
|
-
requirement: !ruby/object:Gem::Requirement
|
|
71
|
-
requirements:
|
|
72
|
-
- - "~>"
|
|
73
|
-
- !ruby/object:Gem::Version
|
|
74
|
-
version: '3.18'
|
|
75
|
-
type: :development
|
|
76
|
-
prerelease: false
|
|
77
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
78
|
-
requirements:
|
|
79
|
-
- - "~>"
|
|
80
|
-
- !ruby/object:Gem::Version
|
|
81
|
-
version: '3.18'
|
|
82
|
-
- !ruby/object:Gem::Dependency
|
|
83
|
-
name: vcr
|
|
84
|
-
requirement: !ruby/object:Gem::Requirement
|
|
85
|
-
requirements:
|
|
86
|
-
- - "~>"
|
|
87
|
-
- !ruby/object:Gem::Version
|
|
88
|
-
version: '6.1'
|
|
89
|
-
type: :development
|
|
90
|
-
prerelease: false
|
|
91
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
92
|
-
requirements:
|
|
93
|
-
- - "~>"
|
|
94
|
-
- !ruby/object:Gem::Version
|
|
95
|
-
version: '6.1'
|
|
96
|
-
- !ruby/object:Gem::Dependency
|
|
97
|
-
name: rubocop
|
|
98
|
-
requirement: !ruby/object:Gem::Requirement
|
|
99
|
-
requirements:
|
|
100
|
-
- - "~>"
|
|
101
|
-
- !ruby/object:Gem::Version
|
|
102
|
-
version: '1.50'
|
|
103
|
-
type: :development
|
|
104
|
-
prerelease: false
|
|
105
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
106
|
-
requirements:
|
|
107
|
-
- - "~>"
|
|
108
|
-
- !ruby/object:Gem::Version
|
|
109
|
-
version: '1.50'
|
|
110
|
-
- !ruby/object:Gem::Dependency
|
|
111
|
-
name: rubocop-minitest
|
|
112
|
-
requirement: !ruby/object:Gem::Requirement
|
|
113
|
-
requirements:
|
|
114
|
-
- - "~>"
|
|
115
|
-
- !ruby/object:Gem::Version
|
|
116
|
-
version: '0.35'
|
|
117
|
-
type: :development
|
|
118
|
-
prerelease: false
|
|
119
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
120
|
-
requirements:
|
|
121
|
-
- - "~>"
|
|
122
|
-
- !ruby/object:Gem::Version
|
|
123
|
-
version: '0.35'
|
|
124
|
-
- !ruby/object:Gem::Dependency
|
|
125
|
-
name: rubocop-performance
|
|
126
|
-
requirement: !ruby/object:Gem::Requirement
|
|
127
|
-
requirements:
|
|
128
|
-
- - "~>"
|
|
129
|
-
- !ruby/object:Gem::Version
|
|
130
|
-
version: '1.19'
|
|
131
|
-
type: :development
|
|
132
|
-
prerelease: false
|
|
133
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
134
|
-
requirements:
|
|
135
|
-
- - "~>"
|
|
136
|
-
- !ruby/object:Gem::Version
|
|
137
|
-
version: '1.19'
|
|
138
|
-
- !ruby/object:Gem::Dependency
|
|
139
|
-
name: rubocop-rake
|
|
140
|
-
requirement: !ruby/object:Gem::Requirement
|
|
141
|
-
requirements:
|
|
142
|
-
- - "~>"
|
|
143
|
-
- !ruby/object:Gem::Version
|
|
144
|
-
version: '0.6'
|
|
145
|
-
type: :development
|
|
146
|
-
prerelease: false
|
|
147
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
148
|
-
requirements:
|
|
149
|
-
- - "~>"
|
|
150
|
-
- !ruby/object:Gem::Version
|
|
151
|
-
version: '0.6'
|
|
152
|
-
- !ruby/object:Gem::Dependency
|
|
153
|
-
name: simplecov
|
|
154
|
-
requirement: !ruby/object:Gem::Requirement
|
|
155
|
-
requirements:
|
|
156
|
-
- - "~>"
|
|
157
|
-
- !ruby/object:Gem::Version
|
|
158
|
-
version: '0.22'
|
|
159
|
-
type: :development
|
|
160
|
-
prerelease: false
|
|
161
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
162
|
-
requirements:
|
|
163
|
-
- - "~>"
|
|
164
|
-
- !ruby/object:Gem::Version
|
|
165
|
-
version: '0.22'
|
|
166
|
-
- !ruby/object:Gem::Dependency
|
|
167
|
-
name: rake
|
|
168
|
-
requirement: !ruby/object:Gem::Requirement
|
|
169
|
-
requirements:
|
|
170
|
-
- - "~>"
|
|
171
|
-
- !ruby/object:Gem::Version
|
|
172
|
-
version: '13.0'
|
|
173
|
-
type: :development
|
|
174
|
-
prerelease: false
|
|
175
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
176
|
-
requirements:
|
|
177
|
-
- - "~>"
|
|
178
|
-
- !ruby/object:Gem::Version
|
|
179
|
-
version: '13.0'
|
|
180
|
-
- !ruby/object:Gem::Dependency
|
|
181
|
-
name: irb
|
|
182
14
|
requirement: !ruby/object:Gem::Requirement
|
|
183
15
|
requirements:
|
|
184
16
|
- - ">="
|
|
185
17
|
- !ruby/object:Gem::Version
|
|
186
|
-
version:
|
|
187
|
-
type: :
|
|
18
|
+
version: 0.24.0
|
|
19
|
+
type: :runtime
|
|
188
20
|
prerelease: false
|
|
189
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
190
22
|
requirements:
|
|
191
23
|
- - ">="
|
|
192
24
|
- !ruby/object:Gem::Version
|
|
193
|
-
version:
|
|
194
|
-
description: Prescient provides a
|
|
195
|
-
|
|
196
|
-
|
|
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"
|
|
197
29
|
email:
|
|
198
30
|
- kenneth.c.demanawa@gmail.com
|
|
199
31
|
executables: []
|
|
@@ -202,11 +34,15 @@ extra_rdoc_files: []
|
|
|
202
34
|
files:
|
|
203
35
|
- ".env.example"
|
|
204
36
|
- ".rubocop.yml"
|
|
37
|
+
- ".yardopts"
|
|
38
|
+
- CHANGELOG.md
|
|
205
39
|
- CODE_OF_CONDUCT.md
|
|
206
40
|
- Dockerfile.example
|
|
41
|
+
- INTEGRATION_GUIDE.md
|
|
207
42
|
- LICENSE.txt
|
|
208
43
|
- README.md
|
|
209
44
|
- Rakefile
|
|
45
|
+
- Steepfile
|
|
210
46
|
- VECTOR_SEARCH_GUIDE.md
|
|
211
47
|
- db/init/01_enable_pgvector.sql
|
|
212
48
|
- db/init/02_create_schema.sql
|
|
@@ -214,6 +50,7 @@ files:
|
|
|
214
50
|
- db/init/04_insert_sample_data.sql
|
|
215
51
|
- db/migrate/001_create_prescient_tables.rb
|
|
216
52
|
- docker-compose.yml
|
|
53
|
+
- examples/README.md
|
|
217
54
|
- examples/basic_usage.rb
|
|
218
55
|
- examples/custom_contexts.rb
|
|
219
56
|
- examples/custom_prompts.rb
|
|
@@ -221,22 +58,24 @@ files:
|
|
|
221
58
|
- lib/prescient.rb
|
|
222
59
|
- lib/prescient/base.rb
|
|
223
60
|
- lib/prescient/client.rb
|
|
61
|
+
- lib/prescient/errors.rb
|
|
62
|
+
- lib/prescient/pgvector.rb
|
|
224
63
|
- lib/prescient/provider/anthropic.rb
|
|
225
64
|
- lib/prescient/provider/huggingface.rb
|
|
226
65
|
- lib/prescient/provider/ollama.rb
|
|
227
66
|
- lib/prescient/provider/openai.rb
|
|
228
67
|
- lib/prescient/version.rb
|
|
229
|
-
- prescient.gemspec
|
|
230
68
|
- scripts/setup-ollama-models.sh
|
|
231
69
|
- sig/prescient.rbs
|
|
232
|
-
homepage: https://github.
|
|
70
|
+
homepage: https://kanutocd.github.io/prescient
|
|
233
71
|
licenses:
|
|
234
72
|
- MIT
|
|
235
73
|
metadata:
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
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'
|
|
240
79
|
rdoc_options: []
|
|
241
80
|
require_paths:
|
|
242
81
|
- lib
|
|
@@ -244,14 +83,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
244
83
|
requirements:
|
|
245
84
|
- - ">="
|
|
246
85
|
- !ruby/object:Gem::Version
|
|
247
|
-
version: 3.
|
|
86
|
+
version: 3.1.0
|
|
248
87
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
249
88
|
requirements:
|
|
250
89
|
- - ">="
|
|
251
90
|
- !ruby/object:Gem::Version
|
|
252
91
|
version: '0'
|
|
253
92
|
requirements: []
|
|
254
|
-
rubygems_version:
|
|
93
|
+
rubygems_version: 4.0.16
|
|
255
94
|
specification_version: 4
|
|
256
|
-
summary:
|
|
95
|
+
summary: A boring AI provider abstraction for Ruby
|
|
257
96
|
test_files: []
|
data/prescient.gemspec
DELETED
|
@@ -1,51 +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.0.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.22.0"
|
|
35
|
-
|
|
36
|
-
# Optional dependencies for vector database integration
|
|
37
|
-
spec.add_development_dependency "pg", "~> 1.5" # PostgreSQL adapter for pgvector integration
|
|
38
|
-
|
|
39
|
-
# Development dependencies
|
|
40
|
-
spec.add_development_dependency "minitest", "~> 5.20"
|
|
41
|
-
spec.add_development_dependency "mocha", "~> 2.1"
|
|
42
|
-
spec.add_development_dependency "webmock", "~> 3.18"
|
|
43
|
-
spec.add_development_dependency "vcr", "~> 6.1"
|
|
44
|
-
spec.add_development_dependency "rubocop", "~> 1.50"
|
|
45
|
-
spec.add_development_dependency "rubocop-minitest", "~> 0.35"
|
|
46
|
-
spec.add_development_dependency "rubocop-performance", "~> 1.19"
|
|
47
|
-
spec.add_development_dependency "rubocop-rake", "~> 0.6"
|
|
48
|
-
spec.add_development_dependency "simplecov", "~> 0.22"
|
|
49
|
-
spec.add_development_dependency "rake", "~> 13.0"
|
|
50
|
-
spec.add_development_dependency "irb"
|
|
51
|
-
end
|