Class: Sylvia::LLM

Inherits:
Object
  • Object
show all
Defined in:
lib/sylvia/llm.rb

Constant Summary collapse

FILE_NAME =
'sylvia.rb'
GITIGNORE_FILE =
'.gitignore'

Class Method Summary collapse

Class Method Details

.runObject



51
52
53
54
55
56
57
58
# File 'lib/sylvia/llm.rb', line 51

def self.run
  unless File.exist?(FILE_NAME)
    puts "#{FILE_NAME} not found. Run `sylvia llm` first."
    return
  end

  system("ruby #{FILE_NAME}")
end

.setupObject



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/sylvia/llm.rb', line 6

def self.setup
  content = "    require 'ruby_llm'\n    require 'tty-markdown'\n\n    api_key = 'xxx'\n    model_ai = 'gemini-2.0-flash'\n\n    RubyLLM.configure do |config|\n      config.gemini_api_key = api_key\n    end\n\n    chat = RubyLLM.chat(model: model_ai)\n\n    response = chat.ask <<~PROMPT, with: [\"assets/example.rb\", \"assets/example2.rb\"]\n  Please review the following Ruby code and suggest improvements:\n\n  1. Use descriptive variable names.\n  2. Follow Ruby style conventions.\n  3. Optimize loops and iterators.\n  4. Avoid unnecessary complexity.\nPROMPT\n\n    markdown = response.content.to_s\n\n    puts TTY::Markdown.parse(markdown)\n  RUBY\n\n  File.write(FILE_NAME, content)\n  puts \"Created \#{FILE_NAME}\"\n\n  if File.exist?(GITIGNORE_FILE)\n    gitignore_content = File.read(GITIGNORE_FILE).split(\"\\n\")\n    if gitignore_content.include?(FILE_NAME)\n      puts \"\#{FILE_NAME} is already in \#{GITIGNORE_FILE}\"\n    else\n      File.open(GITIGNORE_FILE, 'a') { |f| f.puts \"\\n\#{FILE_NAME}\" }\n      puts \"Added \#{FILE_NAME} to \#{GITIGNORE_FILE}\"\n    end\n  else\n    File.write(GITIGNORE_FILE, \"\#{FILE_NAME}\\n\")\n    puts \"Created \#{GITIGNORE_FILE} and added \#{FILE_NAME}\"\n  end\nend\n"