feat: add OpenAI provider adapter

Streaming, tool use (index-based delta accumulation), tool name
sanitization (fs.read → fs_read), StreamOptions.IncludeUsage for
token tracking. Hardcoded model list (gpt-4o, gpt-4o-mini, o3, o3-mini).

Wired into CLI with OPENAI_API_KEY env support.
Live verified: text streaming + tool calling with gpt-4o.
This commit is contained in:
2026-04-03 13:33:55 +02:00
parent 9e7caf2467
commit 261c19f90f
6 changed files with 415 additions and 1 deletions
+4 -1
View File
@@ -14,6 +14,7 @@ import (
"somegit.dev/Owlibou/gnoma/internal/provider"
anthropicprov "somegit.dev/Owlibou/gnoma/internal/provider/anthropic"
"somegit.dev/Owlibou/gnoma/internal/provider/mistral"
oaiprov "somegit.dev/Owlibou/gnoma/internal/provider/openai"
"somegit.dev/Owlibou/gnoma/internal/stream"
"somegit.dev/Owlibou/gnoma/internal/tool"
"somegit.dev/Owlibou/gnoma/internal/tool/bash"
@@ -191,8 +192,10 @@ func createProvider(name, apiKey, model string) (provider.Provider, error) {
return mistral.New(cfg)
case "anthropic":
return anthropicprov.New(cfg)
case "openai":
return oaiprov.New(cfg)
default:
return nil, fmt.Errorf("unknown provider %q (supports: mistral, anthropic)", name)
return nil, fmt.Errorf("unknown provider %q (supports: mistral, anthropic, openai)", name)
}
}