| 
									
										
										
										
											2023-03-07 16:14:39 -03:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-14 16:03:50 -03:00
										 |  |  | module ::DiscourseAi | 
					
						
							| 
									
										
										
										
											2023-03-07 16:14:39 -03:00
										 |  |  |   module Inference | 
					
						
							| 
									
										
										
										
											2023-03-15 17:02:20 -03:00
										 |  |  |     class OpenAiEmbeddings | 
					
						
							| 
									
										
										
										
											2023-03-07 16:14:39 -03:00
										 |  |  |       def self.perform!(content, model = nil) | 
					
						
							|  |  |  |         headers = { | 
					
						
							|  |  |  |           "Authorization" => "Bearer #{SiteSetting.ai_openai_api_key}", | 
					
						
							|  |  |  |           "Content-Type" => "application/json", | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         model ||= "text-embedding-ada-002" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         response = | 
					
						
							|  |  |  |           Faraday.post( | 
					
						
							|  |  |  |             "https://api.openai.com/v1/embeddings", | 
					
						
							|  |  |  |             { model: model, input: content }.to_json, | 
					
						
							|  |  |  |             headers, | 
					
						
							|  |  |  |           ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         raise Net::HTTPBadResponse unless response.status == 200
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         JSON.parse(response.body, symbolize_names: true) | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end |