forked from templates/template-go-orm
Go-сервис-прокси между Codex CLI и Ollama. Добавляет Bearer-авторизацию, LLM-маршрутизатор (deepseek классифицирует запросы: code/doc/general), поддержку OpenAI Responses API для Codex CLI, стриминг SSE, кеш модели. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
71 lines
1.9 KiB
Go
71 lines
1.9 KiB
Go
package model
|
|
|
|
import "time"
|
|
|
|
// Message — сообщение в формате Ollama API
|
|
type Message struct {
|
|
Role string `json:"role"`
|
|
Content string `json:"content"`
|
|
}
|
|
|
|
// --- /api/chat ---
|
|
|
|
// OllamaOptions — параметры генерации для Ollama
|
|
type OllamaOptions struct {
|
|
NumCtx int `json:"num_ctx,omitempty"`
|
|
}
|
|
|
|
type ChatRequest struct {
|
|
Model string `json:"model"`
|
|
Messages []Message `json:"messages"`
|
|
Stream *bool `json:"stream,omitempty"`
|
|
Options *OllamaOptions `json:"options,omitempty"`
|
|
}
|
|
|
|
type ChatResponse struct {
|
|
Model string `json:"model"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
Message Message `json:"message"`
|
|
Done bool `json:"done"`
|
|
|
|
// Поля финального чанка (done=true)
|
|
DoneReason string `json:"done_reason,omitempty"`
|
|
TotalDuration int64 `json:"total_duration,omitempty"`
|
|
LoadDuration int64 `json:"load_duration,omitempty"`
|
|
EvalCount int `json:"eval_count,omitempty"`
|
|
EvalDuration int64 `json:"eval_duration,omitempty"`
|
|
}
|
|
|
|
// --- /api/generate ---
|
|
|
|
type GenerateRequest struct {
|
|
Model string `json:"model"`
|
|
Prompt string `json:"prompt"`
|
|
Stream *bool `json:"stream,omitempty"`
|
|
}
|
|
|
|
type GenerateResponse struct {
|
|
Model string `json:"model"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
Response string `json:"response"`
|
|
Done bool `json:"done"`
|
|
|
|
DoneReason string `json:"done_reason,omitempty"`
|
|
TotalDuration int64 `json:"total_duration,omitempty"`
|
|
EvalCount int `json:"eval_count,omitempty"`
|
|
EvalDuration int64 `json:"eval_duration,omitempty"`
|
|
}
|
|
|
|
// --- /api/tags ---
|
|
|
|
type TagsResponse struct {
|
|
Models []ModelInfo `json:"models"`
|
|
}
|
|
|
|
type ModelInfo struct {
|
|
Name string `json:"name"`
|
|
ModifiedAt time.Time `json:"modified_at"`
|
|
Size int64 `json:"size"`
|
|
Digest string `json:"digest"`
|
|
}
|