prescient 0.2.0 → 0.4.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 +53 -4
- data/INTEGRATION_GUIDE.md +27 -29
- data/LICENSE.txt +1 -1
- data/README.md +217 -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/exe/prescient +7 -0
- data/lib/prescient/base.rb +81 -26
- data/lib/prescient/cli.rb +287 -0
- data/lib/prescient/client.rb +85 -39
- data/lib/prescient/errors.rb +51 -0
- data/lib/prescient/pgvector.rb +194 -0
- data/lib/prescient/provider/anthropic.rb +57 -56
- data/lib/prescient/provider/huggingface.rb +79 -78
- data/lib/prescient/provider/ollama.rb +48 -37
- data/lib/prescient/provider/openai.rb +43 -35
- data/lib/prescient/version.rb +2 -1
- data/lib/prescient.rb +86 -63
- data/scripts/setup-ollama-models.sh +2 -2
- data/sig/prescient.rbs +233 -1
- metadata +25 -218
- data/CHANGELOG.pdf +0 -0
- data/prescient.gemspec +0 -53
data/sig/prescient.rbs
CHANGED
|
@@ -1,4 +1,236 @@
|
|
|
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, ?provider_options: Hash[Symbol, untyped]) -> 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 provider_with_options: (Symbol, Hash[Symbol, untyped]) -> untyped
|
|
207
|
+
def with_error_handling: () { () -> untyped } -> untyped
|
|
208
|
+
def with_fallback_handling: (Symbol, *untyped, **untyped) -> untyped
|
|
209
|
+
def provider_for: (Symbol, Integer) -> untyped
|
|
210
|
+
def providers_to_try: () -> Array[Symbol]
|
|
211
|
+
def fallback_eligible?: (Error) -> bool
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
class CLI
|
|
215
|
+
FORMATS: Array[String]
|
|
216
|
+
|
|
217
|
+
class UsageError < StandardError
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
def self.run: (Array[String], ?input: IO, ?output: IO, ?errors: IO) -> Integer
|
|
221
|
+
def initialize: (Array[String], input: IO, output: IO, errors: IO) -> void
|
|
222
|
+
def run: () -> Integer
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
def self.configure: () { (Configuration) -> void } -> void
|
|
226
|
+
def self.configuration: () -> Configuration
|
|
227
|
+
def self.reset_configuration!: () -> Configuration
|
|
228
|
+
def self.client: (?Symbol, ?enable_fallback: bool, ?provider_options: Hash[Symbol, untyped]) -> Client
|
|
229
|
+
def self.generate_embedding: (String, ?provider: Symbol, ?enable_fallback: bool, **untyped) -> Array[Float]
|
|
230
|
+
def self.generate_response: (String, ?Array[untyped], ?provider: Symbol, ?enable_fallback: bool, **untyped) -> Hash[Symbol, untyped]
|
|
231
|
+
def self.health_check: (?provider: Symbol) -> Hash[Symbol, untyped]
|
|
232
|
+
|
|
233
|
+
private
|
|
234
|
+
|
|
235
|
+
def self.configure_default_providers: (Configuration, untyped) -> void
|
|
4
236
|
end
|
metadata
CHANGED
|
@@ -1,231 +1,35 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: prescient
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.4.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
|
-
executables:
|
|
31
|
+
executables:
|
|
32
|
+
- prescient
|
|
229
33
|
extensions: []
|
|
230
34
|
extra_rdoc_files: []
|
|
231
35
|
files:
|
|
@@ -233,13 +37,13 @@ files:
|
|
|
233
37
|
- ".rubocop.yml"
|
|
234
38
|
- ".yardopts"
|
|
235
39
|
- CHANGELOG.md
|
|
236
|
-
- CHANGELOG.pdf
|
|
237
40
|
- CODE_OF_CONDUCT.md
|
|
238
41
|
- Dockerfile.example
|
|
239
42
|
- INTEGRATION_GUIDE.md
|
|
240
43
|
- LICENSE.txt
|
|
241
44
|
- README.md
|
|
242
45
|
- Rakefile
|
|
46
|
+
- Steepfile
|
|
243
47
|
- VECTOR_SEARCH_GUIDE.md
|
|
244
48
|
- db/init/01_enable_pgvector.sql
|
|
245
49
|
- db/init/02_create_schema.sql
|
|
@@ -247,30 +51,34 @@ files:
|
|
|
247
51
|
- db/init/04_insert_sample_data.sql
|
|
248
52
|
- db/migrate/001_create_prescient_tables.rb
|
|
249
53
|
- docker-compose.yml
|
|
54
|
+
- examples/README.md
|
|
250
55
|
- examples/basic_usage.rb
|
|
251
56
|
- examples/custom_contexts.rb
|
|
252
57
|
- examples/custom_prompts.rb
|
|
253
58
|
- examples/vector_search.rb
|
|
59
|
+
- exe/prescient
|
|
254
60
|
- lib/prescient.rb
|
|
255
61
|
- lib/prescient/base.rb
|
|
62
|
+
- lib/prescient/cli.rb
|
|
256
63
|
- lib/prescient/client.rb
|
|
64
|
+
- lib/prescient/errors.rb
|
|
65
|
+
- lib/prescient/pgvector.rb
|
|
257
66
|
- lib/prescient/provider/anthropic.rb
|
|
258
67
|
- lib/prescient/provider/huggingface.rb
|
|
259
68
|
- lib/prescient/provider/ollama.rb
|
|
260
69
|
- lib/prescient/provider/openai.rb
|
|
261
70
|
- lib/prescient/version.rb
|
|
262
|
-
- prescient.gemspec
|
|
263
71
|
- scripts/setup-ollama-models.sh
|
|
264
72
|
- sig/prescient.rbs
|
|
265
|
-
homepage: https://github.
|
|
73
|
+
homepage: https://kanutocd.github.io/prescient
|
|
266
74
|
licenses:
|
|
267
75
|
- MIT
|
|
268
76
|
metadata:
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
77
|
+
homepage_uri: https://kanutocd.github.io/prescient
|
|
78
|
+
source_code_uri: https://github.com/kanutocd/prescient
|
|
79
|
+
changelog_uri: https://github.com/kanutocd/prescient/blob/main/CHANGELOG.md
|
|
80
|
+
documentation_uri: https://kanutocd.github.io/prescient
|
|
81
|
+
rubygems_mfa_required: 'true'
|
|
274
82
|
rdoc_options: []
|
|
275
83
|
require_paths:
|
|
276
84
|
- lib
|
|
@@ -285,8 +93,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
285
93
|
- !ruby/object:Gem::Version
|
|
286
94
|
version: '0'
|
|
287
95
|
requirements: []
|
|
288
|
-
rubygems_version:
|
|
289
|
-
signing_key:
|
|
96
|
+
rubygems_version: 4.0.16
|
|
290
97
|
specification_version: 4
|
|
291
|
-
summary:
|
|
98
|
+
summary: A boring AI provider abstraction for Ruby
|
|
292
99
|
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
|