메뉴
HN
Hacker News 29일 전

오픈소스 자가 개선형 에이전트 코딩 모델 'Ornith-1.0' 공개

IMP
9/10
핵심 요약

Ornith-1.0은 스스로 학습하고 개선하는 오픈소스 에이전트 코딩(Agentic Coding) 모델로, Gemma 4와 Qwen 3.5를 기반으로 다양한 크기(9B~397B)로 출시되었습니다. 강화학습을 통해 해결책뿐만 아니라 탐색 과정까지 공동으로 최적화하여, 유사 규모의 타 오픈소스 모델들을 코딩 벤치마크에서 대폭 상회하는 최고 수준(SOTA)의 성능을 기록했습니다. MIT 라이선스로 누구나 제한 없이 무료로 사용할 수 있다는 점이 가장 큰 특징입니다.

번역된 본문

원문 제목: Ornith-1.0: 에이전트 코딩을 위한 자가 개선형 오픈소스 모델 소스: hackernews 본문: Ornith-1.0 알로하! 🌺 Ornith-1.0은 에이전트 코딩을 위한 자가 개선형 오픈소스 모델입니다.

주요 특징:

  • 최고 수준의 코딩 에이전트: 9B-Dense, 31B-Dense, 35B-MoE, 397B-MoE 등 다양한 버전으로 제공되며(Gemma 4 및 Qwen 3.5를 기반으로 사후 학습됨), Terminal-Bench 2.1, SWE-Bench, NL2Repo, OpenClaw와 같은 코딩 벤치마크에서 동급 규모의 오픈소스 모델들 중 최고 수준(State-of-the-Art)의 성능을 달성했습니다.
  • 자가 개선형 학습 프레임워크(Self-Improving Training Framework): Ornith-1.0은 강화학습(RL)을 활용하여 단순히 솔루션(결과물)을 생성하는 것뿐만 아니라, 그 결과물을 도출하는 과정인 스캐폴드(scaffold)도 함께 생성하도록 학습합니다. 스캐폴드와 최종 솔루션을 공동으로 최적화함으로써, 모델은 더 나은 탐색 궤적을 발견하고 더 높은 품질의 솔루션을 생성해 냅니다.
  • 라이선스: MIT 라이선스를 채택하여 전 세계적으로 접근 가능하며, 지역적 제한이 전혀 없습니다.

벤치마크 각 모델은 해당 크기에 적합한 기준선(baselines)과 비교 평가되었습니다. 세 가지 모델 모두 동일한 테스트 하네스(harness)와 디코딩 설정을 사용했습니다(표 하단의 참고사항 확인).

[Ornith-1.0-9B 평가 결과 표]

  • Terminal-Bench 2.1 (Terminus-2): Ornith 43.1 / Qwen3.5-9B 21.3 / Qwen3.5-35B 41.4 / Gemma4-12B 21 / Gemma4-31B 42.1
  • Terminal-Bench 2.1 (Claude Code): Ornith 40.6 / Qwen3.5-9B 18.9 / Qwen3.5-35B 38.9
  • SWE-bench Verified: Ornith 69.4 / Qwen3.5-9B 53.2 / Qwen3.5-35B 70 / Gemma4-12B 44.2 / Gemma4-31B 52
  • SWE-bench Pro: Ornith 42.9 / Qwen3.5-9B 31.3 / Qwen3.5-35B 44.6 / Gemma4-12B 27.6 / Gemma4-31B 35.7
  • SWE-bench Multilingual: Ornith 52 / Qwen3.5-9B 39.7 / Qwen3.5-35B 60.3 / Gemma4-12B 32.5 / Gemma4-31B 51.7
  • NL2Repo: Ornith 27.2 / Qwen3.5-9B 16.2 / Qwen3.5-35B 20.5 / Gemma4-12B 10.3 / Gemma4-31B 15.5
  • Claw-eval Avg: Ornith 63.1 / Qwen3.5-9B 53.2 / Qwen3.5-35B 65.4 / Gemma4-12B 32.5 / Gemma4-31B 48.5
  • SWE Atlas - QnA: Ornith 17.9 / Qwen3.5-9B 9.2 / Qwen3.5-35B 13.2
  • SWE Atlas - RF: Ornith 16.6 / Qwen3.5-9B 4.3 / Qwen3.5-35B 10.2
  • SWE Atlas - TW: Ornith 15.3 / Qwen3.5-9B 4.4 / Qwen3.5-35B 9.8

[Ornith-1.0-35B 평가 결과 표]

  • Terminal-Bench 2.1 (Terminus-2): Ornith 64.2 / Qwen3.5-35B 41.4 / Qwen3.6-35B 52.5 / Gemma4-31B 42.1 / Qwen3.5-397B 53.5
  • Terminal-Bench 2.1 (Claude Code): Ornith 62.8 / Qwen3.5-35B 38.9 / Qwen3.6-35B 49.2 / Qwen3.5-397B 48.6
  • SWE-bench Verified: Ornith 75.6 / Qwen3.5-35B 70 / Qwen3.6-35B 73.4 / Gemma4-31B 52 / Qwen3.5-397B 76.4
  • SWE-bench Pro: Ornith 50.4 / Qwen3.5-35B 44.6 / Qwen3.6-35B 49.5 / Gemma4-31B 35.7 / Qwen3.5-397B 51.6
  • SWE-bench Multilingual: Ornith 69.3 / Qwen3.5-35B 60.3 / Qwen3.6-35B 67.2 / Gemma4-31B 51.7 / Qwen3.5-397B 69.3
  • NL2Repo: Ornith 34.6 / Qwen3.5-35B 20.5 / Qwen3.6-35B 29.4 / Gemma4-31B 15.5 / Qwen3.5-397B 36.8
  • Claw-eval Avg: Ornith 69.8 / Qwen3.5-35B 65.4 / Qwen3.6-35B 68.7 / Gemma4-31B 48.5 / Qwen3.5-397B 70.7
  • SWE Atlas - QnA: Ornith 37.1 / Qwen3.5-35B 13.2 / Qwen3.6-35B 15.5 / Qwen3.5-397B 20.4
  • SWE Atlas - RF: Ornith 29.7 / Qwen3.5-35B 10.2 / Qwen3.6-35B 11.4 / Qwen3.5-397B 18.4
  • SWE Atlas - TW: Ornith 27.8 / Qwen3.5-35B 9.8 / Qwen3.6-35B 13.3 / Qwen3.5-397B 18.5

[Ornith-1.0-397B 평가 결과 표]

  • Terminal-Bench 2.1 (Terminus-2): Ornith 77.5 / Qwen3.5-397B 53.5 / Qwen3.7-Max 73.5 / GLM-5.2-744B 81.0 / Minimax-M3-428B 64 / DeepSeek-V4-Pro-1.6T 64 / Claude Opus 4.7 70.3 / Claude Opus 4.8 85
  • Terminal-Bench 2.1 (Claude Code): Ornith 78.2 / Qwen3.5-397B 48.6 / Qwen3.7-Max 69.8 / GLM-5.2-744B 82.7 / Minimax-M3-428B 66.5 / Claude Opus 4.7 69.7 / Claude Opus 4.8 78.9
  • SWE-bench Verified: Ornith 82.4 / Qwen3.5-397B 76.4 / Qwen3.7-Max 80.4 / DeepSeek-V4-Pro-1.6T 80.6 / Claude Opus 4.7 80.8 / Claude Opus 4.8 87.6
  • SWE-bench Pro: Ornith 62.2 / Qwen3.5-397B 51.6 / Qwen3.7-Max 60.6 / GLM-5.2-744B 62.1 / Minimax-M3-428B 59 / DeepSeek-V4-Pro-1.6T 55.4 / Claude Opus 4.7 64.3 / Claude Opus 4.8 69.2
  • SWE-bench Multilingual: Ornith 78.9 / Qwen3.5-397B 69.3 / Qwen3.7-Max 78.3 / DeepSeek-V4-Pro-1.6T 76.2
  • NL2Repo: Ornith 48.2 / Qwen3.5-397B 36.8 / Qwen3.7-Max 47.2 / GLM-5.2-744B 48.9 / Minimax-M3-428B 42.1 / Claude Opus 4.8 69.7
  • Claw-eval Avg: Ornith 77.1 / Qwen3.5-397B 70.7 / Qwen3.7-Max 65.2 / DeepSeek-V4-Pro-1.6T 75.8 / Claude Opus 4.7 78.2
  • SWE Atlas - QnA: Ornith 41.2 / Qwen3.5-397B 20.4 / Minimax-M3-428B 37.9 / DeepSeek-V4-Pro-1.6T 27.2 / Claude Opus 4.7 40.3 / Claude Opus 4.8 48.8
  • SWE Atlas - RF: Ornith 42.6 / Qwen3.5-397B 18.4 / Claude Opus 4.7 48.6 / Claude Opus 4.8 46.7
  • SWE Atlas - TW: Ornith 39.1 / Qwen3.5-397B 18.5 / Minimax-M3-428B 30.8 / Claude Opus 4.7 38.5
  • Terminal-Bench 2.1 (Terminus-2): Harbor/Terminus-2 프레임워크로 평가되었습니다. 파서=json, 온도(temperature)=1.0, top_p=1.0, 128K 컨텍스트 창을 사용했습니다. 각 실행은 4시간의 시간 제한과 32개의 CPU 코어 및 48GB RAM 환경에서 5회 실행의 평균값을 사용합니다. 학습과 추론의 일관성을 유지하기 위해 Qwen 채팅 템플릿을 조정했으며, vLLM의 reasoning_content 키와 일치하도록 Harbor를 수정했습니다.
  • Terminal-Bench 2.1 (Claude Code): Claude Code 2.1.126으로 평가되었습니다. 파서=json, 온도=1.0, top_p=1.0, max_new_tokens=131072를 사용했으며 5회 실행의 평균값을 사용합니다 (Qwen 채팅 템플릿 동일하게 수정됨).
  • SWE-bench Verified / Pro / Multilingual: OpenHands 하네스를 사용했으며, 온도=1.0, top_p=0.95, 256K 컨텍스트 창 환경에서 평가했습니다.
  • SWE Atlas QnA / RF / TW: mini-SWE-agent 하네스를 사용했으며, 온도=1.0, top_p=0.95, 128K 컨텍스트 창 환경에서 5회 실행 평균값을 사용했습니다.
  • NL2Repo: 온도=1.0, top_p=1.0, 400K 컨텍스트, 48K 출력, 안티 해킹 필터를 적용했습니다.
  • ClawEval: 실제 사용자 작업 분포를 기반으로 한 에이전트 코드 벤치마크이며, 온도=0.6, 256K 컨텍스트 환경에서 평가했습니다.

빠른 시작 참고: Ornith-1.0은 추론(Reasoning) 모델입니다. 기본적으로 어시스턴트 턴은 최종 답변 전에 블록으로 시작됩니다. 아래의 서빙 레시피(serving recipes)는 사고의 연속(Chain-of-thought)이 별도의 reasoning_content 필드로 반환되도록 추론 파서를 활성화하며, 모델의 블록이 OpenAI 스타일의 tool_calls로 노출되도록 도구 호출 파서를 활성화합니다. Ornith-1.0을 서빙하려면 최신 버전의...

원문 보기
원문 보기 (영어)
Ornith-1.0 Aloha! 🌺 Ornith-1.0 is a self-improving open-source models for agentic coding. Highlights: State-of-the-Art Coding Agents : Available in 9B-Dense, 31B-Dense, 35B-MoE, and 397B-MoE (post-trained on top of Gemma 4 and Qwen 3.5), achieving state-of-the-art performance among open-source models of comparable size on coding benchmarks such as Terminal-Bench 2.1, SWE-Bench, NL2Repo and OpenClaw. Self-Improving Training Framework : Ornith-1.0 employs RL to learn to generate not only solution rollouts, but also the scallfold that drive those rollouts. By jointly optimizing the scaffold and the resulting solution, the model discovers better search trajectories and generates higher-quality solutions. Licence : MIT licensed, globally accessible, and free from regional limitations. Benchmarks Each model is evaluated against its size-appropriate baselines. All three use the same harnesses and decoding setup (see the notes under the tables). Ornith-1.0-9B Ornith-1.0-9B Qwen3.5-9B Qwen3.5-35B Gemma4-12B Gemma4-31B Agentic Coding Terminal-Bench 2.1 (Terminus-2) 43.1 21.3 41.4 21 42.1 Terminal-Bench 2.1 (Claude Code) 40.6 18.9 38.9 - - SWE-bench Verified 69.4 53.2 70 44.2 52 SWE-bench Pro 42.9 31.3 44.6 27.6 35.7 SWE-bench Multilingual 52 39.7 60.3 32.5 51.7 NL2Repo 27.2 16.2 20.5 10.3 15.5 Claw-eval Avg 63.1 53.2 65.4 32.5 48.5 SWE Atlas - QnA 17.9 9.2 13.2 - - SWE Atlas - RF 16.6 4.3 10.2 - - SWE Atlas - TW 15.3 4.4 9.8 - - Ornith-1.0-35B Ornith-1.0-35B Qwen3.5-35B Qwen3.6-35B Gemma4-31B Qwen3.5-397B Agentic Coding Terminal-Bench 2.1 (Terminus-2) 64.2 41.4 52.5 42.1 53.5 Terminal-Bench 2.1 (Claude Code) 62.8 38.9 49.2 - 48.6 SWE-bench Verified 75.6 70 73.4 52 76.4 SWE-bench Pro 50.4 44.6 49.5 35.7 51.6 SWE-bench Multilingual 69.3 60.3 67.2 51.7 69.3 NL2Repo 34.6 20.5 29.4 15.5 36.8 Claw-eval Avg 69.8 65.4 68.7 48.5 70.7 SWE Atlas - QnA 37.1 13.2 15.5 - 20.4 SWE Atlas - RF 29.7 10.2 11.4 - 18.4 SWE Atlas - TW 27.8 9.8 13.3 - 18.5 Ornith-1.0-397B Ornith-1.0-397B Qwen3.5-397B Qwen3.7-Max GLM-5.2-744B Minimax-M3-428B DeepSeek-V4-Pro-1.6T Claude Opus 4.7 Claude Opus 4.8 Agentic Coding Terminal-Bench 2.1 (Terminus-2) 77.5 53.5 73.5 81.0 64 64 70.3 85 Terminal-Bench 2.1 (Claude Code) 78.2 48.6 69.8 82.7 - 66.5 69.7 78.9 SWE-bench Verified 82.4 76.4 80.4 - - 80.6 80.8 87.6 SWE-bench Pro 62.2 51.6 60.6 62.1 59 55.4 64.3 69.2 SWE-bench Multilingual 78.9 69.3 78.3 - - 76.2 - - NL2Repo 48.2 36.8 47.2 48.9 42.1 - - 69.7 Claw-eval Avg 77.1 70.7 65.2 - - 75.8 78.2 - SWE Atlas - QnA 41.2 20.4 - - 37.9 27.2 40.3 48.8 SWE Atlas - RF 42.6 18.4 - - - - 48.6 46.7 SWE Atlas - TW 39.1 18.5 - - 30.8 - 38.5 - * Terminal-Bench 2.1 (Terminus-2): evaluated with the Harbor/Terminus-2 framework, parser=json, temperature=1.0, top_p=1.0, 128K context window. Each run uses a 4-hour timeout with 32 CPU cores and 48GB RAM, averaged over 5 runs. We adjust the Qwen chat template to keep training and inference consistent and modify Harbor to align with vLLM's reasoning_content key. * Terminal-Bench 2.1 (Claude Code): evaluated with Claude Code 2.1.126, parser=json, temperature=1.0, top_p=1.0, max_new_tokens=131072, averaged over 5 runs (Qwen chat template likewise modified). * SWE-bench Verified / Pro / Multilingual: OpenHands harness, temp=1.0, top_p=0.95, 256K context window. * SWE Atlas QnA / RF / TW: mini-SWE-agent harness, temp=1.0, top_p=0.95, 128K context window, averaged over 5 runs. * NL2Repo: temperature=1.0, top_p=1.0, 400K context, 48K output, anti-hacking filters. * ClawEval: an agentic code benchmark over real-user task distributions; temp=0.6, 256K context. Quickstart NOTE Ornith-1.0 is a reasoning model : by default the assistant turn opens with a <think> … </think> block before the final answer. The serving recipes below enable a reasoning parser so the chain-of-thought is returned in a separate reasoning_content field, and a tool-call parser so the model's <tool_call> blocks are surfaced as OpenAI-style tool_calls . Serving Ornith-1.0 requires recent runtimes: Transformers ≥ 5.8.1 vLLM ≥ 0.19.1 SGLang ≥ 0.5.9 Recommended sampling parameters: temperature=0.6 , top_p=0.95 , top_k=20 (use temperature=1.0 to reproduce the reported benchmark setup). Serving Ornith-1.0 Ornith-1.0 ships as a dense 9B model plus two Mixture-of-Experts models ( 35B , 397B ). All checkpoints expose the same OpenAI-compatible interface and support a 256K (262,144-token) context window ; the dense 9B fits on a single 80GB GPU, while the MoE checkpoints are sharded across a multi-GPU node with tensor parallelism. Each size is published in multiple precision / format variants: Checkpoint Architecture Format Best for Ornith-1.0-9B Dense (~9B) bf16 Single-GPU serving & fine-tuning Ornith-1.0-9B-GGUF Dense (~9B) GGUF (quantized) Local inference via llama.cpp / Ollama Ornith-1.0-35B MoE (35B) bf16 Full-precision multi-GPU serving Ornith-1.0-35B-FP8 MoE (35B) FP8 ~Half the VRAM on FP8-capable GPUs Ornith-1.0-35B-GGUF MoE (35B) GGUF (quantized) Local inference via llama.cpp / Ollama Ornith-1.0-397B MoE (397B) bf16 Full-precision serving on a multi-GPU node Ornith-1.0-397B-FP8 MoE (397B) FP8 Memory-efficient serving on FP8-capable GPUs The recipes below stand up an OpenAI-compatible server under the shared alias Ornith-1.0 . Set MODEL to the checkpoint you want, and match --tensor-parallel-size / --tp to your GPU count. vLLM # Pick a checkpoint — dense 9B, or MoE 35B / 397B (append -FP8 for lower-VRAM serving): MODEL=deepreinforce-ai/Ornith-1.0-397B # MoE checkpoints (35B / 397B): shard across the node with tensor parallelism. # Dense checkpoint (9B): fits on a single 80GB GPU — drop --tensor-parallel-size. vllm serve $MODEL \ --served-model-name Ornith-1.0 \ --tensor-parallel-size 8 \ --host 0.0.0.0 --port 8000 \ --max-model-len 262144 \ --gpu-memory-utilization 0.90 \ --enable-prefix-caching \ --enable-auto-tool-choice --tool-call-parser qwen3_xml \ --reasoning-parser qwen3 \ --trust-remote-code SGLang # Pick a checkpoint — dense 9B, or MoE 35B / 397B (append -FP8 for lower-VRAM serving): MODEL=deepreinforce-ai/Ornith-1.0-397B # MoE checkpoints (35B / 397B): shard with --tp ; dense 9B: drop --tp for a single GPU. python -m sglang.launch_server \ --model-path $MODEL \ --served-model-name Ornith-1.0 \ --tp 8 \ --host 0.0.0.0 --port 8000 \ --context-length 262144 \ --mem-fraction-static 0.85 \ --tool-call-parser qwen3_coder \ --reasoning-parser qwen3 Hugging Face Transformers For a quick local test (or to script offline generation), load the model directly with Transformers. Make sure you have a recent release installed — see the Transformers installation guide ; Ornith-1.0 requires transformers >= 5.8.1 . The dense 9B checkpoint is the easiest to run locally. from transformers import AutoModelForCausalLM , AutoTokenizer model_name = "deepreinforce-ai/Ornith-1.0-9B" # or -35B / -397B tokenizer = AutoTokenizer . from_pretrained ( model_name ) model = AutoModelForCausalLM . from_pretrained ( model_name , dtype = "auto" , device_map = "auto" , ) messages = [ { "role" : "user" , "content" : "Write a Python function is_prime(n). Keep it short." } ] text = tokenizer . apply_chat_template ( messages , tokenize = False , add_generation_prompt = True , ) inputs = tokenizer ( text , return_tensors = "pt" ). to ( model . device ) generated = model . generate ( ** inputs , max_new_tokens = 512 , do_sample = True , temperature = 0.6 , top_p = 0.95 , top_k = 20 , ) output_ids = generated [ 0 ][ inputs . input_ids . shape [ 1 ]:] # The reply contains a <think> ... </think> reasoning block followed by the answer. content = tokenizer . decode ( output_ids , skip_special_tokens = True ) print ( content ) To split the reasoning trace from the final answer, parse on the </think> marker: text = tokenizer . decode ( output_ids , skip_special_tokens = True ) if "</think>" in text : reasoning , answer = text . split ( "</think>" , 1 ) reasoning = reasoning . replace ( "<think>" , "" ). strip () answer = answer . strip () else : reaso
관련 소식