Files

1 line
7.9 KiB
JSON

{"repo": "brunoochoa/goai", "files": {"providers/compat/client.go": {"e5e2d1c276635310c4471c2921797f36f1ce68e7": {"t": 1785746088.5486948, "n": 3723, "h": "bf24e2b0d9478481", "c": "// Package compat provides pre-configured clients for OpenAI-compatible AI providers:\n// Ollama (local), Groq, Together AI, Mistral, DeepSeek, and any custom endpoint.\n//\n// These clients reuse 100% of the openai provider implementation — only the\n// base URL and default model differ. No code is duplicated.\n//\n// # Installation\n//\n//\tgo get github.com/brunoochoa/goai/providers/compat\n//\n// # Example: Ollama (local, no API key required)\n//\n//\tclient, _ := compat.NewOllama()\n//\tresp, err := client.Chat(ctx, core.Request{\n//\t Messages: []core.Message{core.UserMessage(\"Olá!\")},\n//\t})\n//\n// # Example: Groq\n//\n//\t// Set GROQ_API_KEY in the environment first.\n//\tclient, err := compat.NewGroq(openai.WithAPIKey(os.Getenv(\"GROQ_API_KEY\")))\npackage compat\n\nimport (\n\tcoreopenai \"github.com/brunoochoa/goai/providers/openai\"\n)\n\n// Known base URLs for popular OpenAI-compatible providers.\nconst (\n\tOllamaBaseURL = \"http://localhost:11434/v1\"\n\tGroqBaseURL = \"https://api.groq.com/openai/v1\"\n\tTogetherBaseURL = \"https://api.together.xyz/v1\"\n\tMistralBaseURL = \"https://api.mistral.ai/v1\"\n\tDeepSeekBaseURL = \"https://api.deepseek.com/v1\"\n)\n\n// NewOllama creates a client for a local Ollama instance.\n// Ollama does not require an API key; a placeholder is used automatically.\n// Default model: \"llama3.2\". Override with [coreopenai.WithModel].\nfunc NewOllama(opts ...coreopenai.Option) (*coreopenai.Client, error) {\n\tbase := []coreopenai.Option{\n\t\tcoreopenai.WithBaseURL(OllamaBaseURL),\n\t\tcoreopenai.WithAPIKey(\"ollama\"), // Ollama ignora o valor da key\n\t\tcoreopenai.WithModel(\"llama3.2\"),\n\t}\n\treturn coreopenai.NewClient(append(base, opts...)...)\n}\n\n// NewGroq creates a client for the Groq API.\n// Set GROQ_API_KEY in the environment or pass [coreopenai.WithAPIKey].\n// Default model: \"llama-3.3-70b-versatile\".\nfunc NewGroq(opts ...coreopenai.Option) (*coreopenai.Client, error) {\n\tbase := []coreopenai.Option{\n\t\tcoreopenai.WithBaseURL(GroqBaseURL),\n\t\tcoreopenai.WithModel(\"llama-3.3-70b-versatile\"),\n\t}\n\treturn coreopenai.NewClient(append(base, opts...)...)\n}\n\n// NewTogether creates a client for Together AI.\n// Set TOGETHER_API_KEY in the environment or pass [coreopenai.WithAPIKey].\n// Default model: \"meta-llama/Meta-Llama-3.1-70B-Instruct-Turbo\".\nfunc NewTogether(opts ...coreopenai.Option) (*coreopenai.Client, error) {\n\tbase := []coreopenai.Option{\n\t\tcoreopenai.WithBaseURL(TogetherBaseURL),\n\t\tcoreopenai.WithModel(\"meta-llama/Meta-Llama-3.1-70B-Instruct-Turbo\"),\n\t}\n\treturn coreopenai.NewClient(append(base, opts...)...)\n}\n\n// NewMistral creates a client for the Mistral AI API.\n// Set MISTRAL_API_KEY in the environment or pass [coreopenai.WithAPIKey].\n// Default model: \"mistral-large-latest\".\nfunc NewMistral(opts ...coreopenai.Option) (*coreopenai.Client, error) {\n\tbase := []coreopenai.Option{\n\t\tcoreopenai.WithBaseURL(MistralBaseURL),\n\t\tcoreopenai.WithModel(\"mistral-large-latest\"),\n\t}\n\treturn coreopenai.NewClient(append(base, opts...)...)\n}\n\n// NewDeepSeek creates a client for the DeepSeek API.\n// Set DEEPSEEK_API_KEY in the environment or pass [coreopenai.WithAPIKey].\n// Default model: \"deepseek-chat\".\nfunc NewDeepSeek(opts ...coreopenai.Option) (*coreopenai.Client, error) {\n\tbase := []coreopenai.Option{\n\t\tcoreopenai.WithBaseURL(DeepSeekBaseURL),\n\t\tcoreopenai.WithModel(\"deepseek-chat\"),\n\t}\n\treturn coreopenai.NewClient(append(base, opts...)...)\n}\n\n// NewCustom creates a client for any OpenAI-compatible endpoint.\n// baseURL must include the path prefix (e.g., \"http://host:port/v1\").\nfunc NewCustom(baseURL string, opts ...coreopenai.Option) (*coreopenai.Client, error) {\n\tbase := []coreopenai.Option{coreopenai.WithBaseURL(baseURL)}\n\treturn coreopenai.NewClient(append(base, opts...)...)\n}\n"}, "48d9337708d726c4457aa3ada0d55b0beb8cb9bc": {"t": 1785759785.1033962, "n": 3723, "h": "bf24e2b0d9478481", "c": "// Package compat provides pre-configured clients for OpenAI-compatible AI providers:\n// Ollama (local), Groq, Together AI, Mistral, DeepSeek, and any custom endpoint.\n//\n// These clients reuse 100% of the openai provider implementation — only the\n// base URL and default model differ. No code is duplicated.\n//\n// # Installation\n//\n//\tgo get github.com/brunoochoa/goai/providers/compat\n//\n// # Example: Ollama (local, no API key required)\n//\n//\tclient, _ := compat.NewOllama()\n//\tresp, err := client.Chat(ctx, core.Request{\n//\t Messages: []core.Message{core.UserMessage(\"Olá!\")},\n//\t})\n//\n// # Example: Groq\n//\n//\t// Set GROQ_API_KEY in the environment first.\n//\tclient, err := compat.NewGroq(openai.WithAPIKey(os.Getenv(\"GROQ_API_KEY\")))\npackage compat\n\nimport (\n\tcoreopenai \"github.com/brunoochoa/goai/providers/openai\"\n)\n\n// Known base URLs for popular OpenAI-compatible providers.\nconst (\n\tOllamaBaseURL = \"http://localhost:11434/v1\"\n\tGroqBaseURL = \"https://api.groq.com/openai/v1\"\n\tTogetherBaseURL = \"https://api.together.xyz/v1\"\n\tMistralBaseURL = \"https://api.mistral.ai/v1\"\n\tDeepSeekBaseURL = \"https://api.deepseek.com/v1\"\n)\n\n// NewOllama creates a client for a local Ollama instance.\n// Ollama does not require an API key; a placeholder is used automatically.\n// Default model: \"llama3.2\". Override with [coreopenai.WithModel].\nfunc NewOllama(opts ...coreopenai.Option) (*coreopenai.Client, error) {\n\tbase := []coreopenai.Option{\n\t\tcoreopenai.WithBaseURL(OllamaBaseURL),\n\t\tcoreopenai.WithAPIKey(\"ollama\"), // Ollama ignora o valor da key\n\t\tcoreopenai.WithModel(\"llama3.2\"),\n\t}\n\treturn coreopenai.NewClient(append(base, opts...)...)\n}\n\n// NewGroq creates a client for the Groq API.\n// Set GROQ_API_KEY in the environment or pass [coreopenai.WithAPIKey].\n// Default model: \"llama-3.3-70b-versatile\".\nfunc NewGroq(opts ...coreopenai.Option) (*coreopenai.Client, error) {\n\tbase := []coreopenai.Option{\n\t\tcoreopenai.WithBaseURL(GroqBaseURL),\n\t\tcoreopenai.WithModel(\"llama-3.3-70b-versatile\"),\n\t}\n\treturn coreopenai.NewClient(append(base, opts...)...)\n}\n\n// NewTogether creates a client for Together AI.\n// Set TOGETHER_API_KEY in the environment or pass [coreopenai.WithAPIKey].\n// Default model: \"meta-llama/Meta-Llama-3.1-70B-Instruct-Turbo\".\nfunc NewTogether(opts ...coreopenai.Option) (*coreopenai.Client, error) {\n\tbase := []coreopenai.Option{\n\t\tcoreopenai.WithBaseURL(TogetherBaseURL),\n\t\tcoreopenai.WithModel(\"meta-llama/Meta-Llama-3.1-70B-Instruct-Turbo\"),\n\t}\n\treturn coreopenai.NewClient(append(base, opts...)...)\n}\n\n// NewMistral creates a client for the Mistral AI API.\n// Set MISTRAL_API_KEY in the environment or pass [coreopenai.WithAPIKey].\n// Default model: \"mistral-large-latest\".\nfunc NewMistral(opts ...coreopenai.Option) (*coreopenai.Client, error) {\n\tbase := []coreopenai.Option{\n\t\tcoreopenai.WithBaseURL(MistralBaseURL),\n\t\tcoreopenai.WithModel(\"mistral-large-latest\"),\n\t}\n\treturn coreopenai.NewClient(append(base, opts...)...)\n}\n\n// NewDeepSeek creates a client for the DeepSeek API.\n// Set DEEPSEEK_API_KEY in the environment or pass [coreopenai.WithAPIKey].\n// Default model: \"deepseek-chat\".\nfunc NewDeepSeek(opts ...coreopenai.Option) (*coreopenai.Client, error) {\n\tbase := []coreopenai.Option{\n\t\tcoreopenai.WithBaseURL(DeepSeekBaseURL),\n\t\tcoreopenai.WithModel(\"deepseek-chat\"),\n\t}\n\treturn coreopenai.NewClient(append(base, opts...)...)\n}\n\n// NewCustom creates a client for any OpenAI-compatible endpoint.\n// baseURL must include the path prefix (e.g., \"http://host:port/v1\").\nfunc NewCustom(baseURL string, opts ...coreopenai.Option) (*coreopenai.Client, error) {\n\tbase := []coreopenai.Option{coreopenai.WithBaseURL(baseURL)}\n\treturn coreopenai.NewClient(append(base, opts...)...)\n}\n"}}}}