nvim with llama

# LLM 으로 프로그래밍시 도움을 받고 싶은데, 보안상 외부 서비스는 사용할 수 없고 해서
# 로컬에서 ollama 으로 llama 모델을 사용해 보자.
brew install --cask ollama

# 참고로 M1 MAX 을 사용중인데
# Llama3.3 --> 70B(parameters) 43GB(size) --> 메모리 풀 사용으로 결과 출력이 안돼 포기
# Llama3.2 --> 3B(parameters) 2.0GB(size) --> 빠르게 잘 나온다.
# Mistral --> 7B(parameters) 4.1GB(size) --> llama3.2 와 비슷한 성능

# 모델 다운로드
# 모델은 ~/.ollama/models 에 저장되고 (ollama rm 으로 지울 수 있다.)
ollama pull llama3.2
ollama pull mistral

# 참고로 터미널에서 별도 프롬프트로 사용할 경우
ollama run llama3.2

# ollama 이 떠 있는 상태에서 curl 요청하면 토큰들이 json 응답으로 온다.
curl http://localhost:11434/api/generate -d '{
  "model": "llama3.2",
  "prompt":"Why is the sky blue?"
}'

# nvim 에서 ollama 연결을 위한 플러그인 설치(Lazy 플러그인 매니저 사용)
# 참고로 ollama 띄워져 있지 않으면 자동으로 띄운다.
# 이제 Gen 커맨드로 Ask, Change Code, Enhance Code, Review Code 등의 기능을 사용할 수 있다.
# 현재 버퍼 코드 리뷰 하는 경우
:Gen Review_Code

# 특정 부분만 코드리뷰
코드 블럭 선택:Gen Review_Code

# 한글 chat 으로 코드리뷰  
:Gen Chat > $text 코드리뷰해줘

# vscode, jetbrains 에서는 continue 를 설치하고 ollama 로 연결
# 설치 후 continue 탭에서 llama 3.2 및 localhost 를 명시한다.
# 사용 예시) review @파일명

# 한국어 사용시

kibana query

# KQL(kibana query language)

# 로그 하나가 다음과 같다고 했을때
mesg: ysoftman lemon apple
level: debug
cnt: 10
@timestamp: 2025-01-10T12:08:10+09:00 

# 특정 필드에 특정 단어가 포함된 경우 찾기(wildcard 사용)
# 참고로 내용이 " 로 감싸져 있지 않으면 " 로 감싸 사용하면 검색이 안된다.
mesg: *ysoftman*

# 모든 필드에서 특정 단어 포함된 경우 찾기
*:*ysoftman*

# 공백 포함해서 찾기
mesg: *lemon*apple*

# 2개 이상의 필드 조건으로 찾기
mesg: *lemon*apple* and cnt > 9

# @로 시작하는 타임스탬프가 있으면
# 1일전 로그들 찾기
@timestamp > now-1d

gofumpt

neovim(nvim) gopls 설정을 업데이트한 후 .go 파일을 저장하면
var 로 선언된 변수가 := 로 간단하게 변경된다.

찾아보니 gopls 설정에 gofumpt(https://github.com/mvdan/gofumpt) 활성화되어 있었다.

gofumpt 는 gofmt, goimports 기능을 포함하면서 더 엄격한 포맷팅 규칙을 적용하는 확장된 포맷팅 방식이다.
그래서 gofumpt 포맷팅된 코드는 gofmt, goimports 검사를 통과한다고 한다.
요런 규칙들이 있다.
- 복합 리터럴에서 선행 또는 후행 빈 줄 제거
- 할당 연산자 다음의 불필요한 빈 줄 제거
- 인터페이스에서 불필요한 빈 줄 제거
- 가독성을 위해 함수에서 빈 줄 대신 ) { 라인 사용

# 바이너리 설치
go install mvdan.cc/gofumpt@latest

# 이전의 .go 파일들에 대해 포맷팅을 해봤는데 개인적으로 깔끔해져서 가독성에 더 좋은것 같다.
gofumpt -w -l $(fd --type file .go)

# 참고, gopls 체크사항 확인
gopls check $(fd --type file .go)