Class: OllamaChat::Chat

Inherits:
Object
  • Object
show all
Includes:
Clipboard, Dialog, DocumentCache, Information, MessageType, ModelHandling, Parsing, 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 Dialog

#document_policy

Attributes included from Switches

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

Instance Method Summary collapse

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.



28
29
30
31
32
33
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
# File 'lib/ollama_chat/chat.rb', line 28

def initialize(argv: ARGV.dup)
  @opts               = go 'f:u:m:s:c:C:D:MEVh', 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        = []
end

Class Attribute Details

.configObject

Returns the value of attribute config.



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

def config
  @config
end

Instance Attribute Details

#documentsObject (readonly)

Returns the value of attribute documents.



67
68
69
# File 'lib/ollama_chat/chat.rb', line 67

def documents
  @documents
end

#messagesObject (readonly)

Returns the value of attribute messages.



69
70
71
# File 'lib/ollama_chat/chat.rb', line 69

def messages
  @messages
end

#ollamaObject (readonly)

Returns the value of attribute ollama.



65
66
67
# File 'lib/ollama_chat/chat.rb', line 65

def ollama
  @ollama
end

Instance Method Details

#configObject



83
84
85
# File 'lib/ollama_chat/chat.rb', line 83

def config
  self.class.config
end

#config=(config) ⇒ Object



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

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


71
72
73
# File 'lib/ollama_chat/chat.rb', line 71

def links
  @links ||= Set.new
end

#startObject



87
88
89
90
91
92
93
94
95
# File 'lib/ollama_chat/chat.rb', line 87

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