summaryrefslogtreecommitdiff
path: root/src/ai/ai.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/ai/ai.ts')
-rw-r--r--src/ai/ai.ts39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/ai/ai.ts b/src/ai/ai.ts
new file mode 100644
index 0000000..449effd
--- /dev/null
+++ b/src/ai/ai.ts
@@ -0,0 +1,39 @@
+import { createOpenAI } from "@ai-sdk/openai";
+import { LanguageModel } from "ai";
+import { ollama } from "ollama-ai-provider-v2";
+import { logger } from "../lib/pino";
+
+const isProduction = process.env.NODE_ENV === "production";
+
+logger.info(
+ { environment: process.env.NODE_ENV, isProduction },
+ "Initializing AI model",
+);
+
+/**
+ * The language model used throughout the app.
+ * Uses OpenAI in production, Ollama locally for dev.
+ */
+export const model: LanguageModel = isProduction
+ ? (() => {
+ logger.info(
+ {
+ baseURL: process.env.OPENAI_API_BASE_URL,
+ model: process.env.OPENAI_MODEL_NAME,
+ },
+ "Using OpenAI model for production",
+ );
+ return createOpenAI({
+ apiKey: process.env.OPENAI_API_KEY!,
+ baseURL: process.env.OPENAI_API_BASE_URL!,
+ })(process.env.OPENAI_MODEL_NAME!);
+ })()
+ : (() => {
+ logger.info(
+ { model: "dolphin-phi" },
+ "Using Ollama model for development",
+ );
+ return ollama("dolphin-phi");
+ })();
+
+logger.info("AI model initialized successfully");