CliCode With Ollama
- 이 문서는 ollama / open webUI / litellm with continue cli / qwen code cli / claude code cli 를 연동해보기 위한 과정에서 얻은 tip 들을 정리한 문서입니다.
basic infomation
- ollama/open webUI/liteLLM server IP : 192.168.1.239
- ollama docker api port : 11434
- model : robbiemu/qwen3-coder:30b-a3b-i-q4_K_XL
- open webUI api port : 3000
- model : robbiemu/qwen3-coder:30b-a3b-i-q4_K_XL
- litellm api port : 3333
- model : qwen3-coder
docker command line
ollama docker command line
nvidia-docker run -d -e OLLAMA_SCHED_SPREAD=1 --gpus '"device=0,1"' -v ollama:/root/.ollama -p 11434:11434 --restart always --name ollama ollama/ollama
open webUI docker command line
nvidia-docker run -d -p 3000:8080 --gpus=all --add-host=host.docker.internal:host-gateway -e OLLAMA_BASE_URL=http://host.docker.internal:11434 -v ollama:/root/.ollama -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:cuda
litellm docker command line
nvidia-docker run -d --gpus=all --name litellm -v $(pwd)/config.yaml:/app/config.yaml -p 3333:4000 --add-host=host.docker.internal:host-gateway --restart always ghcr.io/berriai/litellm:main-stable --config /app/config.yaml --port 4000
test scripts
ollama ollama api check
curl -sS -H "Content-Type: application/json" -d '{"model":"robbiemu/qwen3-coder:30b-a3b-i-q4_K_XL","messages":[{"role":"user","content":"hello"}]}' http://192.168.1.239:11434/api/chat
curl -sS -H "Content-Type: application/json" -d '{"model":"robbiemu/qwen3-coder:30b-a3b-i-q4_K_XL","keep_alive":"24h","messages":[{"role":"user","content":"hello"}]}' http://192.168.1.239:11434/api/chat
ollama openai api check
curl -sS -X POST -H "Authorization: Bearer sk-5aec4d12374344f7942217efced322d9" -H "Content-Type: application/json" -d '{ "model": "robbiemu/qwen3-coder:30b-a3b-i-q4_K_XL", "messages": [{"role": "user", "content": "hello"}] }' http://192.168.1.239:11434/v1/chat/completions
curl -sS -X POST -H "Authorization: Bearer sk-5aec4d12374344f7942217efced322d9" -H "Content-Type: application/json" -d '{ "model": "robbiemu/qwen3-coder:30b-a3b-i-q4_K_XL", "keep_alive": "24h", "messages": [{"role": "user", "content": "hello"}] }' http://192.168.1.239:11434/v1/chat/completions
open webUI openai api check
curl -sS -X POST -H "Authorization: Bearer sk-5aec4d12374344f7942217efced322d9" -H "Content-Type: application/json" -d '{ "model": "robbiemu/qwen3-coder:30b-a3b-i-q4_K_XL", "messages": [{"role": "user", "content": "hello"}] }' http://192.168.1.239:3000/api/chat/completions
curl -sS -X POST -H "Authorization: Bearer sk-5aec4d12374344f7942217efced322d9" -H "Content-Type: application/json" -d '{ "model": "robbiemu/qwen3-coder:30b-a3b-i-q4_K_XL", "keep_alive": "24h", "messages": [{"role": "user", "content": "hello"}] }' http://192.168.1.239:3000/api/chat/completions
litellm openai api check
curl -sS -X POST -H "Authorization: Bearer sk-5aec4d12374344f7942217efced322d9" -H "Content-Type: application/json" -d '{ "model": "qwen3-coder", "messages": [{"role": "user", "content": "hello"}] }' http://192.168.1.239:3333/v1/chat/completions
curl -sS -X POST -H "Authorization: Bearer sk-5aec4d12374344f7942217efced322d9" -H "Content-Type: application/json" -d '{ "model": "qwen3-coder", "keep_alive": "24h", "messages": [{"role": "user", "content": "hello"}] }' http://192.168.1.239:3333/v1/chat/completions
CLI tool 환경변수
qwen code cli 환경변수
ollama openai api 환경변수
export OPENAI_BASE_URL="http://192.168.1.239:11434/v1" export OPENAI_MODEL="sammcj/devstral-small-24b-2505-ud:cline-64k-q6_k_xl" export OPENAI_API_KEY="."
open webui openai api 환경변수
export OPENAI_BASE_URL="http://192.168.1.239:3000/api" export OPENAI_MODEL="sammcj/devstral-small-24b-2505-ud:cline-64k-q6_k_xl" export OPENAI_API_KEY="sk-5aec4d12374344f7942217efced322d9"
litellm openai api 환경변수
export OPENAI_BASE_URL="http://192.168.1.239:3333/v1" export OPENAI_MODEL="qwen3-coder" export OPENAI_API_KEY="sk-5aec4d12374344f7942217efced322d9"
claude code cli openai api 환경변수(example)
export ANTHROPIC_BASE_URL="http://192.168.1.239:3334" export ANTHROPIC_API_KEY="onionmixer"
잡다한 스크립트들
continue cli 의 설정파일별 실행 명령
cn --verbose --config ~/.continue/config_to_ollama.yaml cn --verbose --config ~/.continue/config_to_ollama_openai.yaml cn --verbose --config ~/.continue/config_to_openai.yaml cn --verbose --config ~/.continue/config_to_litellm.yaml
cn --verbose --config ~/.continue/config_to_litellm.yaml --exclude Read --exclude Edit --exclude MultiEdit --exclude Write --exclude List --exclude Search --exclude Bash --exclude Fetch --exclude Checklist
기본적으로는 위쪽의 명령어가 맞지만, 각종 테스트를 할 때에는 아래쪽의 명령어도 사용 가능하다.
모델의 상세 정보를 JSON 으로 반환하는 명령어(ollama ollama api case)
curl http://192.168.1.239:11434/api/show -d '{"name": "robbiemu/qwen3-coder:30b-a3b-i-q4_K_XL"}'
이 명령어를 실행하면 모델의 상세 정보가 담긴 긴 JSON이 반환됩니다. 여기서 template이나 parameters 같은 항목을 살펴보면 도구 호출과 관련된 지시어나 설정이 포함되어 있는지 확인할 수 있습니다. 예를 들어, robbiemu/qwen3-coder 모델의 시스템 프롬프트 템플릿에는 "When calling tools: - Prefer batching independent calls in one block..." 와 같은 내용이 포함되어 있어, 이 모델이 도구 사용에 최적화되었음을 알 수 있습니다.
결론적으로, 모델이 사용하는 도구 목록은 Continue CLI와 같은 클라이언트 애플리케이션에 정의된 것이며, curl로 Ollama에 직접 물어봐서 목록을 얻을 수는 없습니다.
continue cli 의 특정 버전을 사용하는 방법
npm i -g @continuedev/cli@1.4.40
사용 환경에 따라 다르지만, root 에서 continue cli 를 설치했다면, 이후에도 root 에서 진행하면 된다.
docker log 보는법
docker logs --follow --timestamps ollama docker logs --follow --timestamps open-webui docker logs --follow --timestamps litellm
docker 의 재시작
docker kill litellm ; docker start litellm ; docker stats
설정 예제들
litellm 에서 사용할 config.yaml
적어도 이렇게 세팅해야 cli 도구에서는 채팅이라도 가능. 아니면 그냥 동작 불가수준.
model_list: - model_name: qwen3-coder # 사용자가 호출할 모델 이름 litellm_params: model: ollama/robbiemu/qwen3-coder:30b-a3b-i-q4_K_XL # 실제 라우팅될 모델 (ollama/모델명 형식) api_base: http://host.docker.internal:11434 # Ollama 컨테이너 주소 drop_params: true additional_drop_params: - response_format # ← format=json 매핑 차단 - tools # ← 툴 신호도 원치 않으면 함께 드롭(선택) - tool_choice # ← 선택 - model_name: nomic-embed-text # 임베딩 모델 예시 litellm_params: model: ollama/nomic-embed-text api_base: http://host.docker.internal:11434 router_settings: # LiteLLM이 응답에서 "ollama/" 접두사를 제거하도록 설정 remove_model_name_prefix: true litellm_settings: drop_params: true # 미지원/혼선 유발 파라미터 제거 set_verbose: true
continue(vscod) 를 위한 config.yaml
name: Local via Ollama version: 0.0.1 schema: v1 models: - name: Qwen3 Coder (Remote) provider: openai model: robbiemu/qwen3-coder:30b-a3b-i-q4_K_XL apiBase: http://192.168.1.239:3000/api apiKey: sk-5aec4d12374344f7942217efced322d9 roles: - chat - edit - apply - autocomplete
continue cli 를 위한 ollama ollama api 를 위한 config_to_ollama.yaml
name: Local via Ollama version: 0.0.1 schema: v1 models: - name: Qwen3 Coder Ollama provider: ollama model: robbiemu/qwen3-coder:30b-a3b-i-q4_K_XL baseURL: "http://192.168.1.239:11434" useLegacyCompletionsEndpoint: false tools: exclude: - Fetch - Search allow: - Read - Write - Edit prompts: - name: default description: "Custom default prompt without tools-prepared info" prompt: | {{ user_content | remove_tools_prepared }} # (커스텀 프롬프트; 도구 준비 정보 삽입 없음) logging.level: debug
continue cli 를 위한 ollama openai api를 위한 config_to_ollama_openai.yaml
name: Local via Ollama version: 0.0.1 schema: v1 models: - name: Qwen3 Coder Ollama(openAI) provider: openai model: robbiemu/qwen3-coder:30b-a3b-i-q4_K_XL apiBase: "http://192.168.1.239:11434/v1" useLegacyCompletionsEndpoint: false
continue cli 를 위한 open webui openai api 를 위한 config_to_openai.yaml
name: Local via Ollama version: 0.0.1 schema: v1 models: - name: Qwen3 Coder Open webUI provider: openai model: robbiemu/qwen3-coder:30b-a3b-i-q4_K_XL apiBase: "http://192.168.1.239:3000/api/" apiKey: sk-5aec4d12374344f7942217efced322d9 useLegacyCompletionsEndpoint: false tools: exclude: - Fetch - Search allow: - Read - Write - Edit prompts: - name: default description: "Custom default prompt without tools-prepared info" prompt: | {{ user_content | remove_tools_prepared }} # (커스텀 프롬프트; 도구 준비 정보 삽입 없음) logging.level: debug
continue cli 를 위한 litelm openai api 를 위한 config_to_litellm.yaml
name: Local via Ollama version: 0.0.1 schema: v1 models: - name: Qwen3 Coder liteLLM provider: openai model: qwen3-coder apiBase: "http://192.168.1.239:3333/v1" useLegacyCompletionsEndpoint: false tools: exclude: - Fetch - Search allow: - Read - Write - Edit prompts: - name: default description: "Custom default prompt without tools-prepared info" prompt: | {{ user_content | remove_tools_prepared }} # (커스텀 프롬프트; 도구 준비 정보 삽입 없음) logging.level: debug
claude code proxy 에서 사용하는 .env 파일
중요한 포인트가 있는데, 쌍따옴표 사용할 필요 없고, 빈칸도 필요없고, # 을 이용한 주석도 사용해서는 안된다.
OPENAI_API_KEY=. OPENAI_BASE_URL=http://host.docker.internal:11434/v1 BIG_MODEL=sammcj/devstral-small-24b-2505-ud:cline-64k-q6_k_xl SMALL_MODEL=sammcj/devstral-small-24b-2505-ud:cline-64k-q6_k_xl ANTHROPIC_API_KEY=onionmixer PREFERRED_PROVIDER=openai HOST=0.0.0.0 PORT=8082 LOG_LEVEL=DEBUG MAX_TOKENS_LIMIT=20480 REQUEST_TIMEOUT=90
참고자료
- OpenAI compatibility
- Ollama 사용법: Ollama를 이용한 로컬 LLM 완전 초보 가이드
- ComfyUI에서 CivitAI LoRA 사용해 보기
- Share, discover, & run ComfyUI workflows
- Perplexity API Key 발급 방법 (2025년 7월 개정)
- liteLLM - Claude Code
- 로컬 LLM 실행도구, Ollama와 LM Studio 완벽 비교 분석 (2025년 최신)
- Using Ollama with Continue: A Developer's Guide
- Open webUI - Image Generation
- Qwen-Image ComfyUI Native, GGUF, and Nunchaku Workflow Complete Usage Guide
- ComfyUI_examples
- Continue CLI - config.yaml Reference
- Qwen Code cli 사용법,설치 총정리 vs Claude Code 와 비교
- qwen-code main page