Class: OllamaChat::Chat

Inherits:
Object
  • Object
show all
Includes:
Clipboard, Dialog, DocumentCache, History, Information, MessageType, ModelHandling, Parsing, ServerSocket, SourceFetching, Switches, WebSearching, Term::ANSIColor, Tins::GO
Defined in:
lib/ollama_chat/chat.rb

Class Attribute Summary collapse

Instance Attribute Summary collapse

Attributes included from ServerSocket

#server_socket_message

Attributes included from Dialog

#document_policy

Attributes included from Switches

#embedding, #embedding_enabled, #embedding_paused, #location, #markdown, #stream, #voice

Instance Method Summary collapse

Methods included from ServerSocket

#init_server_socket, runtime_dir, send_to_server_socket, server_socket_path

Methods included from History

#chat_history_filename, #clear_history, #init_chat_history, #save_history

Methods included from MessageType

#message_type

Methods included from Clipboard

#copy_to_clipboard, #paste_from_input

Methods included from Information

#collection_stats, #display_chat_help, #info, #server_version, #usage, #version

Methods included from Dialog

#ask?, #change_system_prompt, #change_voice, #choose_collection, #choose_document_policy, #choose_model, #message_list

Methods included from WebSearching

#search_web

Methods included from SourceFetching

#add_image, #embed, #embed_source, #fetch_source, #http_options, #import, #import_source, #summarize, #summarize_source

Methods included from Parsing

#parse_atom, #parse_content, #parse_csv, #parse_rss, #parse_source, #pdf_read, #ps_read, #reverse_markdown

Methods included from ModelHandling

#model_present?, #pull_model_from_remote, #pull_model_unless_present

Methods included from Switches

#setup_switches

Methods included from DocumentCache

#configure_cache, #document_cache_class

Constructor Details

#initialize(argv: ARGV.dup) ⇒ Chat

Returns a new instance of Chat.



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/ollama_chat/chat.rb', line 34

def initialize(argv: ARGV.dup)
  @opts               = go 'f:u:m:s:c:C:D:MESVh', argv
  @opts[?h] and exit usage
  @opts[?V] and exit version
  @ollama_chat_config = OllamaChat::OllamaChatConfig.new(@opts[?f])
  self.config         = @ollama_chat_config.config
  setup_switches(config)
  base_url         = @opts[?u] || config.url
  @ollama          = Ollama::Client.new(
    base_url:   base_url,
    debug:      config.debug,
    user_agent:
  )
  server_version
  @document_policy = config.document_policy
  @model           = choose_model(@opts[?m], config.model.name)
  @model_options   = Ollama::Options[config.model.options]
  model_system     = pull_model_unless_present(@model, @model_options)
  embedding_enabled.set(config.embedding.enabled && !@opts[?E])
  @messages        = OllamaChat::MessageList.new(self)
  if @opts[?c]
    messages.load_conversation(@opts[?c])
  else
    default = config.system_prompts.default? || model_system
    if @opts[?s] =~ /\A\?/
      change_system_prompt(default, system: @opts[?s])
    else
      system = OllamaChat::Utils::FileArgument.get_file_argument(@opts[?s], default:)
      system.present? and messages.set_system_prompt(system)
    end
  end
  @documents     = setup_documents
  @cache         = setup_cache
  @current_voice = config.voice.default
  @images        = []
  init_chat_history
  @opts[?S] and init_server_socket
rescue ComplexConfig::AttributeMissing, ComplexConfig::ConfigurationSyntaxError => e
  fix_config(e)
end

Class Attribute Details

.configObject

Returns the value of attribute config.



86
87
88
# File 'lib/ollama_chat/chat.rb', line 86

def config
  @config
end

Instance Attribute Details

#documentsObject (readonly)

Returns the value of attribute documents.



77
78
79
# File 'lib/ollama_chat/chat.rb', line 77

def documents
  @documents
end

#messagesObject (readonly)

Returns the value of attribute messages.



79
80
81
# File 'lib/ollama_chat/chat.rb', line 79

def messages
  @messages
end

#ollamaObject (readonly)

Returns the value of attribute ollama.



75
76
77
# File 'lib/ollama_chat/chat.rb', line 75

def ollama
  @ollama
end

Instance Method Details

#configObject



93
94
95
# File 'lib/ollama_chat/chat.rb', line 93

def config
  self.class.config
end

#config=(config) ⇒ Object



89
90
91
# File 'lib/ollama_chat/chat.rb', line 89

def config=(config)
  self.class.config = config
end


81
82
83
# File 'lib/ollama_chat/chat.rb', line 81

def links
  @links ||= Set.new
end

#startObject



97
98
99
100
101
102
103
104
105
# File 'lib/ollama_chat/chat.rb', line 97

def start
  info
  if messages.size > 1
    messages.list_conversation(2)
  end
  STDOUT.puts "\nType /help to display the chat help."

  interact_with_user
end